Étant donné un affichage à 7 segments avec certains segments activés et d'autres désactivés, recherchez une séquence de chiffres (0-9), de sorte qu'après avoir basculé les segments correspondants pour chaque chiffre, tous les segments sont désactivés.
Exemple
_
_ [3] => | [1] => [OFF]
_ |
Numéros et leurs segments correspondants:
_ _ _ _ _ _ _ _
| | | _| _| |_| |_ |_ | |_| |_|
|_| | |_ _| | _| |_| | |_| _|
Règles
Codegolf ⊨ remporte la plus courte entrée.
Contribution
Une liste non vide de segments activés, donnée comme
Une séquence de nombres. Les segments sont numérotés de haut en bas, de gauche à droite; à partir de 0 ou 1. Il n'est pas nécessaire que les nombres soient en ordre.
Un seul chiffre de 7 bits. MSB / LSB non spécifié (vous pouvez donc choisir).
Les caractères non numériques entre les nombres sont autorisés (mais ne doivent pas nécessairement être pris en charge).
Par exemple. pour numéro 7
: 136
ou 1010010
ou0100101
Production
Une séquence de nombres à «appliquer» à l'affichage. Pas de restriction en aucune façon, comme l'ordre des chiffres. Par exemple. pour l' état initial correspondant au nombre 1
, sorties valides serait 1
, 111
, 010
, etc.
Une sortie alternative est un chiffre de 10 bits (encore une fois, MSB / LSB est votre choix). Par exemple. car 1
en entrée, la sortie serait 1000000000
ou 0000000001
.
Certaines combinaisons ont plusieurs solutions non répétitives, par exemple. les segments correspondant à la lettre majuscule H
peuvent être désactivés par 013
, mais aussi 489
et 0258
.
Si aucune solution n'existe (ce qui, je pense, n'est pas possible), la sortie est vide.
la source
301
pourH
).17
,08
, et1479
. Les solutions pour les segments verticaux supérieurs, de gauche à droite, sont39
et59
. Les solutions pour les segments verticaux inférieurs, de gauche à droite, sont56
et2389
.2
est pas toujours nécessaire, parce que vous pouvez le remplacer par une ou l' autre0468
,1358
ou1369
, selon que vous voulez un0
,8
ou9
dans votre réponse, mais il n'y a aucun moyen d'éliminer7
du tout, et je pense que vous devez avoir au moins un de1
et3
.Réponses:
Gelée ,
2625 octetsEssayez-le en ligne!
Prend l'entrée comme un entier de 7 bits. Renvoie la forme binaire d'un entier de 10 bits.
Cette brute force toutes les possibilités. Retirer le
Ḣ
pour obtenir toutes les sorties possibles ou remplacez-le par unX
pour obtenir une sortie possible aléatoire.Programme de visualisation magique!
Comment ça fonctionne
la source
“wØ][:koR¶z‘
) peut contenir une erreur. Votre numéro9
n'a pas le segment inférieur (comparez9
dans votre visualisation à celui dans la description de la tâche). Sinon très sympa, surtout la visualisation!JavaScript (ES6), 60 octets
Cela fonctionne parce que:
la source
JavaScript (ES6),
1171071018684 octets15 octets enregistrés grâce à Neil
Prend l'entrée comme un entier de 7 bits, où le LSB est le segment supérieur. Renvoie un entier de 10 bits où le LSB est un chiffre
0
.Démo
Afficher l'extrait de code
la source
f=(n,k=1023)=>[83,0,57,73,10,71,87,1,91,75].reduce((n,v,i)=>n^=k>>i&1&&v+36,n)?k--&&f(n,k):k
. Ou si vous assumez une réponse existe,f=(n,k=0)=>[83,0,57,73,10,71,87,1,91,75].reduce((n,v,i)=>n^=k>>i&1&&v+36,n)?f(n,k+1):k
.1-7
, vous pouvez enregistrer 8 octets supplémentaires en supprimant le83
et le,91,75
et en utilisantk+2
.Mathematica, 40 octets
(Il peut être plus joué en choisissant la sortie pour chaque segment avec soin et en basculant entre LSB et MSB.)
Prenez l'entrée comme une liste de positions par exemple
{2,4,5,7}
et sortez un nombre de 10 bits (384
=0110000000
en binaire) dans l'ordre MSB (0, ..., 9).Dans l'exemple, il correspond à
et la sortie correspond à
{7,8}
.Explication:
Les nombres magiques (liste codée en dur) est la sortie qui est retournée pour chaque segment. (codé en binaire) Et, si un nombre apparaît deux fois dans la liste, l'effet est le même s'il n'apparaît pas, donc XOR au niveau du bit est utilisé. Nous avons juste besoin de XOR la sortie de la valeur possible des segments activés.
la source
Gelée , 12 octets
Essayez-le en ligne!
Ce n'est pas de la force brute, et c'est remarquablement plus court que mon autre solution. Prend l'entrée comme une liste de segments activés et les sorties comme LSB est le segment supérieur.
Sortie sous forme de liste de mouvements de chiffres.
Comment ça fonctionne
Ça va être rapide
la source
1*use digit 1 + 2*use digit 2 + 4*use digit 3 ... 64*use digit 7
, puis XOR-les réduit @ ais523. L'aplatissement fonctionnerait sur une liste de chiffres utilisés qui prend plus de caractères.