In meinem Economics-Kurs möchten meine Freunde und ich Wege finden, die Ziffern im Datumsformat (MM / TT / JJ) neu anzuordnen, um eine gültige mathematische Gleichung zu erstellen. Zum größten Teil dürfen wir zusätzlich zur Verkettung Addition, Subtraktion, Multiplikation, Division, Klammern und Exponentiation verwenden.
Ihr Programm sollte etwas Ähnliches tun. Das Programm sollte das aktuelle Datum importieren und Operatoren einfügen, um einen Ausdruck gemäß den folgenden Regeln zu drucken.
- Die Ziffern MÜSSEN der Reihe nach verwendet werden. Eine Umstellung der Ziffern ist nicht zulässig.
- Der resultierende Ausdruck muss mathematisch korrekt sein.
- Addition, Subtraktion, Multiplikation, Division, Exponentiation und Verwendung von Klammern ist zulässig. So ist die Verkettung von Ziffern. Es sind jedoch nicht alle Operationen erforderlich. Sie können kein Subtraktionszeichen verwenden, um eine negative Ziffer zu erhalten (wie
-1+1+11=10
am 11. November 2010). - Das Programm muss auf einem Standardcomputer in 60 Sekunden ausgeführt werden.
Diese Herausforderung wurde zum Beispiel am 10. November 2015 geschrieben. Das Programm würde dies als 11.10.15 interpretieren. Eine Beispielausgabe wäre (1+1)/10=1/5
.
Boni
Sie können die Anzahl der Bytes in Ihrem Code mit 0,9 für jedes der folgenden von Ihrem Programm unterstützten Elemente multiplizieren.
- Das Programm druckt alle möglichen Ausdrücke, die gebildet werden können, durch Zeilenumbrüche getrennt. Mit zusätzlichen 0,95 multiplizieren, wenn die Ausdrücke in aufsteigender Reihenfolge der zusätzlichen Symbole aufgeführt sind.
- Das Programm funktioniert auch für MM / TT / JJJJ-Daten, wobei zusätzlich zur Möglichkeit ohne eine Möglichkeit mit den ersten beiden Stellen des Jahres gedruckt wird. Wenn dieser Bonus mit dem ersten Bonus kombiniert wird, müssen alle Möglichkeiten mit den ersten beiden Ziffern des Jahres gedruckt werden.
- Das Programm druckt auch eine Gleichung für , wenn es mehrere Gleichheiten (zum Beispiel am 11. November 2011
1=1=1=1=1=1
habe gedruckt werden, zusätzlich zu den Möglichkeiten, wie1*1=1=1=1=1
,1*1*1=1=1=1
und1*1*1*1=1=1
. Alle solche Fälle gedruckt werden müssen , damit der erste Bonus erreicht werden. - Das Programm unterstützt die Konvertierung in Basen zwischen 2 und 16. Beachten Sie, dass, wenn die Basis nicht 10 ist, alle Zahlen im Ausdruck in dieselbe Basis
(Base b)
geschrieben und nach dem Ausdruck geschrieben werden müssen (b
entsprechend ersetzt).
Dies ist Codegolf, daher gelten die Standardregeln. Kürzester Code in Bytes gewinnt.
Antworten:
Python 3,
424420369363 BytesBrute erzwingt alle möglichen Kombinationen von Operationen in den Zahlen und stoppt, wenn eine gefunden wird.
BEARBEITEN: 4 Bytes dank @NoOneIsHere gespeichert
EDIT 2: 51 (!) Bytes dank @ValueInk gespeichert
quelle
except:pass
und das Leerzeichen entfernen[ (p//(len(o)**i))%len(o)]
.__future__
, würde ein Upgrade auf Python 3 für Ihre Situation besser funktionieren? Ich verstehe auch nicht, warum Sieo
beim Erstellen der Liste der Operatoren mit gleichen Rechten das Gegenteil tun .o=([[x,x+'(',x+')']for x in",+,-,==,*,/,**".split(',')])
für 2 Bytes