Votre tâche dans ce défi est d'analyser une "équation de matchstick" comme celle-ci ...
... et pour savoir si elle peut être transformée en une équation valide en réorganisant les correspondances. Si c'est le cas, vous devez générer le moins de mouvements pour le faire et l'équation résultante.
Contribution
L'entrée est une chaîne qui peut être lue depuis STDIN, prise comme argument de fonction ou même stockée dans un fichier. C'est une équation qui représente un arrangement d'allumettes et peut être décrite à l'aide de l'EBNF suivant:
input = term, "=", term ;
term = number | (term, ("+" | "-"), term) ;
number = "0" | (numeralExceptZero , {numeral}) ;
numeralExceptZero = "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
numeral = "0" | numeralExceptZero ;
Un exemple pour une entrée valide serait 3+6-201=0+0+8
.
Tâche
Considérez l'illustration suivante où chaque allumette a un numéro attribué:
Nous mappons maintenant chaque symbole d'entrée aux positions d'allumettes correspondantes comme suit:
0 ↦ 1,2,3,4,5,6
1 ↦ 4,5
2 ↦ 2,3,5,6,8
3 ↦ 3,4,5,6,8
4 ↦ 1,4,5,8
5 ↦ 1,3,4,6,8
6 ↦ 1,2,3,4,6,8
7 ↦ 4,5,6
8 ↦ 1,2,3,4,5,6,8
9 ↦ 1,3,4,5,6,8
- ↦ 8
+ ↦ 8,10
= ↦ 7,9
Chaque formule d'entrée peut être transformée en un arrangement d'allumettes. Par exemple, l'équation "45 + 6 = 92" devient
où les allumettes inutilisées sont grisées. Votre tâche consiste à trouver le moins de allumettes qui doivent être réorganisées afin de rendre l'équation valide.
Production
On distingue trois cas possibles:
- Si l'entrée n'est pas valide (c'est-à-dire qu'elle ne satisfait pas à l'EBNF ci-dessus), sortez ce que vous voulez.
- Sinon, s'il existe des moyens de transformer l'équation en une équation valide en réorganisant les allumettes, vous devez générer à la fois le nombre minimum de réarrangements et l'équation correspondante. Tout comme l'entrée, l'équation sortie doit également satisfaire l'EBNF donné. Dans l'exemple ci-dessus, la sortie correcte serait
1
et46+6=52
. S'il existe plusieurs possibilités pour l'équation résultante, sortez l'une d'entre elles. - Sinon (donc si l'entrée est valide mais qu'il n'y a aucun moyen de rendre l'équation vraie), vous devez sortir
-1
.
Détails
- Vous n'êtes pas autorisé à supprimer ou à ajouter des correspondances. Cela signifie que si l'entrée est constituée d'
n
allumettes, la sortie doit également être constituée exactement d'n
allumettes. - Les blocs d'allumettes "vides" ne sont autorisés qu'à la fin et au début d'une équation, pas au milieu. Ainsi, par exemple, le transformer
7-1=6
en7 =6-1
le supprimant simplement-1
du côté gauche et en l'ajoutant du côté droit avec seulement 3 réarrangements d'allumettes n'est pas autorisé. Comme je ne vois pas vraiment le mappage des nombres aux positions des allumettes comme une partie intéressante de ce défi, pour un plus de 20 octets , vous pouvez soit
- accéder à un fichier dans lequel le mappage
(number/operation ↦ matchstick positions)
est stocké de manière raisonnable, ou - si votre langage de programmation prend en charge un
Map
type de données, supposez que vous avez accès à une carte préinitialisée avec le(number/operation ↦ matchstick positions)
mappage. Cette carte peut par exemple ressembler à ça:{(0,{1,2,3,4,5,6}),(1,{4,5}),(2,{2,3,5,6,8}),(3,{3,4,5,6,8}), ..., (-,{8}),(+,{8,10}),(=,{7,9})}
- accéder à un fichier dans lequel le mappage
Exemples
Entrée: 1+1=3
↦ Sortie: 1
et1+1=2
Entrée: 15+6=21
↦ Sortie: 0
et15+6=21
Entrée: 1=7
↦ Sortie: -1
Entrée: 950-250=750
↦ Sortie: 2
et990-240=750
Entrée: 1-2=9
↦ Sortie: 1
et1+2=3
Entrée: 20 + 3=04
↦ Sortie: n'importe quoi
Gagnant
Il s'agit de code-golf , donc la réponse correcte la plus courte (en octets) l'emporte. Le gagnant sera choisi une semaine après la publication de la première bonne réponse.
=
(2 allumettes) et -
(1 allumette) et laisser tous les nombres où ils sont. Si, cependant, le 2 devait être déplacé vers la gauche, vous devrez également compter les mouvements requis.
1+1+2=3-6+10
? Et même question sur la sortie.
0: 1, 2, 3, 4, 5, 6
pour plus de cohérence