Les cadeaux ont été ouverts. Les hachis ont été mangés. La guerre des étoiles a été regardée. La saison de Noël commence à se terminer. Vous avez peut-être déjà tiré quelques crackers de Noël . Si vous êtes chanceux, au lieu des jouets en plastique inutiles habituels, vous avez peut-être gagné une calculatrice mystère avec laquelle vous pouvez étonner vos amis et vos proches .
Cette astuce consiste en 6 cartes chacune avec une grille 4x8 de chiffres imprimés dessus. Chaque carte contient un sous-ensemble différent des entiers [1,63]
. Le magicien vous demandera de choisir un numéro sur une carte et de garder ce numéro secret. Le magicien demandera alors quelles cartes ont ce numéro. Avec cette connaissance, le magicien sera magiquement en mesure de déterminer et de divulguer le nombre d'origine deviné.
Sortez le jeu complet de 6 cartes Mystery Calculator exactement comme suit:
1 3 5 7 9 11 13 15
17 19 21 23 25 27 29 31
33 35 37 39 41 43 45 47
49 51 53 55 57 59 61 63
- - - - - - - - - - -
2 3 6 7 10 11 14 15
18 19 22 23 26 27 30 31
34 35 38 39 42 43 46 47
50 51 54 55 58 59 62 63
- - - - - - - - - - -
4 5 6 7 12 13 14 15
20 21 22 23 28 29 30 31
36 37 38 39 44 45 46 47
52 53 54 55 60 61 62 63
- - - - - - - - - - -
8 9 10 11 12 13 14 15
24 25 26 27 28 29 30 31
40 41 42 43 44 45 46 47
56 57 58 59 60 61 62 63
- - - - - - - - - - -
16 17 18 19 20 21 22 23
24 25 26 27 28 29 30 31
48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63
- - - - - - - - - - -
32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47
48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63
La sortie peut ou non contenir un retour à la ligne final final. Il ne doit y avoir aucun espace de fin. Chaque carte est séparée par 11 -
perforations.
- md5sum avec la nouvelle ligne finale:
7aa2d9339b810ec62a2b90c5e11d6f4a
- md5sum sans nouvelle ligne finale:
e9abe4e32dca3e8fbfdaa4886fc5efd2
Pour ceux d'entre vous qui ont une orientation plus Windows, j'autoriserai également les CRLF
fins de ligne de style. Dans ce cas, les md5 sont:
- md5sum avec la nouvelle ligne finale:
e4f16ff9752eee2cedb5f97c7b5aec6d
- md5sum sans nouvelle ligne finale:
78c560eed3b83513e3080117ab5dc5fa
la source
Réponses:
Python 2 ,
99969391 octetsQuitte avec une erreur, ce qui est autorisé par défaut .
Essayez-le en ligne! ou vérifiez le hachage MD5 .
Comment ça marche
Après avoir initialisé k à 1 , nous entrons dans une boucle infinie qui exécute le code suivant.
tuple(n for n in range(64)if k&n)
crée un tuple de tous les entiers non négatifs inférieurs à 64 qui ont leur j ème bit défini, où j est le nombre d'itérations de la boucle, c'est-à-dire 2 j = k .('%2d '*7+'%2d\n')*4
crée d'abord la chaîne de formatage'%2d %2d %2d %2d %2d %2d %2d \n'
, puis la répète quatre fois. Il s'agit d'un modèle pour chaque carte, qui remplit chaque entier du tuple à deux caractères (espaces en préfixe), sépare chaque groupe de 8 entiers par des espaces et les groupes eux-mêmes par des sauts de ligne.Maintenant, la
print
déclaration de Python 2 est une bête curieuse. Il prend plusieurs expressions, séparées par des virgules, et les imprime une par une. Il évalue la première expression, l'imprime, évalue les expressions suivantes, l'imprime, etc. jusqu'à ce qu'il ne reste plus d'expressions. À moins que la dernière expression ne soit suivie d'une virgule, elle y ajoute un saut de ligne. En outre, il ajoute un espace à toutes les expressions, sauf si elles sont imprimées au début d'une ligne.Dans chaque itération, nous imprimons d'abord le résultat de l'application de la chaîne de formatage au tuple. Nous sommes au début d'une ligne, donc aucun espace n'est ajouté.
Ensuite, nous (essayons) d'imprimer le résultat de
11/(k<32)*' -'
. Si k <32 , cette expression est évaluée à' - - - - - - - - - - -'
. Encore une fois, nous sommes au début d'une ligne, donc aucun espace n'est ajouté. Il n'y a pas de virgule après cette expression, doncprint
ajoute un saut de ligne. Cependant, dans la sixième itération, k = 2 5 = 32 , donc essayer d'évaluer11/(k<32)*' -'
déclenche une ZeroDivisionError non capturée . Cela sort de la boucle et termine immédiatement le programme.la source
C (gcc), 105 octets
la source
Python 2, 132 octets
Le fractionnement de séquences est ennuyeux en Python.
Essayez-le en ligne .
la source
Gelée ,
2726 octetsEssayez-le en ligne! ou vérifiez le hachage MD5 .
Comment ça marche
la source
G
intégré est sérieusement maîtrisé pour ce défi. J'avais besoin d'environ 10 octets pour faire de même.Pip ,
494844 octets43 octets de code, +1 pour l'
-S
indicateur.Essayez-le en ligne!
Explication
la source
Rubis, 90 octets
Non golfé
Assez simple. La seule chose qui peut nécessiter des explications supplémentaires est de savoir quand suivre un nombre avec une nouvelle ligne plutôt qu'un espace. Cela se produit lorsque
j+1%16==0
dans les quatre premières cartes etj+1%8
== 0 dans les deux dernières. Par conséquent, l'expression15>>i/64/4
ou de manière équivalente15>>i/256
est ETj
pour déterminer si un espace ou une nouvelle ligne est requis.la source
JavaScript (ES6), 150 octets
la source
Perl 6 ,
194 116 11686 octetsEssayez-le
Essayez-le
Essayez-le
(consultez les sections Débogage pour les résultats MD5)
Les deux dernières ont été inspirées / transcrites à partir des implémentations Ruby et C
la source
05AB1E , 71 octets
Essayez-le en ligne!
Cette approche, ne l'essayez pas. Supprimera probablement cela par honte pour être honnête. La manipulation de la matrice n'est pas mon point fort, j'ai donc essayé de générer par force la force des 6 séquences, puis de les pomper ensemble.
la source
Lot, 249 octets
Génère un CRLF de fin.
la source
JavaScript (ES6),
103102 octetsMD5: 7AA2D9339B810EC62A2B90C5E11D6F4A
Tester
Afficher l'extrait de code
la source
bash / utilitaires Unix,
125124 bytesEdit: Suppression d'un ^ inutile de l'expression régulière à la fin; l'expression régulière correspondra toujours au début de la ligne de toute façon.
la source
PHP, 102 octets
imprime une nouvelle ligne de début mais pas de fin, et un espace de début dans chaque ligne. Courez avec
-nr
ou essayez-le en ligne .Pour PHP <5.6, remplacez
2**$c
par(1<<$c)
. PHP 5.5 pourrait utiliser à la&~1<<$c?:
place de%2**$c||
.Pour PHP <5.5, remplacez
"\n"[$n++%8]
par($n++%8?"":"\n")
.Les tirets sont désactivés d'un caractère en raison de l'espace de tête; ajouter un espace au premier
str_pad
paramètre (insérez un espace avant la deuxième ligne de code) pour corriger.La suppression de l'espace de tête nécessite à la place quelques manipulations et trois octets supplémentaires:
printf("%c%2d",$n++%8?32:10,++$b%64);
et23
au lieu de25
.Transformer la nouvelle ligne de tête en ligne de fin coûterait encore trois octets:
PHP, 109 octets
correspond à toutes les spécifications et fonctionne avec toutes les versions de PHP.
la source
Python 2 , 89 octets
Essayez-le en ligne!
Explication:
la source
05AB1E , 29 octets
Port de @Emigna réponse 05AB1E s » ici , après quoi j'ajouté du code pour l' imprimer selon les exigences de ce défi.
Essayez-le en ligne ou vérifiez md5sum .
Explication:
la source
JavaScript, 234 octets.
J'écrirai une explication plus tard.
Si
console.log
nécessaire, le nombre d'octets serait de 247 octets.la source