Votre objectif est de déterminer si un nombre est divisible par 3 sans utiliser de conditions. L'entrée sera un nombre non signé de 8 bits compris entre 0 et 255. Créativité encouragée!
Vous êtes UNIQUEMENT autorisé à utiliser
L' égalité / inégalité (
==
,!=
,>
,<
,>=
,<=
)Arithmétique (
+
,-
,x
)Opérateurs logiques (
!
pas,&&
et,||
ou)Opérateurs de bits (
~
non,&
et,|
ou,^
xor,<<
,>>
,>>>
gauche arithmétiques et logiques et décalages à droite)Constantes (ce serait mieux si vous gardiez ces petites)
Affectation variable
Sortie 0
si faux, 1
si vrai.
Les règles standard de golf à code atomique s'appliquent. Si vous avez des questions, veuillez les laisser dans les commentaires. Exemples de méthodes ici . Un jeton est l'un des éléments ci-dessus à l'exclusion des constantes et des variables.
Réponses:
C - 2 jetons
Semble fonctionner jusqu'à 2 31 -1.
Crédits à
zalgo("nhahtdh")
pour l'idée inverse multiplicative.la source
<=
fonctionnement, et s'est rappelé que 0xAAAAAAAB est considéré comme duunsigned int
type, donc le résultat de la multiplication n'est pas signé.Python,
32 jetonsSolution de force brute, mais ça marche.
Merci à Howard pour la réduction de 1 jeton.
la source
0x9......>>x&1
.C -
54 (?) JetonsFonctionne pour tout numéro 32 bits non signé .
Ce code utilise le modulo inverse multiplicatif 2 32 d'un diviseur pour convertir l'opération de division en opération de multiplication.
Éditer
Ma solution (postée 2 minutes après) a le même esprit que la solution aditsu. Nous lui remercions d'avoir utilisé
==
améliore ma solution d'un jeton.Référence
la source
Bull
: PJetons C - 15 (?)
Depuis 4 ≡ 1 (mod 3), nous avons 4 n ≡ 1 (mod 3). La règle de sommation des chiffres ne se limite pas à la sommation des chiffres, mais nous permet également de décomposer arbitrairement le nombre en séquences de chiffres et de les additionner tous tout en conservant la congruence.
Un exemple en base 10, diviseur = 9:
1234 ≡ 12 + 34 ≡ 1 + 2 + 3 + 4 ≡ 123 + 4 ≡ 1 (mod 9)
Toutes les instructions du programme utilisent cette propriété. Il peut en fait être simplifié en une boucle qui exécute l'instruction
n = (n & 0x3) + (n >> 2);
jusqu'à ce quen < 4
, car l'instruction décompose simplement le nombre en base 4 au chiffre le moins significatif et additionne les 2 parties.la source
n = (n & 0x3) + (n >> 2);
le résultat est réduit à 3 bits et la répétition l'a fait rester seulement 2 bits stackoverflow.com/a/3421654/995714Python (2 jetons?)
Ou
Ou
la source
JavaScript - 3 jetons
Cela abuse du fait que l'utilisation d'opérateurs au niveau du bit sur un nombre le tronque en un entier en JavaScript.
la source
=
,*
,|
,==
C - 4 jetons
Fonctionne jusqu'à 383.
Version précédente (constantes plus grandes):
Fonctionne jusqu'à 1535
la source
bash - ???
Je ne sais pas comment noter cela.
par exemple
la source
Befunge 93-5 jetons
Corrigé - division supprimée.
Obtient une entrée, continue de soustraire 3 jusqu'à ce qu'il soit inférieur à 0, dirige le pointeur vers le haut ('|'), puis ajoute 3. Si la valeur est 0, le pointeur se déplace vers la droite (" 1. @" sort "1"), sinon se déplace vers la gauche ("@. " affiche "0"). '@' termine le programme.
la source
Lot - 7 jetons
je pense
Renvoie
1
si le nombre donné (comme stdin) est divisible par trois.la source
Rubis, 6 (?) Jetons
Je ne sais vraiment pas comment compter les jetons. OP, pouvez-vous me marquer?
Je pense qu'il est 6 ...
1
,0
,0
,*
,255
,x
Notez que la
*
multiplication n'est pas un entier.la source
Python 0
J'ai posté eariler mais j'ai utilisé des conditionnels. Voici à utiliser pas de conditions et pas de jetons, juste des mots clés
utilise l'astuce que plusieurs des 3 ont des chiffres qui s'ajoutent à 3
Edit: Suppression de lambda inutile
Edit: Golfé plus loin (117 caractères) toujours pas de jetons
Accès direct tué pour le plus astucieux getitem de Python à 132 car.
http://www.codeskulptor.org/#user34_uUl7SwOBJb_0.py
la source
[]
n'est cependant pas autorisé.only
.Python - 25 jetons
Pour commencer, j'ai une longue solution qui est une implémentation de l'une des réponses dans le lien dans mon premier post.
n
est entrée.or
est équivalent à||
.la source
JavaScript - 3 jetons
Testez-le sur la console de votre navigateur:
la source
JavaScript
n'est pas sûr du jeton #
function mod3 (i) { return {'undefined':'100','0':'0'}[[0][i]][i.toString (3).split('').pop ()]}
ou si la sortie pour 0 est autorisée à 1;
function mod3 (i) { return '100'[i.toString (3).split('').pop ()]}
la source
Tcl , 83 octets
Essayez-le en ligne!
la source
proc T n {set n [expr [join [split [expr [join [split $n ""] +]] ""] +]];expr {$n in {0 3 6 9}}}
Essayez-le en ligne!proc T n {expr {[expr [join [split [expr [join [split $n ""] +]] ""] +]] in {0 3 6 9}}}
Essayez-le en ligne!