From 24c93c7a63fa2575fdd0befd4d8709820a501a69 Mon Sep 17 00:00:00 2001 From: Danila Fedorin Date: Wed, 5 Dec 2018 15:58:46 -0800 Subject: [PATCH] Use extra functions and stop using downcase array. --- common.cr | 22 ++++++++++++++++++++++ day5.cr | 7 ++----- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/common.cr b/common.cr index bba177d..e76094e 100644 --- a/common.cr +++ b/common.cr @@ -20,3 +20,25 @@ class Rectangle end end end + +class String + def select(&block) + String.build do |s| + each_char do |c| + s << c if yield c + end + end + end + + def select!(&block) + i = 0 + s = size + while i < s + if yield [i] + i += 1 + else + s -= 1 + end + end + end +end diff --git a/day5.cr b/day5.cr index a98a36b..3dcd7ba 100644 --- a/day5.cr +++ b/day5.cr @@ -3,7 +3,6 @@ require "./common.cr" lines = File.read("day5_input").split("\n") def react(string) - lower = string.downcase.chars string = string.chars changed = true @@ -13,11 +12,9 @@ def react(string) while i < string.size - 1 next_i = i + 1 if string[i] != string[next_i] && - lower[i] == lower[next_i] + string[i].downcase == string[next_i].downcase string.delete_at i string.delete_at i - lower.delete_at i - lower.delete_at i i -= 1 i = 0 if i < 0 @@ -35,7 +32,7 @@ puts react(lines[0]).size pairs = {} of Tuple(Char, Char) => Int32 ('a'..'z').to_a.zip(('A'..'Z').to_a).each do |pair| - new_string = lines[0].delete(pair[0]).delete(pair[1]) + new_string = lines[0].select { |c| c != pair[0] && c != pair[1] } pairs[pair] = react(new_string).size end