Знайдіть незв’язане число


20

З урахуванням 2 невід’ємних цілих чисел як вхідних даних, виведіть невід’ємне ціле число, яке неможливо створити через жодні математичні оператори на 2 входи.

Наприклад, якщо вхідні сигнали 2і 3, 6, 0, 5, 1, 9, 8, 23, 2всі недійсні виходи.

Операції, які необхідно враховувати:

Addition        (a + b)
Subtraction     (a - b) and (b - a)
Multiplication  (a * b)
Division        (a / b) and (b / a)
Modulus         (a % b) and (b % a)
Exponentiation  (a ** b) and (b ** a)
Bitwise OR      (a | b)
Bitwise XOR     (a ^ b)
Bitwise AND     (a & b)
Concatenation   (a.toString() + b.toString()) and (b.toString() + a.toString())

У випадках, коли операція призведе до не цілого числа (наприклад, 2/3), завжди поверховий. Так2 / 3 = 0

Припустимо, що будь-які недійсні операції (наприклад, ділення на 0) призводять до 0.

Вхідні дані

2 невід’ємні цілі числа.

Стандартні методи вводу / виводу приймаються

Ви можете припустити, що введення завжди буде в межах доступного для вашої мови мови, однак пам’ятайте, що стандартні лазівки все ще застосовуються.

Вихідні дані

Будь-яке невід'ємне ціле число, яке неможливо створити за допомогою будь-якої з перерахованих вище операцій на 2 входах.

Тестові шафи

Input  -> Invalid outputs
2, 3   -> 0, 1, 2, 3, 5, 6, 8, 9, 23, 32
0, 0   -> 0
17, 46 -> 0, 2, 12, 17, 29, 63, 782, 1746, 4617, 18487710785295216663082172416, 398703807810572411498315063055075847178723756123452198369
6, 6   -> 0, 1, 6, 12, 36, 66, 46656
1, 1   -> 0, 1, 2, 11

Оцінка балів

Це тому виграє найменше байтів!



Я думаю, що один із способів вирішити це - знайти якесь просте число, яке перевищує (a + b)
Dead Possum

1
@DeadPossum, безумовно, було б вірним рішенням, хоча, мабуть, не єдиним або найголовнішим;)
Skidsdev

Б'юсь об заклад, що є якась модна мова, яка може це робити в парі байтів: D
Dead Possum

Відповіді:


20

Сітківка , 3 байти

.
1

Спробуйте в Інтернеті!

Бере введення, розділене пробілом (або будь-який один символ, що не є новим рядком)

Замінює всі цифри на 1і з'єднує отримані числа з іншими 1.

Доказ правильності

З люб’язності Мартіна Ендера


технічно це не є об'єднання отриманих чисел з іншими 1, це просто прийняття введення як рядок з двох проміжків, розділених пробілом, і заміна кожного символу на 1. Але, маючи на увазі, я не можу знайти жодних прикладів, які б довели, що ви неправильні. .. поки
Скідсдев

@Mayube, звичайно, це робить, і як такий він може працювати з будь-яким рядком, не лише одним, складеним з двох чисел, розділених одним пробілом. Моє пояснення в частині абстракції "два вхідні числа".
Лев

2
"Адже відомо [sic] [...], що повторне з'єднання в базі 10 не може [...] бути ідеальною силою". Жодна операція в даному списку, окрім експоненції, не може призвести до отримання більше цифр, ніж загальна кількість вхідних цифр, тому це має бути дійсним.
Мартін Ендер

Ти, зухвалий клопіт! +1
Фонд позову Моніки

Працює і в QuadR !
Адам

11

Желе , 3 байти

+Æn

Спробуйте в Інтернеті!

Пояснення:

+Æn Arguments: x, y
+                            x + y.
 Æn Find a prime larger than

Я думаю, що це справедливо ...
Ерік Атголфер

Я припускаю, що це підсумовує вхід і виводить перший простір більше, ніж сума?
Скидсдев

1
@DeadPossum я збирався написати його. Сподіваюсь, я добре його пограв у гольф.
Ерік Аутгольфер

1
Постулат Бертран повинен бути майже достатньо хорошим, щоб довести твори конкатенації. Сполучаючи з меншим числом b праворуч, ми маємо a..b> = 10a> 4a> 2 (a + b), а сполучаючи з меншим числом b зліва, ми маємо b..a> (b + 1) а. Єдиним не малим цікавим випадком тут має бути b = 1, де маємо 1..a> 2a = 2 (a + b) - 2. Місце, де ця межа є найміцнішою, для a = 9 .... 9. Це єдиний не малий випадок, який може бути проблемою для постулату Бертранда. Однак є кращі результати, такі як mathoverflow.net/questions/2724
tehtmi

1
Думаю, є версія постулату Бертран, що свідчить про n <p <2n - 2, яка повинна працювати на все. Я думав, що n <p <2n.
tehtmi

9

Python 2 , 8 байт

'1'.join

Спробуйте в Інтернеті!

Приймає список двох рядків чисел як вхідних даних, виводить один рядок чисел. З’єднайте числа з 1серединою.

Результат має занадто багато цифр для нічого, крім показника. Зверніть увагу , що вихід для (x,y)має ще одну цифру , ніж xта в yпоєднанні, якщо xабо yдорівнює 0. Для показника, ми перевіряємо , ми перевіряємо , що це означає x**yне відповідає.

  • Якщо xдорівнює 0 або 1, то це так x**y, що занадто мало
  • Якщо y<=1, то x**y<=xзанадто мало
  • Якщо y==2, то x**2має бути ще дві цифри, ніж x. Це відбувається до x=316, і ми не можемо перевірити жодну з цих робіт.
  • Якщо y==3, то x**3має бути ще дві цифри, ніж x. Це трапляється до x=21. Ми можемо перевірити, що жодне з цих не працює.
  • Якщо 3<y<13, то x**yшвидко стає занадто довго. Це лише правдоподібна кількість потрібних цифр x<=25, і ми можемо перевірити їх.
  • Якщо y>=14, то x**yзанадто довго навіть для найменшого можливого x==2.

7

CJam (7 символів)

{+))m!}

Це створює число, (a+b+2)!яке більше, ніж найбільше пов'язане число майже у всіх випадках.

Це досить очевидно , що найбільше число пов'язаних повинен бути один з a ** b, b ** a, concat(a, b), concat(b, a).

Якщо ми розглядаємо логарифми, то знаходимо це

  • log(a ** b) = b log a
  • log(concat(a, b)) ~= (log a) + log (b)
  • log((a + b + 2)!) ~= (a + b + 2) log (a + b + 2) - (a + b + 2)

Таким чином, асимптотично вона більша, і нам потрібно хвилюватися лише про кілька невеликих випадків. Насправді, єдиний випадок, для якого вихідне значення не більше всіх пов'язаних чисел, є 0, 1(або 1, 0), для якого воно дає 6і найбільше пов'язане число 10.


3

JavaScript (ES6), 15 байт

Здійснює введення в синтаксис currying.

a=>b=>a*a+b*b+2

a² + b² + 1 не вдасться для багатьох записів, таких як 3² + 5² + 1 = 35 або 7² + 26² + 1 = 726 (конкатенація). a² + b² + 2 має бути безпечним. Це було вичерпно перевірено на 0 ≤ a ≤ b ≤ 50000 .

Демо


1
Це повинно бути захищено від конкатенації. Нехай b - число, з'єднане праворуч. Закріпивши b, ми можемо вирішити квадратичне рівняння для a: a ^ 2 + b ^ 2 + 2 - 10 ^ k * a - b = 0. Дискримінант квадратику повинен бути ідеальним квадратом, щоб це рівняння мало ціле рішення . Дискримінант 10 ^ 2k - 4 (b ^ 2 - b + 2) = 10 ^ 2k - (2b - 1) ^ 2 - 7. Розглянемо модуль 9. k не має значення, і ми ніколи не отримаємо квадратичний залишок для жодного б.
tehtmi

3

Пітон, 115 95 79 байт

Дурне відверте рішення. Не соромтеся перевершити мене.

x,y=input()
f=lambda x,y:[x+y,x*y,x**y,int(`x`+`y`)]
print max(f(x,y)+f(y,x))+1

+12 байт через дурний x/0.
-20 байт завдяки @RobinJames
-16 байт завдяки @tehtmi


x / y, якщо y else 0 буде менше або дорівнює x * y для x, y негативно, тому я думаю, ви можете мати ці 12 байт назад, а ще 3
Робін Джеймс Керрісон

@RobinJames Ах так, я німий. Спасибі.
HyperNeutrino

1
Я думаю, ви повинні мати змогу видалити більше справ: 1) x - y <= x <= x + y; 2) х% у <= у <= х + у; 3,4,5) х | y = x ^ y + x & y <= x ^ y + 2 * (x & y) = x + y. (Для цього останнього, XOR - це як додати без перенесення, і AND знаходить біти, які перенесуть. АБО беруть (1, 1) -> 1 замість (1,1) -> 2, як у реальному додаванні.)
tehtmi

2

Пітон, 27 байт

lambda a,b:(a+b+9)**(a+b+9)

Виводить число, що перевищує всі відповідні числа.

Спробуйте в Інтернеті!

-1 байт завдяки Kevin Cruijssen.
-2 байти завдяки Dead Possum.


Ваше TIO-посилання порожнє. Крім того, я думаю, ви можете прибрати простір після, :якщо я не помиляюся.
Кевін Круїссен

@KevinCruijssen Whoops, виправив це, дякую!
Ankoganit

Можна видалити f=- безіменна лямбда прийнятна
Dead Possum

@DeadPossum Не знав цього, дякую!
Анкоганіт

Ви, напевно, могли б позбутися хоча б однієї з двох дев'яток (і відповідної +), але я не зовсім впевнений.
Тео

2

Python 2, 25 байт

lambda x,y:int(`x`+`y`)+3

З’єднує і додає 3

Спробуйте в Інтернеті


Чи працює це, якщо x і y обидва 3?
Роберт Бенсон

@RobertBenson Якщо так робити, afaik ви не можете зробити 36 з 3 та 3
Skidsdev

Мені це, мабуть, здається нормально. Зворотна конкатенація повинна мати інший модуль залишку 9. Для експоненціації слід розглянути лише обмежене число випадків, перш ніж результат експоненції має занадто багато цифр у відповідності з відповіді Python xnor. Я не бачив жодних конфліктів (ні за +1, хоча +2 має 2 ** 6 = 62 + 2).
tehtmi

@tehtmi +1 не вдається на x = y = 0 Спробуйте в Інтернеті тести посилань для всіх комбінацій x і y в діапазоні [0,400]
TFeld

2

JS (ES6), 12 байт

x=>x.join`1`

Той самий алгоритм, що і відповідь цього пітона . Приймає введення як масив ints.



1

Python 2 , 19 байт

lambda x,y:x+9<<y+9

Спробуйте в Інтернеті!

Я майже впевнений, що зміна бітів працює у всіх випадках, але я не на 100%. У будь-якому випадку, це економить кілька байт у версії експоненції.




1

QBIC , 8 байт

Людина, так багато класних способів просто взяти ці цифри і отримати незв'язане число. Мені просто довелося спробувати кілька, щоб побачити, як QBIC буде йти в ногу. Найкоротший - це порт відповіді Python xnor, об'єднуючи числа з 1 в середині:

?;+@1`+;

Усі, порт Сітківки Лева, відповідають:

[0,_l;|+_l;||Z=Z+@1

Пошук наступного більшого розквіту:

c=:+:+1≈µc|+1|c=c+1]?c



1

05AB1E , 2 4 байти

+ØDm

Спробуйте в Інтернеті!

Те саме, що відповідь Желе, знаходить пріоритет після суми. На один байт коротше :)

EDIT : Тепер піднімає його на власні сили, щоб вистачити на виняток.


Насправді не той самий алгоритм, це знаходить a+bперший прайм, в той час як мій знаходить найменший прайм більше, ніж a+b.
Ерік Аутгольфер

Так чи інакше, це має працювати.
Ніл А.

3
Не вдається для 6443, 3 (що дає простим 64433, конкатенацію).
tehtmi

@tehtmi вірно, це не вдається.
Скидсдев

Дивіться мою редакцію, має працювати зараз
Ніл А.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.