Solution for Day 22
This commit is contained in:
parent
9bc2493bdd
commit
7fa8c31b11
15
day_22/first.rb
Normal file
15
day_22/first.rb
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
input = File.read('./input').split("\n\n").map { |l| l.split("\n") }
|
||||||
|
|
||||||
|
$p1 = input[0].drop(1).map(&:to_i)
|
||||||
|
$p2 = input[1].drop(1).map(&:to_i)
|
||||||
|
|
||||||
|
until $p1.empty? || $p2.empty?
|
||||||
|
p1 = $p1.shift
|
||||||
|
p2 = $p2.shift
|
||||||
|
|
||||||
|
p1 > p2 ? $p1.push(p1, p2) : $p2.push(p2, p1)
|
||||||
|
end
|
||||||
|
|
||||||
|
$winner = $p1.empty? ? $p2 : $p1
|
||||||
|
|
||||||
|
puts (1..$winner.size).reverse_each.zip($winner).map { |l, r| l * r }.sum
|
53
day_22/input
Normal file
53
day_22/input
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
Player 1:
|
||||||
|
28
|
||||||
|
13
|
||||||
|
25
|
||||||
|
16
|
||||||
|
38
|
||||||
|
3
|
||||||
|
14
|
||||||
|
6
|
||||||
|
29
|
||||||
|
2
|
||||||
|
47
|
||||||
|
20
|
||||||
|
35
|
||||||
|
43
|
||||||
|
30
|
||||||
|
39
|
||||||
|
21
|
||||||
|
42
|
||||||
|
50
|
||||||
|
48
|
||||||
|
23
|
||||||
|
11
|
||||||
|
34
|
||||||
|
24
|
||||||
|
41
|
||||||
|
|
||||||
|
Player 2:
|
||||||
|
27
|
||||||
|
37
|
||||||
|
9
|
||||||
|
10
|
||||||
|
17
|
||||||
|
31
|
||||||
|
19
|
||||||
|
33
|
||||||
|
40
|
||||||
|
12
|
||||||
|
32
|
||||||
|
1
|
||||||
|
18
|
||||||
|
36
|
||||||
|
49
|
||||||
|
46
|
||||||
|
26
|
||||||
|
4
|
||||||
|
45
|
||||||
|
8
|
||||||
|
15
|
||||||
|
5
|
||||||
|
44
|
||||||
|
22
|
||||||
|
7
|
29
day_22/second.rb
Normal file
29
day_22/second.rb
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
input = File.read('./input').split("\n\n").map { |l| l.split("\n") }
|
||||||
|
|
||||||
|
p1 = input[0].drop(1).map(&:to_i)
|
||||||
|
p2 = input[1].drop(1).map(&:to_i)
|
||||||
|
|
||||||
|
def play_game(deck1, deck2)
|
||||||
|
history = {}
|
||||||
|
|
||||||
|
until deck1.empty? || deck2.empty?
|
||||||
|
return true if history[deck1] && history[deck2]
|
||||||
|
|
||||||
|
history[deck1] = true
|
||||||
|
history[deck2] = true
|
||||||
|
p1 = deck1.shift
|
||||||
|
p2 = deck2.shift
|
||||||
|
|
||||||
|
round_winner = if p1 <= deck1.size && p2 <= deck2.size
|
||||||
|
play_game(deck1[0, p1], deck2[0, p2])
|
||||||
|
else
|
||||||
|
p1 > p2
|
||||||
|
end
|
||||||
|
round_winner ? deck1.push(p1, p2) : deck2.push(p2, p1)
|
||||||
|
end
|
||||||
|
winner = deck1.empty? ? deck2 : deck1
|
||||||
|
deck1.size > deck2.size
|
||||||
|
end
|
||||||
|
|
||||||
|
winner = play_game(p1, p2) ? p1 : p2
|
||||||
|
puts (1..winner.size).reverse_each.zip(winner).map { |l, r| l * r }.sum
|
13
day_22/test
Normal file
13
day_22/test
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
Player1:
|
||||||
|
9
|
||||||
|
2
|
||||||
|
6
|
||||||
|
3
|
||||||
|
1
|
||||||
|
|
||||||
|
Player2:
|
||||||
|
5
|
||||||
|
8
|
||||||
|
4
|
||||||
|
7
|
||||||
|
10
|
Loading…
x
Reference in New Issue
Block a user