Rat für Rubin

13

Wie kann ich kürzen:

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

Wenn meine Eingabe eine Ganzzahl ist, gefolgt von einer Zeichenfolge, gefolgt von einer Ganzzahl?

Zawada
quelle
4
Willkommen bei PPCG!
Martin Ender
Für die Leute, die sagen werden, dass dies kein Thema ist, lesen Sie Meta durch und schreiben Sie mir dann eine Nachricht.
Stan Strum

Antworten:

7

Verwenden Sie ARGV ($ *) und Massenzuweisung

(Haftungsausschluss: Ich kenne Ruby nicht, aber das funktioniert mit TIO )

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

28 26 Bytes statt 30 (danke an Snack für den Hinweis auf den $ * Trick)

AdmBorkBork
quelle
Auf ARGV kann auch mit $ * zugegriffen werden, wodurch zwei Bytes gespart werden
Snack
4
@ Snack Hehe, Golf ein Tipps beantworten :)
AdmBorkBork
6

Verwenden Sie ein Lambda

Antworten sind normalerweise als Lambda-Funktionen zulässig, wobei Ihre Eingabe / Ausgabe die Parameter / Rückgabewerte des Lambdas sind.

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

Wenn Sie dies einer Variablen zuweisen, wird fsie als aufgerufen

f[p,a,b]

Es ist im Allgemeinen in Ordnung, auch die Arten der Eingaben anzunehmen, aber um sicherzugehen, können Sie dies in Ihrer Antwort erwähnen.

Relevanter Metapost über akzeptable Eingabe- / Ausgabemethoden

Snack
quelle
6

Wenn Sie aus irgendeinem Grund ein vollständiges Programm mit stdin / stdout io benötigen, können Sie mit dem -nFlag in kürzester Zeit einen Aufruf von gets.to_ian verkürzen eval$_:

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

Das -nFlag umgibt Ihren Code mit while gets ... end, sodass das Programm eine Schleife ausführt, wenn mehr Eingaben bereitgestellt werden, als Ihr Programm verbraucht.

Pavel
quelle