私自身が表題の問題を解いた時のプログラムについて解説します。
問題の詳細は「ステップ数見積もり」(CodeIQ)を参照してください。
Rubyのソースコードの行数とコメントの行数を出力するプログラムを実装してください。
【定義】
コード行数
・コメント行は含まない
・空行は含む
コメント行数
・コメント行のみをカウントする
・コメント行は行の先頭が#の行とする
・コメント行サンプル
# some comment・コメント行として扱わないサンプル
#
#some comment
# some comment (行頭にタブがあるなど、行頭が#ではないケース)Rubyには1行コメント以外に以下のようなコメント記法がありますが、下記は入力データとして扱わないものとする
puts # some commnet (コードの後ろのコメント)
=begin
複数行コメント1
複数行コメント2
複数行コメント3
=end
puts :hogeputs :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引いたらリジェクトされました。問題は後で修正されたみたいです。