Quine yang dapat diindeks

14

Tujuan dari tantangan ini adalah membuat program yang mengeluarkan huruf ke-n dari kode sumbernya di mana n diberikan sebagai input ke program. Seperti kebanyakan tantangan quine, Anda tidak diperbolehkan membaca kode sumber Anda sebagai file atau menggunakan fungsi quin bawaan.

Memasukkan

Integer 0 <= n <len (program).

Keluaran

Karakter ke-n (bukan byte) dari program Anda.

Kemenangan

Seperti kebanyakan pertanyaan codegolf, Anda memenangkan tantangan dengan menggunakan jumlah byte terendah untuk menyelesaikan tantangan.

Bonus

-5% Jika program Anda mendukung gaya python indeks negatif (mis. -1 akan menjadi karakter terakhir dari program Anda). Jika digunakan dengan bonus di bawah ini, rentang Anda harus mendukung indeks negatif.
-20% Jika program Anda mendukung rentang sebagai input (format apa pun) selain persyaratan di atas.
-25% Jika program Anda menyelesaikan kedua bonus.

Papan peringkat

Berikut ini adalah Stack Snippet untuk menghasilkan leaderboard biasa dan gambaran umum pemenang berdasarkan bahasa.

Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:

# Language Name, N bytes

di mana Nukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:

# Ruby, <s>104</s> <s>101</s> 96 bytes

Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:

# Perl, 43 + 2 (-p flag) = 45 bytes

Anda juga dapat membuat tautan nama bahasa yang kemudian akan muncul di cuplikan papan peringkat:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes

TheNumberOne
sumber
Apakah quine builtin terlarang?
Mego
@Mego ya, benar.
TheNumberOne
Apakah bonus menumpuk (100% - 20% - 5% = 75%) atau berlipat ganda (100% * 80% * 95% = 76%)?
ETHproduksi
Apakah program yang tidak benar-benar membaca jumlah input mereka?
Neil
@ ETHProduk Stack.
TheNumberOne

Jawaban:

12

Pyth, 0,75

(Kebetulan juga merupakan polyglot CJam, dan mungkin banyak bahasa lainnya.)

0

Mengharapkan masukan pada STDIN:

llama@llama:~$ echo 0..0 | pyth -c '0'
0

Setiap digit tunggal berfungsi, tentu saja. Bukan tantangan yang paling menarik di Pyth.

Gagang pintu
sumber
1
Kebetulan poliglot juga ada di banyak bahasa lain.
Mama Fun Roll
bekerja di PlatyPar juga
Cyoce
1
dan Japt, dan Jolf, dan hampir setiap bahasa dengan output implisit
ETHproduksi
9
Dan PHP, yang jelas merupakan bahasa terbaik untuk bermain golf.
user253751
8

Javascript ES6, 31 byte

$=_=>`$=${$};$()`[prompt()];$()

Penjelasan

Kerangka kerja standar quine:

$=_=>`$=${$};$()`;$()

[prompt()], yang merupakan addon, mendapatkan nilai pada indeks input dari string quine yang dihasilkan.

Mama Fun Roll
sumber
6

𝔼𝕊𝕄𝕚𝕟, 9 karakter / 19 byte

⟮ɕṡ+ᶈ0)⎖ï

Try it here (Firefox only).

Ay, byte ke-19!

0 bekerja juga (dan jauh lebih baik), tapi terlalu sepele untuk seleraku.

Selain itu, ℹ ï,⧺ïjuga berfungsi, tetapi fungsi quine tidak diizinkan.

Penjelasan

Kerangka kerja standar quine adalah ⟮ɕṡ+ᶈ0.

)⎖ï mengambil string quine yang dihasilkan dan mendapatkan karakter di indeks input.


Solusi bonus, 11,4 karakter / 25,65 byte

⟮ᵖ…ɕṡ+ᶈ0;ôᵍï

Try it here (Firefox only).

Yang ini memenuhi syarat untuk bonus 5%, tetapi masih belum mengalahkan kiriman asli saya.

Penjelasan

Yang ini menggunakan tumpukan. ᵖ…ɕṡ+ᶈ0;hanya mendorong karakter individual string quine ke stack, dan ôᵍïlangsung menampilkan karakter pada indeks input (positif atau negatif) di stack.

Mama Fun Roll
sumber
Mengapa Anda belum membuat enkode untuk ini?
Addison Crump
Pembaruan datang terlalu cepat! Tidak bisa mengikuti!
Mama Fun Roll
5

CJam, 12,35 byte

{s"_~"+ri=}_~

Program ini panjangnya 13 byte dan memenuhi syarat untuk bonus × 0,95 . Cobalah online!

Bagaimana itu bekerja

{         }      Define a code block.
           _~    Push a copy and execute the copy.
 s               Cast the original code block to string.
  "_~"+          Append "_~".
       ri        Read an integer from STDIN.
         =       Retrieve the character at that index.
Dennis
sumber
4
Tentu saja, 0akan sedikit lebih pendek ...
Dennis
4

Ruby, 53 * 0.75 = 39.75

$><<(<<2*2+?2)[eval gets]
$><<(<<2*2+?2)[eval gets]
2

Menghasilkan string HEREDOC dibatasi oleh 2pada barisnya sendiri, menggabungkannya ( *2) dan kemudian menambahkan di final 2melalui karakter literal. Mengirisnya menggunakan Ruby bawaan String#[], yang mendukung bilangan bulat positif, bilangan bulat negatif, dan rentang (input dalam formulir m..n). $><<adalah output. ( putsakan membutuhkan ruang tambahan di sini).

histokrat
sumber
Saya pikir gets.to_iakan melakukan hal yang sama eval gets, dan menjadi lebih jelas. Ini tidak akan menangani input non-integer, tapi itu tidak perlu
Fund Monica's Lawsuit
Itu biasanya yang akan saya lakukan, tetapi ini mendapat bonus untuk menangani Ranges. (Juga bonus tidak ada untuk turing lengkap).
histokrat
Ah, aku merindukan itu. Salahku.
Dana Gugatan Monica
3

Ruby, 38,25 byte

a="a=%p;$><<(a%%a)[eval gets]";$><<(a%a)[eval gets]

Mendukung indeks dan rentang negatif. Saya secara terang-terangan mengambil keduanya $><<dan evaltrik dari histokrat, dan trik quine adalah milik orang lain, jadi saya akan membuat CW ini.

Lynn
sumber
1

Python 2, 46,55 byte

a="a=%r;print(a%%a)[input()]";print(a%a)[input()]

Mendukung indeks negatif.

Lynn
sumber
Ya, ini mendukung indeks negatif.
kucing
1

Haskell, 122 byte

main=getLine>>= \i->putChar$(!!(read i))$p++show p where p="main=getLine>>= \\i->putChar$(!!(read i))$p++show p where p="

Tidak Disatukan:

main=getLine>>= \i->putChar$(!!(read i))$p++show p
 where p="main=getLine>>= \\i->putChar$(!!(read i))$p++show p\n where p="
HEGX64
sumber
1

Menuju 93, 5 byte

Ini sangat (sangat) terlambat tetapi saya tetap akan mempostingnya:

&0g,@
Daniel
sumber
1
Ini di ujung menjadi IMO legal. Itu tidak membaca kode sumbernya sendiri sebagai file , tetapi ia membaca kode sumbernya sendiri.