CodeIQ:ステップ数見積もり

私自身が表題の問題を解いた時のプログラムについて解説します。
問題の詳細は「ステップ数見積もり」(CodeIQ)を参照してください。

問題の概要

問題を引用します。
Rubyのソースコードの行数とコメントの行数を出力するプログラムを実装してください。

【定義】
コード行数
・コメント行は含まない
・空行は含む

コメント行数
・コメント行のみをカウントする
・コメント行は行の先頭が#の行とする
・コメント行サンプル
# some comment
#
#some comment
・コメント行として扱わないサンプル
    # some comment (行頭にタブがあるなど、行頭が#ではないケース)
puts # some commnet (コードの後ろのコメント)
Rubyには1行コメント以外に以下のようなコメント記法がありますが、下記は入力データとして扱わないものとする
=begin
複数行コメント1
複数行コメント2
複数行コメント3
=end
puts :hoge
puts :hoge
__END__
以降はコメント
【出力】
標準出力にコード行数とコメント行数を以下のフォーマットで出力する
code:code_count
comment:comment_count

私のプログラム

Pythonで解答しています。

#!/usr/local/bin/python3

import fileinput

if __name__ == "__main__":
	comment = 0
	code = 0

	for line in fileinput.input():
		if line[0] == "#":
			comment += 1
		else:
			code += 1

	print("code:%d" % code)
	print("comment:%d" % comment)

解説

問題を読んだ瞬間に頭の中にコードができているというタイプの問題です。

単純に数える

読み込んだ行の先頭文字が"#"かどうかをチェックし、#だったらコメントのカウント、そうでなければコードのカウントを増やし、Ctrl+Dが来て入力が終了したら結果を印字するだけです。

Pythonの文字列はリストでもあるので先頭の文字は1行のデータの最初の要素を見れば良いだけなので非常に簡潔です。

雑感

問題が簡単な上、例がやたらと丁寧なので何も困らない問題でした。
ただ、私は公開された日にやってのですが、その時の問題文には最後に1つ改行文字が余分に付くためそれを数えない、というような問題になっていて結果から1引いたらリジェクトされました。問題は後で修正されたみたいです。