Poniżej opisano dwa sugerowane rozwiązania: jedno pełne rozwiązanie pytania wymagające dużej liczby bajtów i drugie częściowe rozwiązanie (rozwiązanie tylko części N + N i N * N , wymagające tylko 484 bajtów), każde przyjmujące inne podejście i własne zestaw fajnych sztuczek! :)
1. Pełne rozwiązanie (810147050 bajtów)
Korzystanie TovTovTov(TOV='hi',SEP=','), te TOVelementy są odporne na powielania znaków w miejscu (zarówno "hihihi"i "hhiihhiihhii"trzy "hi"s w nich, a wszystko TovTovTovtroszczy się o to, jak wiele TOVs pojawiają się między SEPs).
Gdybyśmy użyli SEP=', ', cały program byłby odporny na powielanie postaci (co jest fajne, ale nie rozwiąże pytania). Więc korzystamy SEP=','.
"hihihi,hi"Na przykład program kompiluje się do tablicy ints [3,1], podczas gdy "hhiihhiihhii,,hhii"kompiluje się do [3,0,1]i "hhiihhiihhii,,hhii"do [3,0,0,1]. Oznacza to, że same polecenia nie zmieniają swojego znaczenia po powieleniu, ale ogólna długość zmienia się wraz z powielaniem znaków. Poniższa rozwiązanie odpytuje długość programu i używa tego do zdecydować, czy drukować N+N, N*Nlub N^N.
Sugerowane pełne rozwiązanie, jako tablica ints, to: [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]
Jako ciąg jest to dość długi program, składający się z 810147050 znaków, zaczynający się od:
hihihihihihi,hihihihihihihihihihihihi,hihihihihihihihihi,hihihihihihihihihihihihihihihihihihi,hihihihihihihihihi,hihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihih...
2. Rozwiązywanie tylko części N + N i N * N pytania (484 bajty)
Używając TovTovTov(TOV='1',SEP=', '), tym razem SEPs są odporne na duplikację ( ",, "wciąż ma tylko jedną ", "), więc następujące sugerowane rozwiązanie będzie zawsze zawierało 33 polecenia, nawet po duplikacji znaków:
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
Odpowiednia tablica ints (liczba TOVs ( 1s) w każdym z 33 powyższych poleceń) jest następująca:[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]
Powielenie znaków w miejscu daje listę 33 zupełnie różnych poleceń :
[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]
Oryginalny ints array (który oblicza N + N ) został zaprojektowany dokładnie tak, że po polecenia zmienić swoje znaczenie, program nadal ma sens, ale oblicza N * N . Na przykład pierwsza 4(która TovTovTovrozumie jako „traktuj następną operację jako kod ascii do konwersji na znak”) zmienia się po powieleniu znaku na 8, co jest zupełnie inną komendą („zmień licznik programu na pierwszą wyskakującą wartość z stos, jeśli wartość pojawiła się bezpośrednio po wartości „prawda”).