Mathemania Specs:
Jeder Mathemania-Code beginnt mit der Nummer 2
. Von der 2
aus können Sie folgende Operationen ausführen:
e
: Potenzierung. Die Standardeinstellung dieses Befehls ist das Quadrieren der Zahl.f
: Factorial. In der Standardeinstellung dieses Befehls wird die einfache Fakultät für die Zahl (using f on 2 = 2! = 2
) verwendet.r
: Wurzel. Die Standardeinstellung dieses Befehls ist das Quadratwurzeln der Zahl.c
: Deckenfunktion.l
: Bodenfunktion.
Um eine Zahl in Mathemania zu generieren, müssen Sie diese Befehle, die von links nach rechts für die Zahl ausgeführt werden, aneinanderreihen 2
.
Beispiele:
ef = (2^2)! = 4! = 24
rl = floor(sqrt(2)) = floor(1.4...) = 1
er = sqrt(2^2) = sqrt(4) = 2
efrrc = ceil(sqrt(sqrt((2^2)!)))
= ceil(sqrt(sqrt(24)))
= ceil(sqrt(4.89...))
= ceil(2.21...)
= 3
Die Befehle e
, f
und r
können durch zusätzliche Mathemania-Befehle geändert werden (die ebenfalls 2
als "Basis" -Zahl beginnen ), um unterschiedliche Exponentiale, Fakultäten und Wurzeln zu erzeugen, indem nach der geänderten Funktion eckige Klammern gesetzt und die Mathemania-Befehle darin eingefügt werden.
Um beispielsweise eine Zahl zu würfeln, anstatt sie zu quadrieren, können Sie den Befehl für 3
after folgendermaßen e
eingeben:
e(efrrc) -> cube a number, "efrrc" = 3
HINWEIS: Für unseren Zweck f
beginnt der Fakultätsbefehl ( ) mit 2
einer einzelnen Fakultät. Wenn Sie dies tun f(efrrc)
, wird dies zu einer doppelten Fakultät und nicht zu einer dreifachen Fakultät gewertet.
Für n
-Faktoren (z. B. doppelte Fakultäten = 2-Fakultäten, dreifache Fakultäten = 3-Fakultäten usw.) wird die Basiszahl mit der Zahl multipliziert, die n
kleiner als sie und n
kleiner als diese ist, und so weiter, bis die endgültige Zahl nicht mehr sein kann subtrahiert von n
ohne zu werden 0
oder negativ.
Beispielsweise:
7!! = 7 * 5 * 3 * 1 = 105 (repeatedly subtract 2, 1 is the last term as
1 - 2 = -1, which is negative)
9!!! = 9 * 6 * 3 = 162 (repeatedly subtract 3, 3 is the last term as
3 - 3 = 0, which is 0)
Weitere Informationen finden Sie hier .
Sie können es überall einfügen und es wird von Mathemania als einzelne Funktion behandelt:
e(efrrc)rc = ceil(sqrt(2^3))
= ceil(2.82...)
= 3
Sie dürfen diese auch ineinander verschachteln:
e(e(e)) = e(4th power)
= (2^4)th power
= 16th power
Klicken Sie hier , um einen Interpret des Mathemania-Codes zu erhalten (Prost, @ BradGilbertb2gills!)
Aufgabe:
Ihre Aufgabe ist es, ein Programm zu erstellen, das bei einer positiven Ganzzahl n
als Eingabe ein Mathemania-Programm generiert, das bei Ausführung zurückgibt n
.
Die von Ihnen generierten Mathemania-Programme müssen jedoch so klein (golfen) wie möglich sein, und Ihre endgültige Punktzahl wird durch die Summe der Anzahl der Bytes in den generierten Mathemania-Programmen des Beispiels bestimmt, die die ganzen Zahlen 10,000
sind 10,100
. Die niedrigste Punktzahl gewinnt.
Regeln und Spezifikationen:
- Ihr Programm muss ein gültiges Mathemania-Programm für eine positive ganze Zahl ausgeben, es werden jedoch nur die Zahlen zwischen
10,000
und10,100
getestet. - Sie dürfen keine Mathemania-Programme ausgeben, die keine Ganzzahl ergeben. Wenn Sie dies tun, wird Ihr Programm disqualifiziert.
- Für die Befehle
e
,f
undr
die Mathe Code innerhalb dieser Funktionen ( zum Beispiele(efrrc)
, wo derefrrc
der Code innerhalb der Funktion ist) , muss auf eine positive Ganzzahl über bewerten2
. Wenn Ihr Programm dieser Regel nicht entspricht, wird es ebenfalls disqualifiziert. - Ihr Programm muss ein Mathemania-Programm für eine der 101 Test-Ganzzahlen in höchstens 30 Minuten auf einem modernen Laptop zurückgeben.
- Ihr Programm muss jedes Mal, wenn es ausgeführt wird, dieselbe Lösung für eine beliebige Ganzzahl zurückgeben. Wenn ein Programm beispielsweise eine Eingabe erhält
5
und ausgibtefrc
, muss es diese jedes Mal ausgeben, wenn die Eingabe5
erfolgt. - Sie dürfen keine Lösungen für eine positive ganze Zahl hartcodieren.
- Um das Golfpotential in Ihrer Ausgabe vollständig zu maximieren, sollte Ihr Programm in der Lage sein, beliebig große ganze Zahlen zu verarbeiten. Es ist keine Voraussetzung, aber viel Glück, wenn Ihre Sprache dies nicht unterstützt.
Dies ist Metagolf , also gewinnt die niedrigste Punktzahl!
ef
zum Beispiel ist, darf der Code "überspringen" und nur das Ergebnis vor deref
Operation ausgeben ?Antworten:
Python 3.5, Ergebnis von ??
Ab jetzt habe ich nicht die Ausgabe für alle 101 Eingaben, aber sobald ich das Programm für alle Testfälle ausgeführt habe, werde ich mit meiner Punktzahl aktualisieren.
Darüber hinaus konnte ich die Ausgabe einiger der von mir getesteten Testfälle aufgrund der bloßen Zahlengröße nicht überprüfen, und zu diesem Zeitpunkt ist das Zeitlimit für den Online-Interpreter von @ BradGilbertb2gills abgelaufen. Hoffentlich funktionieren alle Ausgänge.
quelle