- Make sure you have elixir installed and running. (Hint:
elixir --version
) - Download all gist files and run
elixir 2_inventory_management.ex
. That will compile the code and give you results. - Run
elixir 2_inventory_management.ex --test
to run tests. - Have more fun!
Last active
December 2, 2018 21:12
-
-
Save 0xGGGGG/99f546691178afdd9ca8bd84017b2d1a to your computer and use it in GitHub Desktop.
#AdventOfCode 2018 #elixir #elixirlang
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
defmodule InventoryManagement.Checksum do | |
def checksum(stream) do | |
stream | |
|> Stream.map(&String.trim/1) | |
|> Stream.map(&count_occurances/1) | |
|> Enum.reduce([two: 0, three: 0], &collect_each/2) | |
|> Enum.reduce(1, fn {_, val}, acc -> val * acc end) | |
end | |
defp collect_each([two: item_two, three: item_three], two: two, three: three) do | |
[two: two + item_two, three: three + item_three] | |
end | |
defp count_occurances(id) do | |
id | |
|> String.graphemes() | |
|> Enum.reduce(%{}, &count_letters/2) | |
|> Enum.reduce([two: 0, three: 0], &calc_valids/2) | |
end | |
defp count_letters(letter, acc), do: Map.update(acc, letter, 1, &(&1 + 1)) | |
defp calc_valids({_, count}, two: two, three: three) do | |
case count do | |
3 -> | |
[two: two, three: 1] | |
2 -> | |
[two: 1, three: three] | |
_ -> | |
[two: two, three: three] | |
end | |
end | |
end | |
defmodule InventoryManagement.PrototypeFabric do | |
def find(stream) do | |
stream | |
|> Stream.map(&String.trim/1) | |
|> Enum.reduce_while(MapSet.new(), &collect_combinations/2) | |
end | |
defp collect_combinations(id, combinations) do | |
id_combs = make_id_combs(id) | |
case Enum.find(id_combs, &MapSet.member?(combinations, &1)) do | |
comb when is_binary(comb) -> | |
{:halt, comb} | |
nil -> | |
combinations = Enum.reduce(id_combs, combinations, &MapSet.put(&2, &1)) | |
{:cont, combinations} | |
end | |
end | |
defp make_id_combs(id) do | |
for i <- 0..(String.length(id) - 1) do | |
for j <- 0..(String.length(id) - 1), j != i, into: "", do: String.at(id, j) | |
end | |
end | |
end | |
test = fn -> | |
defmodule InventoryManagementTest do | |
use ExUnit.Case, async: true | |
describe "part#1 checksum" do | |
test "calculated correctly with example input" do | |
example = | |
""" | |
abcdef | |
bababc | |
abbcde | |
abcccd | |
aabcdd | |
abcdee | |
ababab | |
""" | |
|> String.splitter("\n", trim: true) | |
assert 12 == InventoryManagement.Checksum.checksum(example) | |
end | |
end | |
describe "part#2 find prototype fabric" do | |
test "for example input" do | |
example = | |
""" | |
abcde | |
fghij | |
klmno | |
pqrst | |
fguij | |
axcye | |
wvxyz | |
""" | |
|> String.splitter("\n", trim: true) | |
assert "fgij" == InventoryManagement.PrototypeFabric.find(example) | |
end | |
end | |
end | |
end | |
case System.argv() do | |
["--test"] -> | |
ExUnit.start() | |
test.() | |
_ -> | |
checksum = | |
File.stream!("./2_inventory_management_input.txt") | |
|> InventoryManagement.Checksum.checksum() | |
IO.puts("Checksum result of the input file is... #{checksum}") | |
common_letters = | |
File.stream!("./2_inventory_management_input.txt") | |
|> InventoryManagement.PrototypeFabric.find() | |
IO.puts("Common letters for prototype fabric is... #{common_letters}") | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
fzostwblnqkhpuzxirnevmaycq | |
fzastwblgqkupujxirnevmaucd | |
fzostwbxgakhpujxirnevmayci | |
uzosmwblgqkhlujxirnevmaycd | |
bzostwblgqkhpujxirnenfaycd | |
fzostwblghkhpujxibneemaycd | |
fzostwblgrkkpujxirnevqaycd | |
fzostwblgqkhpkjxirqkvmaycd | |
fzostwblgqdxpujbirnevmaycd | |
fzostwblgykhfujxirfevmaycd | |
fzostwbvgskhpujxirnevmagcd | |
flostwblgokhpuixirnevmaycd | |
fzostwblgzkhppjxirnevxaycd | |
ftosuwblgqkhpujxirnevmeycd | |
fzostkblgqkzpujxirnrvmaycd | |
fuostwbugqkhnujxirnevmaycd | |
frostwblgqkhpujsirneamaycd | |
bzostwblgqkhpajxirnevmuycd | |
fzysttbluqkhpujxirnevmaycd | |
czostgblgqkhpujxirnevmgycd | |
fzostwbcgqkhpujxirnevmavcr | |
vzostwbdgqrhpujxirnevmaycd | |
fzostwblgxkhpujxirnekmdycd | |
fzostwblgdkspzjxirnevmaycd | |
fzoqtwblgquhpujxirnevkaycd | |
fzostwblgqjhfujxirnevmayzd | |
fyostwblgtkhpujxilnevmaycd | |
izostwblzqkhpupxirnevmaycd | |
fzoaurblgqkhpujxirnevmaycd | |
fzostjblgqkhpbjxirbevmaycd | |
fzostwblgqkhpujmirngvmayca | |
fxostwbhgqkhiujxirnevmaycd | |
fzostwblngkhpujxirnemmaycd | |
fzosgwblgqkhpujxirnlvqaycd | |
bpostwblgqkhxujxirnevmaycd | |
fzhstwblgqshpujxirnepmaycd | |
fzootwbegqkhwujxirnevmaycd | |
fzmstwblgqkhmujxirnevsaycd | |
fzostwolgqkhpujxirnevmaysp | |
foostwblgqohpujxirnevmayyd | |
fzostwblgqkhgujxgrnevqaycd | |
fzostwbltqkhjujxipnevmaycd | |
fsostwblgqkhfujxirnevmayck | |
fzostwmlgqkbpujxifnevmaycd | |
fdostwblgqkhsujxirnecmaycd | |
fzostwblgquhpejxiinevmaycd | |
fzoqtwblgqkhkujxirnevmaywd | |
fzostwblmqkmpujxirnyvmaycd | |
fzjstwblgqkhpuyxirneomaycd | |
fzortwblgqkhpzjxprnevmaycd | |
fzosnwulgqkhpujxirnevpaycd | |
fzostwbegqkvpujxirnevmaykd | |
fzostwylzqkypujxirnevmaycd | |
fioshwblgqehpujxirnevmaycd | |
fzostwbliqkhoujxirnesmaycd | |
fzostwblgqkhpujdirnelmqycd | |
fzmstwblgqkhpujxirnnvpaycd | |
fzostwbtgqkhcujxirnevmaycz | |
fzostwblgqkfpujeignevmaycd | |
fzostwbegqkhpuvxirndvmaycd | |
fzostwblgqkcpujxmrnevmaycp | |
fvostwblgqkhpyjxirnevmaycx | |
fzostwblgqkhpufxirnevmzacd | |
fzisjwblglkhpujxirnevmaycd | |
fzosowbliqkhgujxirnevmaycd | |
fzostwblgqkhpujxirnyvmaywl | |
fzostwbllqnzpujxirnevmaycd | |
fzostwblgquhpujxirneomayci | |
fzostwblgqjepujximnevmaycd | |
fzostwblgqrhbujxijnevmaycd | |
fzostoblgqkhpujxirnevmoynd | |
fzortwblgqkhpujxixnevjaycd | |
fzostwhlgqkapujxirnevmaych | |
fzostwblgakhpujxirnevfayct | |
faostwblgqohpljxirnevmaycd | |
fzostwbhgqkhpujxirnyvcaycd | |
fjostwblgqkhpwjxirnevjaycd | |
fzostwblgqklpuixirnevmayxd | |
fzostwblgqkhhujxirncvmayce | |
fzostwblzqkhpzjxkrnevmaycd | |
fzostwblqqkbpujxirnevmcycd | |
ffostwblxqkhpujxirnevmayxd | |
fzostwblgqkhpbuxirnefmaycd | |
szostiblgqkhpujxirnevoaycd | |
fhlstwblgqkhpujxirnevmaycb | |
fzostwblgwfhpujxirnevmayed | |
fyostwblgqkhzujxirnevmayjd | |
fzostwblgqkvrujxirnevmaucd | |
fzestwblghkhpujxirnevmaycq | |
foostwbkgqkhhujxirnevmaycd | |
fpxstwblgqkhpujxirzevmaycd | |
fsostwtlgqmhpujxirnevmaycd | |
feostwelgqkhpumxirnevmaycd | |
fzostwbvgqkhpujkirnevmayce | |
fzmsewblgqahpujxirnevmaycd | |
fzsstsblgkkhpujxirnevmaycd | |
fzostwblgqkhxajxirneumaycd | |
fzostwblmqkhpujyisnevmaycd | |
gzostwblgqkhphjxirnevmavcd | |
fzostwblgckgpujxirnzvmaycd | |
qzostdblgqkhpujxirnevmaywd | |
fzoshwblgskhpufxirnevmaycd | |
fzosdwblgqkhpujkirnevjaycd | |
fzvstwblgqkhpuixdrnevmaycd | |
szostwblgqxhpujeirnevmaycd | |
fzosvwblgtkhpujxirnevmoycd | |
fzoscwblgqkkpujxirnevmvycd | |
fzostsblgqnlpujxirnevmaycd | |
fzostwblgmkhpujxlrnevjaycd | |
fzosnwblgqklpugxirnevmaycd | |
fcostwblgqpmpujxirnevmaycd | |
ozostwblgbkhpujxirnevmafcd | |
fzostwbagqkhiujxirneemaycd | |
fzosxwblgqkhpumxirneymaycd | |
fpostkblgqkhpujxianevmaycd | |
fzostwblgvkhhujxirnevmaycl | |
fzobtwtlgqkhpuwxirnevmaycd | |
fzostwvwgqkhpujxirtevmaycd | |
xzostwglgqkhpujtirnevmaycd | |
fzostwblgvkhtujxirnzvmaycd | |
jzostwblgqkhpujxirrevmvycd | |
pzostwbagqkhpujxirnevjaycd | |
fzostwclgqkhpujxirnhvmeycd | |
fzostwblglkhpujxirnevmayrf | |
fzoskwblnqkhpujxirnevmaysd | |
fzostbblgqkhpujxirnevmjycw | |
fzostwblggobpujxirnevmaycd | |
fzostwblgckhpijxirnevmayxd | |
fiostwrlgqkhpujxirnevmayck | |
frfstwblvqkhpujxirnevmaycd | |
fzowvwblgqkhpujsirnevmaycd | |
fzostwblgquhgujxirnevmiycd | |
fzoztwblgqkhpujxvrnevmaycj | |
fzostnbtgqkhpujxixnevmaycd | |
fzfstwblgjkrpujxirnevmaycd | |
fzostwblpqkhpdrxirnevmaycd | |
fivstwblgqkhpuixdrnevmaycd | |
fzostwbpgqkhpdjxirnewmaycd | |
fzostwblgqkhpdjxsrngvmaycd | |
fzostwblsqkhpujxisnxvmaycd | |
fcosvwblgqkhpujxirnevmavcd | |
fzostwrlgekhgujxirnevmaycd | |
fzostwblgqkhpujxindeimaycd | |
uzostwblgqshpujxirnevmwycd | |
fzostwzliqkhpujxirnevmaycu | |
zzostwbtgqkhpijxirnevmaycd | |
fzoltwblgqkhpujxinncvmaycd | |
fzostwblgqkzpujxprnevmayhd | |
fqostwblgqkhpujrirnevmzycd | |
jzostwblgqkhpuzxkrnevmaycd | |
fzostwblgqkhpuwxirszvmaycd | |
fzostwblgqkhpxjxilnevdaycd | |
fpmstwblgqkhpujxirnwvmaycd | |
fzoejwblqqkhpujxirnevmaycd | |
fzostwblgkshzujxirnevmaycd | |
fzoatqblgqxhpujxirnevmaycd | |
fzostwblgpkhpujiipnevmaycd | |
fzostwblgqghpujgbrnevmaycd | |
izosowblgqkhpujxirnejmaycd | |
fzostwblgqthpujxjrnevmalcd | |
fzovtwbcgqkhpujxicnevmaycd | |
fzoatwblgqkhpujxidntvmaycd | |
kzpstwblgqihpujxirnevmaycd | |
fzosawnlgqkhpujxibnevmaycd | |
fzostwblgqkhpujxarnevdajcd | |
bzostwblgqkhpujxvrnevmrycd | |
fzostwblgqkhpwfxirnevmazcd | |
fzostwblgqknpujyiqnevmaycd | |
zzostwblgqkhpujyirneqmaycd | |
flosiwblgqihpujxirnevmaycd | |
fzoetwblgqkhxujxirnevmeycd | |
fznstwbugqkhpujxibnevmaycd | |
fzbstwblgqkhpudxitnevmaycd | |
fzostwblgqkhkujxirnexaaycd | |
fzohthblgqkhpujxiknevmaycd | |
fzostwblgqkhpujxirnevvayjt | |
fzostwblggkhpujxirnrvqaycd | |
fzostwblgqslpujxirnevmaysd | |
aoostwblgqkhpnjxirnevmaycd | |
fzostwblgqkhlutxirnevuaycd | |
fxostwbugqkhpujxirnexmaycd | |
fzoftwblgqkhpsjxirnevmaywd | |
fzbstwblgqkhndjxirnevmaycd | |
fzostwblgqkhpxjxipnlvmaycd | |
fzostwbloqkhowjxirnevmaycd | |
fzostwblgqkcpdjxirnevnaycd | |
vzostiblgqkhpsjxirnevmaycd | |
fzostwblgqkhazjxirnevmaycg | |
fzostaklgqkhpujxirnevmaypd | |
fzostwblgkkhppjxirnevpaycd | |
izostwblgqkhpujairhevmaycd | |
fzostwdlgqkhpuqxzrnevmaycd | |
fzostwblgqkepujxernevmayct | |
fzostdblgqkhpujxyrnehmaycd | |
fzostwblgqkhsujxirnenfaycd | |
fzostwblgqkhpujxifnevmajld | |
fzostwblgokhpujxirxemmaycd | |
fzastwblcqkhpujxiruevmaycd | |
fzostwsxgqkhpuexirnevmaycd | |
xzosxwblgqkhpujxirnetmaycd | |
fzostwblgqkhpuexirnevmkccd | |
fzostwblgqklpujxirnermfycd | |
fzoetwblgqkhpujxirnehhaycd | |
ffostwblgvkhpujxirnevmazcd | |
fcosywblgqkhpujxirnevmaycy | |
fzmstwblgqkhpujxdrnevmaycl | |
fpostwblgqahpujxirnqvmaycd | |
fzostwbmgqkhpulxornevmaycd | |
fzostwblgqkopujxqrnevmrycd | |
fzostwblgqkhpujxisnevmjgcd | |
fzogtwulfqkhpujxirnevmaycd | |
fzostwalgqkhpcjxirnevmayud | |
fzosxwblgqkhpujxirnevmasmd | |
fzostwblgrkowujxirnevmaycd | |
fzostsblgqkhpujxirnevmsccd | |
fzostwblgqkhpujxfrnnvmaocd | |
fzostwblgqkhpujxiynsvkaycd | |
fzosowblgqkhpwjxirnevmaecd | |
fzosgwblgfkhpujxyrnevmaycd | |
fzostsblgzkhpujmirnevmaycd | |
fzostwblrqkhyuixirnevmaycd | |
qzostwblgqkhpujxyrnevmvycd | |
lzostwblgqkhpujxirqevmaymd | |
fzostwblgqkbpujxirnefbaycd | |
fzostwblgmihpujxirnevmafcd | |
fzostmblgqkhpujxirnevmpynd | |
fzoltwblgqkhpujlihnevmaycd | |
fzostwblgqkhpujdirneviyycd | |
fzgspwblgqkhpqjxirnevmaycd | |
fzostwblgqkhtujkirnevmayld | |
fjostwblgqkhpagxirnevmaycd | |
fzpsthblgqkhpuzxirnevmaycd | |
fzostwblgqkhpuhxzrneymaycd | |
fzoftwblgqkepujxirnevcaycd | |
fzostwblgqkbpyjxipnevmaycd | |
fzostwqlgqkhpujxirjevmayad | |
fzoxtwblgqkypupxirnevmaycd | |
fzostwblgqwhpuoxiynevmaycd | |
fzostwblgqkhpfjkirnevmavcd | |
fzoqtwblgqkhpujxirnermaycp | |
fzostwbngxkhpujxirnevmayqd | |
fzostwqogqkhpcjxirnevmaycd | |
fzostwblyqkhpujxvrnevmayzd | |
vzostwblgqkhpujxirnevmlzcd | |
fzostwblaqkhpujxirnevbajcd | |
fdostwblgqkhpujxzrnevmayod | |
fzostxbloqkhpujxirnevmcycd | |
fzostwbcgqkhpyjxirnegmaycd | |
fzostwblgqkhpuyxirnzrmaycd | |
fzustwycgqkhpujxirnevmaycd |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment