どの数字が上にあり、どちらがあなたに向いているかを知っている場合、標準の6面ダイスの右または左にある数字を計算する式/トリックがあるかどうか疑問に思っていました.
問題を解決するために必要ですが、if ステートメントで 24 の可能性をすべてリストするのは気が進まない...:)
24の可能性はありません。
ウィキペディアから:
反対側の面の数字の合計は 7 です。
すでに 2 つの数を知っているので、残りの 4 つの可能性があります。
「上に」と「あなたに面している」の意味がわかりませんが、ここでは2つの隣接する面を意味していたと思います.2つの可能性しか残っていません。可能性は、左/右または右/左である 2 つの数字によってのみ異なります)。
たとえば、展開されたサイコロを使用すると、上に「1」があり、「2」が正面にあります。
X
X1X
2
X
反対側の面が「6」(下) と「5」(反対側) になることがわかりました。
5
X1X
2
6
したがって、これらの両方の可能性があります。
5 5
314 413
2 2
6 6
サイコロが「左利き」か「右利き」かを知っている場合、残された可能性は 1 つだけです (再びウィキペディア)。
この制約により、もう 1 つの抽象的な設計上の選択肢が残ります。それぞれ 1、2、3 を表す面は、この頂点を中心に時計回りまたは反時計回りの順序で配置できます。1、2、3 の面が共通の頂点の周りを反時計回りに走る場合、サイコロは「右利き」と呼ばれます。時計回りに走る場合は「左利き」と呼ばれます。標準的な現代の西洋のサイコロは右利きですが、中国のサイコロはしばしば左利きです
したがって、上の例では、左が「左利き」のサイコロ、右が「右利き」のサイコロです。
サイコロの反対側の合計は常に 7 になります (少なくとも、これは慣例です)。
消去法により、「見えない」ペアが何であるかがわかります。
したがって、上記のすべてのペアについて、数字が見える場合は、それを削除してください。残りのペアは、探しているものです。
サイコロの「利き手」を決定する方法がないため、ペアのどちらが右にあり、どちらが左にあるのかを判断することは不可能です。
これが機能する理由はわかりませんが、次のようになります。
各ペア (上/向き) にはもちろん 2 つの可能性しかありません。上の値と向きの値の両方がそれぞれそれ自体を排除し、左または右とは逆になるためです。たとえば、1 が上にあり、 2 があなたの方を向いている場合、左右は 3 か 4 のいずれかでなければなりません...
したがって、各組み合わせで、値の合計が奇数で 7 未満、または偶数で 7 より大きい場合、2 つの可能な値のうち低い方が左側に、高い方が右側に表示されます。
.. およびその逆
私はアメリカにいるので、このルールは「右利き」のサイコロ用で、左利きのサイコロの場合は逆になっていると思います。
プログラム的には、これを非常に簡単に行うことができます。おそらく少しやり過ぎです(ifステートメントを使用できるため)。次のようなクラスを作成することもできます。
public class Dice {
private DiceFace[] sides = new DiceFace[]{DiceFace.ONE, DiceFace.TWO, DiceFace.THREE, DiceFace.FOUR, DiceFace.FIVE, DiceFace.SIX};
class DiceFace {
// set the face number and connecting faces...the below figures are wrong, I don't have a set of dice to check agains
static final DiceFace ONE = new DiceFace(1, 2, 3, 4, 5);
private int face;
private int northFace;
private int southFace;
private int eastFace;
private int westFace;
public DiceFace(int face, int northFace, int southFace, int eastFace, int westFace) {
// set the values
}
}
}
次に、サイコロとその左右の値を確認することで、答えに可能な値を与えるメソッドを作成できます。