Étant donné un entier de 1 à 999 inclus, affichez une valeur vraie si elle apparaît horizontalement, verticalement ou en diagonale, vers l'avant ou vers l'arrière, n'importe où dans le carré 3x3 des chiffres 1 à 9 sur un pavé numérique standard :
789
456
123
Si le nombre n'apparaît pas, affichez une valeur fausse.
Les 65 nombres exacts dont vous avez besoin pour obtenir la vérité sont:
1
2
3
4
5
6
7
8
9
12
14
15
21
23
24
25
26
32
35
36
41
42
45
47
48
51
52
53
54
56
57
58
59
62
63
65
68
69
74
75
78
84
85
86
87
89
95
96
98
123
147
159
258
321
357
369
456
654
741
753
789
852
951
963
987
Tout le reste est faux.
Le code le plus court en octets gagne.
code-golf
number
decision-problem
integer
Loisirs de Calvin
la source
la source
Réponses:
JavaScript (ES6),
83...7473 octetsPrend l'entrée sous forme de chaîne.
Sauvegardé 3 octets grâce à ETHproductions
Comment ça fonctionne
Nous transformons le pavé numérique en appliquant un décalage à chaque chiffre en fonction de la ligne à laquelle il appartient:
Tous les codes ci-dessous sont représentés en hexadécimal.
Examinons toutes les combinaisons XOR de ces nouveaux codes clés. Les touches contiguës sont mises en évidence avec des crochets.
Nous pouvons voir que deux clés sont contiguës si et seulement si XORing leurs codes conduit à l'une des valeurs suivantes:
Cette liste peut être regroupée dans le masque binaire suivant:
D'où le test pour déterminer si deux codes clés (a, b) correspondent à deux clés contiguës:
Pour trois codes clés (a, b, c), nous avons besoin de ce test supplémentaire:
Exemple:
Démo
Cet extrait renvoie la liste des valeurs véridiques.
Afficher l'extrait de code
la source
a-.5
renvoie vrai pour tout tableaua
contenant (zéro ou) un entier.n=>([a,b,c]=[...n].map(v=>--v+v/3|0))-.5||n%10&&n<100|b*2==a+c&&45242&1<<(a^b)
1/a
est encore plus court et devrait fonctionner aussi bien, je pense.Python3, 72 octets
L'entrée est considérée comme une chaîne.
Suggestions de golf bienvenues! :RÉ
la source
s
, vous pouvez enregistrer 1 octet.s
, qui a un espace après84
, alors vous avez tort, car elle est requise. Si elle ne contenait pas d'espace, la chaîne résultante aurait une chaîne '8448', ce qui conduirait à des tests échoués. Merci pour les suggestions!Befunge,
169161159 159 octetsEssayez-le en ligne!
Les deux premières lignes poussent simplement la liste des numéros de test sur la pile. Cela se fait par ordre de taille, car il peut parfois être plus facile de générer un nombre comme décalage par rapport au précédent de la série plutôt que de le générer à partir de zéro. Une fois que nous atteignons les plus grands nombres, nous pouvons aussi parfois enregistrer un octet en les générant par paires, par exemple
"kV"3*\3*
nous donne 258 et 321 en neuf octets, où individuellement ils prendraient cinq octets chacun.La boucle principale est sur la ligne trois, s'exécutant de droite à gauche avec un bouclage. Cela parcourt simplement tous les numéros de test de la pile, en comparant la valeur elle-même, la valeur% 100 et la valeur / 10. Si l'un de ceux-ci correspond au numéro d'entrée ou au nombre <= 9, nous sortons 1 et sortons. S'il n'y a pas de correspondance, nous continuons la boucle. Si nous manquons de numéros de test sur la pile, nous sortons 0 et sortons.
Merci à Mistah Figgins de m'avoir sauvé quelques octets.
la source
0<@.!!<
pour enregistrer 2 octets. Cela repose sur le haut de la pile étant différent de zéro lorsque l'IP descend sur la deuxième flèche. Essayez-le en ligne!Gelée ,
292419 octets5 octets enregistrés grâce à la suggestion de @ Dennis de
K
etƓ
.Essayez-le en ligne!
Explication
la source
9s3µUŒD;;Z;ŒDµ;UKƓẇ
enregistre 5 octets.123,456,789
devraient être les mêmes que789,456,123
Rubis, 77 octets
la source
86
et24
échouera.!!
des parenthèses associées.bash, 75
renvoie quelque chose et renvoie 0 pour toutes les valeurs de cette liste
n'imprime rien et renvoie 1 dans tous les autres cas
la source
Java, 397 octets
la source