Wyzwanie:
Biorąc pod uwagę liczbę, weź największą liczbę pierwszą dokładnie od niej, odejmij ją od tej liczby, zrób to ponownie z tym nowym numerem z największą liczbą pierwszą mniejszą i kontynuuj robienie tego, aż będzie mniejsza niż 3. Jeśli osiągnie 1, twoja program powinien wypisać prawdziwą wartość, w przeciwnym razie program powinien wypisać wartość falsey.
Przykłady:
Wszystko to powinno dać prawdziwą wartość:
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
Wszystkie powinny dać wartości falsey:
5
7
9
13
15
19
21
25
28
31
33
36
39
43
45
49
Zasady:
- Możesz napisać program lub funkcję.
- Możesz założyć, że dane wejściowe są większe niż 2.
- Obowiązują standardowe luki
- To jest golf golfowy, więc wygrywa najkrótsza odpowiedź!
code-golf
number
primes
decision-problem
Loovjo
źródło
źródło
9/10
co2^(-1) 3^2 5^(-1)
myśli w kategoriach tego ostatniego)Odpowiedzi:
Galaretka ,
98 bajtówWypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
Retina , 31 bajtów
Odbitki
0
(fałsz) lub1
(prawda).Wypróbuj online! (Pierwszy wiersz włącza pakiet testowy oddzielony od linii).
Wyjaśnienie
Konwertuj dane wejściowe na jednostkowe, przekształcając dane wejściowe
N
wN
kopie pliku1
.Wielokrotnie usuwaj największą liczbę pierwszą mniejszą niż wartość wejściowa. Jest to oparte na standardowym teście pierwotności z wyrażeniem regularnym .
Sprawdź, czy wynik jest pojedynczy
1
.źródło
Pyth,
181514 bajtówDzięki @Maltysen za -1 bajtów
Program, który pobiera dane ze STDIN i drukuje
True
lubFalse
odpowiednio.Wypróbuj online
Jak to działa
Stara wersja z redukcją, 18 bajtów
Wypróbuj online
Jak to działa
źródło
St
jestU
15 znakówJavaScript (ES6),
6463 bajtówZapisano 1 bajt dzięki @Neil
Napisałem to w 2 minuty ... i zadziałało idealnie za pierwszym razem. Pierwszy użytkownik, który znajdzie nieunikniony błąd, wygrywa ....
Wypróbuj to
Pokaż fragment kodu
Jak to działa
Najpierw definiujemy g (x) jako funkcję, która znajduje pierwszą liczbę pierwszą p <= x . Odbywa się to przy użyciu następującego procesu:
Rozwiązanie tego wyzwania, f (x) , jest teraz dość proste:
źródło
too much recursion
się na konsolę przeglądarki w Firefox 48, więc myślę, że rekursja przekracza limit rekurencji FF.x%2
powinien zaoszczędzić ci bajtx==1
.Pyke,
1511 bajtówWypróbuj tutaj!
Zwraca wartość
1
true, a jeśli wartość false - wyjątekźródło
Julia, 32 bajty
Chociaż nie będzie to najkrótsze rozwiązanie wśród języków, może to być najkrótsze z języków czytelnych dla człowieka ...
Lub, mówiąc nieco inaczej
Nazywany na przykład przez
!37
.źródło
Mathematica, 32 bajty
Jest to nienazwana funkcja, która przyjmuje liczbę całkowitą i zwraca wartość logiczną.
Wyjaśnienie
Tutaj jest dużo składni i zabawnej kolejności czytania, więc ...
źródło
#+0~Min~NextPrime@-#&~FixedPoint~#==1&
(36 bajtów). Niezłe wykorzystanie//.
!<2
na końcu.Python3,
102 92 90 8988 bajtówZapraszamy do gry w golfa! Widzę, że
gmpy
zawiera funkcjęnext_prime
, ale nie mogę jej jeszcze przetestować :(-2 bajty, dzięki @JonathanAllan !
-1 bajt, dzięki @Aaron !
Przypadki testowe
Dane wyjściowe to 13 wartości prawdziwych i 13 wartości falsey.
s
zawiera prawdziwe przypadki ih
falseys.źródło
if all(x%y for...
działan<3 else
->n<3else
aby uzyskać taką samą długość jak moja;)Python, z sympią, 60 bajtów
Moja poprzednia metoda miała 83 bajty bez sympy przy użyciu rekurencji, ale wziąłem prawdę / falsey, aby oznaczać dającą się odróżnić i spójną, ale zostałem poinformowany, że to niepoprawna interpretacja. Nie mogę go uratować z powodu ogona, ale zostawię go tutaj, na wypadek, gdyby ktoś wiedział, jak to zrobić:
źródło
2
nie jest wartością falsey.Vitsy,
2826 bajtówMożna to zdecydowanie skrócić.
W pobliżu
Wypróbuj online!
źródło
MATL , 13 bajtów
Wypróbuj online! Lub zweryfikuj wszystkie przypadki testowe jednocześnie .
Wyjaśnienie
źródło
CJam ,
2116 bajtówDzięki Dennis za oszczędność 4 bajtów.
Wypróbuj online!
Wyjaśnienie
źródło
ri_{_1|{mp},W=-}*
powinno działać.1|
jest naprawdę sprytne. :) (I zawsze zapominam, że{...},
ma to ukryty zasięg ...)Perl, 42 bajty
Obejmuje +1 dla
-p
Uruchom z wejściem na STDIN
reach1.pl
:Używa klasycznego wyrażenia regularnego
źródło
.NET Regex, 38 bajtów
Aby pokazać, że można to sprawdzić w jednym wyrażeniu regularnym.
Zakłada się, że dane wejściowe są jednostkowe.
Wyjaśnienie
Po prostu implementuje wymaganie do tego słowa, kilkakrotnie usuwając największą liczbę pierwszą i sprawdzając, czy reszta to 1.
(?>(?<=(.*))..+(?<!^\1\2+(.+.)|$))+
: Grupa bez śledzenia wstecznego upewnia się, że znaleziona największa liczba pierwsza nie jest nadpisywana, i+
po prostu powtarza proces dopasowywania największej liczby pierwszej.(?<=(.*))..+(?<!^\1\2+(.+.)|$)
: Dopasuj największą liczbę pierwszą mniejszą niż pozostała liczba(?<=(.*))
: Zapisz, ile odjęliśmy, aby ustalić „punkt kontrolny” dla potwierdzenia...+
: Poszukaj największej liczby ...(?<!^\1\2+(.+.)|$)
: ... która jest liczbą pierwszą i jest mniejsza niż pozostała liczba.(?<!^\1\2+(.+.))
: Zwykła rutyna testu wstępnego, z^\1
tackingiem z przodu, aby upewnić się, że sprawdzamy dopasowaną ilość..+
(?!<$)
: Podaj mniej niż pozostała liczbaźródło
(?<=(.*))
część jest raczej niezdarna. Nie jestem pewien, czy istnieje lepszy sposób. Jestem też ciekawy, czy istnieje rozwiązanie w PCRE.Perl 6 ,
54 53 5251 bajtówWyjaśnienie:
Przykład:
źródło
Nieregularny , 63 bajty
Stworzyłem ten język dwa dni temu, a podstawowe założenia są takie, że nie ma wbudowanych pętli, jedynymi funkcjami są podstawowa arytmetyka i podejmowanie decyzji, a ocena programu oparta jest na wyrażeniach regularnych.
Wyjaśnienie
Ta część przekształca dane wejściowe w jednoargumentowy. Wielokrotnie odejmuje 1 od wartości wejściowej, aż będzie równa 0, dodając za
1_
każdym razem. Następnie usuwa wszystkie_
s. Gdybym nie zapomniałbreak
kodu w swoim kodzie, można go zapisać w następujący sposób:Następna część wielokrotnie usuwa największą liczbę pierwszą z wejścia, aż będzie równa
1
lub11
, z11
zastąpieniem przez0
.Użyłem wyrażenia regularnego z odpowiedzi Martina Endera .
źródło
Haskell, 79 bajtów
Niezbyt krótkie, ale bezsensowne :)
źródło
PowerShell v2 +, 81 bajtów
Pobiera dane wejściowe
$n
. Wchodzi wwhile
pętlę, dopóki$n
jest jeszcze3
większa lub większa. Każda iteracja odejmuje liczbę od$n
. Liczba to wyniki testu pierwotności wyrażenia regularnego zastosowanego względem zakresu($n-1)..2
za pośrednictwem operatoraWhere-Object
(?
), a następnie pierwszy[0]
z wyników (ponieważ zakres zmniejsza się, w wyniku czego wybierany jest największy). Po zakończeniu pętli$n
albo będzie,1
albo2
z definicji, więc wstępnie dekrementujemy$n
(zamieniając ją na jedną z nich0
lub1
) i bierzemy wartość logiczną, a nie!
jej. Pozostaje to w potoku, a dane wyjściowe są niejawne.Przykłady
źródło
Matlab, 51 bajtów
Jest to BARDZO podobne do rozwiązania JS6 firmy ETHProductions , ale wymaga, aby zmienna znajdowała się w obszarze roboczym.
źródło
Python 2.7:
8887 bajtówDzięki @TuukkaX za -1 więcej bajtów!
źródło
n<2
zamiastn==1
.Floroid ,
45 3029 bajtówźródło
Clojure, 125 bajtów
Tak, to jeden długi fragment kodu. Najbardziej pełny język uderza ponownie!
Nie golfowany:
źródło