Biorąc pod uwagę dodatnią liczbę całkowitą jako dane wejściowe, określ, czy jest to wielkoduszna liczba.
Wielkoduszna liczba to liczba taka, że każde wstawienie +
znaku między dowolnymi dwiema cyframi w podstawie 10 powoduje wyrażenie pierwszej liczby całkowitej.
Na przykład 40427 jest wspaniałomyślny, ponieważ
4+0427 = 431 is prime
40+427 = 467 is prime
404+27 = 431 is prime
4042+7 = 4049 is prime
Wydajność
Powinieneś wypisać dwie różne wartości, jedną, gdy wejście jest wspaniałomyślne, a drugą, gdy wejście nie jest.
Punktacja
Celem tego konkursu będzie zmniejszenie rozmiaru kodu źródłowego napisanego w celu rozwiązania tego zadania, podanego w bajtach.
Przypadki testowe
1 -> True
2 -> True
4 -> True
10 -> False
98 -> True
101 -> True
109 -> False
819 -> False
4063 -> True
40427 -> True
2000221 -> True
1
ze znakiem plus wstawionym między dowolnymi dwoma znakami (bez wstawiania) może to tylko skutkować1
, co samo w sobie nie jest liczbą pierwszą.1
i2
nie mają dwóch cyfr, zestaw wyrażeń jest pusty. Wszyscy członkowie pustego zestawu są pierwsi. Poza tym żaden z nich nie jest, ale to nie ma sensu. To trochę mylące, dam ci to, ale myślę, że ma to większy sens niż alternatywy.Odpowiedzi:
05AB1E , 10 bajtów
Kod
Wykorzystuje kodowanie 05AB1E . Wypróbuj online! lub Zweryfikuj wszystkie przypadki testowe!
Wyjaśnienie
źródło
1 - 9
. Produktem pustego zestawu jest 1? Czemu?1
pomnożenia go przez każdy element w zestawie, więc ...sum
on[]
jest równoważny0
, używając właściwości indukcyjnej, gdy implementacja była całkiem sprytna.C (gcc) , 83
848583848675111bajtyWszystkie optymalizacje wyłączone i tylko w GCC 32-bit.
-1 bajt dzięki @ceilingcat
+ niektóre bajty na
1
skrzynkę.+ niektóre bajty dla funkcji wielokrotnego użytku.
Pobiera dane wejściowe jako liczbę całkowitą. Zwraca 1 dla przypadków fałszywych, 0 dla przypadków prawdziwych.
Wypróbuj online!
Zobacz moją kolejną odpowiedź na kod Mathematica (55 bajtów).
źródło
1
,98
i4063
.Siatkówka , 38 bajtów
Wypróbuj online!
Drukuje
1
dla wspaniałomyślnych liczb i0
nie tylko.Wyjaśnienie
Zaczynamy od dopasowania każdej pozycji między dwiema cyframi (pozycji, które nie są granicami słów) i wstawienia zarówno prefiksu, jak i sufiksu tego dopasowania jako jedności, używając
_
jako cyfry unary. Zamiast wstawiać+
s, bezpośrednio wstawiamy tam jednostkowy wynik sumy.Teraz dzielimy ciąg znaków na cyfry, tak aby każda suma przechodziła przez swoją własną linię i pozbywamy się tych cyfr (będzie też pusta linia wiodąca i końcowa, ale to nie jest ważne).
Jest to standardowe wyrażenie regularne pasujące do liczb niepierwszych w jednostkowej. Użycie
G
tutaj etapu powtórzeń oznacza, że po prostu zachowujemy wszystkie linie zawierające dodatnie wartości niepierwotne (odrzucając puste linie).Na koniec sprawdzamy, czy ciąg jest pusty. Jeśli wkład był wspaniałomyślny, poprzedni etap odrzucił wszystkie linie (ponieważ wszystkie były liczbami pierwszymi), a to daje nam
1
. W przeciwnym razie, jeśli jakakolwiek linia nie będzie liczbą pierwszą, pozostanie w ciągu, a wyrażenie regularne zawiedzie, dając0
.źródło
Python 2 ,
827978 bajtówJest to powolne i może poradzić sobie tylko z przypadkami testowymi z zapamiętywaniem.
Wypróbuj online!
Wersja alternatywna, 79 bajtów
Przyspieszony kosztem jednego bajtu.
Wypróbuj online!
źródło
Galaretka , 12 bajtów
Wypróbuj online!
Sprawdź wszystkie przypadki testowe.
źródło
d
!Java 8,
1751719488 bajtów-77 dzięki @PeterTaylor , wykorzystując arytmetykę (zamiast String z
.substring
) i pozbywając się oddzielnej metody sprawdzania, czy liczba całkowita jest liczbą pierwszą.-6 bajtów przy użyciu metody sprawdzania liczby pierwszych @SaraJ , więc pamiętaj o jej głosowaniu!
Wypróbuj tutaj.
Wyjaśnienie:
źródło
p
rekurencję; po drugie, kumuluj wyniki tak, aby funkcja główna wymagała tylko jednejreturn
instrukcji, tworząc wartość wartownika zp
be-1
i&
sprawdzając, czy wszystkie zwracane wartości są-1
.n->{for(long d=10,m=1;d<n;d*=10)m|=p(n/d+n%d,2)-2;return m>0;}long p(long n,int i){return i<n?p(n%i<1?1:n,i+1):n;}
d<=n
poradzić sobie10
. Przepełnienie stosu nie stanowi problemu (specyfikacja nie podaje zakresu danych wejściowych, które należy obsłużyć), ale można to naprawić i uzyskać więcej oszczędności poprzez powrót do pętli i wstawianie .Pyth , 14 bajtów
Wypróbuj online! Wyświetli się,
True
jeśli liczba będzie wspaniałomyślna,False
przeciwnym razie. Pobiera liczbę jako ciąg znaków.Objaśnienia
źródło
Python 2 ,
104 102 98 96103 bajtówi
całkowicie anonimowy, ponieważ jest wywoływany tylko raz.x-1
tylkox
dla rarnge sprawdzania liczby pierwszych.x=10
, dodając w ten sposób 7 bajtów, dzięki @Dennis i @Wheat Wizard za wykrycie: moja wcześniejsza wersja uważała 1 za liczbę pierwsząWypróbuj online!
źródło
x-1
znaku na końcu zakresu; zakres jest wyłączny po prawej stronie.Japt ,
2416 bajtówTo była właściwie współpraca między @Shaggy, @ETHproduction i mną.
Wypróbuj online!
Pobiera dane wejściowe jako ciąg.
źródło
x
automatycznie konwertuje pozycje z tablicy na liczby ;-)XîU
geniuszem. Myślę, żeU¯X
działa na tę samą długość, ale nadalPip ,
2524 bajtówWypróbuj online!
Wyjaśnienie
a
jest pierwszym argumentem wiersza poleceń.1,#a
generuje zakres zawierający numery1
przezlen(a)-1
. W tym celu mapujemy funkcję lambda:Następnie mapujemy kolejną funkcję lambda
0N_%,_=1
, która sprawdza pierwotność. Wziąłem to z tej odpowiedzi ; możesz przeczytać wyjaśnienie tam. Na koniec składamy listę na logicznym AND ($&
). Wynik jest taki, że1
wszystkie sumy były liczbami pierwszymi,0
jeśli żadna z nich nie była.Przykład z wprowadzeniem
4063
:źródło
CJam , 22 bajty
Wypróbuj online!
Wyświetla dodatnią liczbę całkowitą dla prawdy, zero dla fałszu.
-1 dzięki sprytnej sztuczce Petera Taylora .
-3 dzięki kolejnej wskazówce Petera Taylora.
źródło
0&!
jest krótszy niż1+:*
!
zwraca wartość logiczną i użyłeś przecięcia zestawu z wartością falsy,0
dzięki czemu możesz zrobić0&!
w 3 zamiast1&!!
...,
operatora filtru zamiastf
.!
konwersji na wartość logiczną: było to standardowe w GolfScript i standardowe w CJam. I1&!!
byłoby niepoprawne:0&!
to oczywisty test, ponieważ wymaganie jest forall, nie istnieje.Japt , 23 bajty
Pobiera dane wejściowe jako ciąg.
Cholera; pokonany na znacznie krótszą alternatywę, nad którą pracowałem.
Sprawdź to
źródło
¬£i+YÄÃe@OxX j
4063
działa (powinno być prawdą, jest fałszywe). Sztuczka polega na tym, że JS myśli, że prowadzący0
oznacza, że chcesz ósemkowy ...40043
na przykład) Po prostu dodaj+
po,0
aby to naprawić.Mathematica, 75 bajtów
Function
który oczekujeString
.PrimeQ@ToExpression@StringInsert[#,"+",n]
zwraca, czy wstawienie cyfry+
pon
th daje liczbę pierwszą.Table[...,{n,2,StringLength@#}]
podaje listę tych wartości wn
zakresie od2
do długości ciągu. Następnie bierzemyAnd
każdy z elementów tej listy. Dogodnie, jeśliStringLength@#<2
, toTable[...]
jest pusta lista, dla którejAnd@@{}==True
źródło
Mathematica, 55
504549505462bajtyWygląda na to, że powinienem to opublikować osobno.
Zmierzono +6 bajtów długości kodu.
+5 bajtów dzięki ngenisis.
Pobiera dane wejściowe jako liczbę całkowitą i zwraca wartość regularną
True
orazFalse
.
W międzyczasie jest unicode 0xF4A1, skrótFunction[,]
. Długość kodu jest mierzona na podstawie rozmiaru pliku (UTF-8 bez BOM), komentarz, jeśli nie jest poprawny.PowerRange[x]
zwraca 1, 10, 100 ... nie większy niżx
, co zostało wprowadzone w Mathematica 10.źródło
Zwykły angielski 4
204341315251241240 bajtów(Ponownie) wprowadził testy pierwszeństwa do biblioteki Plain English, przenosząc 3 863 bajty do biblioteki Plain English. Usunięto 26 bajtów białych znaków. Zaoszczędzono 64 bajty, skracając zmienne lokalne. Zapisano 10 bajtów, skracając interfejs. Zgodnie z sugestią RosLuP zaoszczędzono 1 bajt, zmieniając sposób inicjowania i zwiększania wartości m.
Nieskluczona wersja ostatecznego kodu:
Uwagi: Zwykły angielski IDE jest dostępny na stronie github.com/Folds/english . IDE działa w systemie Windows. Kompiluje się do 32-bitowego kodu x86.
Osmosian Zamówienie jest dynamiczny widelec zwykłego angielskiego już pierwszości testowania w wersji 4700, ale jest używany algorytm bardzo nieefektywne (od stycznia do czerwca 2017 roku). W wersjach 4001-4011 dynamicznego rozwidlenia witryny GitHub pominięto testowanie pierwszeństwa. Wersja 4013 dynamicznego rozwidlenia witryny GitHub zawiera testy pierwotności. Kod do przeprowadzania testów pierwotności został opracowany w ramach poprzednich wersji tej odpowiedzi.
źródło
Perl 6 , 58 bajtów
Wypróbuj online!
10, 10 * * ...^ * > $_
to geometryczna sekwencja wielokrotności dziesięciu, podejmowana do jednego przed elementem, który przekracza parametr wejściowy$_
. Następnie sprawdzamy, czy dla każdej potęgi dziesięciu suma parametru wejściowego pobrana div i mod ta moc jest liczbą pierwszą.źródło
Haskell,
114110 bajtówNieoznakowany z wyjaśnieniem:
źródło
p x=[x]==[i|i<-[2..x],x`mod`i<1]
jako czeku głównego, możesz zapisać 2 bajty.divMod x$10^i
zamiastx`divMod`(10^i)
Aksjomat, 88 bajtów
test i wyniki
źródło
Brachylog , 11 bajtów
Wypróbuj online!
źródło
Perl 6 , 35 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
Skumulowane , 51 bajtów
Wypróbuj online!
To jest funkcja. Działa poprzez konwersję argumentu na ciąg (
tostr
), powielanie go i uzyskiwanie jego długości (:#'
), odejmowanie 1 (1-
), tworząc zakres od 1 do tej liczby (~>
). Stos wygląda mniej więcej tak40427
:Wykonujemy wektoryzację
splitat
, w wyniku czego następująca tablica znajduje się na górze stosu:Transponując to
tr
, otrzymujemy:Następnie mapujemy funkcję
['+',' '#
# ~ prime](with
map`). Ta funkcja:Następnie po mapie konkatenujemy
1
. Dzieje się tak, ponieważall
zwracaundef
pustą listę.źródło
JavaScript (ES6), 70 bajtów
Błąd ostatniego przypadku w mojej przeglądarce z powodu błędu „zbyt dużej rekurencji” podczas obliczania
P(200023)
. Mam nadzieję, że to nie unieważnia tego.źródło
QBIC , 38 bajtów
Wyjaśnienie
źródło
CJam (21 bajtów)
Demo online , zestaw testów on-line
Sekcja
źródło
Pyth,
1514 bajtówZestaw testowy
Zapisano bajt przy użyciu najnowszej zmiany Pytha.
źródło
APL (NARS), znaki 35, bajty 70
test:
To byłoby tłumaczenie w APL z Axiom post algo tutaj ...
źródło
PHP, 100 bajtów
wypisuje,
1
jeśli dane wejściowe są wspaniałe, puste dane wyjściowe, jeśli nie. Uruchom jako potok z-nR
lub spróbuj online .źródło
Perl 5
-p
, 42 bajtówWypróbuj online!
źródło