Napisz program, który przetestuje pierwotność określonej liczby i poda wynik jako wartość logiczną (prawda jest liczbą pierwszą). Twój test podstawowy może (ale nie musi) być ważny na liczbę 1.
Oto haczyk: sam program musi sumować się do liczby pierwszej. Konwertuj każdy znak (łącznie ze spacjami) na jego wartość Unicode / ASCII ( tabela ). Następnie dodaj wszystkie te liczby razem, aby uzyskać sumę swojego programu.
Weźmy na przykład ten niezbyt świetny program, który napisałem w Pythonie 3.3:
q=None
y=int(input())
for x in range(2,int(y**0.5)+1):
if y%x==0:
q=False
if not q:
q=True
print(q)
Jeśli przekonwertujesz wszystkie znaki na odpowiadające im wartości Unicode / ASCII, otrzymasz:
113 61 78 111 110 101 10 121 61 105 110 116 40 105 110 112 117 116 40 41 41 10 102 111 114 32 120 32 105 110 32 114 97 110 103 101 40 50 44 105 110 116 40 121 42 42 48 46 53 41 43 49 41 58 10 32 32 32 32 105 102 32 121 37 120 61 61 48 58 10 32 32 32 32 32 32 32 32 113 61 70 97 108 115 101 10 105 102 32 110 111 116 32 113 58 10 32 32 32 32 113 61 84 114 117 101 10 112 114 105 110 116 40 113 41
Następnie możesz znaleźć sumę tych liczb ręcznie lub we własnym programie. Ten konkretny program wynosi 8293, co jest liczbą pierwszą.
Oczywiście jest to Code Golf, więc im mniejszy jest program, tym lepiej. Jak zauważyli inni użytkownicy, ten program nie jest bardzo golfowy.
Kilka zasad:
Prawidłowe dane wejściowe obejmują STDIN i monity (brak funkcji, to tylko sposób na dodanie darmowego dodatkowego kodu). Spacje są dozwolone, ale tylko wtedy, gdy mają kluczowe znaczenie dla funkcjonalności twojego programu. Dane wyjściowe muszą być danymi wyjściowymi, a nie tylko przechowywanymi w zmiennej lub zwracanymi (użyj print, STDOUT itp.)
Flagi mogą być używane i powinny być liczone dosłownie, a nie rozszerzane. Komentarze nie są dozwolone. Jeśli chodzi o znaki spoza ASCII, należy je przypisać do wartości w odpowiednim kodowaniu.
Podaj rozmiar swojego programu i sumę programu. Będę testować, aby upewnić się, że programy są prawidłowe.
Powodzenia!
Oto fragment kodu zliczający sumę programu i sprawdzający, czy jest on najważniejszy:
źródło
Odpowiedzi:
Witaj świecie! , 13 bajtów,
1193
źródło
Ruby, suma 3373, 37 bajtów
źródło
Microscript II, 2 bajty (suma 137)
Microscript II, 4 bajty (suma 353)
Jestem właściwie zaskoczony, że oba te sumy mają sumy bajtów.
źródło
Japt , 2 bajty,
191
U
:85
j
:106
Wypróbuj online!
źródło
Pyth, 2 bajty,
127
Wypróbuj online
Dane wyjściowe
1
dla liczb pierwszych,0
dla liczb niepierwszych./
ma punkt kodowy47
.P
ma punkt kodowy80
.Jak to działa:
źródło
Haskell, 52 bajty, 4421
Twierdzenie Wilsona.
źródło
::IO Int
Naprawdę nie powinno być konieczne, chyba że jest to najkrótszy sposób można dostać się doskonałą sumy.Python 2, 50 bajtów,
4201
Działa dla 1. Wynik jest dodatni, jeśli jest liczbą pierwszą, lub zero, jeśli nie.
Wypróbuj online
Python 2, 44 bajty,
3701
Nie działa dla 1. Wyprowadza wartość logiczną.
Wypróbuj online
źródło
JavaScript (ES6), 47 bajtów,
3541
Jest to w dużej mierze oparte na funkcji testowania pierwotności ETHprodukcji , którą można znaleźć tutaj .
źródło
05AB1E , 2 bajty,
173
Wyjaśnienie:
Wypróbuj online!
źródło
PHP, 38 bajtów, suma 2791
Ciekawostka:
$h
zamiast$c
tego suma byłaby2801
(również liczbą pierwszą), a jej reprezentacja binarna101011110001
odczytana jako dziesiętna jest również liczbą pierwszą.pobiera argument wiersza poleceń, drukuje
1
lub pusty ciąg znaków. Uruchom z-r
.Kod pobrany z mojej podstawowej funkcji (jeśli możesz, spójrz na oryginalny post).
źródło
R, 27
32bajty, suma 22432609Zaoszczędź 5 bajtów dzięki @rturnbull
Wykorzystuje to funkcję isprime biblioteki gmp.
źródło
cat(!!gmp::isprime(scan()))
jest o 5 bajtów krótszy i sumuje się2243
również do liczby pierwszej.Python 2, 44 bajty, suma bajtów 3109
To jest 44-bajtowa implementacja xnor z nazwami zmiennych o najniższej wartości, które dają sumę bajtów pierwszych.
Drukuje,
1
jeśli jest pierwsza, a0
jeśli nie.źródło
Galaretka 6 bajtów , suma bajtów 691
drukuje,
1
jeśli jest pierwsza, a0
jeśli nie.TryItOnline!
Bajty w systemie szesnastkowym to
93 0D D5 2C CD 45
(patrz strona kodowa ) lub w systemie dziesiętnym147 13 213 44 205 69
suma wynosi 691, co jest liczbą pierwszą.W jaki sposób?
The
Æḍ
Funkcjonalność jest taka, że liczby pierwsze i ich negacje zwrócić jeden, podczas gdy inne całkowite zrobić NOT (kompozytów i ich negacje powrócić numery większe niż jeden, jeden i minus jeden zwracają zero i zerowym, co dziwne, minus jeden).The
Ṡ
Funkcjonalność jest taka, że liczby całkowite ujemne powrócić minus jeden, zero zwraca zero i dodatnie liczby całkowite powrócić jeden.Zatem dwie funkcje zwracają tylko tę samą wartość dla liczb pierwszych.
Zauważ, że 3-bajtowy program
ƓÆP
który bezpośrednio sprawdza, czy dane wejściowe z STDIN są liczbą pierwszą, nie jest niestety programem sumy pierwszej (240).Testowanie równości przy użyciu
=
(równości),e
(istnieje w) lub⁼
(równości niewektoryzującej) dla 5 bajtów również nie daje programów z sumą pierwszą.Alternatywne (być może nie do przyjęcia) 4 bajty, suma 571
Jeśli ograniczenia we / wy nadal zezwalają na pełne programy, które pobierają argument.
... stosując tę samą zasadę, co powyżej, gdzie
⁼
równość nie jest wektoryzująca (aspekt niewektoryzujący nie ma żadnego efektu, ponieważ i tak nie ma nic do wektoryzacji). Wartości szesnastkowe są dziesiętne,0D D5 8C CD
co daje13 213 140 205
sumę 571, liczbę pierwszą.Ponownie zauważmy, że program 2-bajtowy
ÆP
nie ma sumy pierwszej (93).źródło
ƓÆPG
ÆPF
Myślę, że (311) i (163) powinny być w porządku?ƓÆḍ,ṠE
wartością jest16183
, która jest przypadkowo liczbą pierwszą!ƓÆPG
OK. Zapytałem również, czy program przyjmujący dane wejściowe zamiast STDIN jest dopuszczalny.ÆP¥
to 3 bajty i 97.CJam , 4 bajty, suma bajtów 439
Używa wbudowanego testu pierwszeństwa.
Wypróbuj online!
Alternatywne rozwiązanie, 4 bajty, suma 461
źródło
Mathematica, 21 bajtów,
1997
Input[]
odczytuje wiersz danych wejściowych (jeśli nie ze standardowego wejścia przedni koniec używanego przez pole dialogowe, jeśli stosuje się przedni koniec Mathematica)Print@*PrimeQ
jest skład (@*
) zPrint
iPrimeQ
funkcji i@
ma oznaczenie funkcji prefiksu.źródło
Perl 6 ,
2422 bajtów,1949
Wszystkie trzy znaki spacji są wymagane.
(Perl 6 nie dba o to, jaki jest biały znak, więc wybrałem nowy wiersz zamiast częściej używanego miejsca na drugi ...)
źródło
Pyth, 4 bytes,
367
Try it here!
źródło
Pip, 8 bytes,
511
I wrote a prime checker, and the sum was prime. Convenient. Verify inputs 1-30: Try it online!
Explanation
źródło
Pari/GP, 23 bytes,
2111
Try it online!
źródło
J, 18 Bytes,
1103
Not far from optimal, the least I could golf a full program primality test to was 17 Bytes:
echo(p:[:".1!:1)1
, which unfortunately sums to 1133 = 11*103.Unfortunately I can't figure out how to get keyboard input working on TIO, so no link yet.
Explanation:
Validating the program:
źródło
C (gcc),
6260 bytes, 4583Pretty straight-forward. Outputs * if prime, otherwise it outputs a space. Does not work for 1.
-2 thanks to l4m2
Try it online!
źródło
n;main(i){for(scanf("%d",&n);++i<n;)n=n%i?n:0;puts("*"+!n);}
may need to change some variable name for prime sumAWK, 36 bytes, byte-sum 2239
Try it online!
Outputs
0
if not prime and1
for prime. Definitely not the most efficient code, since it checks every integer greater than1
to see if it divides the input.źródło
Excel (57 bytes, code sum 3547)
Excel doesn't really have an "input" as such, but this formula expects the number to be tested to be in A1 and outputs to whatever cell you drop it in. It's an array formula, so press Ctrl-Shift-Enter to enter it, rather than Enter.
źródło
Java 8, 114 bytes, Prime 10037
Try it online.
Explanation:
I've used
x
instead ofi
to make the unicode sum a prime. Verify the unicode sum here.źródło
Jelly, 4 bytes, Σ = 239
Try it online!
Proof: Try it online! (take the 1-based indices of the program's chars of Jelly's code page, decrement to make them 0-based, sum and then check if the result is prime).
źródło
SmileBASIC, 42 bytes,
2687
Outputs 1 (true) if the number is prime, otherwise 0 (false).
The variable names were not just chosen to make the program prime.
N
is the number to test,D
is the divisor, andP
keeps track of whether N is prime.źródło
Wonder, 7 bytes,
537
There probably is a better way...
źródło
Rust, 190 bytes, 15013 score
Ungolfed
Does not work for 1
źródło
Stax, 349
Run and debug it
źródło
|pQ
works for a score of 317. If swapping truthy/falsy is allowed,|p!
works as well for 269.Whispers v2, 33 bytes
Try it online!
44381
How it works
This is shown in the order it is executed in:
źródło