Heute in meiner Statistikklasse habe ich festgestellt, dass einige Fakultäten vereinfacht werden können, wenn sie miteinander multipliziert werden! Beispielsweise:5! * 3! = 5! *3*2 = 5! *6 = 6!
Deine Arbeit:
Vereinfachen Sie meine Fakultät mit einer Zeichenfolge, die nur arabische Zahlen und Ausrufezeichen enthält, auf die kürzestmögliche Zeichenfolge, und zwar in der für Ihre Sprache geringsten Anzahl von Bytes, Code-Golf-Stil.
Eingang
Eine Zeichenfolge, die nur arabische Zahlen und Ausrufezeichen enthält. Die Fakultäten für die Eingabe werden nicht größer als 200 sein !. Fakultäten werden nicht mehr als eine Fakultät pro Zahl haben. Die Eingabe kann als Liste von ganzen Zahlen erfolgen.
Ausgabe
Eine möglicherweise verkürzte Zeichenfolge, die den entsprechenden Wert für die Eingabe hat. Ordnung ist unwichtig. Die faktorielle Notation ist ein Muss, Sie müssen jedoch nicht mehr als ein faktorielles Symbol pro Zahl verwenden.
Testfälle
In: 3!2!2!
Out: 4!
In 2!3!2!0!
Out: 4!
In: 7!2!2!7!2!2!2!2!
Out: 8!8!
In: 23!3!2!2!
Out: 24!
Also: 4!!
In: 23!3!2!2!2!
Out: 24!2!
In: 127!2!2!2!2!2!2!2!
Out: 128!
In: 32!56!29!128!
Out: 29!32!56!128!
Viel Glück
1!1!
nur eine leere Zeichenfolge?Antworten:
Jelly ,
17 bis18 BytesEin monadischer Link, der eine Liste der Zahlen aufnimmt und zurückgibt (bleibt bei der Option einer Fakultät pro Zahl)
Probieren Sie es online!
Wie?
Eine Golfversion (obwohl unabhängig geschrieben) der Pietu1998-Lösung.
quelle
Jelly , 19 Bytes
Probieren Sie es online!
Schnell und dreckig. Sehr langsam, auch der
23!2!3!2!
Testfall ist eine Strecke. I / O als Liste von ganzen Zahlen.Erläuterung
quelle
Sauber ,
397... 317 BytesProbieren Sie es online!
Dies nimmt ein
[Int]
, bestimmt die Primfaktoren des Ergebnisses und reduziert die Faktoren, um die kleinste Darstellung zu finden, wobei der größte Faktor in jedem Stadium als Basiswert für den nächsten Fakultätsausdruck verwendet wird. Einige Testfälle werden mit TIO nicht abgeschlossen, aber es ist ziemlich schnell und kann sie alle auf einem Midrange-Laptop in weniger als 3 Minuten ausführen.* für einen
O((prod(N)!)^sum(N))
Komplexitätsalgorithmusquelle
> <> 66 Bytes
Probieren Sie es online!
Nicht effizient, findet nicht die kleinste Zeichenfolge und der Interpreter kann mit extrem großen Zahlen nicht gut umgehen. Aber zumindest habe ich es versucht? Übernimmt die Eingabe als Liste von Zahlen durch das
-v
Flag.Zunächst wird der Wert der Eingabe berechnet, indem jede Zahl faktorisiert und miteinander multipliziert wird. Dann findet es die größte Fakultät, die sich sauber in die Summe aufteilt und diese ausgibt. Wiederholen Sie diesen Vorgang, bis entweder eine Primzahl (die ausgegeben wird) oder eine 1 angezeigt wird und das Programm beendet wird. Aus diesem Grund findet es manchmal nicht die kürzeste Darstellung der Zahl. Der Testfall
7!2!2!7!2!2!2!2!
kehrt zum Beispiel zurück,10!224
anstatt festzustellen, dass8!8!
die Summe durch 10 teilbar ist. zuerst.quelle
Ruby ,
240 237233 BytesDas ist unglaublich ineffizient
Akzeptiert ein Array von Ints als Eingabe
Gibt einen String zurück und wählt die kürzeste Option zwischen, sagen wir
'720!'
,'6!!'
und'3!!!'
Probieren Sie es online!
quelle