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.Antworten:
12 Sprachen, 418 Bytes
Dies ist eine lustige Herausforderung. Es wird immer schwieriger, mehr Sprachen einzubauen, aber mit den vielen verbleibenden Bytes könnte ich wahrscheinlich noch eine weitere machen.
Verwendet kostenlos 2D-Sprachen. Beachten Sie, dass das Zeichen zwischen
[ ]
den@-[ ]e<
Zeilen ein Tabulator ist. Dies erfordert auch\n
Zeilenenden, damit TRANSCRIPT funktioniert.Vorspiel (Aufgabe 1 / Katze)
?(!?)
ist nur eine direkte Übersetzung von,[.,]
in BF. Prelude-()
Schleifen verhalten sich wie BF-[]
Schleifen, sodass von der(
linken Spalte bis)
vor dem Ausführen des Kernprogramms alles nicht ausgeführt wird.Die Syntaxregeln von Prelude bedeuten, dass Klammern abgeglichen werden müssen (Spaltenweise von links nach rechts), und es kann nur eine Klammer pro Spalte geben. Davon abgesehen ist es eine ziemlich einfache Sprache, in die man sich einfügt.
Stellen Sie sicher, dass diese Option aktiviert
NUMERIC_OUTPUT
ist,False
wenn Sie den Python-Interpreter verwenden.TRANSCRIPT (Aufgabe 2 / Hallo Welt)
TRANSCRIPT ist ein thematischer Esolang, der auf interaktiver Fiktion basiert. Zeilen, die von TRANSCRIPT nicht erkannt werden, werden ignoriert, was das Einpassen erleichtert.
Tr is here.
deklariert eineTr
Stringvariable und die zweite Zeile setzt den Inhalt der Variablen aufHello, World!
.X Tr
(X
zur Prüfung) gibt dann den String aus.Obwohl TRANSCRIPT sehr einfach einzufügen ist, ist es eine ziemlich ausführliche Sprache, weshalb ich es zur einfachsten Herausforderung gemacht habe.
Spaltung (Aufgabe 3 / Geburtstagsnachricht)
Der erste Teil wird gedruckt, die Eingabe wird mit einer kleinen 2D-Schleife katziert und anschließend das nachfolgende Ausrufezeichen ausgegeben. Die
R
bedeutet , dass ein Atom hier beginnt sich zu bewegen nach rechts, was nützlich ist , weil dieses Programm kann um beliebig verschoben werden.Schiene (Aufgabe 4 / Tabs)
Rail ist wie Fission eine 2D-Sprache, die den Vorteil hat, sich überall bewegen zu können. Die Ausführung beginnt
$
mit dermain
Funktion in Richtung Südosten.Zuerst gehen wir das
\
s runter , biegen nach links ab-
und treffen,[<tab>]
was eine Lasche drückt.e<
dann Zweige basierend auf EOF - wenn EOF, gehen wir runter und drucken,"I hate spaces!"
bevor wir anhalten, sonst gehen wir rauf. Wenn wir nach oben gehen, lesen wir das nächste Zeichen und vergleichen es mit dem Tabulator, wobei wir erneut verzweigen. Wenn Sie den Tabulator verwenden, gehen Sie nach oben und drucken Sie ihn aus,"I love tabs!"
bevor Sie anhalten, gehen Sie nach unten und setzen Sie die Eingabeschleife fort.Dieses Programm ist ziemlich teuer, aber da TRANSCRIPT Hello World übernommen hat, war es schwierig, eine geeignete Aufgabe für Rail zu finden.
> <> (Aufgabe 6 / Aufsteigende Eingabe)
Druckt,
1
wenn streng aufsteigend,0
ansonsten.> <> ist eine andere 2D-Sprache und die Ausführung beginnt oben links.
"..."
ist der String-Modus, bei dem die inneren Zeichen nacheinander gedrückt werden. Nach der ersten Saite schlagen wir einen Spiegel an#
, der die IP nach links reflektiert, indem wir weitere Saiten schieben und umwickeln (> <> ist toroidal), bevor\
wir auf einen Spiegel treffen , der uns nach oben reflektiert.Am Ende des Programms befindet sich
.91<
, was uns teleportiert(9, 1)
, wo sich das Kernprogramm befindet. Nachdem dies0[
alles von den Strings entfernt hat,0
drücke eine Null, um das zuletzt gelesene Zeichen darzustellen, und danach lese es nur Zeichen nacheinander, um sicherzustellen, dass wir immer noch aufsteigend sind.Es ist wahrscheinlich besser, das Kernprogramm nach unten zu verschieben, als zu teleportieren, aber ich werde mich später bei Bedarf darum kümmern.
Befunge (Aufgabe 9 / Ergänzung)
Getestet mit dem hier gefundenen Interpreter . Dies ist ein ziemlich unkompliziertes Programm, bei dem zunächst eine unbrauchbare Zeichenfolge gedrückt und dann
#
über das Feld gesprungen wird. Danach ist es nur noch das Kernprogramm&&+.@
.Labyrinth (Aufgabe 10 / Divmod von 7)
Günstig
'
und"
sind NOPs im Labyrinth, die sich wie ein begehbarer Weg im Labyrinth verhalten. Ich werde die unordentliche Navigation überspringen, aber im Grunde genommen wird viel herumgedreht, bevor wir die erreichen?
, was der Start des Kernprogramms ist.Das Programm ist nicht ganz bündig hinterlassen, um das Prelude zu berücksichtigen (zB
?
wird die Eingabe im Prelude gelesen).Python 2 (Aufgabe 14 / Hexadezimal)
Die
xxx
s stellen irrelevante Teile dar, die durch mehrzeilige Zeichenfolgen oder Kommentare auskommentiert wurden. Dazwischen liegtprint hex(input())
das Kernprogramm. Dies wird mit einem führenden ausgegeben0x
, aber ich gehe davon aus, dass das in Ordnung ist (wenn nicht, dann ist es trotzdem eine einfache Lösung).Die erste Zeile ist eine Zeichenfolge,
"1\"# &&+.@\""
gefolgt von zwei" "
Sekunden. Diese drei Zeichenfolgen werden vom Parser verkettet und nicht verwendet (diese erste Zeile funktioniert später ähnlich für Ruby und Julia).GolfScript (Aufgabe 15 / Hamminggewicht)
Die erste Zeile enthält drei Zeichenfolgen, und die zweite Zeile ist ein Kommentar.
''''
Drückt zwei weitere Zeichenfolgen und führt dann<<
zwei Vergleiche durch (s
wird ignoriert). Zum Schluss""'("'
drückt man noch zwei Saiten.All dies ist Müll, der dann entfernt wird, indem man ihn in ein Array einwickelt und das erste Element (
]0=
) erhält, das die Eingabe anfangs auf dem Stapel ist. Wir werten dann den Eingang mit aus~
, wandeln ihn in Binär mit um2base
und summieren dann die Bits mit{+}*
. Der nächste}
ist unübertroffen und kommentiert den Rest des Programms überkommentiert.Julia (Aufgabe 16, Fibonacci)
#=
Startet einen mehrzeiligen Kommentar und=#
beendet einen mehrzeiligen Kommentar. Das Kernprogramm verwendet die Matrixexponentiation zur Berechnung von Fibonacci-Zahlen (aus Rosetta ).Ruby (Task 17 / ASCII-Frame)
Dieses Programm geht davon aus, dass die Eingabe nicht mit einem Zeilenumbruch endet.
Wir haben eine nutzlose Zeichenfolge, einen Kommentar, eine andere nutzlose Zeichenfolge und dann einen Heredoc, der den größten Teil des Programms auskommentiert. Danach folgt das Kernprogramm, gefolgt von einem einzeiligen
#
Kommentar.CJam (Aufgabe 19 / Diamant)
Die beiden Leerzeichenketten am Ende der ersten Zeile sollen CJam erfüllen, da
#=
es sich um zwei Binäroperatoren handelt. Ich werde hier nicht zu sehr ins Detail gehen, aber im Grunde ist es ein Durcheinander, wobei das Kernprogramm das bloße istzwischen.
Das wichtigste Unterscheidungsmerkmal zwischen GolfScript und CJam ist, dass in CJam ein einfaches Anführungszeichen
'
keine Zeichenfolge beginnt und endet, sondern das nächste Zeichen auf den Stapel schiebt. Dies bedeutet, dass in CJamDrückt a,
(
dann beginnt eine Zeichenfolge mit"
(das erste Zeichen davon ist'
), während die obige Zeichenfolge in GolfScript nur eine gerade einzelne Zeichenfolge ist.Probieren Sie es online aus .
1>
wird anstelle von(
Prelude verwendet.Hier sind 12 Sprachen, 373 Bytes . Einige Aufgaben wurden verschoben, TRANSCRIPT wurde entfernt (es hat Rail zu teuer gemacht) und Schema (Huhn) wurde hinzugefügt. Dies ist nur mein Golfplatz für zukünftige Updates, da die Aktualisierung des Hauptpostens ewig dauert.
Ich könnte ein paar Bytes für Julia sparen, da nicht abgeschlossene mehrzeilige Kommentare einen Fehler für STDERR auslösen.
quelle
;)
ich wegen der langen Beschreibung zögere, irgendetwas in meiner Antwort zu ändern. lol78910 Sprachen,398431447507 BytesDies ist wahrscheinlich das Beste, was ich in die aktuelle Lösung einbauen kann.
Die letzte Zeile enthält Whitespace-Code, der so codiert ist, dass SE ihn nicht aufnimmt. Ersetzen Sie zum Ausführen des Codes alle
S
durch Leerzeichen,T
Tabulatoren undN
Zeilenumbrüche.C89, Aufgabe 16
Folgendes sieht der Compiler:
Alles andere wird als Kommentar oder in der entfernt
#if 0
.C ++, Aufgabe 14
Ich habe einen von hier gestohlenen Trick benutzt, um zwischen C89 und C ++ zu unterscheiden.
Lua, Aufgabe 2
Hier ist die Grundstruktur.
Brainfuck, Aufgabe 1
Ich musste nur sicherstellen, dass keine Endlosschleifen oder Irrwege
.,
gefunden werden. Luas mehrzeilige Kommentare dienen auch als BF-Kommentare. Alles außer den ersten 2 Zeichen ist eine große NOP-Schleife.Python, Aufgabe 6
Auch hier verwende ich sprachspezifische Funktionen, um NOP auszuführen oder den anderen Code zu kommentieren.
Pyth, Aufgabe 17
Pyth ist nett für diese Sache. Es nimmt die erste
#
alswhile True:
Schleife , die bei einem Fehler stillschweigend beendet wird . Also mache ich einfach den größten Teil des Codes zu einem String (um zu vermeiden;
, dass die Schleife vorzeitig beendet wird), beende dann einfach die Schleife, beende eine andere, die vom Python-Kommentar erstellt wurde, und erledige die Aufgabe. Hier ist es mit allen nicht leeren Zeichenfolgen ersetzt" string "
, es ist immer noch funktional gleichwertig:> <>, Aufgabe 3
Dieser ist sehr interessant. Die Ausführung springt im Code herum und verwendet bei Bedarf Sprünge, um Hindernisse zu umgehen. Die relevanten Teile:
Sternenklar , Aufgabe 9
Hier musste ich anfangen, in die Sprachen "Alle Zeichen außer" zu gehen. Alles andere sieht so aus:
Der Code überspringt den größten Teil der Interpunktion mit einem Sprung, um eine harte Zeit zu vermeiden, indem er nur den Anfang und das Ende des Codes verwendet. Der Code ist funktional äquivalent zu
Befunge-98, Aufgabe 10
Funktioniert ähnlich wie> <>. Zum Glück gibt
#
es einen Spiegel in> <> und einen Sprung in Befunge, so dass wir unterschiedliches Verhalten implementieren können. Auch0/0 == 0
.Leerzeichen , Aufgabe 13
Dies war das letzte, in das ich hineingepasst habe. In den ersten Zeilen werden nur Nullen auf den Stapel geschoben, da sie nur Leerzeichen und Zeilenumbrüche aus dem "normalen" Code enthalten. Der Code ist verschlüsselt; Ersetzen Sie alle
S
durch Leerzeichen,T
Tabulatoren undN
Zeilenumbrüche.quelle
17 verschiedene Versionen von Pip, 383 Bytes (ungültig)
Während diese Frage im Sandkasten war, habe ich alle Revisionen meiner Sprache Pip durchgearbeitet und mit 17 von ihnen einen Polyglot gefunden. Leider werden Versionen der gleichen Sprache derzeit von den Herausforderungsregeln nicht zugelassen, aber mit Dennis 'Erlaubnis und einem Haftungsausschluss veröffentliche ich meine Arbeit trotzdem.
Der rohe Code
Die Strategie
In Pip sind Kleinbuchstaben Variablen. Großbuchstaben sind komplizierter: Sie werden in Läufe von höchstens zwei Zeichen aufgeteilt, bei denen es sich um Operatoren oder Variablen handeln kann. Wenn ein Token in Großbuchstaben nicht speziell als Variable oder Operator definiert ist, wird davon ausgegangen, dass es sich um eine undefinierte Variable handelt, die mit null bewertet wird.
Um zwischen zwei Versionen von Pip zu unterscheiden, muss ich nur einen variablen oder alphabetischen Operator finden, der in der neueren der beiden hinzugefügt wurde. In der älteren wird es stattdessen null sein. Der Code erstellt
v:uIN[...]
eine große Liste mit einer dieser Prüfungen für jede zu testende Version, ermitteltu
die Anzahl der Nullen in dieser Liste (die Variable wird explizit mit Null initialisiert) und speichert die Nummer inv
(für "Version"). .Nach einigen anderen Berechnungen gibt es eine weitere große Liste, in der die Ergebnisse für 17 der Aufgaben aus der Herausforderung berechnet und
v
anhand der Version ausgewählt werden.Versionen und Aufgaben
0.15.09.04
Diagnose:
(oTM0,0i)
(Behebung eines Fehlers mit demT
ri-M
Operator, bei dem das Abschneiden von 0 Zeichen an jedem Ende einer Zeichenfolge stattdessen eine leere Zeichenfolge ergab; das Indizieren in eine leere Zeichenfolge ergibt null)Aufgabe 18:
Iv<2W##YqlPBy
(Setup: Lies alle Zeilen von stdin, wennv
kleiner als 2 ist) gefolgt von((J_M ZRVl)|0)Jn
(Liste der Zeilen umkehren, transponieren und wieder zu einer Zeichenkette zusammenfügen)0.15.08.06
Diagnose:
EN1
(EN
Operator umerate hinzugefügt )Aufgabe 1:
Iv<2W##YqlPBy
(gleicher Setup-Code wie oben) gefolgt vonl?lJnl
(bei Zeilenumbrüchen beitreten)0.15.08.03
Diagnose:
1N1
(N
als Kurzversion desIN
Operators hinzugefügt )Aufgabe 20:
c:((J['.'@]X4)X4RL3)Jnc.:n.RVcc:cRL4|0
(Setup: Liste mit der oberen und unteren Hälfte des Schachbretts erstellen und speichern inc
) gefolgt voncJn
(auf Newline verbinden)0.15.08.01
Diagnose:
Y1
(hinzugefügterY
Ank Operator)Schritt 19:
Iv=3{d:sXaRLaFj,ad@j@j:'\d:(RVdR'\'/).d|0dJ:n}
(Setup: Wennv
3, bauen Sie die obere Hälfte des Diamanten eind
), gefolgt vond.n.RVd
(umgekehrt für die untere Hälfte und fügen Sie eine neue Zeile hinzu)0.15.06.19
Diagnose:
RCk
(R
AndomC
Hoice Operator hinzugefügt )Schritt 17:
m:'+.'-X#a+2.'+.n."| "
(setup: build+----+\n|
string inm
) gefolgt vonm.a.RVm
(wrap input inm
und reverse ofm
)0.15.06.12
Diagnose:
k
(vorinitialisiertek
Variable bis", "
; vorher war sie undefiniert und damit null)Aufgabe 16:
Iv=5La{i+:oSio}
(Wennv
5 ist, generiere Fibonacci-Zahl ini
), gefolgt voni
0.15.06.08 (Hinweis: Die Versionsnummer wurde erst nach dem folgenden Festschreiben geändert)
Diagnose:
w
(vorinitialisiertew
Variable bis`\s+`
)Aufgabe 15:
h:$+TBa
(Eingabe in Binär- und Summenziffern konvertieren; Ergebnish
für Aufgabe 12 später speichern )0.15.05.29
Diagnose:
(hR`1.+0``&2o`)@>3@AB0
Diese Version wurde
&
als Ersatzmuster für die gesamte passende Saite in einem Regex-Ersatz (inspiriert von sed) hinzugefügt . Der obige Code nimmth
(100
) und ersetzt ihn durch`&2o`
(dh"1002o"
in neueren Versionen, aber einfach"&2o"
in älteren Versionen). Es schneidet dann alle Zeichen nach dem 3. ("2o"
in neueren Versionen,""
in älteren Versionen) und versucht, in diese Zeichenfolge zu indexieren. Indizierung in eine leere Zeichenfolge ergibt null.Aufgabe 7:
j:ak:b
(Setup: Kopien lokale Varsa
,b
zu globalen Variablenj
,k
so dass sie in einer Funktion verfügbar sein werden) , gefolgt von({j@aEQk}FI0,#a).s
(Filter für Indizes ina
denen die entsprechenden Zeichen entsprechenb
, und kommt auf Platz)0.15.05.26
Diagnose:
`u`
(hinzugefügter Mustertyp; in früheren Versionen werden Backticks als nicht erkannte Zeichen ignoriert und der Ausdrucku
wird zu null ausgewertet. )Schritt 14:
aTB16
(konvertiereT
oB
ase 16)0.15.05.24
Diagnose:
rZ4
(Erstellt einer
spezielle Variable, die bei jedem Verweis einen zufälligen Wert zwischen 0 und 1 zurückgibt; zuvor war sie undefiniert und daher der Ausdruck als null ausgewertet.)Schritt 13:
a>b?ab
(ternärer Ausdruck)0.15.05.12
Diagnose:
rZ4
(Z
IP-Operator hinzugefügt )Aufgabe 12:
h=1
(Die Summe der Bits aus Aufgabe 15 muss gleich 1 sein.)0.15.05.11
Diagnose:
AB6
(AB
Mehrwertoperator)Aufgabe 11:
Pv=11?a>1&0INa%(2,a)[...]@v
(Wennv
es sich um 11 handelt, wird ausgegeben,1
wenn die Eingabe größer als 1 ist und eine kleinere Zahl sie exakt teilt.0
Andernfallsv
können Siev
als Index für die Liste entscheiden, was ausgegeben werden soll.)0.15.05.02
Diagnose:
({a}V7)
(hinzugefügterV
Operator; wenn nichtV
definiert, wurden die Argumente nil und 7 an eine Funktion gesendet{a}
, die das erste Argument zurückgibt.)Aufgabe 10:
a//7.s.a%7
(Eingabe geteilt durch 7 und Mod 7, durch Leerzeichen getrennt)0.15.04.26
Diagnose:
BN8
(B
itwiseN
egation operator hinzugefügt )Schritt 9:
a+b
0.15.04.23
Diagnose:
AZ
(vorinitialisierteAZ
Variable in Großbuchstaben)Aufgabe 5:
bINa
(IN
gibt die Anzahl der Vorkommen an)0.15.04.20
Diagnose:
m@0:0
gefolgt von9@m
Die
m
Variable ist auf 1000 vorinitialisiert. Bei diesem Commit wurde der@
Operator so festgelegt, dass er l-Werte zurückgibt. Zuvor gab die Zuordnung zum@0
eine Warnung und tat nichts. Daher wird nach dem Bugfix die erste Anweisungm
auf gesetzt0000
, was ein legaler Index für ist9
. Pre-Bugfix,m
bleibt1000
, was kein legaler Index ist. (Indizes waren noch nicht zyklisch.)Schritt 3:
"Happy Birthday, ".a.'!
0.15.04.18
Alle vorherigen Diagnosen führen dazu, dass der Diagnoseliste eine Null hinzugefügt wird.
Schritt 2:
"Hello, World!"
Der größte Teil des anderen Codes sind Optimierungen, die ich vornehmen musste, um Fehler in verschiedenen Versionen zu vermeiden. Dieser Beitrag ist bereits viel zu lang. Wenn Sie also etwas wissen möchten, was ich nicht erklärt habe, lasst uns die Diskussion im Chatroom für esoterische Sprachen führen .
quelle
6 Sprachen, 226 Bytes (229 je nachdem, wie
\x1b
akzeptiert wird!)Also, ich glaube nicht, dass ich die beste Auswahl an Sprachen getroffen habe und ich stelle mir vor, dass dies nicht besonders wettbewerbsfähig ist, aber ich fand das trotzdem eine interessante Herausforderung! Insgesamt sind nicht viele Herausforderungen abgeschlossen, aber ich könnte wahrscheinlich eine Herausforderung in Leerzeichen oder ähnlichem beschlagen, aber das ist, was ich bisher habe:
1. Brainfuck
Getestet auf http://copy.sh/brainfuck/ und http://brainfuck.tk/ .
Nachdem wir alle ignorierten Zeichen entfernt haben, bleibt nur das obige Programm übrig. Dies ist nur das Beispielprogramm cat mit einigen zusätzlichen leeren Schleifen, um die Verwendung der Symbole in anderen Sprachen zu umgehen.
2. Ruby
Verwendung:
Das Obige ist der Code, nachdem alle Kommentare entfernt wurden. Die erste Zeile ist in Ruby völlig nutzlos, da wir einige reguläre Ausdrücke definieren, die den Befunge-93- und Brainfuck-Code enthalten,
Hello
und dann ein Array erstellen, das enthalten undWorld
mitprintf
(zum Hinzufügen des,
und!
) gedruckt wird .3. Perl
Verwendung:
Sehr ähnlich zu Ruby, außer dass wir einen Array-Verweis in speichern
$a
, wenn wir versuchen, auf$a[0]
ihn zuzugreifen , der leer ist, damit wir ihn durch den Text für Herausforderung 3Happy Birthday
undpop
(der das letzte Argument für das Befehlszeilenprogramm zeigt) ersetzen können ).4. JavaScript
Verwendung: In die Browserkonsole einfügen und ausführen.
Wie bei Ruby und Perl erstellt die erste Zeile im Wesentlichen unbrauchbare
RegExp
Objekte. Anschließend speichern wir ein unbrauchbares Array in$a
und instanziieren zwei unbrauchbare Zeichenfolgen, eine mit dem Ruby / Perl-Code und eine mit einer neuen Zeile und einem#
,prompt()
und geben dannalert()
das erwartete Ergebnis ein von den meisten Menschen für Herausforderung 4. Wir beenden mit einem anderen nutzlosenRegExp
Objekt, um die Brainfuck-Schleife zu schließen.9. Befunge-93
Getestet unter http://www.quirkster.com/iano/js/befunge.html .
Wie ich es verstehe,
/
den Stapel trennt und schiebt das Ergebnis , das mit Ausnahme drückt keine negativen Auswirkungen hatNaN
auf der oben genannten Seite,&
für die Eingabe einer ganzen Zahl fragt , so dass wir beide Zahlen lesen , indem Herausforderung erforderlich 9 auf den Stapel, die#
überspringen wir sicher über die[
der zum brainfucken da ist,+
dann die beiden obersten zahlen auf dem stapel addiert,.
ausgibt,#]
zum brainfucken wieder und beendet@
.13. PHP (läuft in Bash)
Verwendung:
In PHP wird alles, was nicht in den
<?
Tags enthalten ist, wörtlich ausgegeben. Dies gibt also den Befunge-93- und Brainfuck-Code aus, sodass wirdie()
sofort im Code einen Bildschirm clear (\x1bc
) ausgeben und dann dasmax()
der ersten beiden Argumente.quelle
the first character in the first string literal is the byte ASCII 27
). Ihre Punktzahl ist 226..match'\x09'
(wo die sind) werde ich vielleicht sehen, ob ich irgendwann mehr hinzufügen kann!6 Sprachen,
450404 BytesBash, Brainfuck, C, Gawk4, JavaScript und Minimal-2D
Update: Golfen Sie ein wenig. Ich bin mir immer noch nicht sicher, was ich noch hinzufügen soll, und ich bin mir nicht sicher, wie die konkurrierenden Mitglieder meinen, ich würde ihre Sprachen für verschiedene Aufgaben verwenden. Ich versuche den Brainfuck-Algorithmus zu erklären.
Nun, das ist / war meine erste polyglotte Erfahrung, also musste ich alles von Grund auf lernen. Mit awk anzufangen, war meiner Meinung nach nicht die klügste Idee, da es relativ unversöhnlich ist. Da die Anzahl der erledigten Aufgaben relevant ist, habe ich zuerst mit den einfachsten Aufgaben begonnen. Ich bin mir nicht sicher, ob das ein kluger Schachzug war. Das ist nicht sehr gut, weil ich genug Mühe hatte, diese sechs zusammenzubringen, aber ich tat, was ich konnte, um es kurz zu halten.
Hier sind die Sprachen und was sie in alphabetischer Reihenfolge tun. Ich werde einen einfachen Weg zeigen, sie alle weiter unten zu testen. Da einige davon versionsspezifisch sein könnten, gebe ich Ihnen die Versionsnummern der von mir verwendeten Tools.
Bash, Aufgabe 3
Nun, es ist offensichtlich, dass ich sed verwendet habe. Ich habe versucht, ein sed-Skript in dieses Skript einzufügen, aber ich konnte es nicht zum Laufen bringen, also bin ich auf die Bash-Route gegangen. So wie ich es schreibe, steht es in einem C-Kommentar und awk wertet es aus
False
.sed --version
gibtsed (GNU sed) 4.2.2
bash --version
gibtGNU bash, Version 4.3.30(1)-release (x86_64-pc-linux-gnu)
Also kommt der sed Teil auf
Es gruppiert die Eingabe, fügt sie in eine neue Zeichenfolge ein und druckt das Ergebnis. Ziemlich gewöhnliches Zeug.
Brainfuck, Aufgabe 20
Nun, das ist immer ziemlich leicht zu verbergen, denke ich. Eine mit beginnende Zeile
#//
wird von C und awk ignoriert. Oder zumindest können sie mit Müll dahinter leben.bf
gibtbf - a Brainfuck interpreter version 20041219
Dies ist der komprimierte Code. Die erste Zeile ist nur der Müll aus den anderen Sprachen.
Ich werde versuchen zu erklären, wie es funktioniert
Dies ordnet das Band und den Zeiger darauf an
Die Zelle, die 8 enthält, ist der globale Zähler für die folgende Schleife.
Dies ist die Häufigkeit, mit der drei gleiche Zeilen gedruckt werden
setzt
C1
auf 3, die Anzahl der gleichen Zeilensetzt
C2
auf 4, die Anzahl von "....@@@@
" in einer Zeile (am Anfang)druckt eine komplette Zeile, die dekrementiert
C2
wird,wenn
C2
Null ist, druckt sie eine neue Zeile und dekrementiertC1
.Wenn
C1
Null ist, passiert die MagieDie 46 wird hinter die 64 verschoben.
Die 10 und der globale Zähler werden um eins nach rechts verschoben
Dann wird der globale Zähler dekrementiert,
wenn er Null ist. Das Programm wird beendet
C, Aufgabe 2
Ich erschöpfe hier jede noch so kleine Fähigkeit von C, indem ich "Hello, World!" Drucke. Nun, jemand musste den Job machen ...
gcc --version
gibtgcc (Ubuntu 4.9.2-10ubuntu13) 4.9.2
Der tatsächliche C-Code
Das
#define func
soll awk damit einverstanden machen. Es hält dies für eine awk-Funktion. Die Abkürzung für Funk ist ein Gawk-Merkmal.gawk4, Aufgabe 18
Da ich awk für so ziemlich alles hier verwendet habe, entschied ich, dass es darin sein musste.
awk --version
gibtGNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p11, GNU MP 6.0.0)
awk sieht das
Die Suchmuster inklusive
\t
auswerten bisfalse
. Ich habe hier tab gewählt, weil ich denke, dass es nicht in der Eingabe sein kann.sed
bewertet zufalse
."the string"&&0
wird zu false ausgewertet. Die Funktion ist in Ordnung. Das Programm wird ausgeführt, wenn ein leeres Muster für eine Eingabe gefunden wurde.Das macht es
Eingang
Ausgabe
Sie müssen sicherstellen, dass alle Eingabezeilen die gleiche Länge haben. Verwenden Sie Leerzeichen, um sie auszufüllen.
JavaScript, Aufgabe 9
Ich bin mir nicht sicher, ob das echt ist, weil das zu einfach war. Wenn Sie der Programmdatei eine HTML-Endung geben und sie in einem Browser öffnen (ich habe Firefox 40.0.3 und Chrome 45.0.2454.85 verwendet), werden Sie zur Eingabe aufgefordert. Sie müssen zwei durch Leerzeichen getrennte Zahlen eingeben, und die Summe dieser wird angezeigt.
Minimal-2D , Aufgabe 1
Dies war ziemlich einfach, in Kommentarzeilen zu passen. Ich habe den Interpreter verwendet , der in Python läuft, um dies zu testen. Es druckt die Eingabe auf die Ausgabe. Das Programm sieht so aus
RUDL sind rechts, hoch, runter und links. Also geht es richtig los, liest ein Zeichen aus stdin in den Speicher und fügt eins hinzu. Der Schrägstrich überspringt den nächsten Befehl, wenn der Speicher den Wert 0 hat. Damit beenden Sie diesen. Wird ein Zeichen mit dem Wert -1 gelesen, ist die Eingabe beendet. Wenn also -1 gelesen wird, wird das D übersprungen und beendet. Wenn etwas anderes gelesen wird, geht es nach links unten, addiert diese 1 zurück in den Speicher und druckt das Zeichen auf stdout. Dann geht es links hoch und fängt von vorne an.
Testen
Haftungsausschluss: Ich übernehme keine Verantwortung für Schäden, die Sie an Ihrem System damit anrichten.
Dies setzt voraus, dass Sie bash & co, gawk (mindestens Version 4, da hier mehrdimensionale Arrays verwendet werden), gcc, python, bf als Brainfuck-Interpreter und Firefox installiert haben.
Kopieren Sie zur Vereinfachung die Programmquelle in eine Datei mit dem Namen
cluster.html
. Machen Sie diese Datei für die Bash-Task ausführbar. Kopieren Sie den Interpreter für Minimal-2d und fügen Sie ihn in eine Datei ein, die sichminimal2D.py
im selben Verzeichnis befindet. Kopieren Sie dann das folgende Skript und fügen Sie es in eine Skriptdatei ein. Legen Sie es in dasselbe Verzeichnis, machen Sie es ausführbar und führen Sie es aus. Nun, mit wem spreche ich? Wenn Sie dies lesen, brauchen Sie wahrscheinlich nicht so viele Erklärungen und werden es irgendwie zum Laufen bringen.Dort finden Sie auch den Befehl zum Ausführen der Tests einzeln.
Habe Spaß!
quelle