###前提・実現したいこと
競技系プログラミングで提出するコードの量を減らして可読性を高めたい(以下兢プロ)。
言語はRuby、趣味で兢プロをやっています。
競プロでは一度に複数の値を扱うことがよくあります。
例えばn行の数字がスペース区切りで10個与えられ、それらを条件によって違う処理をする時などです。
Ruby
1n = gets.chomp.to_i 2number = [] 3n.times do 4 number << gets.chomp.split(/\n/).map(&:to_i) 5end
のように多重配列として受けて
条件が1つや2つなら
Ruby
1number.each_slice(1) do |num| 2 if 略 3end 4end
のように行っています。
しかし、これが上記のifの結果を使用して、そしてその結果もまた使用する。といった事があります。
#そのような場合は
Ruby
1上で得た結果を配列に入れ(仮にsample_array) 2 3sample_array.each_slice(1) do |num| 4. 5. 6. 7end
や、ものによってはeachを2重3重したコードを書いています。
さらにまたその結果を・・・と合計で4回ほど行う時があり、辟易してしまいます。
###知りたいこと
このやりかたですと、毎回num[0]と何々をやったり、文字と数字が混ざったものが与えられ、文字が◯なら文字以下の数字をどの条件に従って計算する。といったものが出るのでその都度deleteしてから数字にして計算。そして結果は都度配列に、といったふうに冗長なコードになってしまい美しくありません。
Ruby
1n = gets.chomp.to_i 2n.times do 3 gets.chomp.split(/\n/).map(&:to_i) 4できたらココの時点で 5def ~~(, , ,) 6``` 7のようなメソッドで数値が入力されるごとにすぐ計算。そしてその結果は配列に入れておくなりして次の数字が入力される頃には引数が初期値に戻り、繰り返し。 8のような再帰関数のような処理で行えないものかと思い質問させていただきました。 9 10もしかしたらifなどのネストでやるべきかとも思いますが方法がありましたらぜひお願いします。 11 12理解に努めますが、Ruby以外分からないのでその際は言葉で説明して頂けると助かります。 13 14よろしくお願いいたします。 15 16# 17#
適当な(公開して構わない)問題と改善したい回答を例として出すとより状況がつかめると思います
今ひとつイメージが掴めません。お題次第で方法は変わると思います。一つ具体的なお題を出して、それを解いてもらったらいかがでしょう?

ご意見ありがとうございます。可読性を高めたいと思ったものがpaizaというサイトにいくつかあり、こちらは公開してはいけないものなので他のサイトで見つかれば追記します。
競技するわけじゃないんで、実際に使われたものでなくてもいいんじゃないですか? 例えばスペース区切りで数字が並んだ文字列が複数提供される時、各行の数字を行毎に積算したものの総和を求めよう、とか。
あるいは生徒の各教科の得点が入力されるとき、特定の生徒の偏差値を求めよう、とか
問題を追記して頂きましたが、どこかで見たようなと思ったら paiza ですね。https://teratail.com/questions/68027 規約違反ですので、私が言うのも何ですが削除お願いします。

ご指摘ありがとうございました。

回答2件
あなたの回答
tips
プレビュー