Garrit Franke
2 years ago
2 changed files with 84 additions and 0 deletions
@ -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 |
@ -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 |
Loading…
Reference in new issue