Clustergröße überwinden

37

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.

  1. Lesen Sie alle Eingaben und drucken Sie sie aus.

  2. Drucken Hallo, Welt! .

  3. Lies eine Zeile / ein Argument ( Name ) als Eingabe und drucke Happy Birthday, [Name]! .

  4. Alle Eingaben lesen und ausdrucken Ich liebe Tabs! Wenn es einen oder mehrere Tabulatoren (0x09) enthält und ich Leerzeichen hasse! wenn nicht.

  5. 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.

  6. Lesen Sie eine Zeile / ein Argument und geben Sie einen Wahrheitswert aus, wenn die Zeichen streng aufsteigend sind, und einen falschen Wert, wenn nicht.

  7. Lesen Sie eine Zeile / ein Argument und ein Zeichen und drucken Sie die Indizes aller Vorkommen dieses Zeichens.

  8. Lesen Sie eine Zeile / ein Argument und drucken Sie eines der Zeichen mit der höchsten Häufigkeit.

  1. Lesen Sie zwei Ganzzahlen zwischen 0 und 255 und geben Sie ihre Summe aus.

  2. Lesen Sie eine einzelne Ganzzahl zwischen 0 und 255 und geben Sie den Quotienten und den Rest der Division durch 7 aus .

  3. 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.

  4. 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.

  5. Lesen Sie zwei Ganzzahlen zwischen 0 und 255 und drucken Sie die größere.

  6. Lesen Sie eine Dezimalzahl zwischen 0 und 255, um die hexadezimale Darstellung zu drucken.

  7. Lesen Sie eine einzelne Ganzzahl zwischen 0 und 255 und drucken Sie das Hamming-Gewicht (Anzahl der 1-Bits).

  8. 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 Eingabe 233.

  1. Lesen Sie eine Zeile / ein Argument der Eingabe und rahmen Sie es ein.

    Programming Puzzles & Code GolfDrucken Sie beispielsweise für die Eingabe Folgendes aus:

    +---------------------------------+
    | Programming Puzzles & Code Golf |
    +---------------------------------+
    
  2. 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
    
  3. Lesen Sie eine Ganzzahl zwischen 1 und 40 und drucken Sie eine Raute dieser Seitenlänge.

    3Drucken Sie beispielsweise für die Eingabe Folgendes aus:

      /\
     /  \
    /    \
    \    /
     \  /
      \/
    
  4. 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 .

    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.

Dennis
quelle
1
Sind JavaScript und CoffeeScript so unterschiedlich, dass sie als unterschiedliche Sprachen gelten?
Downgoat
Ja, diese gelten als unterschiedlich.
Dennis
17
Ihre Herausforderung # 4 ist Unsinn> :(
Türklinke
Quote: Alle Ausgaben an STDERR werden ignoriert. Bedeutet dies, dass wenn wir das Skript / Programm mit aufrufen 2>/dev/nullund die korrekte Ausgabe auf stdout bekommen, es in Ordnung ist? Nur um sicher zu gehen.
Cabbie407
2
@ Cabbie407 Genau. Per Konsens über Meta gilt diese Regel standardmäßig für alle Herausforderungen. Ich wollte nur sicherstellen, dass es allen bewusst ist.
Dennis

Antworten:

17

12 Sprachen, 418 Bytes

"1\"# &&+.@\""" "" "
#=
''''
<<s
""'("']0=~2base{+}*}
 ?
 :_7/!\_7%!@
"
R"Happy Birthday, "[?S"!"*"
>0[0>i:0(?v:{)?v0n;\!/
$'main';n1< .95<
 \@-[I love tabs!]o#
  \ >qi---@
( @-[ ]e<''';print hex(
input())#-[I hate spaces!]o#"]];ri:X{_~X+S*'/@S*_'\4$N}%_sW%1>"))?(!?)
'''=#print(([1 1;1 0]^int(readline()))[1,2])
#=
Tr is here.
>Tr, Hello, World!
>X Tr
s
l=gets
a='+-'+?-*~/$/+'-+'
puts a+'
| %s |
'%l+a#=#.91<0#'''#";

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 \nZeilenenden, 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_OUTPUTist, Falsewenn Sie den Python-Interpreter verwenden.

TRANSCRIPT (Aufgabe 2 / Hallo Welt)

Tr is here.
>Tr, Hello, World!
>X Tr

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 eine TrStringvariable und die zweite Zeile setzt den Inhalt der Variablen auf Hello, World!. X Tr( Xzur 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)

R"Happy Birthday, "[?S"!"*
                   \!/

Der erste Teil wird gedruckt, die Eingabe wird mit einer kleinen 2D-Schleife katziert und anschließend das nachfolgende Ausrufezeichen ausgegeben. Die Rbedeutet , 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)

$'main'
 \@-[I love tabs!]o#
  \ >qi---@
  @-[ ]e<
         -[I hate spaces!]o#

Rail ist wie Fission eine 2D-Sprache, die den Vorteil hat, sich überall bewegen zu können. Die Ausführung beginnt $mit der mainFunktion 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)

"1\"#      \""" "" "


>0[0>i:0(?v:{)?v0n;
       ;n1< .95<


        .91<

Druckt, 1wenn streng aufsteigend, 0ansonsten.

> <> 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 dies 0[alles von den Strings entfernt hat, 0drü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)

"1\"# &&+.@

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)

"1
 =
 '
 <
""'("']
 ?
 :_7/!\_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)

"1\"# &&+.@\""" "" "
#=
''''
xxx
xxx''';print hex(
input())#xxx
'''
xxx
xxx'''#";

Die xxxs stellen irrelevante Teile dar, die durch mehrzeilige Zeichenfolgen oder Kommentare auskommentiert wurden. Dazwischen liegt print hex(input())das Kernprogramm. Dies wird mit einem führenden ausgegeben 0x, 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)

"1\"# &&+.@\""" "" "
#=
''''
<<s
""'("']0=~2base{+}*}

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 ( swird 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 um 2baseund summieren dann die Bits mit {+}*. Der nächste }ist unübertroffen und kommentiert den Rest des Programms überkommentiert.

Julia (Aufgabe 16, Fibonacci)

"1\"# &&+.@\""" "" "
#=
xxx
xxx=#print(([1 1;1 0]^int(readline()))[1,2])
#=
xxx
xxx=#.91<0#xxx

#=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)

"1\"# &&+.@\""" "" "
#=
''''
<<s
xxx
s
l=gets
a='+-'+?-*~/$/+'-+'
puts a+'
| %s |
'%l+a#xxx

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)

"1\"# &&+.@\""" "" "
#=
''''
<<s
""'("xxx
"
R"xxx"[?S"!"*"
xxx
xxx"ri:X{_~X+S*'/@S*_'\4$N}%_sW%1>"xxx
xxx
xxx";

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 ist

ri:X{_~X+S*'/@S*_'\4$N}%_sW%1>

zwischen.

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 CJam

'("'

Drü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.

"1\"09!#.&&+.@"" "" "#|"
#=
''''
<<s
11]0=~2base{+}*}
 ?
 :_7/!\_7%!@
"
R"Happy Birthday, "[?S"!"*"
>0[0>i:0(?v:{)?v0n;\!/
$'main';n1< .95<
(-[Hello, World!]o#''';print(input()in input());'''"]];ri:X{_~X+S*'/@S*_'\4$N}%_sW%1>"=#print(([1 1;1 0]^int(readline()))[1,2])#=)?(!?)
s
l=gets
a='+-'+?-*~/$/+'-+'
puts a+'
| %s |
'%l+a# =##'''#";e# |#(print(format"~x"(eval(read))))

Ich könnte ein paar Bytes für Julia sparen, da nicht abgeschlossene mehrzeilige Kommentare einen Fehler für STDERR auslösen.

Sp3000
quelle
Tolles Zeug. Was ist die Aufgabe für TRANSCRIPT?
Cabbie407,
@ Cabbie407 Ich versuche immer noch zu optimieren, welche Sprache welche Aufgabe bekommt, aber momentan hat TRANSCRIPT Hello World übernommen, und Rail hat zur Tab-Aufgabe gewechselt.
Sp3000,
Ah, jetzt kann ich sehen, dass ;)ich wegen der langen Beschreibung zögere, irgendetwas in meiner Antwort zu ändern. lol
Cabbie407
26

7 8 9 10 Sprachen, 398 431 447 507 Bytes

Dies ist wahrscheinlich das Beste, was ich in die aktuelle Lösung einbauen kann.

#if      + 0+0/*^",v  +- '[.,][[" ,yadhtrib yppaH"l?!;offf4+ + +0.0 +aa<*/
a=0--0;b=input();print(sorted(set(b))==list(b));[[""""                 ^ <
print("Hello, World!")--[[vv? +<
#endif/*  >.!0 + +1ffr"!"~< */
#include<stdio.h>/*>:1 +?!^>i:1^*/
int main(){int a=1,b=1,c,i;scanf("%d",&i);if(1//**/1==2
){printf("%x",/*>&:7/.7%.@*/i);}else{for(;--i-1>0;a=b,b=c)c=a +b;printf("%d",b);}}/*]]--"""]];#@;_J + + \+*\-hhlz \+s[\|dzd\|)J "` + +,*.]]]*/SSSTNSSNSNSTNTTTTTSSSTNSNSTNTTTTTTSSTNTTSNSSNNSSSNTTTTNSTNNNN

Die letzte Zeile enthält Whitespace-Code, der so codiert ist, dass SE ihn nicht aufnimmt. Ersetzen Sie zum Ausführen des Codes alle Sdurch Leerzeichen, TTabulatoren und NZeilenumbrüche.

C89, Aufgabe 16

Folgendes sieht der Compiler:

int main(){int a=1,b=1,c,i;scanf("%d",&i);if(1/ 1==2
){printf("%x",i);}else{for(;--i-1>0;a=b,b=c)c=a+b;printf("%d",b);}}

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.

int main(){int a=1,b=1,c,i;scanf("%d",&i);if(1
){printf("%x",i);}else{for(;--i-1>0;a=b,b=c)c=a+b;printf("%d",b);}}

Lua, Aufgabe 2

Hier ist die Grundstruktur.

#comment
a=0--comment
print("Hello, World!")--[[
... multiline comment ...
]]--comment

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.

#comment
a=0--0;b=input();print(sorted(b)==list(b));[["""
... multiline string ...
"""]];#comment

Pyth, Aufgabe 17

Pyth ist nett für diese Sache. Es nimmt die erste #als while 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:

#if      + 0+0/*^" string " ,yadhtrib yppaH" string """" string "Hello, World!" string "!"  string "%d"  string "%x" string "%d" string """]];#@;_J + + \+*\-hhlz \+s[\|dzd\|)J " string

> <>, 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:

#                  v            " ,yadhtrib yppaH"l?!;offf4+ + +0.0 +aa<*/
                   i                                                   ^ <
                   !      vv? +<
          >.!0 + +1ffr"!"~<
                   >:1 +?!^>i:1^

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. Auch 0/0 == 0.

#if      + 0+0/*^
                >&:7/.7%.@

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 Sdurch Leerzeichen, TTabulatoren und NZeilenumbrüche.

SSSSSSSSSSSSSSSN
SSSSSSSSSSSSSSSSSSN
SSN
SSSSSN
SN
SSN
SSSSSSSSSSSTN
SSN
SN
STN
TTTTTSSSTN
SN
STN
TTTTTTSSTN
TTSN
SSN
N
SSSN
TTTTN
STN
N
N
PurkkaKoodari
quelle
9

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

I!ga:0m@0:0v:uIN[(oTM0,0i)EN1N1Y1RCkw(hR`1.+0``&2o`)@>3@AB0`u`rZ4AB6({a}V7)BN8AZ9@m]Iv<2W##YqlPByc:((J['.'@]X4)X4RL3)Jnc.:n.RVcc:cRL4|0Iv=3{d:sXaRLaFj,ad@j@j:'\d:(RVdR'\'/).d|0dJ:n}m:'+.'-X#a+2.'+.n."| "Iv=5La{i+:oSio}j:ak:bPv=11?a>1&0INa%(2,a)[((J_M ZRVl)|0)Jnl?lJnlcJnd.n.RVdm.a.RVmih:$+TBa({j@aEQk}FI0,#a).saTB16a>b?abh=1ua//7.s.a%7a+bbINa"Happy Birthday, ".a.'!"Hello, World!"]@v

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, ermittelt udie Anzahl der Nullen in dieser Liste (die Variable wird explizit mit Null initialisiert) und speichert die Nummer in v(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 vanhand der Version ausgewählt werden.

Versionen und Aufgaben

0.15.09.04

Diagnose: (oTM0,0i)(Behebung eines Fehlers mit dem Tri- MOperator, 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, wenn vkleiner 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( ENOperator umerate hinzugefügt )

Aufgabe 1: Iv<2W##YqlPBy(gleicher Setup-Code wie oben) gefolgt von l?lJnl(bei Zeilenumbrüchen beitreten)

0.15.08.03

Diagnose: 1N1( Nals Kurzversion des INOperators 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 in c) gefolgt von cJn(auf Newline verbinden)

0.15.08.01

Diagnose: Y1(hinzugefügter YAnk Operator)

Schritt 19: Iv=3{d:sXaRLaFj,ad@j@j:'\d:(RVdR'\'/).d|0dJ:n}(Setup: Wenn v3, bauen Sie die obere Hälfte des Diamanten ein d), gefolgt von d.n.RVd(umgekehrt für die untere Hälfte und fügen Sie eine neue Zeile hinzu)

0.15.06.19

Diagnose: RCk( RAndom CHoice Operator hinzugefügt )

Schritt 17: m:'+.'-X#a+2.'+.n."| "(setup: build +----+\n| string in m) gefolgt von m.a.RVm(wrap input in mund reverse of m)

0.15.06.12

Diagnose: k(vorinitialisierte kVariable bis ", "; vorher war sie undefiniert und damit null)

Aufgabe 16: Iv=5La{i+:oSio}(Wenn v5 ist, generiere Fibonacci-Zahl in i), gefolgt voni

0.15.06.08 (Hinweis: Die Versionsnummer wurde erst nach dem folgenden Festschreiben geändert)

Diagnose: w(vorinitialisierte wVariable bis `\s+`)

Aufgabe 15: h:$+TBa(Eingabe in Binär- und Summenziffern konvertieren; Ergebnis hfü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 nimmt h( 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 Vars a, bzu globalen Variablen j, kso dass sie in einer Funktion verfügbar sein werden) , gefolgt von ({j@aEQk}FI0,#a).s(Filter für Indizes in adenen die entsprechenden Zeichen entsprechen b, 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 Ausdruck uwird zu null ausgewertet. )

Schritt 14: aTB16(konvertiere To Base 16)

0.15.05.24

Diagnose: rZ4(Erstellt eine rspezielle 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( ZIP-Operator hinzugefügt )

Aufgabe 12: h=1(Die Summe der Bits aus Aufgabe 15 muss gleich 1 sein.)

0.15.05.11

Diagnose: AB6( ABMehrwertoperator)

Aufgabe 11: Pv=11?a>1&0INa%(2,a)[...]@v(Wenn ves sich um 11 handelt, wird ausgegeben, 1wenn die Eingabe größer als 1 ist und eine kleinere Zahl sie exakt teilt. 0Andernfalls vkönnen Sie vals Index für die Liste entscheiden, was ausgegeben werden soll.)

0.15.05.02

Diagnose: ({a}V7)(hinzugefügter VOperator; wenn nicht Vdefiniert, 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( Bitwise Negation operator hinzugefügt )

Schritt 9: a+b

0.15.04.23

Diagnose: AZ(vorinitialisierte AZVariable in Großbuchstaben)

Aufgabe 5: bINa( INgibt die Anzahl der Vorkommen an)

0.15.04.20

Diagnose: m@0:0gefolgt von9@m

Die mVariable ist auf 1000 vorinitialisiert. Bei diesem Commit wurde der @Operator so festgelegt, dass er l-Werte zurückgibt. Zuvor gab die Zuordnung zu m@0eine Warnung und tat nichts. Daher wird nach dem Bugfix die erste Anweisung mauf gesetzt 0000, was ein legaler Index für ist 9. Pre-Bugfix, mbleibt 1000, 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 .

DLosc
quelle
4

6 Sprachen, 226 Bytes (229 je nachdem, wie \x1bakzeptiert wird!)

/&&#[+.#]@>>+[>,]<[<]>>[.>]>\[/;//;#<?die("\x1bc".max($argv[1],$argv[2]));/*
$a=['Hello','World'];//;printf"%s, %s!
",$a[0]||'Happy Birthday',$a[1]||pop;#";$a="\
#";alert(prompt().match("\t")?"I hate tabs!":"I love spaces!");/\]/

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

/&&#[+.#]@>>+[>,]<[<]>>[.>]>\[/;//;
$a=['Hello','World'];//;printf"%s, %s!
",$a[0]||'Happy Birthday',$a[1]||pop;

Verwendung:

ruby cluster

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, Hellound dann ein Array erstellen, das enthalten und Worldmit printf(zum Hinzufügen des ,und !) gedruckt wird .

3. Perl

/&&#[+.#]@>>+[>,]<[<]>>[.>]>\[/;//;
$a=['Hello','World'];//;printf"%s, %s!
",$a[0]||'Happy Birthday',$a[1]||pop;

Verwendung:

perl cluster <name>

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 3 Happy Birthdayund pop(der das letzte Argument für das Befehlszeilenprogramm zeigt) ersetzen können ).

4. JavaScript

/&&#[+.#]@>>+[>,]<[<]>>[.>]>\[/;
$a=['Hello','World'];
",$a[0]||'Happy Birthday',$a[1]||pop;#";$a="\
#";alert(prompt().match("\t")?"I hate tabs!":"I love spaces!");/\]/

Verwendung: In die Browserkonsole einfügen und ausführen.

Wie bei Ruby und Perl erstellt die erste Zeile im Wesentlichen unbrauchbare RegExpObjekte. Anschließend speichern wir ein unbrauchbares Array in $aund instanziieren zwei unbrauchbare Zeichenfolgen, eine mit dem Ruby / Perl-Code und eine mit einer neuen Zeile und einem #, prompt()und geben dann alert()das erwartete Ergebnis ein von den meisten Menschen für Herausforderung 4. Wir beenden mit einem anderen nutzlosen RegExpObjekt, 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 hat NaNauf 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)

/&&#[+.#]@>>+[>,]<[<]>>[.>]>\[/;//;#<?die("\x1bc".max($argv[1],$argv[2]));

Verwendung:

php cluster <x> <y>

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 wir die()sofort im Code einen Bildschirm clear ( \x1bc) ausgeben und dann das max()der ersten beiden Argumente.

Dom Hastings
quelle
Sie können das wörtliche ESCape-Zeichen in das Zeichenfolgenliteral einfügen. Fügen Sie einfach eine Notiz hinzu, dass es vorhanden ist ( the first character in the first string literal is the byte ASCII 27). Ihre Punktzahl ist 226.
Katze
@cat Ja, ich denke, du hast recht, ich habe vorerst so gelassen, wie es ist, aber ich habe 226 in den Titel aufgenommen. Ich habe vergessen, wie sehr ich diese Herausforderung genossen habe, ich könnte jetzt wahrscheinlich ein bisschen mehr tun und mit ES6 .match'\x09'(wo die sind) werde ich vielleicht sehen, ob ich irgendwann mehr hinzufügen kann!
Dom Hastings
4

6 Sprachen, 450 404 Bytes

Bash, Brainfuck, C, Gawk4, JavaScript und Minimal-2D

/*\t/#[R,+/D
/\t/ # UL.-L<script>var s=prompt().split(' ');alert(+s.pop()+ +s.pop())</script>
sed "s/^\(.*\)$/Happy Birthday, &!/;q"&&0
/\t/#*/
#define func
func main(){puts("Hello, World!");}
//{split($0,b,_);for(i in b)a[NR][i]=b[i++]}END{for(;j++<i;print"")for(k=NR;k;)printf a[k--][j]}
#//]++++++++[>+>+>++++++>++++++++<<<<-]>>++>--<<[>>>>>+++[<++++[<<....>....>-]<<<.>>>>-]<<<[>>+<<-]<[[>+<-]<]>>-]

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 gibt sed (GNU sed) 4.2.2

bash --version gibt GNU bash, Version 4.3.30(1)-release (x86_64-pc-linux-gnu)

Also kommt der sed Teil auf

sed "s/^\(.*\)$/Happy Birthday, &!/;q"

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 gibt bf - 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

0 8 10 46 64 C2 C1
  ^

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 C1auf 3, die Anzahl der gleichen Zeilen

    [<++++

setzt C2auf 4, die Anzahl von " ....@@@@" in einer Zeile (am Anfang)

        [<<....>....>-]<<<.>>>
    >-]

druckt eine komplette Zeile, die dekrementiert C2wird,
wenn C2Null ist, druckt sie eine neue Zeile und dekrementiert C1.

Wenn C1Null ist, passiert die Magie

    <<<[>>+<<-]
    <[[>+<-]<]

Die 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 gibt gcc (Ubuntu 4.9.2-10ubuntu13) 4.9.2

Der tatsächliche C-Code

#define func
func main(){puts("Hello, World!");}
#

Das #define funcsoll 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 gibt GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p11, GNU MP 6.0.0)

awk sieht das

/*\t/
/\t/
sed "s/^\(.*\)$/Happy Birthday, &!/;q"&&0
/\t/
func main(){puts("Hello, World!");}
//{split($0,b,_);for(i in b)a[NR][i]=b[i++]}END{for(;j++<i;print"")for(k=NR;k;)printf a[k--][j]}
#

Die Suchmuster inklusive \tauswerten bis false. Ich habe hier tab gewählt, weil ich denke, dass es nicht in der Eingabe sein kann. sedbewertet zu false. "the string"&&0wird 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

elaic
parli
ucfit
srigs

Ausgabe

supe
rcal
ifra
gili
stic

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.

<script>var s=prompt().split(' ');alert(+s.pop()+ +s.pop())</script>

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

R,+/D
UL.-L

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 sich minimal2D.pyim 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.

#!/bin/bash
# Task  3: bash
echo "Dr. Hfuhruhurr" | ./cluster.html 2>/dev/null;echo
# Task 18: awk 
printf "elaic\nparli\nucfit\nsrigs\n" | awk -f cluster.html 2>/dev/null;echo
# Task  2: C
cp ./cluster.html ./cluster.c;gcc -w -o cluster cluster.c;./cluster;rm cluster cluster.c;echo
# Task  1: Minimal-2D
python minimal2D.py cluster.html <<<"This
has
to be
copied     !!!";echo
# Task 20: brainfuck
bf cluster.html;echo
# Task  9: JavaScript
firefox cluster.html 2>/dev/null
#google-chrome cluster.html 2>/dev/null

Dort finden Sie auch den Befehl zum Ausführen der Tests einzeln.

Habe Spaß!

Cabbie407
quelle
Der Brainfucker hat ein Problem; Der Code hat unsymmetrische Klammern und wird nicht korrekt ausgeführt (Sie müssen die gesamte Datei ausführen, nicht nur den relevanten Teil). Außerdem sind die Quadrate des Schachbretts 4x3 statt 4x4, um im Text quadratischer auszusehen.
PurkkaKoodari
Danke für den Tipp. Hier läuft es gut. Ich führe immer die gesamte Datei aus, wie Sie in meinem Skript sehen können. Ich bin mir nicht sicher, ob der Interpreter die Klammern überprüfen soll, bevor er ausgeführt wird. Mir macht es nichts aus. Aber ich habe diese Zeilenanzahl übersehen. Muss das ändern.
Cabbie407,
Nun, ich habe es mir noch einmal angesehen und hoffe, dass ich es behoben habe.
Cabbie407,