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
34bags =
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 v -> Enum.reduce(v, &MapSet.intersection/2) end)
72 |> Enum.flat_map(&Enum.to_list/1)
73 |> Enum.map(fn
74 c when c in ?a..?z -> c - ?a + 1
75 c when c in ?A..?Z -> c - ?A + 27
76 end)
77 |> Enum.sum()
78 end
79end
80```
81
82<!-- livebook:{"output":true} -->
83
84```
85{:module, Day03, <<70, 79, 82, 49, 0, 0, 9, ...>>, {:count, 1}}
86```
87
88## Task 1
89
90```elixir
91bags
92|> Enum.map(fn bag ->
93 size = byte_size(bag)
94 half = div(size, 2)
95
96 {b1, b2} = String.split_at(bag, half)
97
98 [MapSet.new(to_charlist(b1)), MapSet.new(to_charlist(b2))]
99end)
100|> Day03.count()
101```
102
103<!-- livebook:{"output":true} -->
104
105```
1067845
107```
108
109## Task 2
110
111```elixir
112bags
113|> Enum.map(&MapSet.new(to_charlist(&1)))
114|> Enum.chunk_every(3)
115|> Day03.count()
116```
117
118<!-- livebook:{"output":true} -->
119
120```
1212790
122```