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.
fonte
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!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 ^^Respostas:
CJam,
2018141312 * 1 = 12Experimente online: 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9
Bloco vazio
Bloco sólido
Explicação
Usei uma estratégia semelhante à solução do Sp3000 , de modo que cada bloco realiza uma multiplicação, uma adição e (possivelmente) uma operação de módulo em uma variável e salva o valor de volta. Para encontrar uma solução ideal, usei boa e velha força bruta. Escrevi um programa que pesquisa o espaço de todos os possíveis valores iniciais (os valores iniciais das variáveis CJam) e muitos milhões de pares possíveis de funções de transformação, de modo que a saída para cada dígito seja única. Depois, filtramos os resultados para que o resultado final das formas de dígitos que terminam em um bloco vazio, dos quais existem 8, possa ser mapeado de volta para o resultado correto por meio de outra fórmula de multiplicação, adição e módulo.
Após alguns dias de tempo de pesquisa na CPU, o melhor resultado até agora está no tamanho de 12! Esta solução começa com um valor de
11
, a função de transformação de bloco vazio éx * 16 + 20
, a função de resultado de bloco vazio éx % 13
, a função de transformação de bloco sólido é(x + 9) % 33
e a função de resultado de bloco sólido éx / 4
.fonte
> <> (Peixe) , 5 * 10 = 50
Bloco vazio
Bloco sólido
Este código não contém lógica ou aritmética usa apenas redirecionamentos estáticos do ponteiro de instrução 2D (IP) de> <> com 'espelhos' (
/
e\
) e duas 'setas' (<
ev
). O único outro controlador de fluxo é o 'trampolim' (!
), que passa pelo próximo caractere.O IP começa no canto superior esquerdo, na direção leste. Após alguns redirecionamentos, ele atinge um número, é empurrado para a pilha e impresso com
n
o programa termina com;
.O fluxo do programa
Um bloco 'reconhece' o estado atual do programa pelo fato de que ponto o IP entrou e com base no estado em que decide qual direção deve deixar o ponteiro (qual bloco deve ser executado a seguir) e em qual posição exata o ponteiro deve sair (que será o novo estado). É claro que os blocos não fazem lógica; todo esse comportamento vem dos redirecionadores.
fonte
CJam,
232219 * 1 = 19Bloco vazio:
Bloco sólido:
Experimente online .
Estou tentando ter sorte com coincidências matemáticas e falhas, então aqui está uma abordagem ligeiramente diferente para o mapeamento de exclusividade da solução de Martin.
Comece com 16. Blocos vazios, adicione 1 e pegue o módulo 11. Blocos sólidos se multiplicam por -1, adicione 11, multiplique por 3 e depois pegue o módulo 13. Isso mapeia magicamente
03456789
(os dígitos que terminam em um bloco vazio) para o41753026
qual usamos a indexação para acertar.12
mapas ordenadamente89
, que podemos remediar subtraindo 7.fonte
CJam,
2827 x 1 = 27Aqui está um começo.
Bloco vazio
Bloco sólido
Teste aqui. Não posso fornecer um link permanente para o código, porque o código é muito longo, portanto você precisará copiá-lo manualmente a partir do snippet do desafio.
A idéia é fazer o hash da forma da seguinte maneira:
U
.U
um total em execuçãoW
(que começa em-1
). No final, tomamos esse módulo15
, que fornece resultados exclusivos, que são usados para indexar em uma string de pesquisa.fonte