私自身が表題の問題を解いた時のプログラムについて解説します。
問題の詳細は「進捗いいわけマーク」(CodeIQ)を参照してください。
進捗が全然無かったことをごまかす「進捗いいわけマーク」を作ることにしました。
「進捗いいわけマーク」は高さ X 幅 X の正方形の中に I のカタチをした文字を半角小文字の「i」で描きます。
すべての行の真ん中は「i」です。
1行目と最後の行については、真ん中の両隣の列を「i」にします。
それ以外を半角ドット「.」にします。
例 高さ 1 幅 1 の進捗いいわけマーク
i
例 高さ 3 幅 3 の進捗いいわけマーク
iii
.i.
iii
例 高さ 5 幅 5 の進捗いいわけマーク
.iii.
..i..
..i..
..i..
.iii.
「進捗いいわけマーク」を手入力するのはしんどいのでプログラムで出力することにしました。
「進捗いいわけマーク」を出力するプログラムを実装してください。
仕様
・標準入力の高さ(=幅)を元に「進捗いいわけマーク」を出力する
標準入力
・標準入力の高さが 1-100 の整数で与えられます
例:
5
標準出力
・高さが奇数の場合は「進捗いいわけマーク」を出力する
・高さが偶数の場合は「invalid」を出力する
例(入力の例に対する出力の例)
.iii.
..i..
..i..
..i..
.iii.
その他の仕様
・標準入力の末尾には改行があります
・標準出力の末尾に改行をつけてください
・標準入力の仕様で説明した内容以外の入力は行われません(不正入力に対するチェックは不要)
Samples
Sample1
Input
1
i
Sample2
Input
3
iii
.i.
iii
Sample3
Input
5
.iii.Sample4
..i..
..i..
..i..
.iii.
Input
2
invalid
Rubyで解答しています。
#!/usr/bin/ruby def solve(n) if n % 2 == 0 then puts "invalid" return end for i in 0...n str = '.' * (n/2) + 'i' + '.' * (n/2) if (n >= 3) && ((i == 0) || (i == n-1)) then str[n/2-1] = 'i' str[n/2+1] = 'i' end puts str end end # main while line = gets line.strip! next if line.empty? solve(line.to_i) end
「進捗マーク」シリーズです
入力値を数値にしてsolve()に渡します。
n文字で真ん中だけ'i'、それ以外は'.'の文字列を作ります。
n≧3で最初と最後の行だけはn/2-1とn/2+1の場所も'i'にします。
ないです。