Problem:
JOIとIOI

問題

与えられた文字列内の連続する3文字が，JOIまたはIOIという並びになっている個所がそれぞれ何個所あるのかを数え上げるプログラムを作成せよ．文字列はアルファベットの大文字だけからなる．例えば下図の「JOIOIOI」という文字列にはJOIが1個所，IOIが2個所に含まれている．

入力

入力は複数のデータセットからなる．各データセットは1行であり，10000文字以下のアルファベットの大文字からなる．入力は EOF で終了する.

データセットの数は 5 を超えない．

出力

データセットごとに, 1行目に見つかったJOIの個数，2行目に見つかったIOIの個数をそれぞれ出力せよ．

入出力例

入力例

JOIJOI
JOIOIOIOI
JOIOIJOINXNXJIOIOIOJ

出力例

2
0
1
3
2
3

上記問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。

Solution in Ruby (judge verdict: Accepted)


ans1 = []
ans2 = []
while line = STDIN.gets
	str = line.chomp!.split(//).map(&:to_s)
	list = []
	count1 =0
	count2 =0
	str.length.times do |i|
		if i< 3
			list << str[i]
		if i==2
			t = list[0].to_s+list[1].to_s+list[2].to_s
			if t== "JOI"
				count1 +=1
			elsif t == "IOI"
				count2 +=1
			end
		end
	else
		list.shift
		list << str[i]
		t = list[0].to_s+list[1].to_s+list[2].to_s
			if t== "JOI"
				count1 +=1
			elsif t == "IOI"
				count2 +=1
			end
		end
	end
	ans1 << count1
	ans2 << count2
	
end

ans1.length.times do
	puts ans1.shift
	puts ans2.shift
end