Solution for Day 22

This commit is contained in:
Patrick Michl 2020-12-22 15:34:34 +01:00
parent 9bc2493bdd
commit 7fa8c31b11
4 changed files with 110 additions and 0 deletions

15
day_22/first.rb Normal file
View 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
View 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
View 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
View File

@ -0,0 +1,13 @@
Player1:
9
2
6
3
1
Player2:
5
8
4
7
10