this repo has no description
1<!-- livebook:{"persist_outputs":true} -->
2
3# Day 03
4
5```elixir
6Mix.install([
7 {:kino_aoc, git: "https://github.com/ljgago/kino_aoc"}
8])
9```
10
11<!-- livebook:{"output":true} -->
12
13```
14:ok
15```
16
17## Setup
18
19<!-- livebook:{"attrs":{"day":"3","session_secret":"ADVENT_OF_CODE_SESSION","variable":"puzzle_input","year":"2022"},"kind":"Elixir.KinoAOC.HelperCell","livebook_object":"smart_cell"} -->
20
21```elixir
22{:ok, puzzle_input} =
23 KinoAOC.download_puzzle("2022", "3", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION"))
24```
25
26<!-- livebook:{"output":true} -->
27
28```
29{:ok,
30 "gfWpjRRQffQGCHHJsGqjsj\nSclzJZZvmmnPbJtVSqqNBqVCBdSCsd\ntlbvZJDZtmtPcJmlPnhMFQWWpMRFTfLDRRTWRp\nHjMPgSWjVrjgbHRRSSMRgjRdpdbGdlcdCvQfcCdlwQJfdf\nLNDnhtNtLNFFZDtFnhzvdldDflvvDCdlJfldpJ\nZFLFZZmFtFtTNTSPRrVPWWMpRP\nqLBSBLRwmgzqCbzCffDlrfCV\nTFFFHNWFMFFMpHpGHMTHGNhrldWZCsdZsslZlZfrflDVss\nPTMcPGntTThHhTGctnMvSwjjvmmqLBmnjqqgCR\nnClJtMwwntqVVPJcgZqq\nmjpsDcrcSSFFPZqFBWWgVP\nvQcjsvhrvvrmhbmNHMNnlHbNMtCtNM\nbgvvhnTQtjrrrhsDDf\npLSMltLzLLSjFrSSjrSJHD\nzNWRLBdZPllPQtCvttgCqb\nDRlDrrFTNDNlgzsGTBfcnqhhcnJfcrCSqc\nMMmmdWtdLmvtldHjMmQfPBqSJWnfCCCqcWSSPJ\nvjHMjLmjpLtHptQLmHvwTRgNVVpTzZFZgZRlsVTN\nrzpMpDCGFCFFjRFsRPFRNFPv\nfWclbHCHtSmfvjnmfsvZ\nwTcTlSwwtQtWclBQBLGMLMCLVzVLwJGqLd\nMQSjLNjPPLLSBPjfQhSPHjDVCjDtVVpDHwbwVpbD\nRcmWzsRrzZrmTszWRqWlmRJscbtHwCbndCtcDVddDpdnVnbt\nJTsrGGTqmwTlWmTzJzWmhhPLLGgPFgBffSSPhFFM\nqMMRNZMDDNWLPqfzCgDcGncVDCgG\nwwBFhwhhBgmcVzhghG\ntbJbjjtJvwtdtwjpFtlbvtdTLNSMqNqMMgqNHPlZRTNggL\nqmjMHsZmZSbjbZMjSLFFFFwgsgvFswpwww\nhRJBhmnhhvFFwhcv\nllfWDWzrzBNTRfNBrWzzTmZbGTMjPqMmZPjVbSZGSP\nCRRPLwwcclcGVppQ\nSHFjDjjHDTfSDNTTHfSHjQVGrpmllQQWltVVVZGp\nHFlqzDTfqlzwbgPJLwCP\nWRCNLphpLppSCWVHNfLRzVnQMnBnMddPMQDFQgrhPQFM\njTjJqvqjvPVJFJFBJF\nqTsZbvGqqZlstsmZVljtwqwSHHNWczHSSRcWNSRHzzNfbW\nglgzDzHjSrVHcVgbrjmNsscNGmNWssGNNtst\nhHPQLHJpwdLpdHfQQtnZmNMwnZGZWwsFZM\nQpdhPJRTJfPphJfhCBlVqVvgvVDBbvVqDbHD\nVtHzjZpjVtHrprgGmjHsGHNdSJFQRcLJqCdQcSqJNpcq\nbBWfTPwhbfDlMnhffRwQJQNdqJcLFQLSdR\nbhBhvfMWTnlDnTBfPSmvmjsjmmGtzHtsHm\npcRPRPWrSDcJGZSStmwZZS\nVnLfCfTlfVzfnMMBCqVNZJdtjNtJjhJdGNNbwT\nBLvqCCMVsnRQsPQgDcZH\ncQbqqQhDGhlQfQlhQrqGsTNgLgCpRgLTPPPLNbpg\nwtHVddVFwSHznZwwznCpRBdjppNBNTTdCjRR\nZtWFwWtSmvVnwZDrCMGfQlDDJQmD\nPzPZGCZzrZrlhdjdCqfCsqQdRD\ncbvZLVVFvbbNSNFHSDnsDQdnfqNQDRngsR\nFJHSLSFSScJJbWHFmFVFSZmrrzBmhtBwmzBMPMPzPh\nnlpFcLBgcVcLbssGVBGGrlpGPhJJJJJqPBZPDNMQMJJhJQZZ\nSSTjHzfHwtZSPVQVQMRQ\nTzVHwWfTtzwdVzsbFnGgsbdcGrLc\nFppVBRVZDdLmrDGmmfrQ\nNtNMPNshJCzznLGJSrqRrRrr\ntRssthhPlCWhPzsWtzhzCbVVjwTpVwdZZTpwjbdBbwBc\nTTWblHWScvPCCHTWFzSrqqsNNSmdmqrrpz\nRLRwjjnjZNprzmmZcq\nQQgtQnccQDGjgLDRRcLthQhFBvCbMtMHTWlBFllBbFCMTW\nWnBVNvDnVsNvZWdrWDLVDMbsHpTjpHCSSClsbSCCMH\nGPFtmztzgPhRFtJTdbTwjppSCjpgSl\nhJcfPtQhdtWNVZqNnqNQ\nGLcqZPPsnqQcFsmBBrqRvrddNqrC\nMtHthJwLllwvjRvvtrvBRS\nVHMfDLbpfznszZQG\nWBSdPlQPRfBtGQPfBGPBJgzgjwsJzsszJwCrdwCT\nZpppVpMVpnVHMVVbZRJrCgwRzTJrwNJw\nMvhmnpLqLmhVmBlftRQBFSlR\nhhQlSJqhtCSnqZJnqShSlNDwRzpvdwRlMBMMdcjRjMpMRc\nfrrGmLmWbfFrsmFHmBzBvBcwdJbvpjzbMM\nmmgFrVGLWJLFGsgfhSVtVPqntqnnSStN\nSFJTJTSqswwFQbwf\ncDtcWPclrtPwVsfssQmN\nHDtwWCgWdggdzSGJMSzGMq\nJpqJtWRJMhCMJpMQCWtFrjgHdgdlgllwNjlQjldH\nfBzPZcZvnBmDnZvZBZDmPvglVVVdgHHSwrNRgVgwNPRH\nGbZnZccfvcsZmccsmnnZTRbCCMWFTWJqFCCMJFRT\nvrrFqrFTBTmLmNrLMqMTHddJbHpWnhdWdWbHhJGM\nwBzfwzcQSzWSSshpdWGp\ngwjPPPDQtzQlzQDPqTgLBRmRqZBvqFNR\nbWVptFFsbPcZsGLhsZGmLB\nqnWrnrHdMCDCNqfWmvRRZSSRLdRGZGRG\nnNqqNDfMrMWHDQNHzWfHNDnwzblpzFlbwtFbVVlwVcPJpP\nBHJhlHdJQggvddglJBBhglhQzZHPZpFFPDMzFDDRDFZZDFZD\nrSTfqnCffMfCVfCLNqbzbjWNDbbWDPFpPFbP\nnfnnrSfCTVSwrqSLCGfTGlgQhlvsGMJQJBhhssJhGc\ntBjjDjjqfDjLfJlrLgglvmrlmrcc\nTwNNTVhwwpgvGSNNSssS\nTbwhnvvChhbVRTPPRJBJQQfJttMQQJCQfW\nmWSvSQVgmWQsQvspQJlrlLnJLLpCClhhlp\nbFHRjZdNjjBZzFzhtnCllCcJLrCBll\nHFFNHbdZZLZjfPFjHVQmWDDVsvsmTqVqDf\nJJPllQQClqgBCgdHwHbpjVTwHd\ntmGZtjGjHZpVbfMT\nShGjNGWmDSNcNRtGmshDRzzCvzQJJRBLrvlrBPJv\ncTpqsTWqVVpsNLfvCDFlMFDVFL\nJnndJPddQgzHlvMJFDhLCG\nBjtntgdRnQgzjdBRQBlpNWrTTlNTSwNpWS\nqHmqLVLjmVqsDBLtmjmbtPwCTwwPzGWRgGwGwMwW\nZhcCNCSprRTWTwSnWW\nhflhZvvQhppZfcNpvrhpQHjVjLmbVmmVHVCFDvqVFb\nnnNrwDnZrspwDNnZsNSDsNbCmpjvMTPQjLMmPmmQPGBTQP\nFdVtRdRfctBQPmTtTLQB\nqhzWVWJqVHwbhlLSsS\nhtWmhDhFztnztDhtBmBtghPRSrpfjVwPdfPwpwnRSVrr\ncbCHvgJGcTqbqcbqqqcqsMsRVrSCwffdRPPpVpwCRSwfjj\nGlgGQqTqbgQzttmBNNFz\nNWQNQgdTgjQNddTZfrCQWRDnnnbqnLqnRcjJlqqvDj\nFtSSmSmJhpllcclDvpln\nJBVVSsSFBVBttShFGSPQfCGNdrMfZZTQTZNNdC\nHgHthMhphcbfbMMfHhsGGDCRRVlcVSScsCRz\nnWvPFqLqPNdjnNLnjdJnPdWjGlssDPSsllVCRzlTCTGlSDzS\nRvddJRJQHwQwpZZb\ngdZwgpjZZQtHTdrWrwdpWRnlhNBRlLbFthNhflhBnL\nCVzDCPGMVqVmGsGGbJCmCDvMcRcqnBFFFnRBBNRBBNqhnFfF\nDsmSGsGPzvMGJvdbgTSTbjbSSdgH\njBGmbNBQGdBNNDJNQRLLVDsHtDRzHHZZcH\nwCWPFWPCrPhPrplvprhwpCHHtszttqZslRVHLtzVlJZL\nvprMMvMnJCwnnPShNGSTfGSfNmmgdNff\nbPtLbvVWWztbLSVVnbszpzQsrcDDBdpRcDrs\nllZmgCZqgCFgmdRdJcscBdJsmQ\nFZlgfqCFfgZHlqCMCglwCFGWntLLSMRSPGPVttWRtVGL\nvtnDsDtrnrSvrMVmbrrJg" <> ...}
31```
32
33```elixir
34rucksacks =
35 puzzle_input
36 |> String.split("\n", trim: true)
37```
38
39<!-- livebook:{"output":true} -->
40
41```
42["gfWpjRRQffQGCHHJsGqjsj", "SclzJZZvmmnPbJtVSqqNBqVCBdSCsd",
43 "tlbvZJDZtmtPcJmlPnhMFQWWpMRFTfLDRRTWRp", "HjMPgSWjVrjgbHRRSSMRgjRdpdbGdlcdCvQfcCdlwQJfdf",
44 "LNDnhtNtLNFFZDtFnhzvdldDflvvDCdlJfldpJ", "ZFLFZZmFtFtTNTSPRrVPWWMpRP", "qLBSBLRwmgzqCbzCffDlrfCV",
45 "TFFFHNWFMFFMpHpGHMTHGNhrldWZCsdZsslZlZfrflDVss", "PTMcPGntTThHhTGctnMvSwjjvmmqLBmnjqqgCR",
46 "nClJtMwwntqVVPJcgZqq", "mjpsDcrcSSFFPZqFBWWgVP", "vQcjsvhrvvrmhbmNHMNnlHbNMtCtNM",
47 "bgvvhnTQtjrrrhsDDf", "pLSMltLzLLSjFrSSjrSJHD", "zNWRLBdZPllPQtCvttgCqb",
48 "DRlDrrFTNDNlgzsGTBfcnqhhcnJfcrCSqc", "MMmmdWtdLmvtldHjMmQfPBqSJWnfCCCqcWSSPJ",
49 "vjHMjLmjpLtHptQLmHvwTRgNVVpTzZFZgZRlsVTN", "rzpMpDCGFCFFjRFsRPFRNFPv", "fWclbHCHtSmfvjnmfsvZ",
50 "wTcTlSwwtQtWclBQBLGMLMCLVzVLwJGqLd", "MQSjLNjPPLLSBPjfQhSPHjDVCjDtVVpDHwbwVpbD",
51 "RcmWzsRrzZrmTszWRqWlmRJscbtHwCbndCtcDVddDpdnVnbt", "JTsrGGTqmwTlWmTzJzWmhhPLLGgPFgBffSSPhFFM",
52 "qMMRNZMDDNWLPqfzCgDcGncVDCgG", "wwBFhwhhBgmcVzhghG",
53 "tbJbjjtJvwtdtwjpFtlbvtdTLNSMqNqMMgqNHPlZRTNggL", "qmjMHsZmZSbjbZMjSLFFFFwgsgvFswpwww",
54 "hRJBhmnhhvFFwhcv", "llfWDWzrzBNTRfNBrWzzTmZbGTMjPqMmZPjVbSZGSP", "CRRPLwwcclcGVppQ",
55 "SHFjDjjHDTfSDNTTHfSHjQVGrpmllQQWltVVVZGp", "HFlqzDTfqlzwbgPJLwCP",
56 "WRCNLphpLppSCWVHNfLRzVnQMnBnMddPMQDFQgrhPQFM", "jTjJqvqjvPVJFJFBJF",
57 "qTsZbvGqqZlstsmZVljtwqwSHHNWczHSSRcWNSRHzzNfbW", "glgzDzHjSrVHcVgbrjmNsscNGmNWssGNNtst",
58 "hHPQLHJpwdLpdHfQQtnZmNMwnZGZWwsFZM", "QpdhPJRTJfPphJfhCBlVqVvgvVDBbvVqDbHD",
59 "VtHzjZpjVtHrprgGmjHsGHNdSJFQRcLJqCdQcSqJNpcq", "bBWfTPwhbfDlMnhffRwQJQNdqJcLFQLSdR",
60 "bhBhvfMWTnlDnTBfPSmvmjsjmmGtzHtsHm", "pcRPRPWrSDcJGZSStmwZZS",
61 "VnLfCfTlfVzfnMMBCqVNZJdtjNtJjhJdGNNbwT", "BLvqCCMVsnRQsPQgDcZH",
62 "cQbqqQhDGhlQfQlhQrqGsTNgLgCpRgLTPPPLNbpg", "wtHVddVFwSHznZwwznCpRBdjppNBNTTdCjRR",
63 "ZtWFwWtSmvVnwZDrCMGfQlDDJQmD", "PzPZGCZzrZrlhdjdCqfCsqQdRD", "cbvZLVVFvbbNSNFHSDnsDQdnfqNQDRngsR",
64 ...]
65```
66
67```elixir
68defmodule Day03 do
69 def count(list) do
70 list
71 |> Enum.map(fn sets ->
72 sets
73 |> Enum.reduce(&MapSet.intersection/2)
74 |> Enum.at(0)
75 end)
76 |> Enum.map(fn
77 c when c in ?a..?z -> c - ?a + 1
78 c when c in ?A..?Z -> c - ?A + 27
79 end)
80 |> Enum.sum()
81 end
82end
83```
84
85<!-- livebook:{"output":true} -->
86
87```
88{:module, Day03, <<70, 79, 82, 49, 0, 0, 9, ...>>, {:count, 1}}
89```
90
91## Task 1
92
93```elixir
94rucksacks
95|> Enum.map(fn rucksacks_pair ->
96 size = byte_size(rucksacks_pair)
97 half = div(size, 2)
98
99 {b1, b2} = String.split_at(rucksacks_pair, half)
100
101 [MapSet.new(to_charlist(b1)), MapSet.new(to_charlist(b2))]
102end)
103|> Day03.count()
104```
105
106<!-- livebook:{"output":true} -->
107
108```
1097845
110```
111
112## Task 2
113
114```elixir
115rucksacks
116|> Enum.map(&MapSet.new(to_charlist(&1)))
117|> Enum.chunk_every(3)
118|> Day03.count()
119```
120
121<!-- livebook:{"output":true} -->
122
123```
1242790
125```