diff options
author | Nat Lasseter <user@4574.co.uk> | 2022-12-13 10:42:53 +0000 |
---|---|---|
committer | Nat Lasseter <user@4574.co.uk> | 2022-12-13 10:42:53 +0000 |
commit | 278c2d2acd0b3be7c887f03d89ea7f52a697a204 (patch) | |
tree | 445772b73a43d6db0355acc997def53691978a74 /day13/part2.rb | |
parent | b17166713c3c9f3b4580fc741135e85928afa3a3 (diff) |
Day 13, a very special spaceship.
Diffstat (limited to 'day13/part2.rb')
-rw-r--r-- | day13/part2.rb | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/day13/part2.rb b/day13/part2.rb new file mode 100644 index 0000000..2a3bc0c --- /dev/null +++ b/day13/part2.rb @@ -0,0 +1,40 @@ +def compare(left, right) + if left.is_a?(Numeric) && right.is_a?(Numeric) + left <=> right + elsif left.is_a?(Array) && right.is_a?(Array) + i = 0 + t = nil + loop do + if left[i].nil? && right[i].nil? + t = 0 + break + elsif left[i].nil? + t = -1 + break + elsif right[i].nil? + t = 1 + break + else + t = compare(left[i], right[i]) + if t == 0 + i += 1 + else + break + end + end + end + return t + elsif left.is_a?(Array) && right.is_a?(Numeric) + return compare(left, [right]) + elsif left.is_a?(Numeric) && right.is_a?(Array) + return compare([left], right) + end +end + +packets = $stdin.readlines.map(&:strip).reject(&:empty?).map{ |l| eval(l) } + [[[2]], [[6]]] + +packets.sort! do |left, right| + compare(left, right) +end + +puts (packets.index([[2]]) + 1) * (packets.index([[6]]) + 1) |