Cela fait un moment que je rencontre un problème en comptant sur mes doigts, en particulier que je ne peux compter que dix. Ma solution à ce problème a été de compter en binaire sur mes doigts, en plaçant mon pouce pour un, mon index pour deux, les deux pouce et index pour trois, etc. Cependant, nous rencontrons un petit problème lorsque nous arrivons à le nombre quatre. Plus précisément, cela nécessite que nous levions le majeur, ce qui entraîne un geste plutôt malheureux, ce qui n’est généralement pas accepté dans la société. Ce type de numéro est un nombre grossier . Nous arrivons au prochain chiffre impoli à 36 ans, lorsque nous levons le pouce de notre seconde main et le majeur de notre première main. La définition d'un nombre brut est un nombre qui, dans ce système de comptage, a pour résultat que nous n'émettons quele majeur de n'importe quelle main. Une fois que nous avons passé 1023 (le nombre maximum accessible sur une personne, avec deux mains de cinq doigts chacune), supposons que nous poursuivions avec une troisième main, avec des mains supplémentaires ajoutées si nécessaire.
Ta tâche:
Ecrivez un programme ou une fonction qui reçoit une entrée et génère une valeur vérité / fausseté selon que l'entrée est un nombre brut ou non.
Contribution:
Un entier compris entre 0 et 10 9 (inclus).
Sortie:
Une valeur vérité / fausseté qui indique si l'entrée est un nombre grossier.
Cas de test:
Input: Output:
0 ---> falsy
3 ---> falsy
4 ---> truthy
25 ---> falsy
36 ---> truthy
127 ---> falsy
131 ---> truthy
Notation:
C'est le code-golf , donc le score le plus bas en octets l'emporte.
la source
assume we continue with a third hand
, Quand il s’agit d’être impoli, le travail d’équipe réalise le rêve.Réponses:
APL (dzaima / APL) , 5 octets
Essayez-le en ligne!
4∊
est 4 un membre de32⊤
à-base-32?la source
Regex (ECMAScript), 37 octets
L'entrée est unaire, comme la longueur d'une chaîne de
x
s.^((?=(x+)(\2{31}x*))\3)*(x{32})*x{4}$
Essayez-le en ligne!
la source
JavaScript (SpiderMonkey) , 23 octets
Essayez-le en ligne!
C'est une solution triviale, vous voulez juste convertir en base 32 et vérifier s'il y a un 4 dedans.
JavaScript (SpiderMonkey) , 26 octets
Essayez-le en ligne!
Il est intéressant que
/4/.test(...)
coûte un octet de plus que....match(4)
.la source
Japt , 5 octets
Essayez-le en ligne!
Explication
la source
Ruby,
3619 octetsEssayez-le en ligne!
Enregistré 17 octets avec la méthode de @tsh .
la source
100010011111
00100
.->n{n.to_s(32)=~/4/}
?10001
, la deuxième00111
et la troisième ne sont-elles pas11
? Aucun d’entre eux n’a le majeur levéAPL + WIN, 10 octets
Invites pour la saisie d'un entier
En notant six mains sont nécessaires pour représenter 10 ^ 9 convertis en vecteur de 6 éléments de la représentation de base 32 et vérifie si un 4 existe dans un élément.
la source
Perl 6 , 16 octets
Essayez-le en ligne!
Vérifie s'il existe une
4
représentation du nombre dans la base 32. Renvoie Nil comme faux ou une correspondance contenant un4
.Vous pouvez le prouver par le fait que sorte que chaque chiffre correspond à l'état de chaque main.25=32
la source
Python 2 ,
3432 octetsEssayez-le en ligne!
2 octets grâce à tsh
la source
Code machine x86, 17 octets
Les octets ci-dessus définissent une fonction qui prend le nombre en entrée dans le
EAX
registre et renvoie le résultat sous forme de valeur booléenne dans leEAX
registre (EAX
== 0 si l'entrée n'est pas un nombre brut;!EAX
= 0 si l'entrée est un nombre brut ).En mnémotechnique d'assemblage lisible par l'homme:
Essayez-le en ligne!
la source
idiv
, cependant. Je ne vois aucune amélioration incrémentielle à cela. Mais voir ma réponse : 14 octets pour une boucle de décalage qui utilise MOV / AND / SUB / JZ pour vérifier l’état grossier des 5 bits les plus bas.Julia 1.0 , 25 octets
Essayez-le en ligne!
Julia 1.0 , 26 octets
Alternative qui a 1 caractère plus court, mais 1 octet plus long, dommage que cela
∈
prenne 3 octets en unicode.Essayez-le en ligne!
la source
n->n%32...
votre première réponse pendant 2 octets de moins?05AB1E , 5 octets
Réponse du port de @ Adám (dzaima / APL) .
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
₆
c'est 36, pas 32.Catholicon , 4 octets
Prend un nombre en tant que chaîne en base 256.
Essayez-le en ligne!
Suite de tests
la source
<<
et>>
. Cela permet des nombres supérieurs à 255, comme indiqué dans la suite de tests.C # (compilateur interactif Visual C #) , 31 octets
Les sorties en lançant une exception. Pour convertir un nombre décimal en une autre base, divisez le nombre décimal par cette base à plusieurs reprises et prenez le reste sous forme de chiffre. C'est ce que nous faisons et nous vérifions si l'un des chiffres a une valeur de 4 en base 32;
Essayez-le en ligne!
la source
n>31
->n>0
J , 12 octets
Essayez-le en ligne!
la source
R ,
5048 octetsEssayez-le en ligne!
Utilise maintenant une approche nette basée sur une matrice (avec la permission de @Giueseppe). Il génère une matrice de bits 5x7, la convertit en une série d’entiers de base 32 et vérifie la présence de 4s.
la source
intToBits
mais nous pouvons alors travailler avecints
au lieu deraw
sauver un octet - voyez par exemple ceci avecintToBits
4
dans un nombre en base 32 correspond, quant à lui, à 29 octets .Python 3 , 43 octets
Vérifie chaque bloc de 5 bits pour voir s'il est grossier (égal à 4).
Essayez-le en ligne!
la source
C (gcc) , 34 octets
Essayez-le en ligne!
la source
Charbon de bois , 6 octets
Essayez-le en ligne! Le lien est vers la version verbeuse du code. Sorties
-
s en fonction de la grosseur du nombre. Explication:J'utilise la conversion de base de chaîne pour éviter d'avoir à séparer les littéraux numériques pour
32
et4
.la source
Rangé , 18 octets
Essayez-le en ligne! Vérifie si
4
est un élément debase(32,x)
(conversion de base).la source
Haskell , 31 octets
Essayez-le en ligne!
la source
Cubix , 26 octets
Essayez-le en ligne!
S'enveloppe sur un cube de longueur d'arête 3 comme suit
Regarde le courir
Une implémentation assez basique, sans toutes les redirections:
IS
lance le programme en poussant l'entrée et 32 dans la pile%4-!
récupère le reste et vérifie si c'est 4 par soustraction1O@
sortie 1 s'il était 4 et arrêter;;,
nettoyer la pile et faire une division entièrep;?
nettoie le bas de la pile et vérifie le résultat de div pour 0O@
si div résultat est nul et s'arrêtes
permutez le haut de la pile et recommencez à l'étape 2 ci-dessusla source
MATL , 8 octets
Essayez-le en ligne!
la source
G
(je ne sais pas pourquoi je l'ai inclus en premier lieu) mais ce n'est qu'un octet (merci de l'avoir repéré!). Passer32YA52
à32_YA4
est le même nombre d'octets, n'est-ce pas?'32_YA4'n'32YA52'n-
Lot,
7745 octetsBasé sur ces bidouilles bidouilleurs . Explication: Seules 6 aiguilles doivent être vérifiées en raison de la plage limitée (30 bits) de l'entrée à prendre en charge. Le nombre magique
m
est équivalent à111111
en base 32, de sorte que la première opération bascule les bits bruts dans le nombre entré. Il reste ensuite à trouver laquelle des 6 mains est maintenant zéro.la source
code machine x86, 14 octets
(Le même code machine fonctionne en 16 bits, 32 bits et 64 bits. En mode 16 bits, il utilise AX et DI au lieu de EAX et EDI en mode 32 et 64 bits.)
Algorithme: vérifie les 5 bits inférieurs avec
x & 31 == 4
, puis décale à droite de 5 bits et répète si le résultat du décalage est différent de zéro.Appelable à partir de C avec
char isrude(unsigned n);
la convention d'appel System V de x86-64. 0 est la vérité, non-0 est la fausseté (c'est asm, pas C 1 ).Cela tire parti du
op al, imm8
codage abrégé pour AND et SUB. J'aurais peut-être eu l'habitudeXOR al,4
de produire 0 sur l'égalité, mais SUB est plus rapide car il peut fusionner avec JZ en une seule sous-branche sur la famille Sandybridge.Anecdote: utiliser le drapeau d'une journée avec plus d'un joueur sera lent sur la famille P6 (stalles avant le départ à la retraite), mais c'est correct.
Référence 1: Il s'agit d'une fonction de langage d'assemblage, et x86 asm possède les deux
jz
etjnz
, de sorte que, conformément à la méta, je peux choisir l'une ou l'autre solution. Je n’ai pas l’intention de faire correspondre cette vérité à la vérité.Il est très pratique de retourner en AL au lieu d’EFLAGS afin de pouvoir décrire la fonction à un compilateur C sans encapsuleur, mais mon choix de vérité / fausseté n’est pas contraint par l’utilisation d’un appelant C pour le tester.
la source
ES6,
313026 octetsN'hésitez pas à dire des idées sur la façon de réduire cela, le cas échéant.
la source
test
, vous pouvez en réalité enregistrer deux octets en faisant4
une correspondance avec un nombre et en lematch
convertissant en chaîne, puis en RegExp pour vous. .Retina 0.8.2 , 31 octets
Essayez-le en ligne! Le lien inclut des cas de test. Affiche zéro sauf si le nombre est grossier. Fonctionne en convertissant l'entrée en base unaire puis en base 32 codée unaire et en comptant le nombre de
4
s dans le résultat.la source
Java 8,
4033 octetsRéponse du port de @ Adám (dzaima / APL) .
Essayez-le en ligne.
Explication:
la source
> <> , 28 octets
Les sorties 4 pour les nombres bruts lève une exception pour les nombres non bruts.
Essayez-le en ligne!
la source
Wolfram Language (Mathematica) ,
37 octets36 octets29 octets-2 octets par Jonathan Frech
Essayez-le en ligne!
Solution de 31 octets:
Essayez-le en ligne!
la source
...#...&
souvent utilisée dans Mathematica).[n]
de la fin, mais de la&
. De plus, étant donné que les articles ont l'historique des modifications, il est bon de laisser de côté les entrées précédentes, et la convention pour les anciens scores est<s>40</s> <s>36</s>
Java 8,
282221 octetsInspiré par la réponse de @ kevin-cruijssen . Ne fonctionne que pour 2 mains.
Essayez-le en ligne!
Explication:
la source