From 5ac0c699e536ce3333a5dd4bf6d2c610ddaaac0b Mon Sep 17 00:00:00 2001 From: Danila Fedorin Date: Sun, 2 Dec 2018 21:34:51 -0800 Subject: [PATCH] Merge other solutions into one file. --- day1.cr | 20 ++++++++++++++++++++ day1_1.cr | 4 ---- day1_2.cr | 19 ------------------- day2.cr | 30 ++++++++++++++++++++++++++++++ day2_1.cr | 15 --------------- day2_2.cr | 15 --------------- 6 files changed, 50 insertions(+), 53 deletions(-) create mode 100644 day1.cr delete mode 100644 day1_1.cr delete mode 100644 day1_2.cr create mode 100644 day2.cr delete mode 100644 day2_1.cr delete mode 100644 day2_2.cr diff --git a/day1.cr b/day1.cr new file mode 100644 index 0000000..0de8e8c --- /dev/null +++ b/day1.cr @@ -0,0 +1,20 @@ +changes = File.read("day1").split("\n") + .select { |it| !it.empty? } + .map(&.to_i) + +puts "Final frequency: #{changes.sum}" + +count = { 0 => 1 } +acc = 0 + +changes.cycle do |i| + acc += i + old_count = count[acc]? || 0 + new_count = old_count + 1 + count[acc] = new_count + + if new_count == 2 + puts acc + exit + end +end diff --git a/day1_1.cr b/day1_1.cr deleted file mode 100644 index f36a1db..0000000 --- a/day1_1.cr +++ /dev/null @@ -1,4 +0,0 @@ -puts File.read("day1").split("\n") - .select { |it| !it.empty? } - .map(&.to_i) - .sum diff --git a/day1_2.cr b/day1_2.cr deleted file mode 100644 index 0d62b69..0000000 --- a/day1_2.cr +++ /dev/null @@ -1,19 +0,0 @@ -count = { 0 => 1 } -acc = 0 -changes = File.read("day1").split("\n") - .select { |it| !it.empty? } - .map(&.to_i) - -while true - changes.each do |i| - acc += i - old_count = count[acc]? || 0 - new_count = old_count + 1 - count[acc] = new_count - - if new_count == 2 - puts acc - exit - end - end -end diff --git a/day2.cr b/day2.cr new file mode 100644 index 0000000..6d11914 --- /dev/null +++ b/day2.cr @@ -0,0 +1,30 @@ +require "./common.cr" + +lines = File.read("day2").split("\n") +lines.pop + +CHARS = ('a'..'z').to_a + +def has_n?(string, n) + return string.chars.count_each(CHARS).any?(&.[](1).==(n)) +end + +def count_changes(s1, s2) + pairs = s1.chars.zip s2.chars + total = 0 + pairs.each do |pair| + total += 1 if pair[0] != pair[1] + end + return total +end + +two = lines.count { |s| has_n?(s, 2) } +three = lines.count { |s| has_n?(s, 3) } +puts "\"Hash\": #{two * three}" + +lines.product(lines).each do |pair| + if count_changes(pair[0], pair[1]) == 1 + puts "Strings: #{pair[0]}, #{pair[1]}" + exit + end +end diff --git a/day2_1.cr b/day2_1.cr deleted file mode 100644 index 520988a..0000000 --- a/day2_1.cr +++ /dev/null @@ -1,15 +0,0 @@ -lines = File.read("day2").split("\n") -lines.pop - -CHARS = ('a'..'z').to_a - -def has_n?(string, n) - CHARS.each do |c| - return true if string.count(c) == n - end - return false -end - -two = lines.count { |s| has_n?(s, 2) } -three = lines.count { |s| has_n?(s, 3) } -puts two * three diff --git a/day2_2.cr b/day2_2.cr deleted file mode 100644 index 5e2ac53..0000000 --- a/day2_2.cr +++ /dev/null @@ -1,15 +0,0 @@ -lines = File.read("day2").split("\n") -lines.pop - -def count_changes(s1, s2) - pairs = s1.chars.zip s2.chars - total = 0 - pairs.each do |pair| - total += 1 if pair[0] != pair[1] - end - return total -end - -lines.product(lines).each do |pair| - puts "#{pair[0]}, #{pair[1]}" if count_changes(pair[0], pair[1]) == 1 -end