Wenn Sie das Buch Contact von Carl Sagan gelesen haben , kommt Ihnen diese Herausforderung vielleicht bekannt vor.
Wenn Sie einen Satz mathematischer Gleichungen eingeben, der aus einer Zahl, einem unbekannten Operator, einer anderen Zahl und einem Ergebnis besteht, können Sie ableiten, welche Operatoren Addition, Subtraktion, Multiplikation oder Division darstellen.
Jede Eingabegleichung besteht immer aus
- eine nicht negative ganze Zahl
- einen der Buchstaben
A
,B
,C
, oderD
- eine andere nicht negative ganze Zahl
- der Charakter
=
- eine letzte nicht negative ganze Zahl
zusammen verkettet. Eine mögliche Eingabe ist beispielsweise 1A2=3
, aus der Sie ableiten können, dass dies A
eine Addition darstellt. Jede der ganzen Zahlen wird befriedigen 0 ≤ x ≤ 1,000
.
Es ist jedoch nicht immer so einfach. Es kann zu Unklarheiten kommen zwischen:
5A0=5
: Addition Subtraktion1A1=1
: Multiplikation / Division0A5=0
: Multiplikation / Division2A2=4
: Addition / Multiplikation4A2=2
: Subtraktion / Division0A0=0
: Addition / Subtraktion / Multiplikation
und so weiter. Die Herausforderung besteht darin, diese Fähigkeit zu nutzen, um in Kombination mit dem Eliminierungsprozess die Auswahl einzugrenzen und herauszufinden, welchen Operator jeder Buchstabe darstellt. (Es wird immer mindestens eine Eingabegleichung geben, und es wird immer möglich sein, jeden in der Eingabe verwendeten Buchstaben eindeutig einem einzelnen Operator zuzuordnen.)
Angenommen, die Eingabe besteht aus den folgenden Gleichungen:
0A0=0
: Hiermit wird A auf Addition, Subtraktion oder Multiplikation eingegrenzt (kann nicht durch 0 dividiert werden).10B0=10
: B muss entweder Addition oder Subtraktion sein.5C5=10
: C ist offensichtlich Addition, die B-Subtraktion macht, die A-Multiplikation macht.
Daher sollte die Ausgabe für diese Eingangsgleichungen A
mit *
, B
mit -
und C
mit übereinstimmen +
.
Die Eingabe kann entweder als einzelne, durch Leerzeichen / Kommas getrennte Zeichenfolge oder als Array von Zeichenfolgen erfolgen, die jeweils eine Gleichung darstellen. Die Ausgabe kann entweder eine einzelne Zeichenfolge ( "A*B-C+"
), ein Array ( ["A*", "B-", "C+"]
) oder ein wörterbuch- / diktähnliches 2D-Array ( {"A": "*", ...}
oder [["A", "*"], ...]
) sein.
Sie können davon ausgehen, dass eine Zahl niemals durch eine andere Zahl geteilt wird, durch die sie nicht teilbar ist.
Da es sich um Code-Golf , der kürzeste Code in Bytes gewinnt.
Testfälle:
In Out
-------------------------------
0A0=0 10B0=10 5C5=10 A*B-C+
100D100=10000 D*
4A2=2 4B2=2 0A0=0 A-B/
15A0=15 4B2=2 2C2=0 A+B/C-
1A1=1 0A0=0 A*
0A0=0 2A2=4 5B0=5 2B2=4 A*B+
2A2=4 0C0=0 5B0=5 5A0=5 A+B-C*
0A1000=0 4A2=2 A/