Golf kode
Cerita yang benar-benar nyata : Saya seorang kontraktor yang bekerja di situs web www. Sky.Net dan salah satu tugas kami untuk membuat beberapa program sadar diri atau sesuatu, saya tidak tahu saya tidak benar-benar mendengarkan bos. Bagaimanapun juga dalam upaya untuk membuat kode kita lebih sadar diri kita membutuhkan IT untuk dapat mengetahui kode apa yang ada di setiap nomor baris.
Tantangan
Buat program atau fungsi yang mengambil input n
dan mengembalikan kode program atau fungsi tersebut secara online n
.
Aturan
➊ Panjang program atau fungsi Anda harus minimal 4 baris. Setiap baris harus unik.
➋ Anda dapat berasumsi bahwa input akan selalu berupa bilangan bulat positif lebih besar dari atau sama dengan 1 dan kurang dari atau sama dengan jumlah baris dalam program / fungsi Anda.
➌ Baris pertama dalam program / fungsi Anda adalah baris 1, bukan baris 0.
➍ Anda tidak dapat mengakses file tempat program Anda aktif. (Jika seseorang harus bertanya "Bukankah ini melanggar aturan teknis # 4"; mungkin itu)
➎ Baris tidak boleh kosong (ini termasuk spasi jika spasi tidak melakukan apa pun dalam bahasa Anda)
➏ Baris tidak boleh // komentar (/ * gaya <! - apa saja)
Ini adalah tantangan seperti quine
Ini adalah kode-golf , jadi pengiriman dengan byte paling sedikit akan menang!
Jawaban:
Vim, 7 byte
Cobalah online!
Sejauh yang saya tahu, ini sesuai dengan semua aturan. Dalam vim secara default, program kosong mencetak semua input. Sejak
Adalah noop, tidak ada yang mengubah teks input, dan karena setiap input cocok dengan output yang diinginkan, pendekatan yang sama ini bekerja dengan sejumlah baris.
sumber
Ruby,
717066 byteCobalah online!
Mode "Kecurangan": 7 + 1 = 8 byte
Membutuhkan
-p
flag untuk +1 byte. Secara harfiah copy dari jawaban V . Mencetak nomor yang dimasukkan; seluruh program secara efektif hanya tanpa operasi.sumber
-p
harus dilakukan$_
, menjalankan konten program, dan kemudian mencetak konten$_
ke layar (berulang per baris STDIN). Karena program tidak melakukan apa-apa, itu praktis hanya Unixcat
, tetapi itu berarti bahwa setiap input dari 1-4 akan menampilkan isi baris, karena setiap baris secara harfiah nomor barisnya.-p
, tetapi1\n2\n3\n4
bukan program Perl yang valid.Haskell,
6959 byteBerdasarkan quine Haskell standar. Ekspresi pertama (tersebar di tiga baris pertama) adalah fungsi tanpa nama yang mengambil garis ke-n dari string kuinifikasi
s
(s++show s
). +2 byte untuk membuat pengindeksan berbasis-1 (seperti aturan yang tidak perlu).Untuk mencobanya secara online! versi saya harus memberi nama fungsi yang menambahkan 4 byte.
sumber
PowerShell ,
184172 byteCobalah online!
Penjelasan
Mulai dengan membuat array
$v
di baris pertama. Pada baris yang sama,0
elemen ( th) pertama diatur ke0
, dan koma,
melanjutkan definisinya.Baris berikutnya mengatur elemen berikutnya (
1
) dari array ke string yang mewakili konten baris pertama skrip, sehingga$v[1]
mengembalikan baris pertama.Baris ke-3 pertama-tama menetapkan elemen ke-3 dari array (indeks
2
) ke string yang mewakili baris ke-2 dari skrip, kemudian pada baris yang sama mengatur elemen ke-4 (indeks3
) menggunakan cuplikan quine yang menggunakan operator format (-f
) untuk menggantikan contoh tertentu dari tanda kutip tunggal ([char]39
) dan string templat format, ke dalam dirinya sendiri, untuk mereproduksi keseluruhan baris ke-3.Baris 4 pada dasarnya melakukan hal yang sama, tetapi juga mengakhiri pembuatan array dan kemudian mengindeksnya menggunakan argumen yang disediakan.
sumber
Python 2,
1047367 byteTerima kasih kepada Jonathan Allan karena telah menghemat 6 byte!
Sunting: Jumlah byte yang sama, tapi saya suka solusi ini lebih baik
Cobalah online!
Versi Ruby dari jawaban Ruby Nilai Tinta .
Jawaban yang lebih lama (67 byte):
sumber
n
: TIOCJam ,
191817 byteCobalah online!
Berdasarkan standar CJam-quine. The
{...}_~
menjalankan...
dengan blok itu sendiri di stack (dan dalam hal ini, juga1
di bawah itu). Maka kita lakukan:sumber
PHP, 261 byte
Cobalah online !!
String yang disandikan adalah:
sumber
Perl, 52 byte
Ini adalah variasi sederhana pada quine klasik
"Payload" ada
split
di baris baru dan baris yang benar dipilih dengan mengindeks ke dalam daftar yang dihasilkan.Perl,
4948 byte (tidak bersaing)38 byte untuk kode (tidak termasuk shebang tetapi termasuk
-d:A
) ditambah 10 byte untuk nama file, yang harusDevel/A.pm
. TheDevel
direktori harus dalam@INC
.Secara teknis, ini melanggar Aturan # 4 karena
-d:A
menyebabkan file diurai dua kali, jadi ini solusi yang tidak bersaing.Ia menggunakan pengait debugger untuk mengakses baris-baris file, yang perl menyimpan dalam
@{"_<$filename"}
array pada waktu kompilasi.sumber