Deine Aufgabe bei dieser Herausforderung ist es, eine gegebene "Matchstick-Gleichung" wie diese zu analysieren ...
... und um herauszufinden, ob es sich durch Umordnen der Übereinstimmungen in eine gültige Gleichung verwandeln lässt. In diesem Fall müssen Sie die geringste Anzahl von Zügen und die resultierende Gleichung ausgeben.
Eingang
Die Eingabe ist eine Zeichenfolge, die aus STDIN gelesen, als Funktionsargument verwendet oder sogar in einer Datei gespeichert werden kann. Es ist eine Gleichung, die eine Streichholzanordnung darstellt und mit dem folgenden EBNF beschrieben werden kann:
input = term, "=", term ;
term = number | (term, ("+" | "-"), term) ;
number = "0" | (numeralExceptZero , {numeral}) ;
numeralExceptZero = "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
numeral = "0" | numeralExceptZero ;
Ein Beispiel für eine gültige Eingabe wäre 3+6-201=0+0+8
.
Aufgabe
Betrachten Sie die folgende Abbildung, in der jedem Streichholz eine Nummer zugewiesen ist:
Wir ordnen nun jedes Eingabesymbol den entsprechenden Streichholzpositionen wie folgt zu:
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
Jede Eingabeformel kann in eine Streichholzanordnung umgewandelt werden. Zum Beispiel wird die Gleichung "45 + 6 = 92"
wo unbenutzte Streichhölzer ausgegraut sind. Ihre Aufgabe ist es, die geringste Anzahl von Streichhölzern herauszufinden, die neu angeordnet werden müssen, um die Gleichung gültig zu machen.
Ausgabe
Wir unterscheiden drei mögliche Fälle:
- Wenn die Eingabe ungültig ist (dh die oben angegebene EBNF nicht erfüllt), geben Sie alles aus, was Sie möchten.
- Andernfalls müssen Sie, wenn es Möglichkeiten gibt, die Gleichung durch Umordnen der Streichhölzer in eine gültige umzuwandeln, sowohl die minimale Anzahl von Umordnungen als auch die entsprechende Gleichung ausgeben . Ebenso wie die Eingabe muss auch die ausgegebene Gleichung die angegebene EBNF erfüllen. Im obigen Beispiel wäre
1
und die richtige Ausgabe46+6=52
. Wenn es für die resultierende Gleichung mehrere Möglichkeiten gibt, geben Sie eine davon aus. - Andernfalls (wenn die Eingabe gültig ist, die Gleichung jedoch nicht wahr ist) müssen Sie eine Ausgabe vornehmen
-1
.
Einzelheiten
- Sie dürfen keine Übereinstimmungen entfernen oder hinzufügen. Das heißt, wenn die Eingabe aus
n
Streichhölzern besteht, muss die Ausgabe auch genau ausn
Streichhölzern bestehen. - "Leere" Streichholzblöcke sind nur am Ende und am Anfang einer Gleichung erlaubt, nicht in der Mitte. So zum Beispiel Drehen
7-1=6
in7 =6-1
durch einfaches Entfernen-1
von der linken Seite und das Hinzufügen es auf der rechten Seite mit nur 3 Zündholz Umlagerungen ist nicht erlaubt. Da ich die Zuordnung von Zahlen zu Matchstick-Positionen nicht wirklich als einen interessanten Teil dieser Herausforderung sehe , können Sie dies auch für ein Plus von 20 Byte tun
- auf eine Datei zugreifen, in der die Zuordnung
(number/operation ↦ matchstick positions)
in angemessener Weise gespeichert ist, oder - Wenn Ihre Programmiersprache einen
Map
Datentyp unterstützt , nehmen Sie an, dass Sie Zugriff auf eine Map haben, die mit dem(number/operation ↦ matchstick positions)
-mapping vorinitialisiert wurde. Diese Map kann zum Beispiel so aussehen:{(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})}
- auf eine Datei zugreifen, in der die Zuordnung
Beispiele
Eingabe: 1+1=3
↦ Ausgabe: 1
und1+1=2
Eingabe: 15+6=21
↦ Ausgabe: 0
und15+6=21
Eingabe: 1=7
↦ Ausgabe: -1
Eingabe: 950-250=750
↦ Ausgabe: 2
und990-240=750
Eingabe: 1-2=9
↦ Ausgabe: 1
und1+2=3
Eingabe: 20 + 3=04
↦ Ausgabe: alles
Gewinner
Das ist Code-Golf , also gewinnt die kürzeste richtige Antwort (in Bytes). Der Gewinner wird eine Woche nach dem Absenden der ersten richtigen Antwort ermittelt.
=
(2 Streichhölzern) und -
(1 Streichholz) wechseln und alle Zahlen dort belassen können, wo sie sind. Wenn jedoch die 2 nach links verschoben werden müssten, müssten Sie auch die erforderlichen Züge zählen.
1+1+2=3-6+10
? Und die gleiche Frage zur Ausgabe.
0: 1, 2, 3, 4, 5, 6
für die Konsistenz