Sie haben genug von der Zuverlässigkeit des Flash-Speichers und haben beschlossen, alle Ihre Programme auf einer dieser guten alten 1.440-KB-Disketten zu speichern. Nach dem Kopieren von nicht einmal 3.000 Programmen war der Datenträger jedoch voll. Wie ist das überhaupt möglich? Die meisten Ihrer Programme sind nicht einmal 100 Byte lang und verfügen über ausreichend Platz ...
Wenn Sie bei Super User danach fragen, stellen Sie fest, dass Sie an der Clustergröße des Dateisystems schuld sind , einem bösen Komplott der Designer von FAT12 , das einen erheblichen Teil Ihrer Diskette ungenutzt lässt und Sie zwingt, mehr zu kaufen, als Sie tatsächlich benötigen.
Mehr Disketten kaufen? Noch nie! Die Clustergröße ist weniger problematisch, wenn einfach mehrere Programme in einer Datei gespeichert werden. Dies ist möglich, da sich verschiedene Compiler / Interpreter für denselben Quellcode unterschiedlich verhalten.
Aufgabe
Schreiben Sie einen Polyglot, der in einen einzelnen Cluster (512 Byte oder weniger) passt und so viele der folgenden Aufgaben wie möglich löst.
Lesen Sie alle Eingaben und drucken Sie sie aus.
Drucken Hallo, Welt! .
Lies eine Zeile / ein Argument ( Name ) als Eingabe und drucke Happy Birthday, [Name]! .
Alle Eingaben lesen und ausdrucken Ich liebe Tabs! Wenn es einen oder mehrere Tabulatoren (0x09) enthält und ich Leerzeichen hasse! wenn nicht.
Lesen Sie zwei Zeilen / Argumente und geben Sie einen Wahrheitswert aus, wenn der zweite eine Teilzeichenfolge des ersten und ein falscher Wert ist, wenn nicht.
Lesen Sie eine Zeile / ein Argument und geben Sie einen Wahrheitswert aus, wenn die Zeichen streng aufsteigend sind, und einen falschen Wert, wenn nicht.
Lesen Sie eine Zeile / ein Argument und ein Zeichen und drucken Sie die Indizes aller Vorkommen dieses Zeichens.
Lesen Sie eine Zeile / ein Argument und drucken Sie eines der Zeichen mit der höchsten Häufigkeit.
Lesen Sie zwei Ganzzahlen zwischen 0 und 255 und geben Sie ihre Summe aus.
Lesen Sie eine einzelne Ganzzahl zwischen 0 und 255 und geben Sie den Quotienten und den Rest der Division durch 7 aus .
Lesen Sie eine einzelne Ganzzahl zwischen 1 und 255 und geben Sie einen Wahrheitswert aus, wenn es sich um eine zusammengesetzte Zahl (weder 1 noch Primzahl) handelt, und einen falschen Wert, wenn nicht.
Lesen Sie eine einzelne Ganzzahl zwischen 1 und 255 und geben Sie einen Wahrheitswert aus, wenn es sich um eine Potenz von 2 handelt, und einen falschen Wert, wenn nicht.
Lesen Sie zwei Ganzzahlen zwischen 0 und 255 und drucken Sie die größere.
Lesen Sie eine Dezimalzahl zwischen 0 und 255, um die hexadezimale Darstellung zu drucken.
Lesen Sie eine einzelne Ganzzahl zwischen 0 und 255 und drucken Sie das Hamming-Gewicht (Anzahl der 1-Bits).
Lesen Sie eine einzelne Ganzzahl n zwischen 1 und 13 und geben Sie die n- te Fibonacci-Zahl F n aus .
Beispiel
13
: Drucken Sie für die Eingabe233
.
Lesen Sie eine Zeile / ein Argument der Eingabe und rahmen Sie es ein.
Programming Puzzles & Code Golf
Drucken Sie beispielsweise für die Eingabe Folgendes aus:+---------------------------------+ | Programming Puzzles & Code Golf | +---------------------------------+
Lesen Sie einen rechteckigen Zeichenblock und drehen Sie ihn eine viertel Umdrehung im Uhrzeigersinn.
Zum Beispiel für die Eingabe
tye xll epb tma id sa s e i r hsn Tiu
drucke dies aus:
This text is simply unreadable
Lesen Sie eine Ganzzahl zwischen 1 und 40 und drucken Sie eine Raute dieser Seitenlänge.
3
Drucken Sie beispielsweise für die Eingabe Folgendes aus:/\ / \ / \ \ / \ / \/
Drucken Sie diese:
....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@....
Wertung
Die Antwort, die es schafft, die höchste Anzahl von Programmen in eine einzelne Datei zu integrieren, die in einen einzelnen 512-Byte-Cluster passt, gewinnt. Die Verbindungen werden durch die Anzahl der Bytes getrennt (weniger ist besser).
Zusätzliche Regeln
Für jede Aufgabe, die Sie für Ihre Punktzahl beanspruchen, muss dieselbe Datei (Byte für Byte) ein vollständiges Programm darstellen - in einer Sprache Ihrer Wahl -, das diese bestimmte Aufgabe löst.
Jede Aufgabe muss in einer anderen Sprache gelöst werden.
Sprachen gelten als unterschiedlich, wenn es sich nicht um unterschiedliche Versionen derselben Sprache handelt. Zum Beispiel gibt es nur ein JavaScript, ein Python und ein TI-BASIC, aber C, C ++, Octave und MATLAB sind vier verschiedene Sprachen.
Die für jede Aufgabe ausgewählte Sprache muss unserer üblichen Definition der Programmiersprache entsprechen .
Darüber hinaus muss die Sprache vor dem 9. September 2015 veröffentlicht und implementiert worden sein.
Ihr Compiler / Interpreter benötigt möglicherweise keine Nicht-Standard-Flags, um das erwartete Verhalten zu erzeugen.
Ausnahmen von dieser Regel sind Flags, die zum Festlegen einer bestimmten Sprache, zum Lesen des Programms aus einer (einzelnen) Datei oder zum Unterdrücken eines Banners erforderlich sind.
Die Eingabe für jede Task besteht aus druckbaren ASCII-Zeichen (0x20 bis 0x7E) und Zeilenvorschüben (0x0A) und darf nicht länger als 255 Byte sein.
Alle Ganzzahlen können dezimal oder unär gelesen werden, sofern in der Task nichts anderes angegeben ist.
Das Verhalten bei ungültiger Eingabe ist undefiniert.
Sie können Eingaben von STDIN (oder der nächstgelegenen Alternative) oder als Befehlszeilenargumente lesen.
Wenn für eine Aufgabe das Lesen von zwei Eingaben erforderlich ist, können Sie diese in beliebiger Reihenfolge lesen, getrennt durch ein Byte-Trennzeichen Ihrer Wahl, als separate Befehlszeilenargumente oder eines von STDIN und das andere als Befehlszeilenargument.
Wenn eines der Eingabestücke eine Linie ist, ist der einzig mögliche Begrenzer ein Zeilenvorschub.
Drucken Sie die Ausgabe auf STDOUT (oder die nächstgelegene Alternative). Alle Ausgaben an STDERR werden ignoriert.
Für jede Aufgabe gelten die Standardregeln für Code-Golf .
Dies schließt insbesondere die Lücken ein, die standardmäßig verboten sind , mit Ausnahme der Hartcodierung der Ausgabe , die für diese Herausforderung ausdrücklich zulässig ist.
2>/dev/null
und die korrekte Ausgabe auf stdout bekommen, es in Ordnung ist? Nur um sicher zu gehen.