Dijelaskan di bawah ini adalah dua solusi yang disarankan: Satu solusi penuh untuk pertanyaan yang membutuhkan banyak byte, dan solusi parsial kedua (hanya menyelesaikan bagian N + N dan N * N , hanya membutuhkan 484 byte), masing-masing mengambil pendekatan yang berbeda dan sendiri. mengatur trik keren! :)
1. Solusi lengkap (810147050 byte)
Dengan menggunakan TovTovTov(TOV='hi',SEP=',')
, TOV
elemen-elemen tersebut kebal terhadap duplikasi karakter di tempat (keduanya "hihihi"
dan "hhiihhiihhii"
memiliki tiga "hi"
di dalamnya, dan semua yang TovTovTov
peduli adalah berapa banyak TOV
yang muncul di antara SEP
s).
Jika kami menggunakan SEP=', '
, seluruh program akan kebal terhadap duplikasi karakter (yang keren, tetapi tidak akan menyelesaikan pertanyaan). Jadi kami gunakan SEP=','
.
Jadi program "hihihi,hi"
, misalnya, mengkompilasi ke array ints [3,1]
, sementara "hhiihhiihhii,,hhii"
mengkompilasi ke [3,0,1]
dan "hhiihhiihhii,,hhii"
ke [3,0,0,1]
. Ini berarti bahwa perintah itu sendiri tidak mengubah maknanya setelah duplikasi, tetapi panjang keseluruhan berubah dengan duplikasi karakter. Solusi di bawah ini menanyakan panjang program dan menggunakannya untuk memutuskan apakah akan mencetak N+N
, N*N
atau N^N
.
Solusi lengkap yang disarankan, sebagai array ints, adalah: [6, 12, 9, 18, 9, 142, 11, 38, 8, 9, 260, 11, 73, 8, 22, 75, 7, 10, 14, 3, 1, 22, 24, 18, 15, 8, 10, 16, 3, 1, 22, 24, 18, 15, 8, 10, 45, 16, 7, 22, 3, 1, 22, 24, 18, 15, 8, 22, 3, 1, 22, 24, 18, 15, 8, 25, 3, 1, 22, 24, 18, 15, 8, 48, 3, 1, 22, 24, 18, 15, 8, 277, 3, 1, 22, 24, 18, 15, 8, 3146, 3, 1, 22, 24, 18, 15, 8, 46677, 3, 1, 22, 24, 18, 15, 8, 823564, 3, 1, 22, 24, 18, 15, 8, 16777237, 3, 1, 22, 24, 18, 15, 8, 387420510, 3, 1, 22, 24, 18, 15, 8]
Sebagai string, ini adalah program yang cukup panjang, terdiri dari 810147050 karakter, dimulai dengan:
hihihihihihi,hihihihihihihihihihihihi,hihihihihihihihihi,hihihihihihihihihihihihihihihihihihi,hihihihihihihihihi,hihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihih...
2. Memecahkan hanya bagian-bagian N + N dan N * N dari pertanyaan (484 bytes)
Menggunakan TovTovTov(TOV='1',SEP=', ')
, kali ini SEP
s kebal terhadap duplikasi ( ",, "
masih memiliki hanya satu ", "
di dalamnya), sehingga solusi yang disarankan berikut akan selalu memiliki 33 perintah di dalamnya, bahkan setelah duplikasi karakter:
1111, 111111111111111111111111111111111111111111111111, 1111111111, 1111111111, 1111111111, 111111, 111111111111, 111111111, 11111111111111, 111, 1, 1111111111111111111111, 111111111111111111111111, 111111111111111111, 111111111111111, 11111111, 111111111111, 1111111111111111, 111111111111111, 1111111111111111111111, 111111111111111111111111111111111111, 11, 1111111111111111111111111111, 111111, 111, 111111, 11111111111, 111111111111111111111111111, 1111, 1, 11111111, 1, 11111111
The int array yang sesuai (jumlah TOV
s ( 1
s) di masing-masing 33 perintah di atas) adalah sebagai berikut:[4,48,10,10,10,6,12,9,14,3,1,22,24,18,15,8,12,16,15,22,36,2,28,6,3,6,11,27,4,1,8,1,8]
Duplikasi karakter di tempat menghasilkan daftar 33 perintah yang sama sekali berbeda :
[8,96,20,20,20,12,24,18,28,6,2,44,48,36,30,16,24,32,30,44,72,4,56,12,6,12,22,54,8,2,16,2,16]
Asli int array (yang menghitung N + N ) dirancang dengan hati-hati sehingga setelah perintah mengubah maknanya, program ini masih masuk akal, tapi menghitung N * N . Misalnya, yang pertama 4
(yang TovTovTov
dipahami sebagai "memperlakukan op selanjutnya sebagai kode ascii untuk dikonversi ke karakter") berubah setelah duplikasi karakter menjadi 8
, yang merupakan perintah yang sama sekali berbeda ("ubah Program Counter ke nilai yang muncul pertama dari stack, jika nilai muncul segera setelah benar ").