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