Совет для рубина

13

Как я могу сократить:

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

Если мой ввод - целое число, за которым следует строка, за которой следует целое число?

Zawada
источник
4
Добро пожаловать в PPCG!
Мартин Эндер
Для людей, которые скажут, что это не по теме, если вы хотите поспорить, прочитайте мета и затем напишите мне.
Стэн Струм

Ответы:

7

Используйте ARGV ($ *) и массовое назначение

(отказ от ответственности: я не знаю Ruby, но это работает на TIO )

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

28 26 байт вместо 30 (спасибо Snack за указание на трюк $ *)

AdmBorkBork
источник
ARGV также доступен как $ *, что экономит два байта
Закуска
4
@ Снэк Хе-хе, игра в гольф с подсказками :)
AdmBorkBork
6

Используйте лямбду

Ответы, как правило, допускаются как лямбда-функции, а ваш ввод / вывод является параметрами / возвращаемым значением лямбда, так что вы можете сделать это:

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

Если бы вы присвоили это переменной, fто это будет называться как

f[p,a,b]

Как правило, хорошо также предполагать типы входов, но для большей безопасности вы можете упомянуть об этом в своем ответе.

Соответствующий мета-пост о приемлемых методах ввода / вывода

Легкая закуска
источник
6

Если по какой-то причине вам нужна полная программа с stdin / stdout io, самое короткое, что вы можете сделать, это использовать -nфлаг, чтобы сократить один вызов gets.to_ito eval$_:

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

-nФлаг окружает ваш код с while gets ... end, так что цикл программа будет , если больше вход подается , чем ваша программа потребляет.

Павел
источник