Wydrukuj utracone numery


16

Jako wielki fan serialu Lost TV zawsze intrygowała mnie sekwencja liczb, która powtarzalnie pojawia się w odcinkach. Te liczby to:

4,8,15,16,23,42 (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. 48_15162342 jest poprawną odpowiedzią, ale 481_5162342 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 15 , tylko jej cyfry. Jednak dowolne 4 lub 8 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.³


2
Powiązane, zamknięte pytanie: codegolf.stackexchange.com/q/23808/67312
Giuseppe,

2
Nieokreślone powiązanie: czy już się zgubiłeś?
Dennis

1
Czy musimy je wydrukować w tej kolejności?
Tytus

6
Do wykorzystania w przyszłości mamy restricted-sourcetag, 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.
Arnauld,

Odpowiedzi:


31

Utracone , 29 27/2 = 13,5 bajtów

%?\>>>>>>>>>>
>>\"*"@"

Wypró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.

...>>>>>>>>>>  These arrows filter all pointers that appear on the top line
.............  Or going vertically


%............  This flips the flag so that the program can end
.............  This stops premature termination

.?\..........  Clear the stack by skipping if a value popped from the stack is positive
.............  When the stack is empty, the \ directs the pointer down

.............  The \ directs the pointer right
..\"*"..  The string literal pushes all the Lost values to the stack

..\..........  The @ terminates the program if the % flag is switched
>>\........@.  Otherwise it clears the stack and repeats

.............  The quote here is to prevent the pointer getting stuck
............"  This happens when the pointer starts between the other quotes

11

Galaretka , 7/2 = 3,5 bajta

“ƲÞIȥ’Ḥ

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ów 154 , 21 , 74 i 171 na stronie kodu Jelly, tak więc kodowanie całkowitą 2503154+250221+25074+171=2407581171 .

Wreszcie (unhalve) podwaja liczbę całkowitą, uzyskując 22407581171=4815162342 .

Podwajanie jest konieczne, ponieważ bezpośrednie kodowanie wyjścia prowadzi do “¡9)Ƙ[’, który zawiera cyfrę.


9

Neim , 6 5 bajtów, 3 2,5 punktu

Jσς§A

Wyjaśnienie:

J     Push 48
 σ    Push 15
  ς   Push 16
   §  Push 23
    A Push 42
      Implicitly join the contents 
      of the stack together and print

Wypróbuj online!


6

05AB1E , wynik: 10 9 7 bajtów / 2 = 3,5

•‘o]Ê•·

Wypróbuj online.

Lub 7 bajtów alternatywnych :

•’µ[%•R

Wypróbuj online.

Oba generują liczbę całkowitą 4815162342.

Wyjaśnienie:

•‘o]Ê•     # Compressed integer 2407581171
      ·    # Doubled

•’µ[%•     # Compressed integer 2432615184
      R    # Reversed

Zobacz moją wskazówkę 05AB1E (rozdział Jak kompresować duże liczby całkowite? ), Aby zrozumieć, dlaczego •‘o]Ê•jest 2407581171i •’µ[%•jest 2432615184.


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łkowitej 4815162342.

Wypróbuj online.

Wyjaśnienie:

•ΓƒÇ²•       # Compressed integer 1301916192
      т;     # Integer 50 (100 halved)
        в    # Convert the first integer to Base-50 (arbitrary): [4,8,15,16,23,42]

Zobacz moją wskazówkę 05AB1E (sekcje Jak kompresować duże liczby całkowite? I Jak kompresować listy liczb całkowitych? ), Aby zrozumieć, dlaczego •ΓƒÇ²•jest 1301916192i •ΓƒÇ²•50вjest [4,8,15,16,23,42].


1
Możesz mieć •ΓƒÇ²•т;вna 4.5, ponieważ numery po skrypcie są w porządku dla premii.
Emigna,

@Emigna Ah, miło! Dzięki.
Kevin Cruijssen

6

JavaScript (ES7), 34/2 = 17 bajtów

_=>eval(atob`NjUwNTgxMDErNDEqKjY`)

Wypróbuj online!

To dekoduje i ocenia wyrażenie "65058101+41**6", które nie zawiera żadnej cyfry po zakodowaniu w base-64.

65058101+416=65058101+4750104241=4815162342


JavaScript (ES6), 13 bajtów

Nudne oczywiste rozwiązanie.

_=>4815162342

Wypróbuj online!


6

Python 3 , 25 bajtów, 12,5 punktów

print(*map(ord,'ዏٗ*'))

Wypróbuj online!

𩦦 (髒, ⿰ 馬 葬), 𧨦 (謚, ⿰ 言 ⿱⿵ 八一 皿) kosztuje 4 bajty, ale U + 0657 kosztuje tylko 2 bajty ...


Python 3 , 29 bajtów, 14,5 punktów

print(ord('𩦦')*ord('湡'))

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.


Zapytałem o reguły separatora i możemy użyć dowolnego indywidualnego separatora, który czyni 4815 162342poprawnym. W ten sposób print(*map(ord,'ዏ𧨦'))oszczędza 1,5 punktu :) ( print(*map(ord,'밗'))zaoszczędziłby 2 punkty, ale został określony jako nieprawidłowy).
Jonathan Allan,


4

Java 8, wynik: 12 11,9 (70% z 17 bajtów)

v->767*6277917L+3

Wynik -0,1 dzięki @RickHitchcock .

Wypróbuj online.

Wyjaśnienie:

v->               // Method with empty unused parameter and long return-type
  767             //  767
     *6277917L    //  multiplied by 6277917 (as long)
              +3  //  And then 3 is added

Stara odpowiedź z wynikiem: 12 (50% z 24 bajtów):

v->(long)''*'Ⓥ'*'䧶'

Zawiera niedrukowalny znak 0x1B.

Wypróbuj online.

Wyjaśnienie:

v->                   // Method with empty unused parameter and long return-type
  (long)              //  Cast the character (and therefore the result) to a long
        ''            //  27
           *'Ⓥ'       //  Multiplied by 9419
                *'䧶'  //  Multiplied by 18934

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,342to 56,802i 84,771, gdzie 84,771niestety przekracza maksimum 65,535.
Ponadto, ponieważ maksymalny rozmiar intwynosi 32 2 -1 ( 2,147,483,647), a wynik 4,815,162,342jest większy , wymagany jest jawny rzut na long, 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:

v->4815162341L

Wypróbuj online.


1
Ten mi się podoba. Dość krótko jak na Javę :)
Emigna

@Emigna Thanks. Szkoda, że ​​wymaga obsady longi nie obsługuje bardzo dużych znaków Unicode. Gdyby nie te dwa wymienione ograniczenia, wystarczyłoby v->'𩦦'*'湡'(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 .
Kevin Cruijssen

1
11,9 bajtów: v->767*6277917L+3
Rick Hitchcock

3
@ RickHitchcock Nie codziennie oszczędzamy 0,1 bajta. ;)
Arnauld

@RickHitchcock Thanks! I zgadzam się z powyższym komentarzem Arnaulda . : D
Kevin Cruijssen

4

R, 18x0,7 = 12,6 punkt

cat(9*2*267509019)

Dość oczywiste, po prostu robi pewną arytmetykę, unikając danych liczb.


4

7 , 10 bajtów, 27 znaków

115160723426754314105574033

Wypróbuj online!

Spakowana reprezentacja tego programu na dysku to ( xxdformat):

00000000: 269c 3a71 6f63 308b 7c0d                 &.:qoc0.|.

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 liczby4815162342 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”:

5431410557403
543141055          string literal
         7         separate data from code
          4        rearrange stack: {program's source}, empty element, {literal}
           0       escape {the literal}, appending it to {the empty element}
            3      output {the escaped literal}, pop {the program's source}

z literą Escape w języku specyficznym dla domeny, interpretowanym w następujący sposób:

5                  output format: US-TTY using pairs of digits in the string
 43                select character set: digits and common symbols
   14              "4"
     10            "8"
       55          forget the set output format

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ąć niedopasowania 6(który działa trochę jak nawias zamykający), generujemy go za pomocą kodu, a nie zapisujemy bezpośrednio jako dane. (Pamiętaj, że 7na początku programu znajdują się dwa domniemane znaki), co jest istotne tutaj:

{77}115160723426
 7                 empty stack element
  7 11516          append "1151"
         0         append "6"
          723246   append "2324"

Daje to następujący literał:

115162324
1                  set output format: literally as octal
 15162324          "15162324"

który zostanie wydrukowany.


Dziwnie się czujesz, że nie masz reputacji, pomimo opublikowania kilku całkiem dobrych odpowiedzi. Przeczytałem twoje rozumowanie za publikowaniem tylko odpowiedzi od społeczności i w pełni cię w tym popieram, ale czasami musi być denerwujące, aby nie móc komentować:(
Jo King,

@JoKing: Cóż, zainspirowało mnie to do opublikowania odpowiedzi na to pytanie i okazało się, że jest o wiele bardziej interesujące niż się spodziewałem. Sądzę więc, że jest to więcej dowodów na moją hipotezę, że jeśli nie szukasz reputacji, Twój wkład w stronę będzie bardziej korzystny dla witryny niż w innym przypadku. (W rzeczywistości główną frustracją, jaką odczułem, gdy utknąłem na stałe w reputacji 11, jest to, że nie mogę sugerować zmian w Meta, co oznacza, że ​​jeśli widzę tam błędne informacje, nie mam sposobu, aby to poprawić.)
ais523


3

MASM 8088 Źródło zestawu, (93 bajty - 50%) = 46,5 bajtów

Bez użycia liczb lub sekwencji w źródle:

MOV AH,'P'-'G'
LEA DX,L
INT '!'
RET
T EQU '-'-'+'
L DW 'ph'/T,'jb'/T,'lb'/T,'fd'/T,'dh'/T,'$'

Wynik:

A>LOST.COM
4815162342


2

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 )

Aheui program starts with default stack '아'(or none)

반: push 2, move cursor right by 1(→).
밤: push 4, →
밪: push 3, →
박: push 2, →
밭: push 4, →
빠: dup, →
따: pop 2, push mul result(16).
받: push 3, →
발: push 5, →
따: pop 2, push mul result(15).
밣: push 8, →
뱣: push 4, move cursor right by 2(→→).
히: end.
망: pop 1, print, → (if stack is empty, move cursor left by 1.)
어: move cursor left by 1(←).

Zauważ, że ㅁ (instrukcja drukowania) przesuwa kursor w odwrotnym kierunku, jeśli stos (lub kolejka) jest pusty.




2

naz , 46 bajtów, wynik 32,2

2a2a1o2m1o7s1o5m1o2s2s1o6m1o2s2s1o1a1o1a1o2s1o

Po prostu wyprowadza każdą cyfrę 4815162342pojedynczo.


1

JavaScript, 143 bajty (nie wiem, jak zdobyć)

(g=`${2*2}`)=>g.repeat(6).replace(/(.)/g,(m,p,i,k='')=>
  (k=m*[g-3,g-2,g,g,+g+2,g*3-1][i]
  ,RegExp(`${g-2}|${g}`).test(i)?k-1:i==+g+1?k-(g/2):k))

Wypróbuj online!

Zacznij od szóstki 4, pomnóż, dodaj, odejmij przez, do, z, 4aby uzyskać wynik.


2
Ok, próbowałeś dostać bonus, ale przy takim rozmiarze kodu nie zrekompensowałeś tego. Dlaczego nie po prostu „4815162342”?
Eduardo Hoefel,

@EduardoHoefel Nie zbieraj systemu „score” lub „bonus”, nie próbowałem uzyskać premii, po prostu próbowałem nie używać żadnej z liczb wymaganych na wyjściu. Kod generuje liczby bez twardego kodowania żadnej z liczb. Liczba 4z dodawaniem, odejmowaniem, mnożeniem i indeksem liczby 4w ciągu (lub tablicy) może być wykorzystana do uzyskania wymaganych liczb.
guest271314,

Twój wynik to 143*0.7=100.1
Jo King

1

PHP, 35/2 = 17,5

<?=zzzzzzzzzzzzzzz^NVBVKOVKLVHIVNH;

podejście cyfrowe: 40 * .7 = 28

<?=2+2,_,5+3,_,17-2,_,17-1,_,17+6,_,7*6;

bez cyfr, bez ciągów znaków: 68/2 = 34

<?=$p++,!$p++,$p+=$p,_,$p+=$p,_,~-$q=$p+$p,_,$q,_,--$p+$q,_,$p*~-$p;

Wypróbuj je online .


1
Lub tylko 14 bajtów dla<?=4815162342;
Jo King

1
OP nie odpowiedział, że możemy pominąć ograniczniki lub nie; ale tak. Dlaczego nie zaledwie 10 bajtów: 4815162342. Lub <?=~+ 10 niedrukowalnych -> 15/2 = 7,5
Titus

1

JavaScript (SpiderMonkey), 67 bajtów / 2 = 33,5 60 bajtów / 2 = 30 58 bajtów / 2 = 29 48 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

print(a=-~-~-~-~[],a+=a,b=a+~-a,a+a,a+b,--b+b+b)

Wypróbuj online!


1
print(a=-~-~-~-~[],a+=a,b=a+~-a,a+a,a+b,--b+b+b)
tsh

2
Lub tylko print(4815162342)na 17 bajtów
Jo King



1

Biała spacja , wynik: 49 41 bajtów / 2 = 20,5

[S S S T    S S S T T   T   T   T   S S S S S S S T T   S S S T S T T   T   T   T   S S T   T   S N
_Push_4815162342][T N
S T _Print_number]

Dodane litery S(spacja), T(tab) i N(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:

Integer i = 4815162342
Print i as number to STDOUT

Wyjaśnienie:

W białych znakach liczba jest wypychana w następujący sposób:

  • S: Włącz manipulację stosem
  • S: Naciśnij numer
  • S/T : Odpowiednio pozytywne / negatywne
  • Niektóre T/ Spo których następuje pojedynczy N: dziesiętny jako binarny, gdzie Tjest 1, a S0

Następnie jest po prostu drukowany za pomocą TNST:

  • TN: Włącz I / O
  • S: Wyjście górnej części stosu
  • T: Jako numer

Czy samo popychanie samej liczby jest dłuższe niż dodatkowe instrukcje mnożenia i wypychania liczb całkowitych?
Jo King

@JoKing Zwykle używam internetowego kompilatora vii5ard Whitespace , ponieważ ma podświetlanie i wyświetlanie poleceń po lewej stronie. Ale najwyraźniej działa podobnie jak liczby całkowite Java, ponieważ maksimum to 32-bity i zawija się do minusu powyżej. Więc liczba była zbyt duża, aby można ją było przesunąć za jednym razem. Teraz, gdy wciskam numer w TIO , działa dobrze, teraz rozumiem.
Kevin Cruijssen

1

F #, 45 bajtów = 22,5 punktu

Tylko zwykła forpętla, która drukuje cyfry:

for c in"DHOPWj"do printf"%d"(int c-int '@')

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:

[for c in"DHOPWj"->int c-int '@'];;

1

Pyke , 3 punkty

77 91 f8 86 98 06

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


1

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 terminalu

ÿ≤┼ÇÅ     Push "≤┼ÇÅ"
     $    pop(a), push ord(a) (pushes 2407581171)
      ∞   pop a, push 2*a

Wykorzystuję 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.



1

Python 3 , 44 38 19 18,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

for i in'밗ɯ*':print(ord(i),end='')

Wypróbuj online!



1

Befunge-98 (FBBI) , 15 bajtów / 2 = 7,5 punktu

"*H/!k-"*.*+..@

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=45107 i 1623=3347+72i wyjście.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.