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?


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


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


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.