Die Herausforderung besteht darin, die Ziffernsumme der Fakultät einer Zahl zu berechnen.
Beispiel
Input: 10
Output: 27
10! = 10 × 9 × ... × 3 × 2 × 1 = 3628800 und die Summe der Ziffern in der Zahl 10! ist 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27
Sie können davon ausgehen, dass die Eingabe eine Ganzzahl über 0 ist. Die Ausgabe kann von einem beliebigen Typ sein, die Antwort sollte jedoch in der Standardbasis der Codierungssprache erfolgen.
Testfälle:
10 27
19 45
469 4140
985 10053
Hinweis: Einige Sprachen unterstützen keine großen Zahlen über 32-Bit-Ganzzahlen. Für diese Sprachen wird nicht erwartet, dass Sie große Fakultäten berechnen.
OEIS Link hier dank Martin Ender
Das ist Code-Golf , also gewinnt der kürzeste Code in Zeichen!
code-golf
math
arithmetic
factorial
George
quelle
quelle
n>21
Antworten:
05AB1E , 3 Bytes
Probieren Sie es online!
quelle
Gelee , 3 Bytes
Probieren Sie es online!
Tut was Sie erwarten:
quelle
Mathematica, 21 Bytes
quelle
[#!]
nicht@#!
? (Mathematica noob)@
höhere Priorität als!
.C ++ 11, 58 Bytes
Als unbenanntes Lambda, das seine Eingabe ändert:
Einer der seltenen Fälle, in denen mein C ++ - Code kürzer als der C-Code ist .
Wenn Sie größere Fälle unterstützen möchten, wechseln Sie zu C ++ 14 und verwenden Sie:
und versorge das aufrufende Argument mit einem
ull
Suffix.Verwendung:
quelle
Ruby,
63615338 BytesNeuer Ansatz dank Handarbeit:
Alt:
quelle
eval
Art und Weise:->n{eval"#{(1..n).reduce:*}".chars*?+}
.Pyth,
76 BytesVielen Dank an @Kade, dass du mir ein Byte gespart hast
sj.!QT
Probieren Sie es online!
Ich benutze Pyth zum ersten Mal, daher bin ich mir sicher, dass meine Antwort ziemlich gut sein könnte.
Erläuterung:
quelle
10
ist einer Variablen zugeordnetT
, so dass Sie dies machen könnensj.!QT
:)ssM`.!
erledigt die Arbeit auch in 6 Bytes.Haskell,
41-40BytesAnwendungsbeispiel:
f 985
->10053
.Machen Sie eine Liste von
1
bisx
, berechnen Sie das Produkt der Listenelemente, wandeln Sie es in eine Zeichenfolgendarstellung um, wandeln Sie jedes Zeichen in eine Zahl um und addieren Sie sie.Bearbeiten: @Angs hat ein Byte gespeichert. Vielen Dank!
quelle
f x=sum$read.pure<$>(show$product[1..x])
speichert ein BytePython, 54 Bytes
repl.it
quelle
R,
5853 BytesBearbeiten: Ein Byte dank @Jonathan Carroll und ein paar dank @Micky T gespeichert
Leider funktioniert dies mit 32-Bit-Ganzzahlen nur für
n < 22
. Übernimmt die Eingabe von stdin und die Ausgabe von stdout.Wenn man eine höhere Präzision möchte, müsste man eine externe Bibliothek verwenden, wie zum Beispiel
Rmpfr
:quelle
c(x,"")
vspaste(x)
: gefundensum(as.integer(el(strsplit(c(factorial(scan()),""),""))))
. Erzwingt die Umwandlung des Fakultätsergebnisses in ein Zeichen undstrsplit
gibt es als zweite Liste zurück. Funktioniert alsoel
weiterhin und extrahiert die ersten Listenelemente.prod(1:scan())
?as.double
ausreichen solltestrtoi
funktioniert als kürzerer ersatzas.double
, denke ich.Pip , 8 Bytes
Probieren Sie es online!
Erläuterung
quelle
CJam , 8 Bytes
Probieren Sie es online!
Erläuterung
quelle
Brachylog , 5 Bytes
Probieren Sie es online!
Erläuterung
Grundsätzlich gilt der beschriebene Algorithmus:
quelle
Java 7, 148 Bytes
quelle
Ruby,
63 60 5351 BytesVielen Dank an Martin für die Golfhilfe.
quelle
Aufdringlich , 4 Bytes
Geben Sie Eingabe auf der Kommandozeile:
$ pushy facsum.pshy 5
. Hier ist die Aufteilung:quelle
Oktave, 30 Bytes
Berechnet die Fakultät aus dem Produkt der Liste
[1 2 ... n]
. Wandelt es in einen String um und subtrahiert48
von allen Elementen (ASCII-Code für0
). Endlich ist es soweit :)quelle
bash (seq, bc, fold, jq),
3433 BytesSicherlich nicht die eleganteste, aber für die Herausforderung
quelle
fold -1
Speichert ein Byte.C 58 Bytes
Das ist nicht perfekt. Funktioniert nur, da a beim Start -1 sein muss. Die Idee ist, zwei rekursive Funktionen in einer Funktion zu verwenden. Es war nicht so einfach, wie ich zuerst dachte.
Verwendung und verständliches Format:
Bearbeiten: Ich habe eine Metode gefunden, die diese Funktion mehrmals verwendet, aber dann ist die Länge 62 Bytes.
quelle
Perl 6 , 21 Bytes
Erweitert:
quelle
Cubix,
3332 BytesNetzform:
Probieren Sie es online!
Anmerkungen
Infinity
Zahl ergibt (technisch gesehen eine nicht beschreibbare, nicht aufzählbare und nicht konfigurierbare Eigenschaft des Fensterobjekts).Erläuterung
Dieses Programm besteht aus zwei Schleifen. Der erste berechnet die Fakultät der Eingabe, der andere teilt das Ergebnis in seine Ziffern auf und addiert diese. Dann wird die Summe gedruckt und das Programm beendet.
Start
Zuerst müssen wir den Stapel vorbereiten. Für diesen Teil verwenden wir die ersten drei Anweisungen. Die IP beginnt in der vierten Zeile und zeigt nach Osten. Der Stapel ist leer.
Wir behalten die Summe ganz unten im Stapel, also müssen wir
0
als Summe beginnen, indem wir diese auf der Unterseite des Stapels speichern. Dann müssen wir a drücken1
, da die Eingabe zunächst mit der Zahl davor multipliziert wird. Wenn dies Null wäre, würde die Fakultät immer auch Null ergeben. Zuletzt lesen wir die Eingabe als Ganzzahl.Jetzt ist der Stapel
[0, 1, input]
und die IP ist in der vierten Zeile, der vierten Spalte, und zeigt nach Osten.Fakultätsschleife
Dies ist eine einfache Schleife , dass multipliziert die obere beiden Elemente des Stapels (das Ergebnisses der vorherigen Schleife und der Eingangs - n, und dann dekrementiert den Eingang Es bricht , wenn der Eingang erreicht 0. Der.
$
Befehl die bewirkt , dass die IP -überspringenu
- turn. Die Schleife ist der folgende Teil des Cubes: Die IP beginnt in der vierten Zeile, der vierten Spalte.Aufgrund des
^
Charakters bewegt sich die IP sofort nach Norden. Dannu
dreht der die IP um und verschiebt sie nach rechts. Unten befindet sich ein weiterer Pfeil:<
Richtet die IP zurück in die^
. Der Stapel beginnt wie folgt[previousresult, input-n]
: Won
ist die Anzahl der Iterationen? Die folgenden Zeichen werden in der Schleife ausgeführt:Dann wird die Oberseite des Stapels (verringerte Eingabe)
0
durch die!
Anweisung überprüft , und wenn dies0
deru
Fall ist , wird das Zeichen übersprungen.Summiere die Ziffern
Die IP-Adresse wird um den Würfel gewickelt und endet beim letzten Zeichen in der vierten Zeile, das anfänglich nach Westen zeigt. Die folgende Schleife besteht aus so ziemlich allen verbleibenden Zeichen:
Die Schleife löscht zuerst das oberste Element aus dem Stapel (entweder
10
oder0
) und prüft dann, was vom Ergebnis der Fakultät übrig bleibt. Wenn dies auf verringert wurde,0
wird der Boden des Stapels (die Summe) gedruckt und das Programm angehalten. Andernfalls werden die folgenden Anweisungen ausgeführt (Stack startet als[oldsum, ..., factorial]
):Und die Schleife beginnt erneut, bis
factorial/10
0 ist.quelle
C 47 Bytes
Verwendung:
quelle
Python, 57 Bytes
Probieren Sie es online aus
quelle
L
wenn die Fakultät groß genug ist, um eine lange zu werden.Batch, 112 Bytes
Funktioniert praktisch
set/a
mit dem aktuellen Wert einer Variablen, funktioniert also normalerweise innerhalb einer Schleife. Funktioniert aufgrund der Beschränkungen des Batch-Integer-Typs nur bis zu 12, daher könnte ich theoretisch ein Byte sparen, indem ich annehmef<1e9
:Aber so liegt der Wahnsinn ... Ich könnte die Liste in diesem Fall genauso gut hart codieren (97 Bytes):
quelle
JavaScript (ES6), 50 Byte
Funktioniert nur
n=22
aufgrund von Einschränkungen der Gleitkommagenauigkeit.quelle
Befunge 93 ,
5654 Bytes2 Bytes gespart, um get anstelle von Anführungszeichen zu verwenden. Auf diese Weise kann ich die obersten 2 Zeilen über 1 verschieben und unnötigen Leerraum reduzieren.
Probieren Sie es online!
Erläuterung:
quelle
Javascript ES6 -
6154 BytesBEARBEITEN: Danke an Hedi und ETHproductions für das Abschneiden von 7 Bytes. Ich muss mich an diesen Trick erinnern.
quelle
n=>{a=_=>!_||_*a(~-_);t=0;for(j of''+a(n))t-=-j;return t}
n=>eval(`for(j of''+(a=_=>!_||_*a(~-_))(n,t=0))t-=-j`)
AHK , 60 Bytes
AutoHotkey hat keine eingebaute Fakultätsfunktion und die Schleifenfunktionen haben lange Namen für ihre eingebauten Variablen. Die erste Schleife ist die Fakultät und die zweite addiert die Ziffern.
quelle
J,
1211 BytesDank cole 1 Byte gespart!
Dies wendet einfach sum (
1#.
) auf die Ziffern (unter Verwendung der Umkehrunginv
der Basisumwandlung#.
mit einer Basis von10
) der Fakultät an (!
) des Arguments an.Testfälle
Hinweis: Die letzten beiden Testfälle sind Bigints, die durch ein Trailing gekennzeichnet sind
x
.quelle
"."0":
, um Ziffern zu erhalten1#.,.&.":@!
Dies erfordert eine erweiterte Genauigkeit auch für kleinere Fälle (unsicher, warum). Auch 11 Bytes1#.10#.inv!
.Brachylog (v2), 3 Bytes
Probieren Sie es online!
Gleicher "Algorithmus" wie die v1-Antwort von @Fatalize, nur mit besserer Codierung.
quelle
C
6360 Bytes-3 Byte für
do...while
Schleife.Ungolfed und Nutzung:
quelle
int
Standard?int
gibt, wird angenommen.