O idioma inglês e a maioria das linguagens de programação são escritas e lidas da esquerda para a direita, de cima para baixo, mas esse não precisa ser o caso .
De fato, para o bloco de texto
ABC
DEF
Posso pensar em oito maneiras relacionadas que podem ser lidas:
- Da esquerda para a direita, de cima para baixo (LTR-TTB):
ABCDEF
- De cima para baixo, da esquerda para a direita (TTB-LTR):
ADBECF
- Da esquerda para a direita, de baixo para cima (LTR-BTT):
DEFABC
- De baixo para cima, da esquerda para a direita (BTT-LTR):
DAEBFC
- Direita para a esquerda, de cima para baixo (RTL-TTB):
CBAFED
- De cima para baixo, da direita para a esquerda (TTB-RTL):
CFBEAD
- Direita para a esquerda, de baixo para cima (RTL-BTT):
FEDCBA
- De baixo para cima, da direita para a esquerda (BTT-RTL):
FCEBDA
Desafio
Escreva um bloco retangular de texto que possa ser lido em cada uma das oito maneiras acima, como oito programas de linha única no idioma de sua escolha. Cada um desses programas deve gerar um número inteiro diferente de um a oito.
Não importa qual direção de leitura gera qual número, eles não precisam corresponder aos números acima. Por exemplo, se o seu bloco de texto ainda estivesse
ABC
DEF
em seguida, o programa de ABCDEF
saída de poder 5
e FEDCBA
saída de poder 2
, e os outros seis programas saída seria 1
, 3
, 4
, 6
, 7
, e 8
em alguma ordem.
O bloco de texto pode conter qualquer caractere, exceto os terminadores de linha .
A saída deve ir para stdout ou uma alternativa semelhante se o seu idioma não tiver um stdout adequado. Não há entrada. Você pode assumir que os programas são executados em um ambiente REPL.
Pietu1998 caridosamente escreveu um JSFiddle que fornece os 8 programas de linha única diferentes quando recebe um bloco de texto. Eu fiz isso em um snippet de pilha:
<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>
Você ainda pode encontrar a versão CJam de Martin aqui .
Pontuação
Sua pontuação é a área do seu bloco de texto (a largura é a altura). A finalização com a menor pontuação vence. (Essencialmente o menor código vence, daí a tag code-golf .) O desempate vai para o envio publicado anteriormente.
O exemplo é 2 por 3, portanto, sua pontuação é 6. Uma pontuação menor que 4 (2 por 2) é impossível porque alguns dos 8 programas seriam idênticos e não poderiam gerar dois valores diferentes.
String.prototype.repeat()
ainda é meio novo. Também confirmado para trabalhar no IE agora. nova fiddle