CodeIQ:進  捗  ダ  メ  で  す  !

私自身が表題の問題を解いた時のプログラムについて解説します。
問題の詳細は「進  捗  ダ  メ  で  す  !」(CodeIQ)を参照してください。

問題の概要

問題を引用します。
仕様
標準入力
フォーマットは以下になります。
対象文字列,スペース文字,スペース文字の繰り返し数
  • 対象文字列に半角カンマは含まれません
  • スペース文字に半角カンマは含まれません
  • スペース文字は1文字です
  • スペース文字は名前こそ「スペース文字」ですが、スペース以外の任意の文字を指定可能です
  • スペース文字の繰り返し数に半角カンマは含まれません
  • スペース文字の繰り返し数は 1~3の整数です

標準出力
例えば標準入力
テスト,_,2
※この例のスペース文字は全角アンダースコア

の場合、標準出力は
テ__ス__ト
になります。

私のプログラム

Rubyで解答しています。

#!/usr/bin/ruby

def printStr(str, sp, num)
	ret = ""
	i = 0
	str.chars{|c|
		if i != 0 then ret += sp * num end
		ret += c
		i += 1
	}

	puts ret
end

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

	s = line.split(",")
	str = s[0]
	sp = s[1]
	num = s[2].to_i

	printStr(str, sp, num)
end

解説

★の問題なので相応に簡単です。

printStr()

引数strを1文字ずつ分解し、その間にspの文字列をnum回出力するだけです。
余分なspを出力しないようにするのがちょっとしたポイントですがどうこう言うことはありません。

雑感

別の問題の息抜きにやったの何も考えずC言語的なカウンタを使ったコードを書きましたが、join()を使ってもう少し綺麗に書けたように思えます。