Die englische Sprache und die meisten Programmiersprachen werden von links nach rechts und von oben nach unten geschrieben und gelesen, aber das muss nicht der Fall sein .
In der Tat für den Textblock
ABC
DEF
Ich kann mir acht verwandte Arten vorstellen, wie es gelesen werden könnte:
- Von links nach rechts, von oben nach unten (LTR-TTB):
ABCDEF
- Von oben nach unten, von links nach rechts (TTB-LTR):
ADBECF
- Von links nach rechts, von unten nach oben (LTR-BTT):
DEFABC
- Von unten nach oben, von links nach rechts (BTT-LTR):
DAEBFC
- Von rechts nach links, von oben nach unten (RTL-TTB):
CBAFED
- Von oben nach unten, von rechts nach links (TTB-RTL):
CFBEAD
- Von rechts nach links, von unten nach oben (RTL-BTT):
FEDCBA
- Von unten nach oben, von rechts nach links (BTT-RTL):
FCEBDA
Herausforderung
Schreiben Sie einen rechteckigen Textblock, der auf jede der acht oben genannten Arten als acht einzeilige Programme in der Sprache Ihrer Wahl gelesen werden kann . Jedes dieser Programme sollte eine andere Ganzzahl von eins bis acht ausgeben.
Es spielt keine Rolle, welche Leserichtung welche Zahl ausgibt, sie müssen nicht mit den obigen Zahlen übereinstimmen. Zum Beispiel, wenn Ihr Textblock noch ist
ABC
DEF
dann geht das Programm ABCDEF
Macht Ausgang 5
und FEDCBA
Macht Ausgang 2
, und die anderen sechs Programme ausgeben würde 1
, 3
, 4
, 6
, 7
, und 8
in einer bestimmten Reihenfolge.
Der Textblock kann beliebige Zeichen mit Ausnahme der Zeilenendezeichen enthalten .
Die Ausgabe sollte nach stdout oder einer ähnlichen Alternative erfolgen, wenn Ihre Sprache keine ordnungsgemäße stdout hat. Es erfolgt keine Eingabe. Sie können davon ausgehen, dass die Programme in einer REPL-Umgebung ausgeführt werden.
Pietu1998 hat gemeinnützig eine JSFiddle geschrieben , die den 8 verschiedenen einzeiligen Programmen einen Textblock gibt. Ich habe es zu einem Stack-Snippet gemacht:
<script>function f(n){n=n.split("\n");var e=n.map(function(n){return n.length}).sort()[n.length-1];n=n.map(function(n){return(n+Array(e+1).join(" ")).substring(0,e)});var t=n[0].split("").map(function(e,t){return n.map(function(n){return n[t]}).join("")});n=[n.join(""),n.reverse().join(""),t.join(""),t.reverse().join("")],n=n.concat(n.map(function(n){return n.split("").reverse().join("")})),document.getElementById("a").innerHTML=n.map(function(n,e){return document.getElementById("b").checked?n+" "+"LLTTRRBB"[e]+"T"+"RRBBLLTT"[e]+"-"+"TBLRBTRL"[e]+"T"+"BTRLTBLR"[e]:n}).join("\n")}</script><textarea onkeyup="f(this.value)" id="c" placeholder="Code"></textarea><br/><input type="checkbox" id="b" onchange="f(document.getElementById('c').value)" checked/> <label for="b">Show directions</label><br/><pre id="a"></pre>
Sie können immer noch finden Martins CJam Version hier .
Wertung
Ihre Punktzahl ist der Bereich Ihres Textblocks (die Breite multipliziert mit der Höhe). Die Einsendung mit der niedrigsten Punktzahl gewinnt. (Im Wesentlichen gewinnt der kleinste Code, daher der Code-Golf- Tag.) Tiebreaker wechselt zu dem zuvor veröffentlichten Beitrag.
Das Beispiel ist 2 mal 3, also ist die Punktzahl 6. Eine Punktzahl von weniger als 4 (2 mal 2) ist unmöglich, da dann einige der 8 Programme identisch wären und nicht zwei verschiedene Werte ausgeben könnten.
quelle
String.prototype.repeat()
noch ein bisschen neu zu sein. Auch bestätigt, jetzt im IE zu arbeiten. neue GeigeAntworten:
J, 3 · 3 = 9
Alle Richtungen ausführen:
Erläuterung:
[
(left
) nimmt die linke Seite seiner beiden Operanden, so dass es im Wesentlichen die gesamte rechte Seite unseres Ausdrucks aufhebt, z . B.1+2[2+2+2
wird1+2[6
und dann1+2
.n
Operandenausdrücke, einen mit der Zahl1
und einen mit nur2
s. Die Zusätze mit1
erzeugen die ungeraden Zahlen und die anderen die geraden.quelle
[
durch;
und es sollte in der REPL-Umgebung der meisten Sprachen funktionieren.Befunge-98 ,
5x5 = 255x3 = 15Ich habe ein kleines Skript geschrieben, das die richtigen Zahlen für mich gefunden hat. Es hat eine Weile gedauert, aber hey, ich habe gerade GolfScript geschlagen! : D
Die Skripte, die ich verwendet habe, sind hier und hier , aber ich empfehle nicht, sie anzuschauen, da der Codestil extrem krebserregend ist.
Unterprogramme
Alte Version
Unterprogramme
Geben Sie die Nummern 1-8 aus.
quelle
Brainfuck $ , 4x3 = 12
Gehirnfick $ ist sehr ähnlich wie Brainfuck , hat aber einige weitere Befehle, darunter ein Befehl der aktuellen Zelle Wert als numerische Ausgabe zu Ausgabe, die für diese Herausforderung sehr nützlich war.
Einzeilige Befehle:
quelle
TECO, 3 · 5 = 15
=
Gibt den Wert des letzten numerischen Ausdrucks aus.\
wird verwendet, um Zahlen aus Zeichenfolgen zu lesen oder zu schreiben, aber ich verwende es hier nur als Ablage.+4 5+2=4 +1 \
7+ +2+4=1 4 5 \
6+ +2+1=4 4 \ 5
3+1 \+2=4 +4 5
2\ 1+ 4=2+5 4+
5\ 5 4 1=4+2+ +
15 \ 4 4=1+2+ +
45 4+ 4=2+\ 1+
8quelle
Piet - 12 x 12 = 144
Da ein einzeiliges Programm niemals beendet werden kann, wird angenommen, dass es nach der ersten Ausgabe beendet wird.
8 Unterprogramme in einem Bild:
quelle
GolfScript, 4x4 = 16
Nutzt den guten alten "Superkommentar": Ein nicht passender
}
ignoriert den Rest des Codes (in diesem Fall hätte ein normaler Kommentar#
genauso gut funktioniert, da der gesamte Code als einzelne Zeile ausgeführt wird). Von jeder Ecke gibt es also entweder nur eine einzige Zahl oder (in der anderen Richtung) diese Zahl um 1 erhöht, da die Ausführung beendet wird und der Stapelinhalt gedruckt wird. Die 8 Programme sindquelle
Haskell, 26 × 26 = 676
Verwendet comments (
--
), um die Rückwärts- und Seitwärtsbits auszublenden. Das macht es schrecklich langquelle
Vorspiel , 5x3 = 15
Dies setzt den Python-Interpreter voraus , der Werte als Zahlen anstelle von Zeichencodes ausgibt.
Dies schlägt Befunge $ nicht, aber es schlägt meine GolfScript-Einsendung und ich mag seine Einfachheit. Beachten Sie auch, dass nur 9 Zeichen ohne Leerzeichen verwendet werden.
ist weniger als bei allen anderen Einsendungen(J schlägt erneut zu :)). Im Prelude wird jede Ziffer einzeln auf den Stapel geschoben, und je nach Pfad befindet sich direkt vor dem eine andere Ziffer!
, die nur das oberste Stapelelement druckt. Die 8 Programme sind:Alternativ gibt es auch
Dadurch werden die ungeraden Zahlen auf den vertikalen Pfaden verschoben und
1
auf den horizontalen Pfaden inkrementiert :quelle
CJam - 7 × 7
Nicht beeindruckend, aber es gab keine CJam-Antwort und ich mag es, wie es aussieht :)
Es nutzt hauptsächlich die Tatsache, dass
];
der Stapel gelöscht wird.Probieren Sie es online aus
quelle
Ruby - 7x7
Auch nicht beeindruckend, dieselbe Taktik wie die Antwort von Haskell.
quelle
R 9x9
Kein Leerzeichen, keine Kommentare.
Ich denke, dies könnte auf jede gewünschte Größe erweitert werden. Ich dachte, der Modulo-Operator sei der flexibelste der verfügbaren Operatoren, da er verhindert, dass Werte unabhängig von der Datengröße zu groß werden, und es gibt keinen Effekt, wenn wirklich große Zahlen dazwischen liegen.
quelle
Diese Programmiersprache, 5 * 9 = 45
Was übersetzt dazu:
Da
;
das Programm beendet wird, bedeutet dies:Erklärung: Eine beliebige Zahl von
0
bis9
legt die entsprechende Ziffer auf den Stapel.+
Nimmt die zwei obersten Wertex
undy
von dem Stapel und drücktx + y
auf den Stapel.i
gibt den Stack als Integer aus.quelle