TovTovTov (una mutazione del pollo ): 810147050 byte
Di seguito sono descritte due soluzioni suggerite: una soluzione completa alla domanda che richiede molti byte e una seconda soluzione parziale (risolvendo solo le parti N + N e N * N , che richiedono solo 484 byte), ognuna con un approccio diverso e una propria insieme di trucchi interessanti! :)
1. Soluzione completa (810147050 byte)
Usando TovTovTov(TOV='hi',SEP=',')
, gli TOV
elementi sono immuni alla duplicazione dei personaggi in atto (entrambi "hihihi"
e "hhiihhiihhii"
hanno tre se "hi"
in essi, e tutto ciò che TovTovTov
importa è quanti TOV
s appaiono tra SEP
i).
Se lo usassimo SEP=', '
, l'intero programma sarebbe immune alla duplicazione dei personaggi (il che è interessante, ma non risolverà la domanda). Quindi usiamo SEP=','
.
Quindi il programma "hihihi,hi"
, ad esempio, si compila nell'array ints [3,1]
, mentre si "hhiihhiihhii,,hhii"
compila da [3,0,1]
e "hhiihhiihhii,,hhii"
verso [3,0,0,1]
. Ciò significa che i comandi stessi non cambiano il loro significato dopo la duplicazione, ma la lunghezza complessiva cambia con la duplicazione dei caratteri. La soluzione qui di seguito interroga la durata del programma e la utilizza per decidere se stampare N+N
, N*N
o N^N
.
La soluzione completa suggerita, come ints array, è: [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]
Come stringa, è un programma piuttosto lungo, composto da 810147050 caratteri, che inizia con:
hihihihihihi,hihihihihihihihihihihihi,hihihihihihihihihi,hihihihihihihihihihihihihihihihihihi,hihihihihihihihihi,hihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihih...
2. Risolvere solo le parti N + N e N * N della domanda (484 byte)
Usando TovTovTov(TOV='1',SEP=', ')
, questa volta le SEP
s sono immuni alla duplicazione ( ",, "
ne ha ancora solo una ", "
), quindi la seguente soluzione suggerita avrà sempre 33 comandi, anche dopo la duplicazione dei caratteri:
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
La matrice ints corrispondente (il numero di TOV
s ( 1
s) in ciascuno dei 33 comandi sopra) è la seguente:[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]
La duplicazione dei caratteri sul posto risulta in un elenco di 33 comandi totalmente diversi :
[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]
L'array int originale (che calcola N + N ) creata con cura in modo che dopo i comandi cambiano il loro significato, il programma ha ancora senso, ma calcola N * N . Ad esempio, il primo 4
(che TovTovTov
capisce come "tratta l'operazione successiva come un codice ASCII da convertire in un carattere") cambia dopo la duplicazione del carattere 8
, che è un comando totalmente diverso ("cambia il Contatore del programma al primo valore spuntato dal stack, se il valore visualizzato immediatamente dopo è vero ").