Napisz najkrótszy program lub funkcję, która generuje te 1000 liczb lub sekwencję (indeksowaną 0 lub 1), która zaczyna się od nich.
[0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1,
0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0,
1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1,
0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0,
1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1,
0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0,
1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1,
0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,
1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1,
0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,
1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1,
0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,
1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1,
0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1,
1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0,
0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1,
1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0,
0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1,
1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0,
0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1,
1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0,
0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1,
1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0,
0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1,
1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0,
0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1,
1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0,
0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1,
1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0,
0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1,
1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0,
0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1,
1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0,
0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1,
1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0,
0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1,
1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0,
0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1,
1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0,
0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1,
1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0]
code-golf
sequence
kolmogorov-complexity
John Mangual
źródło
źródło
Odpowiedzi:
Galaretka ,
1110 bajtówZapisano 1 bajt dzięki @Dennis
Wypróbuj online!
W jaki sposób?
Najpierw zauważyłem, że wzór zmienia się między seriami o długości 4 i długości 3, pomijając krok długości 4 co kilka serii. Doprowadziło mnie to do poszukiwania liczby, która mogłaby być podzielona na bieżący indeks, a następnie wzięta do mod 2 i zmienna - tj. Pobierając najmniej znaczący bit - aby dać bit o tym indeksie w szeregu. Po wielu próbach i błędach stwierdziłem, że
3.41845
robi to dokładnie tak samo, ale pomnożenie przez przybliżoną wartość wzajemności (.29253
) jest bajtem krótszym.źródło
Ḃ
ale najwyraźniej to tylko mod 2, a nie najniższy bit, więc dodałem go,Ḟ
aby to naprawić. Zamieniono terazȷḶ×⁽q£:ȷ5Ḃ
działa przez 10 bajtów.Dyalog APL ,
998382 bajtówWypróbuj online!
Zdecydowanie nie jest to zamierzone rozwiązanie, ponieważ wciąż zawiera wiele zakodowanych danych, ale to dopiero początek.
źródło
Ruby ,
34 29 2622 bajtówWypróbuj online!
Szybkie wyjaśnienie: działa to z powodu magicznej liczby 629. Zauważyłem, że sekwencja zaczyna powtarzać się po 629. elemencie, i próbowałem „poprawić” istniejącą odpowiedź, używając tylko matematyki liczb całkowitych. Odkryłem, że druga „magiczna liczba” (0,29253) to tak naprawdę 184/629.
źródło
Galaretka , 31 bajtów
Biorąc pod uwagę wzorzec, prawdopodobnie jest jeszcze krótsza droga ...
Wypróbuj online!
W jaki sposób?
Wykorzystuje powtarzalną strukturę długości przebiegu, która jest widoczna na głębokości trzech.
źródło
Java 8,
756462 bajtówDrukuje całą sekwencję bez separatora, aby zapisać bajty, ponieważ
0
i1
tak będą i tak będą.Porty odpowiedzi galaretki @ETHproductions , ponieważ wątpię, czy znajdę coś krótszego ..
Wypróbuj online.
Wyjaśnienie:
Stara odpowiedź zwracająca wynikową tablicę ( 75 bajtów ):
Wypróbuj online.
Wyjaśnienie:
źródło
JavaScript (Node.js) ,
4133 bajtów, portDziękujemy Rickowi Hitchcockowi za ponad 4 bajty
Wypróbuj online!
JavaScript (Node.js) , 121 bajtów, oryginalny
Wypróbuj online!
źródło
f=(i=0)=>i<1e3?(i*.29253&1)+f(i+1):''
Stax ,
1311 bajtówUruchom i debuguj na staxlang.xyz!
Prześlij do Stax odpowiedzi Jelly @ ETHproductions (przed jej modyfikacją) z pewnymi modyfikacjami @recursive, aby zaoszczędzić dwa bajty.
źródło
Wolfram Language (Mathematica) , 96 bajtów
Szukałem automatu komórkowego, który patrzy na 4 sąsiadów po lewej stronie i tworzy wzór chodzącego lewego wzoru widoczny w danych, gdy dzielisz dane na długość 7 i zachowujesz co trzeci rząd.
Ten automat komórkowy będzie działał przez 29 pokoleń, z których każde jest trzykrotne, idealnie dopasowując sekwencję do znaków od 1 do 629. Jednak sekwencja zaczyna się powtarzać od 630 znaku, a nie kontynuuje obserwowany wzór, więc potrzebny jest dodatkowy kod do obsługi powtarzania obcięty wzór. Generuję główny wzorzec dwa razy, aby uzyskać 1258 znaków.
Bez tej usterki moglibyśmy to zrobić w krótszych 74 bajtach. 47 to liczba pokoleń potrzebnych do uzyskania 1000 znaków (w rzeczywistości jest to 1008 = 48 * 7 * 3)
Wypróbuj online!
źródło
Z80Golf , 27 bajtów
Wypróbuj online!
Przetłumaczone z tego kodu C:
Demontaż:
Zasadniczo jest to podejście arytmetyczne o stałym punkcie: (11149 + 65536) / 2 18 ≈ 0,29253, stała używana przez inne odpowiedzi.
źródło
J , 17 bajtów
Port AJ odpowiedzi Jelly ETHproduction.
Wypróbuj online!
źródło
Japt , 13 bajtów
Japt wersja Jelly odpowiedź ETHproduction .
Naprawiono błąd dzięki Oliverowi .
Wypróbuj tutaj.
źródło
Węgiel drzewny , 13 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Dzięki @ ASCII-only za umożliwienie indeksowaniu akceptowania liczb zmiennoprzecinkowych, które są rzutowane na liczby całkowite (a następnie automatycznie zmniejszane modulo 2 w tym przypadku).
źródło
C,
555352 bajtyOdpowiedź Javy z portu Kevina Cruijssena . Wypróbuj online tutaj .
Dzięki vazt za grę w golfa 2 bajty i Jonathan Frech za grę w golfa jeszcze jeden.
Wersja bez golfa:
źródło
i
jest inicjowany na 0, ponieważ jest globalny, więc możesz usunąći=0
inicjator pętli for, aby zaoszczędzić 3 bajty. Również jeśli wprowadzisz drugą zmienną (jako parametrf()
) i przypiszeszi++*.29253
jej, możesz uniknąć rzutowania i zapisać kolejne 2 bajty:i;f(j){for(;i<1e3;)printf("%d",(j=i++*.29253)%2);}
Wypróbuj online!i
na początku jest inicjowane na 0, ale jeśli chcemy wywołać tę funkcję więcej niż raz, to nie wystarczy. Korzystaniej
z unikania obsady to świetny golf, dziękuję./// , 63 bajty
Wypróbuj online!
źródło