Ihre Aufgabe ist es, bei einer positiven Ganzzahl n
einen Ausdruck zu generieren, der der Zahl entspricht n
.
Der Haken ist: Du darfst nur die Nummer 1
in der Ausgabe.
Die zur Verfügung stehenden Betreiber sind:
+
,-
,*
Und/
/
ist Gleitkommadivision (so5/2 = 2.5
).
sqrt
(alss
)ceil
undfloor
(wiec
undf
jeweils)!
(Fakultät)- Die Fakultät funktioniert in diesem Fall nur für positive ganze Zahlen.
Du darfst auch 1
s zusammen stapeln , so dass so etwas 11
in der Ausgabe akzeptabel ist. Sie zählen jedoch als die gleiche Anzahl von 1
's, die in der Zahl enthalten ist ( 11
zählt also als 2 1
' s).
Sie müssen auch Klammern in die Ausgabe einschließen, damit der Ausdruck in der Ausgabe, wenn er in der Reihenfolge der Operationen ausgeführt wird, zur Eingabe führt. Sie gelten jedoch nicht als Operationen.
Beispiele:
- Eingabe = 24, eine mögliche Ausgabe =
(1+1+1+1)!
- Eingabe = 11, eine mögliche Ausgabe =
11
- Eingabe = 5, eine mögliche Ausgabe =
c(s((1+1+1+1)!))
- Die Decke der Quadratwurzel von
24
ist5
.
- Die Decke der Quadratwurzel von
Regeln:
- Es ist garantiert, dass die Eingabe eine positive ganze Zahl von
1
bis ist2^31-1
. - Ihr Programm muss für jede positive ganze Zahl bis zu arbeiten
2^31-1
, auch wenn sie nicht getestet werden. - Ihr Programm muss in 1 Stunde alle Ausgaben für alle Nummern im Satz verarbeiten.
- Die Ergebnisse für jeden Programmlauf müssen exakt gleich sein - auch keine Startwerte.
- Sie dürfen die Ausdrücke nur für maximal 10 numerische Werte fest codieren.
- Es ist nicht erlaubt, imaginäre Zahlen irgendwo in der Ausgabe zu haben (also nein
s(some negative number)
). - Es ist auch nicht erlaubt, dass Zahlen größer
2^31-1
oder kleiner als-2^31+1
irgendwo in der Ausgabe sind, selbst wenn siesqrt
bearbeitet oder/
bearbeitet werden (also nein(((1+1+1)!)!)!
oder((1+1+1+1)!)!
).
Reihe von Zahlen:
945536, 16878234, 32608778, 42017515, 48950830, 51483452, 52970263, 54278649, 63636656, 78817406, 89918907, 90757642, 95364861, 102706605, 113965374, 122448605, 126594161, 148064959, 150735075, 154382918, 172057472, 192280850, 194713795, 207721209, 220946392, 225230299, 227043979, 241011012, 248906099, 249796314, 250546528, 258452706, 276862988, 277140688, 280158490, 286074562, 308946627, 310972897, 322612091, 324445400, 336060042, 346729632, 349428326, 352769482, 363039453, 363851029, 392168304, 401975104, 407890409, 407971913, 425780757, 459441559, 465592122, 475898732, 482826596, 484263150, 506235403, 548951531, 554295842, 580536366, 587051904, 588265985, 588298051, 590968352, 601194306, 607771869, 618578932, 626776380, 667919873, 681786366, 689854904, 692055400, 697665495, 711608194, 734027104, 750869335, 757710567, 759967747, 777616154, 830071127, 833809927, 835873060, 836438554, 836945593, 863728236, 864158514, 871273503, 881615667, 891619600, 897181691, 918159061, 920521050, 924502226, 929983535, 943162304, 950210939, 950214176, 962610357, 974842859, 988572832
(Dies sind 100 Zufallszahlen von 1 bis 1 Milliarde.)
Punktesystem:
Ihre Punktzahl wird folgendermaßen ermittelt:
- Ihr Programm wird anhand der Zufallszahlen im Set getestet.
- Sie müssen die mit den Zufallszahlen im Set generierte Ausgabe bereitstellen (entweder in Ihrer Antwort oder als Pastebin-Link).
- Sie haben dann zwei "Punkte": einen primären Punktestand und einen sekundären Punktestand.
- Ihre primäre Punktzahl ist
(no. of 1's in output)*(no. of operators in output)
. Wenn Ihre primäre Punktzahl die niedrigste ist, gewinnen Sie. - Ihre sekundäre Punktzahl ist der Zeitpunkt Ihres Uploads in GMT und in 24-Stunden-Zeit. Wenn Sie also Ihr Programm am 12. September um 00:00 Uhr (GMT) hochladen, lautet Ihre Punktzahl
12/09/2016, 00:00
(DD/MM/YYYY HH:MM
für die Formatierung verwenden).
- Ihre primäre Punktzahl ist
Zeigen Sie Ihre Punktzahl wie folgt an:
(language name)
Primary Score = (primary score)
Secondary Score = (secondary score)
(no. of 1's) `1`'s, (no. of operators) operators
Ersetzen Sie alle Angaben in den Klammern durch den Namen Ihrer Sprache, die primäre Punktzahl bzw. die sekundäre Punktzahl.
Aktueller Gewinner:
Der aktuelle Gewinner ist @ChrisJefferson, der eine primäre Punktzahl von hat 3,810,660
.
quelle
Antworten:
C ++ 11
Weiteres kleines Update: Füge viel weniger hinzu und probiere alle Zahlen von Form A * B + C. Ich glaube , dass innerhalb der Frist, dies zu optimalen ziemlich nahe ist, vorausgesetzt , Sie nur verwenden
+
,*
und!
. Ich überlasse anderen Betreibern mehr Zeit als mir!Kleines Update: Versuchen Sie mehr, Fakultäten und Zahlen wie 11 ... 111 zu verwenden. Außerdem wurde ein Fehler behoben, den ich
!
in meiner Kalkulation nicht berücksichtigt hatteNeues Ergebnis:
Primary Score = 3.810.660
Sekundäres Ergebnis = 12.09.2016 20:00
2532
1
s, 1505 Bediener.Verschiedene Tricks zusammengestellt. Mein Programm beginnt mit der Einstellung des kürzesten Programms für alle Fakultäten und Zahlen der Form 111..111 (ich glaube nicht, dass dies gegen die Festverdrahtungsregel verstößt, da dies die kürzesten Möglichkeiten sind, diese Zahlen zu erstellen. Ich könnte sie neu anordnen mein Code, damit ich diese Muster in meiner dynamischen Programmierung überprüfe, wenn Sie wollen). Führen Sie dann einen partiellen dynamischen Programmieransatz aus, indem Sie verschiedene Formen ausprobieren:
Leider kann ich nicht alle Arten der Zerlegung einer Zahl ausprobieren, daher wähle ich Fakultät und 11 ... 11, um nur die nächste Zahl auszuprobieren, für A + B, um Dinge in der Nähe von A / 2 auszuprobieren, und für A * B + C nur ganz klein zu probieren.
Es wäre einfach, dies zu erweitern, um einige zu versuchen, indem man versucht, manchmal ein wenig zu überschießen (insbesondere in A * B - C), aber ich mag es, nur zu versuchen, zu wachsen.
Außerdem ist es sehr schwierig, die Optimierungsbedingung zu optimieren (das gefällt mir nicht!), Da Sie im Prinzip nicht für jede einzelne Zahl den besten Wert ermitteln können. Sie müssen Ihre Antworten global berücksichtigen (was ich nicht vorhabe).
Warnung: Dieses Programm benötigt eine 64-Bit-Maschine und ungefähr 10 GB Speicher (da ich ineffizient ein riesiges Array für alle teilweise berechneten Ergebnisse erstelle).
Programm:
Ergebnisse:
quelle
!
. Ich denke, das sind 1632 Operatoren, nicht 1407. (Das führt jedoch immer noch zu einem tollen Ergebnis.)long maxval
murren murrenHaskell
Primäre Punktzahl: 27242281
Sekundäre Punktzahl: 12/09/2016 09:01
11891
1
, 2291 BetreiberEs findet im Grunde den kürzesten Weg, um es mit nur + und - zu machen
Ausgabe:
quelle
Python, Punktzahl 17136288
Sekundäre Punktzahl: 12/09/2016 08:53
(4784 Einsen und 3582 Operationen)
In Arbeit, aber OP hat nach meinem aktuellen Code gefragt ...
Ausgang - beachten Sie, dass
t
die Fakultäts - Funktion ist, um nicht zu verwechseln mitf
für ,floor
wenn es verwendet wird - ich ausgewertet jede der Funktiont
( siehe oben) zu überprüfen , dass sie alle korrekt sind :quelle
t
s in der Ausgabe?JavaScript (ES6), 27212498, 2016-09-12 09: 46: 34Z
Verwendet nur + und -. Basierend auf meiner Antwort, um diese zu minimieren
quelle
Python
Primary Score = 2214138604871819402525
Sekundäres Ergebnis = 09.12.2016, 07:53 Uhr
Hier ist der Code:
Nur um den Ball ins Rollen zu bringen.
Grundsätzlich wird ausgegeben
1+1+1...+1
, wobei die Anzahl der1
in dem ausgegebenen Ausdruck enthaltenen Werte gleich istn
.Insgesamt gibt es
47054634305
1
für die Menge der Zahlen und47054634205
Operatoren (die alle sind+
).Ich werde hier keinen Pastebin posten, weil du auf die Idee kommst.
quelle
2**31-1
.n-1
? Es funktioniert gut für mich.awk
Primäre Punktzahl 46933701
sekundäre Punktzahl 12/09/2016 19:20
(6901 Einsen, 6801 Ops)
Druckt einfach die von links nach rechts berechnete Binärdarstellung.
Zum Beispiel ist 19 10011, was ((((( 1 ) * 2 + 0 ) * 2 + 0 ) * 2 + 1 ) * 2 + 1 ) ist.
Ich lasse das einfach aus
+0
und schreibe das2
als(1+1)
.Ich war nur gespannt, wie diese Methode abschneiden würde.
Ausgabe:
quelle
Python 3
Primäre Punktzahl:
69720516
Sekundäre Punktzahl:
09:30 14/09/2016
Bearbeiten: Verwendet nun die Multiplikation, um die Punktzahl erheblich zu reduzieren.
Dabei werden die Fakultäten und die Rekursion in hohem Maße genutzt. Insgesamt verwendet das Programm:
5958
Einsen11702
BetreiberIdeone es!
quelle
JAVA
Primäre Punktzahl
1045978739
Sekundäre Punktzahl
12/09/2016 16:05
37193
1s
28123
operators
quelle
1
zu Beginn eines jeden loswerden(1*11*11*...*11)
.Emacs Lisp
Primäre Punktzahl: 81638725
Sekundäre Punktzahl: 12/09/2016 09:35
Bildet im Grunde genommen eine Summe über die Domain (1, 11, 111, ...), die n entspricht.
quelle
111+11+1+1
, oder? (Korrigieren Sie mich, wenn ich mich irre.)1
s über die gesamte Ausgabe von 100 Zahlen addiert und diese mit der Gesamtzahl der+
Operationen über die gesamte Ausgabe multipliziert ?AWK , 15642720
Sekundäres Ergebnis = 30.05.2017, 21:11 Uhr
Probieren Sie es online!
Eine: 4590
Ops: 3408 Primärer Score = 15642720 Sekundärer Score = 30.05.2017 21:11
quelle