差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン最新のリビジョン両方とも次のリビジョン | ||
programming_algorithm:dice [2020/07/29] – [6要素の配列] ikatakos | programming_algorithm:dice [2020/07/29] – [サイコロ] ikatakos | ||
---|---|---|---|
行 1: | 行 1: | ||
- | ====== サイコロ ====== | + | ====== サイコロの移動 |
プログラミングの実装練習問題として、6面サイコロを平らな床に置き、パタパタと回転させながら移動させた時の向き(上を向いている面の数字など)を求める、というものがある。 | プログラミングの実装練習問題として、6面サイコロを平らな床に置き、パタパタと回転させながら移動させた時の向き(上を向いている面の数字など)を求める、というものがある。 | ||
行 51: | 行 51: | ||
new_state[1] ← state[0] | new_state[1] ← state[0] | ||
- | この $0, | + | この $0, |
同様に、下方向の回転は $i=0,3,5,2$ につき、この順に数字を1つずつずらした状態となる。 | 同様に、下方向の回転は $i=0,3,5,2$ につき、この順に数字を1つずつずらした状態となる。 | ||
行 58: | 行 58: | ||
回転前: | 回転前: | ||
回転後: | 回転後: | ||
+ | | ||
+ | new_state[0] ← state[3] | ||
+ | new_state[3] ← state[5] | ||
+ | new_state[5] ← state[2] | ||
+ | new_state[2] ← state[0] | ||
- | 左方向・上方向については、同様にずらすindexを調べてもよいし、少し計算時間は延びるが「右回転3回」「下回転3回」で代用することも可能である。 | + | 左方向・上方向については、同様にずらすindexを調べてもよいし、少し計算時間は延びるが「右回転3回」「下回転3回」で代用することも可能。 |
==== 3要素の配列 ==== | ==== 3要素の配列 ==== | ||
行 85: | 行 90: | ||
new_state[2] ← state[0] | new_state[2] ← state[0] | ||
- | ==== bitによる3面管理 ==== | + | ==== ハッシュによる3面管理 ==== |
- | 1~6は3bitで表現できるため、18bit(6面を管理する場合)や9bit(3面を管理する場合)の整数値として扱える。 | + | 1~6は3bitで表現できるため、各面の数字を3bitずつ並べれば、18bit(6面を管理する場合)や9bit(3面を管理する場合)の整数値として扱える。 |
また、表裏の和である7はちょうど '' | また、表裏の和である7はちょうど '' |