aboutsummaryrefslogtreecommitdiff
path: root/day05/part2
diff options
context:
space:
mode:
authorNat Lasseter <user@4574.co.uk>2018-12-05 10:38:42 +0000
committerNat Lasseter <user@4574.co.uk>2018-12-05 10:38:42 +0000
commit67d468a613bd6e20b2e9607f350bc0878e2ae8d8 (patch)
tree3a497af4cb5e868ba6baad14a9d12550a367e3ba /day05/part2
parentcd5acc649c31f299f16ec1e205a752e19b908bc5 (diff)
[day05] made it fast with barrucadu's suggestion
Diffstat (limited to 'day05/part2')
-rwxr-xr-xday05/part230
1 files changed, 13 insertions, 17 deletions
diff --git a/day05/part2 b/day05/part2
index b71d84e..d09ff86 100755
--- a/day05/part2
+++ b/day05/part2
@@ -8,27 +8,23 @@ lengths = {}
units.each do |unit|
polymer = input.dup
polymer.delete_if {|u| u == unit || u == unit.upcase}
- l = polymer.length
- loop do
- i = polymer.length - 1
- loop do
- break if i < 1
+ nextpolymer = Array.new(polymer.length)
+ nextpolymer[0] = polymer[0]
+ index = 1
+ nextindex = 0
- if polymer[i] == polymer[i-1].swapcase
- polymer.delete_at(i)
- polymer.delete_at(i-1)
- i -= 2
- else
- i -= 1
- end
- end
- if polymer.length == l
- break
+ while index < polymer.length do
+ if polymer[index].swapcase != nextpolymer[nextindex]
+ nextindex += 1
+ nextpolymer[nextindex] = polymer[index]
else
- l = polymer.length
+ nextpolymer[nextindex] = nil
+ nextindex -= 1
end
+ index += 1
end
- lengths[unit] = polymer.length
+
+ lengths[unit] = nextpolymer.compact.length
end
puts lengths.values.min