Na potrzeby tego wyzwania Prime Power of a Prime (PPP) jest zdefiniowany jako liczba, którą można zdefiniować jako liczbę pierwszą do potęgi liczby pierwszej. Na przykład 9 jest PPP, ponieważ można go przedstawić jako 3 ^ 2. 81 z drugiej strony nie jest PPP, ponieważ może być reprezentowane tylko jako 3 ^ 4, a 4 nie jest liczbą pierwszą. Pierwsze kilka PPP to: 4, 8, 9, 25, 27, 32, 49, 121, 125, 128, 169, 243, 289, 343 ... To jest sekwencja OEIS A053810
Twoje zadanie:
Napisz program lub funkcję, która dla liczby całkowitej n zwraca / wyprowadza n-ty PPP, indeksowany 1 lub 0, zależnie od tego, co wolisz.
Wejście:
Liczba całkowita od 0 do 1000, otrzymana dowolną rozsądną metodą.
Wynik:
PPP o indeksie wskazanym przez dane wejściowe.
Przypadki testowe:
Są one indeksowane 1, więc jeśli twój program pobiera dane indeksowane 0, to dla tych danych wejściowych należy uzyskać to samo wyjście - 1.
3 -> 9
6 -> 32
9 -> 125
Punktacja:
Ten golfowy kod , najniższy wynik w bajtach wygrywa!
Odpowiedzi:
05AB1E (starsza wersja) ,
97 bajtówZaoszczędzono 2 bajty dzięki @KevinCruijssen
Wypróbuj online!
źródło
»
zamiast,J
więc0\n1
nie jest interpretowane jako prawdziwe! Ale możesz zapisać bajt w starszej wersji 05AB1E (której używałeś również w swoim TIO), pomijając½
, ponieważ jest to zrobione domyślnie dlaµ
(drugi punkt w tej mojej końcówce 05AB1E ). Ponadto,ʒĀ}
może być0K
. 7 bajtówŁuska , 10 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Właściwie 14 bajtów
Na podstawie rozwiązania Pyth'a pana Xcodera . Sugestie dotyczące gry w golfa mile widziane. Wypróbuj online!
Ungolfing
źródło
Mathematica, 48 bajtów
Wypróbuj online!
ale Martin Ender miał lepszy pomysł i oszczędził 6 bajtów
Mathematica, 42 bajty
Wypróbuj online!
źródło
Union
zamiast,Join
aby uniknąćSort
.Outer
oszczędza kolejny bajtArray
:(Union@@Outer[Power,p=Prime@Range@#,p])[[#]]&
Tuples
jest jeszcze krótszy:Sort[Power@@@Prime@Range@#~Tuples~2][[#]]&
Galaretka ,
121110 bajtów1 bajt dzięki Dennisowi.
Wypróbuj online!
źródło
R + liczby, 57 bajtów
Wypróbuj online!
outer
jest taką przydatną funkcją.Dość pewne, że to zawsze zadziała. Zrobię formalny argument, kiedy będę miał czas.
źródło
Haskell ,
958580 bajtów-10 bajtów dzięki @Lynn
-5 bajtów dzięki @WillNess
W oparciu o 0
Wypróbuj online!
Wyjaśnienie
źródło
f=(!!)[x|x<-[2..],or[y^e==x|y<-p x,e<-p x]]
oszczędza 10 bajtów.f=(!!)[x|x<-[2..],p<-[[i|i<-[2..x],all((>)2.gcd i)[2..i-1]]],or[y^e==x|e<-p,y<-p]]
. może w porządku, żeby nie liczyćf=
? (nigdy nie jestem pewien zasad).f=
nie należy tego liczyć. Będzie to 80 bajtów(!!)[x|x<-[2..],p<-[[i|i<-[2..x],all((>)2.gcd i)[2..i-1]]],or[y^e==x|e<-p,y<-p]]
.Python 2 ,
163157137136 136 bajtówinput()
zamiast definiować funkcję.Wypróbuj online!
źródło
i=[]
oraz....i+=[r]*....
for
r
zamiasti[p]
Pyth , 15 bajtów
Wypróbuj tutaj! lub Zweryfikuj więcej przypadków testowych.
Wyjaśnienie
źródło
JavaScript
137133 bajtów** normalny algorytm (wynik 100 ms) P = n => {
źródło
APL (Dyalog Extended) , 15 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Perl 6 , 50 bajtów
Wypróbuj online!
Powodem 24 i 7028 jest to, że największa wartość (n = 1000) to 49378729, czyli 7027 ^ 2, a największa moc podstawowa 2, która do tego pasuje, wynosi 23. Tak więc obejmując 2..7027 ^ 2 .. 23 obejmuje wszystkie elementy z pierwszych 1000 (i wiele części zamiennych).
źródło
Pyth - 13 bajtów
Pakiet testowy .
źródło
PARI / GP, 48 bajtów
Jeśli nie policzysz
f(n)=
części, to 43 bajtów.Inne podejście bez zestawu notacji, które nie sprawdza tylu niepotrzebnych przypadków:
źródło
Java 8, 211 bajtów
Bardzo nieefektywna metoda. Zasadniczo oblicza wszystkie PPP od 2 2 do
999 999132 132 i zapisuje je na liście, następnie sortuje tę listę, a następnie pobieran
z listy tę pozycję.EDYCJA: Zamiast używać 999 999, co daje listę 28.225 pozycji, teraz używam 132 132, co daje listę tylko 1024 pozycji. To nieco poprawia wydajność i jest całkowicie do przyjęcia, ponieważ w wyzwaniu stwierdza się, że powinniśmy wspierać dane wejściowe od indeksu 0 do 1000. (Zmiana
1e3
na132
nie wpływa jednak na liczbę bajtów.)Wyjaśnienie:
Wypróbuj tutaj.
źródło
J, 21 bajtów
Zerowa indeksowana funkcja anonimowa.
Wypróbuj online!
Próbuję wrócić do kołysania rzeczy, ale wydaje mi się, że zapomniałem wszystkich sztuczek, aby stworzyć dobre monadyczne łańcuchy.
Krótkie wyjaśnienie
Tworzy tabelę liczb pierwszych od 0-tej liczby pierwszej do liczby pierwszej na podstawie indeksu wejścia plus 1 (w celu uwzględnienia 0). Spłaszcza tę listę, sortuje ją, a następnie indeksuje. Zdaję sobie teraz sprawę, że może to dawać niepoprawne wyniki dla niektórych wartości, ponieważ tabela może być niewystarczająco duża - w takim przypadku edytowałbym na stałe wartość 1E4, która powinna wystarczyć. Nie mogę tego udowodnić w ten czy inny sposób (to pasuje do podanych przypadków testowych), więc daj mi znać, jeśli to jest problem.
Również 21 bajtów
źródło