Ihre Aufgabe ist es, ein Programm zu schreiben, das bei Eingabe von n den minimalen Ausdruck jeder Zahl von 1 bis n in der angegebenen Reihenfolge ausgibt . Das kürzeste Programm in Bytes gewinnt.
Ein minimaler Ausdruck kombiniert Einsen mit Addition und Multiplikation, um die angegebene Zahl zu erhalten, wobei so wenig Einsen wie möglich verwendet werden. Wird zum Beispiel mit elf 23
ausgedrückt 23=((1+1+1)(1+1)+1)(1+1+1)+1+1
, was minimal ist.
Bedarf:
- Das Programm muss eine positive natürliche Zahl n eingeben.
- Die Ausgabe muss in folgendem Format erfolgen:
20 = ((1+1+1)(1+1+1)+1)(1+1)
- Ihre Ausgabe enthält möglicherweise keine unnötigen Klammern wie
8 = ((1+1)(1+1))(1+1)
. - Das Multiplikationszeichen
*
ist optional. - Leerzeichen sind optional.
- Sie müssen nicht alle möglichen Gleichungen für einen bestimmten Wert ausgeben: Sie haben beispielsweise die Wahl,
4=1+1+1+1
oder auszugeben4=(1+1)(1+1)
. Sie müssen nicht beide ausgeben. - Das kürzeste Programm (in Bytes) in jeder Sprache gewinnt.
1 = 1 2 = 1 + 1 3 = 1 + 1 + 1 4 = 1 + 1 + 1 + 1 5 = 1 + 1 + 1 + 1 + 1 6 = (1 + 1 + 1) (1 + 1) 7 = (1 + 1 + 1) (1 + 1) +1 8 = (1 + 1 + 1 + 1) (1 + 1) 9 = (1 + 1 + 1) (1 + 1 + 1) 10 = (1 + 1 + 1) (1 + 1 + 1) +1 11 = (1 + 1 + 1) (1 + 1 + 1) + 1 + 1 12 = (1 + 1 + 1) (1 + 1) (1 + 1) 13 = (1 + 1 + 1) (1 + 1) (1 + 1) +1 14 = ((1 + 1 + 1) (1 + 1) +1) (1 + 1) 15 = (1 + 1 + 1 + 1 + 1) (1 + 1 + 1) 16 = (1 + 1 + 1 + 1) (1 + 1) (1 + 1) 17 = (1 + 1 + 1 + 1) (1 + 1) (1 + 1) +1 18 = (1 + 1 + 1) (1 + 1 + 1) (1 + 1) 19 = (1 + 1 + 1) (1 + 1 + 1) (1 + 1) +1 20 = ((1 + 1 + 1) (1 + 1 + 1) +1) (1 + 1)
Hier sind einige weitere Testfälle: (Denken Sie daran, dass auch andere Ausdrücke mit der gleichen Anzahl von Einsen zulässig sind.)
157=((1+1+1)(1+1)(1+1)+1)(1+1+1)(1+1)(1+1)+1
444=((1+1+1)(1+1+1)(1+1)(1+1)+1)(1+1+1)(1+1)(1+1)
1223=((1+1+1)(1+1+1)(1+1+1)(1+1+1)(1+1+1)+1)(1+1+1+1+1)+1+1+1
15535=((((1+1+1)(1+1+1)(1+1+1)(1+1+1)+1)((1+1+1)(1+1)+1)+1)(1+1+1)+1)(1+1+1)(1+1+1)+1
45197=((((1+1+1)(1+1)(1+1)(1+1)+1)(1+1+1+1+1)(1+1)+1)(1+1+1)(1+1)(1+1)+1)(1+1+1+1+1)(1+1+1)+1+1
Viel Glück! - Die Schildkröte 🐢
code-golf
math
arithmetic
Die schildkröte
quelle
quelle
n=20
) und 2) Sie sagen zu Beginn, dass die ganzzahlige Komplexität, die sich von der Gleichung unterscheidet, ausgegeben werden muss, aber Sie schließen das nicht in ein eines der Beispiele mit Ausnahme des allerersten.Antworten:
Pyth, 60 Bytes
Demonstration
Dank der automatischen Funktionserinnerung von Pyth kann der Online-Compiler vor Ablauf der Zeit 1223 erreichen.
In Kurzform
Dies verwendet eine rekursive Funktion
'
, die alle möglichen Produkte und Summen berechnet, die die gewünschte Ausgabe ergeben könnten, die kürzeste Zeichenfolge bei jeder letzten Operation findet, sie dann nach1
Anzahl vergleicht und die erste zurückgibt.Es wird eine Hilfsfunktion verwendet,
y
die einen Ausdruck nur dann in Klammern setzt, wenn er in Klammern gesetzt werden muss.Offline starte ich das Programm mit der Eingabe
15535
, und es ist fast abgeschlossen. Die Ergebnisse werden inkrementell gedruckt, sodass Sie den Fortschritt leicht verfolgen können.Letzte Zeilen der Ausgabe:
In abgekürzter Schreibweise
quelle
CJam,
1051029896 BytesProbieren Sie es online im CJam-Interpreter aus .
Testlauf
Der Online-Interpreter ist für die größeren Testfälle zu langsam. Selbst mit dem Java-Interpreter benötigen die größeren Testfälle viel Zeit und Speicher.
Bei genügend Zeit würde es diese Lösungen für die nächsten Testfälle produzieren:
quelle
Julia, 229 Bytes
Das geht eigentlich ziemlich schnell. Wenn Sie die Funktion zuweisen
f
und@time f(15535)
ausführen, erhalten Sie die Ausgabe (nur die letzten beiden Zeilen).und dafür
@time f(45197)
gibt esAlso, was macht der Code? Einfach -
C
enthält die aktuelleC
Anzahl für die Zahl,K
ist ein Indikatorarray, das festhält, ob der Ausdruck im Grunde genommen eine Summe oder ein Produkt ist, um mit Klammern umzugehen, undE
enthält denE
Ausdruck selbst. Der Code arbeitet sich vons=1
Anfang bis Ende vorn
und sucht nach der minimalen Darstellung der Zahls
in Form von niedrigeren Werten, indem er entweder nach einer Summe oder nach einem Produkt sucht. Wenn es sich um ein Produkt handelt, werden die beiden Komponenten überprüft und in eckige Klammern gesetzt, wenn es sich um Summen handelt. Diese Überprüfung wird in Funktion durchgeführtF
, um Bytes zu sparen (da dies für die beiden Faktoren zweimal durchgeführt werden muss).quelle