Rada dla ruby

13

Jak mogę skrócić:

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

Jeśli moje dane wejściowe to liczba całkowita, po której następuje ciąg znaków, a po nim liczba całkowita?

Zawada
źródło
4
Witamy w PPCG!
Martin Ender
Dla ludzi, którzy powiedzą, że to nie jest temat, jeśli chcesz się z tym kłócić, przeczytaj meta, a następnie napisz do mnie.
Stan Strum

Odpowiedzi:

7

Użyj ARGV ($ *) i przydziału masy

(wyłączenie odpowiedzialności: Nie znam Ruby, ale działa na TIO )

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

28 26 bajtów zamiast 30 (dzięki Snackowi za wskazanie sztuczki $ *)

AdmBorkBork
źródło
Dostęp do ARGV można również uzyskać jako $ *, co pozwala zaoszczędzić dwa bajty
Przekąska
4
@Snack Hehe, odpowiedź na wskazówki dotyczące gry w golfa :)
AdmBorkBork
6

Użyj lambda

Odpowiedzi są zazwyczaj dozwolone jako funkcje lambda, a dane wejściowe / wyjściowe są parametrami / zwracanymi wartościami lambda, więc możesz to zrobić:

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

Jeśli przypiszesz to zmiennej f, zostanie ona wywołana jako

f[p,a,b]

Zasadniczo można również przyjmować typy danych wejściowych, ale dla bezpieczeństwa można o tym wspomnieć w odpowiedzi.

Odpowiedni post na temat akceptowalnych metod wejścia / wyjścia

Przekąska
źródło
6

Jeśli z jakiegoś powodu potrzebujesz pełnego programu ze stdin / stdout io, najkrótszą rzeczą, jaką możesz zrobić, to użyć -nflagi, aby skrócić jedno połączenie gets.to_iz eval$_:

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

-nFlagę otacza swój kod z while gets ... endtak pętli program będzie bardziej jeśli wejście jest dostarczany niż swoimi zużywa programowych.

Pavel
źródło