CodeIQ:出る杭はいいぞ

私自身が表題の問題を解いた時のプログラムについて解説します。
問題の詳細は「出る杭はいいぞ」(CodeIQ)を参照してください。

問題の概要

問題を引用します。
出る杭はいいぞ
仕様
a-zの小文字で構成される文字列の真ん中の文字を大文字に変換してください。
文字列の文字数(N)が奇数の場合は N/2 の小数点以下を切り上げた位置を「真ん中」とします。
文字列の文字数(N)が偶数の場合は (N/2 + 1) の位置を「真ん中」とします。

標準入力

  • a-zの小文字で構成される文字列が入力されます
  • 文字列の文字数は 1-10 文字とします
  • 入力は5行固定です。行単位で真ん中の文字を大文字にしてください
【例】
c
vb
awk
java
scala

標準出力
  • 標準入力の各行の真ん中の文字を大文字にしてください。
※真ん中の定義については 仕様 をご確認ください

【例】
C
vB
aWk
jaVa
scAla

その他の仕様
・標準入力の末尾には改行があります
・標準出力の末尾に改行をつけてください
・標準入力の仕様で説明した内容以外の入力は行われません(不正入力に対するチェックは不要)

Samples
Sample1
標準入力
c
vb
awk
java
scala

標準出力
C
vB
aWk
jaVa
scAla

Sample2
標準入力
oz
ada
perl
basic
python

標準出力
oZ
aDa
peRl
baSic
pytHon

Sample3
標準入力
php
ruby
cobol
kotlin
fortran

標準出力
pHp
ruBy
coBol
kotLin
forTran

私のプログラム

Rubyで解答しています。

#!/usr/bin/ruby

def toCenterUpper(line)
	line[line.size/2] = line[line.size/2].upcase
	return line
end

# main
while line = gets
	line.strip!
	if line.empty? then next end

	puts toCenterUpper(line)
end

解説

簡単な文字列操作です。

main

入力値をtoCenterUpper()関数に渡した結果を印字します。

toCenterUpper(line)

引数の文字列の長さの1/2(端数切り捨て)位置の文字を大文字に変換すれば終わりです。Rubyの文字列は文字の配列としてアクセス可能で要素番号は0始まりのためこの方法で仕様通りになります。

雑感

この出題者の前回の問題が素数を使った問題で今までと傾向が変わっていたので方向を帰るのかなと思ったのですが、今回はいつものような文字列操作の問題でした。