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; } };