cubewalking

コードのみ。問題解説めんどい。
本当は、faceはenumを使ってEWNSを分けるべき。けど、これもめんどかった。

class CubeWalking {
private:
	struct robot{
		int col;
		int row;
		int face;
	};

	robot rob;

	void stringcheck(char ch){
		switch(ch){
		case 'L':
			rob.face = (rob.face+1)%4;
			break;
		case 'R':
			rob.face = (rob.face+3)%4;
			break;
		case 'W':
			switch(rob.face){
			case 0:
				rob.row = (rob.row+2)%3;
				break;
			case 1:
				rob.col = (rob.col+2)%3;
				break;
			case 2:
				rob.row = (rob.row+1)%3;
				break;
			case 3:
				rob.col = (rob.col+1)%3;
				break;
			}
		}
	}

	string checkcolor(){
		if(rob.col==1 && rob.row == 1){
			return "GREEN";
		}else if((rob.col == 0 && (rob.row == 0 || rob.row == 2)) || (rob.col==2 && (rob.row==0 || rob.row==2))){
			return "RED";
		}else{
			return "BLUE";
		}
	}



public:
	string finalPosition(string movement) {

		rob.col = rob.row = 1;
		rob.face = 0;

		for(unsigned int i=0; i<movement.size(); i++){
			stringcheck(movement[i]);
		}

		string result = checkcolor();

		return result;
	}

};