From 91fbd98401dcde40c483cad42b746115d133bbd1 Mon Sep 17 00:00:00 2001 From: Nat Lasseter Date: Mon, 11 Dec 2017 10:40:38 +0000 Subject: Day 11 --- day11/part1 | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100755 day11/part1 (limited to 'day11/part1') diff --git a/day11/part1 b/day11/part1 new file mode 100755 index 0000000..372fb71 --- /dev/null +++ b/day11/part1 @@ -0,0 +1,63 @@ +#!/usr/bin/env ruby + +def optimise_ortho_meta(loc, left, right, center) + opt = [loc[left], loc[right]].min + loc[left] -= opt + loc[right] -= opt + loc[center] += opt + return opt > 0 +end + +def optimise_para(loc, forth, back) + return false if loc[forth].zero? || loc[back].zero? + + if loc[forth] > loc[back] then + loc[forth] = loc[forth] - loc[back] + loc[back] = 0 + return true + end + + if loc[back] > loc[forth] then + loc[back] = loc[back] - loc[forth] + loc[forth] = 0 + return true + end + + loc[forth] = 0 + loc[back] = 0 + return true +end + +input = gets.chomp.split(',') + +l = { + n: 0, + ne: 0, + se: 0, + s: 0, + sw: 0, + nw: 0 +} + +input.each do |dir| + l[dir.intern] += 1 +end + +changed = true +while changed do + changed = false + + changed |= optimise_ortho_meta(l, :ne, :nw, :n) + changed |= optimise_ortho_meta(l, :se, :sw, :s) + + changed |= optimise_ortho_meta(l, :n, :se, :ne) + changed |= optimise_ortho_meta(l, :n, :sw, :nw) + changed |= optimise_ortho_meta(l, :s, :ne, :se) + changed |= optimise_ortho_meta(l, :s, :nw, :sw) + + changed |= optimise_para(l, :nw, :se) + changed |= optimise_para(l, :n, :s) + changed |= optimise_para(l, :ne, :sw) +end + +puts l.values.inject(:+) -- cgit v1.2.3