In der Mathematik ist die faktorielle, verkürzte "Tatsache" einer nicht negativen ganzen Zahl n , die mit n! Bezeichnet wird . ist das Produkt aller positiven ganzen Zahlen kleiner oder gleich n . Zum Beispiel 5! ist 1 * 2 * 3 * 4 * 5 = 120
Die Fakultät von 0 ist 1 gemäß der Konvention für ein leeres Produkt.
Dies sind die regulären Fakten, an die wir gewöhnt sind. Fügen wir einige Alternativen hinzu:
- Die Fakultät (oben definiert)
- Die doppelte Fakultät: n !! = 1 + 2 + ... + n
- Die dreifache Fakultät: n !!! = 1 - (2 - (3 - (... - n))) ...)
- Die vierfache Fakultät: n !!!! = 1 / (2 / (3 ... / n))) ...) . Hinweis: Dies ist eine Gleitkommadivision, keine Ganzzahldivision.
Herausforderung
Nehmen Sie eine nicht negative Ganzzahleingabe n , direkt gefolgt von 1 bis 4 Ausrufezeichen. Die Eingabe sieht (genau) so aus: 0! , 5 !! , 132 !!! oder 4 !!!! . Bei dieser Herausforderung können Sie leider kein flexibles Eingabeformat annehmen.
Ausgabe
Die Ausgabe sollte das Ergebnis in jedem geeigneten Format sein. Das Ergebnis der vierfachen Fakultät muss mindestens zwei Nachkommastellen haben, mit Ausnahme von 0 !!!! = 0 .
Testfälle:
0! = 1
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
8! = 40320
9! = 362880
10! = 3628800
---
0!! = 0
1!! = 1
2!! = 3
3!! = 6
4!! = 10
5!! = 15
6!! = 21
7!! = 28
8!! = 36
9!! = 45
10!! = 55
---
0!!! = 0
1!!! = 1
2!!! = -1
3!!! = 2
4!!! = -2
5!!! = 3
6!!! = -3
7!!! = 4
8!!! = -4
9!!! = 5
10!!! = -5
---
0!!!! = 0
1!!!! = 1
2!!!! = 0.5
3!!!! = 1.5
4!!!! = 0.375
5!!!! = 1.875
6!!!! = 0.3125
7!!!! = 2.1875
8!!!! = 0.27344
9!!!! = 2.4609
10!!!! = 0.24609
Die kürzeste Lösung in jeder Sprache gewinnt.
0!
->1
.Antworten:
JavaScript (ES6), 88 Byte
Testfälle
Code-Snippet anzeigen
Formatiert und kommentiert
quelle
Schale , 15 Bytes
Probieren Sie es online!
Erläuterung
Indizierung in eine Liste von Funktionen: die Freude an der Verwendung einer funktionalen Sprache.
Ich benutze einen absteigenden Bereich und linke Falten, da
-
und/
nehme ihre Argumente in umgekehrter Reihenfolge in Husk.quelle
Indexing into a list of functions
ist woah ...C # (.NET Core) ,
134 130128 BytesProbieren Sie es online!
Das Beste am Code-Golfen sind die Dinge, die Sie lernen, während Sie versuchen, die Herausforderungen zu lösen. In diesem Beispiel habe ich gelernt, dass Sie in C # neben Leerzeichen auch andere Zeichen aus Zeichenfolgen entfernen können.
s.Split('!').Length
, nur die Grenzen ine>4?i/r:e>3?i-r:e>2?i+r:i*r
und festlegenn<1&e<3?1:r
.quelle
e
n
undi
auchdouble
zu vermeiden, es für r zu deklarieren, um 4 Bytes zu sparen.float
um ein weiteres Byte zu speichern.Perl 5 , 62 Bytes
61 Byte Code + 1 für
-p
.Vielen Dank an @GB für den Hinweis auf einen Fehler von meiner Seite!
Probieren Sie es online! (dies dient der
-l
Lesbarkeit)quelle
R ,
113111 BytesProbieren Sie einige Testfälle aus!
ungolfed:
quelle
el(strsplit(s,"!"))
speichert 1 BytePython3,
124130121119 BytesAn dieser Stelle glaube ich, dass die Rekursion der Schlüssel zum weiteren Speichern von Bytes ist.
Probieren Sie die Testfälle auf Online testen !
-9 Bytes dank @ Mr.Xcoder !
-2 Bytes dank @Felipe Nardi Batista !
quelle
Pyth ,
3430 BytesProbieren Sie es online!
Erläuterung
quelle
.U
ein Byte gespeichert.05AB1E , 27 Bytes
Probieren Sie es online!
quelle
„.»
nicht funktioniert?»
ist Teil einer unvollendeten komprimierten Zeichenfolge, daher tritt ein Fehler auf, und wie in 05AB1E üblich wird der Fehler ignoriert."*+-/"èU
nachdem ichL
Follow-up mit verwendet habe,.»X
aber es wirdX
als Zeichenfolge behandelt , nicht als Befehl und.»X.V
ist sogar noch kniffliger.X
nicht ausgewertet werden .X.V
sind zwei Befehle.Ruby ,
83 8079 BytesProbieren Sie es online!
Erläuterung:
quelle
Java 8,
141136134 Bytes-5 Bytes (141 → 136) dank der C # -Antwort von @CarlosAlejo .
Erläuterung:
Probieren Sie es hier aus.
quelle
float
kürzer ist alsdouble
.float q=s.length()-(s=s.replace("!","")).length(),n=new Float(s)
auf die aktuelle Antwort hat mir 5 Bytes gespart. :) Ich habe vergessen, einen Teil " Bytes gespeichert dank " hinzuzufügen, der mir jetzt aufgefallen ist.Jelly ,
24 23 2625 Bytes+
32-Byte-Patches zur Behebung nach Fehlinterpretation :(Ein vollständiges Programm (eine monadische Verknüpfung mit Hilfsverknüpfungen, auf die nach Programmstandort verwiesen wird)
Probieren Sie es online! oder sehen Sie sich eine Testsuite an .
Wie?
quelle
0!
./
. Auf eine leere Liste D: EDIT: Anscheinend gilt für0!
,0!!
,0!!!
und0!!!!
+1.Selbstmodifizierender x86_64-Computercode, 123 Byte
Warum sollten interpretierte Sprachen in der Lage sein, Code mit ausgefallenen
eval
s, aber nicht einfachem Maschinencode dynamisch auszuführen ?Probieren Sie es aus mit:
Versammlung:
Erklärungen werden später hinzugefügt. Die Grundidee ist es, die modifizieren
divss xmm0, xmm1
Anweisung an0x100000db0
und ersetzen sie durch einemulss
,addss
,subss
oderdivss
nach gelieferten Operanden. Ein kleiner Trick wird auch verwendet, um die Eingabezeichenfolge zu analysieren.Baugruppe generiert mit:
quelle
Haskell,
105 102 9896 Bytes9 Bytes dank Zgarb und Nimi gespeichert.
Probieren Sie es online aus.
quelle
read n
, und dasf=
ist nach unseren Regeln unnötig .lex
speichert zwei Bytes:f s|[(n,b)]<-lex s=read n!(length b-1)
.lex
. Das ist großartig! :) Ich verstehe nicht, wie das Bytes spart - danach bekomme ich 99 Bytes.Gaia ,
26-25BytesProbieren Sie es online!
Erläuterung
quelle
Gelee , 28 Bytes
Probieren Sie es online!
Ich hatte die Idee, die Links in Zeilen von Jonathan Allans Antwort für -2 Bytes zu trennen .
quelle
APL (Dyalog) , 30 Bytes
Inspiriert von der Lösung von lstefano .
Probieren Sie es online!
{
…}
Anonyme Funktion, bei der das Argument dargestellt wird durch⍵
:0::
Wenn ein Fehler auftritt:0
Null zurückgeben⋄
jetzt versuchen:⍵∩⎕D
der Schnittpunkt des Arguments und der Satz von D igits (entfernt Ausrufezeichen)⍎
führe das aus (verwandelt es in eine Zahl)⍳
Das weiß ich(
…)/
Fügen Sie die folgende Funktion zwischen den Begriffen ein (APL ist je nach Bedarf rechtsassoziativ):⍵~⎕D
Argument ohne D igits (lässt Ausrufezeichen)≢
Zählen Sie das zusammen (dh wie viele Ausrufezeichen)'×+-⌹'⊃⍨
benutze das, um aus der Liste der Symbole zu wählen *⍎
Ausführen (verwandelt das Symbol in eine Funktion)⌹
(Matrix Division) wird anstelle von÷
(Normal Division) verwendet, um einen Fehler in einer leeren Liste zu verursachenquelle
::
man in einer DFN?::
auftritt,::
wird sofort der Wert rechts von zurückgegeben.Perl 5 , 96 Bytes
Probieren Sie es online!
quelle
Dyalog APL, mindestens 29 Zeichen
Der Ausdruck ist fast richtig. Es besteht alle Testfälle EXCEPT,
0!!!!
für die es1
anstelle der erforderlichen gibt,0
und das liegt daran, dass in APL die Reduktion eines leeren Vektors das neutrale Element für die zur Reduktion verwendete Funktion zurückgeben soll. Für den Quotienten, der 1 ist. Im Moment habe ich keine Zeit, ihn zu reparieren, aber ich lasse ihn hier für einen regnerischen Tag.quelle
{0::0⋄(⍎'×+-⌹'⊃⍨≢⍵~⎕D)/⍳⍎⍵∩⎕D}
Probieren Sie es online!05AB1E ,
2524 BytesProbieren Sie es online!
quelle
Mathematica, 152 Bytes
quelle
Javascript,
111163 BytesLesbare Version
quelle