Browse Source

Solve 2021 Day 8 part 1 in elixir

master
Garrit Franke 2 years ago
parent
commit
61dd98d749
Signed by: garrit
GPG Key ID: 65586C4DDA55EA2C
  1. 74
      2021/Day8/Elixir/seven_segment_search.ex
  2. 10
      2021/Day8/test.txt

74
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

10
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
Loading…
Cancel
Save