Aqui está uma fonte pixelizada de 5 por 7 para os dígitos de 0 a 9:
.███.
█...█
█...█
█...█
█...█
█...█
.███.
..█..
███..
..█..
..█..
..█..
..█..
█████
.███.
█...█
....█
...█.
..█..
.█...
█████
.███.
█...█
....█
..██.
....█
█...█
.███.
█..█.
█..█.
█..█.
█████
...█.
...█.
...█.
█████
█....
█....
.███.
....█
█...█
.███.
.███.
█...█
█....
████.
█...█
█...█
.███.
█████
....█
....█
...█.
...█.
..█..
..█..
.███.
█...█
█...█
.███.
█...█
█...█
.███.
.███.
█...█
█...█
.████
....█
█...█
.███.
(Essa fonte e esta página provavelmente ficarão melhores se você executar esse código JavaScipt no console do navegador ou na barra de URL prefixada por javascript:
:. $('#question pre,.answer pre').css('line-height',1)
)
Escreva dois blocos de texto retangulares de tamanho igual, um para representar os espaços vazios ( .
) na fonte acima e outro para representar os espaços preenchidos ( █
).
Quando esses dois blocos de texto são organizados no mesmo padrão 5 × 7 que um dos dígitos acima, o bloco de texto grande resultante deve ser um programa que imprima esse dígito em stdout. Isso deve funcionar para todos os 10 dígitos.
Por exemplo, se o seu .
bloco de texto foi
---
'''
e seu █
bloco de texto foi
ABC
123
então o programa
---ABCABCABC---
'''123123123'''
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
---ABCABCABC---
'''123123123'''
deve produzir 0
. Da mesma forma, o programa
------ABC------
''''''123''''''
ABCABCABC------
123123123''''''
------ABC------
''''''123''''''
------ABC------
''''''123''''''
------ABC------
''''''123''''''
------ABC------
''''''123''''''
ABCABCABCABCABC
123123123123123
deve sair 1
e assim por diante até o programa para 9
.
Você pode usar esse snippet de pilha para criar os programas em forma de dígito:
<style>textarea{font-family:monospace;}</style><script>function go(){var t=parseInt(document.getElementById("digit").value[0]);if(isNaN(t))return void alert("Invalid digit.");for(var e=document.getElementById("empty").value.split("\n"),n=document.getElementById("filled").value.split("\n"),l=[],o=0;o<7*e.length;o++){l[o]="";for(var d=0;5>d;d++)l[o]+=font[t][Math.floor(o/e.length)][d]?n[o%n.length]:e[o%e.length]}document.getElementById("output").value=l.join("\n")}font=[[[0,1,1,1,0],[1,0,0,0,1],[1,0,0,0,1],[1,0,0,0,1],[1,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]],[[0,0,1,0,0],[1,1,1,0,0],[0,0,1,0,0],[0,0,1,0,0],[0,0,1,0,0],[0,0,1,0,0],[1,1,1,1,1]],[[0,1,1,1,0],[1,0,0,0,1],[0,0,0,0,1],[0,0,0,1,0],[0,0,1,0,0],[0,1,0,0,0],[1,1,1,1,1]],[[0,1,1,1,0],[1,0,0,0,1],[0,0,0,0,1],[0,0,1,1,0],[0,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]],[[1,0,0,1,0],[1,0,0,1,0],[1,0,0,1,0],[1,1,1,1,1],[0,0,0,1,0],[0,0,0,1,0],[0,0,0,1,0]],[[1,1,1,1,1],[1,0,0,0,0],[1,0,0,0,0],[0,1,1,1,0],[0,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]],[[0,1,1,1,0],[1,0,0,0,1],[1,0,0,0,0],[1,1,1,1,0],[1,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]],[[1,1,1,1,1],[0,0,0,0,1],[0,0,0,0,1],[0,0,0,1,0],[0,0,0,1,0],[0,0,1,0,0],[0,0,1,0,0]],[[0,1,1,1,0],[1,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0],[1,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]],[[0,1,1,1,0],[1,0,0,0,1],[1,0,0,0,1],[0,1,1,1,1],[0,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]]]</script><textarea id='empty' rows='8' cols='32' placeholder='empty space text block...'></textarea><textarea id='filled' rows='8' cols='32' placeholder='filled space text block...'></textarea><br>Digit <input id='digit' type='text' value='0'> <button type='button' onclick='go()'>Generate</button><br><br><textarea id='output' rows='16' cols='64' placeholder='output...' style='background-color: #eee;' readonly></textarea>
Detalhes
- Nenhum dos 10 programas grandes de blocos de texto deve exigir entrada. Somente imprima o dígito único mais uma nova linha à direita opcional. Saída para stdout ou uma alternativa semelhante.
- Nenhum dos programas pode ler ou acessar seu próprio código-fonte. Tratar este como um estrito Quine desafio.
- Os blocos de texto podem não ser idênticos e devem ter dimensões diferentes de zero.
- Os blocos de texto podem conter qualquer caractere, exceto os terminadores de linha .
- Os 10 programas devem ser programas completos escritos no mesmo idioma, não são trechos REPL . Opcionalmente, você pode adicionar uma nova linha à direita a todos ou a nenhum deles.
Pontuação
Sua pontuação é a área (largura x altura) de um dos seus blocos de texto. (Eles são do mesmo tamanho, portanto não faz sentido contar os dois blocos.) A área do exemplo é 3 por 2, para uma pontuação de 6.
A pontuação mais baixa vence. Em caso de empate, a resposta mais votada vence.
text blocks may not be identical
mesmo? Eu quero ver alguém quebrar essa regra, dando dois codeblocks idênticos, que retornam magicamente diferentes dígitos, quando cada número é exatamente o mesmo código ^^
var t=parseInt(document.getElementById("digit").value[0]);if(isNaN(t))return void alert("Invalid digit.");
pode ser escrito comovar t=document.getElementById("digit").value[0]/1;if(t!=t)return void alert("Invalid digit.");
, que é o mesmo, mas menor. Há mais algumas coisas que você pode melhorar, mas parece ótimo!