Nasihat untuk ruby

13

Bagaimana saya bisa mempersingkat:

p=gets.to_i
a=gets
b=gets.to_i

Jika input saya adalah integer, diikuti oleh string, diikuti oleh integer?

Zawada
sumber
4
Selamat datang di PPCG!
Martin Ender
Untuk orang-orang yang akan mengatakan bahwa ini di luar topik, jika Anda ingin berdebat, baca meta lalu pesan saya.
Stan Strum

Jawaban:

7

Gunakan ARGV ($ *) dan penugasan massal

(penafian: Saya tidak tahu Ruby, tetapi ini bekerja pada TIO )

p,a,b=$*
p=p.to_i
b=b.to_i

28 26 byte, bukan 30 (terima kasih kepada Snack untuk menunjukkan trik $ *)

AdmBorkBork
sumber
ARGV juga dapat diakses sebagai $ * yang menghemat dua byte
Snack
4
@Snack Hehe, mainkan kiat jawaban :)
AdmBorkBork
6

Gunakan lambda

Jawaban biasanya diizinkan sebagai fungsi lambda dengan input / output Anda menjadi parameter / nilai pengembalian lambda, sehingga Anda dapat melakukan ini:

->p,a,b{...}

Jika Anda menetapkan ini ke variabel fmaka itu akan disebut sebagai

f[p,a,b]

Biasanya tidak masalah untuk mengasumsikan jenis input juga, tetapi untuk amannya Anda dapat menyebutkannya dalam jawaban Anda.

Meta post yang relevan tentang metode input / output yang dapat diterima

Camilan
sumber
6

Jika Anda memerlukan program lengkap dengan stdin / stdout io karena alasan tertentu, yang terpendek yang dapat Anda lakukan adalah menggunakan -nbendera untuk mempersingkat satu panggilan gets.to_ike eval$_:

p=eval$_
a=gets
b=gets.to_i

The -nbendera mengelilingi kode Anda dengan while gets ... end, sehingga program akan loop jika lebih masukan disuplai dari mengkonsumsi program anda.

Pavel
sumber