Conseils pour le rubis

13

Comment puis-je raccourcir:

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

Si mon entrée est un entier, suivi d'une chaîne, suivi d'un entier?

Zawada
la source
4
Bienvenue chez PPCG!
Martin Ender
Pour les gens qui diront que c'est hors sujet, si vous voulez en discuter, lisez la méta et envoyez-moi un message.
Stan Strum

Réponses:

7

Utiliser ARGV ($ *) et affectation en masse

(Avertissement: je ne connais pas Ruby, mais cela fonctionne sur TIO )

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

28 26 octets au lieu de 30 (merci à Snack d'avoir souligné l'astuce $ *)

AdmBorkBork
la source
ARGV est également accessible en tant que $ *, ce qui permet d'économiser deux octets
Snack
4
@Snack Hehe, jouer au golf une réponse de conseils :)
AdmBorkBork
6

Utilisez un lambda

Les réponses sont généralement autorisées en tant que fonctions lambda, votre entrée / sortie étant les paramètres / valeur de retour du lambda, vous pouvez donc le faire:

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

Si vous l'attribuez à une variable, felle sera appelée comme

f[p,a,b]

Il est généralement bien de supposer également les types d'entrées, mais pour être sûr, vous pouvez le mentionner dans votre réponse.

Meta post pertinent sur les méthodes d'entrée / sortie acceptables

Casse-croûte
la source
6

Si vous avez besoin d'un programme complet avec stdin / stdout io pour une raison quelconque, le plus court que vous pouvez faire est d'utiliser l' -nindicateur pour raccourcir un appel gets.to_ià eval$_:

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

Le -ndrapeau entoure votre code while gets ... end, de sorte que le programme bouclera si plus d'entrée est fournie que votre programme n'en consomme.

Pavel
la source