寝癖頭の解法

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

Aizu Online Judge in C++ #ITP1_11_A : Dice I

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

・問題 "Dice I"
https://onlinejudge.u-aizu.ac.jp/problems/ITP1_11_A
入力としてサイコロの各面のラベルに対応する整数と、転がす命令の列が与えられるので、サイコロの上面の整数を出力してください。

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

Aizu Online Judge in C++ #ITP1_11_A : Dice I
/*
Aizu Online Judge in C++ #ITP1_11_A : Dice I
https://onlinejudge.u-aizu.ac.jp/problems/ITP1_11_A
 提出コードの解答例
 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{
            i=s[0];
            s[0]=s[4];
            s[4]=s[5];
            s[5]=s[1];
            s[1]=i;
        }
    }
    int up(void){
        return s[0];
    }
};
int main(void){
    Dice d;
    for(int i=0;i<6;i++){
        cin>>d.s[i];
    }
    string str;
    cin>>str;
    for(int i=0;i<str.size();i++){
        d.roll(str[i]);
    }
    cout<<d.up()<<endl;
    return 0;
}

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