TovTovTov (eine Mutation von Chicken ): 810147050 Bytes
Im Folgenden werden zwei Lösungsvorschläge beschrieben: Eine vollständige Lösung für die Frage, die viele Bytes erfordert, und eine zweite Teillösung (Lösen nur der Teile N + N und N * N , die nur 484 Bytes erfordern), die jeweils einen anderen Ansatz verfolgen Reihe von coolen Tricks! :)
1. Vollständige Lösung (810147050 Bytes)
Unter Verwendung TovTovTov(TOV='hi',SEP=',')
, die TOV
Elemente immun gegen die Duplizieren Zeichen anstelle (beide "hihihi"
und "hhiihhiihhii"
haben drei "hi"
s in ihnen, und alle TovTovTov
kümmern sich um sind , wie viele TOV
s zwischen erscheinen SEP
s).
Wenn wir es verwenden würden SEP=', '
, wäre das gesamte Programm immun gegen Zeichenverdopplungen (was cool ist, aber die Frage nicht löst). Also benutzen wir SEP=','
.
So "hihihi,hi"
kompiliert das Programm zum Beispiel in das ints-Array [3,1]
, während es "hhiihhiihhii,,hhii"
in [3,0,1]
und "hhiihhiihhii,,hhii"
in kompiliert [3,0,0,1]
. Dies bedeutet, dass die Befehle selbst nach dem Duplizieren ihre Bedeutung nicht ändern, die Gesamtlänge ändert sich jedoch mit dem Duplizieren von Zeichen. Die unten stehende Lösung fragt die Länge des Programms ab und verwendet diese, um zu entscheiden, ob oder gedruckt werden N+N
soll .N*N
N^N
Die vorgeschlagene vollständige Lösung lautet wie folgt: [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]
Als Zeichenfolge ist es ein ziemlich langes Programm, bestehend aus 810147050 Zeichen, beginnend mit:
hihihihihihi,hihihihihihihihihihihihi,hihihihihihihihihi,hihihihihihihihihihihihihihihihihihi,hihihihihihihihihi,hihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihih...
2. Lösen nur der N + N und N * N Teile der Frage (484 Bytes)
Wenn Sie TovTovTov(TOV='1',SEP=', ')
diesmal " SEP
s" verwenden, sind die s immun gegen Duplizierung (es ist ",, "
immer noch nur eine enthalten ", "
). Die folgende vorgeschlagene Lösung enthält also immer 33 Befehle, auch nach der Duplizierung von Zeichen:
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
Das entsprechende ints-Array (die Anzahl der TOV
s ( 1
s) in jedem der obigen 33 Befehle) lautet wie folgt:[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]
Das Duplizieren der Zeichen an Ort und Stelle führt zu einer Liste von 33 völlig unterschiedlichen Befehlen :
[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]
Das ursprüngliche ints-Array (das N + N berechnet ) wurde sorgfältig entworfen , damit das Programm nach dem Ändern der Bedeutung der Befehle noch Sinn macht, aber N * N berechnet . Zum Beispiel ändert sich der erste 4
(der TovTovTov
als "Behandle die nächste Operation als ASCII-Code, der in ein Zeichen konvertiert werden soll" verstanden wird) nach dem Duplizieren von Zeichen in 8
, was ein völlig anderer Befehl ist ("ändere den Programmzähler auf den ersten aus dem angezeigten Wert stapeln, wenn der unmittelbar folgende Wert true ist ").