dice_game
Two players are playing a game. First each of them writes an integer from 1 to 6, and then a dice is thrown. The player whose written number got closer to the number on the dice wins. If both payers have the same difference, it's a draw. The first player wrote number a, the second player wrote number b. How many ways to throw a dice are there, at which the first player wins, or there is a draw, or the second player wins? Input The single line contains two integers a and b (1 ≤ a, b ≤ 6) — the numbers written on the paper by the first and second player, correspondingly. Output Print three integers: the number of ways to throw the dice at which the first player wins, the game ends with a draw or the second player wins, correspondingly. Examples Input 2 5 Output 3 0 3 Input 2 4 Output 2 1 3 Note The dice is a standard cube-shaped six-sided object with each side containing a number from 1 to 6, and where all numbers on all sides are distinct. You can assume that number a is closer to number x than number b, if |a - x| < |b - x|.
Function Signature
def dice_game (a b : Nat) : Nat × Nat × Nat
Theorem Signature
def abs_diff (x y : Nat) : Nat :=
if x ≥ y then x - y else y - x
def is_closer (player other dice : Nat) : Bool :=
abs_diff player dice < abs_diff other dice
def is_equal_dist (player other dice : Nat) : Bool :=
abs_diff player dice = abs_diff other dice
def count_outcomes_prop (a b first draw second : Nat) : Prop :=
first + draw + second = 6 ∧
first = ((List.range 6).filter (fun d => is_closer a b (d+1))).length ∧
draw = ((List.range 6).filter (fun d => is_equal_dist a b (d+1))).length ∧
second = ((List.range 6).filter (fun d => is_closer b a (d+1))).length
theorem dice_game_spec (a b : Nat) : let (first, draw, second) := dice_game a b; count_outcomes_prop a b first draw second
Please log in or register to submit a solution for this challenge.