差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
最新のリビジョン両方とも次のリビジョン
programming_algorithm:dice [2020/07/29] – [6要素の配列] ikatakosprogramming_algorithm:dice [2020/07/29] – [サイコロ] ikatakos
行 1: 行 1:
-====== サイコロ ======+====== サイコロの移動 ======
  
 プログラミングの実装練習問題として、6面サイコロを平らな床に置き、パタパタと回転させながら移動させた時の向き(上を向いている面の数字など)を求める、というものがある。 プログラミングの実装練習問題として、6面サイコロを平らな床に置き、パタパタと回転させながら移動させた時の向き(上を向いている面の数字など)を求める、というものがある。
行 51: 行 51:
   new_state[1] ← state[0]   new_state[1] ← state[0]
  
-この $0,4,5,1$ などのindexは、''state''における定義の順番と転がす向きによって変化するため、きちんと紙などに書いて変化を追って求め+この $0,4,5,1$ というindexは、''state''におけるの順番と転がす向きによって変化するため、あらかじめ求めておく
  
 同様に、下方向の回転は $i=0,3,5,2$ につき、この順に数字を1つずつずらした状態となる。 同様に、下方向の回転は $i=0,3,5,2$ につき、この順に数字を1つずつずらした状態となる。
行 58: 行 58:
   回転前:  1  2  3  4  5  6   回転前:  1  2  3  4  5  6
   回転後:  4  2  1  6  5  3   回転後:  4  2  1  6  5  3
 +  
 +  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はちょうど ''0b111'' のため、裏面の数字はbit反転することで取得できる。 また、表裏の和である7はちょうど ''0b111'' のため、裏面の数字はbit反転することで取得できる。
programming_algorithm/dice.txt · 最終更新: 2020/07/29 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0