Polyglot (nie stały) OEIS!

24

Oświadczenie: To jest w dużej mierze inspirowane przez „Polyglot OEIS!” ale naprawia problem, który doprowadził do zamknięcia (patrz sekcja wyników) i został ponownie opublikowany, aby nie unieważniać odpowiedzi.

Wprowadzenie

Wszyscy znamy i kochamy encyklopedię sekwencji całkowitych online ( OEIS ). A co, jeśli stworzymy off-line wersję interesujących sekwencji? Cóż, byłoby to trochę zbyt łatwe, nieprawdaż i jak wybrałbyś sekwencję za pomocą naszego standardowego interfejsu !? Nie. Potrzebujemy łatwiejszego rozwiązania tego problemu. Poliglot!

Wkład

Twój wkład będzie liczbą całkowitą nieujemną n.

Wydajność

Twój wynik będzie albo

  • n-Ty wprowadzenie sekwencji OEIS LUB
  • Pierwsze nwpisy w sekwencji OEIS.

Możesz przyjąć, że indeks jest oparty na 1 lub 0, jak wolisz.

Aby nie uczynić tego pytania duplikatem Wszechstronne ciągłe ciągłe drukarki są zabronione. Powinno to również zwiększyć poziom trudności zgłoszeń i unikać „nudnych” rozwiązań;)

Sekwencja nie jest stała, jeśli istnieją dwa elementy sekwencji, które są nierówne.

Uhm, więc gdzie jest Wyzwanie?

Musisz poliglota powyższą funkcjonalność. To znaczy, jeśli obsługujesz języki A, B i C, wszystkie muszą implementować różne sekwencje OEIS. Wybór sekwencji nie jest ograniczony, z wyjątkiem tego, że potrzebujesz różnych dla wszystkich języków.

To znaczy, jeśli uruchomisz dostarczony program w języku A, wówczas wygenerowana zostanie sekwencja X, jeśli uruchomisz dostarczony program w języku B, wygenerowana zostanie sekwencja Y (z X! = Y) i jeśli uruchomisz dostarczony program w języku C należy wygenerować sekwencję Z (z X! = Z && Y! = Z).

Kto wygrywa?

Odpowiedź z największą liczbą par sekwencji / języka wygrywa. Pierwszy remis ma rozmiar kodu (w bajtach), przy czym niższy jest lepszy. Drugim czynnikiem rozstrzygającym jest czas składania zgłoszeń, przy czym wcześniejsze są lepsze.

Jakieś końcowe słowa / zasady?

  • Musisz zadeklarować, który język wygeneruje sekwencję.
  • Obowiązują standardowe zasady we / wy.
  • Jeśli w różnych językach używane są różne kodowania, oba programy muszą używać tej samej sekwencji bajtów.
  • Wersje językowe (Python 2/3) liczone jako różne języki. Różne implementacje języka (takie jak Browser JS vs Node.js) również liczą się jako różne języki.
  • Obowiązują standardowe luki.
SEJPM
źródło
4
Ten post został wykonany zgodnie z niniejszym Meta Q&A .
SEJPM,
Czy różne języki mogą mieć różne indeksowanie?
Stephen
2
@StepHen tak, mogą.
SEJPM

Odpowiedzi:

16

3 języki (1 bajt) - Pyth ( A001477 ), MATL ( A000027 ), Braingolf ( A000217 )

Q

W jaki sposób?

Q wykonuje następujące czynności:

  • W MATL oznacza to + 1, więc w zasadzie ocenia input + 1.

  • W Pyth oznacza wejście, więc po prostu wyprowadza dane wejściowe.

  • W Braingolf jest wbudowany dla liczb trójkątnych.

Mini-poliglota

Pyth można zastąpić jednym z następujących języków: GolfScript , Pyke , Brachylog lub Brain-Flak .

Pan Xcoder
źródło
1
cóż, z pewnością wybrałeś odpowiednie języki dla tego +1: P
HyperNeutrino
1
@HyperNeutrino Właśnie przesłałem swoją odpowiedź stamtąd, ale wtedy wybrałem bardzo dobre języki, więc tak: P - Dzięki!
Pan Xcoder,
Pamiętaj, że jest to liczba języków, nie kod-golf: P
Stephen
@StepHen Myślę, że 3 jest rozsądne.
Pan Xcoder,
14

10 języków, 122 bajty

#|A=1:0;~@}{\,[.,];oi
#coding:utf-8
print (0 and gets.to_i-1 or int(input())**(2+(1/2>0)));quit()#⎚I±N»
# x
#x%:+.

Zdecydowanie mogę dodać trochę więcej. 1 indeksowany, chyba że określono inaczej.

Pamiętaj, że mogę nie być na bieżąco z linkami TIO, gdy jestem pewien, że nowsze zmiany nie wpłynęły na starsze programy - możesz je przetestować, jeśli chcesz, ale kopiując ponad 10 nowych linków TIO za każdym razem, gdy dokonam zmiany po pewnym czasie męczy się. Skopiuję nowe co około 5 aktualizacji.

cQuents v0, A000007

Odpowiedni kod: #|A=1:0;

#|Aprzechwytuje dane wejściowe i służy do komentowania w języku Python. =1oznacza, że ​​pierwszą pozycją jest 1, :0oznacza, że ​​reszta to 0, nprzekazuje th termin podany na wejściu n. cQuents v0 ma dziwny błąd / funkcję, która po ;odczytaniu nieoczekiwanego, ale poprawnego tokena, takiego jak , powoduje zakończenie analizy.

Wypróbuj online!

PingPong, A001478

Odpowiedni kod: #|A=1:0;~@

Dane wyjściowe za pośrednictwem kodu wyjścia. 0-indeksowane.

#pomija następny znak. =nic tu nie robi. 1wypycha 1i :drukuje 1do STDOUT. 0popycha 0. )nic nie robi. ;popycha wejście, ~wyskakuje i popycha -n-1. @kończy się. Kod wyjścia jest na górze stosu.

Wypróbuj online!

axo, A001477

Odpowiedni kod: }{\

0-indeksowane. }odczytuje i wypycha liczbę całkowitą ze STDIN (z jakiegoś powodu wymaga końca nowej linii), {drukuje górę stosu i \kończy program. Nie jestem pewien, co robią poprzednie postacie, ale nic, co ma znaczenie w tym przypadku.

Wypróbuj online!

pieprzenie mózgu , A000027

Odpowiedni kod: ,[.,]

Prosty program dla kotów z esolangs.org. Wysyła dane wejściowe.

Wypróbuj online!

> <>, A000030

Odpowiedni kod: #...;oi

#zwierciadła i zawija się w prawo, które kierują go do odczytu io;, który wypisuje pierwszy znak wejścia. 0-indeksowane.

Wypróbuj online!

Ruby, A023443

Odpowiedni kod: print (0 and gets.to_i-1...)

0-indeksowane. Wyświetla dane wejściowe minus 1. 0jest prawdą w Ruby, ale falsey w Pythonie.

Wypróbuj online!

Python 3, A000578

Odpowiedni kod: print (0 and gets.to_i-1 or int(input())**(2+(1/2>0)));quit()

Oszukany z oryginalnego postu HyperNeutrino, ale jest to dość dobrze znany poliglot. quit()kończy program.

Wypróbuj online!

Python 2, A000290

Odpowiedni kod:

#coding:utf-8
print (0 and gets.to_i-1 or int(input())**(2+(1/2>0)));quit()

#coding:utf-8jest wymagany, aby węgiel działał. Zerwał też oryginalny post HyperNeutrino. quit()kończy program.

Wypróbuj online!

Węgiel drzewny, A001489

Odpowiedni kod: ⎚I±N»

0-indeksowane. czyści konsolę (Charcoal drukuje ASCII bez I±Nzmian ) i wypisuje negatyw wejścia. »jest błędem analizy i kończy działanie programu.

Dzięki ASCII tylko za pomoc na czacie.

Wypróbuj online!

Kardynał, A020725

Odpowiedni kod:

 x
x%:+.

Dodaje 1 do wejścia i zgniata wszystkie inne wskaźniki.

Wypróbuj online!

Stephen
źródło
Wygląda na to, że kodem wyjścia dla PingPong jest ToS, jest on zawijany na 2 ^ 32, jak można by się spodziewać po 64-bitowej liczbie całkowitej ze znakiem.
Jonathan Allan
@JonathanAllan spoko, dzięki.
Stephen
Czy naprawdę musisz wyjść z błędem analizy, jeśli kod Charcoal znajduje się już na końcu programu?
MD XF,
@MDXF nie, planowałem (a) dodać więcej na końcu
Stephen
10

5 języków ( 05AB1E , faktycznie , CJam , galaretka , MATL ), 7 bajtów

UD>li)+

Wypróbuj online !:

  • 05AB1E : sekwencja A000027 (dodatnie liczby całkowite: a ( n ) = n ; oparte na 1)
  • Właściwie : sekwencja A023443 (nieujemne liczby całkowite, w tym 1: a ( n ) = n- 1; 0)
  • Cjam : sekwencja A020725 (dodatnie liczby całkowite z wyłączeniem 1: a ( n ) = n +1; oparte na 1)
  • Galaretka : sekwencja A005843 (nieujemne liczby parzyste: a ( n ) = 2 * n ; na podstawie 0)
  • MATL : sekwencja A000290 (kwadraty: a ( n ) = n 2 ; oparte na 1). Wychodzi z błędem po wygenerowaniu wyniku.
Luis Mendo
źródło
7

3 języki: Proton, A000583 ; Python 3, A000578 ; Python 2, A000290

Proton , 49 bajtów

print(int(input())**(2+(1/2>0)+((''',''')!=',')))

Wypróbuj online!

Python 3 , 49 bajtów

print(int(input())**(2+(1/2>0)+((''',''')!=',')))

Wypróbuj online!

Python 2 , 49 bajtów

print(int(input())**(2+(1/2>0)+((''',''')!=',')))

Wypróbuj online!

Wyjaśnienie

Proton nie ma '''...'''łańcuchów, więc (''',''')staje się ('' ',' ''), co w jakiś sposób nie powoduje problemów. Ocenia '', dokonując (''',''')!=','oceny True.

Python ma te ciągi, więc (''',''')po prostu ','tak (''',''')!=','ocenia False.

Python 2 używa podziału podłogowego dla liczb całkowitych, więc 1/2>0jest fałszywy w Pythonie 2 i true w Pythonie 3.

HyperNeutrino
źródło
Możesz być w stanie dodać więcej języków, jeśli zmienisz wiersz Pythona, 1//1;print(int(input())**(2+(1/2>0)+((''',''')!=',')));quit()a następnie dodasz języki takie jak JavaScript
Stephen
@StepHen Pewnie, to może zadziałać, dzięki. Zrobię to, gdy
dodam
6

5 języków, 107 bajtów

s=1/2;1//2;q=int(input())*([2,3][s>0]);"""/.__id__;'
alert(+prompt()+1);`"""#=;#';q=gets
print(q)#)|<>%2)#`

Perl: A000035

Stosując =jako ogranicznik dla s///pomocą możemy łatwo wykluczają kod nie chcemy, i stosując )jako ogranicznik dla q{}środków po printing qwe wszystkich innych językach, możemy po prostu pracować na <>wprost, bez niepokojące.

s/1...q/i...#/;
print(<>%2)

Wypróbuj online!

Ruby: A001477

W Ruby //jest w rzeczywistości /(dzielenie przez) /.../(dopasowanie wyrażenia regularnego), więc dopóki wyrażenie regularne zostanie zakończone i zamienione na liczbę, możemy dzielić się nim bezpiecznie. __id__jest krótszy niż .to_s.ord, wtedy po prostu zawieramy resztę kodu, którego nie chcemy w 's, ustawiamy qna getsi printto ze wszystkimi innymi.

s=1/2;1//2..."/.__id__;'...';q=gets
print(q)

Wypróbuj online!

Python 2: A005843

Używając standardowej sztuczki, aby odróżnić 2 od 3 i dołączając rzeczy, których nie chcemy """i komentarze.

s=1/2;1//2;q=int(input())*([2,3][s>0]);"""/...`"""
print(q)

Wypróbuj online!

Python 3: A008585

Wypróbuj online!

JavaScript (przeglądarka ES6): A000027

Dość proste dla JS, okazało się, że łatwiej było nie korzystać z istniejących printi wybierać SpiderMonkey, ale może to być również możliwe.

s=1/2;1//2;q=int(input())*([2,3][s>0]);"""/.__id__;'
alert(+prompt()+1);`"""#=;#';q=gets
print(q)#)|<>%2)#`

Dom Hastings
źródło
3

6 języków: Cubically 5/6/7/8/9/10, 44 40 32 bajtów

Przekreślone 44 jest nadal regularne 44; (

DDR'DDR$:_0?{R'DDRDDB'%0}!{+00%}

To drukuje:

Wyjaśnienie:

DDR'DDR$:_0?{R'DDRDDB'%0}!{+00%}
DDR'DDR                            get top face sum to 2 (all versions)
       $:                          read input and set notepad to it
         _0                        set notepad to input modulo 2
           ?{...........}          if truthy
             R'DDRDD                reset cube
                    B'              set top face to Cubically version number
                      %0            print top face
                         !{....}   if falsy
                           +00      add 2 to notepad twice
                              %     print

Wypróbuj online! (Cubical 6x6x6)

MD XF
źródło