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.
la source
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!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 ^^Réponses:
CJam,
2018141312 * 1 = 12Essayez-le en ligne: 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9
Bloc vide
Bloc solide
Explication
J'ai utilisé une stratégie similaire à la solution de Sp3000 , telle que chaque bloc effectue une multiplication, une addition et (éventuellement) une opération modulo sur une variable et enregistre la valeur. Pour trouver une solution optimale, j'ai utilisé une bonne vieille force brute. J'ai écrit un programme qui recherche l'espace de toutes les valeurs initiales possibles (les valeurs initiales des variables CJam) et plusieurs millions de paires de fonctions de transformation possibles de sorte que la sortie pour chaque forme de chiffre soit unique. Ensuite, j'ai filtré les résultats pour ceux de sorte que le résultat final pour les formulaires numériques se terminant par un bloc vide, dont il y a 8, puisse être mappé vers le résultat correct via une autre formule de multiplication, d'addition et de modulo.
Après quelques jours de temps CPU de recherche, le meilleur résultat jusqu'à présent est tombé à une taille de 12! Cette solution commence par une valeur de
11
, la fonction de transformation de bloc vide estx * 16 + 20
, la fonction de résultat de bloc vide estx % 13
, la fonction de transformation de bloc solide est(x + 9) % 33
et la fonction de résultat de bloc solide estx / 4
.la source
> <> (Poisson) , 5 * 10 = 50
Bloc vide
Bloc solide
Ce code ne contient aucune logique ou arithmétique n'utilise que des redirections statiques du pointeur d'instruction 2D (IP) de> <> avec des «miroirs» (
/
et\
) et deux «flèches» (<
etv
). Le seul autre contrôleur de débit est le «trampoline» (!
) qui passe à travers le caractère suivant.L'IP commence à partir du coin supérieur gauche en direction de l'est. Après quelques redirections, il atteint un nombre, il est poussé sur la pile et imprimé avec
n
et le programme se termine avec;
.Le déroulement du programme
Un bloc «reconnaît» l'état actuel du programme du fait que quel point l'IP est entré et en fonction de l'état, il décide dans quelle direction il doit laisser sortir le pointeur (quel bloc doit être exécuté ensuite) et dans quelle position exacte le pointeur doit être laissé (qui sera le nouvel état). Bien sûr, les blocs ne font aucune logique, tout ce comportement provient des redirecteurs.
la source
CJam,
232219 * 1 = 19Bloc vide:
Bloc solide:
Essayez-le en ligne .
J'essaie d'avoir de la chance avec les coïncidences mathématiques et l'échec, alors voici une approche légèrement différente de la cartographie d'unicité de la solution de Martin.
Commencez par 16. Les blocs vides ajoutent 1 et prennent modulo 11. Les blocs solides se multiplient par -1, ajoutent 11, multiplient par 3 puis prennent modulo 13. Cela mappe comme par magie
03456789
(les chiffres qui se terminent sur un bloc vide)41753026
, auxquels nous utilisons l'indexation pour avoir raison.12
correspond parfaitement à89
ce que nous pouvons corriger en soustrayant 7.la source
CJam,
2827 x 1 = 27Voici un début.
Bloc vide
Bloc solide
Testez-le ici. Je ne peux pas vous donner un permalien avec le code, car le code est trop long, vous devrez donc le copier manuellement à partir de l'extrait du défi.
L'idée est de hacher la forme comme suit:
U
.U
à un total cumuléW
(qui commence à-1
). À la fin, nous prenons ce modulo15
, qui donne des résultats uniques, qui sont utilisés pour indexer dans une chaîne de recherche.la source