Herausforderung:
Wenn Sie eine Zahl haben, nehmen Sie die größte Primzahl strikt kleiner als diese, subtrahieren Sie sie von dieser Zahl, wiederholen Sie dies zu dieser neuen Zahl mit der größten Primzahl kleiner als diese und fahren Sie fort, bis sie kleiner als 3 ist. Wenn sie 1 erreicht, erhalten Sie Das Programm sollte einen Wahrheitswert ausgeben, ansonsten sollte das Programm einen Falsey-Wert ausgeben.
Beispiele:
All dies sollte einen wahrheitsgemäßen Wert haben:
3
4
6
8
10
11
12
14
16
17
18
20
22
23
24
26
27
29
30
32
34
35
37
38
40
41
42
44
46
47
48
50
All dies sollte falsche Werte ergeben:
5
7
9
13
15
19
21
25
28
31
33
36
39
43
45
49
Regeln:
- Sie können entweder ein Programm oder eine Funktion schreiben.
- Sie können davon ausgehen, dass die Eingabe größer als 2 ist.
- Es gelten Standardlücken
- Das ist Code-Golf, also gewinnt die kürzeste Antwort!
code-golf
number
primes
decision-problem
Loovjo
quelle
quelle
9/10
as fragt,2^(-1) 3^2 5^(-1)
denkt in Bezug auf das letztere)Antworten:
Gelee ,
98 BytesProbieren Sie es online! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
Retina , 31 Bytes
Druck
0
(falsy) oder1
(truthy).Probieren Sie es online! (Die erste Zeile aktiviert eine durch Zeilenvorschub getrennte Testsuite.)
Erläuterung
Konvertieren Sie die Eingabe in Unary, indem Sie die Eingabe
N
inN
Kopien von konvertieren1
.Entfernen Sie wiederholt die größte Primzahl, die kleiner als die Eingabe ist. Dies basiert auf dem Standard-Primalitätstest mit Regex .
Prüfen Sie, ob das Ergebnis eine Single ist
1
.quelle
Pyth,
181514 BytesVielen Dank an @Maltysen für -1 Byte
Ein Programm, das Eingaben in STDIN aufnimmt und druckt
True
oderFalse
entsprechend.Probieren Sie es online aus
Wie es funktioniert
Alte Version mit Reduzierung, 18 Bytes
Probieren Sie es online aus
Wie es funktioniert
quelle
St
istU
15 ZeichenJavaScript (ES6),
64 -63 Byte1 Byte dank @Neil gespeichert
Ich habe das in 2 Minuten geschrieben ... und es hat beim ersten Mal perfekt funktioniert.Erster Benutzer, der den unvermeidlichen Fehler findet, gewinnt ....
Versuch es
Code-Snippet anzeigen
Wie es funktioniert
Zuerst definieren wir g (x) als die Funktion, die die erste Primzahl p <= x findet . Dies geschieht nach folgendem Verfahren:
Die Lösung für diese Herausforderung, f (x) , ist jetzt ziemlich einfach:
quelle
too much recursion
in Firefox 48 zur Browserkonsole geworfen , sodass die Rekursion vermutlich das Rekursionslimit von FF überschreitet.x%2
sollte Ihnen ein Byte sparenx==1
.Pyke,
1511 BytesProbieren Sie es hier aus!
Gibt
1
true zurück und löst eine Ausnahme aus, wenn falsequelle
Julia, 32 Bytes
Während es nicht die kürzeste Lösung unter den Sprachen sein wird, könnte dies die kürzeste von den für Menschen lesbaren sein ...
Oder, um es etwas klarer auszudrücken
Genannt mit zum Beispiel
!37
.quelle
Mathematica, 32 Bytes
Dies ist eine unbenannte Funktion, die eine Ganzzahl annimmt und einen Booleschen Wert zurückgibt.
Erläuterung
Es gibt hier eine Menge Syntax und lustige Lesereihenfolge, also ...
quelle
#+0~Min~NextPrime@-#&~FixedPoint~#==1&
(36 Bytes). Gute Verwendung von//.
!<2
am Ende verwenden.Python3,
102 92 90 8988 BytesGolfvorschläge willkommen! Ich sehe, dass
gmpy
eine Funktion enthalten istnext_prime
, aber ich kann sie noch nicht testen :(-2 Bytes, danke an @JonathanAllan !
-1 Byte, danke an @Aaron !
Testfälle
Die Ausgabe umfasst 13 Wahrheitswerte und 13 Falsey-Werte.
s
enthält die wahrheitsgemäßen Fälle undh
die falschen.quelle
if all(x%y for...
Arbeitenn<3 else
->n<3else
um die gleiche Länge wie ich zu bekommen;)Python mit Sympy, 60 Bytes
Meine frühere Methode war 83 Bytes ohne Sympy mit Rekursion, aber ich habe Wahrhaftigkeit / Falschheit als unterscheidbar und konsistent verstanden, aber mir wurde mitgeteilt, dass dies eine falsche Interpretation ist. Ich kann es anscheinend wegen des Schwanzes nicht retten, aber ich lasse es hier, falls jemand weiß, wie es geht:
quelle
2
ist kein falscher Wert.Vitsy,
2826 BytesDies kann definitiv verkürzt werden.
Um die Umstellung zu erleichtern, müssen Sie
Probieren Sie es online!
quelle
MATL , 13 Bytes
Probieren Sie es online! Oder überprüfen Sie alle Testfälle auf einmal .
Erläuterung
quelle
CJam ,
2116 BytesVielen Dank an Dennis für das Speichern von 4 Bytes.
Probieren Sie es online!
Erläuterung
quelle
ri_{_1|{mp},W=-}*
sollte arbeiten.1|
ist echt schlau. :) (Und ich vergesse immer, dass{...},
ein impliziter Bereich ...)Perl, 42 Bytes
Beinhaltet +1 für
-p
Mit Eingabe auf STDIN ausführen
reach1.pl
:Verwendet den klassischen regulären Ausdruck "Primality"
quelle
.NET Regex, 38 Byte
Nur um zu zeigen, dass es in einem einzigen regulären Ausdruck überprüft werden kann.
Die Eingabe wird als unär angenommen.
Erläuterung
Es implementiert einfach die Anforderung an das Wort, entfernt wiederholt die größte Primzahl und prüft, ob der Rest 1 ist.
(?>(?<=(.*))..+(?<!^\1\2+(.+.)|$))+
: Eine Gruppe ohne Backtracking stellt sicher, dass die größte gefundene Primzahl nicht überschrieben wird, und+
wiederholt einfach den Vorgang des Abgleichs der größten Primzahl.(?<=(.*))..+(?<!^\1\2+(.+.)|$)
: Finde die größte Primzahl, die kleiner ist als die verbleibende Zahl(?<=(.*))
: Notieren Sie, wie viel wir abgezogen haben, um einen "Anker" -Punkt für die Behauptung zu erstellen...+
: Suche nach der größten Zahl ...(?<!^\1\2+(.+.)|$)
: ... das ist eine Primzahl und kleiner als die verbleibende Zahl.(?<!^\1\2+(.+.))
: Die übliche Prime-Test-Routine, bei der im^\1
Vordergrund angeheftet wird, um sicherzustellen, dass die übereinstimmende Menge überprüft wird..+
(?!<$)
: Geben Sie weniger als die verbleibende Anzahl anquelle
(?<=(.*))
Teil ist ziemlich ungeschickt. Ich bin mir nicht sicher, ob es einen besseren Weg gibt. Außerdem bin ich gespannt, ob es in PCRE eine Lösung gibt.Perl 6 ,
54 53 5251 BytesErläuterung:
Beispiel:
quelle
Unregelmäßig , 63 Bytes
Ich habe diese Sprache vor zwei Tagen erstellt, und die Grundvoraussetzung ist, dass es keine eingebauten Schleifen gibt. Die einzigen Merkmale sind Grundrechenarten und Entscheidungsfindung, und die Programmbewertung basiert auf regulären Ausdrücken.
Erläuterung
Dieser Teil wandelt die Eingabe in eine unäre um. Sie subtrahiert wiederholt 1 von der Eingabe, bis sie gleich 0 ist, und zwar
1_
jedes Mal vor der Eingabe . Dann werden alle_
s entfernt. Wenn ich einbreak
in meinem Code nicht vergessen hätte, könnte es so geschrieben werden:Der nächste Teil entfernt wiederholt die größte Primzahl von der Eingabe, bis sie gleich
1
oder11
ist11
und durch ersetzt wird0
.Ich habe den regulären Ausdruck von verwendet Martin Enders Antwort verwendet .
quelle
Haskell, 79 Bytes
Nicht wirklich kurz, aber sinnvoll :)
quelle
PowerShell v2 +, 81 Byte
Übernimmt die Eingabe
$n
. Tritt in einewhile
Schleife ein, solange sie$n
noch3
oder länger ist . Bei jeder Iteration wird eine Zahl von subtrahiert$n
. Die Zahl ist das Ergebnis des Regex-Primalitätstests , der($n-1)..2
über den OperatorWhere-Object
(?
) auf einen Bereich angewendet wurde , und dann das erste[0]
der Ergebnisse (da der Bereich abnimmt, wird der größte ausgewählt). Nach Abschluss der Schleife$n
wird entweder1
oder2
per Definition dekrementiert$n
(in entweder0
oder umgewandelt1
) und das Boolesche-Nicht!
davon genommen. Das bleibt in der Pipeline und die Ausgabe ist implizit.Beispiele
quelle
Matlab, 51 Bytes
Dies ist der JS6-Lösung von ETHProductions SEHR ähnlich, erfordert jedoch , dass sich die Variable im Arbeitsbereich befindet.
quelle
Python 2.7:
8887 BytesDanke @TuukkaX für -1 weiteres Byte!
quelle
n<2
anstelle von sagenn==1
.Floroid ,
45 3029 Bytesquelle
Clojure, 125 Bytes
Huch, das ist ein langer Code. Die wortreichste Sprache schlägt wieder zu!
Ungolfed:
quelle