Сьогодні ми будемо обчислювати найбільш ефективну бінарну функцію. Більш конкретно, ми будемо обчислювати функцію, яка, коли вираз створюється від застосування функції до постійного вводу 0 або власного виводу, може представляти всі додатні цілі числа з найкоротшими можливими виразами, надаючи більш високий пріоритет меншим цілим числам.
Ця функція будується так:
Для кожного цілого числа, починаючи з 1 і піднімаючи вгору, вибираємо найкоротший вираз, якому ми ще не призначили вихід, і робимо це ціле число результатом цього виразу. Прив’язки довжини виразу будуть розбиті на менший лівий аргумент, а потім на менший правий аргумент. Ось як це працює:
Спочатку 1 не призначено. Найкоротший непризначений вираз є
f(0, 0)
, тому ми встановимо його на 1.Тепер 2 не призначено. Найкоротші непризначені вирази -
f(f(0, 0), 0)
=f(1, 0)
іf(0, f(0, 0))
=f(0, 1)
. Зв'язки розбиті на менший лівий аргумент, такf(0, 1) = 2
.Залишився найкоротший непризначений вираз
f(f(0, 0), 0)
=f(1, 0)
, значитьf(1, 0) = 3
.Тепер у нас немає виразів лише з 2
f
с і 30
с, тому нам доведеться додати ще одне з кожного. Розриваючи зв'язки лівим аргументом, потім правим аргументом, ми отримуємоf(0, 2) = 4
, оскількиf(0, f(0, f(0, 0))) = f(0, f(0, 1)) = f(0, 2)
.Продовжуючи, у нас є
f(0, 3) = 5
,f(1, 1) = 6
,f(2, 0) = 7
,f(3, 0) = 8
,f(0, 4) = 9
, ...
Ось таблиця, яку я заповнив для перших кількох значень:
0 1 2 3 4 5 6 7 8
/---------------------------
0| 1 2 4 5 9 10 11 12 13
1| 3 6 14 15 37 38 39 40 41
2| 7 16 42 43
3| 8 17 44 45
4| 18 46
5| 19 47
6| 20 48
7| 21 49
8| 22 50
Ще один спосіб поглянути на це - кожен вихід має розмір, рівний сумі розмірів його входів плюс один. Таблиця заповнюється в порядку збільшення розміру виводу, зв'язки розбиваються мінімізацією лівого вводу та правого введення.
Ваша задача полягає в тому, що ви маєте два негативних цілих числа, як вхід, обчислення та виведення значення цієї функції. Це код гольфу. Найкоротше рішення, в байтах, виграє. Стандартні лазівки заборонені.
((0, (0, (0, 0))), 0)
лексикографічно менше (((0, 0), 0), (0, 0))
, проте останній має меншу ліву частину.