Tym razem wyzwaniem jest znalezienie n- tego Fibohexaprime . Definicja Fibohexaprime jest następująca:
Najpierw obserwujemy listę z liczbami Fibonacciego:
N | Fibonacci number
1 | 1
2 | 1
3 | 2
4 | 3
5 | 5
6 | 8
7 | 13
8 | 21
9 | 34
10 | 55
11 | 89
12 | 144
13 | 233
14 | 377
15 | 610
16 | 987
17 | 1597
Następnie przekształcamy liczby na szesnastkowe:
N | Fib | Hex
1 | 1 | 1
2 | 1 | 1
3 | 2 | 2
4 | 3 | 3
5 | 5 | 5
6 | 8 | 8
7 | 13 | D
8 | 21 | 15
9 | 34 | 22
10 | 55 | 37
11 | 89 | 59
12 | 144 | 90
13 | 233 | E9
14 | 377 | 179
15 | 610 | 262
16 | 987 | 3DB
17 | 1597 | 63D
Z liczb szesnastkowych odfiltrowujemy litery. Pozostały nam tylko liczby. Musimy sprawdzić, czy te liczby są liczbą pierwszą:
hex | filtered | is prime? | N =
1 > 1 > false
1 > 1 > false
2 > 2 > true 1
3 > 3 > true 2
5 > 5 > true 3
8 > 8 > false
D > 0 > false
15 > 15 > false
22 > 22 > false
37 > 37 > true 4
59 > 59 > true 5
90 > 90 > false
E9 > 9 > false
179 > 179 > true 6
262 > 262 > false
3DB > 3 > true 7
63D > 63 > false
Jeśli filtrowana liczba jest liczbą pierwszą, nazywamy to Fibohexaprime . Widać N = 7
, że związana z tym liczba Fibonacciego wynosi 987.
Zadanie jest proste, gdy podano dane wejściowe za pomocą STDIN lub akceptowalnej alternatywy, napisz program lub funkcję, która generuje n-ty Fibohexaprime za pomocą STDOUT lub akceptowalnej alternatywy.
Przypadki testowe
Input - Output
1 - 2
2 - 3
3 - 5
4 - 55
5 - 89
6 - 377
7 - 987
8 - 28657
9 - 75025
10 - 121393
11 - 317811
12 - 5702887
13 - 9227465
14 - 39088169
15 - 102334155
16 - 32951280099
17 - 4052739537881
18 - 806515533049393
19 - 7540113804746346429
Zasady:
- Biorąc pod uwagę liczbę całkowitą pomiędzy
1
i19
(powyższe wartości20
przekraczają maksymalną wartość dla liczby całkowitej ze znakiem 64-bitowym), wypisz odpowiednią wartość. - Możesz napisać funkcję lub program.
- To jest golf golfowy , więc wygrywanie z najmniejszą ilością bajtów wygrywa!
Odpowiedzi:
Pyth, 27 bajtów
Demonstracja
y
oblicza n-tą liczbę Fibonacciego..f
Pętli znajdzie fibohexaprime według danych wejściowych.źródło
MATL , 28 bajtów
Korzysta z MATL w wersji 1.0.0 , która została opublikowana w Esolangs 12 grudnia wcześniej niż to wyzwanie.
Przykład
Wyjaśnienie
Kod jest podobny do tego w odpowiedzi Martina Büttnera .
źródło
CJam, 28 bajtów
Sprawdź to tutaj.
Wyjaśnienie
źródło
Perl 6 , 62 bajtów
Moja pierwsza przepustka do uruchomienia to:
Łącząc
grep
imap
, mogę usunąć 10 bajtówJeśli użyję
grep
zamiastmap
, oszczędzam 5 dodatkowych bajtów:stosowanie:
źródło
Mathematica 111 bajtów
Nadal może być miejsce na grę w golfa.
źródło
Julia, 123 bajty
Jest to anonimowa funkcja, która przyjmuje liczbę całkowitą i zwraca liczbę całkowitą. Aby to nazwać, nadaj mu nazwę, np
f=n->...
.Nie golfowany:
źródło
LUKA , 204 bajtów
Ta odpowiedź jest dość niezwykła, z wyjątkiem tego, że GAP jest wystarczająco fajny, aby móc znaleźć kolejne kilka Fibohexaprimes (i jeszcze fajniejsze, znajduje je w milisekundach z danym kodem).
Zauważ, że f (24) wynosi od 2 ^ 216 do 2 ^ 217.
Oto kod:
Prawdopodobnie można jeszcze zagrać w golfa. Myślę, że wdrożenie jest dość proste.
Nie golfowany:
źródło
C,
186183 bajtówTest pierwotności jest bardzo nieefektywny, więc obliczenia trochę się zmagają
n > 16
i stają się boleśnie długien = 19
. Niemniej jednak działa i daje oczekiwane rezultaty.Kod zakłada, że
size_t
jest to typ 64-bitowy, co dotyczy zarówno 64-bitowego systemu Linux, jak i Windows.Bonus: niestety jesteśmy zobowiązani do korzystania z typów 64-bitowych, co prowadzi do narzutu 33 bajtów. Następująca wersja działa przy
n <= 15
użyciuint
i ma 150 bajtów długości:Test główny:
źródło
size_t
i upuszczając dołączenie? Jest on specyficzny dla implementacji, ale wydaje się być 64-bitowy zarówno w 64-bitowym systemie Linux, jak i Windows gcc (i od kiedy dbaliśmy o przenośność w codegolf?). (uwaga dodatkowa:%ld
nie jest 64-bitowy w 64-bitowym systemie Windows; wymaga%lld
)size_t
nie jest wbudowany, jest zdefiniowany wstddef.h
(który z kolei jest bezpośrednio lub pośrednio zawarty w praktycznie dowolnym innym nagłówku). Tak czy inaczej, potrzebuję#include
. Nadal mogę jednak zapisać 2 bajty, używającsize_t
zamiastuint64_t
:)lld
odrobinę, nie miałem okazji przetestować go w systemie Windows (ale przenośność nie ma znaczenia, prawda?)stdio.h
podczas testów. W każdym razie - nadal możesz uratować parę, dołączającmath.h
zamiaststddef.h
.math.h
nie robi to dla mnie (GCC 4.9 z GNU libc)Python 2, 127 bajtów
Algorytm może być o wiele bardziej wydajny. W szczególności kontrola pierwotności
(t>1)*all(t%x for x in range(2,t))
sprawdza potencjalne czynniki aż dot-1
momentu, gdy tak naprawdę musiałaby to sprawdzić tylko do podstawy pierwiastka kwadratowego . Ponieważrange
sklepów całej listy w pamięci w Pythonie 2, prowadzi to doMemoryError
hoteluN=17
(na moim komputerze przy użyciu ustawień domyślnych).źródło
Rubin, 160 bajtów
Nie golfowany:
Stosowanie:
źródło
R 164 bajty
Wcięte, z nowymi liniami:
Przykłady:
źródło