Ecco un font pixel 5 per 7 per le cifre da 0 a 9:
.███.
█...█
█...█
█...█
█...█
█...█
.███.
..█..
███..
..█..
..█..
..█..
..█..
█████
.███.
█...█
....█
...█.
..█..
.█...
█████
.███.
█...█
....█
..██.
....█
█...█
.███.
█..█.
█..█.
█..█.
█████
...█.
...█.
...█.
█████
█....
█....
.███.
....█
█...█
.███.
.███.
█...█
█....
████.
█...█
█...█
.███.
█████
....█
....█
...█.
...█.
..█..
..█..
.███.
█...█
█...█
.███.
█...█
█...█
.███.
.███.
█...█
█...█
.████
....█
█...█
.███.
(Questo carattere e questa pagina avranno probabilmente un aspetto migliore se si esegue questo codice JavaScipt nella console del browser o nella barra dell'URL con il prefisso javascript:
:. $('#question pre,.answer pre').css('line-height',1)
)
Scrivi due blocchi rettangolari di testo di dimensioni uguali, uno per rappresentare gli spazi vuoti ( .
) nel carattere sopra e uno per rappresentare gli spazi riempiti ( █
).
Quando questi due blocchi di testo sono disposti nello stesso modello 5 × 7 di una delle cifre sopra, il blocco di testo grande risultante dovrebbe essere un programma che stampa quella cifra su stdout. Questo dovrebbe funzionare per tutte e 10 le cifre.
Ad esempio, se il .
blocco di testo fosse
---
'''
e il tuo █
blocco di testo era
ABC
123
quindi il programma
---ABCABCABC---
'''123123123'''
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
---ABCABCABC---
'''123123123'''
dovrebbe produrre 0
. Allo stesso modo, il programma
------ABC------
''''''123''''''
ABCABCABC------
123123123''''''
------ABC------
''''''123''''''
------ABC------
''''''123''''''
------ABC------
''''''123''''''
------ABC------
''''''123''''''
ABCABCABCABCABC
123123123123123
dovrebbe produrre 1
, e così via fino al programma per 9
.
Puoi utilizzare questo frammento di stack per creare i programmi a forma di cifra:
<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>
Dettagli
- Nessuno dei 10 grandi programmi di blocco di testo dovrebbe richiedere input. Emette solo la singola cifra più una nuova riga finale opzionale. Uscita su stdout o un'alternativa simile.
- Nessuno dei programmi può leggere o accedere al proprio codice sorgente. Trattare questo come un rigoroso Quine sfida.
- I blocchi di testo potrebbero non essere identici e devono avere dimensioni diverse da zero.
- I blocchi di testo possono contenere qualsiasi carattere tranne i terminatori di riga .
- I 10 programmi devono essere programmi a tutti gli effetti scritti nella stessa lingua, non sono frammenti REPL . Se lo desideri, puoi aggiungere una nuova riga finale a tutte o nessuna.
punteggio
Il tuo punteggio è l'area (larghezza per altezza) di uno dei tuoi blocchi di testo. (Hanno le stesse dimensioni, quindi non ha senso contare entrambi i blocchi.) L'area dell'esempio è 3 per 2, per un punteggio di 6.
Vince il punteggio più basso. In caso di parità vince la risposta più votata.
text blocks may not be identical
veramente? Voglio vedere qualcuno infrangere questa regola, dando due blocchi di codice identici, che magicamente restituiscono cifre diverse, quando ogni numero è esattamente lo stesso codice ^^
var t=parseInt(document.getElementById("digit").value[0]);if(isNaN(t))return void alert("Invalid digit.");
può essere scritto comevar t=document.getElementById("digit").value[0]/1;if(t!=t)return void alert("Invalid digit.");
, che è lo stesso ma più breve. Ci sono alcune altre cose che puoi migliorare in esso, ma sembra fantastico!