CodeIQ:極めよプログラミング道!【実力判定:Cランク】

私自身が表題の問題を解いた時のプログラムについて解説します。
問題の詳細は「極めよプログラミング道!【実力判定: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ランクなので特に困ることはありません。

main

check()関数に渡した結果を印字します。

check(line)

まず入力値を数値にして昇順にソートします。
先頭の数値が0なら次の値、そうでなければ最後の値を返せば仕様通りになります。

雑感

採点結果のページに解き方の解説がありました。
まぁ、同じ方法になりますよね。