Die Aufgabe
Bei einer natürlichen Zahl als Eingabe müssen Sie einen Wahrheits- oder Falschwert ausgeben, der davon abhängt, ob die Eingabe eine Fakultät einer natürlichen Zahl ist. Sie können davon ausgehen, dass die eingegebene Nummer immer in dem von Ihrer Sprache unterstützten Zahlenbereich liegt, aber Sie dürfen native Nummerntypen nicht missbrauchen, um das Problem zu trivialisieren .
Es gelten Standard-Regelungslücken .
Eingang
Sie erhalten eine natürliche Nummer (vom Typ Integer
oder ähnlich).
Sie können Eingaben auf beliebige Weise vornehmen, außer wenn Sie davon ausgehen, dass sie in einer vordefinierten Variablen vorliegen. Das Lesen von Dateien, Konsolen, Dialogfeldern ( prompt
), Eingabefeldern usw. ist zulässig. Die Eingabe als Funktionsargument ist ebenfalls erlaubt!
Ausgabe
Ihr Programm sollte einen Wahrheits- oder Falschwert ausgeben, der davon abhängt, ob die eingegebene Zahl eine Fakultät einer natürlichen Zahl ist.
Stellen Sie sicher, dass Ihre Wahrheits / Falsch-Werte für alle Eingaben konsistent sind. Wenn Sie also ein Paar von 1 und 0 verwenden, um Wahrheits und Falsch-Werte anzuzeigen, muss Ihr Programm 1 für alle Eingaben ausgeben, die Wahrheits-Werte haben sollen, und 0 für Alle Eingaben, die falsche Werte haben sollen.
Sie können die Ausgabe auf jede beliebige Weise ausführen, außer in eine Variable schreiben. Das Schreiben in eine Datei, eine Konsole, einen Bildschirm usw. ist zulässig. Funktion return
ist auch erlaubt!
Ihr Programm darf bei keiner Eingabe Fehler erzeugen!
Testfälle
Input Output
1 Truthy (0! or 1!)
2 Truthy (2!)
3 Falsey
4 Falsey
5 Falsey
6 Truthy (3!)
7 Falsey
8 Falsey
24 Truthy (4!)
120 Truthy (5!)
Gewinnkriterium
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes!
1
?Antworten:
Brachylog , 1 Byte
Probieren Sie es online!
Erläuterung
ḟ
ist eine integrierte Funktion, die die folgende Beziehung behauptet: Ihre Ausgabe ist die Fakultät ihrer Eingabe. Wir geben ihm einfach eine festgelegte Ausgabe und sehen, ob sie mit einer variablen Eingabe erfolgreich ist oder nicht.quelle
true.
es sich um eine Aussage handelt undtrue
nicht)Gelee , 3 Bytes
Probieren Sie es online!
1 für ja, 0 für nein.
Wie es funktioniert
quelle
Gelee , 4 Bytes
Nicht die kürzeste Antwort von Jelly, aber ziemlich effizient.
Probieren Sie es online!
Wie es funktioniert
quelle
ECMAScript Regex,
733+690+158119118(117🐌)BytesMein Interesse an Regex hat sich nach über 4½ Jahren Inaktivität mit neuer Kraft geweckt. Aus diesem Grund suchte ich nach natürlicheren Zahlensätzen und -funktionen, die mit unären ECMAScript-Regexen übereinstimmen, nahm die Verbesserung meiner Regex-Engine wieder auf und begann, auch PCRE auf den neuesten Stand zu bringen.
Ich bin fasziniert von der Fremdheit, mathematische Funktionen in ECMAScript Regex zu konstruieren. Probleme müssen aus einer ganz anderen Perspektive angegangen werden, und bis zu einer entscheidenden Einsicht ist nicht bekannt, ob sie überhaupt lösbar sind. Sie zwingt dazu, ein viel breiteres Netz zu werfen, um herauszufinden, welche mathematischen Eigenschaften verwendet werden können, um ein bestimmtes Problem lösbar zu machen.
Die Übereinstimmung von Fakultätszahlen war ein Problem, das ich 2014 gar nicht in Betracht gezogen habe - oder wenn ich es nur für einen Moment als zu unwahrscheinlich abgetan habe, dass es möglich ist. Aber letzten Monat wurde mir klar, dass es möglich ist.
Wie bei meinen anderen ECMA-regulären Texten gebe ich eine Warnung: Ich empfehle dringend, zu lernen, wie man unäre mathematische Probleme in ECMAScript regulären Texten löst. Es war eine faszinierende Reise für mich, und ich möchte sie keinem verderben, der sie möglicherweise selbst ausprobieren möchte, insbesondere denen, die sich für Zahlentheorie interessieren. In diesem früheren Beitrag finden Sie eine Liste der nacheinander mit Spoiler-Tags gekennzeichneten empfohlenen Probleme, die nacheinander gelöst werden müssen.
So lesen keine weiteren , wenn Sie nicht einige erweiterte einstellige regex Magie für Sie verwöhnen wollen . Wenn Sie versuchen möchten, diese Magie selbst herauszufinden, empfehle ich dringend, zunächst einige Probleme in ECMAScript regex zu lösen, wie in dem oben verlinkten Beitrag beschrieben.
Das war meine Idee:
Nachdem ich eine Weile darüber nachgedacht und in der Zwischenzeit einige andere Regexe konstruiert hatte, begann ich, die faktorielle Regex zu schreiben. Es hat einige Stunden gedauert, hat aber gut funktioniert. Als zusätzlichen Bonus könnte der Algorithmus die inverse Fakultät als Übereinstimmung zurückgeben. Es gab nicht einmal einen Ausweg; Aufgrund der Art und Weise, wie es in ECMA implementiert werden muss, ist es erforderlich, vor allen anderen Maßnahmen eine Abschätzung der Umkehrung der Fakultät vorzunehmen.
Der Nachteil war, dass dieser Algorithmus für einen sehr langen regulären Ausdruck sorgte ... aber ich war erfreut, dass dafür eine Technik erforderlich war, die in meinem regulären Ausdruck mit 651-Byte-Multiplikation (der letztendlich veraltet war, weil eine andere Methode für einen 50-Byte-Ausdruck sorgte) verwendet wurde Byte Regex). Ich hatte gehofft, dass ein Problem auftaucht, das diesen Trick erfordert: Man operiert mit zwei Zahlen, die beide Potenzen derselben Basis sind, in einer Schleife, indem man sie eindeutig addiert und bei jeder Iteration trennt.
Aufgrund der Schwierigkeit und Länge dieses Algorithmus verwendete ich molekulare Lookaheads (der Form
(?*...)
), um ihn zu implementieren. Dies ist eine Funktion, die nicht in ECMAScript oder einer anderen regulären Regex-Engine enthalten ist, sondern die ich in meiner Engine implementiert habe . Ohne Aufnahmen in einem molekularen Lookahead ist es funktional äquivalent zu einem atomaren Lookahead, aber mit Aufnahmen kann es sehr leistungsfähig sein. Die Engine kehrt in den Lookahead zurück und kann verwendet werden, um einen Wert zu erraten, der alle Möglichkeiten (für spätere Tests) durchläuft, ohne Zeichen der Eingabe zu verbrauchen. Ihre Verwendung kann zu einer viel saubereren Implementierung führen. (Lookbehind mit variabler Länge hat mindestens die gleiche Leistung wie molekularer Lookahead, aber letzterer führt tendenziell zu einfacheren und eleganteren Implementierungen.)Die Längen von 733 und 690 Byte stellen also keine ECMAScript-kompatiblen Inkarnationen der Lösung dar - daher das "+" nach ihnen; Es ist sicherlich möglich, diesen Algorithmus auf reines ECMAScript zu portieren (was seine Länge beträchtlich erhöhen würde), aber ich bin nicht dazu gekommen ... weil ich an einen viel einfacheren und kompakteren Algorithmus gedacht habe! Eine, die ohne molekulare Lookaheads problemlos implementiert werden kann. Es ist auch deutlich schneller.
Dieses neue muss wie das vorherige die umgekehrte Fakultät erraten, alle Möglichkeiten durchgehen und sie auf ein Match testen. Sie dividiert N durch 2, um Platz für die zu erledigende Arbeit zu schaffen, und bildet dann eine Schleife, in der die Eingabe wiederholt durch einen Teiler geteilt wird, der bei 3 beginnt und jedes Mal inkrementiert wird. (Daher können 1! Und 2! Vom Hauptalgorithmus nicht abgeglichen werden und müssen separat behandelt werden.) Der Divisor wird verfolgt, indem er zum laufenden Quotienten hinzugefügt wird. Diese beiden Zahlen können eindeutig getrennt werden, da unter der Annahme von M! == N, der laufende Quotient bleibt durch M teilbar, bis er gleich M ist.
Ich finde es toll , dass das Problem auf noch weniger Komplexität reduziert werden konnte als mein golfoptimierter Fibonacci-Regex , aber ich seufze mit Enttäuschung, dass meine Multiplexing-Potenzen-der-gleichen-Basis-Technik auf ein anderes Problem warten muss Das erfordert es tatsächlich, weil dies nicht der Fall ist. Es ist die Geschichte meines 651-Byte-Multiplikationsalgorithmus, der durch einen 50-Byte-Algorithmus ersetzt wird, und zwar immer wieder!
Bearbeiten: Ich konnte 1 Byte (119 → 118) mit einem von Grimy gefundenen Trick löschen , der die Division für den Fall verkürzen kann, dass der Quotient garantiert größer oder gleich dem Divisor ist.
Hier ist der reguläre Ausdruck:
True / False-Version (118 Bytes):
^((x*)x*)(?=\1$)(?=(xxx\2)+$)((?=\2\3*(x(?!\3)xx(x*)))\6(?=\5+$)(?=((x*)(?=\5(\8*$))x)\7*$)x\9(?=x\6\3+$))*\2\3$|^xx?$
Probieren Sie es online!
Rückgabe inverser Fakultäten oder Nichtübereinstimmung (124 Bytes):
^(?=((x*)x*)(?=\1$)(?=(xxx\2)+$)((?=\2\3*(x(?!\3)xx(x*)))\6(?=\5+$)(?=((x*)(?=\5(\8*$))x)\7*$)x\9(?=x\6\3+$))*\2\3$)\3|^xx?$
Probieren Sie es online!
Rückgabe inverser Fakultäten oder Nichtübereinstimmung
\K
in ECMAScript + (120 Byte):^((x*)x*)(?=\1$)(?=(xxx\2)+$)((?=\2\3*(x(?!\3)xx(x*)))\6(?=\5+$)(?=((x*)(?=\5(\8*$))x)\7*$)x\9(?=x\6\3+$))*\2\K\3$|^xx?$
Und die freie Version mit Kommentaren:
Die vollständige Geschichte meiner Golfoptimierungen dieser Regexes ist auf Github:
Regex für die Anpassung von Fakultätszahlen - Multiplizitätsvergleichsmethode mit molekularer lookahead.txt
Regex für die Anpassung von Fakultätszahlen.txt (die oben gezeigte)
((x*)x*)
((x*)+)
((x+)+)
\2
Die .NET-Regex-Engine emuliert dieses Verhalten in ihrem ECMAScript-Modus nicht, und daher funktioniert die 117-Byte-Regex:
Probieren Sie es online! (Exponential-Slow-Down-Version, mit .NET-Regex-Engine + ECMAScript-Emulation)
quelle
JavaScript (ES6),
302928 BytesErwartet eine positive ganze Zahl. Returns
-1
für falsy und-2
für truthy.Hinweis : Diese Funktion unterstützt ziemlich große Eingaben (Sie sollten dies als "ziemlich groß für JS" lesen). Es sollte bis zu 2 53 - 1 sicher funktionieren . Ab N = 121.645.100.408.831.992 wird es sicher scheitern , wobei diese Eingabe auf 19 gerundet wird ! = 121.645.100.408.832.000 aufgrund seiner IEEE-754-Codierung. Es kann andere falsch positive Ergebnisse sein , bevor 121.645.100.408.831.991 wegen Rundungsfehler, aber ich weiß es nicht sicher.
quelle
~
am Ende.Python 3 ,
3938 BytesEine rekursive Funktion eine Ganzzahl machen,
n
einen Booleschen Wert zurück , die das Ergebnis inversley (truthy:False
, Falsey:True
)Probieren Sie es online!
Dividiert wiederholt
n
durchi
mit einem Anfangswert von1
, bis der Rest kleiner oder gleich ist1
und testet, ob dieser Rest kleiner als oder gleich ist1
. Nur Fakultäten enden mit einem Rest gleich1
und<
sind ein Byte kürzer als==
.quelle
1
für alle Fakultäten zurück, außer1
für die es zurückgibtTrue
.Java 8, 46 Bytes
Dies basiert auf Roman Gräfs Eintrag, von dem ich etwa ein Dutzend Bytes wegschlagen konnte. Ich hätte es dort vorgeschlagen, aber ich habe noch nicht genug Ruf, um einen Kommentar abzugeben! Mein geänderter Testläufercode:
quelle
Netzhaut ,
5038 BytesDank @Neil werden 12 Bytes gespart, indem die Schleife gekürzt und die
;
Probieren Sie es online!
Ausgänge
1
für wahr und0
falsch..+
stimmt mit der gesamten Zahl überein1¶$&$*
Ersetzen durch1
gefolgt von einer neuen Zeile, und konvertieren Sie das Match zu UnaryDas verbleibende Programm dividiert die unäre Zahl in der untersten Zeile durch sukzessive Erhöhung der positiven Ganzzahlen, wobei es in der obersten Zeile bleibt, während dies möglich ist.
+`
Schleife, bis die Zeichenfolge gleich bleibt^(1+)¶(\1)+$
stimmen Sie die oberste Zeile mit vielen1
s und ein Vielfaches davon mit vielen1
s in der untersten Zeile ab und ersetzen Sie sie durch1$1¶$#2$*
Die oberste Zeile enthält viele1
s1
, dh, die durch die oberste Zeile dargestellte Zahl wird um 1 erhöht, gefolgt von der neuen Zeile und der Anzahl der Übereinstimmungen der obersten Zeile in der untersten Zeile (dh Anzahl der Übereinstimmungen der zweiten Erfassungsgruppe) ) viele1
s, das heißt, die untere Zahl durch die obere Zahl teilenSobald dies nicht mehr möglich ist,
¶.$
Geben Sie die Anzahl der Übereinstimmungen dieses regulären Ausdrucks an, d. h. Gibt es einen Einzelgänger?1
in der untersten Zeile ein Einzelfall, der nur auftritt, wenn die Zahl eine Fakultät ist?Wenn kein Absturz / Absturz statt wahrer / falscher Werte zulässig ist, kann ich
36 bis34 Bytes abrufen .Dies geschieht auf die gleiche Weise, kombiniert jedoch
$*
die dritte und vierte Zeile. Die dritte Zeile ab ist ein Teil derselben Schleife,{
ist kurz für+(
die(
Gruppierung der verbleibenden Zeilen in der Schleife. Factorials enden damit, dass das Programm aus der Schleife ausbricht, während Nicht-Factorials für immer in der Schleife stecken bleiben, bis Retina eine OverflowException auslöst, die darauf zurückzuführen ist, dass die letzte Ersetzung fehlschlägt Konvertiert die unterste Zeile von dezimal in unär, sodass sie schnell in die Luft sprengt.quelle
1
wie es$*
am Ende des Austauschs impliziert ist.$*
mit den beiden anderen Zeilen.05AB1E , 4 Bytes
Probieren Sie es online!
Erläuterung
quelle
L
die Eingabe erscheint? Außerdem erhaltenÅ!
Sie eine Liste von Fakultäten, die kleiner oder gleich der Eingabe sind.D
. Guter Fang überÅ!
. Ich vergesse immer die Listenbefehle. Es werden keine Bytes gespeichert, aber es ist sicher effizienter.C ++,
10210092 BytesDurchläuft alle Werte von
0
bisn
und berechnet die Fakultät und prüft dann, ob sie gleich istn
.Danke Christoph! (8 Bytes gespeichert)
quelle
int a(int n){int i=n,j=0;for(;i;)j|=lround(exp(lgamma(i--+1)))==n;return j;}
.lround
undlgamma
sind schon C ++ 11 also könnte das einfach#include<cmath>
. Vielleicht kannst du meine Vorschläge noch weiter verbessern :)Haskell ,
4326 BytesProbieren Sie es online!
quelle
f n=elem n$scanl1(*)[1..n]
ist lächerlich ineffizient, aber kürzer.40430
ohne merkliche Verzögerung.divMod
indem ich[1..]
nacheinander einen Nullrest mit einem Quotienten von 1 (Fakultät) oder einem Rest ungleich Null (Fakultät) erreiche, aber es scheint nicht der richtige Ansatz zu sein. Ich habe diese nette 46-Zeichen - Lösung finden, aber:f|let x%n=mod n x==0&&(x+1)%div n x||n==1=(1%)
.Haskell , 38 Bytes
Probieren Sie es online! Beispiel Nutzung:
(2#) 24
. RückgabeTrue
oderFalse
.Dies ist die kürzeste, die ich bekommen konnte, während ich noch sehr effizient bin. Selbst für Zahlen so groß wie
Das Ergebnis wird sofort angezeigt. Die Lösung funktioniert, indem die Eingabe durch dividiert
n
wird,m = 2,3,4,5,...
bis entweder das Ergebnis eins oder eins istn
nicht mehr durch teilbar istm
.Hier finden Sie die kürzere, aber unglaublich ineffiziente 26-Byte-Lösung, die
n!
Eingaben berechnet , die keine Fakultäten sind .quelle
MATL , 5 Bytes
Probieren Sie es online!
Erläuterung
quelle
Fourier ,
4039 BytesProbieren Sie es auf FourIDE!
Grundsätzlich multipliziert man die Zahl N mit einem ansteigenden Betrag, bis N entweder gleich (Ausgang 1) oder größer (Ausgang 0) der Eingabe ist.
Erklärung Pseudocode:
quelle
Japt ,
86 BytesProbieren Sie es online!
Dies gibt 0 für falsch und 1 für wahr aus.
Erläuterung
quelle
aU ¦J
umx¥U
(Karte jeweilsX
zuX==U
und Summe), obwohl es wird nicht funktionieren auf TIO.2
weilo
nur Sie geben[0,1]
. Hier ist ein Fix mit einer 1-Byte-Einsparung.Perl 5, 31 Bytes
Die Eingabe erfolgt über STDIN, die Ausgabe erfolgt über den Exit-Code (1 für Fakultät, 0 für Fakultät).
Die Eingabe wird durch aufeinanderfolgende Ganzzahlen geteilt, bis sie entweder 1 oder einen Bruch kleiner als 1 ist, der im Ergebnis abgeschnitten wird.
quelle
Perl 6 , 29 Bytes
Probier es aus
Erweitert:
quelle
{$_∈[\*] 1..$_}
. Ein weiterer interessanter Ansatz ist2>*.polymod(1..*).sum
.setlX , 32 bytes
Erzeugt eine aufgerufene Funktion
f
in der Sie Ihre potenzielle Fakultät als Parameter verwenden.Es funktioniert mit einer beliebigen Ganzzahlgröße, ist aber ziemlich ineffizient.
(Übrigens: Dies ist meine erste Teilnahme an einem Programmierpuzzle.)
quelle
C (gcc), 33 Bytes
Beachten Sie, dass einige Autoren "natürliche Zahl" als positive Ganzzahl definieren. Daher ist es mir egal,
f(0)
dass dies eine unendliche Rekursion verursacht.quelle
R ,
2822 BytesProbieren Sie es online!
quelle
C # (.NET Core) , 68 Byte
Probieren Sie es online!
Nicht die kürzeste Lösung, funktioniert aber mit wirklich großen Zahlen. Die TIO-Verknüpfung enthält ein Beispiel mit
10000!
.Hier ist eine kürzere Version,
int
die einen Maximalwert von 2147483647 verwendet .C # (.NET Core) , 45 Byte
Probieren Sie es online!
Dank an @KevinCruijssen für das Golfen von insgesamt 3 Bytes aus beiden Antworten!
quelle
&&
kann golfen werden&
, und das Schleppen;
muss nicht für Lambda-Funktionen gezählt werden. Kann das nichtulong k=2
auchuint k=2
in Ihrer 50-Byte-Antwort stehen?&
vs&&
. Ich dachte, ich hätte einen Stapelüberlauf, aber es scheint trotzdem zu funktionieren.ulong
64 Bits ist , währenduint
ist 32. Es sieht aus wie andere verwenden ,int
so werde ich vielleicht , dass nur für die kurze Version. In Bezug auf das Trailing;
handelt es sich hierbei um vollständige Funktionen, nicht um Lambdas. Ich denke, ich muss sie einbeziehen./
und%
zwischenulong
unduint
, aber nichtulong
undint
. Wussten Sie nicht, dass :)double
Sie irgendwann eine Rundung bemerken - zum Beispiel 24! und 120! Scheitern. WährendSystem.Numerics.BigInteger
hat die höchste Präzision,int
ist die kürzeste Antwort :)&&
Operator . Aber das ist Codegolf;) Schön, dass dir das10000!
Beispiel gefällt !C ++ (clang), 51 Bytes
Rekursion setzt sich beim Golfen durch.
51 Bytes, Null ist wahr:
int f(int n,int i=2){return n<2?!n:n%i|f(n/i,i+1);}
Dies kostet eine Menge Geschwindigkeit für 1 Byte Einsparungen. Ersetzen Sie das
|
mit||
, um es schnell zu machen, da das logische ODER kurzgeschlossen wird.Probieren Sie es online! (51 Byte langsame Version)
Probieren Sie es online! (52 Byte schnelle Version)
Ungolfed langsame Version:
Ungolfed schnelle Version:
Es gibt viele Möglichkeiten, dies neu zu ordnen.
52 Bytes, ungleich Null ist wahr:
int f(int n,int i=2){return n<2?n:n%i?0:f(n/i,i+1);}
Probieren Sie es online!
52 Bytes, Null ist wahr:
int f(int n,int i=2){return!n?1:n%i?n-1:f(n/i,i+1);}
Probieren Sie es online!
Bevor ich auf die Rekursion zurückgegriffen habe, habe ich versucht, einige iterative Versionen zu erstellen, und sie kamen einander sehr nahe.
54 Bytes, ungleich Null ist wahr:
int f(int n){for(int i=2;n>1;)n=n%i?0:n/i++;return n;}
Probieren Sie es online!
54 Bytes, null ist wahr (basierend auf der Java 8-Übermittlung von Roman Gräf ):
int f(int n){int a=1,i=0;for(;a<n;a*=++i);return a-n;}
Probieren Sie es online!
Nun, für den Boden des Fasses, rekursive Versionen ohne
n==0
Behandlung (ich halte diese für ungültig, da 0 eine natürliche Zahl ist und keine Definition, in der es sich nicht um "natürliche Zahlen" handelt, die nur sehr begrenzt verwendet werden können). In den folgenden Versionenf(0)
löst die unendliche Rekursion von entweder einen Segfault aufgrund eines Überlaufs des Stacks aus, oder sie wird mit Compilern, die sie für die Iteration optimieren, endlos wiederholt:48 Bytes, Null ist wahr:
int f(int n,int i=2){return n%i?n-1:f(n/i,i+1);}
Probieren Sie es online!
48 Bytes, null ist wahr (basierend auf Hagen von Eitzens 33-Byte-C-Submission (gcc) ):
int f(int n,int e=0){return n%++e?n-1:f(n/e,e);}
Probieren Sie es online!
quelle
Mathematica, 20 Bytes
andere Version zum Testen großer Zahlen (siehe Kommentare)
testet bis zu 1000!
quelle
Range[#]
mitRange@#
:)!Range@#!~FreeQ~#&
.Cubix , 24 Bytes
Probieren Sie es online aus
Cubified
Wir beginnen damit
1
,I
nput1
auf den Stapel zu schieben . Dies sind unser Index, unser Ziel bzw. unser Akkumulator.Wir machen dann eine Schleife. Bei jeder Iteration subtrahieren wir den Akkumulator von der Eingabe. Wenn das Ergebnis 0 ist, sind wir fertig, also geben wir Push
1
,O
Utput und Exit ein. Wenn es negativ ist, sind wir zu weit gegangen, also pushen wir0
,O
geben auf und beenden. Ansonsten sehen wirquelle
Neim , 8 Bytes
Erläuterung:
Versuch es!
Neim , 3 Bytes (nicht konkurrierend)
Nicht konkurrierende als enthält Token und faktorielle Token wurden hinzugefügt, nachdem die Herausforderung gemacht wurde.
Erläuterung:
Versuch es!
quelle
> <> ,
2422 Bytes-2 Bytes dank @Aaron
Ich versuche eine neue Sprache (seit meine Mathematica-Lizenz abgelaufen ist ...)
Probieren Sie es online oder auf dem Fischspielplatz
Angenommen, die eingegebene Nummer befindet sich bereits auf dem Stapel und gibt 0 oder 1 zurück. Sie multipliziert die ersten n Zahlen, bis die Eingabe nicht mehr kleiner ist, und gibt dann 1 aus, wenn sie der Eingabe entspricht, und 0, wenn sie nicht vorhanden ist. ' t.
quelle
v>\n<^
in\\n/
; siehe hierAPL (Dyalog Unicode) , 5
67BytesEin Byte , indem golfed
×/
zu!
dank Erik die OutgolferProbieren Sie es online!
Erläuterung
quelle
N∊×\⍳N←⎕
Wie nimmt dies ein Argument an? Ich sehen
nirgendwo Ist das eine Dyalog-spezifische Sache?(⊢∊(×/⍳)) right_argument
wie du im TIO Link siehst. Und das⊢
bezieht sich auf das richtige Argument.⊢∊×\ä⍳
. Die "richtige" (aber längere) Lösung wäre0=1|!⍣¯1
; "Ist die Inverse Fakultät eine ganze Zahl?"JavaScript (ES6), 71 Byte
Dies nimmt die Eingabe als Funktionsargument und
alert
s die Ausgabe auf. Ausgänge0
für Falsey und1
für Truthy.Erläuterung
Das Programm besteht aus zwei Funktionen
f
undg
.f
ist eine rekursive Fakultätsberechnungsfunktion undg
ist die Hauptfunktion des Programms.g
geht davon aus , ein einziges Argument zu habenn
. Es definiert ein Standardargumentr
mit dem Wert 0 und ein anderes Standardargument mit dem Wert0
. Es iteriert dann über alle Ganzzahlen von 0 bisn
und prüft in jeder Iteration, ob dief
überi
(den aktuellen Index) angewendete Funktion gleich istn
, dh obn
eine Fakultät von isti
. In diesem Fall wirdr
der Wert auf 1 gesetzt. Am Ende der Funktionr
wirdalert
ed.Testschnipsel
( Hinweis: Das Snippet gibt aus, dass
console.log()
niemand zu viele dieser lästigenalert()
s mag . )quelle
QBIC ,
21 bis19 BytesErläuterung
Vorher
Erläuterung:
quelle
Java 8, 59 Bytes
Testcode
quelle