Liczba pierwsza, którą można przycinać w prawo, jest liczbą pierwszą, w której każdy prefiks jest liczbą pierwszą (w bazie 10). Liczba pierwsza skracalna w lewo jest dokładnie odwrotna, gdzie każda postfiks jest liczbą pierwszą (liczby pierwsze zaczynające się od 0 nie są dozwolone). Obie te sekwencje są skończone (istnieje tylko 83 prawe przycinane, podczas gdy są 4260 lewe ścięte).
Musisz napisać program, który przyjmuje jedną liczbę jako dane wejściowe i generuje n- tą liczbę pierwszą możliwą do przycięcia w prawo. Jednak, gdy program jest czytany ułożony do tyłu , powinien wygenerować n- tą lewą możliwą do przycięcia liczbę pierwszą.
Aby uporządkować program do tyłu, podzieliliśmy program na słowa, a następnie odwróciliśmy ich kolejność. Słowo może składać się z dowolnej liczby znaków.
Na przykład jeśli twój program był następujący:
hello world
1234567890
Dopuszczalne byłyby wszystkie możliwe uzgodnienia wstecz:
Podział na każdą postać:
0987654321
dlrow olleh
Podział na białe znaki:
1234567890
world hello
Dowolny podział (rury dodane dla przejrzystości):
hel|lo w|orld
1|23456|7|8|90
908723456orld
1lo whel
Podczas aranżacji programu do tyłu wszystkie białe znaki muszą być wzięte pod uwagę i odwrócone, tak jak każdy inny znak.
Przekazywanie danych wejściowych testu:
1: 2
2: 3
21: 379
60: 239933
83: 73939133
Dane wejściowe testu wstecznego:
1: 2
2: 3
39: 647
187: 29173
4260: 357686312646216567629137
Programy powinny być w stanie działać w rozsądnym czasie (mniej niż minutę)
To jest golf golfowy , więc wygrywa program z najmniejszą liczbą bajtów!
źródło
lo w
jestorld\n1
. Nowa linia nie kończy atomuOdpowiedzi:
Galaretka ,
2623 bajtówNaprzód
Wypróbuj online!
Słowa
Ñ
¶
p
9
¶
7ÆR2ĿV€$ÆPÐf$ÐĿFị@
Do tyłu
Wypróbuj online!
Słowa
7ÆR2ĿV€$ÆPÐf$ÐĿFị@
¶
9
p
¶
Ñ
Jak to działa
Wszystkie programy Jelly składają się z linków (funkcje Jelly przyjmują), które są oddzielone liniami lub pilcrows (
¶
). Ostatni z nich to główny link ; jest wywoływany automatycznie po uruchomieniu programu.Program przekazywania działa w następujący sposób.
Program wstecz działa prawie dokładnie tak samo; są tylko dwie różnice.
Główny link jest teraz
Ñ
, który po prostu wywołuje link poniżej (zawijanie), tj. Główny link programu przekazującego.9p
zamiastp9
zwracać odwrócony produkt kartezjański.źródło
Python 2,
143139 bajtówSkłada się z pięciu części:
I=1
a={2}…[~-n]
I=0
Więc odwrócenie to po prostu zmiana wartości
I
.Wyjaśnienie
Ta funkcja
f
wykonuje rekurencyjne wyszukiwanie liczb pierwszych skracalnych w lewo (LTP) lub liczb pierwszych skracalnych w prawo (RTP), w zależności od wartości globalnejI
. Te wartości zostaną dodane do zestawua
. Następnielambda n:sorted(a)[~-n]
zwracan
-ty.Zdefiniujmy liść jako LTP, RTP, pewną niezerową cyfrę + LTP lub RTP + jakąś niezerową cyfrę. Są to wszystkie wartości, które
f
mogą chcieć sprawdzić pierwotność.Zaprojektowałem pseudopierwszy test Fermata, który działa na wszystkie liście:
(63973 to liczba Carmichaela ).
Jeśli ten test zwróci wartość true,
z
należy go dodać do zestawua
i powinniśmy kontynuowaćstr(z)
. Odpowiedzialny fragment kodu to:Po pierwsze, chcemy zająć się tą sprawą
z == 2
. Robimy to po prostu unikając go tutaj i kodując na początku,2
gdy początkowo definiujemya
! (EDYCJA: I nic złego się nie stanie, jeśli również złapiemyz == 1
.) Możemy więc założyć, żez ≥ 3
teraz.Przetłumaczyłem niektóre „i” na krótkie łańcuchowe porównanie: pierwsze trzy porównania muszą się udać
a.add(z)
if(u)
są zawsze oceniane. Oto wszystkie ich role:Podziękowanie
u=[d+s,s+d][I]
→u=d[I:]+s+d*I
;z==2
→z<3
i sztuczka mod 91 ). Dzięki!źródło