Hintergrund
Dieses Puzzle ist eine Variation des Vierer-Puzzles (selbst das Thema einer früheren Frage ). Ziel ist es, mathematische Ausdrücke für verschiedene ganze Zahlen zu finden, wobei nur vier Ziffern und bestimmte mathematische Operatoren verwendet werden. In diesem Fall sind die zulässigen Ziffern jedoch nur 2, 0, 1 und 5 . Jeder muss genau einmal in der Lösung und in der richtigen Reihenfolge erscheinen. Überraschenderweise können so viele ganze Zahlen dargestellt werden. Löser werden ermutigt, es zuerst mit der Hand zu lösen, da es seltsamerweise Spaß macht.
Regeln
Konstanten können ein- oder mehrstellig aufgebaut sein:
- Ganzzahlen: zB 2, 0, 15 usw.
- Dezimalstellen: zB .2, .01, 1.5 usw.
- Wiederholte Dezimalstellen : zB .2 ~ (= 0.222 ...), .15 ~ (= 0.1555 ...), 20.15 ~~ (= 20.1515 ...)
Folgende unäre Operationen sind erlaubt:
- Unäre Verneinung: -x
- Quadratwurzel: sqrt (x)
- Ganzzahlige Fakultät: x!
Die folgenden binären Operationen sind zulässig:
- Standardrechenoperatoren: x + y, xy, x * y und x / y
- Willkürliche Potenzierung: x ^ y
- Beliebige Wurzeln: rt [x] (y) (= x'te Wurzel von y)
Aufgabe
Ihr Programm sollte Ausdrücke für so viele der Ganzzahlen zwischen 0 und 100 wie möglich ausgeben und dann die Anzahl der von ihm erzeugten Ausdrücke ausgeben.
- Die Lösungen müssen der Reihe nach im Format n = [Ausdruck] gedruckt werden.
- Die Ausdrücke müssen alle Ziffern 2, 0, 1, 5 einmal in dieser Reihenfolge verwenden.
- Die Ausdrücke müssen unter Verwendung der oben beschriebenen Notation gedruckt werden. Unnötige Klammern sind zulässig, aber ebenso wie Leerzeichen nicht erforderlich. Die Rangfolge der Operatoren ist unäre Negation, Fakultät, Potenzierung, Multiplikation / Division und Addition / Subtraktion.
- Das Programm muss nicht für alle Zahlen Lösungen zurückgeben. Ein Programm, das einfach 0 ausgibt, ist daher gültig; Weitere Informationen finden Sie im Abschnitt "Wertung".
- Das Programm sollte auf einem modernen Computer in weniger als 15 Minuten ausgeführt werden.
Sie können ein Programm oder eine Funktion schreiben. Die Ausdrücke sollten nach STDOUT (oder der nächstgelegenen Alternative) gedruckt werden. Die Anzahl der Ausdrücke kann an STDOUT ausgegeben oder als Ganzzahl zurückgegeben werden. Es gelten die Standardcode-Golfbeschränkungen.
Beispielausgabe
0=2*0*1*5
10=20*1*.5
42=((2+0!)!+1)!/5!
100=20*1*5
4
Wertung
Update : @orlp hat einen Fehler im Punktesystem festgestellt. Unter http://meta.codegolf.stackexchange.com/questions/5106/way-of-salvaging-two-zero-one-five-puzzle-challenge erfahren Sie, wie oder ob dies behoben werden sollte.
Lösungen werden zuerst nach der Anzahl der von ihnen erzeugten Ausdrücke und dann nach ihrer Codelänge in Bytes bewertet. Daher schlägt ein 1000-Byte-Programm, das 80 Ergebnisse liefert, ein 100-Byte-Programm, das nur 79 Ergebnisse liefert (obwohl das letztere leicht erweitert werden könnte, um die fehlenden Ergebnisse einzuschließen).
Für diejenigen, die ein motivierendes Ziel haben möchten, ist unten eine Untergrenze für die Anzahl der Ausdrücke angegeben, die dargestellt werden können. Ich habe nicht vor, einen Beitrag einzureichen, daher kann es durchaus möglich sein, mit weniger zu gewinnen!
Mindestens 85 (von 101), obwohl es durchaus höher sein kann.
Anzeigetafel
Als zusätzlichen Anreiz finden Sie hier eine Zusammenfassung des Ergebnisverlaufs. Wenn Sie die höchste Punktzahl erreichen, können Sie sich selbst ganz oben auf den Tisch setzen (oder jemanden bitten, dies zu tun).
- 0 Ausdrücke, 1 Byte (Pyth): Implementierung, die nur 0 ausgibt