2010年11月9日火曜日

AOJ Volume 5 Problem 0502 : Dice

  1. #include<iostream>  
  2.   
  3. int main()  
  4. {  
  5.     for (int n; std::cin >> n, n;)  
  6.     {  
  7.         int s = 1, d[] = {2, 3, 5, 4, 1}, i, t, a, b;  
  8.   
  9.         for (i = 0; i++ < n; s += d[4])  
  10.         {  
  11.             char c[9], e;  
  12.             std::cin >> c;  
  13.             e = *c;  
  14.             a = 0;  
  15.               
  16.             if (e != 'R' && e != 'L')  
  17.             {  
  18.                 e == 'N' ? a = 2, b = 0 : e == 'E' ? a = 1, b = 3   
  19.                      : e == 'W' ? a = 3, b = 1 : b = 2;  
  20.                 d[a] = d[4];  
  21.                 d[4] = d[b];  
  22.                 d[b] = 7 - d[a];  
  23.             }  
  24.             else  
  25.             {  
  26.                 e == 'R' ? : a = 2;  
  27.                 t = *d;  
  28.                 *d = d[1 + a];  
  29.                 d[1 + a] = d[2];  
  30.                 d[2] = d[3 - a];  
  31.                 d[3 - a] = t;  
  32.             }  
  33.         }  
  34.         std::cout << s << '\n';  
  35.     }  
  36.   
  37.     return 0;  
  38. }  
バリンバリンの自分なりのショートコーディング.
納得の331 Bytesです.

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

0 件のコメント:

コメントを投稿