私自身が表題の問題を解いた時のプログラムについて解説します。
問題の詳細は「極めよプログラミング道!【実力判定:Cランク】」(CodeIQ)を参照してください。
【問題】
「0123456789」の10枚のカードの内、4枚のカードが提示されます。
通常は、「最も数値が大きなカード」が勝利者のカードです。
4枚の中に0があれば、「0以外で最も小さなカード」が勝利者のカードです。
勝利者のカードの数値を割り出してください。
【入力】
標準入力から、複数行のデータが与えられます。1行のデータが、1セットのゲームになります。
1行のデータは、数字4文字の文字列になります。この1文字ずつが、1枚のカードになります。
【出力】
1行ずつ結果を判定して、その答えとなる数字を、1行ごと標準出力に出力します。
【入出力サンプル】
Input
1234
6745
0149
3705
Output
4
7
1
3
Rubyで解答しています。
#!/usr/bin/ruby def check(line) cards = line.split("").map{|a| a.to_i}.sort if cards.first == 0 then return cards[1] else return cards.last end end # main while line = gets line.strip! if line.empty? then next end p check(line) end
私がCodeIQの問題をやり始めてから2回目の実力判定問題です。
Cランクなので特に困ることはありません。
check()関数に渡した結果を印字します。
まず入力値を数値にして昇順にソートします。
先頭の数値が0なら次の値、そうでなければ最後の値を返せば仕様通りになります。