Lời khuyên cho ruby


13

Làm thế nào tôi có thể rút ngắn:

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

Nếu đầu vào của tôi là một số nguyên, theo sau là một chuỗi, theo sau là một số nguyên?


4
Chào mừng đến với PPCG!
Martin Ender

Đối với những người sẽ nói rằng đây không phải chủ đề, nếu bạn muốn tranh luận về nó, hãy đọc qua meta và sau đó nhắn tin cho tôi.
Stan Strum

Câu trả lời:


7

Sử dụng ARGV ($ *) và gán khối lượng

(từ chối trách nhiệm: Tôi không biết Ruby, nhưng điều này hoạt động trên TIO )

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

28 26 byte thay vì 30 (nhờ Snack đã chỉ ra thủ thuật $ *)


ARGV cũng có thể được truy cập dưới dạng $ * giúp tiết kiệm hai byte
Snack

4
@Snack Hehe, chơi golf một câu trả lời mẹo :)
admBorkBork

6

Sử dụng lambda

Câu trả lời thường được cho phép dưới dạng hàm lambda với đầu vào / đầu ra của bạn là tham số / giá trị trả về của lambda, vì vậy bạn có thể làm điều này:

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

Nếu bạn đã gán nó cho một biến fthì nó sẽ được gọi là

f[p,a,b]

Nói chung cũng tốt khi giả sử các loại đầu vào, nhưng để an toàn, bạn có thể đề cập đến nó trong câu trả lời của mình.

Bài đăng meta có liên quan về các phương thức nhập / xuất được chấp nhận


6

Nếu bạn cần một chương trình đầy đủ với stdin / stdout io vì một số lý do, ngắn nhất bạn có thể làm là sử dụng -ncờ để rút ngắn một cuộc gọi gets.to_iđến eval$_:

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

Các -ncờ bao quanh mã của bạn với while gets ... end, vì vậy chương trình sẽ loop nếu đầu vào hơn được cung cấp hơn tiêu thụ chương trình của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.