Das Four Fours-Puzzle ist ein beliebtes mathematisches Freizeitpuzzle, bei dem genau vier 4er (und keine andere Zahl) und eine definierte Menge von Operationen verwendet werden, um jede Zahl von 0 bis zu einem bestimmten Maximum zu erreichen.
In dieser Version sind nur die folgenden Operatoren zulässig:
- Beliebige Gruppierungssymbole können verwendet werden
- Addition (
+
), Subtraktion (-
), Multiplikation (*
), Division (/
) - Fakultät (
!
), Gamma-Funktion (Γ
) - Potenzierung (
^
), Quadratwurzel (√
) - Verkettung (zB
44
ist zwei4
s) - Dezimalpunkt (z. B.
4.4
zwei4
s), Überstrich (z. B..4~ = 4/9
)
Es gilt die Standardreihenfolge.
Ihr Programm sollte bei einer Eingabe zwischen 0 und 100 eine korrekte Lösung für diese Eingabe generieren. Wenn das Programm eine ungültige Lösung für eine Eingabe ausgibt, ist das Programm ungültig.
Beispielsweise 0
könnte Ihr Programm mit einer Eingabe von erzeugen 44-44
.
Die Verwendung externer Module ist nicht gestattet. Nur _.4~
ist für den Overbar-Operator zulässig, dh nur für einen4
darf hinter dem Dezimalpunkt stehen.
Dies ist Codegolf, also gewinnt die kürzeste Lösung.
Bearbeiten : Um besonders deutlich zu sein, muss das Programm eine Reihe der oben genannten Operationen ausgeben, die auf genau vier 4
Sekunden angewendet werden - nicht mehr und nicht weniger. Auch .4 = 4/10
ist ein gültiger Begriff und zählt als nur eine Verwendung 4
.
quelle
!(4)
anstatt(4)!
)?Antworten:
GolfScript (129 Zeichen *)
Die Laufzeit auf meinem PC liegt in der Größenordnung von 4 Minuten. Eine moderate Beschleunigung kann auf Kosten von zwei Zeichen erzielt werden, indem
.&
unmittelbar nach dem eine Eindeutigkeitsoperation hinzugefügt wird%+
.Ich benutze vorcodierte Ausdrücke für
1
,2
,4
,6
,24
,120
, und44
, und baue die oben von dem Rest nur mit+
,*
und-
. Auf diese Weise muss ich im Programm selbst keine nicht ganzzahlige Arithmetik ausführen. Ich habe versucht, einfachere Ausdrücke zu erhalten, indem ich die einfacheren vorcodierten Werte am Anfang platziert habe.Alle diese Werte sind erforderlich † und es müssen beide Subtraktionsrichtungen unterstützt werden (
complex_expression - simple_expression
und umgekehrt). Es ist auch notwendig, einige Operationen einzuschließen, die Klammern erfordern (insbesonderea*(b-c)
), so dass ich alle Unterausdrücke wahllos in Klammern setze.* Ich zähle Unicode-Codepunkte unter der Annahme, dass das Programm UTF-8-codiert ist, und gehe davon aus, dass der Interpreter nur dann als ASCII-Zeichen behandelt wird, wenn Sie eine neuere Version von Ruby verwenden. Wenn Sie darüber sehr besorgt sind, verwenden Sie
G
für Gamma undv
für sqrt.† Naja, ich könnte
44
im Gegenzug für11
as44/4
und71
as strikt entfernen√(Γ√4+(ΓΓ4+Γ√4)!)
, aber das ist kein guter Kompromiss.quelle
Python 155 Bytes
Die ersten drei Bytes (
\xEF\xBB\xBF
) sind die UTF-8-Bytereihenfolge, obwohl die Datei in einem ANSI-Format gespeichert werden sollte. Dasû
undâ
wird als√
undΓ
in cp437 bzw. cp850 interpretiert , die fast jedem Windows - Rechner arbeiten sollten.Die Laufzeit auf meinem Computer beträgt ungefähr 0,4 Sekunden.
Beispielnutzung (Name der Datei
four_fours.py
):Ergebnisse für 0..100 . Aufgrund der Art und Weise, wie der Hash iteriert wird, wird die Verwendung
4!
so oft wie möglich bevorzugt .Bearbeiten: Speichert eine Anzahl von Bytes durch Hinzufügen
Γ√4 = 1
, wodurch keine Gruppierungen√4 = 2
mehr erforderlich sind , und durch Entfernen , was nicht mehr erforderlich ist.quelle
J
175161 ZeichenÜberprüftes Format ist
(v op v) op (v op v)
wov={0.4 4/9 1 2 4 6 24}
undop={+ - * /}
volle 0..100 Ergebnisse
quelle
.4
es eine gültige Nummer für dieses Spiel ist.