C'est la suite de ce défi d' Adnan . Si vous aimez ce défi, il y a de fortes chances que vous aimiez aussi l'autre. Vérifiez-le!
Un test à choix multiples avec 8 questions chacun avec 4 choix pourrait avoir les réponses: BCADBADA
. Converti en quatre tableaux différents, avec vrai et faux si la lettre actuelle est la réponse, elle ressemblera à ceci
Q#: 1 2 3 4 5 6 7 8
B C A D B A D A
A: [0, 0, 1, 0, 0, 1, 0, 1]
B: [1, 0, 0, 0, 1, 0, 0, 0]
C: [0, 1, 0, 0, 0, 0, 0, 0]
D: [0, 0, 0, 1, 0, 0, 1, 0]
Cela peut être compressé en utilisant un peu de logique. Chacun des choix A
, B
, C
et D
peut être représenté par deux valeurs vrai / faux ci - dessous:
A: 1 0
B: 0 1
C: 0 0
D: 1 1
En utilisant cette logique, nous pouvons compresser les quatre vecteurs ci-dessus à seulement deux:
1 2 3 4 5 6 7 8
B C A D B A D A
[0, 0, 1, 1, 0, 1, 1, 1]
[1, 0, 0, 1, 1, 0, 1, 0]
Autrement dit, la solution à votre test est simplement: 00110111
, 10011010
. En les concaténant, nous obtenons le nombre binaire
0011011110011010
, ou 14234
en décimal. Utilisez cette valeur décimale pour tricher sur votre test!
Défi
Prenez un nombre N
dans la plage (inclusive) [0, 65535]
et sortez une chaîne avec la réponse au test à choix multiple.
Cas de test:
14234
BCADBADA
38513
ABBDCAAB
0
CCCCCCCC
120
CBBBBCCC
65535
DDDDDDDD
39253
ABCDABCD
La sortie peut être en majuscules ou en minuscules, mais vous ne pouvez pas utiliser d'autres symboles.
la source
A=10, B=01
, puisC=nor(A,B)
, etD=and(A,B)
, inspiré par le défi d'Adnan. Avec le recul, il aurait peut-être été préférable de faire l'inverse, mais bon ... Trop tard maintenant ...Réponses:
Gelée , 14 octets
Essayez-le en ligne! ou vérifiez tous les cas de test .
Comment ça marche
la source
05AB1E ,
191816 octetsCode:
Utilise l' encodage CP-1252 . Essayez-le en ligne!
Explication:
Tout d'abord, nous ajoutons
65536
au nombre (žH
est une constante définie pour65536
), qui est également10000000000000000
en binaire. Il s'agit de remplir le nombre avec des zéros. Prenons le nombre14234
comme exemple.14234 + 65536
est égal à79770
. Qui en binaire est:Nous supprimons le premier caractère, résultant en:
Nous avons divisé la chaîne en deux morceaux en utilisant
2ä
:Après cela, nous compressons le tableau avec
ø
:Les reconvertir en décimal (en utilisant
C
) entraîne:Maintenant, il nous suffit de l'indexer avec la chaîne
cbad
. La version compressée de cette chaîne est’c‰±’
, qui peut également être testée ici . Enfin, nous obtenons les caractères à l'index du tableau ci-dessus. Pour l'exemple ci-dessus, cela se traduit par:la source
JavaScript (ES6),
5548 octetsVersion non récursive (55 octets)
En utilisant une expression régulière, nous pouvons faire:
la source
Python 2, 53 octets
Testez-le sur Ideone .
la source
(n&257)%127
mais c'est plus long. Dommage que 127 soit premier. Vous pouvez peut-être penser à un moyen de l'optimiser.Assemblage CP-1610 , 24 DECLE (30 octets)
Ce code est destiné à être exécuté sur une Intellivision . (1)
Un opcode CP-1610 est codé avec une valeur de 10 bits, connue sous le nom de «DECLE». La fonction réelle est de 24 DECLEs, commençant à
$4809
et se terminant à$4820
.Les registres CPU sont cependant une largeur de 16 bits, il soutiendra toute valeur d'entrée
0x0000
..0xFFFF
.Sortie
(1) Étant entendu qu'au moins un compilateur, plusieurs émulateurs et des fichiers ROM de remplacement sans droit d'auteur sont disponibles gratuitement, je pense que cela ne contrevient à aucune règle de soumission PPCG. Mais faites-moi savoir si je me trompe.
la source
CJam , 22 octets
Essayez-le en ligne!
Explication
Propulsé par la magie ...
Le mappage des paires de bits aux lettres dans ce défi est un peu arbitraire. Si nous représentons
ABCD
par0, 1, 2, 3
(afin que nous puissions simplement les ajouter au caractèreA
), nous voulons le mappage suivant:Ce mappage peut être calculé avec une petite formule magique:,
((i1 == i2) + 1) ^ i1
où le contrôle d'égalité renvoie0
ou1
. Consultez le tableau suivant, où chaque colonne correspond à une entrée, chaque ligne correspond à une opération et chaque cellule affichera la pile à ce point:Dans cet esprit, voici la répartition complète du code source:
Une solution alternative avec le même nombre d'octets qui est décidément moins magique:
Et dans le cas où cela est utile à n'importe qui, si vous redéfinissez les bits
i1
eti2
en un seul nombre (c'est-à-dire lorsque vous voulez le mappage0 -> 2, 1 -> 1, 2 -> 0, 3 -> 3
), cela peut être calculé encore plus facilement car(~n - 1) & 3
ou(~n - 1) % 4
si votre langue obtient modulo sur des valeurs négatives à droite. Je pense que cela peut être écrit de manière concise comme3&~-~n
dans de nombreuses langues. Dans CJam, cela se révèle être un octet plus long, en raison de la conversion supplémentaire de la base 2.la source
PHP, 57 octets
Version sans opérateurs Bitwise 70 octets
la source
$i
définie la variable ?Mathematica,
75736866 octetsMerci à @MartinEnder pour avoir économisé 2 octets.
la source
#+##
etInfix
travailler, mais l'utilisationStringPart
est inévitable parce que le chef de l'"C"["B","A","D"][[#+##]]
est"C"
, nonList
;StringJoin
ne fonctionne pas.#
et#2
c'était la liste complète.Perl, 42 octets
Comprend +1 pour
-n
Donnez votre avis sur STDIN:
Juste le code:
la source
JavaScript,
113939088 octetsUn grand merci à @Neil pour m'avoir aidé à économiser 20 octets!
-3 octets grâce à @Cyoce
Malheureusement, JavaScript ne dispose pas des fonctions telles que
decbin
,bindec
etstr_pad
que PHP a.la source
(65536+n).toString(2).slice(1)
et[+b[i+8]+2*b[i]]
serait plus court, par exemple.padStart
, s'il était accepté dans une future version d'ECMAscript, cela entraînerait une économie plus importante.{…;return }
, utilisezeval("…")
padStart
maintenant existe dans ECMAScript.MATL, 16 octets
Essayez-le en ligne!
ou vérifier tous les cas de test
Explication
la source
Julia, 73 octets
Donne une fonction f prenant N en entrée et renvoyant la réponse sous forme de chaîne.
Essayez-le
Selon qu'un tableau de caractères compte comme une chaîne, on peut omettre la jointure ( 67 octets )
Essayez-le
la source
R, 110 octets
Entré avec une solution vectorisée dans R. Cela devrait probablement être golfable en proposant une conversion plus intelligente int en conversion binaire.
la source