AOJ1210 Die Game
問題リンク Die Game
- 概要
サイコロをコマンド通りに動かした後、上部に描かれている数字を答えよ。
コマンド数 <= 1024
- 解法
サイコロを転がすだけです。
- ソース
import java.util.Scanner; //Die Game public class AOJ1210 { static class Dice <T>{ public T[] id; enum Face{TOP, BOTTOM, FRONT, BACK, RIGHT, LEFT}; public T get(Face f){ return id[f.ordinal()]; } public Dice<T> copy(){ return new Dice<T>(id[0], id[1], id[2], id[3], id[4], id[5]); } public Dice() { @SuppressWarnings("unchecked") T[] tid = (T[])new Object[6]; id = tid; } public Dice(T top, T bottom, T front, T back, T right, T left) { @SuppressWarnings("unchecked") T[] tid = (T[])new Object[6]; id = tid; id[Face.TOP.ordinal()] = top; id[Face.BOTTOM.ordinal()]= bottom; id[Face.FRONT.ordinal()] = front; id[Face.BACK.ordinal()] = back; id[Face.RIGHT.ordinal()] = right; id[Face.LEFT.ordinal()] = left; } //true: X軸方向に手前に転がす //false: X軸方向に奥に転がす void rollX(boolean isReverse) { if(!isReverse) roll(Face.TOP, Face.FRONT, Face.BOTTOM, Face.BACK); else roll(Face.TOP, Face.BACK, Face.BOTTOM, Face.FRONT); } //true: Y軸方向に左へ転がす //false: Y軸方向に右へ転がす void rollY(boolean isReverse) { if(!isReverse) roll(Face.TOP, Face.LEFT, Face.BOTTOM, Face.RIGHT); else roll(Face.TOP, Face.RIGHT, Face.BOTTOM, Face.LEFT); } //true: Z軸方向に右へ回す //false: Z軸方向に左へ回す void rollZ(boolean isReverse) { if(!isReverse) roll(Face.FRONT, Face.LEFT, Face.BACK, Face.RIGHT); else roll(Face.FRONT, Face.RIGHT, Face.BACK, Face.LEFT); } private void roll(Face w, Face x, Face y, Face z) { T tmp = id[w.ordinal()]; id[w.ordinal()] = id[x.ordinal()]; id[x.ordinal()] = id[y.ordinal()]; id[y.ordinal()] = id[z.ordinal()]; id[z.ordinal()] = tmp; } } void run(){ Scanner sc = new Scanner(System.in); Dice<Integer> dice = new Dice<Integer>(1, 6, 5, 2, 4, 3); for(;;){ int n = sc.nextInt(); if(n==0)break; Dice<Integer> d = dice.copy(); while(n--!=0){ String s = sc.next(); if("north".equals(s))d.rollX(false); else if("south".equals(s))d.rollX(true); else if("east".equals(s))d.rollY(false); else d.rollY(true); } System.out.println(d.get(Dice.Face.TOP)); } } public static void main(String[] args) { new AOJ1210().run(); } }