aboutsummaryrefslogtreecommitdiff
path: root/day13/part2.rb
diff options
context:
space:
mode:
authorNat Lasseter <user@4574.co.uk>2022-12-13 10:42:53 +0000
committerNat Lasseter <user@4574.co.uk>2022-12-13 10:42:53 +0000
commit278c2d2acd0b3be7c887f03d89ea7f52a697a204 (patch)
tree445772b73a43d6db0355acc997def53691978a74 /day13/part2.rb
parentb17166713c3c9f3b4580fc741135e85928afa3a3 (diff)
Day 13, a very special spaceship.
Diffstat (limited to 'day13/part2.rb')
-rw-r--r--day13/part2.rb40
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)