私自身が表題の問題を解いた時のプログラムについて解説します。
問題の詳細は「進捗はいいじゃんマーク」(CodeIQ)を参照してください。
進捗のよさ具合をひと目で知らせるために「進捗はいいじゃんマーク」を作ることにしました。
「進捗はいいじゃんマーク」は高さ X 幅 X の正方形の中にEのカタチをしたの文字を半角小文字の「e」で描きます。
1行目と最終行はすべてが「e」に。
真ん中の行を除く2行目から最終行の前の行までは左端が「e」になります。
それ以外を半角ドット「.」にします。
例 高さ 1 幅 1 の進捗はいいじゃんマーク
e
例 高さ 3 幅 3 の進捗はいいじゃんマーク
eee
ee.
eee
例 高さ 5 幅 5 の進捗はいいじゃんマーク
eeeee
e....
eee..
e....
eeeee
「進捗はいいじゃんマーク」を手入力するのはしんどいのでプログラムで出力することにしました。
「進捗はいいじゃんマーク」を出力するプログラムを実装してください。
仕様
・標準入力の高さ(=幅)を元に「進捗はいいじゃんマーク」を出力する
標準入力
・標準入力の高さが 1-100 の整数で与えられます
例:
5
標準出力
・高さが奇数の場合は「進捗はいいじゃんマーク」を出力する
・高さが偶数の場合は「invalid」を出力する
例(入力の例に対する出力の例)
eeeee
e....
eee..
e....
eeeee
その他の仕様
・標準入力の末尾には改行があります
・標準出力の末尾に改行をつけてください
・標準入力の仕様で説明した内容以外の入力は行われません(不正入力に対するチェックは不要)
Samples
Sample1
Input
1
e
Sample2
Input
3
eee
ee.
eee
Sample3
Input
5
eeeeeSample4
e....
eee..
e....
eeeee
Input
2
invalid
Rubyで解答しています。
#!/usr/bin/ruby def solve(n) if n%2 == 0 puts "invalid" return end for i in 0...n if (i==0) || (i==(n-1)) then puts 'e' * n elsif i == n/2 puts 'e' * (n/2+1) + '.' * (n/2) else puts 'e' + '.' * (n-1) end end end # main while line = gets line.strip! next if line.empty? solve(line.to_i) end
もはや「進捗マーク」シリーズです。
入力値を数値にしてsolve()に渡します。
nが偶数なら'invalid'なので先にチェックしてしまいます。
先頭行と最終行は全部eなのでeをn個印字します。
n/2行目はn/2個のxと残りの数は.なのでそれを印字します。
その他の行はe1個とn-1個の.なのでそれを印字します。
このシリーズ、いつまで続くんでしょうか?
いや、割と好きですけどね。