diff --git a/2021/Day8/Elixir/seven_segment_search.ex b/2021/Day8/Elixir/seven_segment_search.ex new file mode 100644 index 0000000..9307797 --- /dev/null +++ b/2021/Day8/Elixir/seven_segment_search.ex @@ -0,0 +1,74 @@ +ExUnit.start() + +defmodule SevenSegmentSearch do + def load_file(path) do + File.read!(path) + |> String.split("\n", trim: true) + end + + def parse_input(lines) do + lines + |> Enum.map(fn line -> + {signals, output_values} = + String.split(line, "|", trim: true) + |> Enum.map(fn part -> String.split(part, " ", trim: true) end) + |> List.to_tuple() + end) + end + + @spec find_unique([String], [String]) :: [String] + def find_unique(signals, output_values) do + unique_signal_lengths = + signals + |> Enum.map(&String.length/1) + |> Enum.frequencies() + |> Enum.filter(fn {_, occurences} -> occurences == 1 end) + |> Enum.map(&elem(&1, 0)) + + Enum.filter(output_values, fn value -> + Enum.member?(unique_signal_lengths, String.length(value)) + end) + end + + @spec first() :: Integer + def first() do + inputs = + load_file("../input.txt") + |> parse_input() + + Enum.map(inputs, fn {signals, output_values} -> find_unique(signals, output_values) end) + |> List.flatten() + |> Enum.count() + end + + @spec second() :: Integer + def second() do + :second + end +end + +defmodule SevenSegmentSearchTest do + use ExUnit.Case + + describe "find_unique/2" do + test "Example" do + signals = [ + "be", + "cfbegad", + "cbdgef", + "fgaecd", + "cgeb", + "fdcge", + "agebfd", + "fecdb", + "fabcd", + "edb" + ] + + output_values = ["fdgacbe", "cefdb", "cefbgd", "gcbe"] + + expected_result = ["fdgacbe", "gcbe"] + assert SevenSegmentSearch.find_unique(signals, output_values) == expected_result + end + end +end diff --git a/2021/Day8/test.txt b/2021/Day8/test.txt new file mode 100644 index 0000000..8614893 --- /dev/null +++ b/2021/Day8/test.txt @@ -0,0 +1,10 @@ +be cfbegad cbdgef fgaecd cgeb fdcge agebfd fecdb fabcd edb | fdgacbe cefdb cefbgd gcbe +edbfga begcd cbg gc gcadebf fbgde acbgfd abcde gfcbed gfec | fcgedb cgb dgebacf gc +fgaebd cg bdaec gdafb agbcfd gdcbef bgcad gfac gcb cdgabef | cg cg fdcagb cbg +fbegcd cbd adcefb dageb afcb bc aefdc ecdab fgdeca fcdbega | efabcd cedba gadfec cb +aecbfdg fbg gf bafeg dbefa fcge gcbea fcaegb dgceab fcbdga | gecf egdcabf bgf bfgea +fgeab ca afcebg bdacfeg cfaedg gcfdb baec bfadeg bafgc acf | gebdcfa ecba ca fadegcb +dbcfg fgd bdegcaf fgec aegbdf ecdfab fbedc dacgb gdcebf gf | cefg dcbef fcge gbcadfe +bdfegc cbegaf gecbf dfcage bdacg ed bedf ced adcbefg gebcd | ed bcgafe cdgba cbgef +egadfb cdbfeg cegd fecab cgb gbdefca cg fgcdab egfdb bfceg | gbdfcae bgc cg cgb +gcafb gcf dcaebfg ecagb gf abcdeg gaef cafbge fdbac fegbdc | fgae cfgab fg bagce \ No newline at end of file