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?


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 $ *)


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


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.

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.