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.
String.prototype.repeat()
noch ein bisschen neu zu sein. Auch bestätigt, jetzt im IE zu arbeiten. neue Geige