Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 7fd03ce

Browse files
committed
day13 outch
1 parent ed9b754 commit 7fd03ce

File tree

3 files changed

+60
-0
lines changed

3 files changed

+60
-0
lines changed

‎2020/day13/data.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
1002460
2+
29,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,41,x,x,x,x,x,x,x,x,x,601,x,x,x,x,x,x,x,23,x,x,x,x,13,x,x,x,17,x,19,x,x,x,x,x,x,x,x,x,x,x,463,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,37

‎2020/day13/data_test.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
939
2+
7,13,x,x,59,x,31,19

‎2020/day13/main.rb

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
#!/usr/bin/ruby
2+
require 'matrix'
3+
require 'test/unit'
4+
require 'pry'
5+
6+
def extract_data(name)
7+
data = File.read(name).split("\n")
8+
[data[0].to_i, data[1].split(',').map(&:to_i)]
9+
end
10+
11+
def resolve_1(data)
12+
data[1].reject { |e| e == 0 }.inject({ id: nil, time: Float::INFINITY }) { |h, id|
13+
time = - (data[0] % id) + id
14+
time < h[:time] ? { id: id, time: time, result: id * time } : h
15+
}[:result]
16+
end
17+
18+
def resolve_2(data)
19+
result = { first: 0, period: 1 }
20+
data[1].each_with_index do |v, delta|
21+
result = find_pair_match(result, v, delta)
22+
end
23+
result[:first]
24+
end
25+
26+
def find_pair_match(result, b, offset)
27+
return result if b == 0 # 'x'
28+
a = result[:period]
29+
time = result[:first]
30+
while (time + offset) % b != 0
31+
time += result[:period]
32+
end
33+
{ first: time, period: a * b }
34+
end
35+
36+
class Day12Test < Test::Unit::TestCase
37+
def test_star_1
38+
data = extract_data('data_test.txt')
39+
assert_equal 295, resolve_1(data)
40+
end
41+
42+
def test_star_1_final
43+
data = extract_data('data.txt')
44+
assert_equal 4808, resolve_1(data)
45+
end
46+
47+
def test_star_2
48+
data = extract_data('data_test.txt')
49+
assert_equal 1068781, resolve_2(data)
50+
end
51+
52+
def test_star_2_final
53+
data = extract_data('data.txt')
54+
assert_equal 741745043105674, resolve_2(data)
55+
end
56+
end

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /