2010年11月9日火曜日

AOJ Volume 5 Problem 0502 : Dice

#include<iostream>

int main()
{
    for (int n; std::cin >> n, n;)
    {
        int s = 1, d[] = {2, 3, 5, 4, 1}, i, t, a, b;

        for (i = 0; i++ < n; s += d[4])
        {
            char c[9], e;
            std::cin >> c;
            e = *c;
            a = 0;
            
            if (e != 'R' && e != 'L')
            {
                e == 'N' ? a = 2, b = 0 : e == 'E' ? a = 1, b = 3 
                     : e == 'W' ? a = 3, b = 1 : b = 2;
                d[a] = d[4];
                d[4] = d[b];
                d[b] = 7 - d[a];
            }
            else
            {
                e == 'R' ? : a = 2;
                t = *d;
                *d = d[1 + a];
                d[1 + a] = d[2];
                d[2] = d[3 - a];
                d[3 - a] = t;
            }
        }
        std::cout << s << '\n';
    }

    return 0;
}
バリンバリンの自分なりのショートコーディング.
納得の331 Bytesです.

問題はサイコロに関する問題なんですが,
回転の種類を大きく2つに分けることができて,
関数化できるので,上記のようなショートコーディングが行えてます.

0 件のコメント:

コメントを投稿