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?


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


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


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.