Aquí hay una fuente pixelada de 5 por 7 para los dígitos del 0 al 9:
.███.
█...█
█...█
█...█
█...█
█...█
.███.
..█..
███..
..█..
..█..
..█..
..█..
█████
.███.
█...█
....█
...█.
..█..
.█...
█████
.███.
█...█
....█
..██.
....█
█...█
.███.
█..█.
█..█.
█..█.
█████
...█.
...█.
...█.
█████
█....
█....
.███.
....█
█...█
.███.
.███.
█...█
█....
████.
█...█
█...█
.███.
█████
....█
....█
...█.
...█.
..█..
..█..
.███.
█...█
█...█
.███.
█...█
█...█
.███.
.███.
█...█
█...█
.████
....█
█...█
.███.
(Esta fuente y esta página probablemente se verán mejor si ejecuta este código JavaScipt en la consola de su navegador o en la barra de URL con el prefijo javascript:
:. $('#question pre,.answer pre').css('line-height',1)
)
Escriba dos bloques de texto rectangulares del mismo tamaño, uno para representar los espacios vacíos ( .
) en la fuente de arriba y otro para representar los espacios rellenos ( █
).
Cuando estos dos bloques de texto están dispuestos en el mismo patrón de 5 × 7 que uno de los dígitos anteriores, entonces el bloque de texto grande resultante debe ser un programa que imprima ese dígito en stdout. Esto debería funcionar para los 10 dígitos.
Por ejemplo, si su .
bloque de texto era
---
'''
y tu █
bloque de texto era
ABC
123
entonces el 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'''
debería salir 0
. Del mismo modo, el programa
------ABC------
''''''123''''''
ABCABCABC------
123123123''''''
------ABC------
''''''123''''''
------ABC------
''''''123''''''
------ABC------
''''''123''''''
------ABC------
''''''123''''''
ABCABCABCABCABC
123123123123123
debería salir 1
, y así sucesivamente hasta el programa para 9
.
Puede usar este fragmento de pila para crear los programas con forma de dígitos:
<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>
Detalles
- Ninguno de los 10 programas de bloques de texto grandes debe requerir entrada. Solo genera el dígito único más una nueva línea final opcional. Salida a stdout o una alternativa similar.
- Ninguno de los programas puede leer o acceder a su propio código fuente. Trate esto como un estricto desafío de quine .
- Los bloques de texto pueden no ser idénticos y deben tener dimensiones distintas de cero.
- Los bloques de texto pueden contener caracteres, excepto los terminadores de línea .
- Los 10 programas deben ser programas completos escritos en el mismo idioma, no son fragmentos REPL . Opcionalmente, puede agregar una nueva línea final a todos o ninguno de ellos.
Tanteo
Su puntaje es el área (ancho por alto) de uno de sus bloques de texto. (Son del mismo tamaño, por lo que no tiene sentido contar ambos bloques). El área del ejemplo es 3 por 2, para un puntaje de 6.
El puntaje más bajo gana. En caso de empate, gana la respuesta más votada.
text blocks may not be identical
¿De Verdad? Quiero ver a alguien romper esta regla, dando dos bloques de código idénticos, que mágicamente devuelven dígitos diferentes, cuando cada número es exactamente el mismo código ^^
var t=parseInt(document.getElementById("digit").value[0]);if(isNaN(t))return void alert("Invalid digit.");
se puede escribir comovar t=document.getElementById("digit").value[0]/1;if(t!=t)return void alert("Invalid digit.");
, que es lo mismo pero más corto. Hay algunas cosas más que puedes mejorar, ¡pero se ve genial!