寝癖頭の解法

学習中の覚え書きを投稿、更新していきます。

Aizu Online Judge in C++ #ITP1_11_B : Dice II

Aizu Online Judge(AOJ)の過去問から、その提出コードの解答例です。

・問題 "Dice II"
https://onlinejudge.u-aizu.ac.jp/problems/ITP1_11_BC
Dice I と同様の方法で、入力された整数の列からサイコロをつくります。
このサイコロを Dice I の方法で回転させた後の上面と前面の整数が質問として与えられるので、右側の面の整数を答えるプログラムを作成してください。

僕が作成、提出したコードは、以下のとおりです。

Aizu Online Judge in C++ #ITP1_11_B : Dice II
/*
Aizu Online Judge in C++ #ITP1_11_B : Dice II
https://onlinejudge.u-aizu.ac.jp/problems/ITP1_11_B
 提出コードの解答例
 https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
struct Dice{
    int s[6];
    void roll(char c){
        int i;
        if(c=='E'){
            i=s[0];
            s[0]=s[3];
            s[3]=s[5];
            s[5]=s[2];
            s[2]=i;
        }else if(c=='W'){
            i=s[0];
            s[0]=s[2];
            s[2]=s[5];
            s[5]=s[3];
            s[3]=i;
        }else if(c=='N'){
            i=s[0];
            s[0]=s[1];
            s[1]=s[5];
            s[5]=s[4];
            s[4]=i;
        }else if(c=='S'){
            i=s[0];
            s[0]=s[4];
            s[4]=s[5];
            s[5]=s[1];
            s[1]=i;
        }else{
            i=s[1];
            s[1]=s[2];
            s[2]=s[4];
            s[4]=s[3];
            s[3]=i;
        }
    }
    int up(void){
        return s[0];
    }
    int left(void){
        return s[3];
    }
    int right(void){
        return s[2];
    }
    int front(void){
        return s[1];
    }
};
int main(void){
    Dice d;
    for(int i=0;i<6;i++){
        cin>>d.s[i];
    }
    int q;
    cin>>q;
    for(int i=0;i<q;i++){
        int x,y;
        cin>>x>>y;
        if(d.left()==x){
            d.roll('E');
        }
        if(d.right()==x){
            d.roll('W');
        }
        while(d.up()!=x){
            d.roll('N');
        }
        while(d.front()!=y){
            d.roll('R');
        }
        cout<<d.right()<<endl;
    }
    return 0;
}

設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/