Diese Herausforderung wurde von der britischen Informatikolympiade übernommen .
Würfelspiel
Zwei Spieler spielen ein Würfelspiel, bei dem sie jeweils ein Würfelpaar werfen und die höchste Summe gewinnt. Die Würfelpaare haben die gleiche Anzahl von Seiten, müssen jedoch nicht auf jeder Seite die gleichen Werte haben. Daher ist das Spiel fair, wenn für beide Würfelpaare alle möglichen Summen mit gleicher Wahrscheinlichkeit gemacht werden können.
Zum Beispiel, wenn Spieler 1 die folgenden Würfel hat:
{1,2,3,4,5,6} {1,2,3,4,5,6}
Dann können sie folgende Summen produzieren:
1 2 3 4 5 6
+------------------
1| 2 3 4 5 6 7
2| 3 4 5 6 7 8
3| 4 5 6 7 8 9
4| 5 6 7 8 9 10
5| 6 7 8 9 10 11
6| 7 8 9 10 11 12
Wenn Spieler 2 hat:
{1,2,2,3,3,4} {1,3,4,5,6,8}
Sie können produzieren:
1 2 2 3 3 4
+------------------
1| 2 3 3 4 4 5
3| 4 5 5 6 6 7
4| 5 6 6 7 7 8
5| 6 7 7 8 8 9
6| 7 8 8 9 9 10
8| 9 10 10 11 11 12
Dieses Spiel ist fair, da das Minimum für beide 2 ist, das Maximum 12 ist und jede Summe gleich oft auftritt, z. B. können 7 mit jedem Paar auf 6 Arten gemacht werden.
Herausforderung
Schreiben Sie ein Programm / eine Funktion, die zwei Würfel als Eingabe und optional eine Ganzzahl verwendet, die die Anzahl der Seiten darstellt, die jeder Würfel enthält, und druckt / gibt ein anderes Würfelpaar zurück, das verwendet werden kann, um ein faires Spiel mit den beiden Eingabewürfeln zu spielen, oder Jeder Falsey-Wert, wenn es keine andere Lösung als die Eingabe gibt.
Spezifikationen
Die Anzahl der Seiten auf beiden Würfeln muss gleich sein und der Anzahl der Seiten auf dem eingegebenen Würfelpaar entsprechen. Diese Zahl ist immer eine ganze Zahl größer oder gleich 1.
Die beiden zurückgegebenen Würfel können identisch sein, das Paar darf jedoch nicht mit dem Eingabepaar identisch sein.
Unterschiedliche Ordnungspaare sind nicht unterschiedlich. {1,2,3} {4,5,6} ist dasselbe wie {4,5,6} {1,2,3}.
Ihr Programm muss nicht schnell ein Ergebnis liefern, solange es schließlich die richtige Ausgabe liefert.
Die Werte auf dem eingegebenen Würfelpaar sind immer ganze Zahlen zwischen 1 und einschließlich 9, aber die zurückgegebenen Werte können beliebige ganze Zahlen ≥ 1 sein.
Wenn es mehr als eine mögliche Lösung gibt, muss nur eine zurückgegeben werden.
Eingabe / Ausgabe kann in jedem vernünftigen Format erfolgen.
Testfälle
6
1 2 2 3 3 4
8 6 5 4 3 1
1 2 3 4 5 6
1 2 3 4 5 6
4
1 1 1 1
1 4 5 8
1 1 4 4
1 1 5 5
3
1 3 5
2 4 6
False
8
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
Any of the following:
1 2 2 3 3 4 4 5 | 1 2 2 3 5 6 6 7 | 1 2 3 3 4 4 5 6
1 3 5 5 7 7 9 11 | 1 3 3 5 5 7 7 9 | 1 2 5 5 6 6 9 10
9
? Ich sehe nur die Entscheidung über die Seiten>=1
, aber gibt es ein Maximum? Wenn es höher als 9 sein kann, würde es Ihnen etwas ausmachen, einen Testfall dafür hinzuzufügen?Antworten:
Gelee , 34 Bytes
Gibt eine Liste aller möglichen Würfelpaare bis zur Reihenfolge der Würfel und Gesichter * zurück (mit Ausnahme aller Würfel, die mit dem Eingabepaar identisch sind).
Probieren Sie es online aus!
Dies ist ein Brute-Forcer und nicht effizient (zu langsam, um den 6-Gesichter-Testfall bei TIO überhaupt auszuführen).
* dh wenn
[[1,1,4,4],[1,1,5,5]]
es eine Möglichkeit gibt (wie in einem der Beispiele), wird es kein[[1,1,5,5],[1,1,4,4]
oder[[1,4,1,4],[1,1,5,5]]
usw. geben.quelle
C ++ 14, 130 Bytes
Als unbenanntes Lambda unter der Annahme
M
, dass es so iststd::vector<std::vector<int>>
. Fair ist0
, alles andere ist unfair.Ungolfed:
quelle
Python, 228 Bytes
Dies war vor langer Zeit; Ich könnte das jetzt wahrscheinlich ein bisschen besser spielen.
quelle