Consejos para rubí

13

¿Cómo puedo acortar:

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

Si mi entrada es un entero, seguido de una cadena, seguido de un entero?

Zawada
fuente
44
Bienvenido a PPCG!
Martin Ender
Para las personas que dirán que esto está fuera de tema, si quieres discutirlo, lee el meta y luego envíame un mensaje.
Stan Strum

Respuestas:

7

Use ARGV ($ *) y asignación masiva

(descargo de responsabilidad: no conozco a Ruby, pero esto funciona en TIO )

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

28 26 bytes en lugar de 30 (gracias a Snack por señalar el truco de $ *)

AdmBorkBork
fuente
También se puede acceder a ARGV como $ *, lo que ahorra dos bytes
Snack
44
@Snack Hehe, jugando al golf una respuesta de consejos :)
AdmBorkBork
6

Usa una lambda

Las respuestas generalmente se permiten como funciones lambda con su entrada / salida como los parámetros / valor de retorno de la lambda, por lo que puede hacer esto:

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

Si asignó esto a una variable, fentonces se llamaría como

f[p,a,b]

En general, también está bien asumir los tipos de las entradas, pero para estar seguro, puede mencionarlo en su respuesta.

Meta publicación relevante sobre métodos de entrada / salida aceptables

Bocadillo
fuente
6

Si necesita un programa completo con stdin / stdout io por alguna razón, lo más breve que puede hacer es usar el -nindicador para acortar una llamada gets.to_ia eval$_:

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

La -nbandera rodea su código while gets ... end, por lo que el programa se repetirá si se proporciona más entrada de la que consume su programa.

Pavel
fuente