La lingua inglese e la maggior parte dei linguaggi di programmazione sono scritti e letti da sinistra a destra, dall'alto verso il basso, ma non è necessario .
In effetti per il blocco di testo
ABC
DEF
Posso pensare a otto modi correlati in cui potrebbe essere letto:
- Da sinistra a destra, dall'alto verso il basso (LTR-TTB):
ABCDEF
- Dall'alto verso il basso, da sinistra a destra (TTB-LTR):
ADBECF
- Da sinistra a destra, dal basso verso l'alto (LTR-BTT):
DEFABC
- Dal basso verso l'alto, da sinistra a destra (BTT-LTR):
DAEBFC
- Da destra a sinistra, dall'alto verso il basso (RTL-TTB):
CBAFED
- Dall'alto verso il basso, da destra a sinistra (TTB-RTL):
CFBEAD
- Da destra a sinistra, dal basso verso l'alto (RTL-BTT):
FEDCBA
- Dal basso verso l'alto, da destra a sinistra (BTT-RTL):
FCEBDA
Sfida
Scrivi un blocco rettangolare di testo che può essere letto in ciascuno degli otto modi sopra indicati come otto programmi a riga singola nella tua lingua preferita. Ognuno di questi programmi dovrebbe generare un numero intero diverso da uno a otto.
Non importa quale direzione di lettura genera quale numero, non devono corrispondere ai numeri sopra. Ad esempio, se il blocco di testo fosse fermo
ABC
DEF
quindi il programma ABCDEF
di uscita potenza 5
e FEDCBA
uscita potenza 2
, e gli altri sei programmi sarebbe uscita 1
, 3
, 4
, 6
, 7
, e 8
in un certo ordine.
Il blocco di testo può contenere qualsiasi carattere tranne i terminatori di riga .
L'output dovrebbe andare su stdout o un'alternativa simile se la tua lingua non ha uno stdout corretto. Non ci sono input. Si può presumere che i programmi siano eseguiti in un ambiente REPL.
Pietu1998 ha scritto caritatevolmente un JSFiddle che fornisce agli 8 diversi programmi a riga singola quando viene dato un blocco di testo. L'ho trasformato in uno snippet di stack:
<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>
Puoi ancora trovare la versione CJam di Martin qui .
punteggio
Il tuo punteggio è l'area del tuo blocco di testo (la larghezza per l'altezza). Vince l'invio con il punteggio più basso. (In sostanza vince il codice più piccolo, da cui il tag code-golf .) Tiebreaker va alla precedente presentazione pubblicata.
L'esempio è 2 per 3, quindi il suo punteggio è 6. Un punteggio inferiore a 4 (2 per 2) è impossibile perché alcuni degli 8 programmi sarebbero identici e non potrebbero generare due valori diversi.
String.prototype.repeat()
ancora un po 'nuovo. Anche confermato di funzionare in IE ora. nuovo violino