Hari ini, kita akan menghitung fungsi biner yang paling efisien. Lebih khusus lagi, kita akan menghitung fungsi yang, ketika ekspresi dibuat dari penerapan fungsi ke input konstan 0 atau outputnya sendiri, dapat mewakili semua bilangan bulat positif dengan ekspresi sesingkat mungkin, menempatkan prioritas yang lebih tinggi pada bilangan bulat yang lebih kecil.
Fungsi ini dibangun sebagai berikut:
Untuk setiap integer, mulai dari 1 dan naik ke atas, pilih ekspresi terpendek yang belum kami tetapkan untuk output, dan buat integer itu output dari ekspresi itu. Ikatan dalam panjang ekspresi akan dipecah oleh argumen kiri yang lebih kecil, dan kemudian oleh argumen kanan yang lebih kecil. Begini cara kerjanya:
Awalnya, 1 tidak ditugaskan. Ekspresi unassigned terpendek adalah
f(0, 0)
, jadi kami akan menetapkan itu menjadi 1.Sekarang, 2 tidak ditugaskan. Ekspresi unassigned terpendek adalah
f(f(0, 0), 0)
=f(1, 0)
danf(0, f(0, 0))
=f(0, 1)
. Ikatan dipecah menjadi argumen kiri yang lebih kecil, jadif(0, 1) = 2
.Ekspresi unassigned terpendek yang tersisa adalah
f(f(0, 0), 0)
=f(1, 0)
, jadif(1, 0) = 3
.Sekarang, kita kehabisan ekspresi dengan hanya 2
f
detik dan 30
detik, jadi kita harus menambahkan satu lagi masing-masing. Memutus ikatan dengan argumen kiri, lalu argumen kanan, kita dapatkanf(0, 2) = 4
, sejak ituf(0, f(0, f(0, 0))) = f(0, f(0, 1)) = f(0, 2)
.Melanjutkan, kita memiliki
f(0, 3) = 5
,f(1, 1) = 6
,f(2, 0) = 7
,f(3, 0) = 8
,f(0, 4) = 9
, ...
Inilah tabel yang saya isi untuk beberapa nilai pertama:
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
Cara lain untuk melihatnya adalah bahwa setiap output memiliki ukuran, sama dengan jumlah ukuran inputnya ditambah satu. Tabel diisi sesuai dengan peningkatan ukuran output, ikatan rusak dengan meminimalkan input kiri kemudian input kanan.
Tantangan Anda adalah, diberi dua bilangan bulat non-negatif sebagai input, menghitung dan menampilkan nilai fungsi ini. Ini golf kode. Solusi terpendek, dalam byte, menang. Celah standar dilarang.
((0, (0, (0, 0))), 0)
secara leksikografis lebih kecil dari (((0, 0), 0), (0, 0))
, namun yang kedua memiliki sisi kiri yang lebih kecil.