Conselhos para ruby

13

Como diminuir:

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

Se minha entrada for um número inteiro, seguido por uma sequência, seguido por um número inteiro?

Zawada
fonte
4
Bem-vindo ao PPCG!
Martin Ender
Para as pessoas que dirão que isso está fora de tópico, se você quiser argumentar, leia a meta e depois me envie uma mensagem.
Stan Strum 24/10

Respostas:

7

Use ARGV ($ *) e atribuição em massa

(aviso: não conheço Ruby, mas isso funciona no TIO )

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

28 26 bytes em vez de 30 (obrigado ao Snack por apontar o truque $ *)

AdmBorkBork
fonte
O ARGV também pode ser acessado como $ *, que economiza dois bytes
Snack
4
@Snack Hehe, golfe uma resposta dicas :)
AdmBorkBork
6

Use um lambda

As respostas normalmente são permitidas como funções lambda, com sua entrada / saída sendo os parâmetros / valor de retorno do lambda, para que você possa fazer isso:

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

Se você atribuiu isso a uma variável f, ela seria chamada como

f[p,a,b]

Geralmente, é bom assumir os tipos de entradas também, mas, para estar seguro, você pode mencioná-lo na sua resposta.

Meta post relevante sobre métodos aceitáveis ​​de entrada / saída

Lanche
fonte
6

Se você precisar de um programa completo com stdin / stdout io por algum motivo, o mais curto possível é usar o -nsinalizador para encurtar uma chamada gets.to_ipara eval$_:

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

O -nsinalizador envolve o código while gets ... end, para que o programa faça um loop se mais entrada for fornecida do que o programa consome.

Pavel
fonte