Vous connaissez probablement tous l' affichage à 7 segments qui peut afficher entre autres tous les chiffres de :
Défi
Nous considérons uniquement les segments , votre tâche consiste à décoder un seul chiffre en fonction des segments activés.
Cela peut être codé comme un entier de 8 bits, voici un tableau de chaque chiffre avec leur représentation binaire et les valeurs correspondantes petit-bout et grand-bout:
Règles et E / S
- L'entrée sera l'une des
- entier unique (comme dans le tableau ci-dessus l'un des deux ordres donnés)
- une liste / tableau / .. de bits
- une chaîne composée de caractères
ABCDEFG
(vous pouvez supposer qu'elle est triée, comme un exempleABC
code ), leur cas est votre choix (pas de casse mixte)
- La sortie sera le chiffre qu'il code
- Vous ne pouvez supposer aucune entrée invalide (invalide signifie qu'il n'y a pas de chiffre correspondant)
Les tests
Étant donné que ce défi permet plusieurs représentations, veuillez vous référer au tableau.
Réponses:
JavaScript (ES6), 26 octets
Prend entrée en petit Endian.
Essayez-le en ligne!
la source
Python 3 , 18 octets
Essayez-le en ligne!
Utilise des entrées peu endiennes. Contient un
\x7F
octet brut .Python 2 , 27 octets
Essayez-le en ligne!
la source
Wolfram Language (Mathematica) , 41 octets
Essayez-le en ligne!
Utilise la colonne de petits nombres entiers comme entrée. Ignorez l'avertissement de syntaxe.
Pour une entrée X, nous prenons d'abord X mod 41 puis prenons le résultat mod 11. Les résultats sont distincts mod 11, nous pouvons donc les extraire d'une table. Par exemple, 126 mod 41 mod 11 est 3, donc si nous faisons la position 3 égale à 0, alors nous obtenons la bonne réponse pour une entrée de 126.
Le tableau est
9[,6,0,8,2,3,1,7,5,4]
. La partie 0 est la tête, ce qui est9
. La partie 1 est manquante, donc c'estNull
pour sauver un octet: nous n'avons jamais besoin de prendre la partie 1. Ensuite, la partie 2 est6
, la partie 3 est0
, et ainsi de suite, comme d'habitude.La réponse de Jonathan Allan nous donne
1[4,9,8,6,2,0,5,3,7][[384~Mod~#~Mod~13]]&
. Ce n'est pas plus court, mais cela évite l'avertissement de syntaxe!Wolfram Language (Mathematica) ,
2725 octets(Il y a un personnage ici qui n'apparaît pas tout à fait, désolé. Cliquez sur le lien ci-dessous et vous le verrez.)
Essayez-le en ligne!
Il s'agit de forcer brutalement une chaîne à l'intérieur
Hash
afin que les hachages finissent par avoir les bonnes valeurs mod 11. Plus le forçage brutal peut probablement nous amener à une solution encore plus courte.la source
Gelée , 12 octets
Accepte un entier petit-boutien.
Essayez-le en ligne!
Ceci est l'implémentation naïve, il pourrait y avoir un moyen d'obtenir un code terser.
la source
Python 2 , 31 octets
Essayez-le en ligne! prend l'entrée en petit-boutien.
la source
Java (JDK) , 32 octets
Essayez-le en ligne!
Crédits
la source
JavaScript (Node.js) , 25 octets
Accepte un entier petit-boutien.
Essayez-le en ligne!
Ports pour 31 octets en Python avec
lambda n:'1498620537'[384%n%13]
la source
Espace , 152 octets
Obligatoire "les S, T et L ne sont pas vraiment là, ce ne sont que des représentations visibles des commandes".
Essayez-le en ligne!
Se termine par une erreur.
Syntaxe assimilable à un assemblage:
la source
brainfuck ,
474176154151 151149137 octetsPrend une chaîne d'entrée de huit
0
et1
incluant la première0
pour le point décimal.(comme dans la deuxième colonne du tableau dans le post)
Sorties chiffre de 0 à 9.
Essayez-le en ligne!
Algorithme
En observant l'état d'un segment particulier, nous pouvons diviser un ensemble de chiffres possibles en sous-ensembles plus petits. Voici l'arborescence de recherche binaire statique utilisée dans mon code. La sous-arborescence gauche correspond à l'état ON du segment, la droite correspond à l'état OFF du segment.
Quelques observations utiles pour le golf
+++++
pour les deux valeurs, puis+
pour six seulement.+
commandes si nous ajoutons 2 à la valeur de sortie à l'avance. Dans ce cas, nous devons le diminuer pour0
et1
seulement et obtenir un avantage pour les autres chiffres.la source
Rétine , 96 octets
Essayez-le en ligne! Ce n'est peut-être pas la meilleure façon, mais c'est une façon intéressante de programmer dans Retina. Explication:
Tente de saisir les cas intéressants. Les captures positives capturent simplement la lettre si elle est présente. La longueur de la capture est donc 1 si elle est présente et 0 si elle est absente. Les cas particuliers sont les captures 4 et 6 qui n'existent que si D ou E sont respectivement absents. Celles-ci ne peuvent être exprimées qu'en décimales
$#4
et,$#6
mais c'est tout ce dont nous avons besoin ici. Les captures sont ensuite intégrées dans une chaîne dont la longueur est le nombre souhaité. Par exemple, si nous écrivons,6*$1
cette chaîne a une longueur de 6 si A est présent et de 0 s'il est absent. Afin de choisir entre différentes expressions, nous utilisons soit$.
(pour les captures positives) ou$#
(pour les captures négatives) qui évaluent à 0 ou 1 et cela peut ensuite être multiplié par la chaîne jusqu'à présent.F
est répété 6 fois etB
deux fois (par concaténation car c'est golfier). Cependant, le résultat est ignoré sauf si les deuxE
etG
sont présents. Cela gère les cas de2
,6
et8
.F
est répété 5 fois, et s'ilB
est présent, il est ajouté une sixième fois plus un 3 supplémentaire (représenté par une chaîne constante de longueur 3). Cependant, le résultat est ignoré sauf s'ilD
est présent etE
absent. Cela gère les cas de3
,5
et9
.A
est répété 6 fois, etG
est répété 3 fois, et un supplément1
ajouté (représenté par un caractère constant entre les deux parce qu'il est golfeur). Cependant, le résultat est ignoré sauf s'ilD
est absent. Cela gère les cas de1
,4
et7
.Les chaînes ci-dessus sont ensuite concaténées et la longueur prise. si rien de ce qui précède ne s'applique, aucune chaîne n'est générée et sa longueur est donc
0
.Les chaînes résultantes (avant que la longueur ne soit prise) sont les suivantes:
la source
MATL , 14 octets
L'entrée est un nombre représentant les segments au format little-endian.
Essayez-le en ligne!
Explication
la source
Perl 5 -pl, 24 octets
Essayez-le en ligne!
Prend des entiers petit-boutiens.
la source
Rubis , 29 octets
Essayez-le en ligne!
la source
Japt, 15 octets
Prend la valeur big-endian en entrée.
Essayez-le
Explication
La chaîne contient les caractères à chacun des points de code des valeurs big-endian;
Ud
récupère le caractère au point de code de l'entrée etb
trouve l'index de celui-ci dans la chaîne.la source
Neim , 15 octets
Explication:
Essayez-le en ligne!
la source
Stax , 12 octets
Exécuter et déboguer
L'entrée est un petit entier endien.
Il utilise la même constante de chaîne que la solution MATL de Luis.
la source
TI-BASIC (série TI-83 + / 84 +), 15 octets
Utilise une entrée peu endienne. Les hachages sont assez courants dans TI-BASIC, j'ai donc écrit une fonction de hachage brute-forcer pour des cas comme celui-ci.
Nous avons un peu de chance ici, car le multiplicateur comporte 9 chiffres plutôt que les 10 attendus.
la source
05AB1E ,
17161512 octets-1 octet grâce à @ErikTheOutgolfer .
-1 octet en créant un port de la réponse Mathematica de @MishaLavrov .
-3 octets grâce à @Grimy .
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
Voir cette astuce de mes 05AB1E (section Comment compresser les grands entiers? ) Pour comprendre pourquoi
•NŽyf¯•
est99608231754
.la source
128в
. J'ai oublié qu'il y a une fonction intégrée pour128
être divisé par deux256
. Merci!¦C•26¤æÈÛµÀš•2ô₂+sk
(19).Fusain, 17 octets
Essayez!
Port de la réponse Japt .
la source