Wprowadzenie (może zostać zignorowane)
Umieszczenie wszystkich liczb dodatnich w regularnej kolejności (1, 2, 3, ...) jest trochę nudne, prawda? Oto szereg wyzwań związanych z permutacjami (przetasowaniami) wszystkich liczb dodatnich. To trzecie wyzwanie z tej serii (linki do pierwszego i drugiego wyzwania).
W tym wyzwaniu ułożymy liczby naturalne w rzędach o coraz większej długości w taki sposób, aby suma każdego rzędu była liczbą pierwszą. To, co wydaje mi się naprawdę niesamowite w tym, to to, że każda liczba naturalna ma miejsce w tym układzie. Żadne liczby nie są pomijane!
Ta wizualizacja tego układu wygląda następująco:
row numbers sum
1 1 1
2 2 3 5
3 4 5 8 17
4 6 7 9 15 37
5 10 11 12 13 21 67
6 14 16 17 18 19 23 107
etc.
Możemy odczytać elementy z rzędów w tym trójkącie. Pierwsze 20 elementów to: 1, 2, 3, 4, 5, 8, 6 , 7, 9, 15, 10, 11, 12, 13, 21, 14, 16, 17, 18, 19 ( tak, jest utwór New Order ukryty w tej sekwencji ).
Ponieważ jest to wyzwanie „czystej sekwencji”, zadaniem jest wyprowadzenie dla danego jako danych wejściowych, gdzie to A162371 .
Zadanie
Biorąc pod uwagę liczbę całkowitą , wypisz w formacie liczb całkowitych.
jest zdefiniowane jako ty element leksykograficznie najwcześniejszej permutacji liczb naturalnych, tak że, gdy jest widziany jako trójkąt odczytywany przez rzędy, dla n> 1 sumy rzędów są liczbami pierwszymi. Od pierwszego leksykograficznej permutacji liczb naturalnych startów 1, ( 1 ) jest 1. Należy pamiętać, że ta definicja A ( 1 ) = 1 i ( 1 ) jestniemuszą być pierwsza. To jest sekwencja OEISA162371.
Uwaga: tutaj zakłada się indeksowanie 1; możesz użyć indeksowania opartego na 0, więc itd. Podaj to w swojej odpowiedzi, jeśli zdecydujesz się na to.
Przypadki testowe
Input | Output
---------------
1 | 1
5 | 5
20 | 19
50 | 50
78 | 87
123 | 123
1234 | 1233
3000 | 3000
9999 | 9999
29890 | 29913
Zasady
- Dane wejściowe i wyjściowe są liczbami całkowitymi (twój program powinien co najmniej obsługiwać dane wejściowe i wyjściowe w zakresie od 1 do 32767)
- Niepoprawne dane wejściowe (0, liczby zmiennoprzecinkowe, ciągi, wartości ujemne itp.) Mogą prowadzić do nieprzewidzianych wyników, błędów lub (nie) zdefiniowanego zachowania.
- Obowiązują domyślne reguły we / wy .
- Domyślne luki są zabronione.
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach
Odpowiedzi:
Galaretka , 32 bajty
Wypróbuj online! - bardzo wolno, ponieważ najpierw buduje n wierszy, dla szybszej wersji, która nie ma 37 bajtów tego wypróbować .
źródło
Perl 6 ,
8077 bajtówWypróbuj online!
Wyjaśnienie:
źródło
Haskell ,
122120 bajtówWypróbuj online!(ma dodatkowe 2 bajty
f=
)EDYCJA: Teraz używa indeksowania opartego na 0, aby zapisać 2 bajty. Dzięki @wastl za zwrócenie na to uwagi, musiałem przegapić to w OP.
Pisanie tego było bardzo fajne! Funkcja pomocnika
%
wymaga długościl
i listy wartości, których może użyća
. Zwraca nieskończoną listę wartości dla sekwencji. Długość jest o jeden mniejsza niż długość bieżącego rzędu trójkątów, a lista jest nieskończona i wstępnie posortowana. Najpierw podajemy pierwszel
wartości,a
a następnie przeglądamy resztę, aż znajdziemy pierwszą (najmniejszą) wartość, która sprawi, że suma będzie liczbą pierwszą. Rozbijamy listę wokół tej wartości za pomocąspan
i trochę dopasowania wzorca. Teraz wszystko, co musimy zrobić, to uzyskać tę nową wartość i powrócić do następnej długości liniil+1
i pozostałych wartości wa
. Aby uzyskać wynik końcowy, dodajemy 1 (specjalny przypadek dla n = 0) i indeksujemy do niego za pomocą!!
.źródło
0:
ponieważ wyzwanie wskazuje, że możesz użyć indeksowania opartego na 0.JavaScript (ES6),
111110 bajtówWypróbuj online!
źródło
Galaretka , 46 bajtów
Wypróbuj online!
Przekroczono limit czasu dla dużego n na tio, ale działa tam dla wszystkich oprócz dwóch ostatnich przykładów.
źródło
Lua ,
242228226211 bajtówWypróbuj online!
źródło