Sekwencja:
- Zaczynamy o
1
. - Najpierw dodajemy bieżącą wartość 1-indeksowaną do poprzedniego numeru w sekwencji.
- Następnie stosujemy następujące operacje matematyczne, jeśli dotyczą one bieżącej wartości:
- Podzielny przez
2
? => Dodawanie - Podzielny przez
3
? => Odejmowanie - Podzielny przez
4
? => (Dodawanie ORAZ) Pomnóż - Nie podzielny przez ani
2
,3
ani4
? -> Kontynuuj z bieżącym wynikiem sumy
- Podzielny przez
Wynik:
Wypisz pierwsze 100 liczb w tej sekwencji:
1, 1, 21, 25, 30, 216, 223, 223, 2169, 2179, 2190, 2202, 2215, 2215, 2245, 2261, 2295, 2295, 2333, 2353, 2395, 2417, 56649, 56649, 56699, 56725, 1533033, 1533061, 1533090, 45993600, 45993631, 45993631, 1517792001, 1517792035, 1517792070, 1517792106, 1517792143, 1517792143, 1517792221, 1517792261, 1517792343, 1517792343, 1517792429, 1517792473, 1517792563, 1517792609, 71336257041, 71336257041, 71336257139, 71336257189, 3638149121841, 3638149121893, 3638149121946, 196460052588000, 196460052588055, 196460052588055, 11198222997525633, 11198222997525691, 11198222997525750, 11198222997525810, 11198222997525871, 11198222997525871, 11198222997525997, 11198222997526061, 11198222997526191, 11198222997526191, 11198222997526325, 11198222997526393, 11198222997526531, 11198222997526601, 795073832824398753, 795073832824398753, 795073832824398899, 795073832824398973, 59630537461829934225, 59630537461829934301, 59630537461829934378, 4651181922022734887568, 4651181922022734887647, 4651181922022734887647, 376745735683841525912529, 376745735683841525912611, 376745735683841525912694, 376745735683841525912778, 376745735683841525912863, 376745735683841525912863, 376745735683841525913037, 376745735683841525913125, 376745735683841525913303, 376745735683841525913303, 376745735683841525913485, 376745735683841525913577, 376745735683841525913763, 376745735683841525913857, 35790844889964944961834465, 35790844889964944961834465, 35790844889964944961834659, 35790844889964944961834757, 3543293644106529551221660545, 3543293644106529551221660645
Oto pierwsze 10 liczb w sekwencji z wyjaśnieniem:
// Starting number of the sequence:
1
// 1 (previous number in the sequence)
// + 2 (current index in 1-indexed sequence)
// = 3 -> 3 - 2 (3 is divisible by 3, so we subtract the current index 2)
// = 1
1
// 1 (previous number in the sequence)
// + 3 (current index in 1-indexed sequence)
// = 4 -> 4 + 3 (4 is divisible by 2, so we first add the current index 3)
// = 7 -> 7 * 3 (and 4 is also divisible by 4, so we then also multiply the current index 3)
// = 21
21
// 21 (previous number in the sequence)
// + 4 (current index in 1-indexed sequence)
// = 25 (25 is not divisible by 2, 3 nor 4)
25
// 25 (previous number in the sequence)
// + 5 (current index in 1-indexed sequence)
// = 30 -> 30 + 5 (30 is divisible by 2, so we first add the current index 5)
// = 35 -> 35 - 5 (and 30 is also divisible by 3, so we then also subtract the current index 5)
// = 30
30
// 30 (previous number in the sequence)
// + 6 (current index in 1-indexed sequence)
// = 36 -> 36 + 6 (36 is divisible by 2, so we first add the current index 6)
// = 42 -> 42 - 6 (and 36 is also divisible by 3, so we then also subtract the current index 6)
// = 36 -> 36 * 6 (and 36 is also divisible by 4, so we then also multiply the current index 6)
// = 216
216
// 216 (previous number in the sequence)
// + 7 (current index in 1-indexed sequence)
// = 223 (223 is not divisible by 2, 3 nor 4)
223
// 223 (previous number in the sequence)
// + 8 (current index in 1-indexed sequence)
// = 231 -> 231 - 8 (231 is divisible by 3, so we subtract the current index 8)
// = 223
223
// 223 (previous number in the sequence)
// + 9 (current index in 1-indexed sequence)
// = 232 -> 232 + 9 (232 is divisible by 2, so we first add the current index 9)
// = 241 -> 241 * 9 (and 232 is also divisible by 4, so we then also multiply the current index 9)
// = 2169
2169
// 2169 (previous number in the sequence)
// + 10 (current index in 1-indexed sequence)
// 2179 (2179 is not divisible by 2, 3 nor 4)
2179
Zasady konkursu:
- Jeśli twój język nie obsługuje niczego większego niż 2 31 -1, możesz kontynuować sekwencję, aż do tego maksimum (czyli pierwszych 46 liczb, aż do - i włącznie -
1,517,792,609
). - Format wyjściowy jest elastyczny. Możesz zwrócić tablicę lub listę, ciąg znaków oddzielony spacjami, przecinkami itp. Twoje połączenie.
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Nie pozwól, aby języki kod-golfowe zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania. - Do odpowiedzi odnoszą się standardowe reguły , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami, pełnych programów. Twoja decyzja.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem swojego kodu.
- W razie potrzeby dodaj również wyjaśnienie.
code-golf
sequence
number-theory
division
Kevin Cruijssen
źródło
źródło
Odpowiedzi:
05AB1E ,
2423 bajty-1 bajt dzięki Kevin Crujissen
Wypróbuj online!
Wyjaśnienie:
źródło
UX
można ją było usunąć, ale nie jestem w stanie. Skończyłem też na 24 bajtach, ponieważ zaczyna się na0
zamiast1
. Teraz zwiększyłem go wcześniej, ale potem musimy zapętlić101
czasy zamiast100
… Ach, cóż.UX
jest odleżyna. Starałem się go pozbyć na jakiś czas, a zakończył się z grupą 24 i 25 odmianach:1тF=NÌ©+DÑ3L>Ãv®…-*+yè.V
,1тL>v=y+©3F®NÌÖiy…+-*Nè.V
... I nie uważają za pomocą zmiennej licznika, to jest interesujące.тF
zamiastƵ0µ
. Zredagowałem to w, dzięki! (PS: naprawdę powinien istnieć jednobajtowy¼¾
...)¼¾
byłby fajny, chociaż szczerze mówiąc, prawie nigdy tak go nie używam. Jednobajtowe narzędzie, które wolałbym teraz najbardziej, to druga©®
zmienna, która nie wyskakuje. Być może zaczynając od pustego ciągu,""
jak wspomniałeś wcześniej w innym wyzwaniu.R,
858279767270 bajtówbez golfa:
Dzięki @rturnbull za wskazanie, że mogę użyć
(!z%%3)
zamiast(z%%3<1)
sprawdzić moduły i że definicjaz
zdarzenia ma miejsce przy pierwszym użyciu.Grałem w golfa o 3-4 znaki, nadużywając rozszerzenia wektora: odpowiedź pierwotnie się rozpoczęła,
s=1:56...
ale nie musimy tego robić, długośćs
zostanie przedłużona w razie potrzeby.Zaoszczędzono jeszcze 3 bajty, zastępując ostatni warunek wywołaniem
"if"
funkcji (tak, jest to poprawna funkcja w R!)Zaoszczędzono jeszcze 4 bajty, zastępując
s
jeT
, co jest wbudowanym równym,TRUE
który jest równy1
. Zrozumiałem to w tym samym czasie co @rturnbull (szczerze!)To cierpi z powodu pewnych problemów numerycznych, gdy przekroczymy 2 ^ 52, ale nic nie mogę na to poradzić --- R może używać
double
typów dla liczb większych niż2^31-1
, ale przechowują dokładnie liczby całkowite do 2 ^ 52. Zatem wolno mi wyprowadzać tylko pierwsze 56 terminów (ostatni termin, który jest „właściwy”), co oszczędza jeden bajt na skrzynce o długości 100.Oto wynik z wersji o długości 56:
źródło
1,517,792,609
). ”, Ale to z Oczywiście dotyczy także liczb innych niż 32-bitowe. Jeśli R nie poradzi sobie z czymś większym, to pierwsze 56 liczb jest w porządku. I tak, jeśli wiesz, że nie może iść powyżej 56, można zmienić100
, aby56
zapisać bajt.z%%2<1
(i tak dalej) na!z%%2
, nadużywając niejawnej konwersji typu.!
że nie pokonałem%%
, ale najwyraźniej tak!T
i używać tego zamiasts
, pozwalając na usunięcies=1;
, oszczędzając kolejne cztery bajty. Możliwe jest złożenie definicjiz
do definicjis[i]
(no cóż,T[i]
teraz), tak jak:,T[i]=((z=i+T[i-1])+ ...
co oznacza, że możesz stracić nawiasy klamrowe, oszczędzając trochę więcej bajtów. EDYCJA: Och, widzę, że zrobiłeśT
lewę, pisząc mój komentarz! Mówią, że wielkie umysły myślą podobnie.Python 3,
8278767472 bajtyWynik:
Sugestie są mile widziane!
źródło
while
pętli i zmień kolejność arytmetyki na -2 .05AB1E ,
343130 bajtówWypróbuj online!
Wyjaśnienie
źródło
Python 2, 76 bajtów
Całkiem standardowa implementacja, myślę, że użycie instrukcji exec zamiast pętli while pozwoliło zaoszczędzić około 2 bajtów. Metoda rekurencyjna może być krótsza, wyobrażam sobie, że wkrótce pojawi się xnor;)
Gdybym użył aktualizacji, które wymyślił TheNumberOne, miałbym 69 bajtów (ale wtedy kopiowałbym)
Wynik:
źródło
JavaScript,
7563 bajtówInna wersja:
Oba zatrzymują się na indeksie 57 (z indeksowaniem 0), ponieważ wtedy dane wyjściowe przekraczają bezpieczny rozmiar liczbowy JavaScript (2 53-1 ). Okazuje się, że pętla jest znacznie krótsza niż funkcja rekurencyjna, nawet w ES6:
Ten zwraca tablicę pierwszych 57 elementów.
źródło
map
wersję pod kątem kompletności, a ona też taktowała się w 75 bajtach.Brain-Flak
476 466 462 456446 BajtówOszczędność 6 bajtów dzięki Kreatorowi pszenicy
Wypróbuj online!
To jest naprawdę powolne. TIO nie może obsłużyć całych 100 liczb (limit wydaje się wynosić 22 lub 23). Tak więc ten przykład generuje tylko pierwsze 20, ale kod działałby również dla 100.
Krótkie wyjaśnienie:
źródło
({}<>[({})]<>)(<()>)
można zastąpić(<({}<>[({})]<>)>)
Java 7, 316 bajtów
Kod niepoznany i testowy:
Wypróbuj tutaj.
Wynik:
źródło
C #, 120 bajtów
Tak jak żadna zdrowa osoba nie grałaby w Javę, tak rozsądna osoba nie powinna grać w C #! Ale pieprzyć to, chciałem zobaczyć, co mogę zrobić. Te
1M
odlewyf
być dziesiętny, który ma wystarczającą dokładność dla mnie ta odpowiedź bez konieczności pisaniadecimal
. Inkrementacja w miejscu zapisuje również niektóre bajty w mojej odpowiedzi w języku Python. w końcu jest jeszcze 50 bajtów dłużej.Oto bardziej czytelna (i uruchamialna) wersja:
źródło
while
sięfor
i wkładając int tak:for(int n=1;n<101;)
void k(){for(decimal f=1,d,n=1;n<101;)Console.WriteLine(f=((d=++n+f)+n*((d%2<1?1:0)-(d%3<1?1:0)))*(d%4<1?n:1));}
Partia, 110 bajtów
Używa formuły @ETHproductions, ale nieco poprawiono, ponieważ Batch go nie ma
?:
. Batch używa 32-bitowych liczb całkowitych ze znakiem, więc pętle zatrzymują się na 46.źródło
Perl, 75 bajtów
Kod generuje każdą wartość w nowym wierszu i oblicza wszystkie 100 wartości.
źródło
-Mbigint
, brak nawiasów wokół1..100
i!($a%2)*$_
zamiast($a%2?0:$_)
(to samo dlaa%3..
) powinien zapisać kilka bajtów;)Haskell,
7064 bajtówscanl1(#)[1..100]
zwraca listę z pierwszymi 100 elementami. Jeden bajt mniej, jeśli mogę pozostać w zakresie 2 ^ 31 (->[1..46]
).scanl1
jest jak,foldl1
ale zbiera wyniki pośrednie na liście. Testy podzielności są wykonywane za pomocą funkcji pomocniczej,%
która zwraca,0^0 = 1
jeśli jest podzielna, a0^x = 0
jeśli nie.źródło
J, 46 bajtów
Stosuje metodę opisaną w wyzwaniu.
Stosowanie
Dodatkowe polecenie
(,.~#\)
służy do dodawania indeksów do każdej wartości.źródło
Perl 6 , 62 bajtów
Wypróbuj online!
NAPRAWDĘ musiałem pracować, aby moja liczba bajtów była mniejsza niż w przypadku innych rozwiązań innych niż golfowe.
źródło