1

私はルビーに不慣れで、これは明白な質問かもしれませんが、私が探しているものを実際に見つけるためにグーグルで何を検索するべきか本当にわかりません。

私はアルゴリズムの問​​題をやっています(実際には関係ありません)、そしてそれは私に正方行列を与え、それが円対称であるかどうか尋ねます。私はそれを次のように解決します:

s = STDIN.readlines.map { |x| x.chomp }.join ''
puts %w[YES NO][s == s.reverse ? 0 : 1]

それらすべてを1行にまとめることは可能ですか?私ができない唯一の理由は、文字列を保存して、後で明示的に比較する必要があると思うからです。また、STDINから文字列を取得するため、再読み取りできません。エレガントなソリューションはありますか?ありがとう!

4

2 に答える 2

2

Object#tapブロックを受け取り、オブジェクトをそのブロックに渡します。したがって、それを次のように書き直すことができるはずです。

STDIN.readlines.map { |x| x.chomp }.join('').tap { |s| puts %w[YES NO][s == s.reverse ? 0 : 1] }

コメント提供者には同意しますが、これは読みやすさを損なうだけです。

于 2013-02-03T01:33:31.263 に答える
0

読みやすさを無視すると、ほとんどの場合、;セパレータを使用して1行にまとめることができます。

あなたの場合、s2回参照されているので、それを変数に割り当てる必要があります。

于 2013-02-03T01:32:01.293 に答える