Hier ist eine 5 x 7-Pixelschrift für die Ziffern 0 bis 9:
.███.
█...█
█...█
█...█
█...█
█...█
.███.
..█..
███..
..█..
..█..
..█..
..█..
█████
.███.
█...█
....█
...█.
..█..
.█...
█████
.███.
█...█
....█
..██.
....█
█...█
.███.
█..█.
█..█.
█..█.
█████
...█.
...█.
...█.
█████
█....
█....
.███.
....█
█...█
.███.
.███.
█...█
█....
████.
█...█
█...█
.███.
█████
....█
....█
...█.
...█.
..█..
..█..
.███.
█...█
█...█
.███.
█...█
█...█
.███.
.███.
█...█
█...█
.████
....█
█...█
.███.
(Diese Schriftart und diese Seite sehen wahrscheinlich besser aus, wenn Sie diesen JavaScipt-Code in Ihrer Browserkonsole oder in der URL-Leiste mit dem Präfix javascript:
: ausführen $('#question pre,.answer pre').css('line-height',1)
.)
Schreiben Sie zwei gleich große rechteckige Textblöcke, einen zur Darstellung der Leerzeichen ( .
) in der obigen Schriftart und einen zur Darstellung der ausgefüllten Leerzeichen ( █
).
Wenn diese beiden Textblöcke im gleichen 5 × 7-Muster wie eine der obigen Ziffern angeordnet sind, sollte der resultierende große Textblock ein Programm sein, das diese Ziffer auf stdout druckt. Dies sollte für alle 10 Ziffern funktionieren.
Zum Beispiel, wenn Ihr .
Textblock war
---
'''
und dein █
Textblock war
ABC
123
dann das programm
---ABCABCABC---
'''123123123'''
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
---ABCABCABC---
'''123123123'''
sollte ausgeben 0
. Ebenso das Programm
------ABC------
''''''123''''''
ABCABCABC------
123123123''''''
------ABC------
''''''123''''''
------ABC------
''''''123''''''
------ABC------
''''''123''''''
------ABC------
''''''123''''''
ABCABCABCABCABC
123123123123123
sollte ausgeben 1
, und so weiter bis zum programm für 9
.
Sie können dieses Stack-Snippet verwenden, um Programme in Ziffernform zu erstellen:
<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>
Einzelheiten
- Keines der 10 großen Textblockprogramme sollte Eingaben erfordern. Geben Sie nur die einzelne Ziffer plus einen optionalen abschließenden Zeilenumbruch aus. Ausgabe auf stdout oder eine ähnliche Alternative.
- Keines der Programme darf seinen eigenen Quellcode lesen oder darauf zugreifen. Behandle dies wie eine strenge Herausforderung für Quine .
- Die Textblöcke dürfen nicht identisch sein und müssen Dimensionen ungleich Null haben.
- Die Textblöcke können beliebige Zeichen mit Ausnahme der Zeilenendezeichen enthalten .
- Die 10 Programme müssen vollwertige Programme sein, die in derselben Sprache geschrieben sind. Sie sind keine REPL- Schnipsel. Optional können Sie allen Zeilen oder keiner Zeile eine nachgestellte Zeile hinzufügen.
Wertung
Ihre Punktzahl ist die Fläche (Breite mal Höhe) eines Ihrer Textblöcke. (Sie haben die gleiche Größe, daher macht es keinen Sinn, beide Blöcke zu zählen.) Die Fläche des Beispiels beträgt 3 x 2, was einer Punktzahl von 6 entspricht.
Die niedrigste Punktzahl gewinnt. Bei Stimmengleichheit gewinnt die Antwort mit der höchsten Stimmenzahl.
text blocks may not be identical
Ja wirklich? Ich möchte, dass jemand gegen diese Regel verstößt, indem er zwei identische Codeblöcke gibt, die auf magische Weise verschiedene Ziffern zurückgeben, wenn jede Zahl genau den gleichen Code hat ^^
var t=parseInt(document.getElementById("digit").value[0]);if(isNaN(t))return void alert("Invalid digit.");
kann geschrieben werden alsvar t=document.getElementById("digit").value[0]/1;if(t!=t)return void alert("Invalid digit.");
, was das gleiche ist, aber kürzer. Es gibt noch ein paar Dinge, die Sie verbessern können, aber es sieht großartig aus!