そろそろ500Ptsの問題にも挑戦したいが、その準備のための勉強も必要なので、とりあえず一番簡単な問題を解いてコードを晒してみる。
本日の問題はこちら(要TopCoder登録 & 問題文は英語)。
問題を大まかに和訳してみる。
2次元横スクロールゲームで、ボスと戦う。ボスは様々な高さに銃を撃ち込むことができる。kilomanは飛ぶことと、立ったままでいることの2種類の行動をとることができる。kilomanが立ったままで、ボスが1-2に銃を撃った場合はヒットとなり、kilomanがジャンプして、ボスが3-7に撃った場合もヒットになる。ボスの攻撃パターンpattern[]と、立ったままか飛んだかを表す文字列jumpsが与えられたときに、何回kilomanはボスの攻撃にヒットしたかを返すメソッドhitsTakenを作成せよ。クラス名はKiloManとする。
私の作成した解答は以下のとおりである。
public class KiloMan { public int hitsTaken(int[] pattern, String jumps) { int nHits = 0; for( int i=0 ; i<pattern.length ; i++){ if( jumps.charAt(i)=='S' && pattern[i]<=2 ){ nHits++; }else if( jumps.charAt(i)=='J' && pattern[i]>=3){ nHits++; } } return nHits; } }
得点は226.33/250。毎度ながら文字列の比較ではまってしまう。equalsメソッドを使うと思っていたら、単純な比較で済んでしまうというオチ。charはプリミティブな型だから、equalsではなく、単純比較でよいということなのね。