Twoim wyzwaniem, jeśli zdecydujesz się je zaakceptować, jest kodowanie w golfa funkcji, która zwraca wartość prawda lub fałsz (lub podobną znaczącą reprezentację tak i nie), jeśli liczba spełnia następujące kryteria:
- Sama liczba całkowita jest liczbą pierwszą LUB
- Każda z liczb całkowitych sąsiada jest liczbą pierwszą
Na przykład:
dane wejściowe 7
zwracają wartość True.
Dane wejściowe 8
zwracałyby również wartość True.
Dane wejściowe 15
zwracają wartość False. (Ani 14, 15, ani 16 nie są liczbami pierwszymi)
Dane wejściowe muszą być w stanie poprawnie zwracać dla liczb od 2 ^ 0 do 2 ^ 20 włącznie, więc nie musisz się martwić o problemy ze znakami lub przepełnienia liczb całkowitych.
code-golf
number
primes
decision-problem
Pan Llama
źródło
źródło
Odpowiedzi:
J, 17
Zwraca wartości logiczne zakodowane jako kody powrotu procesu: zero dla wartości true, zero dla wartości false. Przykładowe użycie:
źródło
*/0 p:<:,],>:
jest krótsza, a właściwą funkcją (lambda) jest([:*/0 p:<:,],>:)
Haskell, 47 znaków
źródło
Python
8580Pierwszy raz na Code Golf, więc pewnie brakuje mi kilku sztuczek.
źródło
[]
. wszyscy będą bardziej niż zadowoleni z pracy z wyrażeniem generatora. Jeśli nie przeszkadza ci, że Twój kod jest brzydki, możesz również usunąć spacje między0
orazfor
,)
ior
.f=lambda n:any(all(m%i for i in range(2,m))for m in[n,n-1,n+1])
Nie jest prawdziwym konkurentem pod względem skrótu kodu w jakikolwiek sposób, ale wciąż poddaje się, ponieważ określa prymat za pomocą wyrażenia regularnego jest pokręcone na wiele sposobów!
Python (2.x), 85 znaków
źródło
Rubin (55 lub 50 jako lambda)
lub jako lambda (użyj,
g[23]
aby to nazwać)Coffeescript (53)
źródło
Nudna Mathematica, 35 rozwiązanie!
źródło
Or@@PrimeQ/@{n-1,n,n+1}
.Or@@PrimeQ@{#-1,#,#+1}&
(cięcie w jego kodzie nie jest potrzebne)C
1128272 znakówPo komentarzu Ilmari Karonena, zapisując 30 znaków, usuwając
main
, terazP
zwraca true / false. Zastąpiłem również pętlę rekurencją i trochę więcej poprawek.Orginalna wersja:
źródło
main(n,m)int**m;
.Mathematica, 24 bajty
Nie wiem, dlaczego ten stary post pojawił się dzisiaj na mojej liście, ale zdałem sobie sprawę, że Mathematica jest tutaj konkurencyjna.
Nienazwana funkcja przyjmująca argument liczby całkowitej i zwracająca
True
lubFalse
. Bezpośrednia realizacja.źródło
PrimeQ
wątki nad listami, więcOr@@PrimeQ@{#-1,#,#+1}&
(lubOr@@PrimeQ[#+{-1,0,1}]&
) również działa, dla -1 bajtów. (Chociaż wydaje mi się, że nie wiem, czy zostałyPrimeQ
podzielone na listy w 2012 r.)Stax , 6 bajtów
Uruchom i debuguj
Objaśnienie (rozpakowane):
źródło
JavaScript (71
7380)Demo: http://jsfiddle.net/ydsxJ/3/
Edycja 1: Zmień
for(i=2;i<j;i++)
nafor(i=1;++i<j;)
(dzięki@minitech
). Konwertujif
instrukcję na trójskładnikową. Przeniesionor|=p
ip=1
na zewnątrz,for
aby wyeliminować wewnętrzne szelki. Zapisano 7 znaków.Edit 2: Kombajny
p=1
ij++<=n
dop=j++<=n
, Zapisz 2 znaków (dzięki@ugoren
).źródło
for(i=1;++i<j;)
zamiastfor(i=2;i<j;i++)
zapisać 1 dodatkową postać.!j%i
nie będzie działać z powodu pierwszeństwa. Działającą alternatywą jestj%i<1
.p=j++<=n
? Jeśli JavaScript jest tutaj C, powinien działać.Regex (ECMAScript), 20 bajtów
^x?x?(?!(x+)(x\1)+$)
Wypróbuj online!
Powyższa wersja nie obsługuje poprawnie zera, ale zajmuje to tylko 1 dodatkowy bajt:
^x?x?(?!(x+)(x\1)+$)x
Jako dodatkowy bonus, oto wersja, która daje dopasowanie zwrotne
1
dla jednego mniejszego niż liczba pierwsza,2
dla3
liczby pierwszej i dla jednej więcej niż liczby pierwszej:^x?x??(?!(x+)(x\1)+$)x
Wypróbuj online!
źródło
C #, 96
Zwraca -1,0,1 dla prawdy, wszystko inne jest fałszywe.
Wszelkie sugestie dotyczące skrócenia byłyby wspaniałe!
Rozszerzona forma:
źródło
if(i==r-1)break;
i zmienić środekfor
pętli zi<r
nai<r-1
. Sprowadziłoby cię to do 82.GolfScript: 26
Objaśnienie: Najbardziej wewnętrzny blok
{.:i,{i\%!},,2=@|\(}
określa, czy wierzch stosu jest liczbą pierwszą, sprawdzając, czy są dokładnie 2 czynniki mniejsze niż szczyt stosu. Następnie rozłącza to z drugim przedmiotem na stosie, który utrzymuje stan, czy liczba pierwsza była jeszcze widoczna. Na koniec zmniejsza liczbę na górze stosu.Rozpocznij od zwiększenia wartości wejściowej, zainicjowania stanu największej widoczności i powtórz blok 3 razy. Od tego będzie zmniejszyć dwukrotnie, ale zaczęliśmy przez zwiększany, to pokrycie
n+1
in-1
.źródło
C #,
8797 znakówźródło
CJam, 12 bajtów
CJam jest znacznie młodszy od tego wyzwania, więc ta odpowiedź nie kwalifikuje się do zielonego znacznika wyboru (który i tak powinien zostać zaktualizowany do odpowiedzi randomry). Jednak gra w golfa była naprawdę fajna - zacząłem od 17 bajtów, a następnie trzy razy całkowicie zmieniłem swoje podejście, oszczędzając jeden lub dwa bajty za każdym razem.
Jest to blok, najbliższy odpowiednik funkcji w CJam, która oczekuje danych wejściowych na stosie i pozostawia 1 (prawda) lub 0 (fałsz) na stosie.
Sprawdź to tutaj.
Oto jak to działa:
źródło
F #, 68 bajtów (niekonkurujące)
Wypróbuj online!
Dlatego uwielbiam golfa kodowego. Nadal jestem bardzo zielony z F #, ale uczę się bardzo dużo o tym, jak działa język i co może zrobić z tego rodzaju wyzwaniami.
źródło
APL (Dyalog Classic) , 20 bajtów
Wypróbuj online!
źródło
Siatkówka , 22 bajty
Wypróbuj online!
Staje się jednoargumentowy jako wejście
źródło
Java 8, 83 bajty
Zwraca
true
/false
jako wartości truey / falsey.Wypróbuj online.
Objaśnienie: „
Tak więc
int p(int n)
spowoduje to-1
zan=0
i niepodzielne, i spowodujen-1
zan=1
lub pierwsze. Ponieważp(0)+p(1)+p(2)
stanie się-1+0+1 = 0
i zwróci fałsz (mimo że2
jest liczbą pierwszą),n=1
jest to przypadek skrajny wykorzystujący to podejście.Pojedyncza pętla bez oddzielnej metody miałaby 85 bajtów :
Zwraca
1
/0
jako wartości truey / falsey.Wypróbuj online.
Wyjaśnienie:
źródło
Japt , 7 bajtów
Wypróbuj online!
źródło
R, 68 znaków
Użycie (1 dla PRAWDA, 0 dla FAŁSZ):
źródło
i(n-1)|i(n)|i(n+1)
zamiastifelse(i(n-1)|i(n)|i(n+1),1,0)
?C ++
źródło
P,
43 znaki36źródło
J, 16 znaków
źródło
Python,
6967 znaków8**7 > 2**20
będąc nieco krótszym do napisaniaźródło
Rubinowy, 47 znaków, ale bardzo czytelny
źródło
C ++ 97
ugoren zdaje się pobić mnie do sprytnego rozwiązania. Jest trzykrotnie krótką wersją w pętli:
źródło
Dalej (gforth) , 104 bajty
Wypróbuj online!
Wyjaśnienie
Kontrola wstępna (p)
Główna funkcja (f)
źródło
Julia 0.4 , 23 bajty
Wypróbuj online!
źródło
Galaretka , 5 bajtów
Wypróbuj online!
Jak to działa
źródło