CodeIQ:類似度測定器ルイージを開発せよ

私自身が表題の問題を解いた時のプログラムについて解説します。
問題の詳細は「類似度測定器ルイージを開発せよ」(CodeIQ)を参照してください。

問題の概要

次のように1行でパラメータが入力されます。
^|o |_^|o |_
最初の6文字と後半の6文字の類似度を測定します。
この時のルールは次のとおりです。
  • 同じ座標に同じ文字があれば +2
  • 同じ座標が両方空白ではなく、かつ同じ文字ではなければ +1
  • 同じ座標が片方が空白、もう片方が空白以外であれば +-0

私のプログラム

C言語で解答しています。

#include <stdio.h>

int main(int argc, char* argv[]){
	char str[16] = {0};

	while( fgets(str, sizeof(str), stdin) != NULL ){
		int i=0;
		int count = 0;

		str[12] = 0;	// 改行文字の位置を0にしておく

		for(i=0; i<6; i++){
			int j = i+6;

			// 同じ座標の一方が空白でもう一方が空白以外
			if((str[i] == ' ' && str[j] != ' ') || (str[i] != ' ' && str[j] == ' ')){
				// 何もしない
			}
			// 両方が空白でなく、違う文字
			else if((str[i] != ' ' && str[j] != ' ') && (str[i] != str[j])){
				count += 1;
			}
			// それ以外(両方が同じ文字)
			else{
				count += 2;
			}
		}
		printf("%d", count);
	}

	return 0;
}

解説

特に解説するところがあるようなプログラムではありません。
わずかな工夫が13行目で、文字列の参照位置をこの計算だけで決定しています。わざわざ比較用にコピーなどしていないのが唯一の工夫ですが、C言語の経験があればこの程度のことは誰でも思いつきます。17行目はcontinueくらい書いておくべきだったかもしれません。(if - else if - elseの後に処理がないので書かなくても同じですが)
ちなみに10行目でstr[12]に0を入れているのはセンチネルを使ってforループをブレークしようかと思った名残です。