Il tuo compito in questa sfida è quello di analizzare una determinata "Equazione del matchstick" come questa ...
... e per scoprire se può essere trasformata in un'equazione valida riorganizzando le partite. In tal caso, devi produrre il minor numero di mosse per farlo e l'equazione risultante.
Ingresso
L'input è una stringa che può essere letta da STDIN, presa come argomento di funzione o addirittura memorizzata in un file. È un'equazione che rappresenta una disposizione del fiammifero e può essere descritta usando il seguente EBNF:
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 esempio per un input valido sarebbe 3+6-201=0+0+8
.
Compito
Considera la seguente illustrazione in cui a ciascun fiammifero è assegnato un numero:
Ora mappiamo ciascun simbolo di input nelle posizioni corrispondenti del matchstick come segue:
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
Ogni formula di input può essere trasformata in una disposizione matchstick. Ad esempio, l'equazione "45 + 6 = 92" diventa
dove i fiammiferi non utilizzati sono disattivati. Il tuo compito è scoprire il minor numero di fiammiferi che devono essere riorganizzati per rendere valida l'equazione.
Produzione
Distinguiamo tra tre possibili casi:
- Se l'input non è valido (ovvero non soddisfa il suddetto EBNF), emettere tutto ciò che si desidera.
- Altrimenti, se ci sono modi per trasformare l'equazione in valida riorganizzando i matchsticks, devi produrre sia il numero minimo di riarrangiamenti sia l'equazione corrispondente. Proprio come l'input, l'equazione emessa deve anche soddisfare il dato EBNF. Nell'esempio sopra, l'output corretto sarebbe
1
e46+6=52
. Se ci sono più possibilità per l'equazione risultante, emettine una qualsiasi. - Altrimenti (quindi se l'input è valido ma non c'è modo di rendere vera l'equazione), devi produrre
-1
.
Dettagli
- Non ti è consentito rimuovere o aggiungere corrispondenze. Ciò significa che se l'input è costituito da
n
fiammiferi, anche l'output deve essere costituito esattamenten
fiammiferi . - I blocchi "matchstick" vuoti sono consentiti solo alla fine e all'inizio di un'equazione, non al centro. Così, per esempio, trasformando
7-1=6
in7 =6-1
semplicemente rimuovendo-1
dal lato sinistro e l'aggiunta sul lato destro con soli 3 riarrangiamenti fiammifero non è permesso. Dal momento che non vedo davvero la mappatura dai numeri alle posizioni del matchstick come una parte interessante di questa sfida, per un plus di 20 byte , potresti
- accedere a un file in cui
(number/operation ↦ matchstick positions)
è memorizzata la mappatura in modo ragionevole, oppure - se il tuo linguaggio di programmazione supporta un
Map
tipo di dati, supponi di avere accesso a una mappa preinizializzata con il(number/operation ↦ matchstick positions)
-mapping. Ad esempio, questa mappa potrebbe apparire così:{(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})}
- accedere a un file in cui
Esempi
Input: 1+1=3
↦ Output: 1
e1+1=2
Input: 15+6=21
↦ Output: 0
e15+6=21
Ingresso: 1=7
↦ Uscita: -1
Input: 950-250=750
↦ Output: 2
e990-240=750
Input: 1-2=9
↦ Output: 1
e1+2=3
Ingresso: 20 + 3=04
↦ Uscita: qualsiasi cosa
Vincitore
Questo è code-golf , quindi vince la risposta corretta più breve (in byte). Il vincitore verrà scelto una settimana dopo la pubblicazione della prima risposta corretta.
=
(2 fiammiferi) e -
(1 fiammifero) e lasciare tutti i numeri dove sono. Se, tuttavia, i 2 dovessero essere spostati a sinistra, dovresti anche contare le mosse richieste.
1+1+2=3-6+10
? E stessa domanda sull'output.
0: 1, 2, 3, 4, 5, 6
per coerenza