Wenn Sie Ihr Programm zuerst ausführen, sollte es eine ganzzahlige Sequenz drucken. Der zweite Durchgang sollte das Lied "Mary hatte ein kleines Lamm" drucken. Der dritte Lauf sollte eine ASCII-Image-Datei erzeugen.
Wertung
Ihre Punktzahl ist die Summe Ihrer Code-Bytes und des gesamten Dateiinhalts zu Beginn jedes der drei Läufe. Die niedrigste Punktzahl gewinnt.
Zum Beispiel myprog
ist es 1500 Byte und ändert seine Größe nicht, schreibt aber bei jedem Lauf eine 4-Byte-Datei, damit es weiß, was beim nächsten Lauf zu tun ist. Die Punktzahl wäre 1500 + (1500 + 4) + (1500 + 4) = 4508.
Ausgabe
Die erste Ausgabe ist diese Folge von 133 Ganzzahlen, die durch einzelne Leerzeichen getrennt sind:
0 89 98 179 188 197 269 278 287 296 359 368 377 386 395 449 458 467 476 485
494 539 548 557 566 575 584 593 629 638 647 656 665 674 683 692 719 728
737 746 755 764 773 782 791 809 818 827 836 845 854 863 872 881 890 908
917 926 935 944 953 962 971 980 1079 1088 1097 1169 1178 1187 1196 1259
1268 1277 1286 1295 1349 1358 1367 1376 1385 1394 1439 1448 1457 1466 1475
1484 1493 1529 1538 1547 1556 1565 1574 1583 1592 1619 1628 1637 1646 1655
1664 1673 1682 1691 1709 1718 1727 1736 1745 1754 1763 1772 1781 1790 1808
1817 1826 1835 1844 1853 1862 1871 1880 1907 1916 1925 1934 1943 1952 1961
1970
Die zweite Ausgabe ist genau dieser Text (einschließlich Großbuchstaben, Interpunktion und Leerzeichen - die inkonsistente Interpunktion ist beabsichtigt):
Mary had a little lamb,
Little lamb, little lamb,
Mary had a little lamb,
Its fleece was white as snow
And everywhere that Mary went,
Mary went, Mary went,
Everywhere that Mary went
The lamb was sure to go
It followed her to school one day
School one day, school one day
It followed her to school one day
Which was against the rules.
It made the children laugh and play,
Laugh and play, laugh and play,
It made the children laugh and play
To see a lamb at school
Die dritte Ausgabe ist dieses Bild im PPM ASCII (P3) -Format, das in einer aufgerufenen Datei verbleibt
blue.ppm
. Dies ist das Bild im PNG-Format:
Die PPM-Datei sollte ungefähr so aussehen:
P3 50 50 255
255 255 255 255 255 255 255 255 255 255 255 255 ...
...
255 255 255
Hier finden Sie eine Kopie der vollständigen PPM-Datei .
Beispiellauf (unter Linux)
# ls
myprog
# interpreter myprog
0 89 98 179 188 197 269 278 287 296 359 ...
# interpreter myprog
Mary had a little lamb,
Little ...
# interpreter myprog
# ls
blue.ppm
myprog
# cat blue.ppm
P3 50 50 255
255 255 255 255 255 ...
Regeln
- Ihr Code kann sich selbst ändern.
- Das vierte Ausführen des Programms ist ein undefiniertes Verhalten.
- Sie können in eine Datei im aktuellen Verzeichnis schreiben, aber die Größe dieser Datei erhöht Ihre Punktzahl zu Beginn jedes Laufs. Die endgültige PPM-Datei ist davon ausgeschlossen.
- Die ersten beiden Ausgänge sind stdout (oder ähnlich). Die letzte Ausgabe wird in eine Datei geschrieben, ohne dass etwas an stdout gesendet wird.
- Die ersten beiden Ausgänge können optional ein nachfolgendes Leerzeichen (z. B. Leerzeichen oder Zeilenvorschub) haben.
- Sie dürfen keine Komprimierungs- oder Bildbibliotheken verwenden. Sie können Ihre eigenen Komprimierungs- oder Bildfunktionen verwenden, dieser Code muss jedoch in Ihrem Programm enthalten sein.
- Die Standardlücken sind verboten.
Antworten:
Python (897 + 814 + 386 = 2097)
Einfache selbstmodifizierende Antwort. Ich muss den zweiten Lauf später verfeinern.
Wenn es zum vierten Mal ausgeführt wird, wird es außerdem sicher zu einem NOP:
quelle
Ruby,
13561268 * 3 = 3804 BytesUm den Aufruf zu verfolgen, erstelle ich
a
beim ersten Lauf eine leere Dateib
und beim zweiten Lauf eine leere Datei .quelle
i.to_s.chars.map(&:to_i).reduce(:+)
mit(j=i.to_s).sum-48*j.size
Python 3, 1027 + 1028 + 1029 = 3084
Verwendet OEIS A166370 für die Zahlen, eine handgeschriebene Komprimierung für Mary's Lamb und ASCII-Bytes, um die Anzahl der Zahlen im PPM zu speichern.
(Ab) verwendet die Python-Funktion, um den zweiten Wert für logische Operatoren nur auszuwerten, wenn das Ergebnis noch nicht bekannt ist (Kurzschluss):
1 or code
und0 and code
nicht auszuwertencode
. Verwendet dann einige Ersetzungen, um die0 or
Ausführung des Aktivierungscodes in a0 and
und next neben1 or
zu ändern0 or
.Die dritte Ausführung beendet den zweiten Ersatz, da es keine mehr gibt
1 or
. Die 4. Ausführung beendet das erste Ersetzen, wonach der Code im Grunde nichts mehr tut.quelle
C ++, 1204 * 3 = 3612 Bytes
Verwendeter Compiler - GCC 4.9.2 mit
-std=c++14
FlagErklärung -:
quelle
PHP (1552 * 3) +2 = 4658
Es gibt eine Menge Golf, die gemacht werden kann.
Der Code schreibt 1 Byte in eine andere aufgerufene Datei
z
, um den Status zu überprüfen.Hier ist der Code:
Ich weiß, dass dies ein SEHR schrecklicher Code ist und ich kann versuchen, die Liste zu spielen.
Aber hey, ich kann kein Muster dafür finden: /
quelle
Ruby, 691 + 612 + 225 = 1528 Bytes
Eine weitere selbstmodifizierende Antwort, diesmal in Rubin. Ich bin gestern gerade darauf gestoßen und die Komprimierung des Gedichts ist mir aufgefallen. Ich konnte nur 92 Bytes aus dem Rohtextgedanken sparen.
Bei jedem Programmlauf wird das Programm für den nächsten Lauf neu geschrieben. Ich habe die besondere Eigenschaft der Zahlen erst herausgefunden, als ich mir die anderen Antworten angesehen habe. Und nahm die gleiche Inspiration Martins Antwort, aber ich habe den Vorschlag von blutorange nicht verwendet, weil ich nicht herausfinden konnte, warum es funktionierte.
Es gibt wahrscheinlich noch ein paar Bytes, die aus dem Gedicht entfernt werden müssen, aber nicht viel. Es handelt sich im Grunde genommen nur um Subbing in gängigen Sequenzen und verwendet die Reihenfolge der Sequenz als zu ersetzendes Teil.
Für den letzten Teil habe ich alle 255 Bytes in ein Array codiert und sie mit den Nullen zusammengeklebt. Und dann habe ich die sich wiederholenden Sequenzen in diesem Array codiert.
quelle
JavaScript + HTML, 3909 Bytes
Dies ist eine HTML / JavaScript-Anwendung, die das erneute Laden von Seiten verwendet, um Dateien erneut auszuführen. Ich habe es vermasselt, das PPM zu analysieren. Wenn Sie wissen, wie man PPM-Dateien liest, lassen Sie es mich bitte wissen. Stack Exchange erlaubt keinen lokalen Speicher. Sie müssen also die JSFiddle ausführen.
Wieder weiß ich, dass ich die ppm-Datei bombardiert habe.
Aber am Ende:
JavaScript : 1.232 Bytes * 3 = 3696
HTML : 71 Bytes * 3 = 213
Gesamt : 3909
JSFiddle
quelle