Poliglot OEIS (tidak konstan)!


24

Penafian: Ini sangat terinspirasi oleh "Polyglot the OEIS!" tetapi memperbaiki masalah yang menyebabkan penutupan (lihat bagian output) dan diposting kembali untuk tidak membatalkan jawaban.

pengantar

Kita semua tahu dan menyukai ensiklopedia online dari integer sequence ( OEIS ). Jadi bagaimana jika kita membuat versi offline dari urutan yang menarik? Yah, itu akan agak terlalu mudah, bukankah begitu dan bagaimana Anda memilih urutan dengan antarmuka standar kami !? Tidak. Kami membutuhkan solusi yang lebih mudah untuk ini. Poliglot!

Memasukkan

Input Anda akan berupa bilangan bulat non-negatif n.

Keluaran

Output Anda akan menjadi

  • The n-th masuknya urutan Oei OR
  • nEntri pertama dari urutan OEIS.

Anda dapat menggunakan indeks berbasis 1 atau 0 sesuai keinginan.

Untuk tidak membuat pertanyaan ini, duplikat urutan konstan printer integer serbaguna dilarang. Ini juga harus meningkatkan tingkat kesulitan pengiriman dan menghindari solusi "membosankan";)

Urutan tidak konstan jika ada dua anggota urutan yang tidak sama.

Uhm, jadi di mana Tantangannya?

Anda harus polyglot fungsi di atas. Itu jika Anda mendukung bahasa A, B dan C semua harus menerapkan urutan OEIS yang berbeda. Pilihan urutan tidak terbatas kecuali bahwa Anda memerlukan yang berbeda untuk semua bahasa.

Yaitu, jika Anda menjalankan program yang disediakan dalam bahasa A, maka urutan X akan dihasilkan, jika Anda menjalankan program yang disediakan dalam bahasa B, maka urutan Y akan dihasilkan (dengan X! = Y) dan jika Anda menjalankan program yang disediakan dalam bahasa C, maka urutan Z akan dihasilkan (dengan X! = Z && Y! = Z).

Yang menang?

Jawaban dengan pasangan urutan / bahasa terbanyak menang. Tie-breaker pertama adalah ukuran kode (dalam byte) dengan yang lebih rendah lebih baik. Tie-breaker kedua adalah waktu pengiriman dengan sebelumnya menjadi lebih baik.

Ada Kata / Aturan akhir?

  • Anda harus mendeklarasikan bahasa mana yang akan menghasilkan urutan mana.
  • Aturan I / O standar berlaku.
  • Jika pengkodean berbeda digunakan antara bahasa, kedua program harus menggunakan urutan byte yang sama.
  • Revisi Bahasa (Python 2/3) memang dihitung sebagai bahasa yang berbeda. Implementasi bahasa yang berbeda (seperti Browser JS vs Node.js) juga dihitung sebagai bahasa yang berbeda.
  • Celah standar berlaku.

4
Posting ini dilakukan sesuai dengan Tanya Jawab Meta ini .
SEJPM

Bisakah bahasa yang berbeda memiliki pengindeksan yang berbeda?
Stephen

2
@ LANGKAH ya mereka bisa.
SEJPM

Jawaban:


16

3 bahasa (1 byte) - Pyth ( A001477 ), MATL ( A000027 ), Braingolf ( A000217 )

Q

Bagaimana?

Q melakukan hal berikut:

  • Dalam MATL, artinya + 1, jadi pada dasarnya dievaluasi input + 1.

  • Dalam Pyth, itu berarti input, jadi itu hanya output input.

  • Dalam Braingolf, itu adalah built-in untuk bilangan segitiga.

Mini-polyglot

Pyth dapat digantikan oleh salah satu bahasa berikut: GolfScript , Pyke , Brachylog atau Brain-Flak .


1
baik Anda tentu memilih bahasa yang tepat untuk yang satu ini +1: P
HyperNeutrino

1
@HyperNeutrino Saya baru saja mengirim jawaban saya dari sana, tapi saya memilih bahasa yang sangat bagus saat itu, jadi ya: P - Terima kasih!
Tn. Xcoder

Ingat, ini adalah sejumlah bahasa, bukan kode-golf: P
Stephen

@ LANGKAH Saya pikir 3 masuk akal.
Tn. Xcoder

14

10 bahasa, 122 byte

#|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%:+.

Saya pasti bisa menambahkan banyak lagi. 1-diindeks kecuali ditentukan lain.

Perhatikan bahwa saya mungkin tidak terkini tentang tautan TIO ketika saya yakin perubahan yang lebih baru tidak memengaruhi program yang lebih lama - Anda dapat mengujinya jika Anda mau, tetapi menyalin 10+ tautan TIO baru setiap kali saya melakukan perubahan akan melelahkan setelah sedikit. Saya akan menyalin yang baru setiap 5 pembaruan.

cQuents v0, A000007

Kode yang relevan: #|A=1:0;

#|Amenangkap input dan ada untuk komentar Python. =1berarti item pertama adalah 1, :0berarti sisanya0 , menghasilkan ninput istilah yang diberikan n. cQuents v0 memiliki bug / fitur aneh yang ketika token yang tidak terduga tetapi valid, seperti ;, dibaca, menyebabkan parsing berakhir.

Cobalah online!

PingPong, A001478

Kode yang relevan: #|A=1:0;~@

Keluaran melalui kode keluar.Diindeks 0.

#melewatkan char berikutnya. =tidak melakukan apa pun di sini. 1mendorong 1, dan :mencetak 1ke STDOUT. 0mendorong 0. )tidak melakukan apa-apa. ;mendorong input, ~muncul dan mendorong -n-1.@berakhir. Kode keluar adalah bagian atas tumpukan.

Cobalah online!

axo, A001477

Kode yang relevan: }{\

Diindeks 0. }membaca dan mendorong bilangan bulat dari STDIN (memerlukan trailing baris baru karena alasan tertentu), {mencetak bagian atas tumpukan, dan \mengakhiri program. Saya tidak yakin apa yang dilakukan karakter sebelumnya, tetapi tidak ada yang penting dalam kasus ini.

Cobalah online!

brainfuck, A000027

Kode yang relevan: ,[.,]

Program kucing sederhana dari esolangs.org. Menghasilkan input.

Cobalah online!

> <>, A000030

Kode yang relevan: #...;oi

# cermin dan membungkus ke kanan, yang mengarahkannya untuk membaca io; , yang menampilkan karakter pertama dari input. Diindeks 0.

Cobalah online!

Ruby, A023443

Kode yang relevan: print (0 and gets.to_i-1...)

Diindeks 0. Mencetak input minus 1. 0benar di Ruby, tetapi falsey dengan Python.

Cobalah online!

Python 3, A000578

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

Merobek posting asli HyperNeutrino, tetapi ini adalah polyglot yang cukup terkenal. quit()mengakhiri program.

Cobalah online!

Python 2, A000290

Kode yang relevan:

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

#coding:utf-8diperlukan untuk barang-barang Arang untuk bekerja. Juga merobek pos asli HyperNeutrino. quit()mengakhiri program.

Cobalah online!

Arang, A001489

Kode yang relevan: ⎚I±N»

Diindeks 0. membersihkan konsol (Charcoal mencetak ASCII apa adanya) danI±N mencetak negatif dari input.»adalah kesalahan parse dan menghentikan program.

Terima kasih kepada ASCII-only untuk bantuan dalam obrolan.

Cobalah online!

Kardinal, A020725

Kode yang relevan:

 x
x%:+.

Tambahkan 1 ke input, dan remas semua pointer lainnya.

Cobalah online!


Sepertinya kode keluar untuk PingPong adalah ToS, ia membungkus 2 ^ 32 seperti yang diharapkan dari integer bertanda 64-bit.
Jonathan Allan

@ Jonathan Allan keren, terima kasih.
Stephen

Apakah Anda benar-benar harus keluar dengan kesalahan parse jika kode Arang sudah di akhir program?
MD XF

@ MDXF tidak, saya berencana menambah lebih banyak di akhir
Stephen

10

5 bahasa ( 05AB1E , Sebenarnya , CJam , Jelly , MATL ), 7 byte

UD>li)+

Cobalah online !:

  • 05AB1E : urutan A000027 (bilangan bulat positif: a ( n ) = n ; berbasis 1)
  • Sebenarnya : urutan A023443 (bilangan bulat non-negatif termasuk 1: a ( n ) = n −1; berbasis 0)
  • Cjam : urutan A020725 (bilangan bulat positif tidak termasuk 1: a ( n ) = n +1; 1-based)
  • Jelly : urutan A005843 (angka genap non-negatif: a ( n ) = 2 * n ; berbasis 0)
  • MATL : urutan A000290 (kotak: a ( n ) = n 2 ; 1-based). Keluar dengan kesalahan setelah menghasilkan output.

7

3 bahasa: Proton, A000583 ; Python 3, A000578 ; Python 2, A000290

Proton , 49 byte

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

Cobalah online!

Python 3 , 49 byte

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

Cobalah online!

Python 2 , 49 byte

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

Cobalah online!

Penjelasan

Proton tidak memiliki '''...'''string, sehingga (''',''')menjadi ('' ',' ''), yang entah bagaimana tidak menyebabkan masalah. Ini mengevaluasi '', membuat (''',''')!=','mengevaluasiTrue .

Python memang memiliki string ini, sehingga (''',''')hanya ','begitu (''',''')!=','mengevaluasi keFalse .

Python 2 menggunakan pembagian lantai untuk bilangan bulat, jadi 1/2>0salah dalam Python 2 dan true dalam Python 3.


Anda mungkin dapat menambahkan beberapa langs lagi jika Anda mengubah garis Python menjadi 1//1;print(int(input())**(2+(1/2>0)+((''',''')!=',')));quit()dan kemudian menambahkan bahasa seperti JavaScript sesudahnya
Stephen

@ LangkahHen Tentu, itu mungkin berhasil, terima kasih. Saya akan melakukannya setelah saya menambahkan JavaScript: P
HyperNeutrino

6

5 Bahasa, 107 byte

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

Perl: A000035

Menggunakan =sebagai pembatas untuk s///sarana kita dapat dengan mudah mengecualikan kode kita tidak ingin, dan menggunakan )sebagai pembatas untuk q{}sarana setelah printing qdalam semua bahasa lainnya, kita hanya dapat bekerja pada <>langsung, tanpa mengkhawatirkan.

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

Cobalah online!

Ruby: A001477

Di Ruby, //sebenarnya /(dibagi dengan) /.../(pertandingan regex), jadi selama regex diakhiri, dan dikonversi ke angka, kita dapat membaginya dengan aman. __id__lebih pendek dari .to_s.ord, maka kita hanya berisi sisa kode yang tidak kita inginkan dalam 's, set qke getsdan printdengan yang lainnya.

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

Cobalah online!

Python 2: A005843

Menggunakan trik standar untuk membedakan 2 dari 3 dan melampirkan hal-hal yang tidak kita inginkan """dan komentar.

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

Cobalah online!

Python 3: A008585

Cobalah online!

JavaScript (browser ES6): A000027

Cukup mudah untuk JS, itu berakhir menjadi lebih mudah untuk tidak menggunakan kembali yang sudah ada printdan pergi untuk SpiderMonkey, tapi itu juga mungkin.

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


3

6 bahasa: Cubically 5/6/7/8/9/10, 44 40 32 byte

Dicoret 44 masih teratur 44; (

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

Ini mencetak:

Penjelasan:

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

Cobalah online! (Cubically 6x6x6)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.