La langue anglaise et la plupart des langages de programmation sont écrits et lus de gauche à droite, de haut en bas, mais ce n'est pas nécessairement le cas .
En fait pour le bloc de texte
ABC
DEF
Je peux penser à huit manières connexes de le lire:
- De gauche à droite, de haut en bas (LTR-TTB):
ABCDEF
- De haut en bas, de gauche à droite (TTB-LTR):
ADBECF
- De gauche à droite, de bas en haut (LTR-BTT):
DEFABC
- De bas en haut, de gauche à droite (BTT-LTR):
DAEBFC
- De droite à gauche, de haut en bas (RTL-TTB):
CBAFED
- De haut en bas, de droite à gauche (TTB-RTL):
CFBEAD
- De droite à gauche, de bas en haut (RTL-BTT):
FEDCBA
- De bas en haut, de droite à gauche (BTT-RTL):
FCEBDA
Défi
Écrivez un bloc de texte rectangulaire qui peut être lu dans chacune des huit façons ci-dessus comme huit programmes à ligne unique dans la langue de votre choix. Chacun de ces programmes doit produire un entier différent de un à huit.
Peu importe le sens de lecture qui sort quel numéro, ils n'ont pas à correspondre aux chiffres ci-dessus. Par exemple, si votre bloc de texte était encore
ABC
DEF
puis le programme de ABCDEF
sortie de puissance 5
et de FEDCBA
sortie de puissance 2
, et les six autres programmes génèrerait 1
, 3
, 4
, 6
, 7
et 8
dans un certain ordre.
Le bloc de texte peut contenir n'importe quel caractère à l'exception des terminateurs de ligne .
La sortie devrait aller vers stdout ou une alternative similaire si votre langue n'a pas de stdout appropriée. Il n'y a aucune entrée. Vous pouvez supposer que les programmes sont exécutés dans un environnement REPL.
Pietu1998 a charitablement écrit un JSFiddle qui donne aux 8 programmes différents sur une seule ligne lorsqu'ils reçoivent un bloc de texte. Je l'ai transformé en extrait de pile:
<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>
Vous pouvez toujours trouver la version CJam de Martin ici .
Notation
Votre score est la zone de votre bloc de texte (la largeur multipliée par la hauteur). La soumission avec le score le plus bas gagne. (Essentiellement, le plus petit code gagne, d'où la balise code-golf .) Tiebreaker revient à la soumission publiée précédemment.
L'exemple est 2 par 3, donc son score est 6. Un score inférieur à 4 (2 par 2) est impossible car alors certains des 8 programmes seraient identiques et ne pourraient pas produire deux valeurs différentes.
String.prototype.repeat()
soit encore un peu nouveau. A également confirmé de travailler dans IE maintenant. nouveau violon