aboutsummaryrefslogtreecommitdiff
path: root/day13/part1.rb
diff options
context:
space:
mode:
Diffstat (limited to 'day13/part1.rb')
-rw-r--r--day13/part1.rb42
1 files changed, 42 insertions, 0 deletions
diff --git a/day13/part1.rb b/day13/part1.rb
new file mode 100644
index 0000000..dccb210
--- /dev/null
+++ b/day13/part1.rb
@@ -0,0 +1,42 @@
+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) }.each_slice(2).to_a
+
+sum = 0
+i = 1
+packets.each do |left, right|
+ sum += i if compare(left, right) < 0
+ i += 1
+end
+puts sum