From 67d468a613bd6e20b2e9607f350bc0878e2ae8d8 Mon Sep 17 00:00:00 2001 From: Nat Lasseter Date: Wed, 5 Dec 2018 10:38:42 +0000 Subject: [day05] made it fast with barrucadu's suggestion --- day05/part1 | 31 +++++++++++++------------------ day05/part2 | 30 +++++++++++++----------------- 2 files changed, 26 insertions(+), 35 deletions(-) diff --git a/day05/part1 b/day05/part1 index 4761380..9fe581d 100755 --- a/day05/part1 +++ b/day05/part1 @@ -2,26 +2,21 @@ input = gets.chomp.chars -l = input.length -loop do - i = input.length - 1 - loop do - break if i < 1 +polymer = input +nextpolymer = Array.new(polymer.length) +nextpolymer[0] = polymer[0] +index = 1 +nextindex = 0 - if input[i] == input[i-1].swapcase - input[i] = nil - input[i-1] = nil - i -= 2 - else - i -= 1 - end - end - input = input.compact - if input.length == l - break +while index < polymer.length do + if polymer[index].swapcase != nextpolymer[nextindex] + nextindex += 1 + nextpolymer[nextindex] = polymer[index] else - l = input.length + nextpolymer[nextindex] = nil + nextindex -= 1 end + index += 1 end -puts input.length +puts nextpolymer.compact.length 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 -- cgit v1.2.1