Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 61dd98d

Browse files
Solve 2021 Day 8 part 1 in elixir
1 parent 83f3ae4 commit 61dd98d

File tree

2 files changed

+84
-0
lines changed

2 files changed

+84
-0
lines changed
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
ExUnit.start()
2+
3+
defmodule SevenSegmentSearch do
4+
def load_file(path) do
5+
File.read!(path)
6+
|> String.split("\n", trim: true)
7+
end
8+
9+
def parse_input(lines) do
10+
lines
11+
|> Enum.map(fn line ->
12+
{signals, output_values} =
13+
String.split(line, "|", trim: true)
14+
|> Enum.map(fn part -> String.split(part, " ", trim: true) end)
15+
|> List.to_tuple()
16+
end)
17+
end
18+
19+
@spec find_unique([String], [String]) :: [String]
20+
def find_unique(signals, output_values) do
21+
unique_signal_lengths =
22+
signals
23+
|> Enum.map(&String.length/1)
24+
|> Enum.frequencies()
25+
|> Enum.filter(fn {_, occurences} -> occurences == 1 end)
26+
|> Enum.map(&elem(&1, 0))
27+
28+
Enum.filter(output_values, fn value ->
29+
Enum.member?(unique_signal_lengths, String.length(value))
30+
end)
31+
end
32+
33+
@spec first() :: Integer
34+
def first() do
35+
inputs =
36+
load_file("../input.txt")
37+
|> parse_input()
38+
39+
Enum.map(inputs, fn {signals, output_values} -> find_unique(signals, output_values) end)
40+
|> List.flatten()
41+
|> Enum.count()
42+
end
43+
44+
@spec second() :: Integer
45+
def second() do
46+
:second
47+
end
48+
end
49+
50+
defmodule SevenSegmentSearchTest do
51+
use ExUnit.Case
52+
53+
describe "find_unique/2" do
54+
test "Example" do
55+
signals = [
56+
"be",
57+
"cfbegad",
58+
"cbdgef",
59+
"fgaecd",
60+
"cgeb",
61+
"fdcge",
62+
"agebfd",
63+
"fecdb",
64+
"fabcd",
65+
"edb"
66+
]
67+
68+
output_values = ["fdgacbe", "cefdb", "cefbgd", "gcbe"]
69+
70+
expected_result = ["fdgacbe", "gcbe"]
71+
assert SevenSegmentSearch.find_unique(signals, output_values) == expected_result
72+
end
73+
end
74+
end

‎2021/Day8/test.txt‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
be cfbegad cbdgef fgaecd cgeb fdcge agebfd fecdb fabcd edb | fdgacbe cefdb cefbgd gcbe
2+
edbfga begcd cbg gc gcadebf fbgde acbgfd abcde gfcbed gfec | fcgedb cgb dgebacf gc
3+
fgaebd cg bdaec gdafb agbcfd gdcbef bgcad gfac gcb cdgabef | cg cg fdcagb cbg
4+
fbegcd cbd adcefb dageb afcb bc aefdc ecdab fgdeca fcdbega | efabcd cedba gadfec cb
5+
aecbfdg fbg gf bafeg dbefa fcge gcbea fcaegb dgceab fcbdga | gecf egdcabf bgf bfgea
6+
fgeab ca afcebg bdacfeg cfaedg gcfdb baec bfadeg bafgc acf | gebdcfa ecba ca fadegcb
7+
dbcfg fgd bdegcaf fgec aegbdf ecdfab fbedc dacgb gdcebf gf | cefg dcbef fcge gbcadfe
8+
bdfegc cbegaf gecbf dfcage bdacg ed bedf ced adcbefg gebcd | ed bcgafe cdgba cbgef
9+
egadfb cdbfeg cegd fecab cgb gbdefca cg fgcdab egfdb bfceg | gbdfcae bgc cg cgb
10+
gcafb gcf dcaebfg ecagb gf abcdeg gaef cafbge fdbac fegbdc | fgae cfgab fg bagce

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /