Jako wielki fan serialu Lost TV zawsze intrygowała mnie sekwencja liczb, która powtarzalnie pojawia się w odcinkach. Te liczby to:
(A104101)
Używając dowolnego języka programowania, napisz kod, który wypisuje te liczby.
Punktacja:
Najkrótsza odpowiedź wygrywa
Dane wyjściowe nie mogą zawierać żadnych innych cyfr ani liter. Możesz użyć dowolnego innego znaku jako separatora lub nawet żadnego separatora.
Nie można oddzielić cyfr o tym samym numerze. jest poprawną odpowiedzią, ale nie jest.
Musisz uszanować zamówienie.
Jeśli twój kod nie zawiera żadnej liczby z sekwencji, zmniejsz swój wynik o 30%. Ta reguła pozwala na osobne wprowadzanie cyfr. Na przykład:
abcde1fg5h
Jest ważnym kandydatem, ponieważ odpowiedź nie zawiera liczby , tylko jej cyfry. Jednak dowolne lub unieważnią bonus.
Jeśli kod nie zawiera żadnej cyfry, zmniejsz swój wynik o 50%. Inne postacie takie jak , lub są nadal ważne dla tego bonusu.
źródło
restricted-source
tag, który mógłby zostać tutaj użyty: chociaż większość odpowiedzi unika oczywistych rozwiązań, myślę, że wyzwanie byłoby nieco bardziej interesujące, gdyby używanie cyfr było całkowicie zabronione.Odpowiedzi:
Utracone ,
2927/2 = 13,5 bajtówWypróbuj online! lub sprawdź, czy jest deterministyczny
Wydawało się, że jest to właściwy język.
Wyjaśnienie:
Lost to język 2D, w którym wskaźnik zaczyna się w dowolnym miejscu , idąc w dowolnym kierunku. Zwykle prowadzi to do podwójnego sprawdzania, czy wskaźnik nie wszedł wcześniej do sekcji.
źródło
Galaretka , 7/2 = 3,5 bajta
Drukuje liczby bez separatora, tzn .4815162342 całkowitej 4815162342 .
Wypróbuj online!
Jak to działa
“ƲÞIȥ’
jest bijective base-250 literal integer.Ʋ
,Þ
,I
, Iȥ
ma (1) na podstawie indeksówWreszcie2⋅2407581171=4815162342 .
Ḥ
(unhalve) podwaja liczbę całkowitą, uzyskującPodwajanie jest konieczne, ponieważ bezpośrednie kodowanie wyjścia prowadzi do
“¡9)Ƙ[’
, który zawiera cyfrę.źródło
Neim ,
65 bajtów,32,5 punktuWyjaśnienie:
Wypróbuj online!
źródło
05AB1E , wynik:
1097 bajtów / 2 = 3,5Wypróbuj online.
Lub 7 bajtów alternatywnych :
Wypróbuj online.
Oba generują liczbę całkowitą
4815162342
.Wyjaśnienie:
Zobacz moją wskazówkę 05AB1E (rozdział Jak kompresować duże liczby całkowite? ), Aby zrozumieć, dlaczego
•‘o]Ê•
jest2407581171
i•’µ[%•
jest2432615184
.Odpowiedzi na stare 9 bajtów wyprowadzające listę
[4,8,15,16,23,42]
:-1 bajt (a zatem wynik -0,5) dzięki @Emigna .
Dłuższa niż druga odpowiedź 05AB1E , ale wyświetla listę
[4,8,15,16,23,42]
zamiast liczby całkowitej4815162342
.Wypróbuj online.
Wyjaśnienie:
Zobacz moją wskazówkę 05AB1E (sekcje Jak kompresować duże liczby całkowite? I Jak kompresować listy liczb całkowitych? ), Aby zrozumieć, dlaczego
•ΓƒÇ²•
jest1301916192
i•ΓƒÇ²•50в
jest[4,8,15,16,23,42]
.źródło
•ΓƒÇ²•т;в
na 4.5, ponieważ numery po skrypcie są w porządku dla premii.JavaScript (ES7), 34/2 = 17 bajtów
Wypróbuj online!
To dekoduje i ocenia wyrażenie
"65058101+41**6"
, które nie zawiera żadnej cyfry po zakodowaniu w base-64.JavaScript (ES6), 13 bajtów
Nudne oczywiste rozwiązanie.
Wypróbuj online!
źródło
Python 3 , 25 bajtów, 12,5 punktów
Wypróbuj online!
𩦦 (髒, ⿰ 馬 葬), 𧨦 (謚, ⿰ 言 ⿱⿵ 八一 皿) kosztuje 4 bajty, ale U + 0657 kosztuje tylko 2 bajty ...
Python 3 , 29 bajtów, 14,5 punktów
Wypróbuj online!
𩦦 (⿰ 馬 葬) jest odmianą znaku 髒, co oznacza „brudny”. 湡 to nazwa rzeki. I nie mają one nic wspólnego z tym pytaniem, jakie znałem.
źródło
4815 162342
poprawnym. W ten sposóbprint(*map(ord,'ዏ𧨦'))
oszczędza 1,5 punktu :) (print(*map(ord,'밗'))
zaoszczędziłby 2 punkty, ale został określony jako nieprawidłowy).Brain-Flak , 52/2 == 26 bajtów
Wypróbuj online!
źródło
Java 8, wynik:
1211,9 (70% z 17 bajtów)Wynik -0,1 dzięki @RickHitchcock .
Wypróbuj online.
Wyjaśnienie:
Stara odpowiedź z wynikiem: 12 (50% z 24 bajtów):
Zawiera niedrukowalny znak
0x1B
.Wypróbuj online.
Wyjaśnienie:
W Javie znaki mogą być automatycznie przenoszone na liczby całkowite o wartości Unicode. Niestety, maksymalna obsługiwana wartość Unicode dla znaków wynosi
65,535
, więc nie mogę użyć tylko dwóch znaków do pomnożenia (ponieważ dwie największe liczby, które dzielą oczekiwane,4,815,162,342
to56,802
i84,771
, gdzie84,771
niestety przekracza maksimum65,535
.Ponadto, ponieważ maksymalny rozmiar
int
wynosi 32 2 -1 (2,147,483,647
), a wynik4,815,162,342
jest większy , wymagany jest jawny rzut nalong
, który może pomieścić do 64 2 -1 (9,223,372,036,854,775,807
).Nudna odpowiedź to 14 bajtów bez żadnych bonusów:
Wypróbuj online.
źródło
long
i nie obsługuje bardzo dużych znaków Unicode. Gdyby nie te dwa wymienione ograniczenia, wystarczyłobyv->'𩦦'*'湡'
(15 bajtów, wynik 7,5). Ale wciąż jest bardzo krótki. :) Chociaż Java ma przede wszystkim wiele, wiele słabości w zakresie kodowania (duhh ..), obliczanie za pomocą znaków, ponieważ nie wolno nam używać cyfr, jest jedną z jego niewielu zalet. Był również całkiem przydatny w tej dość podobnej odpowiedzi .v->767*6277917L+3
R, 18x0,7 = 12,6 punkt
Dość oczywiste, po prostu robi pewną arytmetykę, unikając danych liczb.
źródło
7 , 10 bajtów, 27 znaków
Wypróbuj online!
Spakowana reprezentacja tego programu na dysku to (
xxd
format):Wyjaśnienie
Widzieliśmy już tę sekwencję liczb w Automate Saving the World , która polegała na drukowaniu liczb w regularnych odstępach czasu, czyniąc ją interesującą, wymagając użycia bardzo starego języka. Jednak znacznie nowsze języki mogą mieć własne zwroty akcji, które sprawiają, że to wyzwanie jest interesujące. (Tak, ten akapit, a właściwie powód, dla którego zacząłem pisać tę odpowiedź, jest faktycznie tylko sposobem, aby wszystkie powiązane wyzwania pojawiły się razem na pasku bocznym; zwykle ludzie robią to za pomocą komentarzy, ale nie mam wystarczającej liczby przedstawicieli .)
Pierwszą rzeczą, na którą należy zwrócić uwagę, jest fakt, że 7 składa się wyłącznie z cyfr, więc uzyskanie bonusów tutaj raczej nie zadziała (chociaż jeśli postrzegasz program jako sekwencję oktetów, żadna z nich nie odpowiada reprezentacjom ASCII żadnej z pierwotnych liczb , abyś mógł ubiegać się o bonus w tym sensie). Następną rzeczą do odnotowania jest to, że 7 ma polecenia do odtworzenia sekwencji poleceń, które prawdopodobnie wytworzyły określony fragment danych; więc moglibyśmy zinterpretować utracone liczby
4815162342
jako część samego programu 7?Odpowiedź brzmi „niezupełnie”. Najbardziej problematyczną częścią jest ta druga liczba,
8
. 7 programów jest zapisanych ósemkowo; nie ma takiej liczby jak 8. Zatem początek łańcucha będzie musiał być wydrukowany inaczej.Podstawa programu opiera się zatem na 7 programie „Hello world”:
z literą Escape w języku specyficznym dla domeny, interpretowanym w następujący sposób:
Potem przychodzi dodatkowy
3
, który wyprowadza pozostały element stosu (i wychodzi z powodu niewystarczającego pozostałego stosu). Ten element jest określony na początku programu i aby uniknąć niedopasowania6
(który działa trochę jak nawias zamykający), generujemy go za pomocą kodu, a nie zapisujemy bezpośrednio jako dane. (Pamiętaj, że7
na początku programu znajdują się dwa domniemane znaki), co jest istotne tutaj:Daje to następujący literał:
który zostanie wydrukowany.
źródło
:(
05AB1E , 6 * 0,7 = 4,2 bajtów
Wypróbuj online!
Wyświetla liczbę nieskompresowaną z bazy-255
źródło
MASM 8088 Źródło zestawu, (93 bajty - 50%) = 46,5 bajtów
Bez użycia liczb lub sekwencji w źródle:
Wynik:
źródło
Węgiel drzewny , 13 bajtów / 2 = 6,5
Wypróbuj online! Link jest do pełnej wersji kodu. Działa poprzez odjęcie kodów ASCII ciągu
TPIHA.
od 88 i rzutowanie na ciąg.źródło
Aheui (esotop) , 45 bajtów (15 znaków) * 0,5 = 22,5 punktu
Wypróbuj online!
Wyjaśnienie:
Zobacz to także; Aheui Reference ( angielski )
Zauważ, że ㅁ (instrukcja drukowania) przesuwa kursor w odwrotnym kierunku, jeśli stos (lub kolejka) jest pusty.
źródło
Perl 5 , 16 bajtów - 30% = 11,2
Wypróbuj online!
źródło
PowerShell , 12 bajtów * 0,7 = 8,4
Wypróbuj online!
„Port” odpowiedzi Xcali, aby uzyskać lepszą odpowiedź Powershell.
źródło
naz , 46 bajtów, wynik 32,2
Po prostu wyprowadza każdą cyfrę
4815162342
pojedynczo.źródło
JavaScript, 143 bajty (nie wiem, jak zdobyć)
Wypróbuj online!
Zacznij od szóstki
4
, pomnóż, dodaj, odejmij przez, do, z,4
aby uzyskać wynik.źródło
4
z dodawaniem, odejmowaniem, mnożeniem i indeksem liczby4
w ciągu (lub tablicy) może być wykorzystana do uzyskania wymaganych liczb.143*0.7=100.1
PHP, 35/2 = 17,5
podejście cyfrowe: 40 * .7 = 28
bez cyfr, bez ciągów znaków: 68/2 = 34
Wypróbuj je online .
źródło
<?=4815162342;
4815162342
. Lub<?=~
+ 10 niedrukowalnych -> 15/2 = 7,5JavaScript (SpiderMonkey),
67 bajtów / 2 = 33,560 bajtów / 2 = 3058 bajtów / 2 = 2948 bajtów / 2 = 24-7 bajtów / 3,5 , -2 bajtów / 1 dzięki uprzejmości @JoKing, -10 bajtów / 5 dzięki uprzejmości @tsh
Wypróbuj online!
źródło
print(a=-~-~-~-~[],a+=a,b=a+~-a,a+a,a+b,--b+b+b)
print(4815162342)
na 17 bajtówAPL (Dyalog Unicode), 18/2 = 9 bajtów
Po prostu nudne mnożenie starych znaków.
Wypróbuj online!
źródło
JavaScript (ES6), 16 * 0,7 = 11,2 bajtów
Wysyła cyfry bez ograniczników.
Wypróbuj online!
źródło
Biała spacja , wynik:
4941 bajtów / 2 = 20,5Dodane litery
S
(spacja),T
(tab) iN
(nowa linia) tylko jako wyróżnienia.[..._some_action]
dodano tylko jako wyjaśnienie.Wypróbuj online (tylko z surowymi spacjami, tabulatorami i nowymi wierszami).
Pseudo kod:
Wyjaśnienie:
W białych znakach liczba jest wypychana w następujący sposób:
S
: Włącz manipulację stosemS
: Naciśnij numerS
/T
: Odpowiednio pozytywne / negatywneT
/S
po których następuje pojedynczyN
: dziesiętny jako binarny, gdzieT
jest 1, aS
0Następnie jest po prostu drukowany za pomocą
TNST
:TN
: Włącz I / OS
: Wyjście górnej części stosuT
: Jako numerźródło
F #, 45 bajtów = 22,5 punktu
Tylko zwykła
for
pętla, która drukuje cyfry:Powyżej jest kompletnym programem, który można skompilować w plik wykonywalny.
W REPL (pętla read-eval-print), np. FSI (F # Interactive), będzie działać następująca krótsza wersja, ponieważ REPL wyświetli reprezentację wyrażonego wyrażenia; ma 35 bajtów = 17,5 punktu:
źródło
Pyke , 3 punkty
Wypróbuj tutaj!
Pierwszy bajt sygnalizuje odczyt w bazie 128, dopóki nie zostanie ustawiony bajt bez wysokiego bitu.
Na koniec 32 odejmuje się od wyniku (z przyczyn historycznych).
Pozwala to na generowanie dużych liczb w bardzo małej ilości miejsca
źródło
MathGolf , 7 bajtów * 0,5 = 3,5
Wypróbuj online!
Wyjaśnienie
Pamiętaj, że ten kod nie działa jeszcze w TIO. Niedawno wprowadziłem pewne zmiany w MathGolf, w tym dodanie
$
operatora. Gdy zostanie on pobrany do TIO, możesz go uruchomić, wtedy zaktualizuję tę odpowiedź. Działa idealnie w terminaluWykorzystuję fakt, że MathGolf ma literały 1-bajtowe do tworzenia ciągów o długości do 4. Gdybym chciał przekonwertować całą liczbę z ciągu podstawowego o długości 256, musiałbym użyć dwóch
"
, a ciąg byłby 5 postacie. W ten sposób oszczędzam 2 bajty, ale tracę jeden bajt, mając na końcu operatora podwojenia.źródło
Python 3 34 punkty
źródło
Python 3 ,
44381918,5 bajtów-6 bajtów dzięki @Jo King
-50% bajtów dzięki @ouflak za wskazanie 50% premii
-1 bajtów dzięki @Dennis
Wypróbuj online!
źródło
Japt,
109 bajtów / 2 = 4,5Sprawdź to
źródło
Befunge-98 (FBBI) , 15 bajtów / 2 = 7,5 punktu
Wypróbuj online!
Wyjaśnienie:
Najpierw pchnij wartości ASCII znaków „* + H /! K- (42, 72, 47, 33, 107, 45) w tej kolejności na stos. Następnie oblicz4815 = 45 ⋅ 107 i 1623 = 33 ⋅ 47 + 72 i wyjście.
źródło