Nomor input; Nomor jalur keluaran


18

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 ndan 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
Ini adalah , jadi pengiriman dengan byte paling sedikit akan menang!



1
Saya ingin melihat ini selesai dalam 99 :)
Jonathan Allan

2
@JonathanAllan Anda mungkin mengalami masalah di mana tidak setiap baris unik
MildlyMilquetoast

"Baris tidak bisa menjadi komentar, tapi saya kira tidak ada op-op yang efektif adalah OK" (tapi jujur, kadang-kadang sulit untuk mengatakan apakah sebuah baris harus dianggap sebagai no-op atau tidak; misalnya jawaban Ruby saya memiliki baris terakhir hanya menjadi braket keriting untuk mengakhiri lambda)
Nilai Tinta

Judul mungkin lebih baik "Nomor input; Jalur output dengan nomor baris"? Atau bahkan "Output line by number".
Paŭlo Ebermann

Jawaban:


16

Vim, 7 byte

1
2
3
4

Cobalah online!

Sejauh yang saya tahu, ini sesuai dengan semua aturan. Dalam vim secara default, program kosong mencetak semua input. Sejak

<N><CR>

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.


2
Akan bekerja dalam bahasa lain - tambahan pertama: Pyth
Jonathan Allan

Tunggu, byte? Vim diukur dengan penekanan tombol.
Pavel

@ JonathanAllan Sepertinya Pyth dikonfigurasi salah pada TIO. Jika Anda melihat output debug, Anda dapat melihat bahwa kode yang benar-benar dijalankan adalah hal di bidang argumen, bukan hal di bidang kode. Inilah yang sebenarnya menjalankan kode itu.
isaacg


2
Ini juga berfungsi di Brachylog
Fatalize

9

Ruby, 71 70 66 byte

Cobalah online!

->n{
k=["}", "k[-n]%%k.inspect", "k=%s", "->n{"]
k[-n]%k.inspect
}

Mode "Kecurangan": 7 + 1 = 8 byte

Membutuhkan -pflag untuk +1 byte. Secara harfiah copy dari jawaban V . Mencetak nomor yang dimasukkan; seluruh program secara efektif hanya tanpa operasi.

1
2
3
4

Apa yang -pharus dilakukan
Pavel

@Pavel Ini menyebabkan program membaca setiap baris STDIN $_, menjalankan konten program, dan kemudian mencetak konten $_ke layar (berulang per baris STDIN). Karena program tidak melakukan apa-apa, itu praktis hanya Unix cat, tetapi itu berarti bahwa setiap input dari 1-4 akan menampilkan isi baris, karena setiap baris secara harfiah nomor barisnya.
Nilai Tinta

@Pavel untuk informasi lebih lanjut lihat robm.me.uk/ruby/2013/11/20/ruby-enp.html
Value Ink

Saya suka jawaban "curang" Anda. Perl juga memiliki -p, tetapi 1\n2\n3\n4bukan program Perl yang valid.
ThisSuitIsBlackNot

7

Haskell, 69 59 byte

(lines(s++show
 s)
 !!)
s="\n(lines(s++show\n s)\n !!)\ns="

Berdasarkan 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.


Apakah ini melanggar aturan 6? :)
Albert Renshaw

Pengindeksan garis tidak seharusnya berbasis 0, aturan secara eksplisit mengharuskan pengindeksan 1.
Nilai Tinta

@AlbertRenshaw: fixed
nimi

@ValueInk: fixed
nimi

@nimi lol, " solusi " seperti ini adalah mengapa saya tergoda untuk menjadikan ini kontes popularitas haha. Meskipun demikian, kerja bagus!
Albert Renshaw

5

PowerShell , 184 172 byte

$v=0,
'$v=0,',
"'`$v=0',",(($q='"{0}`$v=0{0},",(($q={0}{1}{0})-f([char]39),$q)')-f([char]39),$q),
(($z='(($z={0}{1}{0})-f([char]39),$z;$v[$args]')-f([char]39),$z);$v[$args]

Cobalah online!

Penjelasan

Mulai dengan membuat array $vdi baris pertama. Pada baris yang sama, 0elemen ( th) pertama diatur ke 0, 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 (indeks 3) 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.


4

Python 2, 104 73 67 byte

Terima kasih kepada Jonathan Allan karena telah menghemat 6 byte!

s=\
['print s[input()]or s', 's=\\', 0, 'exec s[', '0]']
exec s[
0]

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):

1
s=\
['print s[-input()]or s', 0, 's=\\', 1]
print s[-input()]or s

Hemat 6 dengan menyingkirkan n: TIO
Jonathan Allan

@ovs persyaratan tantangan membutuhkan 4 baris kode sumber minimum: V
Value Ink

2

CJam , 19 18 17 byte

1
{'_'~]ri(=}
_
~

Cobalah online!

Berdasarkan standar CJam-quine. The {...}_~menjalankan ...dengan blok itu sendiri di stack (dan dalam hal ini, juga 1di bawah itu). Maka kita lakukan:

'_'~  e# Push the third and fourth line.
]     e# Wrap all four lines in a list.
ri    e# Read input and convert to integer.
(=    e# Use as index into the lines.

Ini indah. Juga seperti akhir senyum dari logika (= haha
Albert Renshaw

1

PHP, 261 byte

<?php function f($l){
$a="aWYoJGw9PTEpJG09Ijw/cGhwIGZ1bmN0aW9uIGYoXCRsKXsiO2lmKCRsPT0yKSRtPSJcJGE9XCIkYVwiOyI7aWYoJGw9PTMpJG09IlwkYj1cIiR";
$b="iXCI7IjtpZigkbD09NCkkbT0iZXZhbChiYXNlNjRfZGVjb2RlKFwkYS5cJGIpKTt9Pz4iO2VjaG8gJG07";
eval(base64_decode($a.$b));}?>

Cobalah online !!

String yang disandikan adalah:

if($l==1)$m="<?php function f(\$l){";
if($l==2)$m="\$a=\"$a\";
if($l==3)$m="\$b=\"$b\";
if($l==4)$m="eval(base64_decode(\$a.\$b));}?>";
echo $m;

Menarik! Apa string yang disandikan?
Albert Renshaw

1
@Albert Renshaw Saya telah mengeditnya untuk menambahkan versi yang diterjemahkan dari string.
Divcy

0

Perl, 52 byte

$_=q{print+(split/
/,"\$_=q{$_};
eval")[<>-1]};
eval

Ini adalah variasi sederhana pada quine klasik

$_=q{print"\$_=q{$_};eval"};eval

"Payload" ada splitdi baris baru dan baris yang benar dipilih dengan mengindeks ke dalam daftar yang dihasilkan.

Perl, 49 48 byte (tidak bersaing)

#!/usr/bin/perl -d:A
sub DB'DB{
print${"_<$0"}[<>]}
1

38 byte untuk kode (tidak termasuk shebang tetapi termasuk -d:A) ditambah 10 byte untuk nama file, yang harus Devel/A.pm. The Develdirektori harus dalam @INC.

Secara teknis, ini melanggar Aturan # 4 karena -d:Amenyebabkan 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.

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.