Voici une police pixélisée 5 par 7 pour les chiffres de 0 à 9:
.███.
█...█
█...█
█...█
█...█
█...█
.███.
..█..
███..
..█..
..█..
..█..
..█..
█████
.███.
█...█
....█
...█.
..█..
.█...
█████
.███.
█...█
....█
..██.
....█
█...█
.███.
█..█.
█..█.
█..█.
█████
...█.
...█.
...█.
█████
█....
█....
.███.
....█
█...█
.███.
.███.
█...█
█....
████.
█...█
█...█
.███.
█████
....█
....█
...█.
...█.
..█..
..█..
.███.
█...█
█...█
.███.
█...█
█...█
.███.
.███.
█...█
█...█
.████
....█
█...█
.███.
(Cette police et cette page sera probablement mieux si vous exécutez ce code dans votre navigateur JavaScript console ou dans la barre d'URL préfixé par javascript:
: $('#question pre,.answer pre').css('line-height',1)
.)
Écrivez deux blocs de texte rectangulaires de taille égale, un pour représenter les espaces vides ( .
) dans la police ci-dessus, et un pour représenter les espaces remplis ( █
).
Lorsque ces deux blocs de texte sont disposés dans le même motif 5 × 7 que l'un des chiffres ci-dessus, le grand bloc de texte résultant doit être un programme qui imprime ce chiffre sur stdout. Cela devrait fonctionner pour les 10 chiffres.
Par exemple, si votre .
bloc de texte était
---
'''
et votre █
bloc de texte était
ABC
123
puis le programme
---ABCABCABC---
'''123123123'''
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
---ABCABCABC---
'''123123123'''
devrait sortir 0
. De même, le programme
------ABC------
''''''123''''''
ABCABCABC------
123123123''''''
------ABC------
''''''123''''''
------ABC------
''''''123''''''
------ABC------
''''''123''''''
------ABC------
''''''123''''''
ABCABCABCABCABC
123123123123123
devrait sortir 1
, et ainsi de suite jusqu'au programme pour 9
.
Vous pouvez utiliser cet extrait de pile pour créer des programmes en forme de chiffres:
<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>
Détails
- Aucun des 10 grands programmes de blocs de texte ne doit être saisi. N'émettez que le chiffre unique plus une nouvelle ligne de fin facultative. Sortie vers stdout ou une alternative similaire.
- Aucun programme ne peut lire ou accéder à son propre code source. Traitez cela comme un défi de quine strict .
- Les blocs de texte peuvent ne pas être identiques et doivent avoir des dimensions différentes de zéro.
- Les blocs de texte peuvent contenir n'importe quel caractère à l'exception des terminateurs de ligne .
- Les 10 programmes doivent être des programmes à part entière écrits dans la même langue, ils ne sont pas des extraits REPL . Vous pouvez éventuellement ajouter une nouvelle ligne de fin à chacun d'eux ou à aucun d'entre eux.
Notation
Votre score est l'aire (largeur fois hauteur) de l'un de vos blocs de texte. (Ils sont de la même taille, il est donc inutile de compter les deux blocs.) La zone de l'exemple est de 3 par 2, pour un score de 6.
Le score le plus bas l'emporte. En cas d'égalité, la réponse la plus votée l'emporte.
text blocks may not be identical
vraiment? Je veux voir quelqu'un enfreindre cette règle, en donnant deux blocs de code identiques, qui retournent comme par magie des chiffres différents, lorsque chaque numéro est exactement le même code ^^
var t=parseInt(document.getElementById("digit").value[0]);if(isNaN(t))return void alert("Invalid digit.");
peut être écrit commevar t=document.getElementById("digit").value[0]/1;if(t!=t)return void alert("Invalid digit.");
, qui est le même mais plus court. Il y a quelques autres choses que vous pouvez améliorer, mais ça a l'air super!