From 63db96a816e0d910448bd8c98cfc72a374b7586c Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 3 Dec 2022 06:56:55 +0100 Subject: [PATCH 001/225] Add day 3 --- 2022/03/03.kt | 16 +++ 2022/03/03.py | 16 +++ 2022/03/example.ans | 2 + 2022/03/example.in | 6 + 2022/03/input.ans | 2 + 2022/03/input.in | 300 ++++++++++++++++++++++++++++++++++++++++++++ Media/2022/03.png | Bin 0 -> 9808 bytes README.md | 5 +- 8 files changed, 346 insertions(+), 1 deletion(-) create mode 100644 2022/03/03.kt create mode 100644 2022/03/03.py create mode 100644 2022/03/example.ans create mode 100644 2022/03/example.in create mode 100644 2022/03/input.ans create mode 100644 2022/03/input.in create mode 100644 Media/2022/03.png diff --git a/2022/03/03.kt b/2022/03/03.kt new file mode 100644 index 0000000..c0e77b9 --- /dev/null +++ b/2022/03/03.kt @@ -0,0 +1,16 @@ +fun main() { + val rucksacks = generateSequence(::readlnOrNull).toList() + val cost = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + + val s1 = rucksacks + .map { it.chunked(it.length / 2)} + .map { it[0].toSet() intersect it[1].toSet() } + .sumOf { cost.indexOf(it.first()) } + println(s1) + + val s2 = rucksacks + .chunked(3) + .map { it[0].toSet() intersect it[1].toSet() intersect it[2].toSet() } + .sumOf { cost.indexOf(it.first()) } + println(s2) +} diff --git a/2022/03/03.py b/2022/03/03.py new file mode 100644 index 0000000..df0ca82 --- /dev/null +++ b/2022/03/03.py @@ -0,0 +1,16 @@ +import sys +import string +s1, s2 = 0, 0 +lines = sys.stdin.read().strip().split("\n") + +for line in lines: + half = len(line) // 2 + for c in set(line[:half]) & set(line[half:]): + s1 += string.ascii_letters.index(c) + 1 + +for l1, l2, l3 in zip(lines[0::3], lines[1::3], lines[2::3]): + for c in set(l1) & set(l2) & set(l3): + s2 += string.ascii_letters.index(c) + 1 + +print(s1) +print(s2) diff --git a/2022/03/example.ans b/2022/03/example.ans new file mode 100644 index 0000000..f5fb061 --- /dev/null +++ b/2022/03/example.ans @@ -0,0 +1,2 @@ +157 +70 diff --git a/2022/03/example.in b/2022/03/example.in new file mode 100644 index 0000000..f17e726 --- /dev/null +++ b/2022/03/example.in @@ -0,0 +1,6 @@ +vJrwpWtwJgWrhcsFMMfFFhFp +jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL +PmmdzqPrVvPwwTWBwg +wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn +ttgJtRGJQctTZtZT +CrZsJsPPZsGzwwsLwLmpwMDw diff --git a/2022/03/input.ans b/2022/03/input.ans new file mode 100644 index 0000000..9f66917 --- /dev/null +++ b/2022/03/input.ans @@ -0,0 +1,2 @@ +7863 +2488 diff --git a/2022/03/input.in b/2022/03/input.in new file mode 100644 index 0000000..253c811 --- /dev/null +++ b/2022/03/input.in @@ -0,0 +1,300 @@ +PPZTzDhJPLqPhqDTqrwQZZWbmCBMJMcsNmCBFWmMcsNb +vplSlfdfGvfRRGsgNcMglsFWMWMC +jtjvFHdjjwqrwqwL +NSffhsNSjfLjfstsjtjNNjjqMqnpggHngqgHGHCgClGbCzCC +dDPZZDZFdwFWwFZFWZRTFDwGzCMlgnpgCpnzglClHMbg +DTPFZQRcdTVNhbjVbcLc +JZLDcSZSpHHrrLrJcpzBRrhlzgRTmTmvBRmm +qQsQMCbMQWqCVVvmTRhTTRhCRhTg +svbGWPqGPNLJSpZnZpnN +wLtPGCLwfWLflCPtPfLLTSbHMbSgMdtvDHghhHvdgZ +nNsFznJcJqzFFszFqrNnRzdbZDDbRMbMdRHbMdgHvZSd +VczNnjsrFrjcNprqVwTPfjGllWPQBBWlgB +nnGtjFFjFTTTGtBGmWBTWffLcMJMQlzjQPCPcChCQDJzDJJd +SSggbHVbZRgZsHZRHdVhzCcJhzhMzJhQPQ +rHsNSsSZqqrNgpLLWmCfFGqGCBWm +ZnCtCCVZmVBCQBWQnWQNCQMcLrMMgMLqLSwMSSDwjcBD +hTbGJGfTbrSfScmjwj +bbGGlTdlJTdGlFpdFvJdsbmdZWPWtnVCHQvtVHzvtHWtCtVN +pNpCNFMNFhhwDgRVdSVqwgrdmJ +nvHbPZtTHWbntTmdTRrqVRrdmz +vHWPBWvntbWnHLHZLqWtBCjjhBNhCjGjjNjDNChlFC +CnFbFzpzJbsCRpbRpbnPCnJLTtwQtjdtcttHHHDtDPjQwTHB +qGrflmrNgvvmGqcdwrtWQHwTBHQWtj +mVMvSclGqvNVMMNVsZsnJJRJsbzpSJpJ +cJTcRllRldjZlFcbcFJrrvqCCVTNNVWSPpQNmpQqCPVC +wGLBfLzgBfzHGGGnLDGDGgwHqqHmVSWqpQpCpQRWVWVNpS +DRshRBLMhZlFZMJvlJ +SdGbmRGddMcfbWWSptssDHssGDNsjCCC +glPLTzczrCpNNsHTst +gqcZJPrBlhJgPndMVJbWMVfnWV +qNbmLmndBQqjsCPLZsLPZz +pwfhfCvJvvTMGzSjzPSPjcZp +VvvJVMCrvTRwgvwWvqNmqblNHtBWqQWlql +WNJmddmpFmMMrnlFddlWTHCHBRcnCBTRzTDRTwTz +qffLvLLvbqhqPbjbqRGPSqVtPDTTwTwTDzCBCccQczssCwcc +tfhGLhqthZVhbfpFRJMMMrJrZpmZ +VVgSmdqFpMddqSfpfVVWQvzTPvTWPrpsQPQQJv +ZCnRCDwRWCPrTrsW +HwRNLLsnHRNjtRSqNqMmfqVVMbqg +slqwzGvWqMsvbmTzTCBhhBhgcgjbCPCchc +tJVJSZStQdMQSdntJHjFNFPCNpjFCPcFFdhB +QDrRVZSnrQDVVRRtRHHWGmzTDDqMqMfzwswWsl +rFBrJFcrWHzCLFHqSg +PdVjfjlGPRzRGtGLRC +TQPMpMVPDDPfPTMMPpTWWrhbcbTcWbzzcsmTmb +ZDQDZDJNqqNbwQPgtlGntHlVGlPPrf +vhmChcgvMCdvzCvvHfdntBHGBldrHBVG +cCpTCLvmjhpjzSTTLSpwbDqjJQFZgNDwJssFDw +LfMFLwMwdrFmWBJD +tVlHqqVTHRtmQggrjQqDJg +VDntHnDGRntHPbLPPLLZhcsLPLww +FBLddLctDQcbCLltbdCRdLQVNVDjnPHVnsjnPqVSHNNVTP +vGmwrZZWJpfWfmvZgZJjSTPqsTrVPTrHTssNPP +wNZJffhNWmhvMhgwMZpvNJtbQRtQQLdFhbQFClLBCBlc +npvSWJBCDDBBDSvCZSpJdsTZsRhTdgMgPdhqHHqR +bjtwqLrtmfmtLVjVLQHHHdgwTTHMssMTGHhH +VtmVVNtqlllpJvnnnS +nCqrnLSSGnpjBjBGbcbPbB +vfdVdtdgMMrFgHfHPcBcPBjwQDjFbwDB +zgHWMmgHmWfWvVvRRzLCSCJsZNpJZSsrnssW +bBjWlfrrnClSssMMFmVVhMjgMpLM +dRDqDdzQrDdhqMMPtVLgFL +THDRwHDNDdQdcDvTcZbBGBGrZZnZcrlb +jgSVPVsVmshhsCQm +vmFtcDBfDFLrvTFZvLFvWzWhHwCWHnwHnCQCcwnq +FmDpFBmZZFrDbDfDtmLNgMPNGdPjRdPlPPpMVN +VVJGdSHZnnHdgFntcschhccvvPvtstPq +mLNjNQFBpPlPvNqs +LMTMMRDwwMMSGZzRnnGbzF +JFFfVrvVmHfGmHFvmrSQBQlSJLlShLlgBqwJ +DMCdpCbtgbcCCNpbCCPgRqdldBRQRBRwLsBSLhQs +cgbcPbpcWDWjNCZDWWZttDDGrHzznHzjGzmHnVjVvvVnrz +rtGTmSTGNtvvgfNGSbfwWWvJqwcDwwJPWcwWqD +lZhdHzFhLZhdBcWsWsWmwPcFqW +BhhjLzhZCCdhgCTtCSMmMrbt +FrzSRNrWNFdNhcRDDdrFWCVVZZZmjJbJSPlllgllVbgT +nQGGHqvHMVVpMLGffqtwLMtwlmPbTbjZPJmllLJBmZmZlZbP +VMvvpvQttHqnsvhhzhdrcdWNchsW +BzRTBbWVQNdngtDFVprDFrpF +vhfhSJvbhwSpDDFZHfMpHp +JhmvJsLLJLJqmsJLbsGGjvNRzzBcTBNlRNmnRTQdzzzn +vpCLrTcpRmncrncLcnccvLLNWVsRbhbtsQbJbVQWtWlWbW +PfFfdjdSjPffMFsQbNhlFssFNQ +zBDsjgfZHczLHTHC +BnvpJnVgPWJzczpnvnWVWRGTrRTGmmBhRmBmThrmrf +dNlwjLNLlbLSjLQVdLdjjSTRHmRmTTNmmRRtfTTfhThs +FSSSqbVDQZzzPPPFZc +fTTrrBqwfDTWfTDrRNrnRjgPSpJPnnmp +PvHPbsvZlMtbbvbCLLMHtHZZjtgJRjSnJSpSpjRgRjggSRmn +VLHbCbVPLZvlvMhHCHlPHbLCqQQfdQTBddTWhDTBchQzQwBW +ZBHHfHWLfLqjfLjHZBSDwHDWhvpFCQqNpvVNVNQCFPJvPQCF +zMrtclbdvFPSpdFp +rGMMnnGgsbzblRnlSrzSgRRDwLWjLjTTDBZmfLwZmDBf +rfJVfnztTfZFMfZq +cRGcdddPRbHvHCRHRmShqFrPSTmTPjSjZT +NvRHGGdNLrNJsDtL +dgggppRqnlnjbbjRwzmtHb +ZTPhrVvMZhrVQPZNCMZQjjbFtjmswwFtzVmLGbmL +rZhPCPPcNPNTMfvZPCvhMPSBpgSqSqfpDgJJggdwWJgg +TsgFbTQSZZsSJFThhggQFshpMSzRRRDPwwzPwDftRDrczLww +GCmnjCNjmlVdHNfdGNjMwPrrLwLcMcrcRHzMHM +nmmBnmlWlVWvjnNlpfFQbZsFpQhgJFpB +jfpdTTqqJpDfQrscgsDh +mNFmHHtVsVQrsllG +CmFtZPHNzzpBspzpLBqw +RsgJsjsZbTjmZZMMJPtCSPPDhCSrDhrjhC +lBwzHLQddZlLQnChGdtDhrnqhq +fLHpNQQpwvHllQVQHNNfHpzZMFWbccmTcbJMcFsWTRVbsTWF +DhHFMRDDmLmshTmSCpSWZVNHtCCNnW +fJJPBvlvlBflQQfQtNWtQzpSWZNtCZpN +vPJbdvBfqhqhShTFMs +lttWShphLtWWGppCQLlwZTHZHmfjjvwvHFmw +MFNssMMDVzrrnTmvJTHwJmZmZr +MsBznNznRgzzncFBLQQGGBBtdhdGpWPp +JFmvMWBmBlbBCZrZrH +DjRRjgffgjqwsDqrcHNNbCZbCbbN +sSffwRVjjDVzfjSjswDSQLdPrvGvFMmMJMMJmnWzGL +RbvwgbTVgzGTrhvWDmNDGJfCDffMmNBD +PjSlqldccqFLSqQLCpJfpWDCcCJZBpMD +jlHdPlqqSnjHggWgwrhzRz +WsJnWnmCJpTnLWmJLCSDVVmhNjRbrDRgrgZRhrjrhhgdZN +QlFfQBqlBwBqBffMFPsbgdgwsrZjrPNrNs +MvvvlHBcfBtvffGBcMqqqLpmLsJtpSLSCWCVCnnTzJ +QSRRwSWPhWhwwHbtsNGZNRNZTgRcmc +nfvDCrnnDvJJDDVMLNgtsZmZsVtZGgqmGp +nCngDlFfvvJLnCJJLMFMClHBBzQzwzbhlQHHPllbBhdb +qNFzGFFFnGGDJnzSdFdzjdvmCvzPzzRmgCmMmtgvcmtV +sQlhpLpWQQZpQZpQrBlLsLLCRggtMgVbbtggBmVVmbmBVm +ppQHRflRSGTdHSGN +BgTnWbbwPgPWgPGfGlWfdFFFlsSF +QvDNDZRMjCNZcHZZDQFShGFpBhdRsGpLsFRd +rrqvNcHjBcJgrTzbPVVz +pCjdsSdCljdBlpJpdmjHFHmDfTDTwgfgcw +WQrWnGzhNZzWfcnHfBwnvwHc +RLGNGQhWZhMrZNtBpsLPsVJbPLVb +TRDDSzNhHNHfSppCCMZsMMssdgZvfZ +GbGlctGqrBqVtrtLGtmqTtssPdMZcCZMnMvCZgdddgsP +BQqbVVVqLtBqWbTlmLBhQjFhJDRpHhzpJSJDNF +FTHTnPSmFqSPCTVDhZRCZDhjDRsV +blbLcBgMgMlrcLMbzrlBLZjRVsZZfNVfVfJsbNqDDh +tLtLQgzWMzSnHmPSWdqW +DnwmFcpmpGqFwCwmfCDMZsNVVMdlVrsNsczrrl +ghtBPJbHtWPbJPdBSPMzsrTTzZMTTMSNzrVZ +bPdjjhtPPJjjBQJJdbhRgJhLCnfLGGmLnGLpLfDRGGfpqG +HzzZZjCLjjZCmVQppssbGpmcTGgp +nMnJPqJlMPqBJllSJvlMSDGGBcgBcsfBhTpsFhgTTfFQ +drSRqnSqJDcSJrMJnRvCHtWZtjZZrHtVjrwZLj +mDJjmQggstPvDWJgQWJgPPmNFFLZpphZNlNpZLhSLvLZNf +rzzfTczCzCdBwddcCCHFpHFMNHZSHMFrHNFp +bcfzdGnCtVsVtsWn +CMfCfGfwbMMLdTMH +lqzDgLWqQWhQNWnlQqHTFFFFchbddTRbSddd +WnzDNZmPZmgglNCrvjrtrLffrJZJ +BllCMzjjlBHCCllHvljCMhbrQbTVTrvprTqrFWFFvF +ZNwfNLRnfwtRtNwqThVFpwWVJrbh +LnRnpNRSLcpZZNtmZmjgGgGMPBHCmMzsmsHM +MRMPpwWTLMMMMLLRMPbvfQZCnqQnqvWZWGqGDQ +gJslgmlmSZqssGGbnV +mJFSmmjcdmgJhdgrdjcdjwbRwpMwpHBRHrztwtRMRL +CccctqnQVvQcrsFwznmnrBrs +LLPThTSjPdJjLTtMBrsDmbbsBwbswGMF +jLSLWPLlTlgSlgSghdvtQZvqvWRcCpHVCqWp +DmggMZCDbdNrttnbPn +cclqSqGjSBwLqswNrFNzffFfNPsCsd +jGpLBcwlQBSpLjSQLvjRTZHTCRRDggRTHhmvmV +LWzrnwZFnzQlWQZndWFNvHBNDVBBNjplNjjVvV +RCSmPSCgsgTmCRqnsTCHvjJJpvBBSVSMpVjVMJ +sfgsRGnRTghQWWbLwfhF +JnJlTnDnwtWHMdJt +phNPDPVvPcPPvMRqVZRWMqRRWM +fGGScQDfssQzLbgT +rLVVdSSvVzQSRnzSRRnBQMJqDTjMsMsMqqPPhP +wmbWWFGVlGfptbhshsTmhqDPJJMm +CbWtWlCNpglgbtCWtFHdvNHVZnZZVnNVHHcc +qtRszqSZVnTCVwwLJpcgppLHqp +MPvBGNnDWMGMPDvGBPvMBFvpppjHwHpJJJJJFjjwLcjLJg +hBfPNvGvhDnvMPdslCZCtVsRRCSZff +HgvgvLNDcCcNBPDDvNNBzLNBnnhQqwRnRLQhWRhhWssqsnZZ +FlfprJzttrrTlGpbJVQhRwwbnbsRWVnZss +FGmdJrFdJddmjFfTttpfftlDvHSDgCDHgvSgHPcBzMHSzj +dgHhCJbBbwgNcVzlvzvzQVzH +RZPjRRRDPnjrjSnfFrDsnvzWVlzLfGzvBVWccclcGl +nDDZPjjRnZmFstnZBrsZgtCgbtMdqbJdNqMdgdwg +LvdrGnDBGBGrvrGLJtdrmmcfClqllsqlmjsLmcQC +VpbwbwTSVVwpzZMRSVmsjDqCclclNZCjNjQq +PpzWwRMwTwFpwtJBHnhtdnDvvP +GCJSClmwzmSgrpPpSpgcrS +bjLpsspHMHvBTsDLjTDtbTBFRFrQQQPcgQgcFcFPcFcnPs +pBTBvqBHbDjHfJqlGlzWJGllWC +GgbGNjQGzzQvFcFfRFmFJbff +pHDSLLCqpqppPZVSCSDdncRFwfmZcRWRJfncmRJn +LDTTLSSDSMQgvNTmzz +bLjgLVlJnjSJjgLgLjqqMcMfddftcCCnCccfQfsC +FRRmphNRmmdwPHpBPswDftDzMCfMcfWMMC +FrvdvrPPFHhNRPvFRmFZVbggqbGjJglJbjjTrVjJ +cSpdczpfRQQGNGGqvGHv +wPwFPhCFWbbmChwWmhFPsWrsDVwqVqZqvVVVvzGHDZqHqtZz +gbPznCbPmmWrWbWhJRpLnLRnTcScRSSLBd +pfwbrjTbDczbzbPcwTQbvWdWWTdddSldVHWSgHgn +mQmFQRFssJJJJthtJmBJmCHMdlWdnlltnHSVlSlgtnvM +BJBhRhRqRLRJNhJhBDwjzPPPcNQZrZrzDr +HTHwQJzwLZNcTwJtFRFHDtFvRFRFdr +jlMnMlbqqpMBvsWBVGRRGdSVgrDthFDddh +qvMjjMMpbPWqmMjnlpplpnWscNwLCQPzQLfzTzcZJfLQLPJz +gCTHTVdPdPvFfdCCSScZSZncMMCGGM +LNqLlssmWlLqzBRzWBwWBRRZdmJZcSSQDncnJtQcGDDDMd +jszNLwNWRRrzNbhbvHpdTjdvfH +NgDWhQmhfFlWFWlzDfhpBwfPBBdwwBJRBPqJJB +HHMCcHtGcMMbSGjScMGLSsRnqdJJlqqpCPJBRpBRdp +trMtLVtjjVtjttGctrLLTlZmgFzZTZzZNQmzZDNFhgFD +MBMtFzBnzSJJttSZBNNZfTsPqTqqqNZNPc +LlQDQLVCwCDbfRCmRGVjCwLLcqslNcNPgqgTPTsqNNsvqHqs +RfffRmdjnnzpndtr +nzpnDRDVwRRjVTSlTtlSSCQLDC +vgZHFBbbfCbvFbrFSSTqqcGtGTtBGQqS +HggMfPfbFZbPvNvgZZdHsnJjCzphzVwJjsmpmjMw +FgvgrgDpRDGTTWVDVd +zmbnNhHHQHshhhcbnHnnbBTMBMLLWLLGMqWLfzLLTV +mnnQHjcHHJmnNcHnnhmvZpRrCVZVZFrRJZVPFr +ZhpVhCSHbsCPbnmF +GBWGGrftTJlrfttQqsVPbPnGjDszFVncsG +qfMlQJWBrNWQfftqrQqBhRvdVVSNVSpZdvSZwZRS +mfzRQqMrtCwLMMZM +sbVbWgFdJCldtNRPNZ +FpggcgsjJccJVJJJcbbWWGrHnfmBnrHzfnfzvqrQmpfR +rWvbrfLnHHnzlFrFWWzJfRQQTwbwRQmQQCgQTwQBwg +MPsqcZpZdpjGMptpqCSsSwRNjQTBhgwhmgwgmmwgBm +SZqqqCDGMtpMFFDvFHfJlvDJ +RZnrZLZbLjRZwdlrnbLClCHMNCTlMMWBPPTHlT +SDgDzQDcfzJBNPssWCwSMN +fpQJwmmQmjhjGRbr +jQzqvLzvMTTQMMSS +VJlSrnBRZbbJbVnWWBlVWRCSNTMppMBMmmNPHMcNBmTMGmHp +CtDZJllRClbFzLtszhqFqS +VwcwzBdmMzJSdMBzzGndGSmlbqbgZgfblTJrTbrqZbTlTb +tRDvCvCRDCDWtPjCHjvDWTgZLfNqclZTTrNfZtLbLc +DDvPhhRRvjFjHPRjvVdMwhnpwBSGcwSGcc +LRtLJSNLdNLjNLRRNdRzVmVrggWmmmpVmpVvBBWFvm +wqfZnsMnhCnlfGPCCqwphJpWrFHBWHrvTrTHTH +ZsbGsflwGtjJbzLLjt +MjdFCjzsQFJQjzbmWHHLPPTfvsLfPZ +cNgpBgplzVvPTvmLPTVm +qNlqpcNtBzjQQCQqJjwJ +cczNGcgNhztlGPCCLDpBSpfVDpCJpSpBWs +nFqnwrRQrHnFHTMnZqQwMnmFsVsfbSSSJBSsfVVDfWVBWbVm +RRFZFMHjrQMjrHZqRjLdchdGtGjzDLgtzN +tzFmNfFNmFclrffhNtNlDWRSdFWnJCnRvRjvJvjD +LMgZgpZLMpPPPVPMMPbjbndWJSnWbWHWSCRbJD +BLwMpgMPgwQpTgTTpMVZMTftcGhhhtrhhcGGzQhsllCN +DWtHFWDHtwsWFHWDWwQblVgnllRBnjvBlVjRVbll +TzChCMGfNhZSLhLhzRRVvvjmczRgvRmv +pZSGpNJhCNGLSNLfMGJfJJQFrDDQDqHHgHpsWPFDttQW +qqccVQZWBVfjzzPVDMJtDtNccCgmtCCm +lvBRHBRGRDDCRmnmbD +SLFpGTSsTSsLFsHGvLvdGvdVwZBzZqqzjdQdZjVfrqwW +dLLwHLTWwjMLRZHCHZglDvjgvvNNDssSsmmN +nPfJPFbnhMJQfnpJGQJfQBBVssglsmsVVmBDsSqDgvNlgv +FbMrPPhrtGbJpnhJpJFFbbpJcwtdZzHZZwHCZdwctzTLcHTw +hCfzfLVbShRwRlBjdzmz +JZhrMMhZgvHFHJnHGgWdpmpnmlpRwBndRBwcBj +rMHFhgHZqtGvrWsbPfPNSbstTffN +dSwQQdSlHtlVQtqqrMZbFBRnBfZRMbDwMw +GTpcgLcvWvGvJzGpZGJpWpfmMWPBmDPRFPMFMmBfbFFW +hpcGhTCsGspLchGGzcpvZNStQHSSlNjjtlttlQsq +nJlhHlLlJGlRnMSsMLsnsSMwFHgwrTBFFwjBjppgpqfwqf +QmzzmbzNcZQQzDVZDcZQNDtzRqRBFTqTjjwpjBBNRrpBwfww +mvQPbQtttVVDzvzmRWCWLhSSslvWLGlW +nSpdSDPpRdrNBhMBMSJJ +bzCTcwzbczCZswMssczmCCgcqBmrQrrmBmqJBVBVNtrVttrq +cvzscgZzwTCsWsZvwTfzljDHnflMGMMndHFDdRPp +sDDnzLVnsMtjnDgfSSbfBjggbqBC +rlrlcppWcGdPrZNccJrSBSmCHqbSqCbSCgCHPq +NWcZgpFFgFpDFnDvtMDFzz +ZpczTjpZcnncHFDn +hSqqJWWWRRhlnFDVSFnQCB +qhNMWfqfMhJJRLRvppDzNZTpPTvwwD +rbSDCwPWwPVcSHcwHspNpNsddszmwGtswN +vBBfgQvBMvMvjLLlllqtBTNNTPPzTztTsRNPTt +vvQnjlMjjjqJqQLSrcDcPWbcHbDrDn +BphwqbwNsjsNsBdDjjhGpsGWzMMTWRTCflfDWSSzfzSlWf +cFnrrHrnZVZQQvFFVvZhRzTCWlSRMSWhZMWt +HvJVvggHvVrmQLqmNqLBbhsssw +NcBqSjGGBjNbZcHwhRVHPwPwPlZR +TvdtdtvFgHwWgdhn +tMJFTvtvFtrLJMHBqNNBzjrQcjqNmB +RrQfLfQvMFdQvLLQVfFcnbSbnwVSnbDslsbSDzDD +PHLjmHqqZCjPglsbwJbqnDbbJl +LNHLhjBHHGRfphphrtfh +FcdMchqcgdchqcfcNWWghNrRrVRjGHFjDJmGFDrRVGJD +zQtvBvtbQzpSzBptzbBznnwZJRDRVmVnGRGrDrHjZGrr +HLspTpQLBqWqLqcNgM +rnqbSSQhsshFqQQnsPSnhbnrzHzzHLNvLHCLFCvVJTlNLJTz +fcffljGBwgmwwftzNdCCdvLvtHNLTH +BjWgMGjjWZMwjjgwgMWpwPlnnqSnqQhnrbPMRDsqQs +hRJhFdNJcrbqbbMF +qZlTTgTvlHnqvllPssQrgQcQwscrQMsf +CClpSnTllZnZCDLHnlNzGSRmRthVmmzqJzhd +DLzSMtDLtzmmlDlMlMDbcrcTDqFvVvVqqTbD +dnZshHpZRChgnszRwRZCpTqqTcwVqFcrVqcBVPqVTr +snRRRdJsZgphCWlWtmJSjWWzjt diff --git a/Media/2022/03.png b/Media/2022/03.png new file mode 100644 index 0000000000000000000000000000000000000000..f36b1a8080e595d679aaf70464a4720865271864 GIT binary patch literal 9808 zcmV-WCa>9vP)2%uZ+gaM5wKLP&j-5_h zwbE)wTea@HAc6=23bKRjJA@^HtiL~QOm1#&l6wOPI(QBz@_!+(gTlH)OZyA&ZR2%BSa)t|f8o7tynJ%% z+(+RbW0p^+fwC9!R@4@tz6d()on6{rcyAjo-$p(FTs~Z6aFHP(2HnlrwCgaG!@$ZG zW2BZZf0UZ^nki*fV#FUd&ZJy2sMhuwmVL z8X_xm+=;bp1c!^LS#Wm8#oYifdn1I-Bgi|Z>er?ZHoSnS`%ii7phFj|We=yzf=-<)X1^}xz z!`a=Cn6($Rg*5DUTrHQ>cLs_)T-?DW)oWlZg5ywkZ3KBS##9Bn!Xj7&x!kwb&){+m z-FH&7UrBvusE_pX=N5TM#YE!xAdf9i-m^cmf(a`V+=;bZ^rc6k22ReHu^xU=ru5J$ z_JzfY_rbX_D-*(lyj)8gI(MD9G5h9x^0)Uq0l#r(`MaBNVjEN5xG=8`$uU#Hyu?C& zNqy%(j};cxc91g&c-%+k$F59_2y}NA@Lj% z@2^)(Nu3w_&!Yupja~Ol4Ep$~`Io*&eX%KnP>iNhlxLYzG=ucFvgBQr81crsq+@y2 zTMy)MIaog@di(P!k8V9$-6A*Ud1dXi`EkKzKZ}c6AqznKN;o+q|ESr0Yzd3ZDiWA- zYP7n9aem|c-Hj=KJCL{cVp)Wr+t#P%8TIEd?r2pJ;F_-wa(MvIQV9TBEj2SMUJqAM z>b%$w_vakUt^{yT-NI@S;!;q51Gu$0ClsT(49(?sZbi#`?PmKMJJK_X8;Fk?#SQ!3 zT(coL`h$HrhO%%tD-$A$j_@0b0id@Xd?6+;r3%aH0%?t|$@ssUi<8t@X#CjRt%xG2 zsRvoNHxbG5cuzDGTV{lXtqRmOKw|;36}0 zQASi=9+uk!K%l3jrnN_<(Z1=P>KTHTN^~~^dboI?qYeN#90)}Sor3Xm;Us~g8?}Wf zNrzT#y2%!08kfUaH#vD-|u(Epj(f2Nn}3OPx1|kMyO*iIh9&bx`&| zEH!)#nh1Fd!s2O!b*HNefU7r6Vrd4N%7%*pzV6PQy#t%Ysgsu?G6^|9qB<9Y3OKvn z%E3WH3FOUaDuYf7{}@b|2Ujm-?KON)lvk(Mf1h5uGBINRr3!i`0KoF;VNz$|@w^)1 zBT>)SPC_KXJ&&Wi3911M^wO;HS`}7Ol;8QkY;fZ9jFUkC^8Ug1zRv=XU)@$**D)d3 zFbaKT&9s+R$8#;ZD*}zBh`gn@i3<^v48G7TgHCfts%n{#y6jGYdJsjYQI_d20}V7f z-2|tQCZMwc0lnyH0RRryG%3^T49jK&x*DO^Aua{iPouBHth}EcDfsM2fekJ{nak$; z5_X?2scM#kRL@bf;1z<4X^{CNd^#jDc!i>^#_U?NF;s;X+1Z~E+X z^Q~p~-|f6eUV*DhC9wa8CgtvOv#r_z|F zG>x5ok9~aXSBoYthzs_Wy7YIWA`AUp@D8IsqOu34zrd7b@CgSv=%_=%F-%)+%0T=e z9Kcvp)xLMBV@gYO=;Us2vy;g>Z(j!@6AeF30v>??(ARGDD&qa{Et_Ajn~T%7O$(JO z%^N$?HCi3Hyg?JuRA%ZabXpV~Lqq}s#+%Ji48kI6`8QvlW6ljg-aq)agL(XuW6S{6q;savP(`L5$9gzT)MqAp@MY-WitK(NCM*Qty9%bJZTYP=7P&L+k*Y-WYI|TQZQPo3V*zLr+8VA zmxP?Se0uowalV&In?AQW+%fX1lqf!rsVl$}psNu<6A>I|HmC|ufKLRfbJ2biIxRw{ zAUF;m?$7I0s>nCAHY*JFa{csw7V4qj@?&mvplqXP5s}{03S}<mo7h<6A{M%W}&hFHC_`gnEyHHd=(!690;~bDJ@5z7%++3U}=^m~k4_8rL zd#{aaDdoL!4k`u0r(?o=bTuM|9Y1^A#cD1VYHt-s8C(b=-c`GklUmMe-G6$78_IYV%h5!3ax(!|e@)lg$W8=oy zqD*s8SdP_l&VJlYP!B+*#6T~)8qwK+ zj#?;gP5Xwov|?9CeIWILn-3&j5Q-sig1`xUC+Kxh4?r~lg&bWC__{h>S}E*NsA%uZ zmX|2(z3HABlZ@!u;8Vw-Ho<{cD7->(aLL-;=WnE)FHsEITkSE&W^pQq z1OI45B*AYSbq2r?LOwTTYG}&T(5%v?5BKHNci7vfz4Kdl6nQy`ukN;%m4Z*_q)uIC z-?-K;y7~q`K9GCt*7lQKyycl1k%Y(ulf~)Kq0(qS`Z4#%EL+=TmbJX$efm{8ON^1$ z9YtP7=L%iL!hOF=O}c*=R0TjLaeD9J*?&x(?d&A5n|ZT1RqBJd#lxv8075?R&Gku7 zEShM8*WsK0o44=CJNG#W9O+l@4po7PumU|L2VY$mJjrfGc33_=Y{x50ecf$Il_+g{ zEp=6QxbW*0Qx;7QvBt{~;nU4NZc(On^$ouKuXBTH3yVH`xNB4eyJM^{U+IqLR*795 z=Cy@TAL$n_q&)xmY1-kAv9x*}n#&O!HzLpQ#=6AI<;~<(X|}Z-7H?QN1gVzG8>#yz zc5&NO_4%(CO^@`oOs~j7-p_{rMXvA(hwnIq#G(8W3Qy47Cu$bNQ##Lhttag6GfT|Y zU~LI2z(ca@`BhFXHnI#A{xX;CFQh#2@v*iZvxBgdT5c>IDPg&}I6XKw`pXm7X?bl! z=8x!Pxcg)FLjdsGqerA1;hXD|08ESUUHZ;G0PE*OPYL%9@pjE9ZcK{y`}F6l`PFSp z;zRG7Ic`9$t!a_}{m@mmycDqQt3ElDZ?p$q=d=KTZzQ5-qAJ&vCujm95&)PTHzFf0 z1(9=f|2%q=u)E*-)Vw!$W}LlNXUt$#SRx_+o2S-{sHzBfOT~YEeD0>tPN}szBE_ot4enOVkB1#`VP3yk zYZ$7~wysKn&N|EF;X#0hB+yeba(#wep&C?cdlafcwN}XIhWSXPV&OXv&H7{NY_X8P zQE*#TWrVT3@hj2OhVn}+uC0vCGuqt~*q2!z<|CaL;$=*s7uMGJ)Q~9-JgwtcHz#Up zgpZBZZ5%%9UQ4_dvc}jv6|d=?YHil%M=@9)WaCoQx8P*{7dgS^9{DpzlWO-0ce zcDzQrdl!*l)_8v&ms8%@rPm|S(`2|o^D6vbX==QKCPPEQhYu`1`5E*&`fr;`5NH0| z*6YyO2zfK)&Dhm)zHdO?r&Mt`95-iSgrD2INkNHGOuJl%-}qaUX{#*yGZoufu*GGKSc?OJ8*G+Tm5RPXts-^w@uU zQ+ey!d&7LB&Q7LYDK^*xKwX>3T#-v*W!qil9>gCTt(La5p=;aE`K)fp`~jHMvaihk zCX{**ayI6McR^o8K4v${0Ui?D*^KZGgV5RRxEL*%)Uun46S?r#P=DR(jKMKpYZz0i z0w8k5AYDBRoFKh*@>a{ydb^1yg?IvJ>ru9JD**H=RbQVj`pw#DP6FPI`p$)ugHxu4 zy#DnC@=f?;)&O${q;~Pa$#lDUbUOXcGsSPLOJaCW4j2B>xS4M&50hHwaYsFF|-jAI9wvGf67$G%_UFi>vc?4nJuZ*8~E2f99m>v#b$C=`7hx3Wl zuTK@p6{$<;!yvD>t*jyMHu`C+;6mr<1%#*ue3tH#gsxziTUd5$ zIoQi}&5XzglcPmK`_^VR3(-YAXJD0g185rQv4s;he|15rGOQW==VEzR-vF1x`Re5* z-<>Z35ECftJsf=IIOabIk;LGxL+pyA`;qh0sHqCTp%3ZPTPm^l_x5@BXO{2Jr1xmE zS)6KC^|Cd*GG!Dj33JbS~aDgd*_`-l2Sm4g}~pXclD+&iG=cT0#9 zEWI6YamPR(1WrhL09?NP+3217<~0dRD29mXKnMWxDp-touT-=!7nX|*Jb{^a6awVZ ze*WCzX^}q6AHWjoL1d;eT4=Cc%Q~HD^y}m1oH8}^H(#FP^SEuycCSOsz4SNTNBNZ z6BYm$nVGPLS5+PL$l8N`1}j{4dH-?9OcZ)O-c2)X=NfDI{MUwWa}OH+IsS>^A4~5) z40&x}ET{@(VF_5Bj{v&aI9zyGv)X9fleWiV1=zVd1khBg?y~ zbw`nxo8E-!`?Qg1AL2B){1Rw-H4^5u^l zZ%#|luD;#|3?nc3(4|ROYBs_G;35)GTrQD8(Xxo;IiG%(N2MKxvm25h#hEXlRkQx> zk|TkQ!9HVjc}>EyyYEXuu$QaREZ;7xGfUry-TiiC{@mxMxEzj<&l3sxZq7mvSCOC0 zWn&0W9$LL# zsnRG_ny$Wqn%17p;?%+-0N@D_9EVAZSg3j2OnuZPnFEIbF}7QG6nRYppT17$*t~xx z1bZ-N^`tp(Y!!+@HDR8?9AsXt8Z~)1_IHD~U?$*lIgiY@Zehrbmo4sMRe{`N>2>I7 zXVJAJPYC>f`>!xz<#4FMsBD9+6J=UnjS89HW9bVt5s_%IcxuR&AFtRLHCp1+IjKqa zQxmmns0Pr}iuRkJL|AolLGUE_j)S`&crKbX*wE6g$S7{ulTp^pCbsC?wnI$J@kwPZ18H;ERM?wc-$%Bbb%#U^6~@_yTUgT6BlCn zD~MldaJuB~ht;oR+G+&G!bJv=kS`MQLw%$V&yU^x+H$KQWEk@@!R_oLO~TruOtW-> zY8wyVdVSbt9XEs3U6IN7G3=JMgUvD5i6P87H^#M0L|C1*5dh?^&{)|=auo~z{8+MW z|0t|@X>pt1yj(Kt)yh`IAcI}BTS%D_66Pzl&FU2be>R4xJqp#eo7SD-lfb0318kyK zd$=+RuxNv~s}a5J)S)U7VO6g~!>u@94IO=roo0SeT*bl-$#$yg4pJ2;e%{qu-O2pg zwKF0aUd-ikwm-7!^mb}=O(S>$B;3dDfsWU=HS{XbT=U&7Rir*9AUNan3;dP{|ug;5$(4=Ip!cK zG@Na?Itwq}Xxx)tO8BCI`L2veg2kI4Z^7k#(CZNvkCf+d{%h)}gSwJf)hy30Yi2%{ z1P~Svkt^~JnVrsa^+Mu(@Cs#q8vw{GX|&-=|K6G79-SZCmM^N#W3=if@kGoV7VL7H ztFr9oMCSWfy<8dxV4mhmvbL{J-NTR|W)5->8Ju#pRD#Dhi?B+zUfiNga}^8UesIPo zKVM~d#1eqi+38YAQ*!MBS|7kM$|ysCrhavW&1wI0B)7azwj~Zh6*{H)JxjTGW#K{#RZ`L;^g6sC@?U zE_!wCw3^l)+V_C9SUPUb!uWwn*4(qo0?=M-W~)+u2@9Tr#M98TSoQOMy|&}vp{e~BleW+7@80H~Dc>x6m$>H%57Di zXSbcSypOe5I$RFNRV1_#pmm^+x}`z9C|y0x;vv#+s(pGmf8L}ZcQ$Sph6s88pzSC{ z?*yb;+sPJ+4WZSBg51g$idR7btokb22&>d#5uDV5jGT%&C)_BEk zh67|)Bdn5UV~;F|Ev#vy^?_q8mdGf~#&a|=dyjh&eYE#GoSavEH+6*5+|A6{m$FHSbpe{SV zet#l)ZCRz!zWd!J@>x0?yn3C%eWSGqtH#z93Hi&Wg>U`I>P*lwmd<8zs_g)+02)h> zcL);~V)7Db2GLZGi@TBXJP!0-B;U%a89;Vf^R^=eFRq$uEyFNk`>{gubcq6@mc2$& zSl4RWPZdzTt~jPDtr~;g> zyUrH-%UssYiL#Mr=s1vF`ORsoAq$PA9l0KBK&AQ1e=bvO79CR+5nPaKY-@(7rqho?xU)R=$Pjux-buSenYE438u#q+0e?)L zZJciBR<=C4^(ZS<0jMnmfUtN|3K3!Tttu*Sn6I>LP1c;t!EPT@}*=Em$iQ%nx)3?{L3oKDB)D=~SggAr`3L95e$ajfub27MI( zk092I7fhhh>i%y}7TJk3hNh~Il~%*}3HiJao|tPqE1=WsU7Q3TJYn+dCy{$(erKP8 zHp1#_U!Swg=_M80SeY}<3ZI`f>ny1eXalt79WuEk^NYfab+~Z>@)qQ{UD>&KSwlzP z-VCaXSUbWZYPl>EZ8ey=0j^%Qvol3wXW!eqGq2TH-4mp=?nn%<+T@Bqq+QB2x1<>2 zXx#?*JPtVs3YWtnkKY0GGG20{L|A?4%QLj`%)F#xvL`eOh*{x-NfWDb%+e_VTDzN( zzSC^WsI>~E7ZEZUA}>vFSJdGvRojmhsx;J%7hA$2*K$`QPJV`%WJJ$leYBMfrAo6W zy>!Q!VjKG>maRK1F?@{B>huRMSAKHnYM=QtjGU^59mWW&Hr~9e-uub+O`Ok8JapC~ zl@y?r7CJ3TF5v0oc6PO`3d^#VH7XRHL3tL&&qeq&)}Dst{ey>dt9PC$CLHcE=LL{| z1m%|yG8w^ftgW2M=pRs@$iKPcbTP%az#8uu$5^&Or4K7-mzBeXZzO`_;1vQ_Px^3} z0Q7n^boLe2w4KVY%__C;_J~PoMG|<0!aEF}A#n9%v}se<-kV?5mRZu6UerJtV>0K3 zm9TPSxpha8m!`*J!b${AYAy!=z7u5r5KAEtA&Zv}fN;6q-ZN0v*u~t~mtkoK`cPkl z`di~op)({NI3-SZb`m%{@kK(ufX5wFYn3WZcmH5RM_)rnpY3P3i(7XTd1?H-vnA6E zqOFDbE3CDpYrI|qeg$9kU{kJJ5g1Ze%?zPy8f^`^Sjqq5K&bL&_-C5mWR6eqWCNVVxW*CYBtVn zhhC5AYvCPcm{Z%}b@-WWmp5bz0>w%K@iN3{@y=AotJF{_q1AxPhtwNF5t43s>9!qh zW#r21BE$4G$Uj1Jbg#D^@6?%iRT^DIQ@6i|)twfKSv|q)h_JRO(-uz+c`tSLpMJP} zIHwB0$4}3XkMI!*c>unD-4sRh^P>e{pE9#waIAHMCL-ZpEPMZl&G#kD8t*R=2@9%Q zxBQq(#4+P>IX}I%Hod6f!~JGkTpv6!SIFo6=F4*q^AfP#xRaXjSccRVCD1}#jM_B>BRPlwOZ=w-uY76@+4Z_xj50(xy*;&i9gv zpGukZ)yqrn|MMZ0Myu87_oSCTy(Dhik$mIcw!4c{@`S+O@47fdUi*&2Iuu982 z(2K$oSnxE6a23`ftd3~kJaGY>Wk~;)5%2QpVNz$|@w^(^TanG`$-L}@wMCh>XmZH^ zJv{rv{a45%HDXvt#JntT?4orSGnCdns7jxWxqmyDXFSSM+R*vsi%V7|h7)H2e#)wN zddZ}f3E@V=pk>p-`jo2l;)aoa16qr)O7K!5K($o^KtnMaieUpIsw%Hg#LmNo9W<`? zEP4H8E}QR5*nPf)woS=q^%Pzf=5t5YSqtKV-+y$@k69HzWm!9RMvq}>-BQxwu)>=5 zuD*fjK!ZtB-+=l+cIAfT7^8jW>ZFLnSE^qTZX7zV0~oX8NP!45*Q2o%gZ*&#gS(%> zy|23;_DT*>GRq{QPo7;+RNGZ3glf50 zsg_AhreWWwmj-!ClA`?q#01Ks0%V>Aj`&iu%WD^Q%WEUT>PV~ECmhc12#m#&7Yu)s z76CxYukq(clgT;VT%5LTTBuZM-q?|D%`Am5tAC)ECN@2zSK(&^``6(9`EkJ?{gk^e zv;5yLE_v_a*_%E)Me*LD(dhwD!pDt}s(4(EpUjzTRov9sfA(74`Z-bArA;dnBie7$ zc&ZpWuU(AUzKTG@4XWi&SUi#*z|7abBe$lvRQ&0tg^EGVOJAH-Sa&oW<}1~7329@r znu%b_GOYa_b(&x-?T$0Wd(ulaTHV{bFUADQo=%B_Ia<3F0K$Ew#uT=-Onv~%T9$}S z%Nc8uB87Y&#Uyw4`I6+=Kz|RHd*frOa#=B(a2KnJ7Dv@tl$2mE*DqgO;w0dGcBCLW zP?i|wNBmj3Et%vVL>r?OBhvJ3J9ypTy#%l~+G!FLx*O6$Ag!n__|IN@|b zZBDtFu&&>1zh2w%??=}11*pHyl$Q*)txJxu+Hu^cs}U0yLh1vF2kNe)6?m-OpTaBHD$ojRY^usO-V06jjWoD=%RhYkcoX?%D;mmPs1%s> zAf~RM6V@#d5msNnp4QnrK=G2r5Mx|buv~7q6IHcYoH{-kL6abF#`&+&!KS+!A}`hG zMNbpsnKr^I!Al9y%AD7Ms|eh-_T}t(%d`q{hpOrq-Z98)=I8ykv6Ar%?_J4j=I8yk qu^RCU@7>DF9TiprzwqA0y#F6nui#MH-opj}0000

- 2022 - 4 ⭐ + 2022 - 6 ⭐

@@ -12,6 +12,9 @@ + + +

2021 - 50 ⭐

From 9be8d454e568ecd7bbde62404d313f11780756b7 Mon Sep 17 00:00:00 2001 From: Kitty Giraudel <1889710+KittyGiraudel@users.noreply.github.com> Date: Sat, 3 Dec 2022 13:24:24 +0100 Subject: [PATCH 002/225] Pass User-Agent header to AoC request --- AoCTiles/create_aoc_tiles.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AoCTiles/create_aoc_tiles.py b/AoCTiles/create_aoc_tiles.py index 54c7c3f..db7c930 100644 --- a/AoCTiles/create_aoc_tiles.py +++ b/AoCTiles/create_aoc_tiles.py @@ -198,7 +198,7 @@ def request_leaderboard(year: int) -> dict[int, DayScores]: return leaderboard with open(SESSION_COOKIE_PATH) as cookie_file: session_cookie = cookie_file.read().strip() - data = requests.get(PERSONAL_LEADERBOARD_URL.format(year=year), cookies={"session": session_cookie}).text + data = requests.get(PERSONAL_LEADERBOARD_URL.format(year=year), headers={"User-Agent": "https://github.com/LiquidFun/adventofcode by Brutenis Gliwa"}, cookies={"session": session_cookie}).text leaderboard_path.parent.mkdir(exist_ok=True, parents=True) with open(leaderboard_path, "w") as file: file.write(data) From 25f1b7a4750b9be618cf9b2df699cb77ddb58640 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 4 Dec 2022 06:53:59 +0100 Subject: [PATCH 003/225] Add day 4 --- 2022/04/04.kt | 15 + 2022/04/04.py | 13 + 2022/04/example.ans | 2 + 2022/04/example.in | 6 + 2022/04/input.ans | 2 + 2022/04/input.in | 1000 +++++++++++++++++++++++++++++++++++++++++++ Media/2022/04.png | Bin 0 -> 9371 bytes README.md | 5 +- 8 files changed, 1042 insertions(+), 1 deletion(-) create mode 100644 2022/04/04.kt create mode 100644 2022/04/04.py create mode 100644 2022/04/example.ans create mode 100644 2022/04/example.in create mode 100644 2022/04/input.ans create mode 100644 2022/04/input.in create mode 100644 Media/2022/04.png diff --git a/2022/04/04.kt b/2022/04/04.kt new file mode 100644 index 0000000..886acde --- /dev/null +++ b/2022/04/04.kt @@ -0,0 +1,15 @@ +fun Boolean.toInt() = if (this) 1 else 0 + +fun main() { + val seq = generateSequence(::readlnOrNull).toList() + .map { it.replace(',', '-').split('-') } + .map { it.map { it.toInt() } } + val s1 = seq + .map { (a, b, c, d) -> (a..b intersect c..d).size-1 in setOf(b-a, d-c) } + .sumOf { it.toInt() } + val s2 = seq + .map { it[0]..it[1] intersect it[2]..it[3] } + .sumOf { (!it.isEmpty()).toInt() } + println(s1) + println(s2) +} diff --git a/2022/04/04.py b/2022/04/04.py new file mode 100644 index 0000000..0e65399 --- /dev/null +++ b/2022/04/04.py @@ -0,0 +1,13 @@ +import sys + +s1 = s2 = 0 +for line in sys.stdin.readlines(): + a, b, c, d = map(int, line.strip().replace(",", "-").split("-")) + range1, range2 = set(range(a, b+1)), set(range(c, d+1)) + + s1 += len(range1 & range2) in (b-a+1, d-c+1) + s2 += bool(range1 & range2) + +print(s1) +print(s2) + diff --git a/2022/04/example.ans b/2022/04/example.ans new file mode 100644 index 0000000..da7f847 --- /dev/null +++ b/2022/04/example.ans @@ -0,0 +1,2 @@ +2 +4 diff --git a/2022/04/example.in b/2022/04/example.in new file mode 100644 index 0000000..9f9e9cf --- /dev/null +++ b/2022/04/example.in @@ -0,0 +1,6 @@ +2-4,6-8 +2-3,4-5 +5-7,7-9 +2-8,3-7 +6-6,4-6 +2-6,4-8 diff --git a/2022/04/input.ans b/2022/04/input.ans new file mode 100644 index 0000000..74c4295 --- /dev/null +++ b/2022/04/input.ans @@ -0,0 +1,2 @@ +459 +779 diff --git a/2022/04/input.in b/2022/04/input.in new file mode 100644 index 0000000..d7f89bf --- /dev/null +++ b/2022/04/input.in @@ -0,0 +1,1000 @@ +98-99,3-97 +23-72,23-72 +53-62,8-87 +21-52,36-51 +36-38,37-96 +92-96,4-92 +7-30,8-60 +31-44,43-88 +67-73,45-73 +37-48,49-62 +32-50,1-33 +39-98,38-47 +11-17,18-88 +35-99,36-97 +9-82,2-3 +27-50,4-10 +1-92,5-92 +6-40,4-40 +4-7,2-3 +98-99,46-96 +24-38,23-39 +5-88,5-87 +12-97,12-96 +19-37,18-37 +14-39,14-85 +25-55,24-45 +30-92,31-92 +49-61,50-79 +4-69,4-70 +29-37,29-42 +12-77,11-79 +2-2,4-86 +55-55,54-54 +55-80,81-86 +8-10,7-8 +52-92,42-54 +32-63,32-55 +3-83,2-83 +97-97,8-97 +13-87,86-90 +43-95,42-43 +39-96,39-84 +81-96,36-80 +80-84,51-79 +37-43,14-43 +46-69,45-57 +14-85,5-13 +69-77,70-78 +18-77,14-14 +45-92,22-44 +53-68,53-77 +5-98,5-7 +45-68,45-68 +7-89,25-88 +24-89,24-25 +50-68,49-67 +57-57,58-79 +21-98,97-99 +29-60,14-23 +74-97,2-98 +56-69,69-85 +33-48,6-94 +99-99,22-97 +7-97,6-95 +14-20,14-35 +10-75,10-50 +2-3,4-15 +51-77,55-77 +81-94,82-95 +39-40,39-58 +20-70,19-69 +40-73,39-39 +90-90,21-90 +12-75,10-76 +4-25,1-24 +1-72,3-71 +31-84,85-85 +61-71,27-61 +25-90,24-89 +73-86,73-93 +37-84,25-35 +96-97,82-97 +2-3,5-87 +58-59,37-59 +97-99,31-97 +40-50,39-41 +5-98,6-99 +1-93,93-95 +44-87,43-86 +26-26,27-74 +19-87,1-18 +18-49,16-16 +36-56,56-82 +54-56,55-60 +56-67,66-68 +70-98,27-39 +55-56,2-55 +29-29,30-42 +44-83,46-83 +43-98,73-97 +59-63,59-92 +47-47,24-47 +64-84,64-70 +60-72,61-72 +8-26,9-67 +12-41,41-41 +9-50,51-51 +81-87,86-92 +75-98,97-98 +66-80,7-80 +7-91,8-82 +97-97,2-96 +20-62,21-97 +19-20,20-90 +85-97,85-99 +6-87,2-33 +23-59,23-48 +49-82,48-64 +55-69,54-77 +43-44,43-92 +90-98,10-89 +96-96,10-96 +5-93,2-93 +49-83,48-49 +66-93,58-58 +11-71,10-10 +49-95,73-95 +43-81,43-80 +15-50,15-50 +24-52,51-53 +57-87,57-86 +16-73,73-82 +51-98,52-88 +3-39,39-50 +23-23,24-80 +88-88,44-87 +9-97,95-97 +7-52,51-53 +6-7,6-98 +42-96,41-95 +91-94,4-92 +30-31,31-96 +76-86,75-77 +7-98,6-99 +15-97,14-82 +65-76,66-70 +14-15,15-62 +2-88,2-98 +6-89,5-88 +7-79,79-79 +25-50,25-59 +90-95,56-95 +10-13,14-49 +18-29,30-90 +32-64,64-64 +10-41,11-28 +34-88,35-35 +1-54,6-53 +23-97,97-97 +6-20,3-5 +17-82,16-17 +35-52,71-92 +34-47,25-35 +30-84,31-83 +11-87,11-60 +3-20,3-19 +21-25,26-99 +8-12,10-10 +4-91,93-97 +16-96,10-16 +5-24,4-6 +8-49,8-87 +9-94,8-93 +1-3,2-66 +5-19,6-25 +8-25,7-25 +2-2,4-92 +30-62,61-87 +37-61,38-61 +62-96,50-96 +16-41,15-41 +78-79,80-95 +4-94,5-94 +52-99,9-51 +32-59,81-83 +81-86,82-86 +21-23,21-24 +88-88,18-88 +75-88,35-76 +20-68,18-18 +4-46,5-46 +54-82,53-92 +13-64,65-65 +5-7,8-67 +1-4,4-88 +51-63,18-52 +19-94,36-94 +56-77,56-57 +3-25,55-92 +58-68,57-67 +35-89,35-99 +84-92,83-84 +18-18,19-96 +85-89,87-89 +19-81,18-95 +7-98,6-99 +9-11,10-69 +4-89,4-5 +25-93,58-74 +35-67,67-99 +17-62,17-62 +10-18,19-90 +66-86,84-85 +2-46,46-46 +16-41,41-73 +22-92,11-21 +9-60,6-61 +71-71,56-71 +57-58,27-58 +4-92,2-91 +85-85,85-85 +44-66,23-26 +2-18,3-92 +1-96,30-96 +61-80,60-78 +37-87,36-38 +32-77,27-31 +1-67,68-79 +98-99,7-65 +29-49,30-77 +56-73,57-72 +63-65,64-94 +34-86,81-87 +7-92,7-8 +3-98,3-97 +66-81,60-65 +85-85,1-85 +16-98,17-40 +13-95,12-95 +18-27,7-28 +26-35,34-77 +27-52,27-51 +23-71,22-72 +12-41,37-40 +69-87,69-92 +29-31,30-41 +62-73,61-74 +23-77,23-27 +52-57,51-52 +12-20,11-18 +61-61,4-60 +1-98,2-45 +6-98,6-90 +11-14,11-17 +28-53,22-52 +43-59,67-75 +45-47,46-63 +75-75,44-75 +48-50,51-52 +19-82,7-18 +8-41,14-49 +53-54,53-55 +11-97,97-97 +56-87,30-30 +14-96,15-46 +38-41,20-42 +17-23,23-62 +2-85,4-86 +8-69,6-6 +14-73,13-72 +21-62,8-69 +87-98,88-96 +17-60,61-61 +10-65,65-65 +2-11,13-93 +10-13,14-99 +10-66,79-83 +51-87,2-50 +7-86,8-73 +53-53,54-72 +1-95,2-96 +52-73,52-74 +59-72,72-74 +43-73,74-88 +8-90,8-9 +11-81,80-94 +59-84,85-85 +90-94,4-89 +36-82,36-83 +7-87,96-97 +30-99,36-99 +57-57,30-57 +16-98,4-98 +45-53,44-81 +83-83,69-83 +8-89,90-90 +14-46,4-47 +80-82,15-81 +50-57,58-94 +18-98,1-18 +17-36,35-79 +4-5,6-95 +14-95,15-98 +59-59,60-75 +5-82,6-37 +10-11,10-74 +19-70,19-69 +78-95,77-85 +59-86,58-58 +72-73,72-80 +53-81,82-91 +79-97,80-95 +9-83,10-88 +67-76,67-68 +19-43,30-32 +84-97,7-83 +8-10,9-77 +73-74,49-74 +2-59,6-60 +1-6,6-98 +20-92,12-20 +68-69,68-74 +98-99,99-99 +14-15,15-80 +23-60,23-98 +5-6,5-14 +38-42,37-55 +4-13,5-14 +2-5,3-5 +4-35,3-88 +20-94,94-94 +11-89,10-32 +11-47,22-47 +95-99,26-85 +7-58,6-6 +4-6,5-99 +4-95,4-96 +96-97,1-95 +1-4,1-84 +35-95,34-91 +9-15,18-34 +46-65,66-87 +38-81,38-71 +9-10,9-90 +66-99,1-99 +4-71,60-69 +20-43,20-42 +5-59,1-4 +91-99,22-75 +87-96,62-87 +22-37,21-36 +16-55,85-99 +33-99,33-55 +57-98,58-79 +39-97,96-96 +73-99,72-89 +14-74,15-15 +10-33,10-11 +8-13,12-23 +1-99,2-99 +83-83,12-83 +3-19,19-29 +33-50,34-78 +14-16,16-68 +65-84,64-98 +43-75,75-98 +26-77,8-25 +5-14,15-97 +15-15,16-16 +15-61,14-15 +5-19,18-23 +7-88,8-99 +37-37,33-37 +71-84,18-74 +5-91,95-96 +92-96,9-90 +75-92,3-92 +3-95,3-96 +75-76,68-76 +78-91,16-90 +28-65,27-72 +40-98,34-98 +18-42,19-43 +32-83,83-96 +20-93,20-92 +32-34,31-33 +72-95,43-72 +15-91,14-92 +15-82,15-89 +6-94,6-96 +4-76,76-93 +3-91,4-90 +47-72,71-72 +7-52,8-45 +97-98,14-98 +3-98,6-99 +2-91,3-49 +11-75,13-74 +35-79,36-70 +24-79,23-79 +64-99,63-63 +21-25,27-94 +3-83,2-99 +8-64,33-65 +44-44,23-44 +87-98,64-86 +76-76,9-75 +8-64,7-40 +76-82,75-98 +1-98,6-69 +67-79,66-79 +59-61,13-59 +12-93,43-94 +7-87,82-88 +8-68,8-85 +16-53,7-16 +30-97,30-97 +21-85,22-86 +51-93,44-95 +4-68,2-86 +5-19,9-19 +65-97,99-99 +8-63,27-62 +46-53,45-50 +7-19,20-40 +37-77,9-36 +99-99,54-97 +1-99,1-99 +28-57,28-58 +1-11,3-11 +27-33,28-38 +9-99,10-97 +41-41,41-46 +5-83,14-70 +16-91,90-99 +15-96,96-96 +2-77,1-98 +18-47,17-94 +7-26,7-27 +14-41,15-41 +5-26,6-79 +44-56,45-81 +79-93,80-99 +17-66,35-65 +87-97,39-82 +10-71,6-71 +68-95,51-62 +23-96,26-74 +70-82,69-71 +41-99,41-71 +23-72,22-71 +52-82,48-52 +81-86,86-86 +18-75,74-76 +26-37,32-37 +5-95,1-97 +43-43,42-64 +20-91,21-60 +35-50,35-66 +76-93,13-76 +32-70,32-71 +12-85,13-82 +1-74,5-73 +17-69,16-17 +51-83,51-82 +9-97,7-9 +1-98,1-2 +42-77,28-99 +20-67,20-22 +33-45,33-44 +24-24,25-90 +97-99,6-93 +12-98,11-72 +4-17,5-96 +96-97,1-95 +7-7,7-83 +71-72,71-91 +24-47,1-23 +29-35,30-46 +36-74,7-36 +37-63,61-63 +57-86,19-87 +20-40,40-74 +5-35,36-72 +18-84,17-98 +9-19,20-67 +29-43,29-42 +52-82,77-81 +57-78,9-84 +7-89,9-90 +6-98,27-99 +1-90,40-90 +1-99,3-98 +18-72,31-72 +99-99,86-96 +50-90,9-89 +30-70,29-69 +87-98,37-62 +32-69,11-31 +2-20,3-64 +1-43,1-47 +16-93,17-93 +28-50,49-51 +48-97,17-47 +64-80,65-66 +7-98,85-99 +7-39,8-92 +26-82,26-27 +43-93,43-52 +26-79,27-94 +14-31,13-31 +22-72,21-23 +31-77,12-77 +18-77,78-94 +1-99,2-99 +13-22,14-53 +12-79,11-40 +61-84,26-60 +6-40,17-41 +34-79,35-80 +79-82,78-79 +8-19,20-93 +6-77,7-56 +30-95,26-26 +29-70,30-92 +1-8,7-55 +42-59,43-79 +25-89,24-26 +57-67,56-67 +16-39,50-51 +46-73,20-71 +33-56,57-71 +59-60,61-66 +7-20,8-20 +70-94,16-34 +6-8,3-6 +4-99,3-94 +3-60,3-51 +96-96,65-98 +3-81,3-80 +60-73,89-90 +29-77,28-30 +5-25,22-63 +6-43,1-42 +86-90,1-61 +3-74,6-75 +36-84,37-83 +27-64,69-73 +80-84,1-83 +22-68,68-69 +52-53,52-76 +85-92,9-84 +6-48,7-48 +42-74,41-42 +4-77,5-90 +23-63,11-18 +26-27,26-26 +24-93,24-92 +13-56,13-56 +2-3,2-2 +35-95,99-99 +19-21,20-22 +34-98,34-96 +4-88,3-5 +9-75,8-74 +70-98,71-83 +62-69,61-61 +3-5,5-7 +4-62,13-61 +17-23,33-72 +95-95,9-95 +31-52,31-32 +62-98,98-99 +67-88,19-67 +23-30,36-76 +91-95,95-95 +25-86,24-60 +24-24,25-40 +44-91,44-45 +47-83,20-46 +81-92,40-80 +10-60,9-83 +81-99,38-80 +86-86,85-85 +17-92,44-92 +14-16,13-73 +13-38,12-14 +5-42,6-46 +29-79,28-78 +29-68,58-76 +33-54,50-54 +50-70,70-70 +5-95,3-4 +20-38,21-37 +2-31,3-21 +37-54,33-53 +61-93,74-94 +16-81,6-81 +6-42,41-42 +45-61,45-60 +36-86,37-89 +12-53,12-52 +8-70,71-74 +20-99,19-84 +4-82,83-87 +74-74,75-98 +11-99,11-94 +59-79,45-59 +13-92,14-93 +13-25,12-93 +7-76,6-8 +16-70,16-17 +7-7,60-76 +56-94,14-95 +98-98,23-70 +1-2,5-70 +30-34,31-31 +20-71,70-72 +36-38,16-37 +7-62,7-63 +2-94,3-95 +44-61,43-60 +49-49,49-83 +14-98,5-13 +6-95,6-95 +41-67,68-72 +40-99,39-98 +58-58,58-70 +64-98,63-98 +24-56,25-62 +32-81,31-32 +26-60,91-92 +31-37,3-38 +33-37,19-33 +98-98,97-99 +74-76,62-72 +4-52,1-51 +39-81,38-81 +55-75,28-76 +45-45,46-98 +4-61,3-11 +57-98,67-95 +1-99,1-99 +52-75,75-93 +19-19,20-50 +59-72,62-63 +8-14,7-15 +70-89,90-98 +4-14,14-94 +58-59,51-58 +2-98,1-97 +4-36,13-36 +45-99,64-98 +26-89,35-69 +34-35,34-34 +40-51,39-45 +5-92,4-5 +1-90,5-89 +17-39,34-38 +37-85,37-85 +39-99,39-39 +9-98,11-98 +13-72,4-8 +6-94,7-80 +12-55,13-54 +5-8,7-96 +32-96,95-97 +44-62,44-61 +2-4,10-42 +41-97,91-97 +8-35,7-7 +64-90,91-91 +55-92,55-91 +2-5,5-54 +53-95,54-98 +63-91,63-94 +19-67,5-93 +13-84,83-84 +18-78,78-83 +4-4,7-27 +1-99,2-98 +51-78,51-77 +4-96,5-98 +9-33,14-35 +13-89,12-84 +44-57,23-44 +2-78,7-78 +40-49,39-41 +90-96,18-39 +35-65,41-62 +5-77,24-76 +72-77,77-84 +53-89,85-89 +30-63,30-64 +21-93,21-94 +7-63,5-63 +63-80,63-93 +97-98,14-98 +19-62,64-74 +72-92,71-91 +29-31,30-76 +47-82,83-83 +38-39,39-76 +4-87,11-88 +7-96,6-80 +36-61,33-37 +50-96,95-97 +11-81,12-92 +14-74,74-74 +79-92,7-80 +24-25,25-90 +12-78,12-79 +47-99,7-98 +51-60,51-85 +49-70,50-70 +8-17,20-92 +1-11,12-65 +41-72,72-72 +41-56,40-64 +10-63,11-11 +70-84,36-85 +2-4,3-99 +84-84,85-88 +19-86,21-85 +7-55,55-55 +6-71,1-70 +15-15,15-87 +24-82,10-14 +65-80,54-64 +50-89,49-98 +4-4,10-11 +56-99,56-99 +32-78,2-31 +6-78,7-89 +8-71,90-95 +3-94,38-93 +25-77,85-92 +83-88,82-89 +34-91,33-90 +51-93,2-93 +2-63,2-80 +4-96,24-96 +37-62,37-62 +24-38,39-55 +11-98,11-99 +5-58,4-47 +71-96,33-98 +22-35,33-35 +40-63,39-46 +18-18,19-69 +12-95,12-44 +47-69,68-70 +72-74,5-72 +2-48,31-47 +4-40,41-79 +13-83,13-32 +47-50,6-46 +20-52,20-49 +49-76,23-37 +9-92,9-92 +9-69,10-88 +16-68,15-67 +2-64,9-57 +85-85,16-81 +60-60,61-89 +9-69,69-87 +30-86,31-96 +21-50,50-96 +96-96,31-77 +91-98,20-91 +18-84,9-85 +11-27,18-18 +35-44,35-66 +2-85,84-90 +58-95,99-99 +22-22,21-91 +30-90,30-91 +15-15,17-94 +7-97,97-99 +4-42,3-43 +26-96,7-24 +11-84,8-99 +94-95,15-94 +66-71,70-71 +29-54,54-54 +89-89,3-89 +74-76,75-77 +14-32,33-86 +35-78,79-79 +17-88,87-98 +20-52,19-59 +1-1,19-94 +44-89,43-94 +43-43,26-42 +7-45,6-32 +5-46,5-48 +98-98,10-57 +27-86,22-28 +34-92,33-33 +38-74,2-73 +59-89,9-59 +13-14,15-38 +17-59,18-93 +8-91,7-8 +62-79,62-89 +21-45,45-83 +77-85,16-72 +62-83,65-84 +1-99,1-99 +14-75,15-75 +28-99,27-28 +14-83,4-83 +1-2,5-60 +40-79,79-79 +83-89,84-87 +3-3,4-46 +3-38,1-49 +13-76,12-12 +4-7,6-14 +43-71,6-72 +28-61,12-27 +27-32,28-32 +17-82,17-83 +13-45,14-74 +38-99,70-98 +18-78,16-18 +41-55,40-42 +36-76,1-71 +12-24,25-77 +36-36,37-98 +2-2,3-75 +2-97,59-98 +26-95,27-37 +44-46,18-45 +58-65,58-74 +42-92,25-92 +7-86,85-86 +73-76,69-78 +1-2,3-86 +24-97,20-99 +62-92,13-92 +25-86,24-86 +31-89,8-89 +13-38,13-37 +13-83,24-84 +96-96,4-96 +26-43,25-26 +88-90,75-89 +54-59,2-60 +13-79,3-78 +43-58,42-90 +49-53,11-55 +89-91,11-90 +18-78,79-91 +35-99,36-98 +36-82,96-97 +32-68,36-69 +12-98,12-96 +23-49,41-49 +1-83,2-89 +30-36,30-37 +14-85,13-84 +38-40,9-39 +8-86,7-87 +2-80,36-54 +2-68,69-69 +23-49,23-57 +13-77,78-91 +71-99,99-99 +2-33,44-80 +48-50,4-49 +17-88,17-87 +62-83,61-94 +35-73,34-72 +15-93,93-93 +8-40,8-77 +21-21,22-84 +7-52,6-8 +6-97,7-99 +38-46,38-38 +85-86,4-86 +40-69,69-94 +1-99,41-98 +3-31,2-93 +44-47,29-65 +42-42,41-65 +48-74,74-82 +62-83,1-61 +9-17,10-18 +36-43,44-66 +8-95,37-95 +5-33,13-32 +19-95,94-95 +64-65,65-69 +16-66,67-67 +52-61,45-61 +50-73,51-74 +3-80,5-80 +90-99,68-89 +3-97,2-99 +18-27,18-27 +45-46,28-46 +15-54,16-54 +14-76,13-75 +97-99,1-97 +36-78,35-78 +40-67,65-67 +18-76,6-99 +94-96,95-95 +95-96,22-84 +2-20,19-82 +34-83,33-82 +56-61,56-57 +79-87,78-81 +8-57,7-56 +83-86,83-85 +6-91,90-97 +76-86,28-87 +95-96,9-94 +19-32,33-42 +23-30,28-32 +17-81,17-81 +53-71,72-82 +70-72,71-86 +34-65,35-64 +12-87,86-87 +63-68,62-67 +10-38,9-39 +18-70,18-71 +5-6,7-83 +59-96,59-95 +33-73,21-32 +16-65,17-65 +24-62,16-16 +4-86,3-85 +5-95,6-94 +15-46,16-94 +3-87,9-86 +17-56,7-55 +22-23,22-62 +48-89,47-90 +25-26,26-86 +64-71,63-64 +91-98,7-91 +10-10,11-16 +25-58,25-59 +8-64,46-64 +24-71,25-72 +65-65,14-65 +19-59,19-19 +42-74,42-43 +7-79,8-90 +47-70,16-71 +43-57,42-56 +40-41,41-82 +15-59,15-58 +15-84,5-16 +1-31,18-30 +4-59,5-86 +78-83,74-82 +55-56,55-96 +69-88,8-68 +23-32,43-83 +2-75,5-96 +52-97,53-96 +5-80,19-68 +6-99,5-5 +16-86,2-17 +15-34,11-33 +15-69,15-69 +5-57,6-56 +4-95,5-96 +41-54,24-54 +27-27,28-39 +4-28,3-5 +50-80,58-79 +80-90,80-96 +5-98,1-5 +71-84,71-83 +95-96,63-94 +21-96,20-97 +75-76,62-76 +30-59,53-99 +53-93,53-66 +21-97,15-99 +12-80,8-86 +5-21,22-40 +4-76,4-75 +17-19,22-91 +1-8,7-54 +9-57,5-9 +5-84,84-87 +56-56,55-85 +55-57,56-72 +25-32,36-58 +58-95,59-96 +7-35,49-54 +3-95,96-97 +40-43,40-70 +14-90,13-89 diff --git a/Media/2022/04.png b/Media/2022/04.png new file mode 100644 index 0000000000000000000000000000000000000000..612aaba56621719dce1e3d1e180d8b7087668af9 GIT binary patch literal 9371 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 VIjC_;$XNgY002ovPDHLkV1h(&aHRkM literal 0 HcmV?d00001 diff --git a/README.md b/README.md index b2ff17c..6bc736a 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- 2022 - 6 ⭐ + 2022 - 8 ⭐

@@ -15,6 +15,9 @@ + + +

2021 - 50 ⭐

From f2e5295527a1df44616b8d4ee97c9814667c49a9 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 4 Dec 2022 07:13:04 +0100 Subject: [PATCH 004/225] Add check to see whether cached leaderboard is less than 30 mins old --- AoCTiles/create_aoc_tiles.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/AoCTiles/create_aoc_tiles.py b/AoCTiles/create_aoc_tiles.py index db7c930..7b0d858 100644 --- a/AoCTiles/create_aoc_tiles.py +++ b/AoCTiles/create_aoc_tiles.py @@ -18,6 +18,7 @@ import functools import itertools import math +import time from collections import namedtuple from functools import cache from pathlib import Path @@ -193,8 +194,13 @@ def request_leaderboard(year: int) -> dict[int, DayScores]: leaderboard_path = CACHE_DIR / f"leaderboard{year}.html" if leaderboard_path.exists(): leaderboard = parse_leaderboard(leaderboard_path) + less_than_30mins = time.time() - leaderboard_path.lstat().st_mtime < 60 * 30 + if less_than_30mins: + print(f"Leaderboard for {year} is younger than 30 minutes, skipping download in order to avoid DDOS.") + return leaderboard has_no_none_values = all(itertools.chain(map(list, leaderboard.values()))) - if has_no_none_values: + if has_no_none_values and len(leaderboard) == 25: + print(f"Leaderboard for {year} is complete, no need to download.") return leaderboard with open(SESSION_COOKIE_PATH) as cookie_file: session_cookie = cookie_file.read().strip() From 4f879659c38f90941beb1db71f5d082009350a5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20G=C3=B6rtz?= Date: Sun, 4 Dec 2022 20:58:01 +0100 Subject: [PATCH 005/225] Add Backdrop to text if Background too bright --- AoCTiles/create_aoc_tiles.py | 37 ++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/AoCTiles/create_aoc_tiles.py b/AoCTiles/create_aoc_tiles.py index 7b0d858..78fbca6 100644 --- a/AoCTiles/create_aoc_tiles.py +++ b/AoCTiles/create_aoc_tiles.py @@ -106,6 +106,11 @@ def get_solution_paths_dict_for_years() -> dict[int, dict[int, list[str]]]: # Color if a part is not completed NOT_COMPLETED_COLOR = ImageColor.getrgb("#333333") +TEXT_BACKDROP = ImageColor.getrgb("#6C6A6A") +# Add Backdrop if too bright ( = too similar to TEXT_WHITE) +THRESHOLD = 30 # Range from 0 to 255 +TEXT_WHITE = ImageColor.getrgb("#FFFFFF") +TEXT_STROKE_WEIGHT = 0 # Standard = no stroke # Width of each tile in the README.md. # 161px is a rather specific number, with it exactly 5 tiles fit into a row. It is possible to go @@ -249,6 +254,14 @@ def __str__(self): def darker_color(c: tuple[int, int, int, int]) -> tuple[int, int, int, int]: return c[0] - 10, c[1] - 10, c[2] - 10, 255 +# Luminance of color +def luminance(color): + return (0.299 * color[0] + 0.587 * color[1] + 0.114 * color[2]) + +# How similar is color_a to color_b +def is_similar(color_a, color_b, threshold): + return abs(luminance(color_a) - luminance(color_b)) < threshold + def get_alternating_background(languages, both_parts_completed=True, *, stripe_width=20): colors = [ImageColor.getrgb(extension_to_color[language]) for language in languages] @@ -296,28 +309,36 @@ def generate_day_tile_image(day: str, year: str, languages: list[str], day_score drawer = ImageDraw(image) font_color = "white" + # Get all colors of the day, check if any one is similar to TEXT_WHITE + # If yes, add Backdrop + tempcolors = [ImageColor.getrgb(extension_to_color[language]) for language in languages] + TEXT_STROKE_WEIGHT = 0 + for color in tempcolors: + if(is_similar(color,TEXT_WHITE, THRESHOLD)): + TEXT_STROKE_WEIGHT = 1 + # === Left side === - drawer.text((3, -5), "Day", fill=font_color, align="left", font=main_font(20)) - drawer.text((1, -10), str(day), fill=font_color, align="center", font=main_font(75)) + drawer.text((3, -5), "Day", fill=font_color, align="left", font=main_font(20),stroke_width=TEXT_STROKE_WEIGHT, stroke_fill=TEXT_BACKDROP) + drawer.text((1, -10), str(day), fill=font_color, align="center", font=main_font(75),stroke_width=TEXT_STROKE_WEIGHT, stroke_fill=TEXT_BACKDROP) # Calculate font size based on number of characters, because it might overflow lang_as_str = " ".join(languages) lang_font_size = max(6, int(18 - max(0, len(lang_as_str) - 8) * 1.3)) - drawer.text((0, 74), lang_as_str, fill=font_color, align="left", font=secondary_font(lang_font_size)) + drawer.text((0, 74), lang_as_str, fill=font_color, align="left", font=secondary_font(lang_font_size),stroke_width=TEXT_STROKE_WEIGHT, stroke_fill=TEXT_BACKDROP) # === Right side (P1 & P2) === for part in (1, 2): y = 50 if part == 2 else 0 time, rank = getattr(day_scores, f"time{part}", None), getattr(day_scores, f"rank{part}", None) if day_scores is not None and time is not None: - drawer.text((104, -5 + y), f"P{part} ", fill=font_color, align="left", font=main_font(25)) + drawer.text((104, -5 + y), f"P{part} ", fill=font_color, align="left", font=main_font(25),stroke_width=TEXT_STROKE_WEIGHT, stroke_fill=TEXT_BACKDROP) if SHOW_CHECKMARK_INSTEAD_OF_TIME_RANK: drawer.line((160, 35 + y, 150, 25 + y), fill=font_color, width=2) drawer.line((160, 35 + y, 180, 15 + y), fill=font_color, width=2) continue - drawer.text((105, 25 + y), "time", fill=font_color, align="right", font=secondary_font(10)) - drawer.text((105, 35 + y), "rank", fill=font_color, align="right", font=secondary_font(10)) - drawer.text((143, 3 + y), format_time(time), fill=font_color, align="right", font=secondary_font(18)) - drawer.text((133, 23 + y), f"{rank:>6}", fill=font_color, align="right", font=secondary_font(18)) + drawer.text((105, 25 + y), "time", fill=font_color, align="right", font=secondary_font(10),stroke_width=TEXT_STROKE_WEIGHT, stroke_fill=TEXT_BACKDROP) + drawer.text((105, 35 + y), "rank", fill=font_color, align="right", font=secondary_font(10),stroke_width=TEXT_STROKE_WEIGHT, stroke_fill=TEXT_BACKDROP) + drawer.text((143, 3 + y), format_time(time), fill=font_color, align="right", font=secondary_font(18),stroke_width=TEXT_STROKE_WEIGHT, stroke_fill=TEXT_BACKDROP) + drawer.text((133, 23 + y), f"{rank:>6}", fill=font_color, align="right", font=secondary_font(18),stroke_width=TEXT_STROKE_WEIGHT, stroke_fill=TEXT_BACKDROP) else: drawer.line((140, 15 + y, 160, 35 + y), fill=font_color, width=2) drawer.line((140, 35 + y, 160, 15 + y), fill=font_color, width=2) From cc3d39014e6a813bff4f0af522ec413c9f3eb067 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 4 Dec 2022 21:37:24 +0100 Subject: [PATCH 006/225] Fix order of days when they aren't prefixed with 0 --- AoCTiles/create_aoc_tiles.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AoCTiles/create_aoc_tiles.py b/AoCTiles/create_aoc_tiles.py index 7b0d858..921c4f1 100644 --- a/AoCTiles/create_aoc_tiles.py +++ b/AoCTiles/create_aoc_tiles.py @@ -375,7 +375,7 @@ def handle_year(year: int, day_to_solutions: dict[int, list[str]]): html.push(f"{year} - {stars} ⭐") max_day = 25 if CREATE_ALL_DAYS else max(*day_to_solutions, *leaderboard) fill_empty_days_in_dict(day_to_solutions, max_day) - for day, solutions in day_to_solutions.items(): + for day, solutions in sorted(day_to_solutions.items()): handle_day(day, year, solutions, html, leaderboard.get(day, None)) with open(README_PATH, "r") as file: From d1da8f8fab6a450aa3fe84a75751d92e0285b714 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lionel=20N=C3=A9bot=20Janvier?= <35747326+lionel-nj@users.noreply.github.com> Date: Sun, 4 Dec 2022 21:49:09 -0500 Subject: [PATCH 007/225] fix comment --- AoCTiles/create_aoc_tiles.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AoCTiles/create_aoc_tiles.py b/AoCTiles/create_aoc_tiles.py index 7b0d858..4b06a85 100644 --- a/AoCTiles/create_aoc_tiles.py +++ b/AoCTiles/create_aoc_tiles.py @@ -40,7 +40,7 @@ # Path to the README file where the tiles should be added README_PATH = AOC_DIR / "README.md" -# Path to the README file where the tiles should be added +# Path to the cookie session file SESSION_COOKIE_PATH = AOC_DIR / "session.cookie" # Whether the graphic should be created for days that have not been completed yet. Note that missing days between From c3cfe0c8d1ca7083c1dabc0d6e54a4ead8c362b7 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Mon, 5 Dec 2022 07:01:33 +0100 Subject: [PATCH 008/225] Improve code for outline, add "dark" option --- AoCTiles/create_aoc_tiles.py | 63 +++++++++++++++++++++--------------- 1 file changed, 37 insertions(+), 26 deletions(-) diff --git a/AoCTiles/create_aoc_tiles.py b/AoCTiles/create_aoc_tiles.py index 052a95c..e904bc3 100644 --- a/AoCTiles/create_aoc_tiles.py +++ b/AoCTiles/create_aoc_tiles.py @@ -23,6 +23,7 @@ from functools import cache from pathlib import Path import re +from typing import Literal import requests from PIL import Image, ImageColor @@ -58,6 +59,11 @@ DAY_PATTERN = r"\d{2}" +# On how to improve legibility of the text when the background is white, outline will add a dark outline around +# the text, "text" will make the text itself dark, none will not change the text color (leaves it white) +CONTRAST_IMPROVEMENT_TYPE: Literal["none", "outline", "dark"] = "outline" + + # You can change this code entirely, or just change patterns above. You get more control if you change the code. def get_solution_paths_dict_for_years() -> dict[int, dict[int, list[str]]]: """Returns a dictionary which maps years to days to a list of solution paths, @@ -106,11 +112,10 @@ def get_solution_paths_dict_for_years() -> dict[int, dict[int, list[str]]]: # Color if a part is not completed NOT_COMPLETED_COLOR = ImageColor.getrgb("#333333") -TEXT_BACKDROP = ImageColor.getrgb("#6C6A6A") -# Add Backdrop if too bright ( = too similar to TEXT_WHITE) -THRESHOLD = 30 # Range from 0 to 255 -TEXT_WHITE = ImageColor.getrgb("#FFFFFF") -TEXT_STROKE_WEIGHT = 0 # Standard = no stroke +OUTLINE_COLOR = ImageColor.getrgb("#6C6A6A") +# Add outline if too bright ( = too similar to TEXT_WHITE) +CONTRAST_IMPROVEMENT_THRESHOLD = 30 # Range from 0 to 255 +TEXT_COLOR = ImageColor.getrgb("#FFFFFF") # Width of each tile in the README.md. # 161px is a rather specific number, with it exactly 5 tiles fit into a row. It is possible to go @@ -259,7 +264,7 @@ def luminance(color): return (0.299 * color[0] + 0.587 * color[1] + 0.114 * color[2]) # How similar is color_a to color_b -def is_similar(color_a, color_b, threshold): +def color_similarity(color_a, color_b, threshold): return abs(luminance(color_a) - luminance(color_b)) < threshold @@ -307,44 +312,50 @@ def generate_day_tile_image(day: str, year: str, languages: list[str], day_score """Saves a graphic for a given day and year. Returns the path to it.""" image = get_alternating_background(languages, not (day_scores is None or day_scores.time2 is None)) drawer = ImageDraw(image) - font_color = "white" - - # Get all colors of the day, check if any one is similar to TEXT_WHITE - # If yes, add Backdrop - tempcolors = [ImageColor.getrgb(extension_to_color[language]) for language in languages] - TEXT_STROKE_WEIGHT = 0 - for color in tempcolors: - if(is_similar(color,TEXT_WHITE, THRESHOLD)): - TEXT_STROKE_WEIGHT = 1 - + text_kwargs = {"fill": TEXT_COLOR} + + # Get all colors of the day, check if any one is similar to TEXT_COLOR + # If yes, add outline + for language in languages: + color = ImageColor.getrgb(extension_to_color[language]) + if color_similarity(color, TEXT_COLOR, CONTRAST_IMPROVEMENT_THRESHOLD): + if "outline" in CONTRAST_IMPROVEMENT_TYPE: + text_kwargs["stroke_width"] = 1 + text_kwargs["stroke_fill"] = OUTLINE_COLOR + if "dark" in CONTRAST_IMPROVEMENT_TYPE: + text_kwargs["fill"] = NOT_COMPLETED_COLOR + break + + font_color = text_kwargs["fill"] + # === Left side === - drawer.text((3, -5), "Day", fill=font_color, align="left", font=main_font(20),stroke_width=TEXT_STROKE_WEIGHT, stroke_fill=TEXT_BACKDROP) - drawer.text((1, -10), str(day), fill=font_color, align="center", font=main_font(75),stroke_width=TEXT_STROKE_WEIGHT, stroke_fill=TEXT_BACKDROP) + drawer.text((3, -5), "Day", align="left", font=main_font(20), **text_kwargs) + drawer.text((1, -10), str(day), align="center", font=main_font(75), **text_kwargs) # Calculate font size based on number of characters, because it might overflow lang_as_str = " ".join(languages) lang_font_size = max(6, int(18 - max(0, len(lang_as_str) - 8) * 1.3)) - drawer.text((0, 74), lang_as_str, fill=font_color, align="left", font=secondary_font(lang_font_size),stroke_width=TEXT_STROKE_WEIGHT, stroke_fill=TEXT_BACKDROP) + drawer.text((0, 74), lang_as_str, align="left", font=secondary_font(lang_font_size), **text_kwargs) # === Right side (P1 & P2) === for part in (1, 2): y = 50 if part == 2 else 0 time, rank = getattr(day_scores, f"time{part}", None), getattr(day_scores, f"rank{part}", None) if day_scores is not None and time is not None: - drawer.text((104, -5 + y), f"P{part} ", fill=font_color, align="left", font=main_font(25),stroke_width=TEXT_STROKE_WEIGHT, stroke_fill=TEXT_BACKDROP) + drawer.text((104, -5 + y), f"P{part} ", align="left", font=main_font(25), **text_kwargs) if SHOW_CHECKMARK_INSTEAD_OF_TIME_RANK: drawer.line((160, 35 + y, 150, 25 + y), fill=font_color, width=2) drawer.line((160, 35 + y, 180, 15 + y), fill=font_color, width=2) continue - drawer.text((105, 25 + y), "time", fill=font_color, align="right", font=secondary_font(10),stroke_width=TEXT_STROKE_WEIGHT, stroke_fill=TEXT_BACKDROP) - drawer.text((105, 35 + y), "rank", fill=font_color, align="right", font=secondary_font(10),stroke_width=TEXT_STROKE_WEIGHT, stroke_fill=TEXT_BACKDROP) - drawer.text((143, 3 + y), format_time(time), fill=font_color, align="right", font=secondary_font(18),stroke_width=TEXT_STROKE_WEIGHT, stroke_fill=TEXT_BACKDROP) - drawer.text((133, 23 + y), f"{rank:>6}", fill=font_color, align="right", font=secondary_font(18),stroke_width=TEXT_STROKE_WEIGHT, stroke_fill=TEXT_BACKDROP) + drawer.text((105, 25 + y), "time", align="right", font=secondary_font(10), **text_kwargs) + drawer.text((105, 35 + y), "rank", align="right", font=secondary_font(10), **text_kwargs) + drawer.text((143, 3 + y), format_time(time), align="right", font=secondary_font(18), **text_kwargs) + drawer.text((133, 23 + y), f"{rank:>6}", align="right", font=secondary_font(18), **text_kwargs) else: drawer.line((140, 15 + y, 160, 35 + y), fill=font_color, width=2) drawer.line((140, 35 + y, 160, 15 + y), fill=font_color, width=2) - if day_scores is None: - drawer.line((15, 85, 85, 85), fill=font_color, width=2) + if day_scores is None and not languages: + drawer.line((15, 85, 85, 85), fill=TEXT_COLOR, width=2) # === Divider lines === drawer.line((100, 5, 100, 95), fill=font_color, width=1) From 77e46d75d1cf04dbc22e00a575fd2612b555fb9d Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Mon, 5 Dec 2022 07:02:05 +0100 Subject: [PATCH 009/225] Blackify --- AoCTiles/create_aoc_tiles.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/AoCTiles/create_aoc_tiles.py b/AoCTiles/create_aoc_tiles.py index e904bc3..8ccdabc 100644 --- a/AoCTiles/create_aoc_tiles.py +++ b/AoCTiles/create_aoc_tiles.py @@ -172,7 +172,7 @@ def get_paths_matching_regex(path: Path, pattern: str): def find_recursive_solution_files(directory: Path) -> list[Path]: solution_paths = [] - for path in directory.rglob('*'): + for path in directory.rglob("*"): if path.is_file() and path.suffix in extension_to_color: solution_paths.append(path) return solution_paths @@ -194,8 +194,7 @@ def parse_leaderboard(leaderboard_path: Path) -> dict[int, DayScores]: day, *scores = re.split(r"\s+", line.strip()) # replace "-" with None to be able to handle the data later, like if no score existed for the day scores = [s if s != "-" else None for s in scores] - assert len(scores) in ( - 3, 6), f"Number scores for {day=} ({scores}) are not 3 or 6." + assert len(scores) in (3, 6), f"Number scores for {day=} ({scores}) are not 3 or 6." leaderboard[int(day)] = DayScores(*scores) return leaderboard @@ -214,7 +213,11 @@ def request_leaderboard(year: int) -> dict[int, DayScores]: return leaderboard with open(SESSION_COOKIE_PATH) as cookie_file: session_cookie = cookie_file.read().strip() - data = requests.get(PERSONAL_LEADERBOARD_URL.format(year=year), headers={"User-Agent": "https://github.com/LiquidFun/adventofcode by Brutenis Gliwa"}, cookies={"session": session_cookie}).text + data = requests.get( + PERSONAL_LEADERBOARD_URL.format(year=year), + headers={"User-Agent": "https://github.com/LiquidFun/adventofcode by Brutenis Gliwa"}, + cookies={"session": session_cookie}, + ).text leaderboard_path.parent.mkdir(exist_ok=True, parents=True) with open(leaderboard_path, "w") as file: file.write(data) @@ -259,9 +262,11 @@ def __str__(self): def darker_color(c: tuple[int, int, int, int]) -> tuple[int, int, int, int]: return c[0] - 10, c[1] - 10, c[2] - 10, 255 + # Luminance of color def luminance(color): - return (0.299 * color[0] + 0.587 * color[1] + 0.114 * color[2]) + return 0.299 * color[0] + 0.587 * color[1] + 0.114 * color[2] + # How similar is color_a to color_b def color_similarity(color_a, color_b, threshold): From 79c333ee86ac6aa3c62bd62ce84c2beec3f8f191 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Mon, 5 Dec 2022 07:19:22 +0100 Subject: [PATCH 010/225] Add day 5 --- 2022/05/05.py | 27 ++ 2022/05/input.ans | 2 + 2022/05/input.in | 514 ++++++++++++++++++++++++++++++++++ AoCTiles/README.md | 5 +- AoCTiles/examples/outline.png | Bin 0 -> 13416 bytes Media/2022/05.png | Bin 0 -> 9519 bytes README.md | 5 +- 7 files changed, 549 insertions(+), 4 deletions(-) create mode 100644 2022/05/05.py create mode 100644 2022/05/input.ans create mode 100644 2022/05/input.in create mode 100644 AoCTiles/examples/outline.png create mode 100644 Media/2022/05.png diff --git a/2022/05/05.py b/2022/05/05.py new file mode 100644 index 0000000..43c335a --- /dev/null +++ b/2022/05/05.py @@ -0,0 +1,27 @@ +import sys, re +towers, instructions = sys.stdin.read().rstrip().split("\n\n") +*towers, indices = towers.split("\n") +tower_count = int(indices.strip().split()[-1]) + +stacks1 = [[] for _ in range(tower_count)] + +for line in towers[::-1]: + for i in range(tower_count): + c = line[i*4+1] + if c != ' ': + stacks1[i].append(c) + +stacks2 = [l.copy() for l in stacks1] + +for line in instructions.split("\n"): + a, b, c = map(int, re.fullmatch(r"move (\d+) from (\d+) to (\d+)", line).groups()) + for _ in range(a): + new = stacks1[b-1].pop() + stacks1[c-1].append(new) + + stacks2[c-1].extend(stacks2[b-1][-a:]) + for _ in range(a): + stacks2[b-1].pop() + +print(''.join(s[-1] for s in stacks1)) +print(''.join(s[-1] for s in stacks2)) diff --git a/2022/05/input.ans b/2022/05/input.ans new file mode 100644 index 0000000..6a2ba93 --- /dev/null +++ b/2022/05/input.ans @@ -0,0 +1,2 @@ +MQSHJMWNH +LLWJRBHVZ diff --git a/2022/05/input.in b/2022/05/input.in new file mode 100644 index 0000000..7cb8cf9 --- /dev/null +++ b/2022/05/input.in @@ -0,0 +1,514 @@ + [B] [B] [S] + [M] [P] [L] [B] [J] + [D] [R] [V] [D] [Q] [D] + [T] [R] [Z] [H] [H] [G] [C] + [P] [W] [J] [B] [J] [F] [J] [S] +[N] [S] [Z] [V] [M] [N] [Z] [F] [M] +[W] [Z] [H] [D] [H] [G] [Q] [S] [W] +[B] [L] [Q] [W] [S] [L] [J] [W] [Z] + 1 2 3 4 5 6 7 8 9 + +move 3 from 5 to 2 +move 5 from 3 to 1 +move 4 from 4 to 9 +move 6 from 1 to 4 +move 6 from 8 to 7 +move 5 from 2 to 7 +move 1 from 5 to 4 +move 11 from 9 to 7 +move 1 from 1 to 9 +move 6 from 4 to 6 +move 12 from 6 to 7 +move 1 from 9 to 2 +move 2 from 4 to 6 +move 1 from 8 to 9 +move 1 from 9 to 4 +move 1 from 6 to 1 +move 2 from 7 to 5 +move 2 from 6 to 7 +move 2 from 1 to 6 +move 2 from 4 to 7 +move 1 from 5 to 4 +move 1 from 5 to 6 +move 1 from 6 to 1 +move 1 from 1 to 3 +move 1 from 4 to 1 +move 1 from 1 to 4 +move 1 from 4 to 5 +move 1 from 3 to 9 +move 1 from 5 to 1 +move 4 from 2 to 1 +move 20 from 7 to 8 +move 24 from 7 to 3 +move 3 from 6 to 4 +move 1 from 1 to 9 +move 1 from 9 to 3 +move 2 from 1 to 2 +move 2 from 4 to 1 +move 2 from 2 to 1 +move 14 from 3 to 6 +move 6 from 1 to 6 +move 10 from 3 to 2 +move 1 from 2 to 3 +move 6 from 6 to 5 +move 2 from 3 to 4 +move 13 from 8 to 4 +move 1 from 9 to 7 +move 1 from 6 to 3 +move 10 from 4 to 2 +move 1 from 3 to 6 +move 2 from 8 to 7 +move 1 from 7 to 2 +move 11 from 6 to 8 +move 2 from 6 to 1 +move 2 from 1 to 3 +move 1 from 8 to 6 +move 1 from 3 to 9 +move 3 from 8 to 2 +move 1 from 3 to 6 +move 2 from 6 to 4 +move 1 from 6 to 5 +move 11 from 2 to 9 +move 2 from 4 to 6 +move 1 from 6 to 1 +move 1 from 1 to 5 +move 11 from 2 to 7 +move 12 from 7 to 5 +move 1 from 6 to 2 +move 10 from 8 to 7 +move 6 from 5 to 3 +move 4 from 5 to 4 +move 11 from 9 to 7 +move 7 from 4 to 9 +move 4 from 9 to 6 +move 12 from 7 to 3 +move 1 from 8 to 9 +move 1 from 5 to 1 +move 1 from 1 to 2 +move 1 from 6 to 9 +move 3 from 4 to 1 +move 1 from 9 to 7 +move 8 from 7 to 2 +move 3 from 6 to 1 +move 8 from 2 to 3 +move 1 from 7 to 4 +move 2 from 7 to 2 +move 1 from 5 to 2 +move 8 from 5 to 1 +move 3 from 9 to 6 +move 1 from 6 to 2 +move 1 from 4 to 5 +move 1 from 5 to 4 +move 2 from 9 to 3 +move 1 from 8 to 6 +move 1 from 4 to 5 +move 1 from 5 to 1 +move 1 from 6 to 8 +move 1 from 8 to 1 +move 7 from 1 to 5 +move 11 from 3 to 7 +move 1 from 1 to 9 +move 4 from 2 to 1 +move 5 from 1 to 3 +move 1 from 5 to 9 +move 1 from 6 to 3 +move 6 from 2 to 1 +move 5 from 7 to 3 +move 1 from 6 to 8 +move 1 from 8 to 4 +move 6 from 7 to 9 +move 4 from 9 to 8 +move 2 from 8 to 9 +move 2 from 5 to 8 +move 13 from 3 to 7 +move 1 from 3 to 8 +move 2 from 1 to 9 +move 3 from 1 to 5 +move 1 from 4 to 1 +move 6 from 5 to 9 +move 8 from 9 to 8 +move 2 from 7 to 3 +move 1 from 9 to 7 +move 1 from 5 to 2 +move 5 from 9 to 8 +move 1 from 8 to 7 +move 1 from 2 to 9 +move 7 from 1 to 2 +move 4 from 7 to 5 +move 6 from 2 to 3 +move 1 from 2 to 1 +move 10 from 8 to 9 +move 3 from 8 to 9 +move 4 from 5 to 1 +move 2 from 8 to 6 +move 9 from 9 to 8 +move 1 from 9 to 6 +move 8 from 8 to 4 +move 12 from 3 to 5 +move 1 from 4 to 2 +move 3 from 8 to 1 +move 3 from 9 to 7 +move 1 from 3 to 2 +move 1 from 6 to 9 +move 8 from 3 to 8 +move 6 from 4 to 5 +move 1 from 7 to 6 +move 1 from 8 to 1 +move 6 from 8 to 7 +move 1 from 3 to 6 +move 7 from 1 to 5 +move 1 from 4 to 9 +move 4 from 6 to 5 +move 13 from 7 to 5 +move 1 from 8 to 2 +move 2 from 9 to 3 +move 4 from 7 to 2 +move 1 from 3 to 8 +move 1 from 3 to 4 +move 4 from 1 to 2 +move 1 from 5 to 7 +move 23 from 5 to 6 +move 1 from 8 to 6 +move 1 from 9 to 4 +move 5 from 2 to 6 +move 1 from 4 to 9 +move 1 from 9 to 3 +move 1 from 7 to 8 +move 1 from 4 to 3 +move 1 from 3 to 7 +move 1 from 7 to 5 +move 1 from 8 to 7 +move 12 from 6 to 1 +move 1 from 2 to 5 +move 1 from 3 to 1 +move 20 from 5 to 2 +move 14 from 2 to 4 +move 11 from 2 to 6 +move 1 from 7 to 8 +move 13 from 1 to 8 +move 9 from 8 to 4 +move 3 from 8 to 6 +move 10 from 6 to 8 +move 6 from 6 to 4 +move 4 from 8 to 5 +move 26 from 4 to 2 +move 2 from 5 to 2 +move 5 from 8 to 1 +move 1 from 8 to 3 +move 2 from 1 to 3 +move 2 from 3 to 7 +move 27 from 2 to 7 +move 2 from 8 to 1 +move 1 from 3 to 7 +move 6 from 6 to 2 +move 4 from 6 to 1 +move 4 from 6 to 4 +move 2 from 5 to 4 +move 4 from 2 to 1 +move 3 from 1 to 8 +move 1 from 2 to 8 +move 8 from 4 to 3 +move 1 from 2 to 8 +move 5 from 8 to 6 +move 1 from 4 to 2 +move 1 from 2 to 1 +move 6 from 3 to 1 +move 13 from 7 to 1 +move 1 from 2 to 8 +move 1 from 8 to 2 +move 1 from 6 to 2 +move 1 from 2 to 8 +move 1 from 8 to 2 +move 14 from 7 to 1 +move 5 from 6 to 3 +move 2 from 3 to 1 +move 3 from 3 to 2 +move 3 from 7 to 4 +move 1 from 4 to 9 +move 1 from 9 to 7 +move 2 from 3 to 6 +move 5 from 2 to 7 +move 1 from 7 to 6 +move 5 from 7 to 6 +move 2 from 6 to 7 +move 1 from 6 to 8 +move 1 from 4 to 7 +move 4 from 6 to 9 +move 35 from 1 to 8 +move 3 from 7 to 2 +move 1 from 2 to 5 +move 24 from 8 to 3 +move 1 from 5 to 8 +move 13 from 3 to 6 +move 2 from 2 to 6 +move 6 from 6 to 4 +move 11 from 1 to 6 +move 12 from 6 to 1 +move 1 from 8 to 1 +move 2 from 1 to 3 +move 5 from 4 to 1 +move 1 from 6 to 4 +move 1 from 8 to 3 +move 13 from 3 to 9 +move 3 from 8 to 2 +move 3 from 2 to 7 +move 1 from 3 to 6 +move 3 from 7 to 8 +move 14 from 1 to 3 +move 1 from 1 to 9 +move 6 from 3 to 8 +move 17 from 8 to 6 +move 1 from 3 to 7 +move 1 from 7 to 8 +move 26 from 6 to 7 +move 1 from 1 to 9 +move 3 from 4 to 1 +move 2 from 3 to 8 +move 1 from 8 to 4 +move 14 from 9 to 7 +move 12 from 7 to 3 +move 2 from 1 to 4 +move 2 from 7 to 8 +move 2 from 8 to 3 +move 4 from 9 to 8 +move 1 from 4 to 7 +move 1 from 1 to 3 +move 2 from 4 to 2 +move 24 from 7 to 6 +move 1 from 8 to 1 +move 1 from 7 to 2 +move 1 from 7 to 9 +move 3 from 2 to 9 +move 1 from 1 to 6 +move 5 from 8 to 2 +move 5 from 3 to 4 +move 1 from 2 to 5 +move 3 from 9 to 8 +move 2 from 4 to 9 +move 16 from 6 to 3 +move 14 from 3 to 8 +move 1 from 7 to 9 +move 8 from 6 to 9 +move 4 from 8 to 5 +move 8 from 8 to 3 +move 1 from 5 to 8 +move 1 from 2 to 4 +move 4 from 8 to 7 +move 1 from 5 to 6 +move 12 from 9 to 5 +move 15 from 5 to 8 +move 1 from 6 to 1 +move 2 from 2 to 6 +move 3 from 4 to 2 +move 4 from 2 to 7 +move 8 from 7 to 3 +move 1 from 1 to 4 +move 3 from 6 to 9 +move 16 from 8 to 3 +move 3 from 9 to 4 +move 1 from 8 to 9 +move 2 from 9 to 4 +move 24 from 3 to 8 +move 19 from 8 to 7 +move 2 from 8 to 7 +move 7 from 4 to 5 +move 13 from 7 to 5 +move 4 from 7 to 8 +move 7 from 8 to 1 +move 3 from 5 to 3 +move 3 from 7 to 2 +move 1 from 1 to 4 +move 1 from 7 to 2 +move 3 from 2 to 4 +move 8 from 3 to 1 +move 11 from 1 to 3 +move 12 from 3 to 4 +move 1 from 2 to 5 +move 18 from 3 to 8 +move 3 from 1 to 9 +move 1 from 3 to 5 +move 15 from 5 to 4 +move 4 from 5 to 1 +move 23 from 4 to 6 +move 3 from 1 to 6 +move 13 from 8 to 3 +move 25 from 6 to 2 +move 1 from 9 to 5 +move 5 from 3 to 8 +move 17 from 2 to 8 +move 4 from 4 to 1 +move 1 from 9 to 7 +move 5 from 2 to 6 +move 2 from 2 to 4 +move 1 from 9 to 4 +move 6 from 3 to 9 +move 16 from 8 to 3 +move 2 from 1 to 8 +move 1 from 7 to 4 +move 5 from 4 to 7 +move 1 from 5 to 3 +move 2 from 7 to 1 +move 9 from 8 to 4 +move 3 from 7 to 2 +move 2 from 8 to 3 +move 10 from 4 to 1 +move 1 from 2 to 3 +move 5 from 3 to 7 +move 2 from 8 to 9 +move 2 from 9 to 8 +move 1 from 2 to 1 +move 3 from 9 to 6 +move 2 from 2 to 8 +move 4 from 7 to 3 +move 4 from 8 to 6 +move 1 from 7 to 1 +move 1 from 4 to 8 +move 4 from 3 to 4 +move 4 from 4 to 2 +move 6 from 1 to 2 +move 1 from 4 to 3 +move 5 from 3 to 8 +move 6 from 3 to 8 +move 2 from 2 to 8 +move 3 from 2 to 9 +move 8 from 1 to 6 +move 3 from 2 to 7 +move 2 from 7 to 2 +move 13 from 6 to 5 +move 7 from 5 to 9 +move 3 from 2 to 7 +move 1 from 2 to 9 +move 2 from 5 to 2 +move 3 from 8 to 5 +move 5 from 3 to 4 +move 2 from 2 to 1 +move 9 from 8 to 7 +move 1 from 1 to 8 +move 6 from 5 to 2 +move 4 from 2 to 8 +move 4 from 7 to 1 +move 1 from 2 to 6 +move 5 from 1 to 6 +move 1 from 8 to 2 +move 1 from 2 to 9 +move 13 from 6 to 5 +move 2 from 7 to 2 +move 1 from 8 to 7 +move 4 from 4 to 7 +move 1 from 4 to 1 +move 4 from 8 to 4 +move 6 from 5 to 9 +move 2 from 1 to 4 +move 1 from 8 to 6 +move 11 from 9 to 5 +move 1 from 7 to 8 +move 1 from 8 to 1 +move 1 from 1 to 3 +move 6 from 4 to 8 +move 1 from 8 to 4 +move 1 from 1 to 6 +move 6 from 9 to 7 +move 1 from 4 to 5 +move 3 from 2 to 1 +move 1 from 8 to 2 +move 1 from 3 to 2 +move 20 from 5 to 6 +move 3 from 1 to 6 +move 2 from 2 to 9 +move 3 from 8 to 3 +move 5 from 3 to 8 +move 1 from 1 to 6 +move 2 from 8 to 9 +move 7 from 9 to 5 +move 3 from 5 to 4 +move 3 from 8 to 3 +move 9 from 7 to 9 +move 1 from 8 to 5 +move 7 from 7 to 9 +move 2 from 5 to 2 +move 9 from 9 to 2 +move 1 from 7 to 3 +move 2 from 9 to 1 +move 2 from 5 to 9 +move 2 from 1 to 4 +move 2 from 3 to 7 +move 18 from 6 to 7 +move 7 from 9 to 1 +move 7 from 6 to 8 +move 4 from 4 to 9 +move 4 from 8 to 3 +move 2 from 8 to 2 +move 1 from 8 to 5 +move 1 from 4 to 7 +move 1 from 5 to 1 +move 2 from 9 to 3 +move 12 from 2 to 5 +move 6 from 5 to 6 +move 5 from 7 to 2 +move 3 from 6 to 4 +move 1 from 4 to 7 +move 1 from 4 to 1 +move 2 from 5 to 8 +move 1 from 8 to 2 +move 2 from 9 to 7 +move 8 from 1 to 8 +move 11 from 7 to 1 +move 5 from 8 to 2 +move 7 from 7 to 5 +move 1 from 9 to 4 +move 1 from 7 to 5 +move 7 from 5 to 7 +move 2 from 6 to 1 +move 1 from 8 to 2 +move 12 from 1 to 7 +move 2 from 1 to 2 +move 3 from 8 to 5 +move 3 from 5 to 2 +move 8 from 7 to 3 +move 1 from 3 to 1 +move 3 from 6 to 4 +move 4 from 5 to 6 +move 14 from 2 to 9 +move 3 from 6 to 9 +move 3 from 4 to 2 +move 1 from 1 to 7 +move 1 from 7 to 1 +move 3 from 3 to 5 +move 8 from 7 to 4 +move 1 from 5 to 9 +move 3 from 2 to 4 +move 1 from 3 to 4 +move 4 from 2 to 6 +move 2 from 6 to 7 +move 3 from 5 to 4 +move 16 from 4 to 1 +move 7 from 9 to 8 +move 1 from 5 to 1 +move 3 from 7 to 9 +move 3 from 9 to 4 +move 7 from 1 to 7 +move 6 from 7 to 1 +move 5 from 3 to 1 +move 11 from 9 to 2 +move 3 from 4 to 6 +move 9 from 2 to 8 +move 6 from 3 to 5 +move 2 from 8 to 6 +move 5 from 5 to 3 +move 2 from 7 to 1 +move 3 from 3 to 9 +move 1 from 2 to 4 +move 1 from 5 to 1 +move 13 from 1 to 2 +move 5 from 8 to 6 +move 2 from 3 to 9 +move 2 from 4 to 7 +move 5 from 6 to 9 +move 7 from 9 to 1 +move 3 from 7 to 2 +move 6 from 8 to 6 +move 5 from 6 to 2 +move 2 from 8 to 3 +move 2 from 9 to 4 +move 6 from 2 to 5 +move 1 from 3 to 7 diff --git a/AoCTiles/README.md b/AoCTiles/README.md index fc7021e..9f858fa 100644 --- a/AoCTiles/README.md +++ b/AoCTiles/README.md @@ -31,9 +31,8 @@ pip install -r requirements.txt ### Configuration To use this script, you need to have a file named "session.cookie" in the same folder as this script. -It should contain a single line, the "session" cookie -when logged in to https://adventofcode.com. Just -paste it in there. +It should contain a single line, the "session" cookie without any prefix (just the string of the cookie). +when logged in to https://adventofcode.com. Just paste it in there. Now add `` and `` in your README, everything between these 2 tags will always be replaced by the script, so do not add additional information there. Note that these are HTML comments, diff --git a/AoCTiles/examples/outline.png b/AoCTiles/examples/outline.png new file mode 100644 index 0000000000000000000000000000000000000000..795f4590456262500820033ac585da03e9db297b GIT binary patch literal 13416 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 Ef0pIJQUCw| literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 6bc736a..a4960e3 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- 2022 - 8 ⭐ + 2022 - 10 ⭐

@@ -18,6 +18,9 @@ + + +

2021 - 50 ⭐

From 160541012bcd9fb36eb02243a61abb6dad8410d4 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Mon, 5 Dec 2022 19:50:18 +0100 Subject: [PATCH 011/225] Add day 5 --- .gitignore | 1 + 2022/05/05.kt | 38 ++++++++++++++++++++++++++++++++++++++ Media/2022/05.png | Bin 9519 -> 9416 bytes README.md | 2 +- 4 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 2022/05/05.kt diff --git a/.gitignore b/.gitignore index 2842530..70204b3 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ session.cookie AoCTiles/.aoc_tiles_cache *.class META-INF +*.jar diff --git a/2022/05/05.kt b/2022/05/05.kt new file mode 100644 index 0000000..a047d30 --- /dev/null +++ b/2022/05/05.kt @@ -0,0 +1,38 @@ +fun solve(input: String, moveTogether: Boolean) { + val (raw_towers, moves) = input.split("\n\n") + val towers = raw_towers.split("\n").dropLast(1).asReversed() + val stacks: MutableList> = mutableListOf() + + for (j in 1 until towers[0].length step 4) { + stacks.add(mutableListOf()) + for (i in 0 until towers.size) + if (towers[i][j] != ' ') + stacks.last().add(towers[i][j]) + } + val nums = moves + .split("\n") + .map {it.filter {!it.isLetter()}} + .map { it.split(" ")} + .map { it.map {it.trim().toInt()}} + + for ((num, from, to) in nums) { + if (!moveTogether) + for (i in 1..num) + stacks[to-1].add(stacks[from-1].removeLast()) + else { + val tmp: MutableList = mutableListOf() + for (i in 1..num) + tmp.add(stacks[from-1].removeLast()) + for (i in 1..num) + stacks[to-1].add(tmp.removeLast()) + + } + } + println(stacks.map { it.last() }.joinToString("")) +} + +fun main() { + val input = generateSequence(::readlnOrNull).joinToString("\n") + solve(input, false) + solve(input, true) +} diff --git a/Media/2022/05.png b/Media/2022/05.png index f512865e9081c9eea5743dc974ce98218e87765e..809bb8e26d057620cf893624f9e10f7b4edcfea8 100644 GIT binary patch literal 9416 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 Ef0pIJQUCw| diff --git a/README.md b/README.md index a4960e3..22c0040 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ - +

From 170f68e164ec1c63ef25421c1d9bafb75409e507 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Tue, 6 Dec 2022 01:33:08 +0100 Subject: [PATCH 012/225] Don't re-generate images of days that were already fully completed Only days that didn't exist before or were only partially completed before need to be generated again. --- AoCTiles/create_aoc_tiles.py | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/AoCTiles/create_aoc_tiles.py b/AoCTiles/create_aoc_tiles.py index 8ccdabc..8d651bb 100644 --- a/AoCTiles/create_aoc_tiles.py +++ b/AoCTiles/create_aoc_tiles.py @@ -23,6 +23,7 @@ from functools import cache from pathlib import Path import re +import json from typing import Literal import requests @@ -313,7 +314,7 @@ def draw_star(drawer: ImageDraw, at: tuple[int, int], size=9, color="#ffff0022", drawer.polygon(points, fill=color) -def generate_day_tile_image(day: str, year: str, languages: list[str], day_scores: DayScores | None) -> Path: +def generate_day_tile_image(day: str, year: str, languages: list[str], day_scores: DayScores | None, path: Path): """Saves a graphic for a given day and year. Returns the path to it.""" image = get_alternating_background(languages, not (day_scores is None or day_scores.time2 is None)) drawer = ImageDraw(image) @@ -366,13 +367,10 @@ def generate_day_tile_image(day: str, year: str, languages: list[str], day_score drawer.line((100, 5, 100, 95), fill=font_color, width=1) drawer.line((105, 50, 195, 50), fill=font_color, width=1) - path = IMAGE_DIR / f"{year}/{day}.png" - path.parent.mkdir(parents=True, exist_ok=True) image.save(path) - return path -def handle_day(day: int, year: int, solutions: list[str], html: HTML, day_scores: DayScores | None): +def handle_day(day: int, year: int, solutions: list[str], html: HTML, day_scores: DayScores | None, previously_completed: bool): languages = [] for solution in solutions: extension = "." + solution.split(".")[-1] @@ -382,7 +380,10 @@ def handle_day(day: int, year: int, solutions: list[str], html: HTML, day_scores if DEBUG: if day == 25: languages = [] - day_graphic_path = generate_day_tile_image(f"{day:02}", f"{year:04}", languages, day_scores) + day_graphic_path = IMAGE_DIR / f"{year:04}/{day:02}.png" + day_graphic_path.parent.mkdir(parents=True, exist_ok=True) + if not (previously_completed and day_graphic_path.exists()): + generate_day_tile_image(f"{day:02}", f"{year:04}", languages, day_scores, day_graphic_path) day_graphic_path = day_graphic_path.relative_to(AOC_DIR) with html.tag("a", href=str(solution_link)): html.tag("img", closing=False, src=str(day_graphic_path), width=TILE_WIDTH_PX) @@ -412,8 +413,18 @@ def handle_year(year: int, day_to_solutions: dict[int, list[str]]): html.push(f"{year} - {stars} ⭐") max_day = 25 if CREATE_ALL_DAYS else max(*day_to_solutions, *leaderboard) fill_empty_days_in_dict(day_to_solutions, max_day) + + completed_days = list() + completed_cache_path = CACHE_DIR / f"completed-{year}.json" + if completed_cache_path.exists(): + with open(completed_cache_path, "r") as file: + completed_days = json.load(file) + for day, solutions in sorted(day_to_solutions.items()): - handle_day(day, year, solutions, html, leaderboard.get(day, None)) + handle_day(day, year, solutions, html, leaderboard.get(day, None), day in completed_days) + + with open(completed_cache_path, "w") as file: + file.write(json.dumps([day for day, scores in leaderboard.items() if scores.time2 is not None])) with open(README_PATH, "r") as file: text = file.read() From 79fd5c29d8231cdfb5d31ae26cc3152e5971eaee Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Tue, 6 Dec 2022 02:04:44 +0100 Subject: [PATCH 013/225] Also re-generate images when new solutions were added --- AoCTiles/create_aoc_tiles.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/AoCTiles/create_aoc_tiles.py b/AoCTiles/create_aoc_tiles.py index 8d651bb..970d65c 100644 --- a/AoCTiles/create_aoc_tiles.py +++ b/AoCTiles/create_aoc_tiles.py @@ -370,7 +370,7 @@ def generate_day_tile_image(day: str, year: str, languages: list[str], day_score image.save(path) -def handle_day(day: int, year: int, solutions: list[str], html: HTML, day_scores: DayScores | None, previously_completed: bool): +def handle_day(day: int, year: int, solutions: list[str], html: HTML, day_scores: DayScores | None, needs_update: bool): languages = [] for solution in solutions: extension = "." + solution.split(".")[-1] @@ -382,7 +382,7 @@ def handle_day(day: int, year: int, solutions: list[str], html: HTML, day_scores languages = [] day_graphic_path = IMAGE_DIR / f"{year:04}/{day:02}.png" day_graphic_path.parent.mkdir(parents=True, exist_ok=True) - if not (previously_completed and day_graphic_path.exists()): + if not day_graphic_path.exists() or needs_update: generate_day_tile_image(f"{day:02}", f"{year:04}", languages, day_scores, day_graphic_path) day_graphic_path = day_graphic_path.relative_to(AOC_DIR) with html.tag("a", href=str(solution_link)): @@ -414,17 +414,18 @@ def handle_year(year: int, day_to_solutions: dict[int, list[str]]): max_day = 25 if CREATE_ALL_DAYS else max(*day_to_solutions, *leaderboard) fill_empty_days_in_dict(day_to_solutions, max_day) - completed_days = list() + completed_solutions = dict() completed_cache_path = CACHE_DIR / f"completed-{year}.json" if completed_cache_path.exists(): with open(completed_cache_path, "r") as file: - completed_days = json.load(file) + completed_solutions = {int(day): solutions for day, solutions in json.load(file).items()} for day, solutions in sorted(day_to_solutions.items()): - handle_day(day, year, solutions, html, leaderboard.get(day, None), day in completed_days) + handle_day(day, year, solutions, html, leaderboard.get(day), completed_solutions.get(day) != solutions) with open(completed_cache_path, "w") as file: - file.write(json.dumps([day for day, scores in leaderboard.items() if scores.time2 is not None])) + completed_days = [day for day, scores in leaderboard.items() if scores.time2 is not None] + file.write(json.dumps({day: solutions for day, solutions in day_to_solutions.items() if day in completed_days})) with open(README_PATH, "r") as file: text = file.read() From d301e1acc7bd06b07770756183978098dadfb1cf Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Tue, 6 Dec 2022 06:20:44 +0100 Subject: [PATCH 014/225] Add day 6 --- 2022/06/06.kt | 7 +++++++ 2022/06/06.py | 8 ++++++++ 2022/06/input.ans | 2 ++ 2022/06/input.in | 1 + Media/2022/06.png | Bin 0 -> 10628 bytes README.md | 5 ++++- 6 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 2022/06/06.kt create mode 100644 2022/06/06.py create mode 100644 2022/06/input.ans create mode 100644 2022/06/input.in create mode 100644 Media/2022/06.png diff --git a/2022/06/06.kt b/2022/06/06.kt new file mode 100644 index 0000000..83ff839 --- /dev/null +++ b/2022/06/06.kt @@ -0,0 +1,7 @@ +fun String.solve(n: Int) = n + this.windowed(n).indexOfFirst { it.toSet().size == it.length } + +fun main() { + val s = readln() + println(s.solve(4)) + println(s.solve(14)) +} diff --git a/2022/06/06.py b/2022/06/06.py new file mode 100644 index 0000000..16c3faf --- /dev/null +++ b/2022/06/06.py @@ -0,0 +1,8 @@ +s = input() +def solve(n): + for i in range(len(s)): + if len(set(s[i:i+n])) == n: + return i+n + +print(solve(4)) +print(solve(14)) diff --git a/2022/06/input.ans b/2022/06/input.ans new file mode 100644 index 0000000..78223cb --- /dev/null +++ b/2022/06/input.ans @@ -0,0 +1,2 @@ +1794 +2851 diff --git a/2022/06/input.in b/2022/06/input.in new file mode 100644 index 0000000..30c985a --- /dev/null +++ b/2022/06/input.in @@ -0,0 +1 @@ +bgdbdsbsbsttldddzzwnzzmpzmmzmqqcgglrglgbbbtmtddrssjtjqqtrtqtqppcvcddswdwbwlblfljfljlhhpchcfcgfcfwfllfccjlcjllbvbgglccznzrnzzvfzvffvzvccnwnnrtrqtttzmmndnqnvvlwvvgcclplccbggcscqscqcnndwdlwlvlffdssrzrtttbvvqttfdfrddhthbblnlmlmqmhhpvpcpwpccmdddbcbcgctggsstwwbcwwqllchlcccfwccvjcjhhvggnvvcssjwjhhdvdhdcdhdqhhwrwcrwcrrjzjccqhhvnnrppsqqplqqcvczzlpprlrqqvpvwwstwwzqqsnqqsrqrlqlggzztzhhvbbcncwnwhwbbqpbqpqdqsqjqrjrddpjpwwvlwlnwwmpwwnmmzgzqqdcdnnqllghhzwhwwggljjwswgwffsbffbggzfzcfzczpptrrnwrrcqqcwqqdttzqzjzqqltlggwlglgwgrgfgnffgqffnlntlnlccjwjfjnfjnffqvfqfcfsslwswfwvfwfvflfhhntngnhggqbbsggchghfggcmgmsggshsmmqffjpjnngwwftwffgqqvmqqslqslqqdzqzhzbhhdzhhllnzzlmzzltlwwsmswwtswtssvqsqhssfdsdtdjdqqqrffqjffrzrppjpgjjpgpmmzbbrcbbprbpbnpbpcpsspqqfggclcpczzngznzvzlvvcwvwcwdwcddhdbdwdhwhllpjllrmmhbmbgmgmpmhpmpqmpprggvsgvsvbsbbqbmmjdjfddsnnqpnnphppsbpsbpsprpjjqhhvrhvvdhdjhdhwdhhdjjrlrbbzhbbjljhllttrccbdbffznnfmnfnvfvrvbblmltlmmlbmmdqmqnmqqmmhchvcvpccnrccqhccshchshzshschcffpwwbdbqbbjhbhmbhmmzzzcscddbsbnnpzpfzzrfrlrmmzzhshbbtjtbtzbbddrwwhchvhtvvmhvmmwssqqzrzdrdqqntnjnrjrbbgqgzgbzgbzgbzgbbqtbbbqjjgvglvlzlqlbbjwjddjtjbjffcsfsnsnpspgpnnglnngrgqgbqgqtgtfggczzmbbvqqrssdqssgrssdzzvjvccbbgcgppgwwtmwwrnwnfwwnnzmzvvvmnnvdddrmrbrtbrbrvrqqcbbgjgfjfcfttgrrjmrmrttbnnsrnsnzsnzztmtgtjgjljdjtjrtrddtbtjbtjbtthhtmmllngnhgnnhthssgffljlnjllfvlvslvsvwvcvfccgqqtsqtqggbjbtjjtjvjtvtvddttqzqczzcvvdtvthvvfrfmrrclrlflbbhhcllfbbcwwgmwmnmpmgpptnpnjpnjjbqjqjddfdfjjpzzjnnvzzwtwpwfppzhphbbmsbmsbmbqqfpfsscttfrtrzzrznrrrbgbdbtdbdjjsmjmttlbtthbttrprpjppsbsjbjcbclchlhhlttntznnzfnfgnncsncnmmdndnlnclnndqnqssbsjbbrzrtzztszzvnznqqpnpbpnpvnpnhpphvpvfvhhrvhrrpttctjcjvcvzcvcscttqptpffscfsccqhchhdcdczcnzcncnhccfrrbprpbpqppdccjhjvjmjpjmpjjvfvrrwppgjgjjdgdmgdggcpccbrrgssbsjbsjsfscfcvvcrvcrcttbtffpqphpchclccwhcwcbwccbzzlvzvffbrbrbjbwjjqvgtcfnhtjvrcwbfjdbvgtqbvmbtscwzrwdfmwtjvswgrvncmftgmppvlcwjpnpffggrmvgtfqgqmhbhpslfwdfvfmbfndrmgfhdbbtdgvnslzpdfvdttqjpcnbzsjcvrprgrhpglwfwtdcbgdsjhnqjntjnsjcgwccjnvvngfpvqwvnclcsvhmwsrccvbjnnrjspwqdvjpfnfvbsslngzpdgjrcsnqfvdlsqdhdllcndshglztgrrjnptqfvllshmhbgdszvmvqdntpgzdvhstgrppwpdtdqvzsfgqfrgmmjqcsjhvrlmnjvfjghlvwbnqcggpqtrjztfzshnqpzznvlqcmnzvrwqlcbnbpwmljpvdzhbvbgtdjlzflsvzlcqdnsgzfjlccvjclqlzdhqzzrscttjmrvjvcqzvtzqlmsssnfcfmvcgmqjjwdnhtvlqrgdvlbbrffmrpnfsmwwwbnwclrgbfnzlbqvjfqjlfvfnfrhdqstddwnwrmsdnvzwfjfgpwcrfqqzbdwwtzprvqtgvtzbttlhcdczlhvlgrbptztswftvnjmgrnbwpfwnztvqmqbznvnllgjmqrwprvwtnptlbfwbblzsblptwpdwgcvwsbmbrtqfvjsbzfvsfvpwfwbnnfcsddhsnwnvvqthjdgvzgjprtqmvhdqjqhgqppqqcpzfcwzcmrslftgrvbvdsdgfzfmvvcqzcszfwdvghdnlwwpddzdsqsdqvvrwhphbqvcbjbtnqgnqqdsqcmrllhmdvpffnqmrgfddjbrjwflshzswvjtmqgqmzvcnlctvdpjhzzlgpzgprjncrscnlmdhvdqpfllsqgstmssvlzmrtjmgwppfqjsrfmlnszdnhngzhtbbnsnvmtzpfsdcsvsvvjnfnzhrzmvlhrbslrsbgwwcvrzpgcnmjqnvgmzmlvpccrmggtzzhsdtbbcdnpdlnbztgjhttmqdhjphcrbgjtctqmgbfmflgqztztcjqvgsscrmwfbvnrnbgbjgqmwdzhwwnddwgrprhvlgftcbnwjqmcgczpbhfqcqzdbdwhmzfmgvcjdsfzdbrzjjvfrvftdblnlhpbqvdprnsjdpznbbgqpgnnjmcnsbszfwblthtwlwrdphjltclmqnbpcgngdnfpltttsrvdmhrcvlqfplqmqvslwgcbrwrmchscczrfgspwjtdqtlbddbsclrlbmhdzqdrgjfsgldfjmgcglbgjhmghntndqcbgqwmdvczbwgcctzvcrsqqctwwddfhhfhwlsrsljpnrlqtbdzprjbfrjgztwbpnfqnlftzcgrpmpcnljhscfbsqzbsgwqcgbvctnhswhrsmwjgcccdsnbscwllmpstpnrccjspnjqmtgcsgbjzpfvzjrhlvnfblqmcmgcrvnpchwhlsqsbhzhsgdvwmdcwphwccvzmmqqjrvqwphbnmddzcmggmbsqrhbcqmdlgvccbhhmhwdjhhhcwnffthmgfhpltqbhnvdqfrzjdvlppqhzfdgbzbrtfllsbvjjcgbwsbcmfrbjtvzqsntzdzprnpmfpfpgmfprlbcdqbdzjsfjbtczdpdnhlwdhmwsjtvmztbhdbbdgvrtbqsqbsnwjjhlslzcblrwlfpzqlvdvmgqhrpjmbjbntmjsjvgsmdsnctlgtnlqgfvhwqbjbrczpfzmzwgvrphfmnnhrlzwzgthzqnzzmptppzdszlcpjjvbpjbtjfrqtbnpnwsdglbbjftvngcghjlnsqwspmmfdpslsmqtpngbtvvrvbqqdsphfhvsnmhprfclnjmfrtqnlqcbmfrggbstwdbwsvtpvflvfgqltmqjpnfclbwtlwhmqrmzcrbztstgpjrdsnwpqrcnvvnnnszlrtpqjtsnbjrdcthrzrtccgcvnnlzfjlcdnzzqclvtncjbznrlpnzhvcwmrfrzpcldfmfzfpchlmddgvcfdqdhzzdtwhsfcvsthtmqgvhzdpjcgwsmrvwsnqmhdnfqdrrnmjwcpjjftfdhvwrwwtvptzfrmgffdcrhvcmccfqctswzzmlsjvdjzgjgndhmmrwvwmmtrnpgsnmtcqdbdpqjmcddcrbcfmmccnvsfhwtvfhsjfmlfttspfghpfggrffnrwjggqwggrmpzscprvdzmzhwjjcsmpsltzwgchttwpngrlptprqnjzzpbpbcvrclggtqwlcwdpjpnjrhtgqwsvhsswwqtlnglnqnvffrgmlbzthvnhrzvsvclgdmmjzrpfv diff --git a/Media/2022/06.png b/Media/2022/06.png new file mode 100644 index 0000000000000000000000000000000000000000..703590acedb4719c15f71bdde201ccc2c45bba3a GIT binary patch literal 10628 zcmV-~DSOt5P)bc1bd3^vBN_uggMk|nErKUPSq)k<0!12$itKek4*`|QlTnw@#)Evz42*I}SY zRiq90+Ks}L-+Aw0UiMvK{r}d>{||WwC|JX^wZHS;G2Vd)*6?lZ@4R=6mrE|4`Urd@ zP3mdYP{<%{K}{a&u0yLC-mU$e_m1&$t<(d+=0YTaNCLk|bT#3b?T4Tk1Xg=7M0)ws zM=41!8B3NVhW%~rM9L+~eoePRRn;tYto5nBik=Rd+d6q7ZV9|c06=j%@{ZczwF^U} zpDhZOP794194=Tl-SewI$J0UR=`2JzqGzBi3wcMO z)c}B37@WP}8v);NfHlax1cpvOTNJG3a-7=+78^bzk+ceYM*wgU@!v|B^vBJ=-6AV< z498wJfW=1mBsjX_!cG84UJIV%ZR8zN{cPh^sMDgc1RoyEeB%NAoF5zJ6&2uCRM!DO zA{IP8XY}+j0d8VJWwUhav1Z|Jp5I4Zb5LtcFjxu{?O3ZNajO z_kpRAixWZvJe-Q_JGP&?kz754{Oz>I;4{*sepe%oZ?>D)k?*kcrG@_P;)yTs(rS&0 z^q3Hjlxb0;0^Phs;_fz-Uqa<&>a{imi(u{7Xxn58FBknh?kf?oSa|QzDF&$mpw;Qv zEY`|oV}l%70_!)o$vZII^*5kWj)IdWg5~4^02x1^Ux|sUA$Gqd-ajuImok0Se~#pp zG;~fI9q{p!GctCguFzP4Cq!d0N;8cmY9;-xtn>cQ{fT@B4y7<*r1z(Pn0YX}qWXlm z8t{uk;tKGDC{8!2W=*ijtO5sPO|?dwFw$qFudAWtll{3rUMLCkaoP0bbc6g27{gks z2(V4{gKQ1}G?xQ_MsrKNZcc)f>7zc}n|&aw9Kf{NS(O6B%thS|;O3md6QZdEO{F$& zWu13^T*#DYzb!}eH?Bw^m*~NPY5S> zjGO?GD>8OdpVNk5aoDWc>cDSUUad-P+|o33^gR0U(Z^?xo*5J9?JVl;LRltyJK-5ZeOyI1PHx4x1@H<5SZJ?B z-ciIYHCCu-l3H)DB@8vG+Vd85O=*sHt<(iBHY!=>?PY6(myP57Emne0|0yHyP4iDcc0#s^EaeXJ{h8vc~E=dgguxtM8H2b7w3qjU-~BEkKBe5vN#N!rsBM#3xt7x28)u-B zBQze-Gtk+9^WW=LuLLfnVMGE#;}IGM0M{E@Hho=q;YNe$Ev@YeE%6e_`U%ak@QXss zT<{$sYe(*{sK}vKW2DDo&T1W6EmU%F`RM3X(Xqu zU~Lqp@Pr5&i=eUa2%@)y@+))_^7cHQlC<)cq{;w^ znE%d0$#175JMtZDR%X)LfN0G9^Q}r18Sx{$zy8a-39G>u4dn9wa`qg4bA`Ey9249d zQUxZ0KHFeYSAVNEK|p3PZe|xBY2}&}qQD))4IFy!F|+>%Tl%*G^-W#-z2e zixEEQHar;sprf98OhJo~SfjW5a?}1?HVdmKM{HR?_mNFUDx39MpFj_%|E!ik7$$-g_>V{`1i(Pknk^tJA%@ zD(Pr$)ttsT)SEH}?VBjr%Q?`)DZQ|s_{ih3_q?_&y|Dg+J=sLb`|G9#xQh$^D>0Zz zkj*6kh}_UiI>w&14nh|k`&9pN+yXd{?p^)HO}yqHK8i;anEz_Godyd~It z4;oP0*T&=8u>mY=>;mwQA2Q!eyV!d$q^-vOhXY{eYJF6Io55@*VWc;px0YseEcYY} zJV&?(V!|qjTygb~k+)6ON7;1|ib=9y(X6rl$2lc-fF?t?gb(kZbK(o5-H#=VOtM=A zs?(vMy6sFsZFP&RU8c}zb*>`5o0DL4kbB}tpAc_nN_|bgiJP7kq$<*uWQ2Y7?A)rB z?!6hMd6lg;FKO#me17Qami2So6dnLFcH6cMq~&E^d0~8rvm@`=O~v6d?*xSuPVN}D z2%f>8h{r`+Nf)+jlz`Z znHV$MzIJNVsJeo8Gmh7`$+TKssJHX-2_qNAhj2Oe#ox+3XtZCW1y6`YFEY{s7*J5% z_TJCgmbPgdg()HlMkXON-l(Ok$v3(lkU?2v4YeIUEqo-Roi8oin^Cs;&{cvr;XVY8 zfwC9*$I(&&E*~*-5HK3YJ~J^7bl}6;OK;Wg6OK!J@O+Much%(Zr{~2;!~(gpKclGe zyOYfoh{cYn;%TDT)Iy1kvqJBEUj7&#HqGvFX#^d1}*QY8@! zKKsMW>ox6Lj^-P972VKkadIn^y#Sz6AbTJDqTnBG;&e(_wG)QzW9K9GeznUDzQM!d z=L@AjUnq4E@nv$AR;L>q;sKz6>;pk*ZO}OT)Xn{UIQ_MWR2h(8)%NU`Q--}B6Nud4 zH_GC-Y!1Q_EPiW_vjufFrOE(}8pY{2ya~nWXtHSfrpGNx)%?E<@LIcgT}1rN&&*P& z)UR$kuhwV{?d@p?PhjF^sMVma$LOMGj*s$A2zgwx?>hl$uafBAybanXv-fpni+T!}o&A(o?>xNbyATY)bq3`YMfB)x845i8drQ8_K$`XdfT;=I3 z+`4{_vR||QKd0nMwTb6eG5VDlkz}mw=mL=hoi~k4eIwxFWx_i?)Du8$tI^C=z%#z< zyj&dDOpW~hR3Ukv$OYNH$`!7@%pV>d_1KVQqqV!!i`Ptz@N*MeuV#Q}2zZVr?qUXn z#nTj8!nY@{x69~#H14I76Iuj%IDP)dSvu%a_g#+gm#h`&m(1NQP{`2Vhy3G+TLLZ* zO(o!q5i=LkW~1hvY}LL?diwc@xCf?2?$0W3xoJ~0Da!Y)2PbViRaoBG73}5w#GEnp z?L9xHn|S4N$*uJ>4M1uWADlREvyN7)`~FnntE-Z1)+E4U!#4ueSE=O=0=+i~6R0&> zB4&m;Ze?`Mv0-U!R&nF1$q`OM-X{lgi|RU_o*xtD?c(n){w=TO`%{H3BK~Wul3Jwl zIl+)@t)Jv&iLy+cbcRY$&9NnudsEs1#@@ zLcvMnJZ-RQ51!Neo@h!&A&D(Xh2tcI2M0P0f)G^F>0s^sK?<#ac(n@6iGWb#j z;D5f;|KP2(x3R>Un87W8rjQ(N$|h(f{x-ddzCV4#AXNY+MfnDMIV+TE9+%_o>L}~$=XQyS z{g2p;n@|3*F6Vt3gAN#WNi1y-W^u=jGx! zcYN>*U!UP}*po;30az~}ooL>y$mSsD0K^i+FGZGRYwh7HRUiwNz3Oa=nS^y1&efTK z#e%b^agzc7EC@W*4DDTI3RU&ZXLAwpADSMucEV`$-wcNh4i|h8-24#|2b~TLMYwSW z9j23=UA^4eEtkrb?>;hF+NwikHOhvbUP|DHUf!+@Igd-%D-j!-tOBKjNWe7FP z5VudT0F&J>fF1n(Yk12UUR&PSrPG1M!m8wm^^3;ns7iEt0Xxo!A+^ROS?yU1(YXxZg>qtox_6P+C|Ksv ze67HNnNo_(%C^VQfszeM#B7~Jz^-F&D;N{(v2ONgyDk}Oqk9*5NkO(PgaW69fX8LC zSe8!W%vsqSJJg#1j>t?xUf64XGgw$RD|&xsnWdwlOCJrU5}#K4dIvCwykwgqqhR&h zBUk`L0tYK04=A!Mu+z_{*VI*-`I~oeA>?saO^zUJPRv1$Q8onUjJwNgoC#>peXW3O zhia46(azY2lmi)sk|x^tox!4bnlR`T4B64Wi@e4etJ}6!tqDSXTncO3&C6+7?e)v3 zGSz$a^w}p^S`At%&{T@f2FTh#XeoI@xOl-Yiar>)CHT6DLcLwA=;4O)=-x$MqhR%P zK&v)MTV);5fo_MgD=3AQSlxq|-WGsd+27n{GJjG&T1QtS&VHvik0hf{hCUgZ%Tag+ zlODJk35Nm31iM=jtRX(Scahg9M>;LK+w7QHrbPSyYp+R!KufGF7Bv}_b(jZHu4(Ni zl0Y%JT&JUvDl(M4IKLh9*6VX8*+h^hy=~>^lT(sbQVTWxQ1zj^1#Q)!WLV{k5I6?j zBjM@;j!3->Ynr>{>4o(_q?a_=lUsD?OBE>YUq?!cm|y8D5k&>KF=6!yx6j-;yNsH8 zMy1v^b};RFD<-xEX!`Al!0zcnV`guuy&MM!o!~tJqi12^^N3xn54-B>gQYJcZYlgn zK_r2I#})9n!CuY}%^0=wrG*w#$S~$*f;%}!8U-s=k!BtO)jA%UF^UQ6$O(4c6&L9q z<3=rAc4ayU#EkX|o2!o7t^@#Z z%$4dIt%;iBndk0Er(G?xWYLvpJZw7S41Du`EHS!w=_+X}@Zf$_r{}v>UW= z3qbIA`mc!gvRSMZ6Pa!(8tqwG<7S3cGMqe+sz}Q$ZhY^jONPbbk;^7w`#qg4I!sce zDrPRm%|}f>F7AS~8B-ocK(tAHu{-8H3-0T&lT5qzPc(gz@4cX=ggSEM`uPy z`b%tv4v1fB(L@vG93Je;jd3Fm3^+KaK?(?3OC6PG{-xgurik z)z*BogT_LmG4a)=WLS0aLO?XGpVCVe0a~fDl3~?mdqon&FT>R%=r=n@wHW8Upr-x6 zrE=ygEdneSyhq$pAkh6;;_pYG-^2TL7QRKD-1f| zmAu^mxEwZ@!|tP-3$5hRu_;w7HYTn{O9d(~BP7=3D;sg%KR~rDp+i|`D2h8j zkxe!#o24hNnh2Jq(G|MrojxpOSQWXUsjD~8)9Hm}apS|hcwA0JbJxfFb1#)Nk?&(E zmkyJ;dGt&;N^pJ$wVb?Or#DBD_A1}lae;Psb~~We>E76Rk=7HCfT6WIEpmS~E+%d_ z$}?C@!jM`*Z(si>`*SIF@c>?4nMl?xtJIpec4d%#>8y;dPOHzm-BAw(U53>{cA1lq z_pisN?aM4%{La4R@9r)J1*dNRGXXvA10fUeoXG>gew-E~%sLIt>|Cqpven;?&=u zhWEWOCiBg;6DPjBi?VRCZ6(7$IqIqcW9L(MI=2XoR=4$N{hLsvJhOc3(988;f-oP>W`G`6gC5B1X65B3i33aSc;D6Psx0=y_x3#cNd-7sgC}yE-khenx8*#xF8S z^mQv}sX*3GP%z&IG6t8!A}2v%vsmQyI{+DD+e1o*)eT>tqU`wgWtKH}$=A(}esEe; zw_JJddi~a;`4o3OVpsS;(&&n8lbgE*VEW_6kHO>hKi#5ppq%YkKYz3)Sme>|Y`}>x z5IF@AlkIkGB}1W7|8Tx|+o{4{%SNGgX(KCg&|Hq#C3eSPqM%*YS9wxUdD&W^%Ao^8 zhE+?Wd$Fj2qT?`!eDt}wUvgcZRuA6>Ny*H57|6H!wU8fSL` zBWbVl(B;bSPZf4paC))CYZJYlNZ$^LA9&O1rbhd-?Q{mLZ}0i}Vrk%&SbM!{?>dIE z4Jv(R3MRT&?-2-$fkzOW-09O{0?_GD-_es_)%x4jn#^L`VUKRTwXP!mv@roQV*;ZC z-6djcQ)_igcSdnzdSQJ|Y4eMM2boaNW~La*qk9*5X=W^j>zk%hG?fAXmk)_AgwAjf zAd_TM2LN(q zzf7U3ZR@FQmKxs0_weZ6Mcx70Mv|dcqP5CCR&(5r*0yyk+PZCoHoLb+_b&39Xx{Jn z*8a|W$9So6-tP=68TTHqM9jC6VfEf?FDn0rvp!vLvdhkd+Lp_dt6Y!X(bS zB?!b=_9`yzp$Td@yjpuZc$XxG9=Jpe{Y{&?=T5fQy4^aFAJr=qV4=Mh`NttM^@E@G zn9&uKh#EpU3UuJGAD%I4ablR4i?FFnemJLc=b0O19V~YcTPqegY<_0;>)X?5Q}I$T z9HokaNPo#gGe(8`N#0vG1;Brg7qm#_mNKkrOWnLiApaQJsu466VF}Qv(cNM(S|k|* zXz$FJK*EN?+-{x7k1B1(r9IH;5E6^If5O>sO-`|RLNpfRy|YIBDaC#3`Q>plVgmoQ zH>aYhD=NV4rTgMtMf^_=D8PJO+Hzr#BP{M)qt;^*dMFuhe`pB8f-3{J;4(o>3&RD1+IgQ{EWAwy%ImP z)tCfWEX{y>5XA1r5}i=hF0-bo;jmc((hQM2f`ojJMd{j4_i?OH8(aA92Nqcfx3oCHms@?*JG z+t1uE*m!Amy0mjee_SxOwoR5%)X3$qS4RS#$3lXJ&>^W40Z z|2(KtYcyKj59f=YnisSA@Ku98-BrY&67B!j?H6v5*XHQ%%_y^!VU?D*Plo*CnE8}G za*3r3tG91%uF1!ghY>Xm6*=H=;TMHb(}0^XFH#k095(CR^}5oAu8TztYK?YEwBKX1 z#{_#h|8>U&!%eBEjLp_s#{t#(WK8|!K(4`+rMSN1>%Yufk{C+(0{oI$_SC#FixWZ( zIj9!Ih4d&?=L_p^_Z#rn?22E_j`ttlbcEogB#dpX1c3TN)LYC$!<5$&Y__+d2)PF_ zdKSjcgIbBkQe4=Hx$B`;>3KC;-OJyeGt@7t>(FR)e_Awd%h7y;*XP=)kz+$VU-|BQ zq`zcYQkb8c_`RqH$%{oh)>udSGiSyG{^OC!`!dVOxuBR}P)4_yNK67bO*rA-t=Xq;yop%5j;_Jw=EbM;|zx)&X{(+3$dT-{hnl1X$ z6S;{Di7=NXjd*lc^wXc8ICHIb%hCMh?;hwW63uwRB)N$lf;D}#|GSS&zE<6~ATGp5 zVu#VpZR%y2qMvNPu={**fV(&;!WTfKza-pG;+{8fi|X4tx>ho*-braz$@Ru(J`teg zN2P!WhibC zvnRDy2eSyrw@IovY?hD2v4)iMv$3Q1^tIa6lfwZlP7G_SrYijgh1VvA_*_MR9B@JC zjG&4A-CZ+?NyHSbtPU71TTjR7Td%t+GLG2ZUI8#kaxsH z!=9>0BXTrsJ5@+T?0946h3zjcd}?mY)?+3f@hx3)0HI#aB{!eI-d-j@fO#*AN%<+3 zC5_;5ITVxJoo9=_es->}o9MpSNGmZ?tm7V#D(iOZKH-?K3OCL{+6*TTgiP zqb{E?B4MQW{!8W8D%<)s+68eTbH)dKxHsD{W9>d)ymkGY_t#BDR-jx8kp!b>LD`Gi z0^>6n1&hVP$O+&$AT-`6Smf3kvNF}Q$~OIS`L)$aIb}_`u{)G#1XDsOgX%%BiR1M}6hHb1No}T$(h3I0h|i=zQVpGvuIrMRgrde0uzY`HS3F zfiH$as`nKjN7f+4Al0GdB0}O|u&%e#+WlGOlSlcz^H6e1>fvs=(Uk9{Z_d7SU;OjS z;#>p*xfGSTmTo`;!vlPFfj)}kYunP-PK$ha#;A5#-#5P%P&8x&dNMpb9z;bp24H7A zu+b$ltgh#*AwHI6LD>ry3$vd=$prwA_~P;bD0?ktSRM2^(z@NcR)eB*C^~16SEs|? zj53PrJq7o5Ey}Rykpxg)h1X8t+6n#tWY!K@A30b)fmd$khb5!AOa97t=Lh^oxOM{T z4p{8vrmkM{HrN~+g(*ZZ*$T^1*DPVcqx=2o8wRNY;2Qxa52#h(aN+0zRUdjfVI{-r zJ@DqG1^wcEXtvh6j|9Oxej(ax(NQ;;ywyY))hNrTLAud%g*Srr$soE$^iJF3dF_1Rl?6+vQXS%vYUaHZHjwZ)5ZH85X*E|pn zL*4;gMc|H&FYAZbjSiZ_RH}aG9fG_jao+D3D;dA@-jlp0ao+D3s{z0B-mARqyTVG~ eciwxL_x}LH<~UcHvujcS0000

- 2022 - 10 ⭐ + 2022 - 12 ⭐

@@ -21,6 +21,9 @@ + + +

2021 - 50 ⭐

From 2dcae6527a60e58f0618bb9fee944b6df6970892 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Tue, 6 Dec 2022 07:19:26 +0100 Subject: [PATCH 015/225] Add better examples for customization --- AoCTiles/README.md | 27 ++++++++++++++---- AoCTiles/examples/01basic.png | Bin 0 -> 9511 bytes .../{checkmarks.png => 01checkmarks.png} | Bin AoCTiles/examples/05dark.png | Bin 0 -> 9423 bytes AoCTiles/examples/05none.png | Bin 0 -> 7491 bytes .../examples/{outline.png => 05outline.png} | Bin 6 files changed, 22 insertions(+), 5 deletions(-) create mode 100644 AoCTiles/examples/01basic.png rename AoCTiles/examples/{checkmarks.png => 01checkmarks.png} (100%) create mode 100644 AoCTiles/examples/05dark.png create mode 100644 AoCTiles/examples/05none.png rename AoCTiles/examples/{outline.png => 05outline.png} (100%) diff --git a/AoCTiles/README.md b/AoCTiles/README.md index 9f858fa..cdb1b0f 100644 --- a/AoCTiles/README.md +++ b/AoCTiles/README.md @@ -7,9 +7,6 @@ A tile is an image which represents both parts of a day, it looks like this: It uses the personal [AoC Leaderboard](https://adventofcode.com/2021/leaderboard/self) to get the data for each day using your cookie. -Set the `SHOW_CHECKMARK_INSTEAD_OF_TIME_RANK` flag to True to get this instead: - -![AoC Tiles Checkmark](examples/checkmarks.png) ## Installation @@ -31,8 +28,8 @@ pip install -r requirements.txt ### Configuration To use this script, you need to have a file named "session.cookie" in the same folder as this script. -It should contain a single line, the "session" cookie without any prefix (just the string of the cookie). -when logged in to https://adventofcode.com. Just paste it in there. +It should contain a single line, the "session" cookie from https://adventofcode.com when you are logged in. +No prefix is needed, only the string of length 128. Now add `` and `` in your README, everything between these 2 tags will always be replaced by the script, so do not add additional information there. Note that these are HTML comments, @@ -52,3 +49,23 @@ python3 create_aoc_tiles.py ### Pre-commit hook Add [.pre-commit-config.yaml](/.pre-commit-config.yaml) to your repository and run `pre-commit install` to install the hook. + + +## Customization + +There are various flags and variables which can be set to change the look of your tiles. Some of them are listed here +with examples showing how it changes the look. + +**Note that in order to regenerate images you have to either delete the images or delete the .aoc-tiles-cache!** + +* `SHOW_CHECKMARK_INSTEAD_OF_TIME_RANK`: + +| `False` (default) | `True` | +|---------------------------|--------------------------------| +| ![](examples/01basic.png) | ![](examples/01checkmarks.png) | + +* `CONTRAST_IMPROVEMENT_TYPE`: + +| `"outline"` (default) | `"dark"` | `"none"` | +|-----------------------------|--------------------------|--------------------------| +| ![](examples/05outline.png) | ![](examples/05dark.png) | ![](examples/05none.png) | diff --git a/AoCTiles/examples/01basic.png b/AoCTiles/examples/01basic.png new file mode 100644 index 0000000000000000000000000000000000000000..40244101cac965d232093b0da32d37efc209886c GIT binary patch literal 9511 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 D4k?KI literal 0 HcmV?d00001 diff --git a/AoCTiles/examples/05none.png b/AoCTiles/examples/05none.png new file mode 100644 index 0000000000000000000000000000000000000000..249c3fe52c4a3d0b87c0af7b5364782465d36610 GIT binary patch literal 7491 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 N002ovPDHLkV1j=YvLgTh literal 0 HcmV?d00001 diff --git a/AoCTiles/examples/outline.png b/AoCTiles/examples/05outline.png similarity index 100% rename from AoCTiles/examples/outline.png rename to AoCTiles/examples/05outline.png From 95492328dcd3fc05cc794628b26b893e7fd8c133 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Tue, 6 Dec 2022 20:56:15 +0100 Subject: [PATCH 016/225] Fix issue with paths on windows being saved with \ instead of / --- AoCTiles/create_aoc_tiles.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/AoCTiles/create_aoc_tiles.py b/AoCTiles/create_aoc_tiles.py index 970d65c..2667de3 100644 --- a/AoCTiles/create_aoc_tiles.py +++ b/AoCTiles/create_aoc_tiles.py @@ -103,7 +103,7 @@ def get_solution_paths_dict_for_years() -> dict[int, dict[int, list[str]]]: solutions = [solution.relative_to(AOC_DIR) for solution in solutions] - solution_paths_dict[year][day] = [str(s) for s in solutions] + solution_paths_dict[year][day] = [s.as_posix() for s in solutions] return solution_paths_dict @@ -214,6 +214,7 @@ def request_leaderboard(year: int) -> dict[int, DayScores]: return leaderboard with open(SESSION_COOKIE_PATH) as cookie_file: session_cookie = cookie_file.read().strip() + assert len(session_cookie) == 128, f"Session cookie is not 128 characters long, make sure to remove the prefix!" data = requests.get( PERSONAL_LEADERBOARD_URL.format(year=year), headers={"User-Agent": "https://github.com/LiquidFun/adventofcode by Brutenis Gliwa"}, @@ -386,7 +387,7 @@ def handle_day(day: int, year: int, solutions: list[str], html: HTML, day_scores generate_day_tile_image(f"{day:02}", f"{year:04}", languages, day_scores, day_graphic_path) day_graphic_path = day_graphic_path.relative_to(AOC_DIR) with html.tag("a", href=str(solution_link)): - html.tag("img", closing=False, src=str(day_graphic_path), width=TILE_WIDTH_PX) + html.tag("img", closing=False, src=day_graphic_path.as_posix(), width=TILE_WIDTH_PX) def find_first_number(string: str) -> int: @@ -427,14 +428,16 @@ def handle_year(year: int, day_to_solutions: dict[int, list[str]]): completed_days = [day for day, scores in leaderboard.items() if scores.time2 is not None] file.write(json.dumps({day: solutions for day, solutions in day_to_solutions.items() if day in completed_days})) - with open(README_PATH, "r") as file: + with open(README_PATH, "r", encoding="utf-8") as file: text = file.read() begin = "" end = "" + assert begin in text and end in text, f"Could not find AOC TILES markers '{begin}' and '{end}' in the " \ + f"README.md! Make sure to add them to the README at {README_PATH}." pattern = re.compile(rf"{begin}.*{end}", re.DOTALL | re.MULTILINE) new_text = pattern.sub(f"{begin}\n{html}\n{end}", text) - with open(README_PATH, "w") as file: + with open(README_PATH, "w", encoding="utf-8") as file: file.write(str(new_text)) From 85a1585bf43afeb8ffd6d75a9990b60f029bbd2a Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Wed, 7 Dec 2022 07:56:36 +0100 Subject: [PATCH 017/225] Add day 7 --- 2022/07/07.py | 40 ++ 2022/07/input.ans | 2 + 2022/07/input.in | 956 ++++++++++++++++++++++++++++++++++++++++++++++ Media/2022/07.png | Bin 0 -> 9917 bytes README.md | 5 +- 5 files changed, 1002 insertions(+), 1 deletion(-) create mode 100644 2022/07/07.py create mode 100644 2022/07/input.ans create mode 100644 2022/07/input.in create mode 100644 Media/2022/07.png diff --git a/2022/07/07.py b/2022/07/07.py new file mode 100644 index 0000000..2f1857f --- /dev/null +++ b/2022/07/07.py @@ -0,0 +1,40 @@ +import sys +from dataclasses import dataclass, field + +@dataclass +class Tree: + name: str + parent: "Tree" = None + size: int = 0 + children: dict = field(default_factory=dict) + +current = root = Tree("/") + +for line in sys.stdin.read().strip().split("\n"): + match line.split(): + case ["$", "cd", "/"]: + current = root + case ["$", "cd", ".."]: + current = current.parent or current + case ["$", "cd", name]: + current = current.children[name] + case ["$", "ls"]: + pass + case ["dir", name]: + current.children[name] = Tree(name, current) + case [num, name]: + current.size += int(num) + +sizes = [] +def rec_size(tree): + size = (tree.size or 0) + sum(map(rec_size, tree.children.values())) + sizes.append(size) + return size + +rec_size(root) + +print(sum(s for s in sizes if s <= 100000)) +needed = 30000000 - (70000000 - max(sizes)) +print(min([a for a in sorted(sizes) if a >= needed])) + + diff --git a/2022/07/input.ans b/2022/07/input.ans new file mode 100644 index 0000000..05a6269 --- /dev/null +++ b/2022/07/input.ans @@ -0,0 +1,2 @@ +1749646 +1498966 diff --git a/2022/07/input.in b/2022/07/input.in new file mode 100644 index 0000000..7b779d3 --- /dev/null +++ b/2022/07/input.in @@ -0,0 +1,956 @@ +$ cd / +$ ls +dir gqlg +dir hchrwstr +dir lswlpt +189381 mzsnhlf +dir plmdrbn +dir rjwmjd +dir stqq +93174 zfn +dir zjhqnlrr +dir zssdlnc +$ cd gqlg +$ ls +187654 cfrdsjf +100589 ntvmgbw +46922 zcmfcjhf.tzw +$ cd .. +$ cd hchrwstr +$ ls +227766 cljjlcp.pjh +102770 rdbrcf.pjl +9887 rfnjn.lqn +dir rzsrp +dir shlhgj +dir slwwgc +$ cd rzsrp +$ ls +dir rzsrp +$ cd rzsrp +$ ls +dir dvzvmsjz +208001 tnflwcsn +dir zfn +$ cd dvzvmsjz +$ ls +149823 hvgbhm.zsc +$ cd .. +$ cd zfn +$ ls +292424 gqlg.tzc +$ cd .. +$ cd .. +$ cd .. +$ cd shlhgj +$ ls +61753 fzpzwjdt.jvl +195204 jjhc.tzr +288094 zcmfcjhf.tzw +$ cd .. +$ cd slwwgc +$ ls +118185 jjhc.tzr +291916 jwnw.wqv +116377 ptlz +300849 pzjpw.hwg +28679 zfn.grz +$ cd .. +$ cd .. +$ cd lswlpt +$ ls +124160 dbnlt.rqz +154412 sfd +$ cd .. +$ cd plmdrbn +$ ls +dir fmzjhrq +224144 rlc.qns +2985 zcmfcjhf.tzw +$ cd fmzjhrq +$ ls +9749 lqj.szc +dir rrjjsvm +$ cd rrjjsvm +$ ls +66652 zcmfcjhf.tzw +$ cd .. +$ cd .. +$ cd .. +$ cd rjwmjd +$ ls +dir twcrf +125294 zpfws.ctc +dir zwmmrqj +$ cd twcrf +$ ls +229364 tnflwcsn +262716 zcmfcjhf.tzw +$ cd .. +$ cd zwmmrqj +$ ls +11466 gqlg.ftg +220272 lflcgss.jrm +79574 tnflwcsn +$ cd .. +$ cd .. +$ cd stqq +$ ls +185160 cwjqldbf.cnm +266439 dpg.pwn +dir hpgbcvtb +139357 jvps +dir llbthqc +250148 mctn.dqw +dir rzsrp +22196 tnflwcsn +dir whmdbn +$ cd hpgbcvtb +$ ls +231579 fvjjtd.wdb +168118 gjdtscqs +113434 ldbqbg +dir mqjfvg +182214 nnnr +112389 pqqdt.wnn +$ cd mqjfvg +$ ls +170328 gqlg.jjc +$ cd .. +$ cd .. +$ cd llbthqc +$ ls +25611 bftwd.qrr +91550 tnflwcsn +$ cd .. +$ cd rzsrp +$ ls +272315 wrsfh.pzd +123877 zcmfcjhf.tzw +$ cd .. +$ cd whmdbn +$ ls +29628 jjhc.tzr +65193 mrhb +$ cd .. +$ cd .. +$ cd zjhqnlrr +$ ls +dir bzzvj +dir ddzmvh +dir dsjd +180806 fqz.dch +dir nnzvl +109161 rptmqt +6463 rzsrp.sjf +111549 rzsrp.wwz +241532 zfn +$ cd bzzvj +$ ls +278759 gqlg.nsn +174223 mvggzqrq +156518 tnflwcsn +dir wjtlg +dir zfn +$ cd wjtlg +$ ls +52198 fvqbtm.tch +44881 tnflwcsn +$ cd .. +$ cd zfn +$ ls +22926 tnflwcsn +$ cd .. +$ cd .. +$ cd ddzmvh +$ ls +dir cpvfln +180764 gqlg.bjq +dir hgrnmh +186254 hgrnmh.tpr +dir hjpgf +dir mghmb +dir pvdwhmcr +256578 rzsrp +269955 shlhgj +172163 vrr.nnm +$ cd cpvfln +$ ls +87025 hgrnmh.lvr +187453 rwmq.dph +dir sthhc +$ cd sthhc +$ ls +289580 fdzwmfnf +57504 hgrnmh.vqj +277639 mzcfchr.mch +dir slsj +dir vsvvprg +94836 zqglfrl +$ cd slsj +$ ls +178013 hdjgtqt +$ cd .. +$ cd vsvvprg +$ ls +102783 fvqbtm.tch +$ cd .. +$ cd .. +$ cd .. +$ cd hgrnmh +$ ls +dir mrnmbbt +240216 rzsrp.nfg +$ cd mrnmbbt +$ ls +245579 gqlg +$ cd .. +$ cd .. +$ cd hjpgf +$ ls +257544 cjfd.wdq +296077 jjhc.tzr +195752 zcmfcjhf.tzw +$ cd .. +$ cd mghmb +$ ls +dir bgrcsdc +dir btjq +dir gqlg +dir gtwdqw +dir hgrnmh +dir jts +dir jvp +dir jvrjcv +206272 pgf.rgj +130746 tnflwcsn +256698 zfn.dhl +$ cd bgrcsdc +$ ls +235762 lflcgss.jrm +$ cd .. +$ cd btjq +$ ls +dir bvrcqb +dir drslln +dir dwzpblb +dir gqlg +dir hgrnmh +dir hvb +dir rqtc +dir vsdz +dir wrnftqh +$ cd bvrcqb +$ ls +51508 gjjg.msw +dir gqlg +13206 pdwn +10427 vbw +6909 zfn.ztq +$ cd gqlg +$ ls +20816 cmgcvlh.mzs +10358 fvqbtm.tch +215142 rzsrp.dns +192153 wdjdppzm +$ cd .. +$ cd .. +$ cd drslln +$ ls +258102 tnflwcsn +$ cd .. +$ cd dwzpblb +$ ls +302466 fvqbtm.tch +$ cd .. +$ cd gqlg +$ ls +dir hnr +dir mdzdht +$ cd hnr +$ ls +dir fjd +159298 fvqbtm.tch +46324 gchdll.nrm +287907 lflcgss.jrm +dir mqp +140272 twdff +47399 zfn +$ cd fjd +$ ls +227109 fvqbtm.tch +223413 wdsfwwwm.rmd +$ cd .. +$ cd mqp +$ ls +dir rzsrp +$ cd rzsrp +$ ls +dir pgwng +$ cd pgwng +$ ls +218271 hgrnmh.gnf +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd mdzdht +$ ls +dir gqlg +dir tvd +$ cd gqlg +$ ls +dir gfjqbdp +108335 jjhc.tzr +$ cd gfjqbdp +$ ls +143536 fzvn.jtv +$ cd .. +$ cd .. +$ cd tvd +$ ls +238491 wsjmrlqv.bwb +$ cd .. +$ cd .. +$ cd .. +$ cd hgrnmh +$ ls +265289 lflcgss.jrm +111283 thb +$ cd .. +$ cd hvb +$ ls +dir hgrnmh +dir smmwg +$ cd hgrnmh +$ ls +dir wpvssts +84939 zcmfcjhf.tzw +$ cd wpvssts +$ ls +305634 whcmr +$ cd .. +$ cd .. +$ cd smmwg +$ ls +36722 cvdbwg.rll +16840 nnhbcbwz +dir rzsrp +9405 zfn.jzr +$ cd rzsrp +$ ls +dir fzsngr +$ cd fzsngr +$ ls +142687 zcmfcjhf.tzw +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd rqtc +$ ls +dir pbzhfsg +dir rzsrp +dir shlhgj +$ cd pbzhfsg +$ ls +41865 hpshz.sdf +$ cd .. +$ cd rzsrp +$ ls +dir gqlg +dir mbsjjzft +$ cd gqlg +$ ls +dir gqlg +dir nvjqp +$ cd gqlg +$ ls +21860 tnflwcsn +$ cd .. +$ cd nvjqp +$ ls +dir gcq +$ cd gcq +$ ls +dir mslhm +dir rzsrp +$ cd mslhm +$ ls +41304 rpgvllw.zfj +$ cd .. +$ cd rzsrp +$ ls +290199 ddsnt +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd mbsjjzft +$ ls +47727 ggpmg.pps +dir stgszvmj +275954 tnflwcsn +248613 vbgnwh.sjz +$ cd stgszvmj +$ ls +dir dthcrbmr +dir shlhgj +206580 zcmfcjhf.tzw +dir zfn +$ cd dthcrbmr +$ ls +dir lhp +dir npf +dir qbgrjr +$ cd lhp +$ ls +37925 hgrnmh.lvm +$ cd .. +$ cd npf +$ ls +77162 bqvd +$ cd .. +$ cd qbgrjr +$ ls +48767 fvqbtm.tch +$ cd .. +$ cd .. +$ cd shlhgj +$ ls +dir wtlngn +35422 zfn +$ cd wtlngn +$ ls +dir gqlg +$ cd gqlg +$ ls +64761 fwtqw +$ cd .. +$ cd .. +$ cd .. +$ cd zfn +$ ls +47247 dmlr.flv +259570 htvn.rbz +149238 qrdw +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd shlhgj +$ ls +dir cjmv +dir tns +$ cd cjmv +$ ls +140919 jjhc.tzr +$ cd .. +$ cd tns +$ ls +248127 fvqbtm.tch +216202 pwg +dir qhhtgsvz +$ cd qhhtgsvz +$ ls +68979 fvqbtm.tch +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd vsdz +$ ls +224491 hgrnmh +dir jsrqjjtc +dir shlhgj +123062 zfn.gss +$ cd jsrqjjtc +$ ls +245991 phc +$ cd .. +$ cd shlhgj +$ ls +284208 ctwmwlp.lnm +11067 vwsrmlf.dvz +$ cd .. +$ cd .. +$ cd wrnftqh +$ ls +237658 lldrh +14804 nszc.wdf +$ cd .. +$ cd .. +$ cd gqlg +$ ls +211474 jjhc.tzr +$ cd .. +$ cd gtwdqw +$ ls +92613 fvqbtm.tch +206813 ppzhmnb.grd +$ cd .. +$ cd hgrnmh +$ ls +249351 bftm +$ cd .. +$ cd jts +$ ls +132190 gqlg.vnn +208091 ldnq +202593 zcmfcjhf.tzw +$ cd .. +$ cd jvp +$ ls +258220 lflcgss.jrm +$ cd .. +$ cd jvrjcv +$ ls +20148 dzzlwp.bdj +289774 hgrnmh.bvc +296981 jwscd.cvj +16617 tbnwvcl.tlv +$ cd .. +$ cd .. +$ cd pvdwhmcr +$ ls +dir bhmmsbmb +dir bjwbvcq +dir hgrnmh +dir ltvtrtth +dir prtqcb +dir rmn +dir shlhgj +dir tmzcmb +dir vlbqvps +dir wmmfp +$ cd bhmmsbmb +$ ls +dir nccjwf +$ cd nccjwf +$ ls +dir drwhjfjn +206638 lflcgss.jrm +$ cd drwhjfjn +$ ls +291772 zcmfcjhf.tzw +$ cd .. +$ cd .. +$ cd .. +$ cd bjwbvcq +$ ls +dir zfn +$ cd zfn +$ ls +303808 wrbldbd +$ cd .. +$ cd .. +$ cd hgrnmh +$ ls +142765 fvqbtm.tch +159497 scqf.scf +270819 zcmfcjhf.tzw +$ cd .. +$ cd ltvtrtth +$ ls +dir fwtwqvn +156894 jnmqdq.zgp +297860 lflcgss.jrm +dir mcgcc +dir zfn +179328 zfn.vnn +dir zzsnz +$ cd fwtwqvn +$ ls +dir rqndc +dir rzsrp +124999 rzsrp.tvr +dir shlhgj +$ cd rqndc +$ ls +45124 zrcv +$ cd .. +$ cd rzsrp +$ ls +74041 rzsrp +$ cd .. +$ cd shlhgj +$ ls +117219 qptfpz.cgc +281188 shlhgj.bhd +121750 sptql +173637 vqp.dbs +$ cd .. +$ cd .. +$ cd mcgcc +$ ls +18295 gqlg +dir ngvwhnvf +177283 rjsrn.rlq +54239 rzsrp.tfq +$ cd ngvwhnvf +$ ls +207616 jjhc.tzr +$ cd .. +$ cd .. +$ cd zfn +$ ls +dir cwzbljh +$ cd cwzbljh +$ ls +134952 hmchpgn.nwf +$ cd .. +$ cd .. +$ cd zzsnz +$ ls +273014 shlhgj.pls +$ cd .. +$ cd .. +$ cd prtqcb +$ ls +dir dtr +dir rzsrp +199012 tnflwcsn +$ cd dtr +$ ls +dir gqlg +dir grwpbs +dir hgrnmh +115701 lflcgss.jrm +247838 tnflwcsn +268721 zcmfcjhf.tzw +15320 zwcd.dqb +$ cd gqlg +$ ls +285009 jjhc.tzr +125691 nhnlcjjt.zlj +54424 rzsrp.rll +$ cd .. +$ cd grwpbs +$ ls +59390 rzsrp.cms +$ cd .. +$ cd hgrnmh +$ ls +185747 lvtnqqdh.nzq +$ cd .. +$ cd .. +$ cd rzsrp +$ ls +268631 hvvpfd.smn +263890 tcrctpb.pcc +$ cd .. +$ cd .. +$ cd rmn +$ ls +dir gtnvc +205894 hqb.fwh +280887 lvvmjb.scj +dir rsnqlfsz +$ cd gtnvc +$ ls +28523 jjhc.tzr +$ cd .. +$ cd rsnqlfsz +$ ls +dir hgrnmh +dir nsfhtthc +$ cd hgrnmh +$ ls +183216 fvqbtm.tch +$ cd .. +$ cd nsfhtthc +$ ls +284747 jspmbh.rvh +$ cd .. +$ cd .. +$ cd .. +$ cd shlhgj +$ ls +144391 dzf +dir lrths +178083 nhlmsd.mnc +dir rwn +173833 shlhgj.qss +39183 tnflwcsn +125029 zfn.hjr +$ cd lrths +$ ls +dir hgrnmh +dir pfc +86563 rzsrp.gbc +280631 tmhnc.hmc +28181 ttsnjc.rhm +98060 vdmr.czg +dir vlshvmvj +dir wsn +210337 zfn.pqp +$ cd hgrnmh +$ ls +dir mvrlcvj +$ cd mvrlcvj +$ ls +121034 vssbr.qjm +$ cd .. +$ cd .. +$ cd pfc +$ ls +dir gqlg +$ cd gqlg +$ ls +305519 hdhn.wds +$ cd .. +$ cd .. +$ cd vlshvmvj +$ ls +56641 lflcgss.jrm +29190 rzsrp.vsh +36663 zcmfcjhf.tzw +$ cd .. +$ cd wsn +$ ls +137307 gmdfbfjf.crs +dir hgtqj +297924 lflcgss.jrm +dir shlhgj +$ cd hgtqj +$ ls +214202 qnlszftb.bzg +$ cd .. +$ cd shlhgj +$ ls +dir pmldlbbh +$ cd pmldlbbh +$ ls +263722 zwfptl.wsh +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd rwn +$ ls +279589 ttqg.qct +$ cd .. +$ cd .. +$ cd tmzcmb +$ ls +138557 jjhc.tzr +$ cd .. +$ cd vlbqvps +$ ls +dir nmfnf +123659 rzsrp +$ cd nmfnf +$ ls +dir jhpnd +50537 trzvzvgz.bqp +41828 vps +195245 wlwt.ftj +$ cd jhpnd +$ ls +257519 shlhgj.fwz +32963 wzmbdtz +$ cd .. +$ cd .. +$ cd .. +$ cd wmmfp +$ ls +94749 lflcgss.jrm +$ cd .. +$ cd .. +$ cd .. +$ cd dsjd +$ ls +284923 bjvwg.phz +dir bwjp +dir gqlg +dir hgrnmh +8771 jjhc.tzr +dir jntt +271995 qbtn.vps +299501 shlhgj.crl +dir vmph +dir zvg +$ cd bwjp +$ ls +117739 vtrg +$ cd .. +$ cd gqlg +$ ls +dir dwhr +159876 hgrnmh.jvw +dir rzsrp +$ cd dwhr +$ ls +193289 gqlg +171323 lflcgss.jrm +$ cd .. +$ cd rzsrp +$ ls +dir pmsgd +$ cd pmsgd +$ ls +12648 lflcgss.jrm +dir wbppspwq +$ cd wbppspwq +$ ls +38834 tnflwcsn +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd hgrnmh +$ ls +76649 cfdcbvdl.gfs +257249 gmmzf +83045 lhrtfcz +$ cd .. +$ cd jntt +$ ls +286866 lhqvt.lst +$ cd .. +$ cd vmph +$ ls +dir fnvpsr +dir gfnvsznj +19765 zcmfcjhf.tzw +204319 zzsnj.dcp +$ cd fnvpsr +$ ls +dir flz +173924 fvqbtm.tch +248297 mjrhs.scq +dir rzsrp +130580 zfn +$ cd flz +$ ls +106168 brsgg +$ cd .. +$ cd rzsrp +$ ls +221882 hgrnmh.nsl +dir smd +$ cd smd +$ ls +dir drsld +131686 fvqbtm.tch +dir gqlg +288283 hcw +$ cd drsld +$ ls +85885 zfn.wdf +$ cd .. +$ cd gqlg +$ ls +8466 dzjtj.zbc +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd gfnvsznj +$ ls +dir fqb +265075 gqlg +dir hdhmbtj +74385 hpz +dir lzdq +dir rlvqmwv +dir rzsrp +$ cd fqb +$ ls +55182 ccjgpg +245930 ppdgwcm.zfb +164364 sgtgqdn.tfp +$ cd .. +$ cd hdhmbtj +$ ls +dir gqlg +68609 jjhc.tzr +dir rzsrp +dir vrmrnt +66988 zcmfcjhf.tzw +$ cd gqlg +$ ls +156776 tnflwcsn +dir vdcbg +$ cd vdcbg +$ ls +261780 lflcgss.jrm +$ cd .. +$ cd .. +$ cd rzsrp +$ ls +27818 zfn +$ cd .. +$ cd vrmrnt +$ ls +273664 msmzfnj.llc +145156 svzmwnrq.chh +$ cd .. +$ cd .. +$ cd lzdq +$ ls +214363 fms +190021 lfzcgh.dsq +21357 qtvvmj.zqw +$ cd .. +$ cd rlvqmwv +$ ls +dir gqlg +198296 gqlg.sdz +842 gshcswc.dcb +dir shlhgj +199828 snng +$ cd gqlg +$ ls +183087 zfn.nsj +$ cd .. +$ cd shlhgj +$ ls +73040 tzgjrqmb +$ cd .. +$ cd .. +$ cd rzsrp +$ ls +229576 vtftgng.wfz +$ cd .. +$ cd .. +$ cd .. +$ cd zvg +$ ls +85701 shlhgj.dvf +$ cd .. +$ cd .. +$ cd nnzvl +$ ls +dir wwzsf +$ cd wwzsf +$ ls +105177 tvbdz +$ cd .. +$ cd .. +$ cd .. +$ cd zssdlnc +$ ls +dir nfgh +166004 twdcrh.zld +dir zfn +$ cd nfgh +$ ls +102281 fvqbtm.tch +$ cd .. +$ cd zfn +$ ls +dir fbmww +dir jsst +206602 shlhgj.cln +$ cd fbmww +$ ls +179734 fll +$ cd .. +$ cd jsst +$ ls +dir flp +$ cd flp +$ ls +32274 gctgt.stn +67650 ggvj.bwz diff --git a/Media/2022/07.png b/Media/2022/07.png new file mode 100644 index 0000000000000000000000000000000000000000..666a4d189c4d9f1672156b896981fd70ef5e47e9 GIT binary patch literal 9917 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 Dae{f5 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 38c08b5..c6f662c 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- 2022 - 12 ⭐ + 2022 - 14 ⭐

@@ -24,6 +24,9 @@ + + +

2021 - 50 ⭐

From 659a04c27de131ccec7e364da661e9ae39012cbf Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Wed, 7 Dec 2022 14:13:29 +0100 Subject: [PATCH 018/225] Add day 7 --- 2022/07/07.kt | 33 +++++++++++++++++++++++++++++++++ Media/2022/07.png | Bin 9917 -> 9704 bytes README.md | 2 +- 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 2022/07/07.kt diff --git a/2022/07/07.kt b/2022/07/07.kt new file mode 100644 index 0000000..f9df501 --- /dev/null +++ b/2022/07/07.kt @@ -0,0 +1,33 @@ +data class Tree(val name: String, var parent: Tree?) { + var size: Int = 0 + val children: MutableList = mutableListOf() +} + +fun main() { + val shell = generateSequence(::readlnOrNull).toList() + .map { it.replace("$ ", "") } + .filter { it != "ls" } + val root = Tree("/", null) + var current = root + for (line in shell) { + var (command, arg) = line.split(" ") + when (command) { + "cd" -> when (arg) { + "/" -> current = root + ".." -> current = current.parent!! + else -> current = current.children.filter { it.name == arg }.first() + } + "dir" -> current.children.add(Tree(arg, current)) + else -> current.size += command.toInt() + } + } + val sizes: MutableList = mutableListOf() + fun recursiveSizes(tree: Tree): Int { + sizes.add(tree.size + tree.children.sumOf(::recursiveSizes) ) + return sizes.last() + } + recursiveSizes(root) + println(sizes.filter { it <= 100000 }.sum()) + val needed = 30000000 - (70000000 - sizes.max()) + println(sizes.filter { it >= needed }.min()) +} diff --git a/Media/2022/07.png b/Media/2022/07.png index 666a4d189c4d9f1672156b896981fd70ef5e47e9..066934d663630402708d0676020e82e5a92d1880 100644 GIT binary patch literal 9704 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 literal 9917 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 Dae{f5 diff --git a/README.md b/README.md index c6f662c..1335a47 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ - +

From cc4f54c040c411b38753b1ceef3701e9e6a6e5fc Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Thu, 8 Dec 2022 08:06:36 +0100 Subject: [PATCH 019/225] Add day 8 --- 2022/08/08.py | 36 +++++++++++++++++ 2022/08/input.ans | 2 + 2022/08/input.in | 99 ++++++++++++++++++++++++++++++++++++++++++++++ Media/2022/08.png | Bin 0 -> 9906 bytes README.md | 5 ++- 5 files changed, 141 insertions(+), 1 deletion(-) create mode 100644 2022/08/08.py create mode 100644 2022/08/input.ans create mode 100644 2022/08/input.in create mode 100644 Media/2022/08.png diff --git a/2022/08/08.py b/2022/08/08.py new file mode 100644 index 0000000..e988d39 --- /dev/null +++ b/2022/08/08.py @@ -0,0 +1,36 @@ +import sys +s = [list(a) for a in sys.stdin.read().strip().split("\n")] + +# === Part 1 === +visible = set() +indices = list(range(len(s))) +for i in indices: + for order in (indices, list(reversed(indices))): + m = '/' + for x in order: + if m < s[i][x]: + visible.add((i, x)) + m = max(s[i][x], m) + m = '/' + for y in order: + if m < s[y][i]: + visible.add((y, i)) + m = max(s[y][i], m) +print(len(visible)) + +# === Part 2 === +best = 0 +is_valid = lambda y, x: 0 <= y < len(s) and 0 <= x < len(s[0]) +for Y in range(len(s)): + for X in range(len(s[0])): + scenic = 1 + for ya, xa in [(1, 0), (-1, 0), (0, 1), (0, -1)]: + dist, y, x = 0, Y+ya, X+xa + while is_valid(y, x): + dist += 1 + if s[y][x] >= s[Y][X]: + break + y, x = y+ya, x+xa + scenic *= dist + best = max(best, scenic) +print(best) diff --git a/2022/08/input.ans b/2022/08/input.ans new file mode 100644 index 0000000..4341940 --- /dev/null +++ b/2022/08/input.ans @@ -0,0 +1,2 @@ +1794 +199272 diff --git a/2022/08/input.in b/2022/08/input.in new file mode 100644 index 0000000..67c19e5 --- /dev/null +++ b/2022/08/input.in @@ -0,0 +1,99 @@ +211212222022130201331244204031330314133103224443222153333314030424430144322333133111111001110111100 +011010002312022022213333124244332200012535311241312425233452234232332434002404314010213010300011020 +000122211022332331322030422114134234533543153332141433442315454242340242334121020031011333101002002 +212001231120020114443023323004341314244553111423553551151313122524454330124123430302021112131311210 +010023233323302131223113103422131413124511225231551512331151422122222242244011341133031332000123002 +010122332320232121222313343422344153542155353422554151444431132214155255442032200104444102212213121 +220311123023010212113012214434253241131125125144553514355135411412253214211034342023023233100210312 +012021233322101322014410134244343233151425141125355346552431312541441525552551132210132341231131213 +212022110210121130141215541523415532154426463253225335424345244125452453353521224302113344031023330 +001331301002442002234333243154523422345544442555654454522262236353114253113323520332302343300332303 +022221002233442142312112451142555566553525565662234553562446526522354241453541211024234444203213103 +121222311004442143452433443451433246356323333462224663645332426432564453315351524511430324331330313 +020033121433043013523451315525355225662246464433535443555244533263653654532332123344232243011131122 +331231332041133215352242534163532264356442645556436224536332662235525664241551351544514242443122020 +211224100401201134234315434244552434552354262423454635464345236222546422664131225224254043442021032 +231012303303415245123421452352524655622263645375354655347574553332462346426612522542555340213441312 +211043401112034321445551526323233226554374763356556636777355756535336234634241534141122200101402030 +112341023410451542221225654622622255353544565345645766565677556375252446634536424143355510132222200 +321013312335143545355422445454636567463677663737736766333543334747425233256224451325314525244413200 +134134112125343512236525526335246366357455663434636554535666675345375546365323352441311155004121134 +134103302234334422434623253335635454465444433673744644777565643336547576243523623215313211444123100 +121214332422533433642563564345446775634333677454565663433553464453353655453565463223325554140013211 +140340201515224355236356553354564345656637544677644666867363673577375377725566454643343552314401102 +242234123324245145352363463474556736655588548485584448876875743457645676744566665635145243345232034 +240002433255552223455653336765744666634687546687484788677745778643457356557523233245233345322203230 +203033145215334435435262347664466473474457867646854578857546674775433665576464664524234245315323221 +220240145522153253653343354334676665555545854865676474576864645785537443574743555546543552211424323 +203303223355443662564323675465776857766847558445856455464888855484856565473734263625333553514131204 +141343234343462623453376444565367475584744446846868687745447856768847544336577422435266221431351302 +011105311221546266246563346475574856785486544597695996967678786457746835375453766563243343232132222 +342153442535526543536765573565848468586567799675857888667865686547568643564577744364252242513532434 +303412514235522642433473653567558668878798557765777686957585688674776587434464373226246544543135343 +134313521546426353375756547586484656765785675686695796677998878746476587743677774454422656531211434 +330442321112644425464657363687688585599859586878658555897556995948874866676663357754662526513313351 +031152255535654264775364478686688678756896855798669886769655865898565686588637345474344563445412320 +033412231333255266746776747686577558998969786586588679955768678756678668685355457353433435511243215 +233232325556234436547474646776556656557756668998669967658757689688987578684577474336565246255532551 +232114313222322224464545378545768899675966969678976998999568556595885874447557776576555222565311333 +153554334255253356567537674646656569995678676788797887778695969889798866846683333743344642351554423 +345414252243643374353655675557769798967656689687786868687886675866575467874583577644342363531311344 +452213536622456254743557585655789799758988877898878787688797798767876666484675654443325664563135251 +151114452544554546436654876678799866898876787668968979699879995587987774468485375644536533255541211 +211514523322654673674356655476766668559777787767896697698867686989688685867584637757652452536532521 +325431245645266644556638674587856588976776679887879899868878797869579957766466547664576666553424155 +351353232222444754473488547447588977799698788797978898877869989965559967448746574666366225422555234 +413323553464546456467374574775588578597999986799989888988976899856686587855784743346666424425221545 +231444363436566774435677574767669997976869899777989877888676989766766555785667844345663255424355441 +131332342664544366547384447849957999767988788889999977889998688686776576587687545564772363266441344 +344323153255254475756447668487668876766786779788778999997667996768669658886648456344746335633653214 +432125224655454763335585885578768897889868679897777999877987996687598957855747536767467246264213342 +251123242522227743643744785665768788969768778798979798899976766779955656454747664477375562423352144 +335215134645536564436664555587969577787979887889798779897877686768869888764467653676646454662351122 +455541145534236474533477845547655956799686678788787897899877888979567875855484663636455423534225343 +443412355542265645777686678647889565778786879979978999977689898868965569867655855463733536555332123 +554333534644243647547485474889997578686899879987778777979796897956885659856478875353562443646414133 +523521346442456477365347646745578595568686668879987988977879897858556977787654645645753546466532354 +415551454256456643353367445455568986897777877789988897768879899869965985464454846544732365343211244 +045253325223423633465535668844665696698867976878987997697669698795567764745785435374775534356323555 +324424513464646646773334458686678768868668789699687898687769799596757997646887333456353525562532334 +333314122436424634656654458578885567975698998866676766687677986678988577887848647435423555654245141 +441323436226324474354554865578679696675896767799799699977678687576559874657778736635335633336333245 +325541255634234335777446557648487588986657787766698699877877978598595778688447674476666264664525524 +334224432254623447467743486544648996678656987989788868878788589778785746455873547654626326245514114 +413352531625243455733366467566645868987999997776889888868757777796558764784776476377665635553522333 +425235531356553325567457674875556778688685899689977798685876768589645658567837344646524442654525432 +103455532456342526657354677664785588679779979577568567955568596777454678585774353354436633221153331 +422433153464256665575466474547467484759655656769697755696555696797648476876754465655362463541153510 +200221512352422423435457444587878556556776655658757679865666957677874646877574343466422645122433143 +233312332322644356544567546775446655776887566656897679779679567464757846575634746754632245245312322 +440413534453435243635457637637844865678595957869877877556795746685484886655763473646525455242423424 +133015323213554533656353736775587775585487676857757689778864864846456683634546376645266241223134331 +341325554355154464532756673544377888566757758978576696758777847844684656374464563435536313553154410 +123231515424162465563463554775765668488574776875475754584748666766764547366777353655635341211544214 +411120434335113656445353437475335766655568765658746576454466786655883677746675446244525421121551010 +402433144311354446525322467654675484475575676777445476666764865885847756657433654652532114452353133 +432424042535244564355554365363676576876745584585766548666774675753564565547462524462425114452201003 +102313425251124435654356367537734654638566846546448757455657555476436573637522622235212353325544024 +220311435524234432323565463344475534664484764648754486454485567435377667774553343222531144155033034 +231020004114553111534454422257546737666353776748664584464344633646464475423245232221444424255211432 +032121221243151355266464525344734574375363364375343377346676563457354333464322642455152553422410413 +224424204312344155546224253423664743337765335743365463543544433363437353323264646443514252343204010 +001321143122112341544253536644545554446436763477746674374776466344577623333354536412412241240000301 +012121423241523355214265352225525345574443757474534637556673367573322622226565351432424315423431120 +002001243100554231422332533535466634675453664437575544663735566344653636536633315425145230310333331 +111131341421342553234223552634336262456343575734674633673656737332422423254544335452112104141212220 +312222012123233525325553364332226636325523744473366567533732646636556526353413122533352224001243232 +222104333230343332423213113445433536266452535452556675623325555336233552464241241531142132324111100 +120033123241410113453233151144554262266263655622523332323624264526223446642241422415122401000243333 +300110321321220332412453221523552552665236344464424652635635223664335443125224432335044114323031213 +022320323221440340524544434152545623533526235366642566655434622263663532553353311521231430123330113 +002023331000112411134112432323353142332443352524442462645622663225223434341133154204330110021211033 +001030002322324022304135433132453151564563345632626222566526534531324522534413523110111000231032001 +021300020130201201401332235525125513213453326526662453442553331541555225115331120431314320302111303 +021321020201323321211302324413125143432142143524266333524534451124153311112131123343411412020232121 +202310321020334220421002031152143124243343112321122253451541422112235155133111203114013232211133211 +210131010322112330120423222122351343151544412545222452312115521551124142440421412131234310031213311 +200022120033030133130312000240311254212234133155524431352242335344153414002444032121311102101011000 +022201303110101303411200001233415242353252421341231234412423235311314133130301320201102330230131001 +200002110210232130434243031312421313244134152512112542334551242213212344113244124232001302221200010 diff --git a/Media/2022/08.png b/Media/2022/08.png new file mode 100644 index 0000000000000000000000000000000000000000..87d3a9528d1bfa581330c33affa7abe1e96c8cc2 GIT binary patch literal 9906 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 NX>s{)6=FXE{tu1rW=;SA literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 1335a47..5695bf9 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- 2022 - 14 ⭐ + 2022 - 16 ⭐

@@ -27,6 +27,9 @@ + + +

2021 - 50 ⭐

From 5bccae20379536f7984a035a47ee9fc8e002ae06 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Thu, 8 Dec 2022 20:44:49 +0100 Subject: [PATCH 020/225] Add day 8 --- 2022/08/08.kt | 48 ++++++++++++++++++++++++++++++++++++++++++++++ Media/2022/08.png | Bin 9906 -> 9854 bytes README.md | 2 +- 3 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 2022/08/08.kt diff --git a/2022/08/08.kt b/2022/08/08.kt new file mode 100644 index 0000000..3986e8d --- /dev/null +++ b/2022/08/08.kt @@ -0,0 +1,48 @@ + + +fun main() { + val s = generateSequence(::readlnOrNull).toList() + val indices = (0..s.size-1).toList() + val visible: MutableSet> = mutableSetOf() + var highest: Int + for (i in indices) { + for (order in listOf(indices, indices.reversed())) { + highest = 0 + for (x in order) { + if (highest < s[i][x].code) + visible.add(Pair(i, x)) + highest = maxOf(s[i][x].code, highest) + } + highest = 0 + for (y in order) { + if (highest < s[y][i].code) + visible.add(Pair(y, i)) + highest = maxOf(s[y][i].code, highest) + } + } + } + println(visible.size) + + var best = 0 + fun is_valid(y: Int, x: Int, size: Int) = 0 <= y && y < size && 0 <= x && x < size + for (Y in indices) { + for (X in indices) { + var scenic = 1 + for ((ya, xa) in listOf(Pair(1, 0), Pair(-1, 0), Pair(0, 1), Pair(0, -1))) { + var dist = 0 + var y = Y+ya + var x = X+xa + while (is_valid(y, x, s.size)) { + dist += 1 + if (s[y][x] >= s[Y][X]) + break + y = y+ya + x = x+xa + } + scenic *= dist + } + best = maxOf(best, scenic) + } + } + println(best) +} diff --git a/Media/2022/08.png b/Media/2022/08.png index 87d3a9528d1bfa581330c33affa7abe1e96c8cc2..286afb36ded951946ef57bf54380a0d0f603af37 100644 GIT binary patch literal 9854 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 literal 9906 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 NX>s{)6=FXE{tu1rW=;SA diff --git a/README.md b/README.md index 5695bf9..6979df3 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ - +

From 7542c7e8e0351a8963ecb9cfb28d0b9fb76076ef Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Fri, 9 Dec 2022 06:56:50 +0100 Subject: [PATCH 021/225] Add day 9 --- 2022/09/09.py | 17 + 2022/09/input.ans | 2 + 2022/09/input.in | 2000 +++++++++++++++++++++++++++++++++++++++++++++ Media/2022/09.png | Bin 0 -> 10051 bytes README.md | 5 +- 5 files changed, 2023 insertions(+), 1 deletion(-) create mode 100644 2022/09/09.py create mode 100644 2022/09/input.ans create mode 100644 2022/09/input.in create mode 100644 Media/2022/09.png diff --git a/2022/09/09.py b/2022/09/09.py new file mode 100644 index 0000000..e4fdc0d --- /dev/null +++ b/2022/09/09.py @@ -0,0 +1,17 @@ +import sys +visited_segment2 = set() +visited_segment10 = set() +rope = [[0, 0] for _ in range(10)] +lookup = {"L": (-1, 0), "R": (1, 0), "D": (0, 1), "U": (0, -1)} +for dir, steps in [line.split() for line in sys.stdin.readlines()]: + for _ in range(int(steps)): + rope[0][0] += lookup[dir][0] + rope[0][1] += lookup[dir][1] + for i, ((hx, hy), (sx, sy)) in enumerate(zip(rope, rope[1:])): + if abs(hx - sx) > 1 or abs(hy - sy) > 1: + rope[i+1][0] += max(-1, min(hx - sx, 1)) + rope[i+1][1] += max(-1, min(hy - sy, 1)) + visited_segment2.add(tuple(rope[1])) + visited_segment10.add(tuple(rope[-1])) +print(len(visited_segment2)) +print(len(visited_segment10)) diff --git a/2022/09/input.ans b/2022/09/input.ans new file mode 100644 index 0000000..9fbd419 --- /dev/null +++ b/2022/09/input.ans @@ -0,0 +1,2 @@ +6337 +2455 diff --git a/2022/09/input.in b/2022/09/input.in new file mode 100644 index 0000000..de3f33c --- /dev/null +++ b/2022/09/input.in @@ -0,0 +1,2000 @@ +U 2 +D 2 +R 2 +U 2 +D 1 +L 2 +R 2 +D 1 +R 2 +D 1 +R 2 +L 1 +U 1 +L 2 +R 2 +L 2 +U 2 +R 2 +L 1 +U 1 +R 2 +U 1 +D 2 +L 1 +U 2 +D 1 +L 1 +R 1 +L 1 +D 1 +R 1 +D 2 +L 1 +U 2 +L 1 +U 1 +D 2 +U 1 +R 2 +U 1 +R 2 +D 1 +U 1 +D 2 +L 2 +U 2 +L 2 +R 1 +L 1 +U 2 +D 2 +U 1 +R 2 +L 2 +U 1 +R 1 +L 2 +D 1 +L 1 +U 2 +D 1 +R 1 +U 2 +R 2 +U 2 +R 2 +D 1 +L 2 +R 2 +U 2 +D 2 +U 2 +L 1 +U 1 +L 2 +U 1 +D 1 +L 1 +D 1 +L 1 +R 1 +L 1 +R 2 +D 1 +L 1 +D 2 +R 2 +L 1 +U 2 +L 1 +U 2 +L 1 +U 1 +D 2 +U 1 +L 1 +R 1 +D 1 +L 2 +U 1 +L 1 +R 2 +D 1 +L 2 +U 1 +L 2 +D 2 +R 2 +D 2 +U 1 +D 2 +R 3 +U 2 +L 2 +R 3 +L 2 +U 3 +L 3 +D 1 +R 2 +L 1 +R 2 +U 3 +R 3 +L 1 +D 2 +R 3 +L 2 +D 3 +L 3 +U 1 +R 1 +D 2 +R 2 +D 3 +L 3 +U 3 +R 3 +D 2 +U 1 +D 3 +L 2 +R 1 +D 3 +L 3 +D 3 +L 2 +D 3 +L 1 +D 2 +R 2 +L 3 +U 2 +R 2 +L 1 +U 1 +D 3 +R 3 +U 2 +R 3 +D 1 +R 1 +U 3 +D 2 +L 2 +D 2 +L 3 +U 2 +R 3 +D 1 +L 3 +U 1 +R 3 +U 1 +D 1 +U 2 +D 1 +R 2 +L 2 +D 1 +R 1 +D 2 +L 1 +U 1 +D 1 +R 2 +D 1 +L 2 +R 1 +D 3 +U 1 +D 3 +U 2 +L 1 +U 3 +D 2 +L 3 +U 2 +D 3 +R 3 +D 3 +U 3 +R 1 +U 2 +L 3 +D 1 +R 3 +D 2 +U 2 +D 2 +L 3 +U 3 +D 3 +R 3 +L 2 +D 3 +U 3 +D 3 +U 2 +R 2 +L 3 +R 3 +U 1 +D 1 +U 2 +L 4 +D 1 +U 1 +L 2 +D 4 +U 3 +L 1 +U 1 +D 1 +L 4 +R 4 +L 4 +R 2 +U 4 +L 2 +R 1 +L 3 +U 3 +D 2 +L 3 +U 4 +R 3 +L 4 +D 2 +U 3 +D 2 +U 2 +L 4 +D 2 +L 1 +R 4 +U 4 +D 2 +U 4 +L 4 +D 2 +L 3 +U 3 +D 1 +R 1 +U 1 +D 4 +U 3 +L 4 +D 1 +L 4 +U 1 +L 2 +U 3 +D 2 +L 3 +U 4 +D 2 +U 1 +D 1 +U 1 +R 2 +L 2 +D 3 +U 2 +R 1 +U 1 +L 4 +U 1 +R 2 +D 3 +R 1 +D 1 +R 3 +D 3 +L 1 +U 3 +L 3 +D 4 +L 3 +D 4 +L 1 +D 1 +R 1 +D 1 +U 4 +L 2 +U 3 +D 4 +R 4 +D 1 +U 2 +D 4 +U 1 +R 4 +L 2 +D 3 +U 4 +R 3 +D 1 +L 3 +D 4 +R 4 +L 3 +D 2 +L 3 +U 3 +R 3 +D 1 +R 1 +L 2 +D 2 +U 4 +R 1 +L 1 +D 2 +U 3 +D 3 +L 3 +D 5 +L 1 +U 2 +L 5 +U 3 +R 3 +L 2 +U 2 +L 1 +U 5 +L 4 +D 1 +L 3 +D 5 +U 3 +R 5 +D 1 +L 5 +R 5 +L 5 +D 4 +U 4 +L 5 +U 5 +R 5 +U 2 +D 5 +L 5 +U 3 +L 3 +U 4 +L 5 +U 3 +D 4 +R 3 +U 1 +L 2 +U 5 +L 1 +U 2 +D 1 +U 1 +D 1 +R 4 +L 1 +R 2 +D 2 +R 3 +L 5 +R 2 +D 5 +U 4 +R 5 +D 3 +L 1 +D 3 +R 3 +L 1 +R 4 +D 3 +L 5 +D 1 +R 1 +U 4 +D 2 +R 3 +U 4 +D 3 +U 1 +D 1 +R 1 +D 4 +U 1 +L 5 +R 1 +U 5 +L 4 +R 1 +L 1 +R 4 +D 3 +U 3 +D 3 +U 4 +L 2 +U 1 +R 2 +U 1 +D 4 +U 4 +R 1 +U 4 +R 3 +L 4 +R 2 +L 4 +D 5 +R 3 +U 1 +D 1 +L 3 +R 2 +U 1 +D 3 +U 1 +D 1 +R 3 +U 2 +L 6 +R 1 +D 1 +R 5 +L 5 +U 4 +D 1 +L 6 +D 5 +L 3 +D 6 +R 1 +U 3 +D 3 +R 5 +U 1 +R 5 +D 1 +L 1 +D 4 +L 1 +D 4 +R 1 +D 5 +U 6 +L 5 +R 2 +U 2 +D 6 +R 3 +U 6 +L 2 +D 5 +U 3 +R 1 +D 3 +L 1 +D 3 +U 1 +D 3 +U 4 +R 2 +D 3 +R 2 +D 2 +L 3 +U 2 +R 6 +D 4 +R 4 +D 1 +U 3 +D 1 +L 3 +U 6 +R 4 +D 3 +R 3 +L 4 +R 2 +U 5 +D 6 +L 5 +U 3 +L 4 +D 2 +R 2 +D 3 +L 6 +D 1 +U 1 +R 4 +L 5 +D 3 +U 4 +L 2 +U 5 +L 2 +U 5 +D 1 +L 4 +U 1 +R 2 +L 3 +D 1 +U 4 +D 2 +U 2 +L 1 +D 4 +R 2 +L 3 +R 2 +D 6 +R 2 +D 3 +R 3 +D 2 +U 6 +D 4 +R 4 +U 4 +L 5 +R 3 +L 4 +D 3 +L 2 +R 2 +D 1 +L 6 +R 7 +L 3 +U 3 +D 6 +U 4 +R 4 +D 7 +L 4 +U 1 +L 5 +R 5 +L 5 +U 7 +R 1 +D 2 +R 6 +D 6 +U 2 +R 1 +U 2 +L 5 +D 7 +U 5 +L 3 +U 4 +L 5 +U 4 +L 2 +D 1 +U 3 +R 4 +L 5 +R 5 +L 4 +R 3 +L 7 +R 4 +U 1 +L 4 +R 4 +U 7 +D 3 +U 4 +L 7 +D 5 +L 1 +D 5 +L 7 +U 5 +L 5 +D 3 +U 5 +D 3 +U 7 +R 5 +D 1 +U 2 +L 1 +U 1 +D 1 +L 1 +U 6 +D 2 +L 7 +U 5 +R 4 +L 3 +U 2 +L 1 +R 1 +L 2 +D 3 +L 3 +U 4 +D 4 +U 7 +D 7 +U 6 +D 7 +R 5 +U 7 +D 4 +U 3 +R 3 +D 3 +U 6 +L 6 +U 1 +R 1 +U 7 +R 2 +U 1 +D 1 +R 1 +D 1 +L 6 +U 6 +D 7 +R 4 +D 1 +L 2 +U 6 +L 2 +D 2 +R 2 +D 3 +L 3 +R 5 +D 1 +R 4 +L 1 +U 1 +R 3 +L 8 +U 3 +L 3 +R 5 +L 8 +D 1 +R 1 +D 8 +L 4 +D 2 +L 4 +U 3 +D 6 +R 2 +U 4 +D 6 +R 8 +D 4 +L 7 +R 6 +U 2 +R 1 +U 3 +R 2 +L 1 +R 8 +L 2 +D 6 +R 6 +D 6 +U 2 +D 6 +R 7 +D 4 +U 6 +R 5 +D 8 +L 3 +R 6 +D 4 +R 4 +U 2 +D 8 +L 8 +U 6 +D 2 +R 3 +L 2 +D 6 +U 8 +R 3 +D 3 +L 5 +D 5 +L 4 +R 8 +D 3 +U 3 +D 2 +R 8 +U 4 +L 8 +U 2 +R 1 +L 4 +D 5 +L 5 +R 5 +D 3 +L 7 +D 4 +L 6 +D 2 +U 3 +D 2 +L 2 +D 6 +R 2 +U 6 +R 7 +L 8 +U 3 +D 8 +L 1 +U 8 +L 8 +D 2 +R 6 +U 4 +D 8 +U 3 +L 7 +D 7 +L 8 +U 8 +L 4 +U 6 +L 1 +U 4 +D 7 +U 3 +R 2 +D 4 +L 5 +U 8 +R 4 +U 1 +R 2 +U 4 +D 7 +U 7 +R 7 +D 7 +U 9 +L 4 +D 8 +U 6 +L 3 +D 1 +U 8 +L 9 +U 8 +D 8 +U 2 +L 1 +U 5 +L 9 +U 4 +D 7 +L 5 +U 4 +R 5 +D 2 +L 3 +D 5 +R 3 +L 2 +D 9 +U 5 +L 6 +U 7 +D 2 +R 2 +D 3 +R 5 +U 7 +L 1 +U 9 +R 3 +D 8 +R 6 +D 5 +U 9 +R 9 +D 3 +U 8 +D 3 +R 6 +D 4 +U 8 +L 4 +D 8 +R 2 +U 2 +R 3 +D 9 +L 9 +U 7 +R 4 +D 4 +L 5 +U 1 +D 3 +R 6 +L 4 +R 1 +D 6 +R 4 +L 4 +U 6 +D 2 +L 2 +D 3 +R 8 +D 3 +U 4 +L 4 +D 2 +U 2 +L 4 +D 9 +R 9 +D 6 +U 7 +L 8 +U 6 +D 5 +R 2 +D 5 +U 9 +R 5 +D 7 +U 2 +L 3 +R 2 +U 5 +L 4 +D 5 +U 2 +L 9 +U 3 +R 2 +D 9 +R 5 +D 9 +U 2 +R 2 +L 6 +U 3 +L 6 +R 8 +U 5 +D 8 +R 9 +L 2 +R 2 +U 1 +D 10 +R 8 +L 6 +D 9 +R 5 +L 10 +R 2 +L 3 +R 9 +D 7 +U 10 +D 9 +L 7 +U 8 +D 7 +U 2 +D 1 +U 5 +R 9 +U 9 +R 6 +D 4 +L 3 +D 6 +R 10 +D 2 +L 4 +U 8 +R 6 +L 3 +U 1 +D 8 +R 6 +D 4 +L 1 +R 3 +L 10 +U 4 +D 5 +U 1 +R 3 +U 5 +R 5 +D 9 +R 1 +L 4 +U 4 +R 4 +D 7 +L 1 +U 6 +R 6 +U 1 +D 4 +R 2 +L 3 +D 6 +L 3 +R 1 +L 10 +D 1 +L 1 +U 6 +R 7 +L 8 +U 2 +D 10 +R 4 +D 9 +R 2 +U 9 +L 2 +U 7 +D 4 +U 4 +R 9 +U 9 +R 6 +D 7 +L 8 +U 1 +D 6 +L 6 +U 8 +D 3 +R 4 +L 4 +D 1 +L 2 +D 3 +L 2 +U 1 +L 5 +D 2 +U 8 +L 1 +U 5 +L 3 +U 3 +R 3 +U 1 +L 7 +D 9 +R 3 +D 10 +R 8 +L 5 +D 3 +U 6 +R 4 +U 4 +D 2 +L 5 +U 11 +L 3 +U 1 +L 6 +D 1 +L 2 +U 8 +R 6 +L 4 +R 2 +U 3 +L 3 +D 4 +L 2 +R 5 +U 4 +D 5 +U 10 +R 1 +D 6 +L 4 +U 9 +D 3 +U 5 +D 9 +L 1 +U 8 +D 11 +L 4 +D 4 +L 5 +D 7 +L 7 +R 10 +U 5 +R 1 +D 10 +R 3 +D 11 +R 7 +L 6 +U 7 +D 4 +L 7 +U 8 +R 6 +L 4 +U 5 +L 7 +R 2 +D 10 +L 8 +R 4 +U 1 +R 5 +L 2 +R 4 +L 6 +R 4 +U 10 +R 6 +U 9 +R 9 +D 6 +L 7 +D 1 +U 1 +L 8 +U 1 +D 8 +L 10 +R 6 +D 4 +R 9 +D 4 +R 3 +D 4 +U 8 +L 3 +D 7 +L 2 +R 10 +U 5 +R 4 +L 3 +D 6 +U 7 +R 8 +D 5 +R 6 +L 7 +R 4 +U 6 +L 8 +D 8 +R 6 +L 6 +U 8 +R 10 +U 4 +R 2 +D 2 +L 11 +R 10 +L 5 +U 10 +L 5 +D 12 +L 7 +D 8 +L 2 +U 1 +L 11 +R 3 +D 8 +U 7 +L 6 +D 9 +L 12 +U 7 +L 11 +R 7 +U 8 +L 4 +D 9 +U 6 +D 9 +R 7 +L 4 +R 12 +U 8 +D 6 +U 8 +D 6 +U 5 +L 2 +U 2 +L 9 +D 10 +L 11 +U 10 +R 4 +L 12 +U 6 +L 11 +R 10 +U 9 +L 2 +D 11 +L 11 +D 10 +U 8 +R 10 +L 7 +R 6 +L 6 +U 5 +L 8 +D 5 +U 7 +L 5 +D 8 +R 5 +L 7 +D 10 +L 10 +D 12 +L 8 +R 11 +U 6 +L 12 +D 9 +U 5 +R 2 +U 6 +D 11 +U 5 +R 1 +L 2 +R 3 +U 8 +R 4 +L 10 +R 6 +D 9 +L 3 +U 11 +L 4 +U 1 +R 5 +L 8 +D 8 +U 2 +D 7 +U 5 +R 10 +L 4 +D 4 +U 2 +L 7 +D 12 +U 12 +D 5 +U 12 +R 3 +L 4 +U 10 +L 1 +R 2 +L 9 +R 9 +L 5 +U 5 +L 10 +U 12 +L 3 +D 5 +U 12 +L 10 +D 11 +U 12 +L 2 +U 11 +R 6 +D 10 +U 6 +L 5 +D 10 +U 10 +D 12 +U 3 +L 10 +U 9 +R 4 +U 4 +L 12 +R 12 +L 4 +D 5 +L 9 +U 5 +L 11 +R 12 +D 8 +L 6 +U 10 +D 2 +U 11 +D 6 +R 10 +D 1 +L 5 +U 1 +D 10 +U 1 +L 13 +U 11 +L 6 +R 1 +U 11 +D 10 +R 11 +L 3 +U 6 +R 13 +U 13 +L 6 +R 4 +D 3 +L 10 +U 2 +R 9 +D 6 +L 12 +U 11 +D 9 +R 2 +L 2 +D 4 +R 13 +L 7 +R 7 +L 9 +R 11 +U 4 +D 2 +L 4 +R 12 +L 3 +D 8 +U 9 +D 3 +R 11 +U 11 +D 13 +U 1 +D 6 +U 2 +R 13 +L 5 +U 6 +L 5 +U 13 +L 12 +D 7 +L 12 +R 4 +U 4 +D 3 +L 5 +D 10 +U 10 +L 2 +U 11 +L 9 +U 11 +R 7 +D 4 +U 9 +D 7 +R 6 +L 2 +D 2 +L 1 +U 10 +R 5 +U 5 +R 1 +L 10 +D 11 +U 5 +D 13 +R 9 +D 6 +R 2 +D 13 +R 12 +L 11 +D 6 +R 9 +U 12 +R 11 +U 6 +R 12 +D 4 +R 11 +L 5 +D 1 +U 5 +R 8 +D 1 +R 12 +L 9 +U 6 +L 9 +U 3 +L 6 +R 3 +U 2 +R 3 +U 14 +L 7 +R 7 +L 12 +U 7 +R 5 +D 7 +L 10 +U 14 +D 8 +L 5 +U 11 +D 4 +U 10 +R 9 +U 4 +R 1 +L 11 +U 13 +D 8 +R 10 +L 3 +U 11 +L 5 +U 2 +R 6 +U 3 +R 10 +L 4 +R 3 +D 8 +U 11 +L 11 +U 6 +R 6 +U 8 +R 4 +L 10 +R 2 +U 4 +L 2 +D 12 +R 12 +D 4 +U 14 +R 6 +U 1 +R 9 +L 5 +U 9 +D 5 +R 13 +U 11 +L 8 +R 11 +D 9 +L 8 +D 8 +U 5 +R 2 +L 3 +D 6 +U 9 +D 1 +L 8 +U 6 +L 6 +R 8 +D 13 +R 12 +L 5 +U 8 +R 11 +D 4 +U 13 +D 10 +U 4 +D 3 +L 14 +R 14 +D 5 +R 2 +D 7 +L 13 +U 1 +L 14 +U 15 +D 11 +R 2 +U 15 +R 11 +L 8 +U 11 +D 4 +R 2 +U 8 +L 8 +R 11 +U 9 +L 11 +D 4 +L 8 +U 9 +L 9 +D 15 +U 1 +L 8 +U 7 +L 12 +U 13 +R 7 +L 6 +D 13 +U 1 +L 9 +D 11 +R 8 +D 3 +R 11 +L 8 +R 9 +U 2 +L 1 +U 5 +D 14 +R 3 +U 12 +R 4 +U 15 +D 1 +R 11 +L 11 +U 11 +L 1 +D 12 +U 7 +L 13 +R 4 +U 5 +D 15 +L 14 +R 10 +U 9 +R 7 +D 13 +L 15 +R 10 +L 2 +R 5 +D 12 +U 13 +R 6 +L 15 +R 14 +D 1 +U 1 +L 2 +U 11 +R 15 +U 8 +R 9 +U 5 +L 9 +D 14 +R 9 +D 9 +U 8 +R 8 +U 3 +R 7 +D 11 +R 4 +U 9 +R 9 +U 11 +D 4 +U 12 +L 9 +R 3 +D 7 +L 6 +R 1 +D 9 +R 1 +D 4 +R 16 +U 12 +R 8 +D 7 +L 7 +R 9 +U 16 +R 15 +U 14 +L 14 +D 3 +R 4 +U 4 +D 1 +L 2 +D 11 +R 2 +U 2 +D 16 +U 4 +D 5 +R 14 +D 3 +R 5 +D 10 +R 2 +L 4 +U 6 +R 9 +D 16 +R 12 +U 2 +L 16 +R 7 +L 8 +R 5 +L 5 +U 14 +D 16 +U 7 +R 2 +U 15 +L 3 +R 7 +L 5 +U 8 +R 11 +D 3 +L 5 +U 7 +L 8 +R 3 +U 3 +D 5 +U 13 +L 8 +U 1 +D 13 +R 11 +L 2 +U 14 +R 15 +U 2 +D 7 +R 15 +L 5 +D 9 +U 8 +R 5 +L 15 +D 3 +R 10 +D 10 +U 7 +D 7 +U 14 +R 2 +U 8 +R 14 +L 11 +R 16 +U 11 +D 16 +U 2 +L 10 +U 5 +D 6 +L 7 +U 8 +D 10 +R 11 +L 7 +D 5 +U 6 +L 5 +D 5 +R 1 +L 7 +U 9 +L 5 +U 3 +D 7 +R 14 +U 9 +D 6 +L 13 +U 8 +L 5 +D 5 +R 3 +U 7 +D 6 +U 8 +R 16 +U 17 +L 5 +R 8 +L 8 +U 8 +L 10 +D 17 +R 5 +D 3 +L 17 +R 17 +D 4 +R 15 +D 6 +L 3 +R 17 +D 9 +L 13 +U 4 +D 2 +L 17 +R 1 +L 14 +D 17 +L 9 +R 12 +U 14 +D 12 +U 3 +R 7 +D 1 +L 13 +R 13 +U 16 +D 13 +U 15 +R 15 +U 4 +D 11 +L 7 +U 1 +D 14 +U 8 +L 11 +D 13 +L 12 +U 17 +L 13 +U 2 +R 10 +L 12 +R 12 +U 1 +R 8 +U 10 +D 15 +R 3 +U 4 +R 12 +L 9 +D 15 +L 13 +D 15 +L 7 +D 8 +L 7 +U 6 +L 17 +R 4 +D 10 +U 11 +L 8 +R 14 +U 9 +R 9 +L 6 +U 1 +L 5 +D 11 +R 10 +L 16 +U 15 +L 12 +R 13 +D 5 +L 4 +D 12 +L 6 +R 3 +D 12 +L 4 +U 2 +L 16 +D 6 +R 15 +U 7 +D 2 +L 14 +D 6 +R 14 +D 7 +U 11 +R 4 +D 3 +R 6 +L 3 +D 11 +U 2 +R 5 +U 3 +L 1 +U 7 +R 13 +U 12 +D 12 +R 13 +D 7 +L 12 +D 10 +U 14 +R 12 +D 4 +R 2 +U 16 +D 9 +L 14 +U 14 +D 8 +L 7 +R 7 +D 18 +U 18 +R 8 +L 15 +U 12 +D 11 +L 16 +D 18 +R 14 +L 5 +R 12 +D 11 +R 13 +L 17 +D 4 +L 10 +U 1 +L 8 +U 10 +R 13 +D 2 +L 14 +D 1 +R 5 +L 4 +R 11 +L 7 +D 2 +R 8 +L 13 +R 5 +L 5 +R 11 +U 15 +D 3 +U 2 +R 6 +U 1 +R 8 +L 5 +U 1 +R 9 +D 13 +R 8 +U 17 +L 16 +U 3 +L 9 +D 9 +U 6 +L 8 +R 13 +L 7 +R 16 +U 6 +L 13 +U 18 +L 17 +D 15 +R 5 +U 6 +D 11 +U 15 +L 4 +R 14 +U 9 +R 11 +U 9 +L 11 +D 7 +U 9 +L 10 +D 4 +R 7 +U 7 +D 8 +R 1 +D 12 +R 16 +U 7 +R 9 +D 10 +R 1 +L 1 +U 16 +L 4 +U 11 +D 1 +U 3 +R 17 +U 17 +L 12 +R 9 +U 14 +D 4 +L 6 +R 4 +L 15 +U 1 +D 2 +U 9 +R 16 +L 1 +R 2 +L 12 +U 12 +D 7 +R 13 +D 6 +L 2 +D 3 +U 8 +L 7 +U 16 +L 15 +D 18 +L 19 +U 7 +R 17 +D 7 +U 3 +R 12 +D 1 +L 17 +U 19 +D 15 +R 3 +D 5 +U 17 +D 16 +U 2 +R 13 +D 7 +U 19 +L 5 +R 3 +D 15 +L 12 +D 19 +L 19 +U 1 +R 10 +D 14 +U 3 +R 1 +L 6 +U 14 +L 11 +R 10 +L 7 +R 14 +D 9 +U 14 +R 5 +L 19 +U 10 +L 12 +U 10 +L 3 +D 13 +U 12 +R 12 +D 6 +L 2 +U 1 +D 16 +U 9 +L 7 +R 14 +L 15 +U 9 +L 19 +U 14 +D 9 +U 15 +L 13 +U 12 +L 1 +D 7 +U 7 +L 7 +R 2 +U 16 +R 6 +D 11 +U 7 +D 11 +U 19 +R 13 +D 7 +R 7 +L 6 +R 14 +L 18 +D 2 +L 5 +D 8 +L 7 +U 17 +D 15 +U 19 diff --git a/Media/2022/09.png b/Media/2022/09.png new file mode 100644 index 0000000000000000000000000000000000000000..3a2477e9965f46d4cb2ec01d8a7432024eb50b75 GIT binary patch literal 10051 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 LC|xP}HR%5U^`qa$ literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 6979df3..8631d5e 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- 2022 - 16 ⭐ + 2022 - 18 ⭐

@@ -30,6 +30,9 @@ + + +

2021 - 50 ⭐

From 5ccccb3af9a1452794e9e1bc7ebb0f40e3b9febc Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Fri, 9 Dec 2022 11:38:29 +0100 Subject: [PATCH 022/225] Add day 9 --- 2022/09/09.kt | 24 ++++++++++++++++++++++++ Media/2022/09.png | Bin 10051 -> 9863 bytes README.md | 2 +- 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 2022/09/09.kt diff --git a/2022/09/09.kt b/2022/09/09.kt new file mode 100644 index 0000000..d99e63d --- /dev/null +++ b/2022/09/09.kt @@ -0,0 +1,24 @@ +operator fun Pair.plus(o: Pair) = Pair(this.first + o.first, this.second + o.second) + +fun main() { + val input = generateSequence(::readlnOrNull).toList().map { it.split(" ") } + val visited2: MutableSet> = mutableSetOf() + val visited10: MutableSet> = mutableSetOf() + val lookup = mapOf("D" to Pair(0, 1), "U" to Pair(0, -1), "L" to Pair(-1, 0), "R" to Pair(1, 0)) + val rope = MutableList(10) { Pair(0, 0) } + for ((dir, steps) in input) { + for (j in 1..steps.toInt()) { + rope[0] = rope[0] + lookup[dir]!! + for (i in 0..rope.size-2) { + val dx = rope[i].first - rope[i+1].first + val dy = rope[i].second - rope[i+1].second + if (Math.abs(dx) >= 2 || Math.abs(dy) >= 2) + rope[i+1] = rope[i+1] + Pair(dx.coerceIn(-1..1), dy.coerceIn(-1..1)) + } + visited2.add(rope[1]) + visited10.add(rope.last()) + } + } + println(visited2.size) + println(visited10.size) +} diff --git a/Media/2022/09.png b/Media/2022/09.png index 3a2477e9965f46d4cb2ec01d8a7432024eb50b75..b02492e164b6aec41b2c7efbc209f23e041e4bd7 100644 GIT binary patch literal 9863 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 literal 10051 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 LC|xP}HR%5U^`qa$ diff --git a/README.md b/README.md index 8631d5e..5db3bd4 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ - +

From e94d8509f69d818d09a3aa48d9bea770b984afe1 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 10 Dec 2022 07:01:40 +0100 Subject: [PATCH 023/225] Add day 10 --- 2022/10/10.py | 11 ++++ 2022/10/example.ans | 7 +++ 2022/10/example.in | 146 ++++++++++++++++++++++++++++++++++++++++++++ 2022/10/input.ans | 7 +++ 2022/10/input.in | 142 ++++++++++++++++++++++++++++++++++++++++++ Media/2022/10.png | Bin 0 -> 9106 bytes README.md | 5 +- 7 files changed, 317 insertions(+), 1 deletion(-) create mode 100644 2022/10/10.py create mode 100644 2022/10/example.ans create mode 100644 2022/10/example.in create mode 100644 2022/10/input.ans create mode 100644 2022/10/input.in create mode 100644 Media/2022/10.png diff --git a/2022/10/10.py b/2022/10/10.py new file mode 100644 index 0000000..939869d --- /dev/null +++ b/2022/10/10.py @@ -0,0 +1,11 @@ +import sys +X, s = 1, 0 +crt = [[] for _ in range(6)] +for cycle, line in enumerate(sys.stdin.read().replace(" ", "\n").split()): + crt[cycle // 40].append('#' if X - 1 <= cycle % 40 <= X + 1 else ' ') + if (cycle+1) % 40 == 20: + s += X * (cycle+1) + if line not in ["addx", "noop"]: + X += int(line) +print(s) +print(*[''.join(line) for line in crt], sep='\n') diff --git a/2022/10/example.ans b/2022/10/example.ans new file mode 100644 index 0000000..323646a --- /dev/null +++ b/2022/10/example.ans @@ -0,0 +1,7 @@ +13140 +## ## ## ## ## ## ## ## ## ## +### ### ### ### ### ### ### +#### #### #### #### #### +##### ##### ##### ##### +###### ###### ###### #### +####### ####### ####### diff --git a/2022/10/example.in b/2022/10/example.in new file mode 100644 index 0000000..37ee8ee --- /dev/null +++ b/2022/10/example.in @@ -0,0 +1,146 @@ +addx 15 +addx -11 +addx 6 +addx -3 +addx 5 +addx -1 +addx -8 +addx 13 +addx 4 +noop +addx -1 +addx 5 +addx -1 +addx 5 +addx -1 +addx 5 +addx -1 +addx 5 +addx -1 +addx -35 +addx 1 +addx 24 +addx -19 +addx 1 +addx 16 +addx -11 +noop +noop +addx 21 +addx -15 +noop +noop +addx -3 +addx 9 +addx 1 +addx -3 +addx 8 +addx 1 +addx 5 +noop +noop +noop +noop +noop +addx -36 +noop +addx 1 +addx 7 +noop +noop +noop +addx 2 +addx 6 +noop +noop +noop +noop +noop +addx 1 +noop +noop +addx 7 +addx 1 +noop +addx -13 +addx 13 +addx 7 +noop +addx 1 +addx -33 +noop +noop +noop +addx 2 +noop +noop +noop +addx 8 +noop +addx -1 +addx 2 +addx 1 +noop +addx 17 +addx -9 +addx 1 +addx 1 +addx -3 +addx 11 +noop +noop +addx 1 +noop +addx 1 +noop +noop +addx -13 +addx -19 +addx 1 +addx 3 +addx 26 +addx -30 +addx 12 +addx -1 +addx 3 +addx 1 +noop +noop +noop +addx -9 +addx 18 +addx 1 +addx 2 +noop +noop +addx 9 +noop +noop +noop +addx -1 +addx 2 +addx -37 +addx 1 +addx 3 +noop +addx 15 +addx -21 +addx 22 +addx -6 +addx 1 +noop +addx 2 +addx 1 +noop +addx -10 +noop +noop +addx 20 +addx 1 +addx 2 +addx 2 +addx -6 +addx -11 +noop +noop +noop diff --git a/2022/10/input.ans b/2022/10/input.ans new file mode 100644 index 0000000..c0147fc --- /dev/null +++ b/2022/10/input.ans @@ -0,0 +1,7 @@ +15880 +### # ## #### # # ## #### ## +# # # # # # # # # # # # # +# # # # ### ## # # # # +### # # ## # # # #### # # ## +# # # # # # # # # # # # +# #### ### # # # # # #### ### diff --git a/2022/10/input.in b/2022/10/input.in new file mode 100644 index 0000000..59c5e14 --- /dev/null +++ b/2022/10/input.in @@ -0,0 +1,142 @@ +noop +noop +noop +addx 3 +addx 20 +noop +addx -12 +noop +addx 4 +noop +noop +noop +addx 1 +addx 2 +addx 5 +addx 16 +addx -14 +addx -25 +addx 30 +addx 1 +noop +addx 5 +noop +addx -38 +noop +noop +noop +addx 3 +addx 2 +noop +noop +noop +addx 5 +addx 5 +addx 2 +addx 13 +addx 6 +addx -16 +addx 2 +addx 5 +addx -15 +addx 16 +addx 7 +noop +addx -2 +addx 2 +addx 5 +addx -39 +addx 4 +addx -2 +addx 2 +addx 7 +noop +addx -2 +addx 17 +addx -10 +noop +noop +addx 5 +addx -1 +addx 6 +noop +addx -2 +addx 5 +addx -8 +addx 12 +addx 3 +addx -2 +addx -19 +addx -16 +addx 2 +addx 5 +noop +addx 25 +addx 7 +addx -29 +addx 3 +addx 4 +addx -4 +addx 9 +noop +addx 2 +addx -20 +addx 23 +addx 1 +noop +addx 5 +addx -10 +addx 14 +addx 2 +addx -1 +addx -38 +noop +addx 20 +addx -15 +noop +addx 7 +noop +addx 26 +addx -25 +addx 2 +addx 7 +noop +noop +addx 2 +addx -5 +addx 6 +addx 5 +addx 2 +addx 8 +addx -3 +noop +addx 3 +addx -2 +addx -38 +addx 13 +addx -6 +noop +addx 1 +addx 5 +noop +noop +noop +noop +addx 2 +noop +noop +addx 7 +addx 3 +addx -2 +addx 2 +addx 5 +addx 2 +noop +addx 1 +addx 5 +noop +noop +noop +noop +noop +noop diff --git a/Media/2022/10.png b/Media/2022/10.png new file mode 100644 index 0000000000000000000000000000000000000000..e49a762c34f877a738568d2ec9a0cb26d07ce006 GIT binary patch literal 9106 zcmY+KbySp3xW^Y%l#)=lRZe-UwA?8GIZH8~^}-FDEOhhJN>9d+eO*z$3-VXL?mV} zSR?8BlKz;=zRxeHRh^&sb4hJA$u#_M??n6OxAtWrUv1)6#pdQ86zmjPbg923685_F z=G`0ITvf}nKkTG?jAA4Rh%VbBu2;-!1fcGMyrSPTh6vIAzop{s65Zrjstr^~ zD_z|CG+;=<`9bo;V1)%pZX*)I?ts?-cC2=u@B|>7xNq9+RQ)gdr6XtgTE+djPE}Rc z{oi?m6Z6N~Pe;Qd@YqqATi>d6p&<@%aj8Db`?58$QrqiW18p~jBJ(ii54;yvdhtkrb|l)4p;lT}F}`~3J{i}D6 zDbM?X-eVYaJjoUdpjAzto)n{haer-4{jXQt){LajbRtO0P=?xP37HP4^y;_7{g{vP zyafT@ZsU;Pm^u3&crYLOKU`(fY#tDhMpX zj??y3miBl`JFOFK`J<`&1r^sBFDUS{F>UGAWTcorWy$WV{QC?Sw)CZaj*C_@2b<$x zNPuQK4Kl-X-<+CS&M^ zE%2n}3ezPno6nHFc9S*|8sc3m8M?S?wloj@KJkZCr;~Y|%8nK)6U>YvsMlTUkD3El zikpQ$sP3>^!62;fOPq_&yIH&W80f&%QuB)SEg!F*t(gwf#u@EJVzYuU0wjtVV6vy# zr<(e-JLEENI>glzaqc*e4;8d6jq&T&Fx$hP$2T<;OUNj=Z}ofxi7)i402 z8udOHQc{^bRiFLbac;yPdNX9mH`=|U%UH03MnBEIyOM=^Q; z*`<2*(}n#=Ch@wO-{kjeWb_ch$DGPSe0{|&%wj!G&3n6k^BkE>x3Wx87SIN$Zoe&w z1IBhzqU-(`lPN@x_}BYRl_a*)*Jao7Eb*UkYk7xSYP9OcWXC5)o^I$A*wYpju}&ud zJp7>f_GiE{VM*A=a5$Wh@(+k`-8|S!2?yFy$0dopaX%hnagY!LOf7hwm&R?xP{}xu z7!ACkHo<6b(Sn@y>I#9zAHLL*O>aMRvEZU7(VxNWC9KfvQe1O7kpG(;Kp8jis2m9u|nWURl&NHB4Fjl=Qi|NVKhf#q-=&$lc zj$a(bYxFe|PailD3Tr{XURTG~Oz(Y@F|t-=Nr*WRiM8{s#07MP`J|+eb2C0~f&}pxRn`f3X9yMuj4cB5vEF9A=Xhug7oc>@-xZ|w4H{sUzQ{`S{;pvQGz6TsNchMZQVFPx$&*w;#0>9YB?d@$!mV40#m73K00~;=&mR##75?C;4 z?5RM0$+5iI6X&9E<=zJeqp@j@`}32|F9O(~go1wzk|^?G0oFlvAKk*`_pSlrw6Gui zT7bsXZ}-FfwIr}0WF!GmWP!)Y9s>2}dTY0suIlyF!ID3d-EAr#2c>X;l?79#u-VVs z%OaE&N9jet_!=uus%ekvZGB_8-BMOaQ}5uR%>~209~ZJe^7PlIh^GJo`L{Bjv&Mq{ zZD}I3vr_!>y!qdtU~L08gBp8gKh~FyZ zl5k{#HG#MQ!E~J<#V*U&Jjqfr9=N@*$nVS~+Lh#(xsti+Sj}?)aXZ}^Se-{>Ge@Sp zzbbsg?U|*qm09Az>zD(5Mz^~tD@IM4gopx>ff6gyp=DR=?t~wWME3Qh`#1IFCJngO zy3Ksh=~+&_*3(@`VOWUQ+>;;wp(+DX`2ckUVThRM-fug=DefP>M%<*Ry~1I1*N_cw zfNOsM4n%e5(9tskjy$R`1K>;;g^sr-O1)P?*pl(ld1=TaYXiK?YO-*KjhF)+2QLQp zpNX0WO^V^M%Zv{fT}%29F-gN{Ef?7uQz?_)`DKTAIR>a&f6iBPDQ_%%Kfb8`a!YHH z@E6B)=t1gBSQ#e}~_nR|+I3d;ce3+M&E6faXioYhzYIVvAC5b&{AQYb3d79&xd9jH*j_V>yVgO+}Lv*5>_U*W~=sRN&{ z0<$Mec~q_DagBr@MIJdR4wNDNrEiU%b+Qr4T^I~{IUr=QV&XNIghgk~z~OAwWD)P? zM~`92d6$gqNmIvR^G=2_xTV&+f+;D%#i}!}`SVimR~ghWTqY(?GjO zXAFFw%LmvbXTnhQk*6Ej$lq-ba>+oaQ1N0SlH%o3Up623*TVV=dP*lfa6Gb_E9O4a z*L0wVAVu3aC;cGHqo`O^8P_eFboV9Tme~2fM3h{+nr3y;#=4@@JAp%=RjyZViz2Q` zt*sw9e9nj;M(lD(GX1u-Y^H@3Z;_fX7}hVv46C~|EH71`K$fi*W{Cwt`eZ0HMFRfKriwNv}d0b1gX}yL5ueGl^4q57v zQURXQ6^pZ2k%psDd9Zyzwe3M;?aFbKkie&GupF`Z+Qy|YT|{7LkQ$I6 z-^cFIlwjb0{uwIHz@4V~>dDQHsFVS?g97YO2UZ)~XW`;WtyI8Mwh>aCpJ-fRe1$nT z|M8VupkxrC#{&9#> zIxiHL_Ko?@h}VjZ`T6MEjpp;Adxf2i`=5!A&=xFpa8J(nmyW6A8|QjCY|txRd9o6w zq2cXp_V1aWCYA(o@H{DdETX`4EeE1v8B^07{CT0sTAtw2#!9c%gxJ`Kf-XIDcJ%=dVf6n zrPihN822YuV6TqF+fzTA!c)Pa)?0FAjSO^|>uQ(J`_Yi>g^0eP1v0Pd0jbO*s1 zS9y_fAS#du1wVJmX9{Wb^J4g2sI)H7Wj%bFn`GNlU$X3tk0S`6Oaks zp5*vtwcz>T`l!i@X1}?t+T*-p2C#A!Rs-sGX456+Ve`xI5;OEY(#uiMx7iw83*&gW z$dD*rY;<(}mHfq^?AYLo^sh)oy5YzZ-a?x@k2n}4#^<(Ph# zBbH>5-D=uC$&I>n7Go^bFO&30O(v_k`x^MZAcLe&cQK%f|Eh=8X{3nBVAdo_pUTjY+t^VN0HggW$wqog{6qGV)Awp z@^GR2Wq_mOY=HtEC}T4H_$~4DlYCHtDl5SfyQiPLBdBIY*`F#=B8zIn?L?W|AB55V zU^C}1`l8Hsw=wgZQo)a{?i;Eo?rs9uAwDY`CL_- zzXq)(4^4?}km2ZRtcUS*F9LZAJmka_=c2dpLG1M80+g8e2U_$lgVOp+ab{we&muzVWP5sg!m``E=kkp7Mzf#;3# z>JAW^QnBgpg>$|3ArcpWW-CT}U9_{Q@8ny9wSd{?cL;&mVfTBQ2H#9CUiwcNrGkGC z>&XkS{E5>%j<4DY37S1T9?|%`mxzw7iMf8E;^XR&bD`dsV8Efh`ZQQto6r7Dt}ew@ zhuH$BgJ@Qo{`ex2ku;n^dt(?)W3RPdNVsq!R}`+=HTlazH~PC4bSKHt1X@+6*8e); zOUc#deqI;m?&qTp%15r1UHw2{&sLq>UoHnB4~~4_t>3pWQDJY98ZgS|7^y6>&@0lh z8&elTNV6(s$uv91q5pdiuF-atusA@nz_pvbXZ)e7$9M54_eeeaaMf)RFM02Y!FsII zU(WvPI@T?fRK2RT#U~Mp)W9KfW>go^VS@|&`WHogMhjb9e=k-ud_Z-))CcRJE z5*eS|utO312bae*}y%a z+Zn~>Cc4AX5VQj0w6Gb0@8oh&<+1IUv6903y~UrJ1nJ?ENfk47%6=ozi`vxqSdk_=F&Vc7Hu1mqpL5XU z;h2kl6ih@=F?hQ`OXv*Ed!q7dKn0WBMs z8Z7^rrJ#9ypNf1H-BfRlH*dFt+8i|-&NMhL_%aY0ttlEO5U!q;Y})T99!#w4`YM-o za-EN-rzGPhmlgB^CpypQcp_Z4?^ADIQDX+QMGYrS?%0u4`+K_tB?{Gm#_$34dNnb) zd99z!twFRb01wKp4>{8 zNdr!kHr{+savr(5bC~LFB^E)&XS^0clyqm%aOGwiIp^h@oo?$dw)coaQo+gnmx0t=_J-y}rpvwt^S?sksYzXzn`W*@G_^Wk`%9#4sA*367z^QLKvW!-p= z{Oq9EENAS>q0V_iNl{xL(kJA{6R~dZ5Lm>Jt6{(HQRflS(DKp0vxOy47Thz{3ZLM7 zJyYviNQyuQSOm4Yw4)q@V}AQyrNy2^ADi-*)p)gvG@?0(MpK)G^40MnZo$G_8*dDrcl~2N5mlF+Sabm7^Kk-~af&ECW7i?j2w#?bfbNG#Ac02D# z0UayGF`tiIv*{|{hZKMrT?xN1X%Y@pPB1cUE{vFOze22dHmSrlj6$L2W;=dKZ^9XP zBoM5xAAq@qwG9Rs2NiLESzWW>Dgjw?=x5LOAU3W%&`R8wy zska)&0)fG7iozsqD)a!=_okqAy-#D_?9r-h7LT=*kX6W&vE1>a9xrB`GMz&PVLb2z z-{|085XWB^QGIafK*W61$WsKtGPz2!=2n}hVI}d>C6#rUO)+-h+M4Ar!9b^ViUgI* z_b1k58Z=eA{o8pYS>KbcaG(DM62epLv$LrQUmf(Eo*!>2gZPZ*0Fw|1kpaj`V>Wi1goVcw!z3BQS$7UbUYGsBM z16JUz*+_%>0CRXty@AIUt-#cB|H|26BskS?EaPiy3FMDEGl6E~K1MF9xCfL;l?1@B zL3H#P5Mbu?*}D~_4Roj_$hC%@S}Spnyn~T;-T2p;@&OVMry$yD?hgX_kT!78lkcTg zPozLO#7S1_&(M2X3aBJ0Rbhy?=eD3oUiHV>Ve^ExR}aF#koab=(9_J_pe&7%3i~q4 z{q|`3IJ^>P=!vvDzjHy8w(4Xlsl)7IwEfZg1VD}COmqbJRdyq?ggjBU9sAQem|VIc zdGk?vO$yXGu})F=JpcNsvKpZMce7LqZ^>0|TVnE~BSFT}hW9t)daC>Fx;ZbT7Ud}LmRFd+t?7JAL0c%%np`7z(Uw$nYYPQ7>o-^D z!+E*f_c{J8@w0R};Pp7Ag^lu5Q|C5mC+u&ctvrZUQ1OG+*MO4Yq9~K`l3ln);n%)& z1L_U)(P^g=QkFzVmakDX_phGD8bY$n%nd|_X#1d7u%Rb*Q!@x!BDys~xR(`jcEoqjJ7W*#12ej@+1f8SR zX=IN(h^=`(4RQun4+kO{v7a_L!&zN_LdFRsL@=3dauFhmZ`~|(;=U7MhF%&=ord}~ z*o%qcI073syPorI#a>+BRMpJ<`4{SCm|bDD^AwP)>d7P&+iNUJvv%4mMiBVIJoe=q zs+HPXHN^a!wSBoKPa_Vu6Ed?@5br$1LDB@T>J6U&ud5vR$d*g?&>zD^Rm2!=T)$t2XRg78WWFYA!a(NM;j5-+7_=ZOb1jb2>3?6tzo1;ex=tS~J>A3&XHNb;L)eV(($SEmlx$TBv>sl$ zIfV;?@|1GTGcGv>doOwNmRTUoLxMUCaWU5`DZBI?X&{6r&u^m<7DI_dnA}fChcHJ6 zFx$RmhAit?n`bV`6{vu%bC){?xjYyr0MxN#^11dWFT_(ec%;>^n0n>+BtVv-)|5AN zUb}_wWBXiMjXA-EWK0%b$tLB+RuuSaCBrZh2~l8&=2>`yGMaZy)@R0Y|GrDS#<%!7B9!$Sv{s zq(Mf@%TE{cbH>jd)=NGTuQ&mj%|YxpoBL@Z*oeq^86+Dz9p6;1D>O}}7R6uCVk+^@8}D7>d&FbXk8k6XpV!tm zoKnO}DU-j=1!V=o=YQAerfDNmv=N@y{yV#KM24K?FdfwrF&=`bZXPtR>RC43?Ui(k z-psxG>@7mWoQ39gOk$n6BWT#2C`CfcTgAs*NZW}tnwFF)ghiQwbx{kllj@Lpl$&v zVh2vRO0{FP)oubjnl-@;%V}GBL?(2k)psvH#g9ISKK9^ZP)N0&Kh&3C&z$>p_4d!qKh8+q;>bvu$d&A`qP+W ziK_if!*UyQ_Xw&@wV8Qsy&0Gz|I{D`fRzt3zQi2*Xey$15wmZt7_@lh82iW(-ogGO zkGC<6S2n8W<${aQE0>j(9m%uKm1bD6(m}^`4gCw~7VnGS5>=;qO;$+I3rV_6ICzX@ z!5}*)(!NZUbxv`=Ih6KQ|z+FsxSoY~U1{M>fY)1biolt}&_8Ys&SbQIZY7$nbp zTC<%Zmyz=)w@@*K;!z#i?}1IqZ60NcL(&icoKAz9R zl?+jjwq^a11CJ60`)^AiI&7~M&LwG4k7ajU>!5TbfwxWeaa#0cf0q{x3nDEvx!2fW zxrOjgqY;I{{ReKY>*7lIhZmj}y+)%>wQlZv1C_!r_Pep`1W`;TQXd38vtuuW67|A= z|Kjh2zdxv}GlF^nd!7oa;GPOPmk`3}Ky5R3DkV%I-t#sHFBWc($#K)+n@7dI&mFG$ z<0XQq`>ma{P_icwvb_SQ&#hld+YGre0RBx^IdRKqBwIWC`-Q}Ij+_$k45Tr|yb%Tt zl<2Z@Ian@#r$0y{y6Ay64wE0?0{CKTb|yPTJ`Tk+CKz1Yr@HcBZ^oR=-6Oh^+a8*qqG157jUE0K$8NpT1`$~f zSEeNxqIN8=7pBAVF*EkAJD!bRb1XYa<*M7Kye0Z)TqJgoQAmFa3D8F^f_z%*!l_yTN$pwxFiuo;2=+yd9l9cx<6dRbx-|c)4R8PZR`Dt+mm#$HwJng6g2xMt9O0ch8bQa zyGNE{GB06C26}Bfvs9*?84^r}5C6KmN^umyi*{^l+k69X{bYXam@kj&iK^_=Fyln! zqNr&B%Q!xBLrSH%0TNeMZIy)Au(_z?G?~*Tpw>wAnZe1DP+p7Yk~-R&44diZwMsxK zBkzxWy~D%qbKQ93zF0Uz|Fxg*r+!6JPK|KKc2d4t_vX>I`{s94j05 z@v#19Trt?Hb|joBx=lPR5oawgP*S zQMqcLsSKO4&~B->Qq+pI^tFP?6M&IM!ewxLXtlTK*;>)9!)Dz^+Wm<}h88PiZ|iBU zmc=JOg6D&~=7G6unDh6kQ$1Q}zmHpF(PUxnEb7u*c_VLzSDnl-{MdMm<^8pF>%{G& z*VWcM`3Pe3TgRukf?0H6!LgbmQmp-m4)*^$c%bdEF<>QnqJ=4LMMVSqG>!-=IPZEB zCU@$%jsbxE9V?}IpT7we5$H*mD-xyIDJCYJpI>@RJ+Y8*H!vG?Bxv4%g&8VyDfDYb zqn$Y@@k5@hD{4XoXZalxG~x9QYDL z%da_<@m_;y#d%8M`yyHDQ;0cq{_ux*Osu}W2CVE2-QGxA>lSHghE6lvbH&qvW;j?Y zyn;|BYevjW~h zD?}}Sxcz%^S;oe!xa3(Xzn1bbh%4!nfY(nMCo0GmH2V3|(eT~XZfsbc^M%S__QvR6 zY<^?>|Ca_t*Z9d%ufk7714{jRY

- 2022 - 18 ⭐ + 2022 - 20 ⭐

@@ -33,6 +33,9 @@ + + +

2021 - 50 ⭐

From 486776743779939127518c858e4f5068331326d3 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 10 Dec 2022 22:01:28 +0100 Subject: [PATCH 024/225] Add day 10 --- 2022/10/10.kt | 12 ++++++++++++ Media/2022/10.png | Bin 9106 -> 9011 bytes README.md | 2 +- 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 2022/10/10.kt diff --git a/2022/10/10.kt b/2022/10/10.kt new file mode 100644 index 0000000..bf054ac --- /dev/null +++ b/2022/10/10.kt @@ -0,0 +1,12 @@ +fun main() { + val vals = generateSequence(::readlnOrNull).joinToString("\n").replace(" ", "\n").split("\n") + .map { if (it.length == 4) 0 else it.toInt() } + .scan(1) {s, e -> s + e} + .withIndex() + println(vals.filter { (it.index+1) % 40 == 20 }.sumOf { (it.index+1) * it.value }) + val p2 = vals + .map { (i, v) -> if (v-1 <= i % 40 && i % 40 <= v+1) "#" else " " } + .chunked(40) + .map { it.joinToString("") } + println(p2.joinToString("\n").trim()) +} diff --git a/Media/2022/10.png b/Media/2022/10.png index e49a762c34f877a738568d2ec9a0cb26d07ce006..2132b2169eb1e36b3c7e8377bd925df08bcc2703 100644 GIT binary patch literal 9011 zcmV-3Bh1{1P)~Br3P280A%WihFrpF{^)6|GY z6Jv=b8atpUDn${HCP=SC8<_h2afT^p&XhC204DdvAHzBCoclcQx#zs?d7p>z-9|NR z#b#-y&EMU?&-jh^F6L#93hS?}mVbr3HVSK;TKgNX-FR&g*7&vdH(tB(vh|P7d>G}i zvq@p8RZuFxVuLZ*TDtmR>$CG8dGA<5NAD0>X<>ZTvIB?Z$>Dnn`3OhM9F*sx;22a& z0PqTh&Z z*0L51Cc>w|(G}S{0U+&ua2-dGcTCl@g{DxgLPHteK6LTb`!w(Tgix<2f47o5?Epkh zyvOIq&YtM+=ESRNl6?Mi5rB7}oK2K$@9tmx#=gI~WUPKocfq3{pt}VCmTiEetLEUv zJ*X+9U>|q2Tym$~kLMNhuWeM*$I}3*i+4FwjIQ+^Rwf71PHL0AN^wmgj`|&p^_IOFuxZMsNZa{1IorMq4e#r6_sR;{sNuh5_KP zDQ2TSI+QPTf8tUQjcq(Z4mn&2}*?5aKT{(-A|vdcn! zT;6?hwpM>OV_d6>0Mqb^Fj)Z5Q~>}=<&b#YoOv0uqu<_l`Cx7ZfLXP3t9Xc8fIBw< zH2_4;fJ%X^9Z)JXq-hz5zXvBjx0ZKrcG=$SG5}}(wa)l#acvub4g8Eo004)FB?Q5At(7vLU9eobzcX8w73 z!tqVNTapw)>jq$0&k0M>)q-0W$YrdWd0#zsg8sibH|teu6HC_&@-SN8Lg@XJIaKZB zcvscJ^|?k&iIYI3D=lRK`E2veFcIp20j|G6>1PWn|cU1v!_Jp&Crs30~ zGz$%7!^Hq^SI745{tf($NsBP+Q3NMIt-?T`PE0k0@CZWGEN~sc7a}YL(=z~oFVqwu z>{Y4NyU&-lbV>JJD5oT%1gV~*W}vkOt+y#kn(Skxg!`O*Yn=m|r5y|ckn|30+I(N%lxHviv{b`0n9Nap8UeAoxj{A;3K`n#;5FE|?~t6d-aHb<+Kh%$j)7iuwV0J})*sF2GwT=VqV%^M2!7(H**A=L2l+d$s5MxbMKfFQiQyQa9C2@g^g+iuzd)g3| ztod;gaPtFzo>p>U*`TIeriSSYOTgoVcxn3iEGA=)TTHn>07$#hXV|XroXs`#YnSz)(=%~l}?V71q0?m~u z%|_rP2tCo;iM^MLw;n5$DO99u5~ISU$)TiCVN8JgmS^T_{|$;qP&@#XoI~MpgDdcz zDcWBxEUy)sf(=hsrGl&vYzMUWN(-u6_M9)fR@rO^UM}jpHtK+0#&nSPl zD1T9;s}Gk44j%yI{g6q~-;IuXwAZ1nhTH=fBCkG7*;{=T)mJTiSD$ymYd;JNuQeET zHPaT>27ZRf7fGui5>uS5Ey4xUqgv~&6*_VkCIl@?2%Z$|NjdGxastl@LeIg)6E#|E zaJvAtMUWXePmg*n{|b5O3G45k8L@K_nxykrwvE*c1U$}zv!gR+M>;xiXk48Ek05vi zVbUU$W}z%wH_bB^YWY{lYpt-nTpZt-dv90@c{Rp1R#RA(9Qyq71mmHT_24*Q;yi>; zMg9@oE*LAd{43S4vYEFoam*=pqLgWm%#CM-_S=ZRvcOa)7E)Y4{-l?(( zu}HA>xdo5CcdVt$@?Kk7Pgf*H#0Yn z)gsX~zNK~T-=4Y2VllovQ8Ycq&qpMDxVc&&v{hbiQ z+{Y?Wns6vIgae25*L%&qKSl^ItxkIA-J>d%K@|@1UA62&=>MKuP~F_M@4~HuD$^T7 z2hrLk{rGVH*7ftXJO4uWFW1jx_#F?Vnt;Y&i{`26u z>vul;Tji)&uu-WKYd~me(p}QCi-Jk zpYEbRjSesI!9NxaWjc>|l~NOE$v4X6cS*eIlLB%|>a{;%)K)aw$AR5ID(ZTd1*adIYWVR}P|=YPylIwzRHe%TM_)tW2aRVFLHf zh#1|LXmoi8dg0;&Fm&$fL=-f+iH!%jiel0cN$t;q+-)Tz>^{#c){bXrjysHYptqYj@G}0cx ztsL}8AP^yTE(Us0I~W~-;{c(j=ChKa^mO49>oF}|Qetsz_xaM#*U$g=qceA%D{boR z^>uUl{i3+`p8k^sy1*lByS0D>X2keeE~JN&vlItOwX9O9x1TEh+nN+BugPFS9D&>U zv~GkNe_o!DTiUQ@dW18d`~JbJC3o7NUKAJV?c(R|^h-g__EW_!0*9B^q%=$V<_AUg zb>QM&-FNvyB(KKheFj?sDKWfi?x@EvpCM)rQrE!22~r7~E0Mbw1A}oI-TX28acyzd zk|`leri1|4cB+^NX;gBj{fQ5cKR!S99~sl!oq0{2eR<_gukFmy-)&{@QDIuNul0rH z1E?=0AEd11pRe8CuqugdX>MH$8-%r4nz;@XKf*`m#%%cNoK&WnGx$FHR!2`ilfn4v z`GvdAmH>$K6LlXBIQ28;JOQ2)`g;I??~IhyxV+!qsv;n1GUt!kRDnHzx4>K8(7AC( zwi#Y~3oF{+&2phZG?g2yjKXv+_x8)LRy3zX_*i*mH-F1ztl_(^$wJ;i z6raYF6P{L%b(({kWme_2Kvz3j^1|ogd;cs)z>J>jB8cFp2FI|&(KD*wG!I60M=MbOIQE| zBFn_q)Y$k(YGK#Jd*eoWCX|)q1pr9JB(W>Q3?+oXn1?B9k9Wac%`k~P*#Cd-d zF}86~YFSRNdkq1P(=C-*E(ZYcpt;XSZggR~zg_)IU}Nx|F}l1a+m4Z7rMvDM;Nfh2 zVINmV%Z2oB#xRB1UHNoJk(XLnBgASdUZp97_|S;e`ApCPS{K*9nY;Drjv_CGu!h1K z#R@WWwx=B`Iz9530BaW(H}Esu>Fmx|4Culh-NjFL6nV*gtPzc*s8*q?6|UB<6k|q= z-+%YzSuD1JpTS_jXM)9oI!Fecvxj2u$I~-XR+A4Z<&gEGs~N4gLCUb|AV9!Gcu#<< z4_E@l3ao4D?8_>y`!1`jkxp*Wv9BtSgk^{LoXwRqge4XUw7C&Yfw0ym91a3{w}FwV zWfli~4*1US4l~HG>gt2}&**O~W&;TF5(aq*SEPo$vOO!ejLP}iYF=w#&v&G*DYS#C z05ll+SDD9ybE3_h)ml3t)l4a>+bFX~EfX15r`-<#l4dAOEDbpGx&L}(hPM@ikMW`^ zXoY1TRRL(JrZ=0lU~*uvw~+Fb)>@B1i0SP5kxB7N*)AGiFu`k#j(T*rlKYWFhE=r+ zb%S}n>e_nh+YN%0IPbjfVDK08cNBdwNlvw#>9B@kc*V zInWsKx(6bBDm((g=AykG*MC8~VMKHHKt!a$%?}Qa=xW6$*}2FiU(gyjI&cneSSxVD z-q)bktA1-TxH9djDgw81=#`K1ciXr&MSoUZTgyxqrrode{I>>bHNHDfvpuE>BEzaa zoIS8vnt8Fb;jO)w2vq?%dc`0ggqc82`l<>}MEVm@%5m)o@(zH>#N4MK)QcS86^isH zA(x`?I4(&~(LlPNW9R#@a19JC5F@ObsgnIzF*eL9TmNX-` ztTEMUH(~%wlS4g({I~bz)wXtPYuVWY$*bUDZhnITIVJVxqxG8ttrmf_XxYuAh|cA1 zs3d*=W;48PHOSee+X_%$iY0$R_*9*dO?lyD#G!o}nI+Itm2rkuA`l1(q|~NmRI%EOdAnN; z>QkkFqzNPsN}Z~R`{A%C<7Jx3rSrOP#*`JvKSHroPnp3r{Yf~vqo+;BYapzDJ~Cs7 z5&gsw5F2hsRmiY!lkQ)F^?FU)!Alh@Y3BB1G8o=r@TT`A102Y$Fh6-g3F}q0a6Q0) zKtzrxu`h?5Y%?ozCCj@r^LVsn#*Rs@xV0w&1zLmk`ws`!m^S#C>~rsY7EWVEX`b;7`*Ah zGyv62U4Pi}OM}q_tf^c&8~7Qq>2MU`{I}GMHHDb*5Ta(GG7l^^e4`LO3jp{+gXe3% zT{@&uf~0rg)o-(H9-YyJO09l%XHF;02qHt=&D+~AfB(Q$l3zT47gr}o>1~6PDU@&Q zx}ZPowUXD-6^YAGmaSVzz+gR}FRpvy!{e{)$f|6T?0RwOyh#)bUY{H(So)72k6o?S z=k*9e^lV)E-lWF>k-;@`I_`Z1_dE};P)+W!13d=Y4DIyBq8xkXmNjlUQt+o`@pia@ zt;Y&4mNr-}rw7|qMPyhlY--54S%2(mwXu{lW<}}u0pv>6#vR!=Yjq8@mAnoD%zg}Q zwFV8?FU3HwW`Tt0y}9~8 zA=CBkC^NX$8@?3nAuKa98aqxGi$#Jp)5A>_7#1AJt@!37y{w3~sfx(3YR2CA@qy2; z(8Vw5>XW^)BkPjhVvd!(Tu01)910n7cIo=prg+cYsCzg)W`fxDis`MF1g}>J99`k) z3O~cyi3QK1vjNAq7#!5T(yBwQcS|Em?-&d|MqF5OSny|fd*5ZLO!08KEfX!)U{6-r zJNxsjc0>h6Y>qoE%J&}`Y1*;ym5QcKyDsYYeyrr>J8M*RZW~2rm$WF~#?D^-Y{>B; zo&aiF$dfGEQDMxDX~dDbo8$z!!3jwD9eILOKZEOb?*82~mu@?GgS6pbbRznZ@X=4# z+Pb9AEsM84_<}W1s??t!EBx9n?oLyYIwph#AoEo^ zUfr2fRBbv3C>2I7_70oH(4Qk@G8j>YVJy0>n=zcU2m%oR{eUo-jk#~`$vv1`0pPWr zIZKj4X2triUlQ*k;MTNsZ~ifF|3&hA2QezVFD16}GCf1I8C-cDihz#r!+DjI8C=JT zumF_YX@B_LqYtG=KQ=p#?$%a)NM(xe&X;aGRZK)rupV}f=wusm3|m^tmiI_rmHGVP z1RPJt9y)EIO!YN#1OOs~>r+2lSP2|M!U74M0xYUR`I8&K%)>KO_zfw8PAkc9Qb2S3|~l@cUgwF-^5(0B^~*bWeh z!54zV1BV9y@_xws(cg`Z2FUxzdM*D7dC70Av1zShz+4pav0ux-LSBR6{atVEZ@hNn z9iBMv`jjgAbco{ zQ{Dw9B54I~7vS0vFc_GSin&kW_$TNZ^t~xO2CgFjd_SO>KTVDBSvwEfA(KL>0Fw=&C%8PM z3`Xfzo1M@d345*an%C$3zmag zYGK@#Bl+5eXIFv4j2OSa@5mk^uf?ak??Sn$46Bs9{oN=$j`XKAF`-RmShbs~NM7?K z-iOko3#(hK$s9}Kr6;V-(#(020{`EGX>ae#)9=a=G1grK4ghY|cj$YWQL@s-LD~5< z%zXdgRqa-m(z^C9{M^FHQ`3cfaL;KgPT?9P5tCFQ&%@y!r6-A1{_0 z`}fddr3J0ErFuKJ3aeW?dio>$G%ig&{qh6373*e1YW*{pr-UBPt9pTZ|Im4Dz_{o~ zlDy`Pc_)W>a@ovlm6l&u#=JCyH9OYtpASzjy4|`sG1x~$!=q({YPnk~*U!|t`+TXt zyHiSp7(k?-DBM@%USPYs^N2oOGZ|LxrYe%xJSA`P1n+LCth(7k%8yibjPXIMg!M`P zJ^*v#0zNo&?b%OH-f8XG^k5p(C`7SBr3OH9FCHOPv6u`Wkz4t~S|`44I%7pj7?;hu zWEiY$=h>1O(SBk#!MzEQl}4L`t;AiRDvkr({WX6K2KYkFXJQAllRM`A9xM)uPQX=+ zv;L=&!+ny&eT<`$cnJBFJH`Y&&cs0XiGl8Kg=ZLFpMXwo#3U?>gODk@r5k-~tD7}B z8*5s+-`#)Z<+Uk!<&9S>bbBSMnj~d)9nURGU@#cXlD?g>=eqF)EQ9XT)z7fn_On+< zJ!0oV=mjS?)Luu)IdC13v=Y)Ti2PtC!|L#=*)T;ag5nVr4*(_SP zc`ZDIeB-@60Ad2%w>&e~)b$DIgr!!aEC<1f(0bRKvGzc2#q?<3O%JAJY(CP}C(|DP z>sM$0dhe7MRwTOcczqI7T{U$93TSWOqipIxM=x*7x_?&WLvy0ry8FNSd0DqF%6i!LbcqbB>sgu!=<-|)^n$^_yk}6B4FDoBt{lWbugMIn!~TvWQly%K z_BU&hciE=>l*cdMYBY0w0tO9a(Fqg{&V=c+ws-d%yVbt*&3WU?HFfsA^v!vjTZEz$ zc=Vu2Ya2UzU;O%H$-0ZSi?!ze&!1i5Qm}@D9wW0ct3|xhE?7Y z%X?`|VJxc(!ye~-w5;6}l;ItwiNltE*nYgpY=apMX*Xnjn06oHmrx075JZO67q4fw zclVQ`WLb$Zt||;~ocB?*Hfjd^CqmMQvtOf)&g*K3ykw^rHFCcv7o*IuO7I#7qOp?K zhHnwD+w*07w^27uF-}$W8}At89iBMv9002ovPDHLkV1iFzqGbR8 literal 9106 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 - +

From fadee6aab71d05fabf7324c25b903d0b56971602 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 11 Dec 2022 06:58:23 +0100 Subject: [PATCH 025/225] Add day 11 --- 2022/11/11.py | 42 +++++++++++++++++++++++++++++++++++ 2022/11/input.ans | 2 ++ 2022/11/input.in | 55 ++++++++++++++++++++++++++++++++++++++++++++++ Media/2022/11.png | Bin 0 -> 7415 bytes README.md | 5 ++++- 5 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 2022/11/11.py create mode 100644 2022/11/input.ans create mode 100644 2022/11/input.in create mode 100644 Media/2022/11.png diff --git a/2022/11/11.py b/2022/11/11.py new file mode 100644 index 0000000..21b9e75 --- /dev/null +++ b/2022/11/11.py @@ -0,0 +1,42 @@ +import sys, math, operator + +monkeys = [] + +class Monkey: + modulo = 1 + def __init__(self, monkey: str): + _, items, op, test, if_t, if_f = monkey.split("\n") + self.items = [int(a) for a in items.split(":")[1].split(',')] + ops = {"*": operator.mul, "+": operator.add} + *_, op, arg = op.split(":")[1].split() + self.op = lambda x: ops[op](x, x if arg == "old" else int(arg)) + self.divisible_by = int(test.split()[-1]) + Monkey.modulo *= self.divisible_by + self.if_t = int(if_t.split()[-1]) + self.if_f = int(if_f.split()[-1]) + self.passes = 0 + + def round(self, div_by_3: bool): + for item in self.items: + new_worry = self.op(item) // (3 if div_by_3 else 1) % Monkey.modulo + self.passes += 1 + new_index = self.if_t if new_worry % self.divisible_by == 0 else self.if_f + monkeys[new_index].items.append(new_worry) + self.items.clear() + + +monkeys2 = [] +for i, monkey in enumerate(sys.stdin.read().strip().split("\n\n")): + monkeys.append(Monkey(monkey)) + monkeys2.append(Monkey(monkey)) + +for i in range(20): + for monkey in monkeys: + monkey.round(True) +print(math.prod(sorted([a.passes for a in monkeys])[-2:])) + +monkeys = monkeys2 +for i in range(10000): + for monkey in monkeys: + monkey.round(False) +print(math.prod(sorted([a.passes for a in monkeys])[-2:])) diff --git a/2022/11/input.ans b/2022/11/input.ans new file mode 100644 index 0000000..a0acf60 --- /dev/null +++ b/2022/11/input.ans @@ -0,0 +1,2 @@ +108240 +25712998901 diff --git a/2022/11/input.in b/2022/11/input.in new file mode 100644 index 0000000..f505c2e --- /dev/null +++ b/2022/11/input.in @@ -0,0 +1,55 @@ +Monkey 0: + Starting items: 83, 97, 95, 67 + Operation: new = old * 19 + Test: divisible by 17 + If true: throw to monkey 2 + If false: throw to monkey 7 + +Monkey 1: + Starting items: 71, 70, 79, 88, 56, 70 + Operation: new = old + 2 + Test: divisible by 19 + If true: throw to monkey 7 + If false: throw to monkey 0 + +Monkey 2: + Starting items: 98, 51, 51, 63, 80, 85, 84, 95 + Operation: new = old + 7 + Test: divisible by 7 + If true: throw to monkey 4 + If false: throw to monkey 3 + +Monkey 3: + Starting items: 77, 90, 82, 80, 79 + Operation: new = old + 1 + Test: divisible by 11 + If true: throw to monkey 6 + If false: throw to monkey 4 + +Monkey 4: + Starting items: 68 + Operation: new = old * 5 + Test: divisible by 13 + If true: throw to monkey 6 + If false: throw to monkey 5 + +Monkey 5: + Starting items: 60, 94 + Operation: new = old + 5 + Test: divisible by 3 + If true: throw to monkey 1 + If false: throw to monkey 0 + +Monkey 6: + Starting items: 81, 51, 85 + Operation: new = old * old + Test: divisible by 5 + If true: throw to monkey 5 + If false: throw to monkey 1 + +Monkey 7: + Starting items: 98, 81, 63, 65, 84, 71, 84 + Operation: new = old + 3 + Test: divisible by 2 + If true: throw to monkey 2 + If false: throw to monkey 3 diff --git a/Media/2022/11.png b/Media/2022/11.png new file mode 100644 index 0000000000000000000000000000000000000000..f66641d377fe82e93460c96bbcfe65886de827e6 GIT binary patch literal 7415 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

- 2022 - 20 ⭐ + 2022 - 22 ⭐

@@ -36,6 +36,9 @@ + + +

2021 - 50 ⭐

From 09b7965eb713a4a8710d06ba6c3427447fc89a2b Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Mon, 12 Dec 2022 06:48:21 +0100 Subject: [PATCH 026/225] Add day 12 --- 2022/12/12.py | 23 +++++++++++++++++++++++ 2022/12/input.ans | 2 ++ 2022/12/input.in | 41 +++++++++++++++++++++++++++++++++++++++++ Media/2022/12.png | Bin 0 -> 9182 bytes README.md | 5 ++++- 5 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 2022/12/12.py create mode 100644 2022/12/input.ans create mode 100644 2022/12/input.in create mode 100644 Media/2022/12.png diff --git a/2022/12/12.py b/2022/12/12.py new file mode 100644 index 0000000..cbb2943 --- /dev/null +++ b/2022/12/12.py @@ -0,0 +1,23 @@ +import sys, collections + +field = sys.stdin.read().strip().split("\n") +S = next((i, f.index('S')) for i, f in enumerate(field) if "S" in f) +E = next((i, f.index('E')) for i, f in enumerate(field) if "E" in f) +field = ' '.join(field).replace("S", "a").replace("E", "z").split() +best_from_start = {} +is_valid = lambda y, x: 0 <= y < len(field) and 0 <= x < len(field[0]) +for sy, sx in [(sy, sx) for sy in range(len(field)) for sx in range(len(field[0]))]: + if field[sy][sx] == 'a': + queue = collections.deque([(sy, sx)]) + dist = {(sy, sx): 0} + while queue: + y, x = queue.popleft() + for y2, x2 in [(y+ya, x+xa) for ya, xa in [(1, 0), (-1, 0), (0, 1), (0, -1)]]: + if is_valid(y2, x2) and (y2, x2) not in dist: + if ord(field[y2][x2]) <= ord(field[y][x]) + 1: + dist[(y2, x2)] = dist[(y, x)] + 1 + queue.append((y2, x2)) + best_from_start[(sy, sx)] = dist.get(E, 1e9) +print(best_from_start[S]) +print(min(best_from_start.values())) + diff --git a/2022/12/input.ans b/2022/12/input.ans new file mode 100644 index 0000000..03ea824 --- /dev/null +++ b/2022/12/input.ans @@ -0,0 +1,2 @@ +391 +386 diff --git a/2022/12/input.in b/2022/12/input.in new file mode 100644 index 0000000..ce89a91 --- /dev/null +++ b/2022/12/input.in @@ -0,0 +1,41 @@ +abaccccccccccccccaaaccccaaaaaaaaaaaaaccccccaacccccccccccccccccccccccccccccaaaaaa +abaaccaacccccccccaaaaaccccaaaaaaaaaaaaaccccaaacccccccccccccccccccccccccccccaaaaa +abaaccaaacccccccaaaaaacccaaaaaaaaaaaaaacaaaaaaaaccccccccaacccccccccccccccccccaaa +abcaaaaaaaacccccaaaaaacccaaaaaaaaaaaaaacaaaaaaaacccccccaaaacccccccccccccccccaaaa +abcaaaaaaaaccccccaaaaaccaaaaaaaaccaaaaaccaaaaaaccccccccaaaaccaaaccccccccccccaaac +abccaaaaaacccccccaaaaccaaaaaaaaaacaaaacccaaaaaacccccccccakkaaaaaacccccccccccaacc +abccaaaaaacccccccccccccaaaaaaaaaaccccccccaaaaaaccccccckkkkkkkaaacccccccccccccccc +abccaaaaaaccccccccccccccccaaaaaaaaaccccccaacaaacccccckkkkkkkkkaccccccaccaaaccccc +abccaacaaacccccaaccccccccaaacacaaaacaaccccccccccccccakkkoppkkkkicccccaaaaaaccccc +abccccccccccccaaaccccccccaacccccaaaaaaccccccccccccccjkkooppppkiicccccccaaaaccccc +abccccccccccaaaaaaaaccccccccccaaaaaaaccccccccccccccjjjooopppppiiiicccccccaaacccc +abaaacccccccaaaaaaaacccccccaacaaaaaaccccccccccccccjjjjooouuppppiiiiiicccccaacccc +abaaaccccccccaaaaaaccccccccaaaccaaaaacccccccccccjjjjjooouuuupppiiiiiiiiccccacccc +abaaaaaacccccaaaaaacccccaaaaaaaaaacaaaccccccccjjjjjjooouuuuuupppppiiiiiicccccccc +abaaaaaacccccaaaaaacccccaaaaaaaaaacccccccccccjjjjjooooouuxxuupppppqqqijjjccccccc +abaaaacccccaaaaccaaccccccaaaaaaccccccccccccciijjnooooouuuxxxuuupqqqqqqjjjdddcccc +abaaaaaccaaaaaaccacccccccaaaaaaccccccccccaaiiiinnootttuuxxxxuuvvvvvqqqjjjdddcccc +abaaaaaccaaaaaacaaaccaaccaaaaaaccccccccccaaiiinnnntttttuxxxxxvvvvvvqqqjjjdddcccc +abaaccacccaaaaacaaaaaaaccaaccaaccccccccccaaiiinnnttttxxxxxxxyyyyyvvqqqjjjdddcccc +abcccccccaaaaacccaaaaaaccccccaaaaacccccccaaiiinnntttxxxxxxxyyyyyvvvqqqjjjddccccc +SbcccccccaaaaacaaaaaaaaccccccaaaaaccccccccciiinnntttxxxEzzzzyyyyvvqqqjjjdddccccc +abcccccccccccccaaaaaaaaaccccaaaaaaccccccccciiinnnntttxxxxyyyyyvvvvqqjjjdddcccccc +abcccccccccccccaaaaaaaaaacccaaaaaacccccccccciiinnnttttxxxyyyyyvvvqqqjjjdddcccccc +abccccccccccccccccaaaaaaacccaaaaaaccccccccccciiinnnntttwyyywyyyvvrrrkkjdddcccccc +abcccccccccccccccaaaaaaaaccccaaaccccccccccccciiihnnnttwwwywwyyywvrrrkkkeeccccccc +abcccccccccccccccaaaaaaaaccccccccccccccccccccchhhmmmsswwwwwwwwwwwvrrkkkeeccccccc +abcccccccaacccccccacaaacccccccccccccccccccaacchhhhmmsswwwwwswwwwwrrrkkkeeccccccc +abcccccccaaaccacccccaaacccccccccccccccaaccaaccchhhmmssswwwssrrwwwrrrkkkeeccccccc +abcccccccaaaaaaacccccccccccaaaccccccccaaaaaaccchhhmmssssssssrrrrrrrrkkkeeaaacccc +abcccccaaaaaaaaccccccccccccaaaaccccccccaaaaaaachhhmmmssssssllrrrrrrkkkeeeaaacccc +abccccaaaaaaaaaccccccccccccaaaacccccccccaaaaacchhhmmmmsssllllllllkkkkkeeeaaacccc +abccccaaaaaaaaaccccccccccccaaacccccccccaaaaacccchhhmmmmmlllllllllkkkkeeeeaaccccc +abcccccccaaaaaaccccccccccaacccccccaaccaaacaacccchhhmmmmmlllgfflllkkffeeeaaaacccc +abccccccaaaaaaaccccccccccaaaaaaaaaaaaaccccaacccchhhggmmmggggffffffffffeaaaaacccc +abccaacccaacccaaaaccaccccaaaaaaaaaaaaacccccccccccgggggggggggffffffffffaacccccccc +abaaaaccaaaccccaaaaaaccccaaaaaacaaaaaaccccccccccccgggggggggaaaaccffccccccccccccc +abaaaacccccccccaaaaaaccaaaaaaaaaaaaaacccccccccccccccgggaaaaaaaacccccccccccccccca +abaaaaacccccccaaaaaaaccaaaaaaaaaaaaaacccccccccccccccccaaacccaaaaccccccccccccccaa +abaaaaacaaaaccaaaaaaaacaaaaaaaaaaaccccccccccccccccccccaaaccccaaaccccccccccaaacaa +abaaaaacaaaaccaaaaaaaaaaaaaaaaaaacccccccccccccccccccccccccccccccccccccccccaaaaaa +abaaacccaaaaccccaaaccccaaaaaaaaaaacccccccccccccccccccccccccccccccccccccccccaaaaa diff --git a/Media/2022/12.png b/Media/2022/12.png new file mode 100644 index 0000000000000000000000000000000000000000..541c2d5c2c79c903c637c7d7799f5409765ebebc GIT binary patch literal 9182 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

- 2022 - 22 ⭐ + 2022 - 24 ⭐

@@ -39,6 +39,9 @@ + + +

2021 - 50 ⭐

From ef71debb45c0e0b24831be25a0091ab321e44b9f Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Mon, 12 Dec 2022 20:10:37 +0100 Subject: [PATCH 027/225] Add day 11 --- 2022/11/11.kt | 51 ++++++++++++++++++++++++++++++++++++++++++++++ Media/2022/11.png | Bin 7415 -> 7474 bytes README.md | 2 +- 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 2022/11/11.kt diff --git a/2022/11/11.kt b/2022/11/11.kt new file mode 100644 index 0000000..3eb3e3d --- /dev/null +++ b/2022/11/11.kt @@ -0,0 +1,51 @@ + +class Monkey(monkey: String, divideBy: Int = 1) { + companion object { + var modulo: Long = 1 + var monkeys: MutableList = mutableListOf() + } + var counter = 0L + val divideBy = divideBy + val attributes = monkey.split("\n").drop(1).map { it.split(":")[1].trim() } + + val items = attributes[0].split(",").map { it.trim().toLong() }.toMutableList() + val opMultOrAdd = attributes[1].split(" ")[3] + val opArg = attributes[1].split(" ")[4] + val opFunc: (Long, Long) -> Long = if (opMultOrAdd == "*") Long::times else Long::plus + fun op(x: Long) = opFunc(x, if (opArg == "old") x else opArg.toLong()) + val divisibleBy = attributes[2].split(" ").last().toLong() + val ifTrue = attributes[3].split(" ").last().toInt() + val ifFalse = attributes[4].split(" ").last().toInt() + init { + Monkey.modulo *= divisibleBy + Monkey.monkeys.add(this) + } + fun round() { + for (item in items) { + val newWorry = op(item) % Monkey.modulo / divideBy + val index = if (newWorry % divisibleBy == 0L) ifTrue else ifFalse + Monkey.monkeys[index].items.add(newWorry) + counter++ + } + items.clear() + } +} + +fun main() { + val monkeys = generateSequence(::readlnOrNull).joinToString("\n").trim().split("\n\n") + + fun multLast2() = Monkey.monkeys.map { it.counter }.sorted().takeLast(2).reduce(Long::times) + fun rounds(count: Int) = (1..count).map { Monkey.monkeys.map { it.round() } } + + // Part 1 + monkeys.map { Monkey(it, divideBy=3) } + rounds(20) + println(multLast2()) + + // Part 2 + Monkey.modulo = 1 + Monkey.monkeys.clear() + monkeys.map { Monkey(it) } + rounds(10000) + println(multLast2()) +} diff --git a/Media/2022/11.png b/Media/2022/11.png index f66641d377fe82e93460c96bbcfe65886de827e6..1bdfaaa3742c99c3ad6d50d57908306fd892200a 100644 GIT binary patch literal 7474 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 - + From 2d2858596efdd9211b5771acf88ca40638bbac8a Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Mon, 12 Dec 2022 21:27:13 +0100 Subject: [PATCH 028/225] Add day 12 --- 2022/12/12.kt | 33 +++++++++++++++++++++++++++++++++ Media/2022/12.png | Bin 9182 -> 8965 bytes README.md | 2 +- 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 2022/12/12.kt diff --git a/2022/12/12.kt b/2022/12/12.kt new file mode 100644 index 0000000..e2e5088 --- /dev/null +++ b/2022/12/12.kt @@ -0,0 +1,33 @@ +fun bfs(field: List, queue: MutableList>, target: Pair): Int { + val dist: MutableMap, Int> = mutableMapOf() + queue.forEach { dist[it] = 0 } + val dirs = listOf(-1 to 0, 1 to 0, 0 to 1, 0 to -1) + fun isValid(y: Int, x: Int) = 0 <= y && y < field.size && 0 <= x && x < field[0].length + while (!queue.isEmpty()) { + val (y, x) = queue.removeFirst() + dirs + .map { (ya, xa) -> Pair(y+ya, x+xa) } + .filter { isValid(it.first, it.second) } + .filter { !dist.contains(it) } + .filter { (ya, xa) -> field[y][x] + 1 >= field[ya][xa] } + .forEach { + dist[it] = dist[Pair(y, x)]!! + 1 + queue.add(it) + } + } + return dist[target]!! +} + +fun main() { + var field = generateSequence(::readlnOrNull).toList() + fun findChars(c: Char) = field + .mapIndexed { y, l -> l.mapIndexed { x, _ -> y to x } } + .flatten() + .filter { field[it.first][it.second] == c } + .toMutableList() + val S = findChars('S') + val E = findChars('E').first() + field = field.map { it.replace("S", "a").replace("E", "z") } + println(bfs(field, S, E)) + println(bfs(field, findChars('a'), E)) +} diff --git a/Media/2022/12.png b/Media/2022/12.png index 541c2d5c2c79c903c637c7d7799f5409765ebebc..b694244477aa56d50e15044cdb7981672deb2bd8 100644 GIT binary patch literal 8965 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 literal 9182 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 - +

From cef459bdc10c4cbc812ae7859a97c7684fd47142 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Mon, 12 Dec 2022 22:54:30 +0100 Subject: [PATCH 029/225] Add day 12 --- 2022/12/12.kt | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/2022/12/12.kt b/2022/12/12.kt index e2e5088..543c780 100644 --- a/2022/12/12.kt +++ b/2022/12/12.kt @@ -1,15 +1,13 @@ fun bfs(field: List, queue: MutableList>, target: Pair): Int { - val dist: MutableMap, Int> = mutableMapOf() - queue.forEach { dist[it] = 0 } + val dist = queue.associate { it to 0 }.toMutableMap() val dirs = listOf(-1 to 0, 1 to 0, 0 to 1, 0 to -1) - fun isValid(y: Int, x: Int) = 0 <= y && y < field.size && 0 <= x && x < field[0].length while (!queue.isEmpty()) { val (y, x) = queue.removeFirst() dirs .map { (ya, xa) -> Pair(y+ya, x+xa) } - .filter { isValid(it.first, it.second) } + .filter { (ya, xa) -> ya in field.indices && xa in field[0].indices } .filter { !dist.contains(it) } - .filter { (ya, xa) -> field[y][x] + 1 >= field[ya][xa] } + .filter { (ya, xa) -> field[ya][xa] <= field[y][x] + 1 } .forEach { dist[it] = dist[Pair(y, x)]!! + 1 queue.add(it) @@ -23,7 +21,7 @@ fun main() { fun findChars(c: Char) = field .mapIndexed { y, l -> l.mapIndexed { x, _ -> y to x } } .flatten() - .filter { field[it.first][it.second] == c } + .filter { (y, x) -> field[y][x] == c } .toMutableList() val S = findChars('S') val E = findChars('E').first() From cc78ac47bcad59de5934f91e99bdc7a6ea55b6d6 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Tue, 13 Dec 2022 01:07:04 +0100 Subject: [PATCH 030/225] Add day 10 --- 2022/10/10.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/2022/10/10.kt b/2022/10/10.kt index bf054ac..4d12d71 100644 --- a/2022/10/10.kt +++ b/2022/10/10.kt @@ -1,8 +1,8 @@ fun main() { - val vals = generateSequence(::readlnOrNull).joinToString("\n").replace(" ", "\n").split("\n") - .map { if (it.length == 4) 0 else it.toInt() } - .scan(1) {s, e -> s + e} - .withIndex() + val vals = generateSequence(::readlnOrNull).joinToString("\n").split(" ", "\n") + .map { it.toIntOrNull() ?: 0 } + .scan(1, Int::plus) + .withIndex() println(vals.filter { (it.index+1) % 40 == 20 }.sumOf { (it.index+1) * it.value }) val p2 = vals .map { (i, v) -> if (v-1 <= i % 40 && i % 40 <= v+1) "#" else " " } From 983ca326931e884969bf575074a3620e12f27c21 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Tue, 13 Dec 2022 01:30:36 +0100 Subject: [PATCH 031/225] Add day 11 --- 2022/11/11.kt | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/2022/11/11.kt b/2022/11/11.kt index 3eb3e3d..fc6aed4 100644 --- a/2022/11/11.kt +++ b/2022/11/11.kt @@ -1,29 +1,33 @@ +class Monkey(monkey: String) { + var counter = 0L + var items: MutableList + var op: (Long) -> Long + val divisibleBy: Long + val idIfTrue: Int + val idIfFalse: Int -class Monkey(monkey: String, divideBy: Int = 1) { companion object { var modulo: Long = 1 var monkeys: MutableList = mutableListOf() } - var counter = 0L - val divideBy = divideBy - val attributes = monkey.split("\n").drop(1).map { it.split(":")[1].trim() } - val items = attributes[0].split(",").map { it.trim().toLong() }.toMutableList() - val opMultOrAdd = attributes[1].split(" ")[3] - val opArg = attributes[1].split(" ")[4] - val opFunc: (Long, Long) -> Long = if (opMultOrAdd == "*") Long::times else Long::plus - fun op(x: Long) = opFunc(x, if (opArg == "old") x else opArg.toLong()) - val divisibleBy = attributes[2].split(" ").last().toLong() - val ifTrue = attributes[3].split(" ").last().toInt() - val ifFalse = attributes[4].split(" ").last().toInt() init { + val attributes = monkey.split("\n").map { it.split(":")[1].trim() } + val (_, _, _, opMultOrAdd, opArg) = attributes[2].split(" ") + val opFunc: (Long, Long) -> Long = if (opMultOrAdd == "*") Long::times else Long::plus + + items = attributes[1].split(",").map { it.trim().toLong() }.toMutableList() + op = { x -> opFunc(x, opArg.toLongOrNull() ?: x) } + divisibleBy = attributes[3].split(" ").last().toLong() + idIfTrue = attributes[4].split(" ").last().toInt() + idIfFalse = attributes[5].split(" ").last().toInt() Monkey.modulo *= divisibleBy Monkey.monkeys.add(this) } - fun round() { + fun round(divideBy: Int = 1) { for (item in items) { val newWorry = op(item) % Monkey.modulo / divideBy - val index = if (newWorry % divisibleBy == 0L) ifTrue else ifFalse + val index = if (newWorry % divisibleBy == 0L) idIfTrue else idIfFalse Monkey.monkeys[index].items.add(newWorry) counter++ } @@ -35,17 +39,17 @@ fun main() { val monkeys = generateSequence(::readlnOrNull).joinToString("\n").trim().split("\n\n") fun multLast2() = Monkey.monkeys.map { it.counter }.sorted().takeLast(2).reduce(Long::times) - fun rounds(count: Int) = (1..count).map { Monkey.monkeys.map { it.round() } } + fun rounds(count: Int, divBy: Int) = repeat(count) { Monkey.monkeys.map { it.round(divBy) } } // Part 1 - monkeys.map { Monkey(it, divideBy=3) } - rounds(20) + monkeys.map { Monkey(it) } + rounds(20, divBy=3) println(multLast2()) // Part 2 Monkey.modulo = 1 Monkey.monkeys.clear() monkeys.map { Monkey(it) } - rounds(10000) + rounds(10000, divBy=1) println(multLast2()) } From 047ac792e97cd8027ecbfd36d6d68f33a41f77cc Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Tue, 13 Dec 2022 07:09:30 +0100 Subject: [PATCH 032/225] Add day 13 --- 2022/13/13.py | 14 ++ 2022/13/example.ans | 2 + 2022/13/example.in | 23 +++ 2022/13/input.ans | 2 + 2022/13/input.in | 449 ++++++++++++++++++++++++++++++++++++++++++++ Media/2022/13.png | Bin 0 -> 8994 bytes README.md | 5 +- 7 files changed, 494 insertions(+), 1 deletion(-) create mode 100644 2022/13/13.py create mode 100644 2022/13/example.ans create mode 100644 2022/13/example.in create mode 100644 2022/13/input.ans create mode 100644 2022/13/input.in create mode 100644 Media/2022/13.png diff --git a/2022/13/13.py b/2022/13/13.py new file mode 100644 index 0000000..301aa52 --- /dev/null +++ b/2022/13/13.py @@ -0,0 +1,14 @@ +import sys, functools + +def cmp(a, b): + if isinstance(a, int) and isinstance(b, int): + return 0 if a == b else (-1 if a < b else 1) + a = [a] if isinstance(a, int) else a + b = [b] if isinstance(b, int) else b + return ([cmp(*p) for p in zip(a, b) if cmp(*p) != 0] + [cmp(len(a), len(b))])[0] + +lists = [eval(a) for a in sys.stdin.read().strip().replace("\n\n", "\n").split("\n")] +print(sum(i for i, pair in enumerate(zip(lists[::2], lists[1::2]), 1) if cmp(*pair) <= 0)) + +new = sorted(lists + [[[2]], [[6]]], key=functools.cmp_to_key(cmp)) +print((new.index([[2]]) + 1) * (new.index([[6]]) + 1)) diff --git a/2022/13/example.ans b/2022/13/example.ans new file mode 100644 index 0000000..5fc17d6 --- /dev/null +++ b/2022/13/example.ans @@ -0,0 +1,2 @@ +13 +140 diff --git a/2022/13/example.in b/2022/13/example.in new file mode 100644 index 0000000..af73fbb --- /dev/null +++ b/2022/13/example.in @@ -0,0 +1,23 @@ +[1,1,3,1,1] +[1,1,5,1,1] + +[[1],[2,3,4]] +[[1],4] + +[9] +[[8,7,6]] + +[[4,4],4,4] +[[4,4],4,4,4] + +[7,7,7,7] +[7,7,7] + +[] +[3] + +[[[]]] +[[]] + +[1,[2,[3,[4,[5,6,7]]]],8,9] +[1,[2,[3,[4,[5,6,0]]]],8,9] diff --git a/2022/13/input.ans b/2022/13/input.ans new file mode 100644 index 0000000..4d98468 --- /dev/null +++ b/2022/13/input.ans @@ -0,0 +1,2 @@ +6076 +24805 diff --git a/2022/13/input.in b/2022/13/input.in new file mode 100644 index 0000000..0bd78e3 --- /dev/null +++ b/2022/13/input.in @@ -0,0 +1,449 @@ +[[[5,[10,6],5,1,6],4],[[9,[7,4,7],6,[],7],[[9,6,0,10],7,[8,5,5,2,7],[7,10,5,6]]]] +[[[[10,8,4,6],7,2,[8],0],7,8],[[4,[0],[10,0,9],[1,10],4],[[6,6,1,10],4,6,[],[9,1]],[[4],[7,6,4,10,6],1,[2,2,5,3,2]],[[10,9,5],[1,1,1]],[[3,4,3],[3,10,0,8],[0,7,8,9],2,4]]] + +[[],[1,[[6,9,6,9,7],[9,2,3]],[[9],6,[2,9]],[2,6,2,4]],[[[10,3,1,4],[6,5,5,5,1]],[4,[9,3,6],7,2],7,8],[],[6,6,[8],2,1]] +[[9,[[1,9,9,4],6,9,[4,10,5],[0,9]],8],[],[10,[[2,10,3,10],[]],2,[10]],[3,[8,[],3,8]]] + +[[2,[[8,4,1,10,4],[0,8,3,6,4],[6,9,8,9],7,6],[6,[3,3,3,1]]]] +[[[6],8,[[1]]],[[[0,0],2,[0,9],[6,1],[7,1,4]],[7,[9,5],[10],[],2],8],[1,8],[],[1,[[7],[10,6],[],4,8],[10,[4,9,9,5],7,[8,10,3,0,2]],0]] + +[[[3,8,9],[],[[4]],[]],[],[[9],5,10,3,[3,[],3,[6,8,4],8]],[],[8,7,[],0]] +[[],[[[10],5,0,6],5,7,1,[[5,5]]],[8]] + +[[9,8,4,[2,4,6,[4,9]]]] +[[[9]],[9,[[4,7,8],[4,4],[5,10,0,7,9],2]]] + +[[[],[8],[[9,4,1,6],[4,10,9,5],[],[5,8,2,7,3]],6,4],[[[3,0]],5],[2],[0,[],[2]]] +[[[6],[1,[5,9,10,7,6],10],8,6],[[2],[[],[1,7],[10,2,0],[4,4]],[[8,4,10,10,9]],3,[5,[],5]],[]] + +[[[],5,9,2,8],[7,10,0],[2,0],[[9,[3],[],2,[0,2,0,9]],4,[]]] +[[[[],[7,0,0]],1,9,[[2]]]] + +[[[],[[]],4,4,[0]],[],[[[9]]]] +[[8,[],10],[[2],9,[2,3,[],[0],[0,3,0]],9]] + +[[6,6,[[],[0]],1],[9,5,8]] +[[3,0],[10,5,8,2,[0,6,[1,8,1]]],[9,10]] + +[[[2,[4,2,10,4]],4,10,1,[5]],[[[4,1,5],4],6],[7]] +[[3,[[1,2,5,7,7],[9,8,5,8,7],7],[10,9],0],[10,[],5,[6,[],[0,6,6,4,4],[6,1,1,6,0],[]],[4]],[[7,[4,10,0],9,[9]],[[0]]]] + +[[[6,1,[]]],[3],[]] +[[[8,[10,8,6],8],4,[4,7,10,1]],[0,[[],8,[9],5],[[9,8,8,1]]],[[[9,5,4],[7,8,10,7,10],[]],[[],[10,10],[],8,[8]],[],[5,[3,7,6,1]]],[[[5,5],[10,7]],1,[5],[],[[4,5],2,10,[]]],[[],8,10,9,[10,6,[6,3]]]] + +[[[[],[7,1],[7,0,10,0,6],8],[],7,[[],2,4,4],[]]] +[[],[4,1,[[3,5,8,3],10,0],[4,[],[0,8,4,1],[5,9],1],10],[[[2,5,4,10,6],[2,8],8],1,[[]],[0,[],2,2,2]],[],[]] + +[[[[],8,8,9]]] +[[10],[[[3,6],3],[[1,6,2],[6,10,2],7]],[],[]] + +[[[10,6,[3,3]],[[5],9,[10],10,6],[5,0,2,[10,8,10],[8]]],[4,6,6,[10,[0,9],8,6,[0,5,5]],5],[7,[[]],3,9],[[9,1,[8,0,7,3,2],[8,1,7,4],[6,9,4,7,5]],[[5],0],1,[1,7,[]],[5]]] +[[],[6,1],[[7,2],[5,[6,6,6],[9,1,2,5],[9,1,8],9],2,7,[[],[4,1,4,9,1],[4,4]]],[0]] + +[[],[10,7,1,4,2],[9,8,4,[[3,7,9,8],2,9,[6],[6,9,0]]],[[[6,5,7,7,0]],[7],4]] +[[3,[[7,10]],9]] + +[[0]] +[] + +[[4,2,6],[10,[],3],[2,[2,8,3,[],[9,10,5,2,7]],9,7,9],[[],[],10,[[5]]]] +[[3,[[1],4,4,[1,7,3,2,9]],9,7,[[]]],[[4,[5,5,1,0,7]]],[4],[8,[8,9,1],[[],[10],3]]] + +[[7,10,3],[[5]],[]] +[[[[6,0,6,1,6],5,[10,2,9,2,8]],[],[2,[3,5,5,0,6],10,2],1],[[]],[[[3,0],[],7,7,1],[[8,4,8,9,2],1,[10,3,5,5],5,2],5,6,[[0,8,0,2],[5]]],[3,10,[1],[[2,10,2,9,8],[6,10,4],[]],[9,[3,2],[8,8,5],9]]] + +[[[[2],[8,7,8,4,10]],8,1,8,10]] +[[[1],0,[[9,3,4,0]],9,[0,3,1,7,[4,2,7,3,10]]],[6,3,[[9],1,7],1],[],[[7,5,1,1,[2,5,2]],6,4,0,[[2,7,0,8,1],[7,4,7],[3,0,1,6],[7,9,0,1,1],[9]]],[[0,5],1,2,[4,2,7]]] + +[[4],[[1,2,[8,10],[2,8]],10,0]] +[[3,4],[2,[[1,8]],[10,[1,0,8],[1],[4]],[0,4,8]],[6,[[8,10,7],6,2]]] + +[[[1,[6,9,9],[8,6,0]],4,[6,[2,1,10],4],7,[2,[2,9],1]]] +[[],[5,3,[8,[],9]],[8]] + +[[[3,[8,2,1,4,0],[9,5,7,7,8]],[[5,5,2,2,9],[10],8],1,3]] +[[0,1,[],5],[[8,4],[10],6,7,0],[2],[[7,[3,2]],7,[],2,[0,[5,8,7,1,2],[0],1]],[[[4,4,4,10,8],0,2,10],[[9,8,6],3,[9,2,4,3,8],5,1]]] + +[[4,[[]]],[10,[[2,7],8]],[[[6,7],10,10,5],1,2,[[],2,10]],[[2,5,1,0,8],[[5,8,10]],6]] +[[8,[[4,5,6,2],5,[7],8,9]],[],[[],3,[],4],[[0],5,1]] + +[[3],[0,[],[3,1,4,10],2,[5]],[2,6,[],[[1,5],1]],[[],7,8,[]]] +[[[[],9,10],[[6,10,6,7]],7],[]] + +[[[4,[10]],9,[9,[9,8,5,9,1],[10],[3]]]] +[[3],[2,[10],[[4,2,7,2]],[[],[8],[7,5]]],[[[5,3]],3],[[7,[9,9,5,2,3],10,5],8,6],[4,[[3,1],[10,4,6,8],[8,0,8,2,5]],[[1,6,10,2],[2,10,5],6],1,[9,2]]] + +[[],[[[4,2,4],8,[8,9,3]],9,[]],[],[[[3]]]] +[[],[5,[[2,8,5,1],[0,10,6],[],2],[[1],[2,1,6],7,[1,5,1]],7],[0,9,7,5,0],[[[0,2,10,8],4,[6,6,5,4],[10,8,0]],0,4]] + +[[[]],[1,8,0,[[1,1,1,1],9,7,[],9]],[6],[6,[[0,4,9]],[[10,0],3,[0,10,4,6,1],[4,6,6,10,5],[]],[4,3],[8,3]],[2,5]] +[[[6,10,7,1]],[7,[[0,6,5]],[[10,8,9]],[[]]]] + +[[4,[[2,7,2,9,4],[8,8,3,2,1]]]] +[[[[],0,7,1],[[]],0,[6,[2,10,4,2]],[7,8]],[8,[[8,0],[10,0],10],1,4,[[10,9,3,8,0],7,[10,3,1,1],3]],[],[[1,10,[7],[4,8,1,2,10],4],[[],6]],[[1,[7,10,10,0],[],[],[2]],[[2,0],8,[7],[2,2,10],3]]] + +[[4,[[2,7],10,3,10,[1]]],[0,1,[[],[],1],[[8],2,6,[],4],[7]],[],[2,6,[[3],[1,1,4,9,0],0,[8,3,0,9],1],0],[2,8]] +[[9,1,9,[4,[8,4]]]] + +[[[0,[6],6,9,[2,2,3,2,5]],[9],[7,3,[1,7]],[[0,5,10,3],[],[5],0]]] +[[[[0],9,0,9],[[4,3,9,3],[],2,0,[3,9,5]],[3,10,5,[9,3]]],[9,[5,8,8,[]]],[[[6,5,8,5,8],[4,7,5,6,1]],9,6],[8,7]] + +[[5],[],[8,4,[],[[3,7,0]],3]] +[[[[1,6,9,6,4],8,[]],10,[10,[0,3,7,2,4]]],[[6],[7,10],[[],6,[7,8]],7],[4,[5,[2,6],5],3,5]] + +[[],[[]],[],[10,8],[[5,9,[5],[],[]],[[6],[5,8,3],[2,8,7,10,2]]]] +[[],[[]],[[[10,5,9]]],[8,6,[0,8],0,[4,[8],7]]] + +[[[],[],[],0],[5,[[],0,[10,3,6,1,8],[7]],0,[[],8,[],[9,9,6,1]],[[6,3],10]],[[[1,8,5,1],[4,1,10,2,9]]],[7],[[],[7,2,[3,1,8],10,[8,5]],2]] +[[],[[[2],1,10,6,[0,7,7,10]],7,0,[[0,8,9,6,9],[7,10,9,4,9],9,5],[[9,10,0],[],5,[10]]],[],[[[0,7,5,4],[10,7,7,4],9]],[2]] + +[7,6,8,6,7] +[7,6,8,6] + +[[[[]],[[],[7,5,3,9,4],[4,4,5],[5],[10,0,9,1]],[10]],[[],[[4],0,1,10,[]],[[],3,0,[2,7,8,10,3],10],0,7],[[],[5],[],[[],8,3,2],[[4,7]]],[]] +[[[[4,3,6,1]],3,[3,5,[6],8,3],[[4],[]]]] + +[[[],[8,[2,7],10,9,6],7],[[],[[2,4,1,4,3],[6,0,8,1],[7,3,8,1],[0,6,5],3],9,[[8,0,2,9,1]],2],[5,1,8,3,[[2,9,5,3],9]]] +[[0,[[10,6,0],10],[],4,5]] + +[[9,[9,[7,7,4]]]] +[[],[[]],[0,7,[[10],[3],[2,6,1,4]]]] + +[[[[4,6,1],8,4,3],7,[[10,5,0]],0],[7,[],10,[9,[3],[7,3,3],[8,10,9,6],2]],[1,5]] +[[[5,[9,2],[6],10,[5,8,6,8,3]],[[2,0,8]],6,[2,4,[10],1],[1,[6,9,10,2],0,[4,9],[9,6,2]]],[[[3,4,3,5],[4,3,7,8],[5,5,1,10],4],[6,[],[9,9],[8,2,5],1],[[],[2],[5,0,9],7,0],[7,9],7],[1,5]] + +[[7,[[3],[0,2,5,10],9,10,4],1,7,6]] +[[1,[8],[6,3,3,[6,3,1],[9,5]],10,[9,[3,3],3,0]],[[8,3],7,5,[9,4]],[10,[2,5,9],10,[4,3,[1],[8,8],0]],[],[]] + +[[[[1,1,3,9]],[[6,10],2],[[8,0,7,3],[0,8,4,8],0]]] +[[],[9,[[10,8],0,[1,5,5],10,4],[0,2,9,[0,4,6]]],[[[9,0],[10,0,9],[9],[10,9,10,4,2],[1]],3,[],[[],3,[0,5,6,1],[]]]] + +[[10,[[3,7],2,5,[0]],[4,[3,6,9]],3],[6,8]] +[[1],[8,10,3],[1],[1,3],[3,[6,[4,2],4,[2,9,0],[8,7,1,10]]]] + +[[[[],6,5,0,10],4,0]] +[[5,[[1],6,3],9]] + +[[7,[[],[],[2,6,10],[0,6,4,2]]]] +[[],[4,1,[[0,3,2,10]],[]],[[7,2,7],[[2,10,6,1],[10,6]],[4,3,8,[9,8,0,2,6]],7,[]]] + +[[4,0,[[3,6,1,2,1],[10,9,6,7,10]],[2,[6,9,3,10],[6,2,9,5,6]],[]],[[5,[9],10,[10,1,0,10,2]],2,[7,10]],[],[8,8],[1,8,[],[[7],9]]] +[[],[5,[9,2,[7,9],[9,3,3,0,3]],[[4,0],[1,7],[9,2,8]]],[[[1,8,10],[],[]]],[[[8,5,9,2,10]],[],[[0],2,[4],[5,1]],10,7],[3,7,[[8,3,1,6,9],1,[],6,[9,3]],5]] + +[[],[4,[2],6,8]] +[[[5,[7,3]],8],[[[4,3,1],4,2,2],[10,4,[3,0],[8,7,8]]],[],[[[7,0]],8,4,2,[5,0,4,[5,10,1,1],[0,9]]],[[[10,6,2],3,[2,6,4]],3]] + +[[8,[[8,1,0,0],9],5,7,[7,[8,6]]],[[[7,10,5,10,7],[8,8,1,10],7,[2,10,4]],5,7],[4,2,1,[[0,3,4,7],[9,0,1,8],6,9]]] +[[8,[3,[],[3,3,10]],[10,[4],[10,5,2,4,5],4,[]]],[[3,0,3,9,2]],[[[]]],[8,6]] + +[[[]],[[8,[1,0,0],[6],2,[8,4,3,3,10]],5,[[3,1,3],[2,6],[9,2]]],[[]]] +[[7],[[9,1],10,5,8,[7,[3,2],[7,0,2,1,1]]],[5,1,0,[1,[8,0,2,9],10,1],6]] + +[[5,2,[]]] +[[[[10,10,2,4],10],0,7,[2,[10,8,3,0,8],[8],[4]]],[],[2,[]]] + +[[[3],[],[]],[],[[[5],[9,2,4,8,10]],[[3,6]],5,[[],[4,6,1,4],1],0],[3,[7],[[],7,[],4]],[[],[[9,3,3,8],4,9,5]]] +[[[],[0,3],[1,6,7]],[[]],[],[8,6],[4,[[5]]]] + +[[],[[0,[8,0,5,6,2],[6,8,4],[8,2],2],[],[1,[6]],9],[1,[7]]] +[[[[0]],[[0,10,4,8,7]],8,0],[2,9,[[9,8,2],8,[7,10,7,5]],[[],[],3],7]] + +[[8,8,[6],6,[8,0]]] +[[4,5,[1,1],8,[]],[10,[[4],7]],[[[3],9],0,[3,8,8,[7,8],[]],0],[[],[5,[5,2,0]]]] + +[[[],8],[[],4,7,[],7],[5,[],[],[[6,7,0,5,4]]]] +[[[5,[2,1,3,0,3],[6,3],[6,5,4,1,4]],[[2],[]],7,10,1],[],[[[],[9,9,2,5],[1,9,7,10,5],4,[1,0,10,7]]]] + +[[7,8]] +[[6,[[9,5],[2,10],4],9,[[10,0,8,6],5,[4],8]],[],[[[3,3,1,2],7],6,8,[[]]],[]] + +[[2,[]],[4],[],[],[[2,8,7,[8,8,0]]]] +[[0,3,4,[2,3,2,0,[7,7,9]],[[2,0,9],[1,6,1,0,3]]],[3,[[3,2,5,3],6,[2,2,3,7],[10,7,4],3],10,[3,4]],[1,5,1,1,[[3,8,6],[0,1],[2],[]]],[9,4,8,7,10],[0,[3,[9,4,3]]]] + +[[[[0],9,[6,3,5,9]],[[1],8,[4,2,1,7,10],[1,6,3,7,8]],[[9,2,0,8,7],6]],[7,9,[[7,9],[],[5,9]],0,1]] +[[7,[[],[4,2,0,3]]],[[8,9,3,8],3,[[]]],[10,5,[8,[6,10],0,1,7],5,4]] + +[[[1,5],7,9]] +[[10,[[4,9]],[[5]],7],[[],[[1,4,7]],[[1,9,0,0],[2,10,5,2,1]]]] + +[[],[[6],[[6,6]],9,[[5,3],9,2,[8,1,6],8]],[],[[[3],[6],[0,3,0],[4,0],[1,8,8,3,1]],0,[[],[10]]],[2,[7,[6,10],5,0,8],[1,[5,1,1]],1]] +[[9]] + +[[6,3],[4,4,3,6,[4]]] +[[],[3,10,0,10]] + +[[8,[4],[[8]]],[6,[]],[],[2],[0,3,10]] +[[[0,[6,2,1,3],2,4,[3]]],[[],0,1,[7,[1,9,4,3]],1],[[[10],[7,10,2,8],6]]] + +[[7,[[3,8,1,7,10]],6,[9,0,[9]],8],[[9,7,4],[[2]]],[[[2,5,7,7],2]]] +[[[[8,0,8],0],[0],[[0,8,5],[8,10,6,2,2],7,[9,0]],0],[[[0,2,9,0],10,[0,3],[1,1,7],0],5]] + +[[],[[5],[],[]]] +[[],[[[6,2,4],10,[8]],1,2,6],[[[3,2,2],8],[]]] + +[[[[],[10],10,7]],[],[6,6]] +[[8,4]] + +[[7,4,[1,[3,5,3,0,7],4]],[4,[4,8,[]],[[2,6]]]] +[[],[4,1,0,4],[]] + +[[10,[6,[9,9]]]] +[[2,6,9,10]] + +[[9,8,[[7,2,8,6],[7],[5,1]],4,[5,1,[5,8,10],[7,5]]],[1,3,[[1,7],10,2,6]]] +[[9,2,[6,2]],[[[2,10,7,7,3],[7],[7,6,5,8,1],[2,0],[6]],[[0]],0]] + +[[],[],[9,[[6,4,0],[4,9,0,2],[0,8,5,0,0]]]] +[[1,[[0],10,6,2,[7,5,5,5,0]]],[7],[]] + +[[[6,6],6],[[3,[3],[]],[1],[3,2,2,6,[10]]]] +[[[[],4,4,10],[[9,4,6],4,[1,2,4,6,4],5,[]],2,[[6,1,9,1,7],9,8,[5,0],[8,3,7,6]],[[8,10,0,5],9,10,10,4]],[[[4,2,6],9,7],9,0,7,9]] + +[[9,10],[9,3],[],[9,[[2]]],[[[],1,[1,9,3,8],[7,2],10]]] +[[[[10,0],9,4],[6],[[5],8,[2,10,8,1,8]],[[10],0,[8,1]],[8,[10],[2,4,5,10,8],[1],[8,6]]],[3]] + +[[2],[[6],0,[8]]] +[[[[10,1,0],[4]],1,[[7,4],[10,7,5,5]]],[9,[[10,8],[1],6,7],3,[[4,8],[],10]],[[2]],[6],[0,3,2,[7,[3,9,8],6,4]]] + +[[[[10,4]],[6,[],1,5,5],[8,8,3],3,[0,[6],[],2]],[7,[9],2],[[[0,4,1]],3,[7,[3,5,2,7,5],3],9,4],[2,3,7,7,9],[2,5,[4,[8,2,4,4],[9],[2,3],[6,7,10,0]],[[9,8,6],[6,1,2,0,1],[7,1,5],[5,0,9,7],2],3]] +[[0,[[8,4,7,3,6],2,[8,10,8]],[3,2,1,[5,3,1,4,1],1],[[4,2,8,1],[10,0,3],[5,7],5]],[5,4,1,2],[[[10,0,2]],[[3,10],4],0]] + +[[[3],[[10,4]]],[0,[[4,2],6,6,10],[[9,6,4],[6,8,4],[10,7,10,4],2],2,5],[7]] +[[5,[[0,9,4]],7,5,[[0,10,3,8,10],[7,2,1]]],[9,[1,[9,2,10,1,1],[1,0]],2,[[9,4],3],2]] + +[[[],8,1,7],[[1]],[8,2],[5,[[],[4],[4,9,2,4],[10,3,0,9],[9,3]],[[4,3,4,1,6],[2]],[[6,6],10,5,[6,8,9]]]] +[[10,[],[[],[1,5,4,10,3],[2,4,5,6],[7,8],[]],[5,[6,1]]],[],[3,[7,[6,0,2,1]],8,[10,[8,9],4,9,7]],[[[],1],[[10,6,9,2],10,[6,1],1,1],9,0,[[9,10,4],9,0,[9],1]],[[[6,0,6],[6,9,0,1,2]]]] + +[[1],[3,9,6,[[5],[],0,5,10]],[[9,[],[3,1,8]],0,[[6,8],6],[[],10],[4]],[[4,[5,6,4,1,5],3,[1,6,5,7]],[[8],2,2],6]] +[[7,5,9,[4],[[],[8,1],5]],[7,3,1,8],[[8,3,0],9],[],[[[1],8,5]]] + +[[6,9,[2,[4,9,3],[7,6,10,7],2,7],8],[[4,10,8],2],[[[8,1,7],8],3],[[[6]],[3],[[],8]],[2,0,8,[8,5]]] +[[4,[9,9],2,[[],[1]]],[[],7,6,1,[]],[]] + +[[[[5,2,4,9],[9,10,8],[]],0],[[8]]] +[[],[9,[[10,4,10],[1,7,10,7],[]],[],7],[[9,5],[[2,2]],0,[[3,4]],[[10,9,1,9,6],[3,0,5,4]]]] + +[[[10,10,[5]],[10],7,[]],[3,5,3],[],[],[[],[7,[9,8,9],[4,2,9,9,2],[]],0,0,7]] +[[[[],1,6,9,[]],0,[0,[0,0],[10,0,0,1,2],0],[[1,7,7],3,[],[9,4],6]],[],[1,6,[5,2],[1,5,[7,2,8]],[[5,9,6,4],[0,10],[6,9,3],[3,8,0]]],[7]] + +[[0,[2],10],[2,10,7,[[9]]]] +[[2,0,2],[10,2,[9,8,9,2,4]]] + +[[2],[2,[10,[4,1,3],10],7,[[7,7,3],[7,8],[0,7,6,3,8],3]],[[[9,0,3],[],[1,3,10,0,8]]]] +[[[[1,3,8,5],10,[4],2],10],[0,9,7,[[0,4,10,0,6],[]],7],[[[0],1,9,[3],[6,9]],4,9],[[5],6],[1]] + +[[[3,[5,3,2,7,9]],10,[]]] +[[[5,7,5],[[9,1,6,7],9,[2,6,5],[6,6,1],[0,6]],[[]],[],9],[[1,[3],[3,10,0],4],2,[],[[2,1,1,5,9],6,8],[]],[],[[],6,[[5,2],2,[8]]],[]] + +[[],[],[1,[[2,0]]]] +[[7,2,2,[],[[8,7,3,6],4,2,2,[]]]] + +[[6,9,8],[[],3,8,[],2],[3,9],[[[],10],[[9,3,9,8]],2,7]] +[[2,[8,[]],[7,8,5,5,5],2,1],[],[[[6,1,9,2,9],7,4],[3,[3,8,1,6]],[[4,6,5],[3,10,8,5,6],[1],8,[5,0,4,0,6]],1]] + +[[],[],[2,1,[4,7,[1]],[9,[7],0,6]]] +[[3],[0,[[6,6,9,6],[4,7,10,1,8],[4,0,10],1,[10]]],[0,[6,5,[8,9,3,9,6],[],[4]]],[[],[[]],4]] + +[[1,8,10,[]],[9,[],[[8]],[[9,6,3,2],[3,8,10],[],3],[1,9,[0]]],[],[5,[1,[],[4,5,7,10,9]],[[10,6,0,1]],9,[0]]] +[[0,3,[9,9]]] + +[[4,0,3],[],[],[[[]],[[5,3,1],8,[],1,[1,8,3,7]],[6]]] +[[[]],[[[8,0,3,2,2],[3],[1,6,8],10,4],[6,4,7,[1,2]],[8,[3],[10,9],[4,0,10,8],[1]]],[[],[1,2,6,8],5],[3,9,7],[[6,6],0]] + +[[7,[],[0],5],[7,[7]]] +[[0,[8,[3,3,8],10,7],5,[[1,7],[0,0],[5,2,0],1],2],[7,8]] + +[[4,[2,2,2,9],[[6,6,1,10,4],[]],5,10],[],[6,[[5,3,7,9,2],[4,2,4,9,7],[1,4,9,7,1]],2,[],[]],[[[7,0],7,[9,4,0]],9,[1,[1,0,1],[9,3,3],[9,2,10,5,10],10],7,[[9,0,8,1,8],8,[7,7,10,2]]],[]] +[[[3,7,[]],[9,7],0],[[[9,9,3,5,2],1],7,[10],[[10],2,[6,1],[1,10,3,1]],8],[3,9],[7,7,2,[2,[8,7,6],10]],[1]] + +[[[7,[10,1],[2,9],[3,4,6,9]],2,[],3],[[],6,3,[],[[4,7]]]] +[[],[[6,[],[],[0,10,2,6],1],1,3,[3,[10,2,7,1,4],[6,3,0],[1,3,6,3],[4]],[0,[8,10,0,8,5],3,2,6]],[],[]] + +[[5,[[4,0],[1,3,4],7,2],0,8,[]]] +[[],[[[],10,[10,9,6,0,1],[]],[[8],4,6,4,[0,2,8]]],[4]] + +[[],[],[],[[[],[8,6],[],[2,7,7,4]],[],1,[9,9,[1,3,4],0,[5,2]],[[4,4,5,6,10],[5,1,3,3],0]]] +[[10,[[6,4],[3,1,1,8,4]],9,[[3]]],[9,2,6,8,1]] + +[[],[1],[[[4],[5,1,6]],[]]] +[[10,[[]],[[8,10],8],[1,[5,3,7,8,7]]],[],[],[[[7]],[[2],6],[[0,8,1,3,10],[],2,0]],[[7,8,[]],2,1,[[8,7,4],1,[4],[],2],7]] + +[[[[3,5],[]],[7,0,5],[[],1,[7,2,7,10,1],3],[[4,1,5,5,6],[3,4],[6,1,3,9,2],8],[8]]] +[[10,10,[6],[4]]] + +[[[]],[8,4],[4,7,8,3,[[8,4,2],6,0]],[[1,[4,6,4],[],1]]] +[[[5],[[4,4,9,2,0]]],[9,[[7]],[[6,2],[0,3,1,1,7],5,4],[0]]] + +[[[3,[1,0,10,7],[8,8,8,10]],[10,[0,3],8,[9,5]],6],[[10,[3],[9,10,0,2]],[7,4],[0,7,4,6,[3,5]],[],[10,[5,4,6,1],5,4]],[[[0],0],5],[4],[8,[[9,4,5],3],[9,[0,7,2]],[],[]]] +[[5,3,9,0],[7,[6,[8,1,0,1,8],3,[9,2],5],[[1,0,0,6,4]],[6,[2,4],5,[2,10]]],[],[3,9]] + +[[[1,[4,0,10,6,8]],1],[],[[[]]]] +[[],[],[[9,[9,7],7,[9,4,3],0],9,6],[2,[[6,8]],2,[9,7,[4,6,10,4,2],[]]]] + +[[2,10,[4,9,[],[7,10,0],1],[[1,8,5,4,6],5]],[[[]],[[10,2,1]],[[]]]] +[[9,9,[10,[1,5,1,2]],[9],3],[8,8],[4,[5,[6],10],[[0,5],[7,10],2],6,[[2,9,8],[5,4,7,5]]],[1],[[10,8,4,[1,7,8,9],8]]] + +[[3,[]]] +[[10],[[3,[7,10,7],[2,6,6,1,1],5],8],[1],[4,[9,1,[2]],7]] + +[[],[[[3,2,0],[3,4,5,10,8],[3,3,3,0,3],[8,3],9],[[5,0,7,8],[],[1,1]],[[10],[2,7,4,4],[],6],2],[[1,[3],[7,4],[8,1,9],3],0,7]] +[[0,8]] + +[[[],[]],[3],[1,9,10,[[4,3,2],[3,10,0,6,4],7,7,10],[6,[10],[9,8,0]]],[]] +[[[5,0,[0],[9,10,7],[1,0]],5],[],[5,3,0,3],[[[3,8,9],[],[2,2,6,6,10],[]]]] + +[[[[9,1,6]],3,[[2,0,8,1,0]]]] +[[3,[[2,1],[8],10,6]],[10,2,3,6,[]],[0,10,0,[[4,7,9],[],3],3],[[[4,2,5],[8]],9,6,[3,[],7,[0,4,8,0]]],[[[6],10,[10,9]],2,[7,[3],[2,0],[6,5,5,7,0]]]] + +[[1,5],[8,[5,1,10,[0,4,9,4,1]],6],[],[7,[3,3,5,10,4]]] +[[],[10,[7]]] + +[5,8,1,2] +[5,8,1,2,1] + +[[0,[],[],[[6,6,7,7],10,3],1],[[6,7,[8,1,4,4,7],[6,6],2]],[[[],7,[],4,2],[[5,5,5,0,7],6,[8,9,7]],[[6,3,3,8,9],1,[6,9,8,5],3],3,[[9,9],[],7,[8,2,8,10],8]]] +[[[9,[2],[],[4,6],[10,2]],5]] + +[[[9],3,[7,2,10]]] +[[2],[9,1,7,[9]]] + +[[],[]] +[[5,[],7],[[[6,0],[7,5,9,7],2]],[[],[[5,2,8],[]],[[5,4,1,10],[3,5,2,2,10],[0,6],10]],[[2],0,8],[]] + +[[[9,10,[4],7,0],1,1,[[],5]]] +[[[[9,8,8,3,1],[10,7,2,10,5]],4,3],[9,[5],[[],[5],10,[10],[10,3,4]]]] + +[[10,[[2],[7,7,3,3,3]],[1,[],[10,4,4]]]] +[[[[1],[1,2,5,7]],[6,3,[2,1,7]],8],[4,5]] + +[[[3,[1,6,1,4,4],[4,5,5,0]],8,8,9],[[],[],[6,[4,10],[],[4,9,2]],6]] +[[0,5,7,8],[]] + +[[2,[[0,5,9],[10,8],[2,1],[5,6,5],[7,9]]],[7,1,[10,3,[2,4],[9,10,1,9,10],0],0],[0,[[2,10,4,0],4],[6]]] +[[[[9,10,9],[8,7,5,7,8]],0,0,[[2,3],8,0,[2,5,10,9,8]],6]] + +[[2,[9,4,5,[2,0]],1,7],[9,[6,[9,5,1]]]] +[[],[[],4,[[4,10,5,8],10,[0,3,6],8],[6]],[[9]],[3,9,9,[],[9,[7,9,5],8]],[[2,1,9,[2,0,9,7,4],[9,10,10]],[8,[9,2,3],2,[6,9,3,8]],[10,7,[],10],2]] + +[[5],[],[],[9],[[[7,8,8],5],[1,[7,4,10],[9,1],2,[]],[],[4,5,1,10,10]]] +[[[10,[10,3,4,0,8],4,5,1],[10,7],[[9,6,6],[5,6,3,7],[5,9,2,0,8],3],[[]],[[1,10,7,1,3],8,4,3]],[[[]],[9],2]] + +[[6,[[1],[7],[]],5,6,8],[6,[2],[[]]]] +[[[7,[10],[7,8,8,7,1]]],[3,10,3,[[6],7,[0,9,7,7],1,[9,9,1,2,2]],3],[6,[6,[2,9]],[[],[2,1,3,2,9],[3,7,9,6],5],[[1]],[6,[9,6,1,3]]],[[2,[2],[5,0,2],5],0,4,5,1]] + +[[[9,0],4,[[7]],4],[9,7],[[1,[0],[1,0,7,1,3],[8],[4,2,0]],9,[[0,5],0,7],6,[[],10]],[]] +[[[[5,10],[4,4,5,3],[9,8,9],[],[5,2]],10,9],[],[[[],[]],5]] + +[[],[],[[],7,7,[2,[8,9]],[0,[7,3],[3,6,1,10,5]]],[3]] +[[[[0,9,7,10]],5],[[],[]],[[[0,2,10],[10,0,5,3,9],9,[],5]]] + +[[8]] +[[[2,[1,6]],[[9,6,6,4,10],[],9,6],[],[]],[],[[1,1,6],4,[[],[4,3,2,9,2]],3]] + +[[5,8,10,4,3],[0,9,[2,9,[4],[6,9,8,0],[9]],6,[]]] +[[],[7,5,[5,[6,5,1,1],4],[[4,10,0,4,10],[10,9],[0,9,1]],6],[[],[[0,9],2],[0,[2,7,9],[],10],[[7,1,9,5,0],[4,3,1,8,1],3,[8,8]],9],[[10,3,5,[5,4,9,10,6]],7],[[1,[],1],[[0,4],6,1,[10,10,8,6,9]],[],6]] + +[[],[1,[2,2,[2,9],4,[]],2],[],[4,10,[],7,[8,[],[]]],[6,8,10,3]] +[[[3,0],4],[[8,[1,10,5]],[[1,7,0,3],[7,3,5]],[10,8,[0],2,[9,2,1]]],[[],[10],[[9,0]],[8,0,4],[[8,0],3]]] + +[[10],[6],[[6,[5,2,7,10,1],[1,6,6],[9,6,10,8],10],2,9,[[0,3,7],0]],[[[3,2],2,9,[]],10,7],[3,1,[6],[9,10,[]]]] +[[[],[[]],6],[[],[],[7],[]],[3,0,8,5]] + +[[],[3,[10],8],[[[9]],[],[[4,5,0,9,2],[],[8],[0,6,9]]],[],[8]] +[[7],[[8,9,4,8],[]],[],[3,8,[[8],[],[6,4,4],3]],[[[10,6]],[[],[],9,[2,3,7,1],10]]] + +[[9,[9,3]],[[7,7,7,7,3],1],[7,[[],[6,10,1],[4,5,3,8]]]] +[[8,4],[[4,1,[1,3,3],0,[0,10]],[[0,6,8],0,[7,5,4],6,[7,2,5,7]],10,2,9]] + +[[],[6],[[[1,4,4,1],[]],2],[1,1,[[0],[6,6]],2]] +[[6,[[0,7],0,[6],3],9,[[8],3,[1,5,0,8,6],[]]],[0,8,2,2,10]] + +[[3,[[7],[10,6,9,3,0],[3],4,4],8],[[0,7,[7,8,8],1,[0,4]]]] +[[[10,9,[],[5,2,8,3]],[8,[8,1],9,[]],10],[6,8,[9,[7],9,[5,8,8,10,1]]],[4],[[[4,9,6],5,9],4,4]] + +[[],[],[[0,[5,5,5,1,3],1,[],0]],[[5,1,[2,10],[1]],9,2,[8,9,[10,10]]]] +[[[3,1]]] + +[[[8,3,[4,2,1,2]],[10],9],[[0,5],[2],3,1],[0,[[1,7,7,9]],1,[8,[7,6,8],5]],[[8,[8,8]],[10,3,[3],[10,9,1]],[]]] +[[[[2,0,2]],[0,2,9]],[8,5,[0],[8,6],10],[10,[[5,1,4],3],10],[[5,[],0,3,[2,4,7,8]]]] + +[[],[[],[6,[5,7,5,5],[8,4,3],6,8],10,[[8,5,6,1,7],[9,8,9,2],[5,2,4,10]],[[8]]],[[5,5,[2,4,4,4,9],9],2,6,[[7,5,7,4,4],3,[],[9]],[[3,9,5]]]] +[[9,6],[[[0]]],[0,8,[[9,7],4,[8,0,0]]],[]] + +[[1,1],[4,1,[5,[0,7,3,5,0],[7,8,9],[4,0,0,8],2],1,[9,[1,9],[],[3,4,8,4,1]]],[[5,0,[4,2,0,9,4],[]],0],[3]] +[[0,7,[[6,0,8],0,[]]]] + +[[],[[],[6],1],[7,[6,3,5],[]]] +[[],[[7,[6],[3,2,2],[10]],[[],[6],[7,9,9]],[[8],[2,10,5],[1,9,5,6,4],3],8],[[],[[9],[2],[0,8,10,6],[3,7]],[5,[1,3,9],2,10,7],[7]]] + +[[[[]],[[1,5,5,3,3]]],[],[1,[8,8,[3,9,6]]]] +[[[],7,2,6,[9,[5,10,0],[9,6,6,5,5],1]],[]] + +[[1,5,[4,0,[8]]],[[[5],8,[7,6,5],3,0],[],4,6],[2,[[2],[0,2,5,3,3],1],4,7,6]] +[[2,[[10,10,1,0,9]]],[[],9,1],[[3,4]],[[[10,2,3],[9,3,7],[10,1,6,1]],7]] + +[[0,[],[[],10,7,[7,8,8]]],[],[0,[[7,2,2,7],4,1,7,[7,8,0,6,6]],[[8,8,6]]]] +[[9],[[[4,7,5],[1,5,8,2],[3,2,8,6,0],[7,5]],[[7,9,6],[]],[0,3,8]],[[4]],[[],[2,5,[]],0]] + +[[8,[[2],0,[]],[5,9],[]],[[2,6],[]]] +[[[]],[0,3,9,4,0],[[[2,4],[6],[4,2,1],[]]],[[1,0,[0,0],7,6],1,5,7,[2]]] + +[[[[4,10,7],0],[[1,1,7,4,5],[1],8,5,9],[[9,9],3,[],[7,6,2]],[[3,0],[3],3],[2,[3,6,3,2],[10,2,6],[],4]]] +[[[10,9,3,0],8]] + +[[[[4,10,7],7,[4,8,5,2,4]],8,4],[[[],5],[],7,[2,3]]] +[[[9],[1,0,[],2,[0]],[[0,1],[10,8],[10]]]] + +[[[[10,1,3,6,3],[3,0],2],[],6],[9,9,[4,[10],4,5,[5,0,4]]],[9,9]] +[[10,10,8]] + +[[[[3,6]],8,[],6,[0,2,8,[1,0],8]]] +[[6,6,6,7,1],[],[],[],[[[6],[6,3]],[4,0],3,3,[[],[10,4,9,8]]]] + +[[1,[[2,1,2,10],5,[],[8,4,2],1],[7,9,[4,5]],[3,[6,6]],5],[]] +[[]] + +[[[3,10],[8,9,9],2,9],[8,[],10,10]] +[[[[],[0]],3,6]] + +[[3,4,[]],[4],[3,9,[5,[1],[],[10,7],[9,0,2,9]],[2,2,9],4],[[[2,2,6]]]] +[[],[4,6,[[],[],[3,7,5],9,7]],[],[[8,5,7],8,1,3,8]] + +[[],[[0,2],0,7,[],[[6]]],[[],[8],[3,[],3],[7,[5,0,4],7],5],[1,1,[[]]],[[[0,10,7,10],2,0,[3,7,1,1]],9]] +[[[8,[7,6,6]],9],[10,8,9,6],[[[],[1,7,3]],[[5,5,5,1],[],0,[7,7,9,8],7],[10,[],[3,9,7,4,3],10],[[8,7],10]],[[2],[5],4,[[2,6],[7,7,10,7,0],[3,8,3],3,6],10],[9,10,[[6,2]],5]] + +[[4,2],[[9,5,7,7,[]]]] +[[[1,[4,8,7,2,4],4,[4,6,5,6,4]],[8,[6]],8],[3]] + +[[3,2,1,8]] +[[[10,6,[2],2],10],[[],3,10,[[],[],[4],6,8],[[8,5,10],[],5]]] + +[[[6,[5,5,0]],5],[[],7,1,[],7]] +[[3,4,1,6,[[],[4],9]],[[[3,4,5]],[],4]] + +[[4,[5,4],[[0,10,9,1,5]],5,5]] +[[3]] + +[[0,[8],9],[3,[[5,7]],8],[[5,7,1,10,4]]] +[[6,[3,6,3,[9,2,9,2,9]],[[3,4,1,9,5],7,4,10,[5,0,4,4,2]]],[0],[[0,1,[7],[],0],[5,4,[9,3]],9,1,[[6,0],[7,4]]],[[5,8],2]] + +[[6,[],[[4],[3,5]],6],[8,[7,5,3]],[5,[[],2,[1,1]],[6,4],[],[[0],9,[0,8,10,4],0]]] +[[[[10,5,10,4],[9,1,7,6,10],[0]],9,[1,2,3,5],[0,[5,7,4,7],[9,10,7],1,7]],[[[],0],7,[8,[10,1,10,7,8]],[4,1,[4,3,10],[],1],5],[8,9],[[7,10,2,[4],2],[[3],[8,8,0,6],6,4]]] + +[[[[7,8,2,2],[8,2,3,0],[4,3,8,0,8]],5,[[9,7,1],[],[1,0],[1,2,6]],9,[[5,1,7],3,[],5]]] +[[[0,[8,3,5],[5],1],[8],[[4,10,10,8]],0],[[0]],[[[7,2],[8,9],[]],[[],[1,9,7],[9,4,6],[5]],[[5,8,7,2]]]] + +[[[],2,[1,[6,6,2,2,5]],8]] +[[0,[[2,7,6,0]]]] + +[[],[10,1],[6,[2,[],8,0,[5,1,7,9,4]],9,4,9],[[[8,5,9,4,1],6],3,[],9,3],[[2],[],[[9,3,7],8,[0,1],[1,2,1,9,1],[]],[[6,7],[5],2,9],[[]]]] +[[[8,6]],[0],[],[10]] + +[[],[9],[],[[[],[2],[9]]],[6,7,10,[8,[],[6,3],0]]] +[[7],[9,8,[[2,5],[6]],[[3,10,5,5,4],[1,8,3],0,9,[0,2,5]]]] + +[[6,[],[[6,6,0,3],[10,0,6,5,0],9]]] +[[],[[10,[7]],8],[7,7],[[5,1,[10],[8,1,6,0,10],3]],[4,[0,6]]] + +[[3],[[6,9]]] +[[[[5,10],8],10,[[9,1,10,4,4],[10,3],4,[9,9,9,9,5]]]] diff --git a/Media/2022/13.png b/Media/2022/13.png new file mode 100644 index 0000000000000000000000000000000000000000..05a8da09ddf8fe7241832d5fc1e80ce7b8b08acf GIT binary patch literal 8994 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index e64f74a..265fc61 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- 2022 - 24 ⭐ + 2022 - 26 ⭐

@@ -42,6 +42,9 @@ + + +

2021 - 50 ⭐

From 754d4df6455b8511be3899076d90f319edf78bfc Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Tue, 13 Dec 2022 20:56:27 +0100 Subject: [PATCH 033/225] Add day 13 --- 2022/13/13.kt | 45 +++++++++++++++++++++++++++++++++++++++++++++ Media/2022/13.png | Bin 8994 -> 8826 bytes README.md | 2 +- 3 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 2022/13/13.kt diff --git a/2022/13/13.kt b/2022/13/13.kt new file mode 100644 index 0000000..3ba4f80 --- /dev/null +++ b/2022/13/13.kt @@ -0,0 +1,45 @@ +fun String.parseLists(): Any { + val stack: MutableList> = mutableListOf(mutableListOf()) + this.replace("]", ",}").replace("[", "{,").replace(",,", ",").split(",").forEach { + when (it) { + "{" -> { val m: MutableList = mutableListOf(); stack.last().add(m); stack.add(m) } + "}" -> stack.removeLast() + else -> stack.last().add(it.toInt()) + } + } + return stack[0][0] +} + +fun cmp(a: Any, b: Any): Int { + if (a is Int && b is Int) + return when { a < b -> -1; a > b -> 1; else -> 0 } + val aList = if (a is MutableList<*>) a else mutableListOf(a) + val bList = if (b is MutableList<*>) b else mutableListOf(b) + for ((u, v) in aList zip bList) + if (cmp(u!!, v!!) != 0) + return cmp(u, v) + return cmp(aList.size, bList.size) +} + +fun main() { + var lists = generateSequence(::readlnOrNull) + .filter { !it.isEmpty() } + .map { it.parseLists() } + .toMutableList() + + lists + .chunked(2) + .withIndex() + .filter { (_, pair) -> cmp(pair[0], pair[1]) <= 0 } + .sumOf { (i, _) -> i+1 } + .also(::println) + + val distress = listOf(listOf(listOf(2)), listOf(listOf(6))) + lists + .also { it.addAll(distress) } + .sortedWith(::cmp) + .withIndex() + .filter { it.value in distress } + .fold(1) { acc, (i, _) -> (i+1) * acc } + .also(::println) +} diff --git a/Media/2022/13.png b/Media/2022/13.png index 05a8da09ddf8fe7241832d5fc1e80ce7b8b08acf..2ff728ec25f9e56b929662c8763eeb62d68fa127 100644 GIT binary patch literal 8826 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 literal 8994 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 diff --git a/README.md b/README.md index 265fc61..3408a4f 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ - +

From 8e4c9f7dbeb434a7b39b9e5a6b8a8d153bf5f002 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Wed, 14 Dec 2022 07:58:37 +0100 Subject: [PATCH 034/225] Add day 14 --- 2022/14/14.py | 28 +++++++++ 2022/14/input.ans | 2 + 2022/14/input.in | 149 ++++++++++++++++++++++++++++++++++++++++++++++ Media/2022/14.png | Bin 0 -> 8589 bytes README.md | 5 +- 5 files changed, 183 insertions(+), 1 deletion(-) create mode 100644 2022/14/14.py create mode 100644 2022/14/input.ans create mode 100644 2022/14/input.in create mode 100644 Media/2022/14.png diff --git a/2022/14/14.py b/2022/14/14.py new file mode 100644 index 0000000..0cf4728 --- /dev/null +++ b/2022/14/14.py @@ -0,0 +1,28 @@ +from sys import stdin +lines = [[list(map(int, c.split(','))) for c in l.strip().split(" -> ")] for l in stdin.readlines()] +width = max(x+200 for x, _ in sum(lines, [])) +height = max(y for _, y in sum(lines, [])) + +def solve(floor='.'): + field = [['.'] * width for _ in range(height + 2)] + [[floor] * width] + for walls in lines: + for (x1, y1), (x2, y2) in zip(walls, walls[1:]): + for x in range(min(x1, x2), max(x1, x2)+1): + for y in range(min(y1, y2), max(y1, y2)+1): + field[y][x] = '#' + + while True: + sx, sy = 500, 0 + while sy+1 < len(field): + for xa in (0, -1, 1): + if field[sy+1][sx+xa] == '.': + sy, sx = sy+1, sx+xa + break + else: + field[sy][sx] = 'o' + break + if sy+1 >= len(field) or field[0][500] == 'o': + return sum(field, []).count("o") + +print(solve(floor='.')) +print(solve(floor='#')) diff --git a/2022/14/input.ans b/2022/14/input.ans new file mode 100644 index 0000000..8ad5744 --- /dev/null +++ b/2022/14/input.ans @@ -0,0 +1,2 @@ +793 +24166 diff --git a/2022/14/input.in b/2022/14/input.in new file mode 100644 index 0000000..730e5ee --- /dev/null +++ b/2022/14/input.in @@ -0,0 +1,149 @@ +475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 +410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 +410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 +494,23 -> 494,26 -> 486,26 -> 486,29 -> 502,29 -> 502,26 -> 496,26 -> 496,23 +456,66 -> 456,70 -> 455,70 -> 455,77 -> 466,77 -> 466,70 -> 462,70 -> 462,66 +446,83 -> 450,83 +419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 +497,13 -> 497,16 -> 496,16 -> 496,20 -> 508,20 -> 508,16 -> 503,16 -> 503,13 +419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 +429,138 -> 429,140 -> 428,140 -> 428,146 -> 436,146 -> 436,140 -> 433,140 -> 433,138 +466,59 -> 470,59 +420,134 -> 420,135 -> 429,135 -> 429,134 +449,79 -> 449,80 -> 463,80 +419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 +469,61 -> 473,61 +419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 +421,131 -> 421,127 -> 421,131 -> 423,131 -> 423,124 -> 423,131 -> 425,131 -> 425,130 -> 425,131 -> 427,131 -> 427,128 -> 427,131 +472,63 -> 476,63 +419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 +431,94 -> 435,94 +421,131 -> 421,127 -> 421,131 -> 423,131 -> 423,124 -> 423,131 -> 425,131 -> 425,130 -> 425,131 -> 427,131 -> 427,128 -> 427,131 +475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 +428,102 -> 432,102 +437,94 -> 441,94 +429,138 -> 429,140 -> 428,140 -> 428,146 -> 436,146 -> 436,140 -> 433,140 -> 433,138 +419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 +452,87 -> 456,87 +425,99 -> 429,99 +475,57 -> 479,57 +429,138 -> 429,140 -> 428,140 -> 428,146 -> 436,146 -> 436,140 -> 433,140 -> 433,138 +421,131 -> 421,127 -> 421,131 -> 423,131 -> 423,124 -> 423,131 -> 425,131 -> 425,130 -> 425,131 -> 427,131 -> 427,128 -> 427,131 +410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 +469,57 -> 473,57 +456,66 -> 456,70 -> 455,70 -> 455,77 -> 466,77 -> 466,70 -> 462,70 -> 462,66 +410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 +429,138 -> 429,140 -> 428,140 -> 428,146 -> 436,146 -> 436,140 -> 433,140 -> 433,138 +449,85 -> 453,85 +420,134 -> 420,135 -> 429,135 -> 429,134 +419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 +440,87 -> 444,87 +478,32 -> 478,33 -> 490,33 -> 490,32 +443,94 -> 447,94 +431,105 -> 435,105 +481,61 -> 485,61 +460,63 -> 464,63 +419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 +419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 +440,96 -> 444,96 +421,131 -> 421,127 -> 421,131 -> 423,131 -> 423,124 -> 423,131 -> 425,131 -> 425,130 -> 425,131 -> 427,131 -> 427,128 -> 427,131 +421,131 -> 421,127 -> 421,131 -> 423,131 -> 423,124 -> 423,131 -> 425,131 -> 425,130 -> 425,131 -> 427,131 -> 427,128 -> 427,131 +429,138 -> 429,140 -> 428,140 -> 428,146 -> 436,146 -> 436,140 -> 433,140 -> 433,138 +421,131 -> 421,127 -> 421,131 -> 423,131 -> 423,124 -> 423,131 -> 425,131 -> 425,130 -> 425,131 -> 427,131 -> 427,128 -> 427,131 +410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 +434,92 -> 438,92 +410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 +419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 +410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 +475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 +410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 +419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 +475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 +475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 +434,96 -> 438,96 +410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 +456,66 -> 456,70 -> 455,70 -> 455,77 -> 466,77 -> 466,70 -> 462,70 -> 462,66 +475,61 -> 479,61 +422,102 -> 426,102 +419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 +421,131 -> 421,127 -> 421,131 -> 423,131 -> 423,124 -> 423,131 -> 425,131 -> 425,130 -> 425,131 -> 427,131 -> 427,128 -> 427,131 +494,23 -> 494,26 -> 486,26 -> 486,29 -> 502,29 -> 502,26 -> 496,26 -> 496,23 +475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 +419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 +410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 +410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 +410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 +456,66 -> 456,70 -> 455,70 -> 455,77 -> 466,77 -> 466,70 -> 462,70 -> 462,66 +494,23 -> 494,26 -> 486,26 -> 486,29 -> 502,29 -> 502,26 -> 496,26 -> 496,23 +419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 +494,23 -> 494,26 -> 486,26 -> 486,29 -> 502,29 -> 502,26 -> 496,26 -> 496,23 +420,134 -> 420,135 -> 429,135 -> 429,134 +478,63 -> 482,63 +475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 +475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 +425,105 -> 429,105 +494,23 -> 494,26 -> 486,26 -> 486,29 -> 502,29 -> 502,26 -> 496,26 -> 496,23 +497,13 -> 497,16 -> 496,16 -> 496,20 -> 508,20 -> 508,16 -> 503,16 -> 503,13 +456,66 -> 456,70 -> 455,70 -> 455,77 -> 466,77 -> 466,70 -> 462,70 -> 462,66 +475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 +471,38 -> 471,39 -> 480,39 +475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 +456,66 -> 456,70 -> 455,70 -> 455,77 -> 466,77 -> 466,70 -> 462,70 -> 462,66 +497,13 -> 497,16 -> 496,16 -> 496,20 -> 508,20 -> 508,16 -> 503,16 -> 503,13 +410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 +446,87 -> 450,87 +410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 +429,138 -> 429,140 -> 428,140 -> 428,146 -> 436,146 -> 436,140 -> 433,140 -> 433,138 +475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 +440,92 -> 444,92 +449,79 -> 449,80 -> 463,80 +410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 +410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 +429,138 -> 429,140 -> 428,140 -> 428,146 -> 436,146 -> 436,140 -> 433,140 -> 433,138 +410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 +446,96 -> 450,96 +419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 +471,38 -> 471,39 -> 480,39 +410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 +410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 +410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 +456,66 -> 456,70 -> 455,70 -> 455,77 -> 466,77 -> 466,70 -> 462,70 -> 462,66 +419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 +419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 +466,63 -> 470,63 +494,23 -> 494,26 -> 486,26 -> 486,29 -> 502,29 -> 502,26 -> 496,26 -> 496,23 +475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 +497,13 -> 497,16 -> 496,16 -> 496,20 -> 508,20 -> 508,16 -> 503,16 -> 503,13 +497,13 -> 497,16 -> 496,16 -> 496,20 -> 508,20 -> 508,16 -> 503,16 -> 503,13 +419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 +475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 +443,85 -> 447,85 +410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 +421,131 -> 421,127 -> 421,131 -> 423,131 -> 423,124 -> 423,131 -> 425,131 -> 425,130 -> 425,131 -> 427,131 -> 427,128 -> 427,131 +478,32 -> 478,33 -> 490,33 -> 490,32 +421,131 -> 421,127 -> 421,131 -> 423,131 -> 423,124 -> 423,131 -> 425,131 -> 425,130 -> 425,131 -> 427,131 -> 427,128 -> 427,131 +410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 +472,55 -> 476,55 +475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 +419,105 -> 423,105 +419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 +437,90 -> 441,90 +419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 +478,32 -> 478,33 -> 490,33 -> 490,32 +472,59 -> 476,59 +463,61 -> 467,61 +497,13 -> 497,16 -> 496,16 -> 496,20 -> 508,20 -> 508,16 -> 503,16 -> 503,13 +428,96 -> 432,96 +475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 +421,131 -> 421,127 -> 421,131 -> 423,131 -> 423,124 -> 423,131 -> 425,131 -> 425,130 -> 425,131 -> 427,131 -> 427,128 -> 427,131 +421,131 -> 421,127 -> 421,131 -> 423,131 -> 423,124 -> 423,131 -> 425,131 -> 425,130 -> 425,131 -> 427,131 -> 427,128 -> 427,131 +475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 +419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 +478,59 -> 482,59 +410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 +419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 +494,23 -> 494,26 -> 486,26 -> 486,29 -> 502,29 -> 502,26 -> 496,26 -> 496,23 +419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 +475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 +484,63 -> 488,63 +497,13 -> 497,16 -> 496,16 -> 496,20 -> 508,20 -> 508,16 -> 503,16 -> 503,13 diff --git a/Media/2022/14.png b/Media/2022/14.png new file mode 100644 index 0000000000000000000000000000000000000000..c0617cdde59d8fb07b8c478101117f36bd16b305 GIT binary patch literal 8589 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 TZjaTZ00000NkvXXu0mjfi0}t} literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 3408a4f..289294f 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- 2022 - 26 ⭐ + 2022 - 28 ⭐

@@ -45,6 +45,9 @@ + + +

2021 - 50 ⭐

From 003fcce06980d574f7515c14e3f8bfd18b8ebcd3 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Thu, 15 Dec 2022 00:36:46 +0100 Subject: [PATCH 035/225] Add day 14 --- 2022/14/14.kt | 27 +++++++++++++++++++++++++++ Media/2022/14.png | Bin 8589 -> 8532 bytes README.md | 2 +- 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 2022/14/14.kt diff --git a/2022/14/14.kt b/2022/14/14.kt new file mode 100644 index 0000000..0caad8b --- /dev/null +++ b/2022/14/14.kt @@ -0,0 +1,27 @@ +fun main() { + val lines = generateSequence(::readlnOrNull).toList() + .map { it.split(" -> ", ",").map { it.toInt() }.chunked(2) } + val width = lines.flatten().maxOf { it[0] } + 200 + val height = lines.flatten().maxOf { it[1] } + 2 + val field = MutableList(height) { MutableList(width) { '.' } } + fun range(a: Int, b: Int) = minOf(a, b)..maxOf(a, b) + fun drawLine(rx: IntRange, ry: IntRange) = rx.map { x -> ry.map { y -> field[y][x] = '#' } } + lines.map { it.zipWithNext { (x1, y1), (x2, y2) -> drawLine(range(x1, x2), range(y1, y2))} } + + fun fill(): Int { + var endDfs = false + fun dfs(x: Int, y: Int): Boolean { + endDfs = endDfs || y >= field.size || field[0][500] == 'O' + if (endDfs || field[y][x] != '.') + return endDfs + if (!(dfs(x, y+1) || dfs(x-1, y+1) || dfs(x+1, y+1))) + field[y][x] = 'O' + return true + } + while (!endDfs) dfs(500, 0) + return field.flatten().count { it == 'O' } + } + println(fill()) + field.add(MutableList(width) { '#' }) + println(fill()) +} diff --git a/Media/2022/14.png b/Media/2022/14.png index c0617cdde59d8fb07b8c478101117f36bd16b305..0a528747f3f6d7358b79db7778f2cc96706745b6 100644 GIT binary patch literal 8532 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 TZjaTZ00000NkvXXu0mjfi0}t} diff --git a/README.md b/README.md index 289294f..5acae2e 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ - +

From 02bc44a7d0e771c8806ed97d20271562ea434936 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Thu, 15 Dec 2022 07:59:20 +0100 Subject: [PATCH 036/225] Add day 15 --- 2022/15/15.kt | 23 +++++++++++++++++++++++ 2022/15/15.py | 22 ++++++++++++++++++++++ Media/2022/15.png | Bin 0 -> 8664 bytes README.md | 5 ++++- 4 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 2022/15/15.kt create mode 100644 2022/15/15.py create mode 100644 Media/2022/15.png diff --git a/2022/15/15.kt b/2022/15/15.kt new file mode 100644 index 0000000..f96d923 --- /dev/null +++ b/2022/15/15.kt @@ -0,0 +1,23 @@ +fun main() { + val sensors = generateSequence(::readlnOrNull).toList() + .map { Regex("-?\\d+").findAll(it).toList() } + .map { it.map { it.value.toLong() } } + .sortedWith() { a: List, b: List -> a[0].compareTo(b[0]) } + fun dist(x1: Long, y1: Long, x2: Long, y2: Long) = Math.abs(x1 - x2) + Math.abs(y1 - y2) + val y = 2_000_000L + (-1_000_000L..6_000_000L).map { x -> + sensors + .filter { (_, _, xb, yb) -> xb != x || yb != y } + .map { (xs, ys, xb, yb) -> dist(xs, ys, xb, yb) >= dist(xs, ys, x, y) } + .any { it } + }.count { it }.run(::println) + + for (y in 0L..4_000_000L) { + var x = 0L + for ((xs, ys, xb, yb) in sensors) + if (dist(xs, ys, xb, yb) >= dist(xs, ys, x, y)) + x = xs + dist(xs, ys, xb, yb) - Math.abs(ys - y) + 1 + if (x <= 4_000_000L) + println(x * 4_000_000L + y) + } +} diff --git a/2022/15/15.py b/2022/15/15.py new file mode 100644 index 0000000..661ecac --- /dev/null +++ b/2022/15/15.py @@ -0,0 +1,22 @@ +# Use pypy, as otherwise this is slow +import sys, re +lines = sys.stdin.read().strip().split("\n") +sensors = sorted([[int(a) for a in re.findall(r"-?\d+", l)] for l in lines]) +sensors = sorted([[*map(int, re.findall(r"-?\d+", l))] for l in lines]) +dist = lambda x1, y1, x2, y2: abs(x1 - x2) + abs(y1 - y2) + +s, y = 0, 2_000_000 +for x in range(-1_000_000, 6_000_000): + for sx, sy, bx, by in sensors: + if dist(sx, sy, bx, by) >= dist(sx, sy, x, y) and (bx != x or by != y): + s += 1 + break +print(s) + +for y in range(4_000_001): + x = 0 + for sx, sy, bx, by in sensors: + if dist(sx, sy, bx, by) >= dist(sx, sy, x, y): + x = sx + dist(sx, sy, bx, by) - abs(sy - y) + 1 + if x <= 4_000_000: + print(x * 4_000_000 + y) diff --git a/Media/2022/15.png b/Media/2022/15.png new file mode 100644 index 0000000000000000000000000000000000000000..e9fb998d10e139c3a5b88365a184eb817c8ff4a6 GIT binary patch literal 8664 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

- 2022 - 28 ⭐ + 2022 - 30 ⭐

@@ -48,6 +48,9 @@ + + +

2021 - 50 ⭐

From ef017b9a7c02ca45cbd0a75108eab84563fb1f5f Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Fri, 16 Dec 2022 00:45:38 +0100 Subject: [PATCH 037/225] Add day 15 --- 2022/15/15.kt | 16 ++++++++-------- 2022/15/input.ans | 2 ++ 2022/15/input.in | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 8 deletions(-) create mode 100644 2022/15/input.ans create mode 100644 2022/15/input.in diff --git a/2022/15/15.kt b/2022/15/15.kt index f96d923..7af877d 100644 --- a/2022/15/15.kt +++ b/2022/15/15.kt @@ -1,21 +1,21 @@ +fun dist(x1: Long, y1: Long, x2: Long, y2: Long) = Math.abs(x1 - x2) + Math.abs(y1 - y2) + fun main() { val sensors = generateSequence(::readlnOrNull).toList() .map { Regex("-?\\d+").findAll(it).toList() } .map { it.map { it.value.toLong() } } - .sortedWith() { a: List, b: List -> a[0].compareTo(b[0]) } - fun dist(x1: Long, y1: Long, x2: Long, y2: Long) = Math.abs(x1 - x2) + Math.abs(y1 - y2) + .sortedBy() { it[0] } val y = 2_000_000L - (-1_000_000L..6_000_000L).map { x -> + (-1_000_000L..6_000_000L).count { x -> sensors - .filter { (_, _, xb, yb) -> xb != x || yb != y } - .map { (xs, ys, xb, yb) -> dist(xs, ys, xb, yb) >= dist(xs, ys, x, y) } - .any { it } - }.count { it }.run(::println) + .filter { it[2] != x || it[3] != y } + .any { (xs, ys, xb, yb) -> dist(xs, ys, x, y) <= dist(xs, ys, xb, yb) } + }.run(::println) for (y in 0L..4_000_000L) { var x = 0L for ((xs, ys, xb, yb) in sensors) - if (dist(xs, ys, xb, yb) >= dist(xs, ys, x, y)) + if (dist(xs, ys, x, y) <= dist(xs, ys, xb, yb)) x = xs + dist(xs, ys, xb, yb) - Math.abs(ys - y) + 1 if (x <= 4_000_000L) println(x * 4_000_000L + y) diff --git a/2022/15/input.ans b/2022/15/input.ans new file mode 100644 index 0000000..9892397 --- /dev/null +++ b/2022/15/input.ans @@ -0,0 +1,2 @@ +5716881 +10852583132904 diff --git a/2022/15/input.in b/2022/15/input.in new file mode 100644 index 0000000..788c82d --- /dev/null +++ b/2022/15/input.in @@ -0,0 +1,32 @@ +Sensor at x=2885528, y=2847539: closest beacon is at x=2966570, y=2470834 +Sensor at x=2224704, y=1992385: closest beacon is at x=2018927, y=2000000 +Sensor at x=3829144, y=1633329: closest beacon is at x=2966570, y=2470834 +Sensor at x=43913, y=426799: closest beacon is at x=152363, y=369618 +Sensor at x=2257417, y=2118161: closest beacon is at x=2386559, y=2090397 +Sensor at x=8318, y=3994839: closest beacon is at x=-266803, y=2440278 +Sensor at x=69961, y=586273: closest beacon is at x=152363, y=369618 +Sensor at x=3931562, y=3361721: closest beacon is at x=3580400, y=3200980 +Sensor at x=476279, y=3079924: closest beacon is at x=-266803, y=2440278 +Sensor at x=2719185, y=2361091: closest beacon is at x=2966570, y=2470834 +Sensor at x=2533382, y=3320911: closest beacon is at x=2260632, y=3415930 +Sensor at x=3112735, y=3334946: closest beacon is at x=3580400, y=3200980 +Sensor at x=1842258, y=3998928: closest beacon is at x=2260632, y=3415930 +Sensor at x=3712771, y=3760832: closest beacon is at x=3580400, y=3200980 +Sensor at x=1500246, y=2684955: closest beacon is at x=2018927, y=2000000 +Sensor at x=3589321, y=142859: closest beacon is at x=4547643, y=-589891 +Sensor at x=1754684, y=2330721: closest beacon is at x=2018927, y=2000000 +Sensor at x=2476631, y=3679883: closest beacon is at x=2260632, y=3415930 +Sensor at x=27333, y=274008: closest beacon is at x=152363, y=369618 +Sensor at x=158732, y=2405833: closest beacon is at x=-266803, y=2440278 +Sensor at x=2955669, y=3976939: closest beacon is at x=3035522, y=4959118 +Sensor at x=1744196, y=13645: closest beacon is at x=152363, y=369618 +Sensor at x=981165, y=1363480: closest beacon is at x=2018927, y=2000000 +Sensor at x=2612279, y=2151377: closest beacon is at x=2386559, y=2090397 +Sensor at x=3897, y=2076376: closest beacon is at x=-266803, y=2440278 +Sensor at x=2108479, y=1928318: closest beacon is at x=2018927, y=2000000 +Sensor at x=1913043, y=3017841: closest beacon is at x=2260632, y=3415930 +Sensor at x=2446778, y=785075: closest beacon is at x=2386559, y=2090397 +Sensor at x=2385258, y=2774943: closest beacon is at x=2386559, y=2090397 +Sensor at x=3337656, y=2916144: closest beacon is at x=3580400, y=3200980 +Sensor at x=380595, y=66906: closest beacon is at x=152363, y=369618 +Sensor at x=1593628, y=3408455: closest beacon is at x=2260632, y=3415930 From dd181563b899be47d038e87df61b3ecf72d0de7e Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Fri, 16 Dec 2022 14:39:55 +0100 Subject: [PATCH 038/225] Add day 16 --- 2022/16/16.kt | 59 ++++++++++++++++++++++++++++++++++++++++++++ 2022/16/example.ans | 2 ++ 2022/16/example.in | 10 ++++++++ 2022/16/input.ans | 2 ++ 2022/16/input.in | 59 ++++++++++++++++++++++++++++++++++++++++++++ Media/2022/16.png | Bin 0 -> 7803 bytes README.md | 5 +++- 7 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 2022/16/16.kt create mode 100644 2022/16/example.ans create mode 100644 2022/16/example.in create mode 100644 2022/16/input.ans create mode 100644 2022/16/input.in create mode 100644 Media/2022/16.png diff --git a/2022/16/16.kt b/2022/16/16.kt new file mode 100644 index 0000000..ebbcdd8 --- /dev/null +++ b/2022/16/16.kt @@ -0,0 +1,59 @@ +import java.util.PriorityQueue + +data class State( + var time: Int, + var current: String, + var elTime: Int? = null, + var elephant: String? = null, + var opened: Set = setOf(), + var flow: Int = 0, +) : Comparable { + override fun compareTo(other: State) = compareValuesBy(this, other, { -it.flow }) +} + +fun main() { + val input = generateSequence(::readlnOrNull).toList() + .map { Regex("([A-Z]{2}|\\d+)").findAll(it).toList().map { it.value } } + val neighbors = input.associate { it[0] to it.slice(2..it.size-1) } + val flows = input.associate { it[0] to it[1].toInt() } + + fun getNonZeroNeighbors(curr: String, dist: Int = 0, visited: Set = setOf()): Map { + val neigh = HashMap() + for (neighbor in neighbors[curr]!!.filter { it !in visited }) { + if (flows[neighbor]!! != 0) + neigh[neighbor] = dist+1 + for ((name, d) in getNonZeroNeighbors(neighbor, dist+1, visited + setOf(curr))) + neigh[name] = minOf(d, neigh.getOrDefault(name, 1000)) + } + return neigh + } + val nonZeroNeighbors = input.associate { it[0] to getNonZeroNeighbors(it[0]) } + + fun solve(initialState: State): Int { + val queue = PriorityQueue().also { it.add(initialState) } + var best = 0 + val visited: MutableMap, Int> = mutableMapOf() + while (queue.isNotEmpty()) { + var (time, current, elTime, elephant, opened, flow) = queue.remove() + best = maxOf(best, flow) + val vis = (opened.toList() + listOf(current, elephant ?: "")).sorted() + if (visited.getOrDefault(vis, -1) >= flow) + continue + visited[vis] = flow + if (elTime != null && elephant != null && time < elTime) { + time = elTime.also { elTime = time } + current = elephant.also { elephant = current } + } + for ((neighbor, dist) in nonZeroNeighbors[current]!!) { + val newTime = time-dist-1 + val newFlow = flow+flows[neighbor]!!*newTime + if (newTime >= 0 && neighbor !in opened) + queue.add(State(newTime, neighbor, elTime, elephant, opened+setOf(neighbor), newFlow)) + } + } + return best + } + solve(State(30, "AA")).run(::println) + solve(State(26, "AA", 26, "AA")).run(::println) // Takes ~10 seconds + +} diff --git a/2022/16/example.ans b/2022/16/example.ans new file mode 100644 index 0000000..74b0d1b --- /dev/null +++ b/2022/16/example.ans @@ -0,0 +1,2 @@ +1651 +1707 diff --git a/2022/16/example.in b/2022/16/example.in new file mode 100644 index 0000000..9f30acc --- /dev/null +++ b/2022/16/example.in @@ -0,0 +1,10 @@ +Valve AA has flow rate=0; tunnels lead to valves DD, II, BB +Valve BB has flow rate=13; tunnels lead to valves CC, AA +Valve CC has flow rate=2; tunnels lead to valves DD, BB +Valve DD has flow rate=20; tunnels lead to valves CC, AA, EE +Valve EE has flow rate=3; tunnels lead to valves FF, DD +Valve FF has flow rate=0; tunnels lead to valves EE, GG +Valve GG has flow rate=0; tunnels lead to valves FF, HH +Valve HH has flow rate=22; tunnel leads to valve GG +Valve II has flow rate=0; tunnels lead to valves AA, JJ +Valve JJ has flow rate=21; tunnel leads to valve II diff --git a/2022/16/input.ans b/2022/16/input.ans new file mode 100644 index 0000000..4783346 --- /dev/null +++ b/2022/16/input.ans @@ -0,0 +1,2 @@ +1789 +2496 diff --git a/2022/16/input.in b/2022/16/input.in new file mode 100644 index 0000000..e8e35c3 --- /dev/null +++ b/2022/16/input.in @@ -0,0 +1,59 @@ +Valve AW has flow rate=0; tunnels lead to valves LG, TL +Valve OM has flow rate=0; tunnels lead to valves XK, IM +Valve BG has flow rate=0; tunnels lead to valves MP, SB +Valve XB has flow rate=0; tunnels lead to valves MA, TL +Valve CD has flow rate=0; tunnels lead to valves VL, OF +Valve VF has flow rate=0; tunnels lead to valves CS, XK +Valve HK has flow rate=0; tunnels lead to valves RL, QB +Valve QN has flow rate=0; tunnels lead to valves IV, QR +Valve OF has flow rate=4; tunnels lead to valves TQ, CD, IR, IM, JE +Valve QB has flow rate=14; tunnels lead to valves HK, XE, CS, VO +Valve ZE has flow rate=7; tunnels lead to valves JB, NC, SE, OI +Valve OW has flow rate=0; tunnels lead to valves MB, JB +Valve MA has flow rate=0; tunnels lead to valves XB, MB +Valve MP has flow rate=0; tunnels lead to valves VK, BG +Valve UE has flow rate=9; tunnels lead to valves ZM, RZ, WI, HO, FO +Valve QR has flow rate=24; tunnel leads to valve QN +Valve TQ has flow rate=0; tunnels lead to valves OF, AA +Valve SE has flow rate=0; tunnels lead to valves ZE, ZZ +Valve AQ has flow rate=20; tunnel leads to valve CX +Valve XE has flow rate=0; tunnels lead to valves JQ, QB +Valve DC has flow rate=8; tunnels lead to valves ZD, MJ, RZ +Valve ZM has flow rate=0; tunnels lead to valves YJ, UE +Valve VK has flow rate=21; tunnel leads to valve MP +Valve VR has flow rate=0; tunnels lead to valves WV, PS +Valve BH has flow rate=0; tunnels lead to valves AA, MB +Valve ZR has flow rate=0; tunnels lead to valves LG, AI +Valve JE has flow rate=0; tunnels lead to valves OF, HO +Valve IR has flow rate=0; tunnels lead to valves IV, OF +Valve FO has flow rate=0; tunnels lead to valves XQ, UE +Valve AA has flow rate=0; tunnels lead to valves NC, VY, BH, TQ, YJ +Valve ZZ has flow rate=0; tunnels lead to valves SE, TL +Valve XQ has flow rate=0; tunnels lead to valves IV, FO +Valve WI has flow rate=0; tunnels lead to valves UE, VO +Valve VY has flow rate=0; tunnels lead to valves AA, LG +Valve XK has flow rate=15; tunnels lead to valves VF, OM, ZD +Valve CX has flow rate=0; tunnels lead to valves AQ, MB +Valve JQ has flow rate=0; tunnels lead to valves XE, IV +Valve LG has flow rate=3; tunnels lead to valves VY, PS, ZR, AW, OI +Valve JB has flow rate=0; tunnels lead to valves ZE, OW +Valve OI has flow rate=0; tunnels lead to valves ZE, LG +Valve YJ has flow rate=0; tunnels lead to valves ZM, AA +Valve NC has flow rate=0; tunnels lead to valves AA, ZE +Valve KR has flow rate=0; tunnels lead to valves SB, MJ +Valve MB has flow rate=17; tunnels lead to valves CX, BH, AI, OW, MA +Valve AI has flow rate=0; tunnels lead to valves ZR, MB +Valve TL has flow rate=16; tunnels lead to valves ZZ, XB, AW +Valve RL has flow rate=0; tunnels lead to valves WV, HK +Valve CS has flow rate=0; tunnels lead to valves VF, QB +Valve WV has flow rate=25; tunnels lead to valves RL, VL, VR +Valve ZD has flow rate=0; tunnels lead to valves XK, DC +Valve IV has flow rate=23; tunnels lead to valves XQ, IR, JQ, QN +Valve PS has flow rate=0; tunnels lead to valves VR, LG +Valve RZ has flow rate=0; tunnels lead to valves DC, UE +Valve VO has flow rate=0; tunnels lead to valves WI, QB +Valve MJ has flow rate=0; tunnels lead to valves DC, KR +Valve IM has flow rate=0; tunnels lead to valves OM, OF +Valve VL has flow rate=0; tunnels lead to valves CD, WV +Valve SB has flow rate=18; tunnels lead to valves BG, KR +Valve HO has flow rate=0; tunnels lead to valves JE, UE diff --git a/Media/2022/16.png b/Media/2022/16.png new file mode 100644 index 0000000000000000000000000000000000000000..38c6a949bc99ae5f0120d48c1de46000bab81ac0 GIT binary patch literal 7803 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 N002ovPDHLkV1n;SO&

- 2022 - 30 ⭐ + 2022 - 32 ⭐

@@ -51,6 +51,9 @@ + + +

2021 - 50 ⭐

From b16f230a624e97b84380ea95073b32a60c812a8f Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 17 Dec 2022 17:14:18 +0100 Subject: [PATCH 039/225] Add day 17 --- 2022/17/17.kt | 139 ++++++++++++++++++++++++++++++++++++++++++++ 2022/17/example.ans | 2 + 2022/17/example.in | 1 + 2022/17/input.ans | 2 + 2022/17/input.in | 1 + Media/2022/17.png | Bin 0 -> 7630 bytes README.md | 5 +- 7 files changed, 149 insertions(+), 1 deletion(-) create mode 100644 2022/17/17.kt create mode 100644 2022/17/example.ans create mode 100644 2022/17/example.in create mode 100644 2022/17/input.ans create mode 100644 2022/17/input.in create mode 100644 Media/2022/17.png diff --git a/2022/17/17.kt b/2022/17/17.kt new file mode 100644 index 0000000..c42bd8d --- /dev/null +++ b/2022/17/17.kt @@ -0,0 +1,139 @@ +val rocks = "@@@@ .@. @@@ .@. ..@ ..@ @@@ @ @ @ @ @@ @@".split(" ").map { it.split(" ") } +var input: List = listOf() + +data class Tower( + var stack: ArrayDeque> = ArrayDeque>(), + var occ: MutableMap, Int> = mutableMapOf(), + var highestRockIndex: Int = 0, + var dirIndex: Int = 0, + var indicesOfMostCommon: MutableList = mutableListOf(), + var mostCommon: List? = null, + var towerHeightLastSim: Long = 0L, + var towerHeight: Long = 0L, +) { + init { + stack.addFirst(MutableList(9) { '-' }) + } +} + +fun Tower.simulate(rockCount: Int, multiply: Long = 1L): Tower { + val towerHeightBefore = stack.count { it.contains('#') } + for (rockIndex in 0..rockCount-1) { + val rock = rocks[rockIndex % 5] + val needed = rock.size + 3 - highestRockIndex + repeat(needed) { + stack.addFirst(mutableListOf('|', '.', '.', '.', '.', '.', '.', '.', '|')) + highestRockIndex++ + } + var starty = highestRockIndex - 3 - rock.size + for (y in 0..rock.size-1) { + for (x in 0..rock[y].length-1) { + stack[starty+y][x+3] = rock[y][x] + } + } + + val cols = MutableList(7){stack.size-1} + for (x in 1..7) + for (y in 0..stack.size-1) + if (stack[y][x] == '#') { + cols[x-1] = y + break + } + val mi = cols.minOrNull()!! + for (x in 0..6) + cols[x] -= mi + cols.add(rockIndex % 5) + if (cols !in occ) + occ[cols] = 0 + occ[cols] = occ[cols]!! + 1 + if (mostCommon != null && cols == mostCommon) + indicesOfMostCommon.add(rockIndex) + + while (true) { + val dir = input[dirIndex % input.size] + dirIndex++ + + // Left right (dir) + var canHappen = true + val lastx = stack[0].size-2 + val endy = starty + rock.size + for (y in starty..endy) { + for (x in 1..lastx) { + if (stack[y][x] == '@') { + canHappen = canHappen && stack[y][x+dir] in ".@" + } + } + } + if (canHappen) { + for (y in starty..endy) { + var new = stack[y].joinToString("").replace("@", ".").toMutableList() + for (x in 1..lastx) { + if (stack[y][x] == '@') { + new[x+dir] = '@' + } + } + stack[y] = new + } + } + + // Downward + canHappen = true + for (y in starty..endy) { + for (x in 1..lastx) { + if (stack[y][x] == '@') { + canHappen = canHappen && stack[y+1][x] in ".@" + } + } + } + if (canHappen) { + for (y in endy downTo starty+1) { + for (x in 1..lastx) { + if (stack[y-1][x] == '@') { + stack[y][x] = '@' + stack[y-1][x] = '.' + } + } + } + } + else { + for (y in starty..endy) + stack[y] = stack[y].joinToString("").replace("@", "#").toMutableList() + while (stack[highestRockIndex-1].contains('#')) + highestRockIndex-- + break + } + starty++ + } + } + towerHeightLastSim = (stack.count { it.contains('#') } - towerHeightBefore) * multiply + towerHeight += towerHeightLastSim + return this +} + +fun main() { + input = readln().repeat(2).map { if (it == '>') 1 else -1 } + Tower().simulate(2022).towerHeight.run(::println) + + val forOcc = Tower().simulate(input.size) + val mostCommon = forOcc.occ.maxBy { it.value }.key + val indices = Tower(mostCommon=mostCommon).simulate(input.size).indicesOfMostCommon + + val repeatsAfter = indices.flatMap { a -> indices.map { Math.abs(a - it) } } + .filter { it != 0 }.groupingBy { it }.eachCount().maxBy { it.value }.key + + val target = 1000000000000L + val goal = Tower().simulate(1000).simulate(repeatsAfter).towerHeightLastSim + for (initial in 0..input.size-1 step 5) { + val part2 = Tower().simulate(initial) + val mult = (target - initial) / repeatsAfter + val mod = (target - initial) % repeatsAfter + + if (part2.simulate(repeatsAfter).towerHeightLastSim == goal) { + part2 + .simulate(repeatsAfter, multiply=mult-1L) + .simulate(mod.toInt()) + .run { println(this.towerHeight) } + break + } + } +} diff --git a/2022/17/example.ans b/2022/17/example.ans new file mode 100644 index 0000000..8951507 --- /dev/null +++ b/2022/17/example.ans @@ -0,0 +1,2 @@ +3068 +1514285714288 diff --git a/2022/17/example.in b/2022/17/example.in new file mode 100644 index 0000000..97a1aa1 --- /dev/null +++ b/2022/17/example.in @@ -0,0 +1 @@ +>>><<><>><<<>><>>><<<>>><<<><<<>><>><<>> diff --git a/2022/17/input.ans b/2022/17/input.ans new file mode 100644 index 0000000..29a2037 --- /dev/null +++ b/2022/17/input.ans @@ -0,0 +1,2 @@ +3059 +1500874635587 diff --git a/2022/17/input.in b/2022/17/input.in new file mode 100644 index 0000000..b2f8a7a --- /dev/null +++ b/2022/17/input.in @@ -0,0 +1 @@ +>><<<>>>><<<><>>><><<<<>>>><>>>><<<<>><<<<>>>><<<<>>>><<<>>>><<<>><<<<>>><<<<><><<>>><>>>><<<>>><<><<<><<<>>><<>>><<<><<><<>><<>><<<>>>><<<<><<>>>><>><<<>><<>>><<<>>>><<<<>>><<>>><><<<>>><<>>>><>>><<<<>>>><<>><<<<><<<<>><<<<>>><<>>><<<<><>>>><<<><<<<>><>>><<<<><<>>><>><<><><<>>><<<>>><<<<><<>>><><<<>><><<<<>><><<<>><<<>><>><>><<><<<<>>>><<<<>>><><<<><<>>>><<><<>><<>><><<<>>><>><<<>><<<><<><><<>>><<>>>><<<<>>>><<><<>><<<><<>><<<<><>>><>><<>>>><<<<>>><<<>>><<<>>><>>><>>><<<<>>><<<<><<<<>>>><>><<><<>><<<><><>>>><>>>><<<><<<><<<><<>><<<>>><<<>>><<<>>>><<>>><<<>><<<>>><<<<><<<><<>><<<><<>>><<<<>><<<><<<>><<<>><<>>>><<>><>><<<><<<<>>>><><<>><<>>><<><<>>><<>>>><<>>><<><<<<>>><<<>>><><<<>><<><<<><>>>><<>>><<<<>>>><<>>><<<<><<<<>>><<<<>><<><<<<><<><<<><<<<><><<>>>><<>>>><>>><<>>>><<<<>><><<<>>>><<>>><<<>>>><<>><<>><<<<>>><<<>><<>><<<<>>><>>>><<<>>>><<<>><<<<>><<>>><<<>>><<>><<<><<<>>>><<>>><>><<>>>><<>>><>><>><<<<>><<<<>>>><<>><<<>><<<>>><<<>><<>>><<>>>><<>><<>><<><<<<><<<>>>><>><>><<<<>><>><<>>>><<<>><>>><<>><>><>>>><<<<>>><<<>>><>><<<<>>><<<<>>><><<<><<<><<<>>>><<<<><>>>><<><<<>>>><<>>>><>><>>><<<>>>><<<>>>><>>><<<<>>><<<><>>><>>>><<<>><><<<<>>><<<<>><<<><<<<><<<>>><<<<>>><<<<>><<<><>>><<<><<>><<<<>><<<<>>><<>>><<<>>><<<<>>><>><<<>>>><<<<>><<<>><>>><<<>>>><>>>><<><<<>>>><>>>><<<<>>><<<<><<<><<<>>>><<<>><<<<>>>><<<<>>>><<<<><<<>><>>><><<<<>><<<<>>>><<>><<>><<>><<<>>>><<>><<<<><<<<>><>><<<<>>><<<>>><<<>>><<<<><<>><<<<><<>>><<<>>><<<>><><>><<>><<<<>>><<<<>>>><<<>><>>>><<<<><>>>><>>><<<<>><<>>>><<<<>>><<<>>>><>>><<<><<><<<>><>>>><<<>><<<<>>><>>><<<>><>><<<>>>><<<<>>>><<>><<<>>><<<<>>><<<<><>><<<>><<<>><<<>>><>>><<<>><<<<>>><<<<>>><<<<>>><<<<>><<<<>><<<<>>><<<<>>>><<<>><<<>>><<>>>><<>><<<>>>><<<>><<>>>><<<>><<<<>>><<<<><<>>><>><>>>><<>>>><<<<><<<><<><<<><<<<>><><<<><<<>><<<><<>><<<<>>><<<>><<>>>><><<<><><>><>><<<<>><<><>><<<>>><<<>>>><<<><<<>><<>><<>>>><<<<><<>><>><<<>>>><<><<<>>><>>>><<<<>>>><<>>><<>>><<<>>>><<<>>>><<>><<<>>>><<<<>><<<>><<<<>><>><<>><<<>><<<>><<>>>><<<>><<<>><<<<>><<<<>><<<<>>><<<><<<><<<<>>>><<><<<<><<>><>>><<<<>>><<<<><<<<><<<>>><<<><<<>>>><>>><<>>>><>><><<><<<<>>><<<>>><>><<><<<>><<<<>>>><<>>><<<<>><<<><<<>>><<>>><>>>><<>>><<<<>><><<>><<><<>>>><<><<<<>>><<<>>>><>>><<>>><<>>><<>><<<><<<<>><>>>><>>><<<><<<<>>>><<<<>>><>>>><<<<>>><<<><>><><<<<>>><<>>>><<>>><<<>><<>>>><<<>>>><<>>><<>>>><>>><<<<>>>><<<<>>><><<<<>>>><><<<<>><<>>>><<><<>>>><<<><><>>>><><<<<>><<<<>>><<>><>><<<><<<<>>>><<<>>><<<<><<>>>><<<>>>><<<<>>><<<><<<>><<<>>>><<<<>><>>>><<<>><<<>><>>>><<>>>><><<<>>><<<>>>><><<>>><<<><<<><>>>><<>>><<<>>>><><>><><>>>><><<<<><<>><<<>>><>>><<<<>>>><<<<>>>><<<<>>><<><><<>>><<<<>><>>>><<>>><<<>>><<<<>>><<<<>><>><<<<>>>><<>><<>><<<<>><<<<>>>><>>><<<>>>><<<>><<<<>>>><>>>><<>><>>>><>>><<>>>><<<>>>><<<<>><<<<>>>><<<><<<<>>><>>><<<<>><<<<>><>>><>><<<<><<<>><<<><<>><>>>><<<<>><><<<><>>><<<><<>><<<<>>>><<><<<>>><<>><<<><<><<<<>>><<<<><<<><<<>>><>><<<><<<>>>><>>>><<<>>>><<<<>>>><<<>>><><<>>>><<>>>><><<>>><>>>><<<>>><>>>><<<><<<<>><<<>>><<><<><>>>><<<>>><><<<>>><>><>>><<<<>>><<><<<<>>><<<<>>><<>><<>>><<<><<<<>>><<><<<>>>><<<<>>><<<>><>>><<<>><<<>>><>>>><<>><<<<><<>>>><<>>>><<<><<>>>><><>><>>><>><<>><<<<><<><<>>>><>><<<>>><>>><>>>><<<>>>><<<>><<<>><<>><><<<<><<<<>>>><<>>>><<>><<<>><<>><<<<><<<>><>>>><<>>><<<<>><>>><<<<>><<<<>>><<<<><<<>><<<>>>><<<>>><<<>>>><<<<><<<<>>>><<>><<>>><<<><<<>>>><<>>><>><<>>>><<<>>>><<>>>><>>><>>><<>><<<<><<<<>><<<<>>><<<<>><>><<<>><>>>><><<<<>>>><>><<<>>>><<<><<>>><<><><<<>>><>><<><>>><<<<><<>><<<>><<<>>><<>>><<<>>><<<><<>><>>>><>><<<<>><><>>><>>>><>>><<<>>><<>><<<><>>><>>><<>>>><<<><<<<>>><<<<><<>><<<>>>><<<>>><<<><>>>><><<><<<<>>><<<<>><<<<>><<>>><<>>>><>>>><<<><<<><>>>><>><<>>><<>>>><<<<><>><><<<><<<>>><<<<>><<<><<<><>>><<<>>><>>><<<<>>><><>>>><<<<><<<<>>><<>>><<>>>><<<<>>>><>>><><<>>>><><<<>>><<<>>>><>><<>>><<<>>>><>>>><<<<>>>><>><<<>>>><>><>>>><<><>>><<>>><>>>><<<>>>><<<<><<<<>>><<<<>>>><><>><<><<><<<<>>>><<><<>><<>><<<>><<<<>>>><><><<>><>>>><>>><<>>><<>><<<<>><<>><<<<>>>><>>>><<>>>><<<>>>><<<<>>>><<>>><><<<<>>><<>><>>><<>>>><<<<>>><<<<>>><<>>><<><<<<>>><>>>><<<>>>><<<<><>>>><<<<>><<<<>>>><<>><<<>><<<<>>><<<<>><<<>><>>><<<>>>><>>>><<<><<<>>>><<<>>><<<<><<>>><<<>>><<>><><<<<>>>><<><<<>>><<<>>><<<>>><<<<>><<<<>><<<<>>>><<<><>><<><<<<>>>><<<<>><<<>>>><><<<>>><<<><>>>><<>>>><<<<>>>><<<<>>><<>><<<>>><<><<>>><<<>>>><<<<><<<<>>>><<<>>>><<<>>>><<><<<>>><<<>>><>><<>>><<<><<<>>>><<<>>>><<>>>><<<<>>>><<>>><>>><<<<>>><<<<><<<>>><<<><<<<>>>><><<>>><>>>><<>>>><<<>>><>><<<>>><<<>>><<>>>><<<<><<>><<>>>><<<<>><<>>>><>><<<<>>>><<><<<><>>>><<<<><<<>><<>>>><>><<>><<<<>>>><<<<>><<>>>><<>>><><<<<>><><<<<><<<<>>>><><>><<<<>><<<>>><>><<<><<<>><<<<>>>><>>><<<<>>><<<<><<>>><<<<>>><<<<><<<<>>>><>>>><<<>>>><>>><<>>>><<<<>><<><<<>>><<<>>>><<><<<<>>><>><<>>>><<<<>><><>><<><>><>>><<><<<>><<<<><>>><<<<>>><>>><>>>><>>><<>>>><<<<>>>><<<<>><>><<<<><<<<><<<<>><<<>>>><<<><<<>><>>><>>><<>>><<<<><<><<>>><<<>><<<>>><><<>>>><<<<>>><<<>>>><<>><<<>>>><<<<>>><<<<>>><>>><<<>>><<>><<<>>>><>>>><<>>><>><>><<>><<>>><<<<>>>><><><<>>>><<<>>>><<><<<>>>><>><>>><>>><<>><>>>><>><<>>><<<<>>><<<>>><<<>>>><<><<<>><><<>><>>>><<>>>><<<<>>>><>><><<<<>><<>>>><>><><>>><<<>>><>>>><>><<<<>><>><>><<<>>><><<>><>><<>><<<<>>>><><<>>><<<>>>><><<<><<<<>>>><>>><<>>><<<><<<<>><<<>>>><<<>>><<<>><>><<<<><<<<><<<>>>><<<>>><<><<<>>><<<<>>>><<<>>><><<<>><<<><<>>>><><>>><<<><<<>><<>>>><<<>><<<<><<><<<<>>><<>>><<<<>>>><<<>>>><<<<>>><<<<>><>><<>>><<><<<>>>><<<>><<<<><<>>>><<<<>><<<<>><<>>>><><<<<>><<<<>>><<<<>>>><<>>>><>>>><<>><<>>><<<>><<><<<>>>><<>>>><<<>><<<><<>><<><<<>><<<<><<>>>><>>><<>>>><<<><<>>>><<<>>>><<<>><<<<>>>><<<<>><<<<>><>>><>>>><<>>>><<><<>>><<<<><<>>>><>><<>><>>>><<<<>>><<<<>><<<<>>>><<<<><<<<><<><<><><<>>>><>><>>><<<<>><<>>><>>>><><<<><<>><<<>>>><<<<>><<<<><<>><<<><<>><<<>>><>><<<>><<>>>><<>><><><<<>>>><<<><<<>>>><>><<<>>><<<>>>><<>>>><<<<>>>><>><<<>><<<>>>><<<<>>>><>><<<<><<<>>><<<<>>><<>>><>>>><><>>>><<>>><<<>>>><>><<<<>>>><<>>><<><<><<<<>>>><<<><<<<>>>><<>>>><<<><<>>>><<<<>>>><<<<>>>><<<>>><<<<>>><<<><<<><<<>><<>><>>><<><<><<<<>><<<<>>>><<<<><<>>>><<<>><<<>>><<<>>><<<<><<<<>>><<<<>><<<>><>>><<>>><<<<>>><><<><<<>>><>><>>><<<>>>><<<>>><<<<>>>><<<>>><<<><<<><<<>>>><>>>><<<<>>><<>>><<>>>><<<><<<>>><<<>>>><<<<><<<<>>><<>><>>>><<<<><>><>><<>>><<><<<>>>><<<<>><<<<>><<>>>><<<<>>><<<<><>><<<>>>><<<<>>>><<<>>><<>>><<>>><><>>><><<<<><<<<>><<><><<><<<<>><<<>>>><<>>><<<<>><<<>>><<<<>>>><<<<>>>><<<>><<<><<>>><>>><<<<>><<>>><>><<<<>>><<<<>>>><<>><>>>><<<<>>><>><>><<<>>>><<<>>><<<>><<<<>>>><<<>>><<<>>>><<>><>>><<<<>>><<>><<<><<<>><<<>><<<>><<<<>><<<><<>>><><<<>>>><<<<>>><>>><<>>>><<<><<>>><>>>><><<>><<>><<<<>><<<<>>><<<>>>><>>>><<<><><<<<>><<>>>><<<<>>>><<<>>><<<<>>>><<<>>><<>>><<>>>><<>>><>>>><<<>><<<><>><<<><<><>>><>>>><<<>>><<>>>><<>><>><>>>><<<<>><<>>>><<><<>>><>><<<<><<><<<>>>><<<<>>><>>>><<<>>><<<<><<<>>>><<>>>><<<<>>>><<><<<<><><<>>><<<<>><>><<<>><<><>><<>>>><<<<><<<><<<>>><<<><<>>><<>>>><><<>>>><<>><>>>><<<<>>>><>><<><<<<>>>><<<<>>><<<>><<<>>><<>>><<<<><>>><<><>><<<<><>>>><<<>>><<<<><<><>><<<>>>><<><><><<>><<>>>><<<<>>><<<>>>><<<>><>>>><>>>><<<<>>>><<<<>>>><<<<>>>><<<<>>>><>>>><<>>>><<<>>><<<<>><<<>><<><<>><>>>><<<><<<>>>><<<>>><<<>>>><<<>>>><<<>>>><<<<>><<<<>>><<<>>>><<><<<<><<<<>>>><<<<>><<<<>>>><<<>>><<<<>><<<<>>>><><<<<><<<<><>><<<>><<<><<>><<><<<>><<>><<>>>><<>>><>>><<<<>>><<<<>><<<<>>>><<<>>>><>><>>>><>>>><<>>><<<>><<>>><<<<><<<<>>><<<>>>><<><<>><<<<>><<<><<<>>><><<<<>><<<<>><<<>>>><>>>><<>>><<<<>>><<<<>>><<>>>><<<>>><<<<>>>><<<<>>><<<><><<<>>>><<<>><>>>><<<<>><<><<><<<><<<><>><<>>>><<<><<<<>><>>>><<>>>><>>><<<<>>><<<<>><<>>><<<>>><<<<>><<<<>>>><<<><>>><<<<>><>><<<><<<>>>><>>><<<<>>><<<>><>><>><<<>>>><<>>>><<<><<>>><<<<>>>><<>>><<<>><<<<>>><<>>><<<<><<<<>>>><<>>>><<<<>>>><<<<>>>><<><<<>><<<<>><<<>><<<>><<<<>>><>>><<<><>>>><<<<>>>><<>>>><<<>><<<<><><<<<>>><<<<>>>><<>>><<>>><<<>><<<<>>>><<<<>>>><>><>><<<<>>>><<<>>>><<><<<><<>><<<<>><<<>><<<<>><>>>><<<<>>>><<<<>>>><<<>>>><<<<>>><<>>>><<>>>><><<<>><<<>>><<<><<>>><><<<><>>>><<<<>>><>><>><<>>>><<<<>>>><<<<>>><>><<<<><<>>><>>>><<>><<>>>><<>>><<<<>>><<<>>><>><<<>><<<>>>><<<>><<<>><<>>><>><<<<>>><<<<>><<<><<<>><<<<>>>><<><<<>>><<<<>>><<><<><>>>><<<>>><<<>>>><<<>><<<>><<<<>><<<<>>><<<<>>>><<<>>><<<>><<<<>><<<>>>><><<><<><>><<<>>><<>>><<<<>>>><<<<>>><<<><<>><<<><<<<>><<<<>>><<<<><>>><<<>><<><><<<>>>><<<<><<<>>><<<>>>><<<<>>>><<<>><<<<>>>><<<><<<<>><<>>>><<<>><<>>>><<><<<>>>><><>><<<<>>><><<<>>>><<<><<><<>>><<<<>>><<<>><>><<<><<<>><<<<><<<<>><<<<><<<<>><><><<<><>>><>>><>>>><<<<>>>><<<>>><><>>>><<<<>>><<<>>><<<<>><<<>><<<><<><<><<>>>><><<<>><<><>>><<<<>>><<<<>>><<><<<<>><<<<><<<><<<>>>><<<>><<<>><<<<>><<<<><<<>>>><<<<><<<<>><<<<><<<<>>><<<<>>><>>><<<<>><<>>>><<<>>>><<<<>>><<>><<<<>><>>><>>>><<><<>>>><<>><>>>><>>><>><<>>>><<<<>>>><<<<><<<<><<<>>><<<>><<<<>>><><<<<>><<<<>><><<<<>>><<<<><<><<><<>><<<><>>>><<<<>><>><<>>>><<<>>>><>><>><<>>>><>><><<<>><><>>><<>>><<>><>>><>>>><<<<>><<>>><<>>><>><<<>>>><<<>><<<>>>><<<<>><<<<>>><<<>>>><<<<>>><>>><><<<<>>><>><<<>><<<<><<><<<>><<>>><<><<<<>>><<<>>><<<><>><><<<<>>>><<<><<><>><<>>>><<<>>><<<>>><<<><>><><<>>><<><<>>><><<>>>><>>><<<<>>><<>>><<<<><>><<<><><<<<><<>>><<>>>><<<>>><<<>><<>>>><<<><<<>><<>>>><<>>><<<<>>><<<>>>><<>>>><<<<><<>><<>><<><>>><<><<<<>><<>><<<>><<<<><><<<<>>><>><<<<>>>><<<>>>><<<<>><>>>><>>>><<<<><<>>><<<<>><<<<>><<<>><<<>><><<<<><<><<<><>>>><<<<>>>><>><><>><<<<><<>>>><<><>><<>>><<<<>>>><<<<>>>><>>>><<>>><<<>>>><<>>><<<>>>><<<<>><<<><>>>><<>><<>>><><<>><<<>>>><><<>>>><<<>><<<<>>><><>>><<<><<>>><<<<>><<<>><>><<<>>><<<<>><<<<><<<<>>><<<<>>>><><<<<>><<<<>><<<><<>><<><<<>><<<>><<>>>><>><>><<>>><<><<>>>><>>><<><<<><<>><<>><<><>>>><<>>><<><<<>>>><<<<><<>>>><<><<><<<>>><<><<<>><<<<>><<<<><<>><<<>>><<>>><<<<>>><<>><<<>>>><<<<>>>><>>>><<<<>><<>><<<<>>><<><<<>>>><<<>><<<<>><<<>>>><>><<>>>><<<<>>><<<<>>>><>>>><<<<>><>>>><<<<><<<<>>><<>>><<<<>><<>>>><><<>><<>>><<<>><<<<>><>>><>>>><>>><<<<><>>>><<<>><>>><<<<>><<<>>><<<><<<>>><<<<>>>><<<>>>><>>><<>><<>><<>>><<<<>>>><<<<>>><<<>><<><<<>><>><<<>>>><<<>><<<>><<<>>>><<<><>><<<>>>><<>>>><<>>><<<>>><>>>><<<<><<<<>>>><<>><<<<><<<<>>><<>><<<>><>>><>>>><<<<>>>><<<>><<>>><>>>><<>><<>>><<><<><<>>><<>><<<>>>><<>>>><<<<>>> diff --git a/Media/2022/17.png b/Media/2022/17.png new file mode 100644 index 0000000000000000000000000000000000000000..d9bdbc6ad010157d8dc7e715949ce8fa47297ac4 GIT binary patch literal 7630 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

- 2022 - 32 ⭐ + 2022 - 34 ⭐

@@ -54,6 +54,9 @@ + + +

2021 - 50 ⭐

From 3c24b24ab7978377568ddbc6e9a0ddf35664c4ad Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 17 Dec 2022 17:31:20 +0100 Subject: [PATCH 040/225] Add day 17 --- 2022/17/17.kt | 43 +++++++++++++++++-------------------------- 1 file changed, 17 insertions(+), 26 deletions(-) diff --git a/2022/17/17.kt b/2022/17/17.kt index c42bd8d..e00d4ee 100644 --- a/2022/17/17.kt +++ b/2022/17/17.kt @@ -39,13 +39,9 @@ fun Tower.simulate(rockCount: Int, multiply: Long = 1L): Tower { cols[x-1] = y break } - val mi = cols.minOrNull()!! - for (x in 0..6) - cols[x] -= mi + cols.minOrNull()!!.run { (0..6).forEach { cols[it] -= this } } cols.add(rockIndex % 5) - if (cols !in occ) - occ[cols] = 0 - occ[cols] = occ[cols]!! + 1 + occ[cols] = occ.getOrDefault(cols, 0) + 1 if (mostCommon != null && cols == mostCommon) indicesOfMostCommon.add(rockIndex) @@ -54,17 +50,15 @@ fun Tower.simulate(rockCount: Int, multiply: Long = 1L): Tower { dirIndex++ // Left right (dir) - var canHappen = true + var isLegal = true val lastx = stack[0].size-2 val endy = starty + rock.size - for (y in starty..endy) { - for (x in 1..lastx) { - if (stack[y][x] == '@') { - canHappen = canHappen && stack[y][x+dir] in ".@" - } - } - } - if (canHappen) { + for (y in starty..endy) + for (x in 1..lastx) + if (stack[y][x] == '@') + isLegal = isLegal && stack[y][x+dir] in ".@" + + if (isLegal) { for (y in starty..endy) { var new = stack[y].joinToString("").replace("@", ".").toMutableList() for (x in 1..lastx) { @@ -77,15 +71,13 @@ fun Tower.simulate(rockCount: Int, multiply: Long = 1L): Tower { } // Downward - canHappen = true - for (y in starty..endy) { - for (x in 1..lastx) { - if (stack[y][x] == '@') { - canHappen = canHappen && stack[y+1][x] in ".@" - } - } - } - if (canHappen) { + isLegal = true + for (y in starty..endy) + for (x in 1..lastx) + if (stack[y][x] == '@') + isLegal = isLegal && stack[y+1][x] in ".@" + + if (isLegal) { for (y in endy downTo starty+1) { for (x in 1..lastx) { if (stack[y-1][x] == '@') { @@ -94,8 +86,7 @@ fun Tower.simulate(rockCount: Int, multiply: Long = 1L): Tower { } } } - } - else { + } else { for (y in starty..endy) stack[y] = stack[y].joinToString("").replace("@", "#").toMutableList() while (stack[highestRockIndex-1].contains('#')) From 581fc6ca03fd7a10a13a66d761410ec7042035d2 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 18 Dec 2022 07:38:25 +0100 Subject: [PATCH 041/225] Add day 18 --- 2022/18/18.kt | 39 + 2022/18/input.ans | 2 + 2022/18/input.in | 2150 +++++++++++++++++++++++++++++++++++++++++++++ Media/2022/18.png | Bin 0 -> 8041 bytes README.md | 5 +- 5 files changed, 2195 insertions(+), 1 deletion(-) create mode 100644 2022/18/18.kt create mode 100644 2022/18/input.ans create mode 100644 2022/18/input.in create mode 100644 Media/2022/18.png diff --git a/2022/18/18.kt b/2022/18/18.kt new file mode 100644 index 0000000..ad4da7b --- /dev/null +++ b/2022/18/18.kt @@ -0,0 +1,39 @@ +data class Point(var x: Int, var y: Int, var z: Int) { + operator fun plus(o: Point): Point = Point(x+o.x, y+o.y, z+o.z) + fun adjacent(): List = dirs.map { this+it }.toList() +} + +val dirs = listOf( + Point(1, 0, 0), Point(0, 1, 0), Point(0, 0, 1), + Point(-1, 0, 0), Point(0, -1, 0), Point(0, 0, -1), +) + +fun main() { + val input = generateSequence(::readlnOrNull) + .map { it.split(",").map { it.toInt() } } + .map { (x, y, z) -> Point(x, y, z) }.toList() + val limitsX = input.minOf { it.x-1 }..input.maxOf { it.x+1 } + val limitsY = input.minOf { it.y-1 }..input.maxOf { it.y+1 } + val limitsZ = input.minOf { it.z-1 }..input.maxOf { it.z+1 } + + // Part 1 + input.sumOf { it.adjacent().count { !input.contains(it) } }.run(::println) + + // Part 2 + val queue = ArrayDeque() + queue.add(Point(limitsX.first, limitsY.first, limitsZ.first)) + var count = 0 + val visited: MutableSet = mutableSetOf() + while (queue.isNotEmpty()) { + val point = queue.removeFirst() + if (point in visited) continue + visited.add(point) + for (adj in point.adjacent()) { + if (adj in input) + count++ + else if (adj.x in limitsX && adj.y in limitsY && adj.z in limitsZ) + queue.add(adj) + } + } + println(count) +} diff --git a/2022/18/input.ans b/2022/18/input.ans new file mode 100644 index 0000000..d2c40a3 --- /dev/null +++ b/2022/18/input.ans @@ -0,0 +1,2 @@ +3448 +2052 diff --git a/2022/18/input.in b/2022/18/input.in new file mode 100644 index 0000000..ff3599f --- /dev/null +++ b/2022/18/input.in @@ -0,0 +1,2150 @@ +13,2,10 +3,6,9 +11,17,9 +7,2,11 +14,6,5 +13,16,8 +9,7,2 +3,9,14 +8,3,5 +3,12,9 +7,3,7 +13,2,13 +4,6,5 +13,4,9 +4,8,10 +15,5,8 +17,14,11 +13,17,11 +13,7,2 +11,14,4 +8,9,17 +14,7,15 +4,10,4 +9,12,2 +8,5,13 +14,15,6 +15,14,11 +8,16,10 +2,13,10 +8,18,8 +14,14,5 +3,5,7 +18,8,10 +13,14,11 +6,8,17 +14,10,16 +15,6,6 +16,13,10 +14,4,7 +5,3,5 +10,14,2 +4,13,5 +12,10,1 +6,7,15 +5,10,3 +6,15,13 +14,13,3 +13,14,16 +9,6,16 +10,14,16 +13,16,10 +4,3,10 +2,11,6 +9,12,16 +8,1,8 +9,2,7 +16,10,16 +5,10,15 +16,5,12 +5,11,13 +7,15,8 +5,14,14 +3,8,8 +5,16,6 +5,12,16 +11,16,4 +3,6,10 +8,12,2 +9,10,2 +4,12,8 +9,13,17 +7,12,16 +5,16,13 +12,11,18 +4,10,17 +5,14,6 +5,13,13 +3,7,5 +6,16,11 +3,11,5 +15,11,15 +4,6,14 +5,2,8 +5,13,12 +14,6,16 +3,5,8 +15,15,14 +15,8,15 +16,7,4 +10,4,3 +17,12,7 +7,16,7 +6,10,17 +9,2,9 +10,18,9 +15,7,8 +16,16,12 +3,4,11 +16,15,11 +13,16,5 +13,4,6 +13,3,13 +15,12,11 +14,3,11 +9,16,11 +3,13,8 +13,6,15 +6,14,6 +12,2,11 +3,5,12 +7,17,8 +5,15,5 +8,11,2 +14,3,10 +11,16,8 +4,12,4 +10,11,3 +16,7,12 +5,5,14 +2,7,10 +13,7,17 +16,5,11 +15,6,13 +8,8,18 +3,10,5 +2,6,11 +10,4,5 +12,7,17 +3,9,6 +17,7,11 +10,5,16 +17,6,11 +10,2,12 +7,10,18 +8,16,11 +11,15,15 +16,10,5 +10,16,4 +4,16,6 +15,4,11 +2,9,9 +3,7,6 +5,3,6 +10,16,5 +13,15,11 +3,4,9 +3,8,12 +6,5,4 +2,9,8 +2,7,7 +16,14,14 +15,10,15 +16,10,13 +9,14,4 +2,7,6 +13,3,11 +17,13,10 +12,2,10 +8,16,13 +16,11,11 +12,10,17 +6,15,11 +10,17,13 +6,10,4 +8,12,4 +3,11,14 +9,5,4 +15,6,14 +6,6,4 +14,5,5 +17,10,9 +18,11,11 +5,4,5 +15,5,15 +12,5,13 +3,8,7 +13,3,14 +13,8,3 +3,5,10 +10,17,7 +15,15,13 +14,13,15 +5,14,12 +12,3,11 +14,13,5 +13,17,9 +5,8,17 +8,2,11 +10,11,2 +9,5,1 +11,3,9 +14,4,10 +11,12,2 +10,14,17 +17,11,11 +11,16,11 +9,11,1 +5,4,13 +17,9,10 +2,11,12 +10,9,17 +12,16,7 +16,12,8 +11,7,1 +12,8,17 +18,7,11 +10,4,17 +5,5,3 +2,10,13 +8,5,14 +3,9,10 +6,5,14 +7,7,2 +8,2,7 +15,9,16 +10,14,4 +5,15,7 +14,13,12 +17,14,8 +16,11,8 +15,6,15 +3,11,15 +10,6,2 +11,14,16 +10,5,14 +2,8,11 +12,4,16 +9,17,12 +4,4,11 +12,16,6 +2,9,6 +15,7,10 +7,8,2 +11,2,11 +5,6,3 +11,18,8 +4,10,10 +12,4,15 +2,14,10 +7,11,2 +13,11,16 +2,9,11 +4,14,6 +12,8,18 +4,7,15 +8,12,17 +3,15,7 +15,16,8 +3,7,15 +10,2,13 +12,16,11 +15,4,13 +14,10,2 +12,15,15 +5,12,15 +12,15,4 +9,10,18 +9,8,2 +14,15,12 +3,13,11 +13,17,10 +2,10,12 +6,17,7 +15,14,7 +8,2,6 +11,5,5 +7,8,3 +4,7,8 +9,3,11 +13,4,3 +14,3,8 +13,4,4 +14,15,5 +4,6,7 +6,14,7 +6,2,7 +6,5,5 +11,3,6 +10,15,5 +6,3,13 +13,14,6 +13,14,15 +3,9,7 +14,3,7 +8,9,18 +14,8,12 +13,3,8 +15,15,9 +7,16,4 +6,18,9 +10,15,3 +6,16,12 +9,14,2 +12,3,8 +9,11,15 +4,15,9 +8,2,9 +8,11,1 +14,11,15 +11,11,1 +1,11,9 +14,7,13 +6,10,16 +15,12,5 +12,3,7 +15,11,7 +12,13,14 +12,10,3 +5,4,7 +12,13,17 +6,9,17 +14,8,3 +2,9,10 +17,9,6 +4,15,5 +4,13,6 +10,12,16 +3,8,4 +11,1,9 +2,6,13 +2,12,4 +11,10,17 +13,15,16 +9,2,6 +6,11,3 +3,7,13 +8,15,13 +15,7,7 +3,12,12 +17,9,11 +13,13,15 +12,2,7 +5,9,15 +7,15,13 +9,4,16 +9,14,14 +11,10,2 +16,8,12 +10,3,5 +11,18,9 +11,13,15 +3,14,9 +8,18,13 +8,10,17 +6,13,3 +5,13,14 +7,4,5 +15,14,8 +8,18,10 +4,5,10 +16,6,11 +15,13,10 +12,16,9 +9,5,16 +4,14,10 +11,17,11 +12,17,10 +17,8,8 +15,3,12 +14,11,17 +16,5,9 +11,8,1 +5,12,3 +9,3,7 +14,7,3 +16,11,14 +15,9,7 +14,11,6 +11,1,7 +2,12,10 +6,3,8 +3,5,9 +10,10,2 +4,6,11 +4,10,8 +6,12,17 +13,3,10 +8,9,1 +4,5,12 +3,13,7 +14,5,4 +10,2,6 +3,14,10 +17,6,8 +15,13,7 +9,5,15 +10,5,4 +11,14,15 +16,5,8 +8,3,11 +4,15,6 +16,15,8 +16,8,6 +13,15,13 +2,6,12 +3,14,15 +16,7,14 +5,14,5 +10,16,14 +17,7,9 +14,15,7 +4,7,5 +14,14,4 +6,7,17 +0,10,7 +6,16,8 +17,15,9 +4,8,14 +14,14,6 +5,5,8 +13,13,4 +3,12,5 +7,17,11 +13,14,14 +15,8,3 +3,10,14 +8,6,1 +7,3,8 +6,12,16 +17,10,8 +11,8,17 +17,8,6 +14,5,6 +7,2,7 +12,16,15 +14,3,14 +17,9,7 +12,18,6 +3,14,12 +15,12,15 +14,5,13 +17,11,6 +7,13,2 +3,6,7 +17,8,5 +14,15,9 +13,11,3 +16,14,11 +8,17,11 +13,6,2 +10,17,14 +12,12,15 +5,7,16 +7,14,4 +7,2,9 +5,6,4 +15,14,5 +16,3,7 +14,4,4 +4,13,9 +9,16,15 +8,17,8 +15,6,11 +11,12,16 +14,17,7 +5,15,6 +16,11,12 +5,16,10 +12,4,6 +3,13,10 +1,8,9 +7,2,10 +7,13,17 +19,9,11 +6,11,16 +9,18,10 +16,11,4 +13,7,16 +10,3,7 +15,13,13 +8,11,4 +5,15,12 +17,10,6 +14,12,15 +17,13,8 +6,13,15 +7,7,16 +10,2,8 +4,13,13 +9,15,14 +9,4,3 +6,4,8 +5,10,16 +4,7,16 +13,10,16 +5,6,15 +8,10,16 +7,16,6 +7,7,17 +3,11,12 +12,7,1 +16,12,15 +6,16,6 +10,17,11 +7,5,13 +10,14,13 +16,7,5 +11,13,17 +7,7,4 +6,5,13 +9,16,6 +4,9,4 +13,16,13 +5,11,5 +5,3,8 +11,4,9 +17,9,9 +6,4,7 +15,9,6 +8,5,16 +3,12,14 +12,17,9 +3,8,9 +6,2,8 +15,9,14 +2,6,10 +18,11,7 +4,3,8 +12,11,16 +17,13,7 +2,10,6 +1,13,7 +16,6,6 +6,14,14 +12,10,2 +3,5,5 +15,9,15 +15,5,6 +3,6,14 +9,5,3 +11,3,11 +7,5,15 +13,11,4 +7,5,5 +13,8,16 +15,13,6 +2,7,8 +16,14,10 +6,6,15 +15,16,9 +10,17,10 +8,4,6 +6,16,13 +17,4,10 +5,9,3 +9,13,2 +6,17,9 +9,13,16 +7,9,18 +9,17,10 +11,2,9 +17,7,7 +7,2,12 +8,13,17 +16,11,5 +18,7,9 +12,13,2 +9,15,9 +9,2,11 +13,3,15 +1,10,12 +3,12,10 +14,4,8 +13,15,5 +7,13,16 +3,15,9 +15,12,16 +12,4,13 +10,6,17 +11,10,18 +6,17,10 +14,6,10 +12,5,15 +7,9,1 +7,5,17 +5,3,9 +13,15,7 +4,4,8 +7,8,17 +3,12,13 +17,8,13 +9,3,12 +1,14,9 +4,14,12 +9,16,16 +10,10,17 +5,8,16 +6,16,15 +11,15,3 +12,9,2 +2,8,6 +6,11,17 +7,8,16 +6,6,3 +3,6,6 +6,2,10 +7,15,12 +9,4,2 +11,3,14 +16,15,13 +13,14,13 +16,15,7 +14,9,7 +6,3,7 +15,16,11 +5,15,13 +2,10,4 +5,11,14 +15,14,14 +7,3,10 +12,15,14 +7,5,4 +14,11,3 +7,1,11 +13,2,12 +5,2,9 +10,4,16 +9,17,6 +6,8,4 +15,5,5 +12,2,6 +3,8,6 +7,12,17 +12,16,10 +16,13,8 +15,3,8 +17,9,8 +10,2,9 +12,8,5 +16,7,13 +14,16,8 +4,12,16 +8,3,6 +7,18,6 +12,5,5 +10,2,14 +17,6,12 +7,9,17 +5,3,10 +15,4,14 +14,2,10 +12,6,4 +7,16,12 +6,17,8 +15,9,4 +15,7,13 +7,9,4 +6,3,6 +2,13,7 +3,12,8 +3,8,15 +8,3,8 +7,16,5 +12,6,2 +3,12,4 +6,10,2 +17,8,10 +11,2,10 +6,16,9 +8,15,4 +9,9,18 +17,13,9 +3,9,13 +9,15,12 +12,11,3 +18,7,8 +12,4,5 +9,5,6 +10,7,2 +2,8,7 +2,8,13 +10,6,16 +9,3,15 +3,7,4 +1,9,9 +13,16,12 +11,5,15 +4,8,16 +14,4,9 +5,6,14 +11,7,18 +12,12,3 +17,6,7 +16,6,13 +14,15,14 +11,11,17 +15,5,11 +7,15,14 +10,3,16 +15,15,5 +2,11,7 +13,13,16 +5,5,4 +7,5,3 +12,3,15 +14,14,7 +8,16,14 +4,10,13 +5,8,13 +17,14,10 +16,12,5 +5,17,12 +2,10,11 +10,1,10 +16,11,6 +11,3,5 +18,9,12 +16,13,12 +15,10,3 +13,2,8 +2,12,7 +8,7,16 +6,15,14 +15,7,3 +16,6,10 +12,15,12 +9,15,4 +10,12,3 +3,13,9 +8,6,4 +8,5,15 +5,3,13 +16,14,5 +4,12,5 +18,12,9 +16,6,9 +16,14,8 +8,5,4 +10,7,3 +13,4,5 +6,14,4 +8,10,2 +12,16,13 +12,11,17 +10,6,5 +4,5,7 +18,8,9 +17,6,9 +9,16,9 +17,8,7 +6,9,2 +10,8,2 +4,16,8 +8,17,14 +8,15,15 +14,12,13 +16,10,9 +8,16,6 +2,9,13 +2,8,14 +5,10,14 +7,15,3 +10,4,15 +5,8,15 +4,10,15 +14,7,6 +15,6,12 +9,16,4 +13,16,11 +5,5,13 +12,3,14 +10,15,2 +8,2,13 +13,12,15 +3,3,9 +4,4,6 +14,7,4 +6,14,12 +14,7,17 +5,9,4 +13,4,13 +8,12,16 +8,2,14 +3,13,12 +10,18,6 +17,11,5 +13,9,3 +14,16,12 +2,13,12 +11,14,17 +8,17,12 +4,14,13 +14,8,2 +11,2,6 +8,13,3 +9,4,15 +10,2,15 +12,11,4 +2,14,9 +4,14,5 +15,4,9 +7,2,13 +9,16,10 +9,12,17 +13,5,4 +16,4,12 +11,16,13 +7,3,14 +7,13,3 +12,7,16 +14,12,16 +9,16,7 +11,12,4 +11,3,12 +13,18,7 +16,9,14 +16,14,6 +1,7,7 +16,12,10 +16,8,14 +14,10,4 +15,10,14 +14,14,15 +15,15,6 +12,14,4 +11,6,3 +16,9,6 +17,12,11 +5,6,5 +8,17,9 +17,8,4 +5,4,14 +17,12,10 +6,4,5 +4,4,10 +15,6,5 +18,6,9 +4,12,9 +12,7,3 +8,10,18 +16,12,13 +9,5,5 +5,13,15 +14,4,12 +4,7,6 +10,9,2 +1,12,10 +12,2,8 +7,14,3 +8,9,2 +3,6,11 +17,9,12 +6,3,9 +4,8,4 +16,7,6 +4,10,16 +5,14,13 +5,15,9 +12,16,4 +6,7,2 +12,2,13 +8,5,3 +9,9,2 +10,6,3 +12,4,11 +11,2,7 +9,10,4 +11,16,5 +13,12,3 +11,8,2 +1,10,8 +9,15,17 +7,11,16 +5,5,11 +11,14,3 +11,17,8 +12,16,8 +4,4,5 +10,3,15 +8,4,5 +1,7,8 +4,2,7 +3,7,14 +11,6,2 +13,17,7 +15,11,3 +13,15,12 +6,5,15 +1,6,10 +4,13,4 +6,2,13 +8,3,13 +5,4,6 +15,12,4 +9,7,17 +14,7,16 +8,11,18 +14,12,4 +7,16,10 +13,2,11 +12,9,18 +10,1,9 +18,9,11 +14,12,5 +9,17,7 +17,7,12 +5,14,9 +13,9,1 +10,5,15 +16,11,16 +4,3,11 +3,4,12 +4,5,5 +14,12,3 +10,6,4 +12,15,7 +2,9,12 +8,6,15 +3,14,11 +9,16,5 +17,11,9 +7,17,7 +3,7,3 +13,10,17 +2,12,13 +7,3,11 +13,7,3 +3,5,6 +11,17,6 +16,10,11 +13,4,14 +6,7,3 +11,7,16 +3,6,13 +9,16,12 +13,16,7 +9,2,10 +9,15,15 +6,12,2 +11,15,5 +5,11,6 +5,13,5 +16,4,9 +13,3,9 +16,8,15 +13,11,2 +9,3,5 +8,16,5 +14,3,12 +4,11,3 +9,2,12 +2,10,8 +3,8,14 +5,11,4 +6,14,11 +16,10,12 +9,17,8 +4,7,7 +7,16,11 +10,9,1 +6,5,12 +12,4,7 +15,14,9 +8,12,18 +14,6,14 +8,7,3 +8,8,17 +8,4,14 +2,8,9 +14,5,14 +4,4,14 +13,3,6 +2,12,11 +6,10,15 +14,8,15 +16,5,13 +11,13,4 +16,13,6 +1,10,6 +17,6,10 +5,7,2 +8,6,17 +11,4,4 +15,4,7 +13,3,5 +13,17,5 +13,4,8 +13,5,14 +8,3,4 +8,3,10 +10,13,2 +8,8,2 +17,11,10 +14,14,14 +11,4,5 +14,16,7 +3,14,8 +8,3,14 +9,3,16 +15,14,12 +12,11,2 +15,4,6 +7,10,17 +5,7,5 +5,5,5 +16,14,9 +11,12,17 +8,7,18 +9,10,1 +11,11,3 +11,2,13 +9,16,14 +6,15,15 +11,2,8 +9,12,18 +3,7,7 +14,15,8 +4,6,8 +4,11,4 +7,4,6 +13,9,15 +6,7,5 +7,15,16 +12,9,1 +10,12,2 +2,11,9 +13,3,12 +3,4,10 +3,8,3 +16,10,4 +10,13,3 +4,4,7 +3,10,12 +9,9,17 +7,14,16 +6,17,12 +6,8,3 +7,18,10 +2,12,9 +8,9,3 +2,5,10 +9,1,8 +17,6,13 +12,3,6 +2,11,8 +2,7,9 +8,4,15 +17,14,9 +16,8,4 +17,12,13 +12,3,5 +10,3,13 +2,10,14 +7,16,8 +5,10,2 +14,5,8 +9,14,16 +11,6,4 +17,5,11 +16,6,7 +16,11,9 +13,16,6 +7,4,14 +5,7,6 +10,5,3 +3,6,12 +14,5,15 +3,10,15 +12,4,3 +8,6,2 +9,8,17 +6,16,7 +12,11,1 +4,12,6 +7,6,3 +12,4,12 +8,14,4 +2,11,11 +14,17,13 +8,16,12 +13,15,4 +6,12,3 +9,16,8 +10,9,0 +7,10,2 +15,10,4 +16,5,6 +12,6,16 +16,9,5 +17,11,15 +5,15,10 +3,12,11 +15,6,9 +6,11,4 +13,10,4 +14,16,11 +12,18,8 +13,10,3 +15,12,7 +11,16,10 +4,7,4 +13,15,6 +10,5,2 +11,7,15 +7,2,8 +17,7,10 +10,17,8 +14,10,3 +15,9,17 +18,11,9 +6,6,16 +13,6,4 +6,4,13 +8,7,17 +7,3,4 +2,13,8 +12,1,6 +5,9,16 +13,5,6 +10,17,12 +13,11,17 +7,12,3 +14,9,15 +11,13,16 +14,9,14 +14,8,4 +12,14,3 +16,13,4 +11,9,2 +2,6,9 +4,9,7 +16,11,10 +17,11,8 +3,4,8 +5,14,11 +3,5,11 +4,14,11 +14,17,12 +3,7,9 +5,11,3 +11,11,2 +11,16,16 +9,16,13 +5,13,4 +15,11,4 +13,15,14 +14,11,14 +10,8,4 +11,7,3 +6,15,5 +11,5,3 +15,15,7 +11,16,15 +16,4,7 +7,16,13 +6,12,15 +3,9,15 +9,15,5 +9,1,10 +10,19,11 +14,4,6 +6,13,2 +18,12,11 +3,15,11 +12,13,16 +9,17,13 +16,10,14 +8,15,5 +6,3,15 +9,11,17 +14,9,17 +12,6,6 +4,9,15 +7,18,8 +9,1,12 +1,10,9 +11,5,17 +17,11,12 +12,18,11 +11,9,4 +14,9,16 +2,12,5 +5,4,9 +17,7,8 +3,10,3 +14,16,13 +6,7,4 +17,12,9 +8,17,5 +10,3,6 +13,3,7 +7,3,9 +8,9,16 +4,14,8 +10,11,16 +10,3,14 +5,17,11 +1,7,11 +0,9,10 +4,7,14 +4,13,14 +8,5,17 +17,13,12 +4,13,15 +17,7,5 +8,10,3 +6,6,6 +7,15,15 +6,12,18 +11,4,15 +4,2,6 +19,10,12 +11,1,12 +4,15,8 +13,10,14 +15,4,12 +15,13,4 +8,14,16 +11,15,6 +4,14,15 +16,6,4 +17,9,14 +12,2,5 +12,14,15 +11,10,16 +4,3,12 +12,16,12 +16,13,11 +10,7,18 +12,3,12 +5,6,13 +13,6,1 +13,4,10 +5,16,8 +15,12,14 +13,16,14 +10,16,13 +16,8,11 +7,14,17 +9,8,1 +15,14,15 +7,4,12 +15,8,4 +11,4,3 +11,18,7 +4,4,9 +5,4,12 +8,3,12 +6,16,10 +1,7,9 +4,11,15 +4,17,11 +4,12,14 +13,17,8 +2,10,10 +12,7,15 +18,9,9 +8,2,12 +14,6,2 +3,7,8 +9,8,3 +5,16,7 +13,9,2 +0,10,8 +13,7,4 +18,11,6 +5,11,17 +3,7,11 +8,17,10 +10,3,10 +1,10,7 +7,9,2 +12,13,4 +15,11,16 +9,18,13 +13,4,7 +11,9,17 +10,15,14 +16,10,15 +7,4,13 +12,9,17 +4,8,12 +10,10,1 +5,7,13 +14,17,9 +14,14,12 +15,12,13 +5,6,16 +18,9,7 +18,11,12 +12,8,3 +4,5,8 +6,7,16 +11,12,18 +16,12,14 +9,2,14 +12,8,16 +2,6,8 +6,5,16 +7,17,6 +8,1,10 +1,13,10 +10,16,15 +2,13,13 +9,3,13 +14,13,14 +14,5,9 +15,10,16 +14,9,4 +5,14,8 +6,6,17 +18,10,13 +15,15,12 +3,10,7 +11,16,9 +10,2,7 +8,18,7 +14,4,5 +8,13,4 +7,12,2 +7,4,7 +16,15,9 +10,9,18 +14,6,15 +11,7,17 +17,10,14 +14,11,4 +14,13,16 +10,8,19 +4,13,3 +11,13,14 +2,7,11 +13,17,13 +14,7,5 +10,1,8 +5,17,9 +3,9,5 +9,8,18 +7,18,9 +11,10,3 +2,8,12 +14,9,3 +10,18,8 +1,9,8 +15,8,5 +4,9,12 +4,6,4 +11,3,13 +15,10,5 +1,9,12 +3,11,7 +8,7,2 +17,9,13 +9,12,1 +3,11,11 +7,2,6 +4,11,16 +5,11,15 +12,6,3 +7,14,5 +15,13,14 +5,17,10 +12,12,17 +3,12,6 +13,11,1 +8,3,15 +10,7,16 +3,9,8 +3,7,10 +12,7,2 +5,12,5 +4,11,13 +11,9,16 +6,2,12 +11,6,6 +10,17,9 +6,12,4 +9,6,3 +3,13,13 +3,5,13 +7,17,12 +11,13,3 +3,10,11 +16,15,10 +2,9,7 +11,11,18 +2,15,9 +17,6,4 +3,6,5 +12,6,15 +14,8,14 +2,8,10 +10,8,1 +10,2,11 +5,3,7 +5,13,2 +12,10,15 +9,2,5 +4,12,15 +2,12,8 +16,13,14 +6,3,11 +16,8,8 +16,13,5 +4,12,3 +15,7,15 +5,5,15 +17,8,15 +10,13,16 +8,1,7 +7,9,3 +9,13,3 +13,13,3 +5,2,12 +13,14,4 +13,5,15 +9,10,17 +11,4,13 +9,3,14 +7,15,4 +13,6,16 +3,5,14 +11,17,13 +2,13,6 +7,6,17 +11,5,16 +2,12,12 +16,11,15 +16,10,10 +4,16,12 +16,9,4 +8,14,7 +7,13,15 +11,17,5 +10,2,5 +16,7,10 +13,5,9 +15,12,6 +12,2,12 +4,13,10 +6,14,16 +9,9,16 +12,15,13 +2,7,5 +10,1,7 +12,1,12 +7,3,5 +13,14,5 +7,14,15 +16,9,10 +16,12,7 +2,10,7 +4,7,12 +4,6,12 +3,15,13 +5,14,10 +7,7,1 +12,16,16 +18,10,8 +4,10,14 +2,12,6 +12,5,16 +5,12,4 +11,15,16 +17,10,13 +11,2,14 +3,13,5 +17,8,9 +13,8,15 +10,3,11 +1,8,11 +3,9,12 +4,8,13 +4,11,9 +4,15,10 +7,11,3 +15,7,6 +14,5,11 +8,11,17 +15,8,13 +10,12,1 +16,9,16 +10,2,4 +17,5,9 +14,11,16 +5,10,4 +17,10,7 +10,8,17 +15,5,7 +15,12,12 +11,17,12 +16,7,7 +14,6,3 +8,4,16 +8,14,3 +4,8,15 +10,15,4 +15,5,9 +18,9,8 +15,14,13 +7,4,11 +12,2,15 +6,9,4 +15,7,16 +10,6,1 +16,9,3 +14,15,10 +8,2,10 +6,4,11 +12,14,17 +10,5,6 +10,3,12 +16,15,6 +14,16,6 +5,3,11 +16,8,13 +9,15,16 +12,5,3 +10,15,17 +12,12,16 +9,6,2 +8,6,18 +12,7,4 +15,10,2 +1,6,11 +5,4,8 +15,14,6 +6,4,16 +10,9,3 +4,4,12 +16,8,10 +11,14,11 +8,4,4 +12,13,3 +15,10,13 +6,15,4 +17,11,7 +1,10,10 +14,4,13 +7,11,1 +11,5,13 +10,11,1 +1,9,10 +5,5,7 +2,8,5 +9,3,8 +10,1,11 +15,5,4 +11,16,6 +6,15,16 +12,5,14 +8,7,1 +9,1,11 +14,11,2 +8,4,3 +13,10,15 +14,2,11 +5,13,3 +5,8,4 +12,16,5 +6,8,2 +17,8,11 +6,2,9 +1,11,8 +13,14,12 +13,5,13 +8,11,3 +6,4,15 +4,10,5 +13,13,14 +7,12,14 +3,13,4 +8,5,8 +4,17,9 +10,16,6 +17,7,6 +7,4,4 +9,5,13 +6,8,14 +10,16,12 +15,3,11 +17,5,12 +4,15,13 +9,7,18 +11,9,15 +18,9,10 +4,5,11 +15,3,6 +15,5,12 +3,14,5 +13,6,3 +9,11,2 +6,11,15 +10,15,15 +14,16,10 +3,11,6 +4,12,13 +14,14,10 +7,16,9 +10,17,5 +8,6,3 +6,9,18 +1,9,11 +11,11,15 +16,8,5 +2,11,10 +13,8,17 +6,1,9 +5,2,11 +0,8,9 +11,1,11 +6,16,5 +17,11,13 +12,3,13 +4,12,17 +18,13,8 +6,15,6 +2,8,8 +14,5,7 +6,14,5 +13,13,5 +1,10,11 +12,1,9 +15,5,13 +11,2,12 +4,15,7 +10,15,16 +13,12,4 +16,8,7 +5,6,10 +14,8,16 +9,13,6 +10,4,14 +14,4,14 +9,8,16 +12,15,16 +14,2,9 +15,5,10 +10,4,4 +7,17,13 +8,17,4 +11,15,14 +7,3,13 +14,7,14 +10,2,10 +2,11,13 +15,14,10 +10,16,7 +9,8,4 +8,16,15 +4,5,4 +5,12,14 +14,6,13 +16,4,10 +16,12,9 +15,12,3 +6,13,16 +11,16,12 +13,13,2 +5,4,11 +18,11,10 +16,13,13 +6,3,10 +17,10,10 +14,13,6 +16,6,15 +15,4,10 +17,10,11 +6,10,3 +10,14,7 +12,9,16 +4,9,5 +11,15,7 +11,12,3 +11,4,7 +9,11,3 +11,9,3 +16,14,12 +13,6,13 +15,9,13 +9,17,9 +9,6,1 +1,8,10 +7,2,14 +6,16,14 +7,5,2 +5,13,6 +14,11,5 +7,2,15 +11,6,17 +4,9,14 +14,14,11 +8,6,16 +3,9,3 +8,13,16 +16,9,7 +6,14,3 +4,9,3 +3,8,13 +15,3,10 +11,9,18 +3,8,5 +17,6,6 +4,3,9 +6,8,16 +13,2,6 +17,15,11 +14,6,4 +4,8,3 +10,10,3 +2,5,9 +9,13,18 +12,4,14 +6,17,11 +2,13,9 +9,7,1 +5,14,7 +8,14,15 +10,10,18 +11,3,15 +3,15,8 +11,15,4 +13,7,15 +14,6,6 +6,9,3 +13,17,12 +8,8,1 +10,4,13 +6,11,18 +12,13,15 +3,11,13 +16,13,7 +10,4,6 +7,6,15 +10,16,16 +5,9,14 +1,6,9 +7,15,11 +7,9,5 +4,5,13 +6,9,6 +12,3,9 +7,7,3 +17,6,5 +14,15,13 +9,11,18 +4,12,7 +6,6,5 +14,3,13 +7,15,5 +6,4,12 +4,6,13 +6,11,5 +7,1,8 +11,18,12 +5,7,12 +16,15,12 +3,14,7 +9,4,14 +3,11,8 +5,17,7 +12,16,14 +9,18,9 +10,12,17 +14,16,9 +6,11,1 +17,5,8 +11,3,4 +10,0,12 +8,17,13 +9,4,12 +4,2,10 +7,13,4 +14,2,7 +18,12,10 +3,7,12 +14,17,11 +11,10,1 +6,6,14 +7,17,10 +13,2,7 +11,16,14 +10,7,1 +7,4,15 +12,4,2 +12,9,3 +3,11,10 +11,5,4 +5,7,14 +16,13,15 +13,9,17 +4,2,11 +7,16,14 +4,11,14 +15,6,4 +16,6,5 +15,7,14 +12,17,12 +5,17,8 +1,12,12 +14,13,8 +10,13,4 +7,18,7 +17,10,12 +5,15,14 +17,8,12 +10,14,3 +7,14,14 +9,1,9 +10,11,18 +5,12,17 +7,6,18 +16,6,8 +6,5,3 +16,5,7 +9,11,16 +11,14,2 +3,10,4 +3,12,7 +6,4,6 +7,17,9 +9,6,17 +5,8,3 +7,13,18 +4,11,5 +6,6,2 +17,12,12 +6,14,15 +11,7,2 +4,9,16 +17,12,8 +5,16,14 +12,4,4 +13,15,8 +9,9,15 +4,8,7 +10,3,3 +13,14,7 +11,15,8 +14,12,14 +13,13,17 +10,16,8 +1,12,9 +12,18,10 +15,10,17 +13,5,3 +7,11,18 +8,18,11 +12,10,16 +14,8,5 +4,6,15 +6,4,14 +6,9,16 +18,6,7 +6,7,6 +16,9,15 +16,5,10 +16,7,11 +9,14,3 +14,5,12 +13,4,15 +16,6,14 +15,9,2 +3,16,9 +17,13,11 +16,10,6 +4,6,9 +10,16,10 +14,15,11 +6,15,10 +7,10,16 +8,13,2 +8,2,8 +2,11,5 +4,11,12 +6,6,13 +6,1,10 +13,12,17 +8,3,7 +3,8,10 +16,3,9 +15,3,13 +5,13,16 +1,11,13 +15,13,15 +15,2,9 +13,2,9 +14,14,8 +13,9,4 +3,13,6 +13,8,2 +7,1,10 +11,13,2 +14,10,17 +3,9,11 +6,5,7 +4,14,14 +8,6,5 +14,4,11 +7,7,15 +12,1,13 +12,5,6 +16,7,15 +15,13,12 +8,15,6 +4,14,7 +9,3,9 +3,11,4 +10,18,10 +9,12,3 +13,5,10 +15,13,11 +12,5,4 +14,9,2 +15,15,11 +5,16,9 +4,7,11 +17,6,14 +12,14,16 +6,15,7 +2,4,12 +11,11,16 +4,14,9 +2,15,11 +4,15,15 +10,18,12 +7,7,5 +9,13,15 +18,8,13 +10,18,11 +11,2,5 +15,9,5 +5,5,6 +7,15,7 +1,8,8 +11,4,12 +16,13,9 +11,14,12 +11,14,5 +9,4,4 +16,9,13 +15,9,3 +15,11,12 +15,16,10 +4,5,6 +1,11,6 +8,18,9 +9,3,4 +4,5,9 +5,18,9 +4,5,14 +8,8,16 +15,13,5 +5,9,2 +10,8,16 +8,4,11 +4,6,3 +3,6,8 +13,6,17 +10,19,9 +14,3,4 +14,14,13 +9,17,14 +6,5,6 +0,10,10 +16,11,13 +11,17,7 +16,10,7 +4,6,6 +11,6,15 +8,12,3 +11,13,18 +12,8,1 +1,7,12 +15,4,8 +16,4,11 +14,3,9 +13,11,14 +11,4,14 +17,14,7 +12,1,11 +8,14,5 +18,10,10 +2,10,5 +4,9,13 +6,18,7 +16,7,9 +15,13,16 +17,4,9 +15,17,11 +8,11,16 +9,4,17 +12,3,10 +3,15,10 +11,3,8 +4,16,11 +8,17,7 +4,13,11 +13,9,18 +10,4,12 +16,11,7 +3,9,4 +15,8,14 +6,14,13 +13,6,14 +2,5,8 +6,4,4 +6,12,5 +5,16,11 +10,6,15 +11,4,10 +11,3,7 +18,8,8 +5,7,3 +3,9,9 +18,10,11 +14,13,4 +16,12,6 +4,2,9 +7,11,17 +11,18,11 +9,7,16 +7,6,5 +13,17,14 +6,4,3 +3,16,8 +7,16,15 +8,16,4 +7,8,18 +10,11,4 +7,9,16 +2,9,14 +9,4,7 +10,0,9 +15,6,7 +13,11,15 +12,12,2 +9,18,11 +8,5,2 +10,12,18 +4,10,2 +4,8,11 +13,12,5 +15,15,8 +13,8,4 +3,15,5 +5,8,5 +7,3,6 +5,10,13 +8,13,1 +17,10,15 +9,9,1 +9,15,3 +8,4,2 +7,17,5 +11,16,7 +10,15,7 +6,3,5 +11,5,2 +13,10,2 +6,18,11 +6,11,2 +4,10,3 +8,10,1 +13,14,3 +3,10,8 +10,6,18 +11,9,14 +5,9,5 +8,5,5 +14,3,6 +1,9,7 +5,13,7 +10,3,4 +8,8,3 +5,16,12 +4,14,4 +8,18,12 +6,3,12 +18,12,6 +9,4,11 +4,4,13 +3,3,12 +1,8,12 +15,11,13 +13,12,16 +5,6,8 +18,6,11 +6,9,5 +15,7,9 +2,6,6 +12,17,7 +4,15,11 +6,13,4 +12,14,5 +3,3,7 +9,1,14 +14,8,6 +7,10,4 +2,14,7 +14,17,8 +3,10,16 +12,14,14 +10,10,16 +4,7,9 +14,6,7 +8,4,13 +16,5,5 +12,8,2 +6,9,1 +11,1,8 +1,7,10 +5,5,16 +13,15,15 +3,7,16 +7,5,7 +7,3,12 +4,13,7 +9,4,5 +14,14,3 +8,14,6 +10,8,3 +5,8,6 +9,18,8 +13,8,5 +13,12,2 +5,10,17 +18,8,12 +9,4,9 +3,10,6 +10,9,16 +9,17,11 +12,13,5 +15,7,12 +8,15,7 +17,4,11 +3,3,8 +8,15,16 +5,7,4 +4,4,15 +13,5,5 +13,16,9 +16,12,12 +10,6,13 +7,12,5 +18,10,12 +9,3,10 +10,3,9 +5,14,15 +6,1,11 +17,7,13 +18,13,10 +12,17,6 +10,7,17 +17,13,13 +2,7,13 +6,18,12 +15,12,8 +12,6,17 +8,17,6 diff --git a/Media/2022/18.png b/Media/2022/18.png new file mode 100644 index 0000000000000000000000000000000000000000..6705e02e51e6bbb44420e8fc6ae97cb320eab6ea GIT binary patch literal 8041 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index b744e56..904e908 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- 2022 - 34 ⭐ + 2022 - 36 ⭐

@@ -57,6 +57,9 @@ + + +

2021 - 50 ⭐

From a2edd494e690be25b8277dba88f8b0af38229ae4 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 18 Dec 2022 07:56:02 +0100 Subject: [PATCH 042/225] Add day 18 --- 2022/18/18.kt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/2022/18/18.kt b/2022/18/18.kt index ad4da7b..0aa6dff 100644 --- a/2022/18/18.kt +++ b/2022/18/18.kt @@ -1,6 +1,8 @@ data class Point(var x: Int, var y: Int, var z: Int) { operator fun plus(o: Point): Point = Point(x+o.x, y+o.y, z+o.z) fun adjacent(): List = dirs.map { this+it }.toList() + fun min(): Int = minOf(x, y, z) + fun max(): Int = maxOf(x, y, z) } val dirs = listOf( @@ -12,26 +14,24 @@ fun main() { val input = generateSequence(::readlnOrNull) .map { it.split(",").map { it.toInt() } } .map { (x, y, z) -> Point(x, y, z) }.toList() - val limitsX = input.minOf { it.x-1 }..input.maxOf { it.x+1 } - val limitsY = input.minOf { it.y-1 }..input.maxOf { it.y+1 } - val limitsZ = input.minOf { it.z-1 }..input.maxOf { it.z+1 } + val bounds = input.minOf { it.min()-1 }..input.maxOf { it.max()+1 } // Part 1 input.sumOf { it.adjacent().count { !input.contains(it) } }.run(::println) // Part 2 - val queue = ArrayDeque() - queue.add(Point(limitsX.first, limitsY.first, limitsZ.first)) - var count = 0 + val queue = mutableListOf(Point(bounds.first, bounds.first, bounds.first)) val visited: MutableSet = mutableSetOf() + var count = 0 + while (queue.isNotEmpty()) { - val point = queue.removeFirst() + val point = queue.removeAt(0) if (point in visited) continue visited.add(point) for (adj in point.adjacent()) { if (adj in input) count++ - else if (adj.x in limitsX && adj.y in limitsY && adj.z in limitsZ) + else if (adj.x in bounds && adj.y in bounds && adj.z in bounds) queue.add(adj) } } From 2c6f8e58ed44327930c2eae53707b1ac48d96ebe Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Mon, 19 Dec 2022 09:03:19 +0100 Subject: [PATCH 043/225] Update readme --- README.md | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 904e908..85e3545 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- 2022 - 36 ⭐ + 2022 - 38 ⭐

@@ -60,6 +60,9 @@ + + +

2021 - 50 ⭐

@@ -140,6 +143,8 @@ +*The above tiles are clickable, leading to the solution of the corresponding day.* + --- @@ -148,9 +153,18 @@ The graphic above has been created with [AoCTiles/create_aoc_tiles.py](AoCTiles/ --- -All solutions expect the input via `stdin` and print to `stdout`. Each solution always prints part 1 and 2 at the same time on separate lines. In order to test the programs you can pipi the input to the program: `julia 1.jl < input.in`, which is then compared to `input.ans`. Instead of doing this manually, I use my `program-tester.sh` script (see [here](https://github.com/LiquidFun/misc-scripts)), which runs the given program on all `*.in` files in the directory, and tests whether the corresponding `*.ans` file matches the given output. I have mapped that program on `Enter` in vim, which makes testing programs easy. To validate a program manually, type `diff <(julia 1.jl < input.in) input.ans`. +All of my solutions are self-contained and use no external libraries or util files. I try to golf the solutions a little after getting the stars, while still maintaining some readability. The combination of these factors means they're rather short and generally quite elegant *(except for 2022 day 17)*. The solutions expect the input via `stdin` and print (generally) 2 lines to `stdout` with the answer to part 1 and part 2. Exceptions to this are the solutions which require you to read some letters from ASCII art, in that case the ASCII art is part of the `.ans` file and it is printed by the solution instead of the letters. + +* **2022**: Using **Kotlin** for the first time. Playing with streams a lot, many days are completed by only using streams. The first 15 days have **Python** solutions as well in order to be able to submit quicker and get better times on the leaderboard. +* **2021**: Using **Julia** for the first time. Because it supports numpy-like element-wise operations natively this was a great choice for AoC. If I used more Julia it would likely be my go to language for AoC right now. + +Not part of the repository yet, since these are incomplete and the code is not good (might revisit them later): + +* **2020**: Using **Rust** for the first time. Solved 8 days, however I found Rust was too verbose and too safe for AoC. +* **2019**: First time participating, solved 5 days with **Python** + +In order to test the programs you can pipe the input to the program, for example: `julia 1.jl < input.in`. The correct output is saved in the `input.ans`. Instead of doing this manually, I use my `program-tester.sh` script (see [here](https://github.com/LiquidFun/misc-scripts)), which runs the given program on all `*.in` files in the directory, and tests whether the corresponding `*.ans` file matches the given output. I have mapped that program on `Enter` in vim, which makes testing programs easy. -Programs are initialized with the `init-day.sh` script. I.e. typing `init-day.sh 10` initializes the 10th day by creating a folder named `10`, downloading the input test case with the `session.cookie`, copying the `dummy.py` file and opening the solution file. +Programs are initialized with the `init-day.sh` script. I.e. typing `init-day.sh 10` initializes the 10th day by creating a folder named `10` and downloading the input test case with the `session.cookie`. -* 2021: There is a solution for each problem in Julia. Sometimes there is a Python or APL solution as well. I'm trying out Julia for the first time, mostly focusing on short and elegant code. From f575e651fe24e413f1bfc521e8eddf12b114bb3c Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Mon, 19 Dec 2022 09:06:25 +0100 Subject: [PATCH 044/225] Add day 19 --- 2022/19/19.kt | 106 ++++++++++++++++++++++++++++++++++++++++++++++ 2022/19/input.ans | 2 + 2022/19/input.in | 30 +++++++++++++ Media/2022/19.png | Bin 0 -> 7985 bytes 4 files changed, 138 insertions(+) create mode 100644 2022/19/19.kt create mode 100644 2022/19/input.ans create mode 100644 2022/19/input.in create mode 100644 Media/2022/19.png diff --git a/2022/19/19.kt b/2022/19/19.kt new file mode 100644 index 0000000..6b55ffb --- /dev/null +++ b/2022/19/19.kt @@ -0,0 +1,106 @@ +import java.util.PriorityQueue + +data class Blueprint( + val id: Int, + val oreForOreRobot: Int, + val oreForClayRobot: Int, + val oreForObsidianRobot: Int, + val clayForObsidianRobot: Int, + val oreForGeodeRobot: Int, + val obsidianForGeodeRobot: Int, +) + +data class State( + var timeLeft: Int, + var ore: Int = 0, + var clay: Int = 0, + var obsidian: Int = 0, + var geode: Int = 0, + var oreRobots: Int = 1, + var clayRobots: Int = 0, + var obsidianRobots: Int = 0, + var geodeRobots: Int = 0, +) : Comparable { + + fun handleMinute(): State { + timeLeft--; + ore += oreRobots; clay += clayRobots; obsidian += obsidianRobots; geode += geodeRobots; + return this + } + + override fun compareTo(other: State) = compareValuesBy(this, other, { it.heuristicScore() }) + + fun heuristicScore() = oreRobots + clayRobots + obsidianRobots + geodeRobots + + fun isBetterThan(other: State): Boolean = ore >= other.ore + && clay >= other.clay + && obsidian >= other.obsidian + && geode >= other.geode + && oreRobots >= other.oreRobots + && clayRobots >= other.clayRobots + && obsidianRobots >= other.obsidianRobots + && geodeRobots >= other.geodeRobots +} + +fun maxGeodes(blueprint: Blueprint, initialTimeLeft: Int): Int { + val queue = ArrayDeque() + queue.add(State(initialTimeLeft)) + + val bestRobots = PriorityQueue() + val visited: MutableSet = mutableSetOf() + + fun addState(state: State) { + if (state in visited) + return + visited.add(state) + for (robot in bestRobots) { + if (robot.isBetterThan(state)) + return + } + bestRobots.add(state) + if (bestRobots.size > 1000) + bestRobots.poll() + queue.add(state) + } + + var best = 0 + while (queue.isNotEmpty()) { + val state = queue.removeFirst() + val minute = state.copy().handleMinute() + if (minute.timeLeft == 0) { + best = maxOf(best, minute.geode) + continue + } + if (state.ore >= blueprint.oreForGeodeRobot && state.obsidian >= blueprint.obsidianForGeodeRobot) + minute.copy( + ore=minute.ore-blueprint.oreForGeodeRobot, + obsidian=minute.obsidian-blueprint.obsidianForGeodeRobot, + geodeRobots=minute.geodeRobots + 1 + ).run(::addState) + else if (state.ore >= blueprint.oreForObsidianRobot && state.clay >= blueprint.clayForObsidianRobot) + minute.copy( + ore=minute.ore-blueprint.oreForObsidianRobot, + clay=minute.clay-blueprint.clayForObsidianRobot, + obsidianRobots=minute.obsidianRobots + 1 + ).run(::addState) + else { + if (state.ore >= blueprint.oreForClayRobot) { + minute.copy(ore=minute.ore-blueprint.oreForClayRobot, clayRobots=minute.clayRobots + 1).run(::addState) + } + if (state.ore >= blueprint.oreForOreRobot) { + minute.copy(ore=minute.ore-blueprint.oreForOreRobot, oreRobots=minute.oreRobots+1).run(::addState) + } + addState(minute.copy()) + } + } + return best +} + +fun main() { + val input = generateSequence(::readlnOrNull).toList() + .map { Regex("\\d+").findAll(it).map { it.value.toInt() }.toList() } + .map { Blueprint(it[0], it[1], it[2], it[3], it[4], it[5], it[6]) } + + println(input.map { maxGeodes(it, 24) }.zip(input) { geodes, blueprint -> geodes * blueprint.id }.sum()) + println(input.slice(0..2).map { maxGeodes(it, 32) }.reduce { s, e -> s * e }) +} diff --git a/2022/19/input.ans b/2022/19/input.ans new file mode 100644 index 0000000..c7e1e26 --- /dev/null +++ b/2022/19/input.ans @@ -0,0 +1,2 @@ +1550 +18630 diff --git a/2022/19/input.in b/2022/19/input.in new file mode 100644 index 0000000..733ac59 --- /dev/null +++ b/2022/19/input.in @@ -0,0 +1,30 @@ +Blueprint 1: Each ore robot costs 2 ore. Each clay robot costs 2 ore. Each obsidian robot costs 2 ore and 17 clay. Each geode robot costs 2 ore and 10 obsidian. +Blueprint 2: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 15 clay. Each geode robot costs 3 ore and 8 obsidian. +Blueprint 3: Each ore robot costs 3 ore. Each clay robot costs 3 ore. Each obsidian robot costs 2 ore and 16 clay. Each geode robot costs 2 ore and 18 obsidian. +Blueprint 4: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 17 clay. Each geode robot costs 2 ore and 13 obsidian. +Blueprint 5: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 5 clay. Each geode robot costs 3 ore and 15 obsidian. +Blueprint 6: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 17 clay. Each geode robot costs 4 ore and 20 obsidian. +Blueprint 7: Each ore robot costs 3 ore. Each clay robot costs 3 ore. Each obsidian robot costs 2 ore and 9 clay. Each geode robot costs 2 ore and 9 obsidian. +Blueprint 8: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 12 clay. Each geode robot costs 3 ore and 8 obsidian. +Blueprint 9: Each ore robot costs 2 ore. Each clay robot costs 2 ore. Each obsidian robot costs 2 ore and 8 clay. Each geode robot costs 2 ore and 14 obsidian. +Blueprint 10: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 2 ore and 12 clay. Each geode robot costs 3 ore and 15 obsidian. +Blueprint 11: Each ore robot costs 2 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 19 clay. Each geode robot costs 2 ore and 18 obsidian. +Blueprint 12: Each ore robot costs 2 ore. Each clay robot costs 4 ore. Each obsidian robot costs 2 ore and 16 clay. Each geode robot costs 2 ore and 9 obsidian. +Blueprint 13: Each ore robot costs 2 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 18 clay. Each geode robot costs 2 ore and 11 obsidian. +Blueprint 14: Each ore robot costs 3 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 18 clay. Each geode robot costs 3 ore and 13 obsidian. +Blueprint 15: Each ore robot costs 3 ore. Each clay robot costs 3 ore. Each obsidian robot costs 3 ore and 9 clay. Each geode robot costs 3 ore and 7 obsidian. +Blueprint 16: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 2 ore and 7 clay. Each geode robot costs 3 ore and 10 obsidian. +Blueprint 17: Each ore robot costs 3 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 6 clay. Each geode robot costs 2 ore and 20 obsidian. +Blueprint 18: Each ore robot costs 4 ore. Each clay robot costs 3 ore. Each obsidian robot costs 2 ore and 19 clay. Each geode robot costs 3 ore and 13 obsidian. +Blueprint 19: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 2 ore and 14 clay. Each geode robot costs 4 ore and 15 obsidian. +Blueprint 20: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 2 ore and 9 clay. Each geode robot costs 3 ore and 15 obsidian. +Blueprint 21: Each ore robot costs 3 ore. Each clay robot costs 4 ore. Each obsidian robot costs 3 ore and 10 clay. Each geode robot costs 2 ore and 7 obsidian. +Blueprint 22: Each ore robot costs 3 ore. Each clay robot costs 3 ore. Each obsidian robot costs 2 ore and 16 clay. Each geode robot costs 3 ore and 14 obsidian. +Blueprint 23: Each ore robot costs 3 ore. Each clay robot costs 3 ore. Each obsidian robot costs 3 ore and 20 clay. Each geode robot costs 2 ore and 12 obsidian. +Blueprint 24: Each ore robot costs 3 ore. Each clay robot costs 3 ore. Each obsidian robot costs 3 ore and 6 clay. Each geode robot costs 2 ore and 16 obsidian. +Blueprint 25: Each ore robot costs 4 ore. Each clay robot costs 3 ore. Each obsidian robot costs 4 ore and 20 clay. Each geode robot costs 2 ore and 15 obsidian. +Blueprint 26: Each ore robot costs 4 ore. Each clay robot costs 3 ore. Each obsidian robot costs 2 ore and 20 clay. Each geode robot costs 3 ore and 9 obsidian. +Blueprint 27: Each ore robot costs 2 ore. Each clay robot costs 3 ore. Each obsidian robot costs 3 ore and 13 clay. Each geode robot costs 3 ore and 15 obsidian. +Blueprint 28: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 2 ore and 11 clay. Each geode robot costs 3 ore and 14 obsidian. +Blueprint 29: Each ore robot costs 4 ore. Each clay robot costs 3 ore. Each obsidian robot costs 4 ore and 15 clay. Each geode robot costs 4 ore and 9 obsidian. +Blueprint 30: Each ore robot costs 4 ore. Each clay robot costs 3 ore. Each obsidian robot costs 2 ore and 7 clay. Each geode robot costs 3 ore and 8 obsidian. diff --git a/Media/2022/19.png b/Media/2022/19.png new file mode 100644 index 0000000000000000000000000000000000000000..cd25e370b358fa5b84f2fb8c64654646a34ff05c GIT binary patch literal 7985 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 literal 0 HcmV?d00001 From d67524d9d4b07be12dc9b054263f4c506dfb0c42 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Tue, 20 Dec 2022 22:38:09 +0100 Subject: [PATCH 045/225] Add day 20 --- 2022/20/20.kt | 17 + 2022/20/example.ans | 2 + 2022/20/example.in | 7 + 2022/20/input.ans | 2 + 2022/20/input.in | 5000 +++++++++++++++++++++++++++++++++++++++++++ Media/2022/20.png | Bin 0 -> 8603 bytes README.md | 7 +- 7 files changed, 5033 insertions(+), 2 deletions(-) create mode 100644 2022/20/20.kt create mode 100644 2022/20/example.ans create mode 100644 2022/20/example.in create mode 100644 2022/20/input.ans create mode 100644 2022/20/input.in create mode 100644 Media/2022/20.png diff --git a/2022/20/20.kt b/2022/20/20.kt new file mode 100644 index 0000000..c390fd8 --- /dev/null +++ b/2022/20/20.kt @@ -0,0 +1,17 @@ +import java.util.Collections.swap + +fun MutableList>.simulate(times: Int, decryptKey: Long = 1L) { + for (index in 0 until size * times) { + var i = indexOfFirst { it.index == index % size } + var v = (this[i].value * decryptKey % (size-1)).toInt() + repeat(Math.abs(v)) { i = (i + v / Math.abs(v)).mod(size).also { swap(this, i, it) } } + } + val i0 = indexOfFirst { it.value == 0L } + (i0..i0+3000 step 1000).sumOf { this[it%size].value * decryptKey }.run(::println) +} + +fun main() { + generateSequence(::readlnOrNull).map { it.toLong() }.withIndex().toList() + .also { it.toMutableList().simulate(1) } + .also { it.toMutableList().simulate(10, 811589153L) } +} diff --git a/2022/20/example.ans b/2022/20/example.ans new file mode 100644 index 0000000..f5a56a6 --- /dev/null +++ b/2022/20/example.ans @@ -0,0 +1,2 @@ +3 +1623178306 diff --git a/2022/20/example.in b/2022/20/example.in new file mode 100644 index 0000000..52c68ff --- /dev/null +++ b/2022/20/example.in @@ -0,0 +1,7 @@ +1 +2 +-3 +3 +-2 +0 +4 diff --git a/2022/20/input.ans b/2022/20/input.ans new file mode 100644 index 0000000..5695e11 --- /dev/null +++ b/2022/20/input.ans @@ -0,0 +1,2 @@ +5904 +8332585833851 diff --git a/2022/20/input.in b/2022/20/input.in new file mode 100644 index 0000000..919c8b1 --- /dev/null +++ b/2022/20/input.in @@ -0,0 +1,5000 @@ +-8285 +-8988 +-6191 +97 +-1542 +3649 +4182 +6875 +2538 +-9637 +-4521 +-1075 +3744 +8849 +4852 +7482 +-7094 +-4691 +-1844 +-1513 +-2296 +3207 +9542 +-3649 +-3238 +1302 +6080 +9124 +4535 +-2599 +-2921 +1325 +-9734 +5070 +3662 +-991 +-3164 +1425 +4011 +9101 +-9129 +7306 +-2167 +1024 +9794 +-1643 +505 +-3345 +1672 +-4751 +-5221 +4406 +-6718 +-9735 +9368 +-6357 +-1416 +-9738 +-6845 +6752 +-7418 +9725 +474 +-7088 +-4166 +-1319 +-5695 +-667 +1322 +3044 +-605 +4698 +5264 +1026 +-8701 +8011 +-9016 +3751 +-1494 +-4703 +-3873 +1561 +-1633 +-4673 +-633 +-1442 +-8661 +6961 +232 +-5442 +2452 +-4045 +4829 +-1536 +9301 +-7409 +3862 +-8959 +45 +-3132 +-3590 +1080 +-4038 +-4147 +-6579 +-1340 +-2052 +-947 +1015 +1577 +-8410 +9794 +8239 +-1287 +-2197 +-3416 +8430 +4675 +8701 +-6075 +8069 +-3824 +1385 +-4031 +-2050 +3265 +-948 +7822 +-1637 +-9989 +-3325 +448 +7680 +1218 +-1899 +-6354 +4048 +-9638 +-3836 +-6492 +2357 +875 +-3291 +5397 +-262 +6776 +5624 +-4408 +9154 +4072 +5153 +-3674 +-9481 +464 +4512 +9633 +7758 +8850 +-4455 +-7199 +3904 +-3778 +9460 +-4474 +-1694 +-4118 +-1432 +1506 +-5296 +-790 +1830 +8342 +-424 +8131 +3242 +6392 +-7795 +-3009 +2373 +9210 +-6422 +-5295 +4775 +1502 +9223 +-9586 +-9383 +9150 +-5217 +-8874 +3392 +7163 +-7915 +-1919 +1530 +-8430 +-4690 +9046 +-8215 +2196 +-8801 +-5971 +-4061 +4475 +6689 +-6354 +8229 +6879 +-3793 +6897 +1800 +-2170 +-8632 +-25 +-1516 +-7447 +3819 +-4 +-9826 +3782 +5437 +5265 +-5557 +7076 +-2742 +-4950 +3357 +9715 +8254 +6284 +8854 +4799 +3133 +8754 +-5361 +-5134 +3452 +1931 +1562 +7349 +1512 +-277 +7466 +-2472 +7247 +-131 +4921 +4880 +9898 +-6579 +-642 +-7380 +7376 +-7461 +8550 +-8434 +530 +9076 +-7230 +8107 +-878 +-6715 +-4060 +-8964 +-3466 +-9598 +-265 +-765 +-3598 +-5458 +-973 +-6163 +-2158 +-6918 +7268 +87 +-4142 +4159 +-4140 +-6341 +6431 +-3390 +-1197 +-7447 +3416 +5573 +7902 +-1215 +-2708 +-5217 +-3040 +2980 +4325 +1336 +7182 +-8993 +2286 +-4533 +-7764 +9331 +-2597 +-3201 +-5087 +-7184 +-4828 +-4959 +-707 +6964 +4828 +8688 +-9074 +-908 +6422 +-7864 +6815 +8162 +-2455 +209 +6424 +-2233 +-5971 +623 +2621 +4407 +8323 +1365 +7151 +2419 +-9494 +-370 +-4313 +7873 +-3699 +-4543 +850 +4120 +8384 +-3519 +-7622 +5655 +5320 +-2006 +-1160 +-4706 +-4333 +3858 +8938 +-7887 +-3981 +9641 +5078 +3051 +-7720 +-5332 +7190 +-1180 +8265 +3763 +-8800 +-3439 +-9225 +-5917 +4649 +4452 +6372 +8737 +-4302 +6275 +-1646 +-3059 +-4497 +5824 +-1729 +-6407 +-4828 +-2523 +-7282 +2566 +8825 +-307 +-2767 +-809 +920 +8384 +5734 +-5975 +-875 +-3393 +-8200 +2787 +-4690 +-3510 +-1925 +5313 +8613 +-5964 +7180 +-3780 +211 +9865 +3825 +-660 +3035 +-2204 +-8285 +5451 +-8003 +6879 +6558 +-6068 +5076 +-6975 +-9332 +-9213 +5646 +-9557 +-7405 +4685 +3270 +-5865 +-5788 +2040 +4535 +-91 +-5982 +5889 +-1543 +-3392 +-3868 +8658 +9793 +-750 +-9344 +-1832 +-2785 +-1741 +-6490 +397 +-1060 +-2503 +-2816 +-1140 +6793 +8983 +89 +-4890 +-7598 +-216 +-2563 +-7740 +3002 +6083 +7581 +-3421 +2730 +-7971 +6634 +-1712 +-8284 +-3325 +-162 +227 +-8707 +3416 +-5984 +3682 +-6645 +214 +2060 +8556 +-7420 +9202 +9474 +7934 +4008 +999 +6998 +-4907 +-9833 +6960 +-2695 +-4562 +9843 +8963 +9057 +1269 +-4068 +1601 +-711 +-6284 +6820 +-4572 +9010 +-8490 +-9552 +-774 +8049 +3934 +-3981 +-6891 +-940 +4535 +-6614 +-2323 +7250 +3032 +8300 +-2941 +-1611 +-456 +-1113 +-3984 +-9080 +-6707 +975 +-8761 +8788 +-6348 +-6175 +4570 +-2666 +-476 +7748 +-984 +8672 +2429 +-2343 +3543 +-1336 +-9116 +961 +1231 +5781 +6559 +-4346 +-7293 +1050 +-2554 +-1194 +8334 +-828 +585 +5195 +-8389 +-3062 +-2580 +-5419 +-2958 +2044 +-7274 +-1215 +-76 +-5938 +-2339 +-7946 +-2560 +9176 +718 +-7296 +-1543 +-67 +-4441 +-7205 +8296 +742 +-2795 +1227 +-4936 +6538 +-9020 +-1799 +9209 +-1377 +-9415 +-5682 +939 +3953 +-4626 +3821 +-4979 +6412 +2337 +5094 +1365 +3659 +4046 +4708 +5489 +1801 +-7187 +-762 +-5855 +1083 +1311 +3390 +-2259 +-7749 +-1197 +-8661 +9542 +-6112 +1801 +-4263 +7250 +613 +-5969 +-3497 +-548 +-9788 +4044 +3607 +-724 +3225 +3128 +-5113 +1212 +-621 +-5876 +7208 +-8761 +-2840 +649 +-5429 +6365 +5592 +1800 +-5780 +-3438 +-5785 +555 +-6800 +2416 +-9815 +6316 +-2787 +-1533 +-9637 +-4455 +4565 +-9560 +7262 +-1042 +-2742 +4654 +-626 +4395 +-7061 +6900 +-5798 +-3767 +4035 +-1241 +-2239 +-4907 +731 +6214 +-7635 +3803 +-5234 +-1759 +6785 +98 +6728 +-5645 +8904 +1798 +-2654 +-8004 +-9802 +-6295 +8109 +-647 +5397 +-3858 +1106 +-1080 +-994 +-706 +8992 +-2616 +2538 +9385 +-1710 +6962 +-5821 +-6849 +3089 +230 +6508 +517 +-5332 +9277 +-9621 +5333 +-2782 +-3390 +-9920 +7502 +8000 +-4715 +-4104 +-6837 +-3598 +-286 +-9486 +-1668 +2912 +1598 +5695 +3531 +-6671 +1375 +1290 +67 +6814 +-3129 +2566 +6864 +8194 +8728 +473 +-1793 +-4794 +3124 +-6899 +-2259 +-8964 +8437 +2532 +2366 +6144 +-4105 +-1448 +3535 +-2874 +-7875 +1600 +-163 +-4317 +7904 +-2350 +3415 +-2175 +1139 +-1719 +5827 +-2644 +5741 +-9869 +-1394 +-9323 +8643 +-8054 +-2130 +-4504 +-3873 +-9657 +5462 +3806 +-1435 +-4704 +-3858 +-7387 +-5313 +4671 +9296 +-8337 +-4127 +-4355 +4743 +7563 +-7971 +8153 +-621 +-5475 +2122 +-25 +-9474 +5280 +-5221 +-7590 +-6755 +6733 +6790 +-1241 +2286 +4364 +-9309 +-2007 +-1508 +-7173 +3133 +-532 +-6830 +-4970 +-3981 +-6275 +-9792 +-6526 +-2721 +-7084 +-6001 +-6706 +-388 +-1787 +586 +7660 +9264 +-2143 +-3537 +7723 +-8805 +-3393 +-2074 +-5470 +-3284 +8090 +-1768 +-9750 +-9501 +3302 +7995 +-189 +1658 +4072 +119 +840 +-412 +9932 +-4166 +-2919 +5298 +-6708 +4820 +-8897 +-4142 +-8817 +-5221 +-8292 +-3590 +-6019 +7322 +1181 +2379 +-9412 +-3006 +-2804 +2830 +4942 +2282 +-9963 +8810 +-5613 +8966 +8786 +-9882 +-6282 +-8290 +-1060 +5807 +9529 +729 +7106 +-7367 +-2737 +-4933 +6936 +3958 +-6331 +8239 +5864 +2119 +-7447 +4934 +7402 +3159 +-3145 +6803 +-3926 +-9513 +1119 +-9790 +4685 +-4298 +6274 +-5839 +-2902 +-177 +-7122 +3134 +-2786 +-3414 +-189 +8668 +-3505 +3491 +-4525 +5596 +8033 +-864 +8318 +-715 +9633 +-3379 +-3157 +-6046 +4995 +4233 +-1504 +-2838 +-2965 +-6170 +-2025 +5329 +-8701 +-1582 +-6418 +7932 +-5981 +-5209 +-1964 +6284 +4647 +634 +9449 +-7740 +-6473 +2830 +-2974 +-9676 +-2989 +-6540 +8404 +-7283 +6228 +-2396 +-5262 +7752 +-7492 +-4 +9353 +4933 +2724 +-9184 +5274 +-6061 +-6364 +-1278 +-3983 +4922 +-7556 +-1773 +-250 +3617 +-4678 +6961 +-3509 +7008 +5367 +2918 +-1799 +-4945 +-3207 +3431 +5666 +-5686 +3512 +-7906 +1185 +-7811 +-5880 +712 +-3496 +1562 +1926 +-3608 +-2357 +9793 +-1924 +6163 +-5234 +9343 +-9552 +9898 +9080 +7969 +-4147 +-2615 +-1914 +7164 +-5603 +2539 +-1117 +9988 +7483 +-8424 +9376 +6452 +2832 +-4905 +9176 +-3107 +1405 +-6112 +8405 +7062 +8821 +-3494 +-6667 +-5455 +-1340 +5217 +4191 +-8869 +-2924 +-6275 +-518 +5329 +-4570 +8589 +6659 +6200 +1311 +-6668 +-9676 +-2385 +7209 +3877 +9536 +1888 +-8262 +-1372 +5556 +7283 +-4874 +5153 +1691 +8011 +-3284 +9878 +6256 +5381 +-244 +9268 +1745 +-9692 +1049 +-6775 +-8861 +1385 +1177 +4393 +-1336 +-8507 +3818 +-4552 +2259 +-9090 +9449 +-6594 +174 +-3593 +-6657 +2817 +6270 +367 +8866 +-4282 +4187 +-8944 +-9240 +-9126 +9036 +1785 +-7531 +-3477 +-4691 +-6840 +-570 +-2089 +9914 +-5660 +-670 +1685 +-3959 +-1442 +-3497 +-370 +482 +1110 +1094 +-285 +-9319 +3272 +845 +-5029 +-9826 +-1180 +7079 +8928 +-324 +5251 +-4436 +-9261 +-607 +2421 +-5595 +-3763 +-4864 +334 +-4508 +3748 +8108 +9613 +-2109 +-7073 +5812 +6901 +-2981 +-3280 +3934 +3909 +-3220 +4488 +-2095 +-5158 +2337 +-6415 +-5929 +2859 +-4814 +6128 +-3026 +5572 +-3407 +4369 +-4953 +9879 +5317 +-2163 +-6823 +6830 +-1552 +-4933 +-7684 +4347 +-6498 +8865 +-4615 +4412 +2841 +1481 +2242 +-5881 +5918 +-7483 +-7236 +1857 +-6058 +-3735 +4957 +-184 +6996 +9565 +3649 +1502 +-2583 +7824 +6231 +-6449 +-2219 +8153 +616 +-3594 +4342 +9263 +1334 +7523 +-8858 +7213 +4742 +1601 +-8851 +-5883 +-9491 +4184 +6015 +-849 +6183 +-2096 +3552 +5677 +-3416 +-3199 +6722 +283 +3677 +3439 +1333 +6149 +-4678 +-1160 +-5481 +-9171 +6307 +8971 +-8768 +-437 +-8513 +-4882 +6359 +9866 +4852 +-6350 +-7754 +9991 +-4119 +1672 +-4405 +-3674 +-5203 +-3387 +4543 +-9744 +-9 +5094 +-5332 +5103 +-4140 +-4224 +-6531 +9910 +-771 +9077 +2019 +-3438 +-4878 +-7684 +517 +3844 +-4760 +3172 +-1765 +6115 +-1724 +3079 +-2795 +-59 +6225 +7518 +-9225 +-518 +4353 +-8430 +-646 +-5139 +2227 +2447 +3833 +-753 +-103 +7687 +6103 +-3725 +8467 +1918 +-3802 +9809 +-5259 +4828 +1764 +889 +-9126 +-8897 +-5383 +-9620 +-9833 +7460 +9972 +-8447 +3913 +1348 +-8733 +-9285 +-6647 +-8912 +-1071 +-3476 +326 +8658 +4066 +-899 +-9692 +9309 +-6755 +-3936 +-9575 +-2688 +7286 +-1239 +2813 +-9653 +-7487 +-4824 +6659 +4879 +-177 +-5470 +6144 +-5046 +-3062 +527 +2859 +-5771 +3696 +-1385 +117 +-9698 +-8587 +5051 +3291 +7451 +-942 +-3941 +9099 +-3768 +-7482 +731 +1573 +7631 +-9730 +3039 +8397 +920 +6195 +7534 +8610 +2876 +-8220 +-2886 +3952 +-1254 +-7409 +9195 +-9238 +-4899 +4738 +4977 +2772 +3662 +4745 +490 +-8368 +-7697 +3803 +-1925 +-9458 +6761 +-7674 +3546 +4689 +-8492 +-7401 +318 +-8652 +1680 +5646 +2942 +-8036 +-4060 +5347 +-506 +-8215 +1583 +7986 +-7182 +9707 +8210 +-1578 +-6441 +-8080 +-7112 +2166 +-7628 +9644 +-2787 +2144 +-8519 +-8298 +3516 +1998 +6923 +-5879 +-6800 +-265 +762 +5985 +-2096 +2060 +253 +2657 +1638 +-9479 +3440 +8322 +9213 +-6550 +1740 +-7635 +-2630 +8780 +-2841 +263 +-6707 +-849 +-3571 +-6884 +-849 +2617 +5495 +-5663 +2538 +-5649 +-1614 +5273 +-5192 +9600 +-7562 +-1452 +8285 +4963 +857 +-3778 +-2466 +5395 +5123 +3766 +-3332 +-2823 +-124 +1298 +-3189 +-8634 +1745 +4125 +-4830 +2218 +4067 +9660 +-3249 +4684 +6730 +-2204 +8666 +6431 +9814 +2473 +3264 +-7754 +5648 +-584 +3958 +8473 +3152 +6832 +-6726 +-8552 +2398 +9134 +5296 +3134 +-9891 +-246 +749 +-7409 +6952 +-4003 +-1178 +-5053 +-863 +-9215 +953 +-5550 +-4740 +-8817 +-2636 +-3432 +-4265 +-6434 +3713 +5179 +-9037 +-7399 +-8327 +-7657 +7162 +725 +-6385 +5590 +-855 +-5333 +-4905 +-3763 +7249 +-2188 +-6338 +8747 +9059 +1906 +7248 +4654 +-4745 +-1704 +-9206 +-7085 +7479 +6881 +9171 +7241 +-2509 +-7367 +2665 +-9487 +-5847 +37 +-3622 +-3382 +-688 +-2157 +814 +4745 +4305 +-511 +9558 +-2606 +2959 +5817 +-214 +-2482 +-7836 +-2789 +-8038 +9171 +7308 +905 +-8648 +-5139 +-4927 +6188 +4867 +-5746 +-4202 +-8375 +9362 +-8245 +-9676 +4035 +-4723 +6675 +6055 +6405 +5690 +6762 +1818 +3094 +3693 +-2782 +-4991 +920 +1292 +7646 +-3376 +-8939 +-8638 +4879 +5175 +-3844 +-2350 +5672 +-3972 +-1906 +6848 +-2594 +-2756 +-5323 +7028 +-6461 +1137 +1048 +-3233 +-4455 +-5997 +-3117 +6683 +-2884 +3822 +5982 +-6770 +-4572 +-1675 +-9542 +3076 +-3220 +-2399 +-688 +-7254 +-6490 +5329 +3736 +132 +-1094 +-6395 +-4992 +-7922 +-4874 +-6227 +-4815 +-6476 +-4945 +-4258 +3114 +-6170 +6726 +4675 +5114 +5358 +4766 +-3306 +-5279 +5892 +5051 +4949 +-2556 +6846 +-4704 +-1473 +8286 +-6151 +9917 +-9637 +-6751 +3202 +-6813 +-161 +7613 +-3382 +-2374 +-2917 +-6579 +-7760 +-9053 +-8719 +7876 +-2077 +-285 +3102 +-7167 +5446 +-9957 +1647 +3128 +9727 +2887 +4279 +8124 +-5821 +-9514 +6943 +8485 +4924 +-4230 +-4455 +664 +653 +-1158 +6838 +8176 +-2068 +1448 +-1937 +-1233 +8987 +-4558 +6868 +-9189 +-6707 +8191 +8659 +4404 +-6075 +-5264 +-3212 +-7773 +5265 +-7541 +-612 +1733 +-370 +2360 +-9667 +7327 +-3623 +-542 +-8908 +-7541 +-1670 +9878 +9843 +8104 +-3292 +-2193 +8769 +-224 +-5156 +-2095 +5273 +3044 +-1964 +7392 +-5418 +-5489 +-6575 +9994 +3530 +5374 +-7953 +-9953 +7749 +-3946 +2035 +6722 +-5221 +-9957 +1582 +7706 +-4036 +-224 +5063 +-6251 +-7848 +8086 +8442 +-7346 +7165 +3748 +-824 +-3424 +1783 +-7797 +-2987 +5558 +8074 +7297 +4871 +1311 +-4934 +-3148 +4341 +3242 +-2976 +2538 +-1422 +-3749 +-2088 +-3314 +-1094 +-3476 +7703 +-1494 +-8149 +-2678 +1024 +1760 +-1061 +-8719 +-6990 +-4696 +-4907 +6797 +3662 +7182 +-3914 +5941 +-2935 +2799 +-1464 +-4589 +-8739 +-6028 +7525 +8229 +-8102 +4488 +3642 +6797 +-8757 +-990 +-6757 +-328 +-1980 +-6354 +5572 +5190 +-318 +-7620 +6618 +-8520 +2730 +9008 +8591 +-4899 +-4762 +3191 +9076 +8842 +8389 +-803 +6741 +-434 +8852 +-4901 +-7985 +-9080 +-7205 +-4756 +-2760 +-4550 +6387 +-5860 +-1824 +-4038 +-8084 +-3228 +-535 +2224 +4685 +8631 +3736 +-6956 +7250 +1942 +4128 +8440 +5320 +8241 +6072 +4949 +4092 +-9221 +-5166 +-880 +1319 +-9613 +-4463 +-3037 +4373 +-9304 +4164 +-1101 +2970 +-5117 +9905 +-6801 +101 +-2728 +-4296 +-1541 +-1882 +-1984 +-3984 +7581 +952 +6639 +8933 +-2636 +-3756 +2357 +4417 +-2481 +-1376 +-6511 +-7662 +-8300 +9210 +-3629 +-6211 +7711 +4390 +-706 +2224 +6633 +3444 +8191 +-120 +-1743 +-9285 +858 +7579 +-1215 +-9931 +6079 +-161 +-6866 +-9779 +-4935 +-1448 +2636 +1876 +6278 +-5879 +6075 +6879 +-7681 +8991 +4375 +7169 +-9667 +9805 +-9232 +8160 +2465 +-1111 +-2175 +-5914 +-3568 +-4716 +5333 +5652 +5364 +-1602 +3419 +717 +-4207 +3192 +-9823 +-7693 +-9924 +-5839 +-4330 +-6054 +-2034 +4369 +-6312 +-8904 +2163 +512 +3364 +-7232 +653 +5443 +253 +1510 +4321 +521 +-4055 +-2486 +3728 +-1494 +-8681 +2617 +5937 +-8176 +-5333 +6668 +-4091 +8648 +578 +4210 +5657 +-7963 +5653 +-9854 +5535 +3472 +-65 +4008 +-8956 +6511 +8337 +-1454 +-1490 +-4641 +4821 +5505 +7531 +286 +4940 +8634 +-4841 +-5788 +6305 +9644 +2122 +4465 +-5742 +4095 +7492 +-9039 +6361 +5573 +-850 +-6494 +5358 +1804 +-7144 +5489 +985 +-850 +-2583 +7041 +-8584 +7250 +-7140 +2138 +5793 +-1296 +-3832 +2293 +6559 +-5693 +-4589 +-7920 +-9181 +-3735 +7483 +7718 +-2161 +8463 +-4431 +7592 +4452 +-4756 +8259 +-869 +5949 +-7740 +331 +-945 +-5747 +-760 +1680 +-3321 +-5294 +-4591 +-3542 +-6296 +-8200 +2797 +-8249 +-2197 +-1882 +674 +-187 +2772 +7531 +-7996 +-31 +-6058 +-4460 +1569 +-7651 +6348 +-937 +-2125 +8911 +600 +-3406 +-8561 +-8892 +9476 +9484 +8916 +-770 +-7108 +4514 +8261 +-7833 +5491 +933 +2034 +-2255 +74 +1310 +-8761 +-8708 +-6675 +-8429 +-2033 +-2572 +3827 +-8710 +8212 +5205 +3281 +9353 +-7471 +2282 +-4354 +6941 +-9535 +1111 +1155 +8397 +580 +4003 +-1550 +-9104 +-611 +8916 +-5426 +-2323 +3916 +3073 +8696 +7307 +5884 +-9854 +119 +4048 +7779 +1325 +-4442 +3834 +-9116 +95 +2706 +-9560 +1026 +-9980 +-1933 +2691 +2995 +-5083 +-7942 +5843 +6020 +-5186 +5021 +-5823 +-8692 +-3162 +8938 +8797 +5302 +-8 +9406 +-4503 +-3955 +-2178 +7094 +-4214 +5101 +797 +-2385 +-2415 +-4936 +-9122 +1253 +-6814 +4967 +-2195 +2214 +3466 +4376 +7683 +8124 +-3774 +-5999 +-1241 +-5436 +2468 +-2981 +1530 +-7399 +-1646 +2795 +9514 +1947 +2429 +6621 +1421 +7902 +3488 +8330 +2648 +232 +-1180 +-2373 +8399 +-87 +7479 +-5183 +-5701 +1227 +2078 +7699 +-4104 +-9653 +-7813 +9734 +-3201 +-437 +-9990 +9649 +-4469 +8829 +-7196 +9460 +-1527 +2413 +8097 +-6660 +-4326 +2058 +6943 +1647 +1448 +8095 +7706 +-9826 +-8409 +-7187 +-9002 +466 +-7491 +-7565 +3370 +-5209 +-4448 +5522 +8 +-9838 +-6801 +5877 +-5874 +5877 +3253 +-1217 +-9161 +9331 +-7428 +616 +-6524 +8839 +-8338 +760 +-5142 +-2226 +-4057 +-2739 +232 +-1933 +-2858 +-3955 +-22 +-5178 +6290 +-7797 +9449 +2887 +-1158 +3721 +9963 +4952 +4959 +6418 +-2038 +-3499 +8741 +-4659 +-161 +-9078 +9948 +9331 +5558 +9208 +-3922 +-8572 +4403 +1753 +9115 +5751 +3444 +1004 +-7922 +-8547 +3579 +-750 +389 +119 +-4060 +2853 +-1091 +461 +-6966 +-5997 +8413 +8186 +-5956 +8790 +9014 +9491 +491 +5323 +5356 +2934 +9619 +7073 +5017 +-1876 +9695 +-7917 +-3085 +-2565 +-4258 +3866 +-6708 +258 +-8570 +9022 +-8215 +9340 +2349 +476 +5348 +3659 +8379 +-3297 +3499 +5066 +3649 +-3009 +662 +4237 +7392 +-6849 +3837 +4853 +798 +-7112 +8034 +-535 +-1925 +-3593 +-8769 +-51 +-4281 +-8038 +7466 +-6269 +-8227 +-4038 +9814 +9780 +-3975 +-246 +4450 +-7620 +-859 +-5500 +7923 +-388 +5109 +6015 +-9232 +-4760 +-437 +-5975 +5164 +7088 +3821 +1170 +9313 +-3716 +9619 +-6358 +5595 +-2974 +-3504 +9785 +7155 +2349 +-5278 +-3939 +1019 +1016 +5447 +7802 +7667 +3659 +3834 +-1677 +7923 +4267 +-716 +-6188 +-1771 +8948 +5842 +-2565 +-9656 +7843 +-9653 +-7 +1796 +-1793 +762 +-732 +-918 +5787 +9690 +1038 +-5171 +-3733 +3626 +6619 +9363 +4334 +3128 +8285 +-6708 +5298 +9116 +9387 +-9097 +6183 +-9261 +-605 +-164 +1600 +9824 +4493 +-1338 +-7565 +4042 +8223 +-2488 +9826 +3831 +6864 +5126 +-3430 +7904 +-6056 +6373 +3150 +-9785 +8819 +8474 +-7879 +-5001 +6375 +6222 +7063 +2880 +-7462 +-2266 +-3793 +7536 +8358 +9527 +-7628 +8664 +-3323 +-7630 +4475 +-5969 +3657 +-4264 +-5648 +-1185 +-1626 +7090 +-8003 +-3946 +-1101 +-9564 +8342 +-7419 +-940 +8556 +-5212 +-5090 +-9049 +-9520 +2001 +-8729 +8487 +722 +7703 +7581 +-9258 +1227 +6436 +-507 +-2755 +-611 +9994 +7678 +9529 +8579 +-6046 +-2782 +6649 +4486 +6844 +-4497 +1470 +-3507 +5851 +9273 +5149 +-8065 +-7853 +-9464 +4373 +6571 +-8843 +2068 +-7338 +7412 +9534 +7795 +3677 +5509 +-715 +-4468 +-8817 +-724 +7696 +272 +4892 +9776 +6668 +8345 +8589 +-1838 +-7175 +986 +3139 +7030 +-3678 +-7245 +4138 +-2806 +-9016 +8044 +8934 +-1830 +-6939 +-1183 +-4957 +6808 +9574 +6883 +-5022 +464 +-1660 +-4808 +8300 +-2323 +-9269 +-1955 +-690 +3199 +-2183 +-8763 +-7500 +2384 +-1658 +9910 +9619 +-4446 +4317 +-8910 +-1241 +-5171 +1819 +-2377 +-9638 +-881 +-3981 +2951 +1396 +-2160 +3822 +933 +1562 +3620 +-2364 +8507 +711 +9883 +6797 +5873 +7224 +-3894 +9905 +-2782 +-4657 +8686 +-403 +-5192 +4024 +3431 +3472 +1227 +7127 +-2313 +2373 +3014 +2442 +9285 +6387 +1807 +-4089 +-944 +7145 +-1303 +175 +-459 +4159 +832 +-2014 +-5397 +-908 +7301 +-740 +7879 +-1039 +3837 +4070 +-8910 +6522 +9585 +-7000 +3214 +-3425 +9600 +391 +-9983 +3466 +3512 +-2958 +-7138 +3675 +-5726 +2166 +-2321 +5666 +-5426 +-5770 +9866 +5327 +9905 +-8610 +7485 +-4418 +2385 +1394 +1245 +4187 +1745 +-4833 +9671 +8916 +-3110 +6512 +2772 +-3509 +136 +5672 +1574 +3962 +3269 +-2226 +-3420 +-5563 +7880 +4285 +-8559 +2934 +-2914 +9583 +-5758 +-4963 +5175 +-9513 +-3497 +-3619 +5320 +5651 +1594 +7905 +4407 +-9496 +1334 +-5929 +-8137 +-4679 +7037 +-9766 +-9692 +-9231 +4056 +-7579 +3141 +-7881 +-4459 +7284 +7212 +-7504 +3990 +9717 +-5645 +751 +8172 +8806 +-1287 +6144 +-5821 +-1786 +-8136 +8753 +6844 +5274 +-3910 +-4799 +3818 +785 +-9703 +-2858 +-9692 +-2094 +-4659 +-2130 +-9430 +-3622 +5635 +8261 +-9689 +3390 +-5436 +-9464 +1310 +5918 +-5410 +8066 +-9426 +825 +5337 +2392 +-437 +-2594 +1978 +-4574 +3320 +-8013 +-1376 +-9276 +-6669 +-6270 +2875 +-2703 +1689 +8724 +1522 +-1947 +4927 +-7733 +1375 +8957 +-9580 +-3827 +-5597 +2158 +-7301 +8445 +-4396 +-2596 +8296 +4395 +-7282 +1528 +-6899 +3659 +-6602 +-6702 +7385 +-9692 +-71 +-9924 +507 +2388 +3547 +3675 +-3102 +7368 +-1906 +-3537 +-3697 +3088 +-627 +-1787 +-4660 +-7622 +7088 +1891 +1302 +8786 +-7409 +-1061 +1158 +5993 +-4423 +851 +-2046 +8542 +-6980 +8709 +-2428 +400 +-5611 +8473 +4744 +6668 +5571 +-6151 +5949 +-380 +3438 +9008 +-5758 +-3281 +4084 +-6855 +-5189 +745 +-6506 +-3233 +7491 +-9983 +7459 +-5065 +8697 +-5124 +8071 +-6052 +7397 +1131 +-9928 +4851 +-6649 +4209 +893 +1852 +9805 +4025 +2224 +2274 +-6327 +5090 +214 +9303 +-6580 +-7797 +8513 +-9073 +-9877 +4371 +-9814 +-7881 +-5209 +6326 +-3797 +3544 +-2680 +-8818 +7563 +5071 +5646 +-2739 +5060 +8769 +6943 +-3418 +1187 +-2214 +1794 +1179 +-6991 +-9362 +-7313 +-3575 +5814 +7600 +8097 +9271 +9925 +-5013 +-4696 +4743 +-8918 +-1075 +-438 +-1995 +-640 +5397 +6056 +1998 +7128 +5941 +8336 +-3037 +1658 +9796 +2631 +-9396 +-6364 +-6855 +-9009 +-7706 +-8225 +-6034 +-2467 +-6329 +-4672 +-9571 +-8730 +3071 +6286 +-1659 +-8722 +-6400 +-1719 +1496 +9257 +-7610 +7207 +-2291 +2595 +4479 +6717 +3153 +-4455 +-2530 +4130 +-5537 +-8904 +-4362 +-4915 +-6335 +-8961 +-7722 +9681 +4395 +5070 +4018 +7628 +270 +6305 +4763 +-4918 +1212 +-3804 +6030 +4974 +-6296 +-7096 +-6920 +-8082 +-6338 +1212 +-7558 +-793 +4694 +2226 +-184 +3108 +-8239 +-5794 +5751 +9160 +-6211 +5053 +8097 +-4099 +722 +-2180 +3000 +1691 +6731 +-9310 +-4197 +1995 +1651 +6650 +-1541 +-555 +4138 +-1602 +9604 +9365 +3709 +7491 +0 +-1317 +-9388 +-444 +-1031 +6446 +9217 +7009 +2282 +227 +7557 +-3262 +9900 +-5749 +9231 +-2279 +9101 +-5065 +-1020 +-8720 +-2015 +7229 +-4871 +1937 +456 +-35 +2419 +-2015 +3199 +1842 +-5419 +7525 +-2615 +6950 +-5026 +6452 +155 +5633 +-7143 +-864 +7725 +-2129 +9583 +-4195 +1399 +-4565 +-5063 +6717 +952 +3989 +-8822 +8986 +-4022 +775 +-6510 +7154 +4143 +4035 +-9546 +-5472 +5591 +6282 +3124 +4079 +1742 +4040 +-3453 +-1852 +-2563 +-2068 +9631 +5306 +-443 +-8678 +-5003 +-1508 +-362 +-4936 +-1298 +6808 +1872 +1292 +-4956 +225 +4337 +-4479 +-7214 +-4057 +-8420 +-2568 +8713 +-9373 +-4649 +-7693 +6184 +7369 +-4028 +-7419 +2785 +-8843 +5274 +-9778 +3452 +1514 +-711 +1931 +102 +-1441 +-4455 +-109 +-185 +1227 +-7621 +7524 +-603 +-4198 +6450 +8838 +-4956 +1947 +-8694 +-4819 +5745 +-3885 +-1197 +-1144 +231 +7689 +-8245 +5376 +-3270 +-6361 +2809 +-9633 +7760 +765 +6599 +1177 +-3201 +-2896 +-1398 +8281 +2542 +-7403 +-2896 +155 +6258 +9830 +-7231 +-3519 +-4211 +-3770 +-7760 +5666 +-5120 +-2142 +3535 +2688 +-3291 +7486 +8688 +-1851 +4782 +1496 +1555 +717 +-7656 +-6269 +7481 +1601 +7400 +9558 +9193 +-3415 +-1372 +8997 +3272 +-9849 +2975 +-2233 +9542 +-5179 +674 +-4469 +2119 +-1729 +4390 +9400 +9862 +-5220 +1187 +8000 +-954 +-2363 +-8328 +-9554 +2198 +-7179 +6551 +-1615 +-7703 +-4881 +-6083 +-2015 +2501 +-7648 +2785 +4867 +-3407 +-8115 +9826 +-5158 +-6849 +5394 +1562 +8622 +-2411 +9700 +-5688 +8071 +-3273 +-7199 +-3855 +-8676 +2883 +9484 +8503 +1375 +-7140 +7758 +161 +-8445 +-2816 +-8236 +891 +5877 +114 +-2596 +1812 +-7830 +-4052 +-2055 +6079 +5381 +5095 +4777 +-3662 +4383 +-3052 +5390 +8066 +2736 +1021 +-5852 +-7629 +-4601 +7164 +2383 +-1489 +-8189 +-1511 +8460 +9974 +7660 +7151 +1222 +3844 +8672 +7579 +-4523 +1026 +6897 +-9469 +-9428 +-4450 +-9043 +-5536 +-633 +-2014 +-1768 +-1707 +-6908 +-1508 +-4798 +7145 +-4189 +-7850 +-4504 +-6650 +-4091 +-7860 +-9979 +-4298 +1037 +-3132 +762 +-7181 +3141 +-4950 +-6348 +3026 +7393 +7728 +-2129 +-3476 +5513 +-5794 +-9774 +-6992 +-7832 +-4542 +-6416 +3376 +1999 +4713 +-3007 +-511 +6451 +8485 +2975 +-1925 +-5235 +-3759 +3558 +7683 +-8480 +-2919 +-1061 +9547 +8543 +-3622 +-3509 +9138 +75 +114 +-1815 +5892 +-3384 +-5718 +-6740 +-4118 +-5209 +-1917 +-9707 +-205 +-3430 +8296 +-2034 +-6933 +8436 +-7590 +-4707 +4337 +8182 +1778 +-4055 +6648 +-6361 +5273 +-4425 +-7498 +8736 +6906 +-2217 +4741 +4054 +97 +-2198 +6961 +456 +-160 +526 +7709 +-2593 +787 +442 +7358 +-686 +-4759 +-59 +-576 +6838 +7451 +6378 +7052 +-5301 +-9020 +-6121 +-3237 +4931 +-9522 +-1071 +613 +2617 +-7351 +4891 +-5941 +-7664 +-864 +-7315 +3277 +2970 +920 +8242 +5011 +6213 +-6770 +6700 +-748 +-5217 +-8497 +-2795 +-4641 +3452 +2860 +-5301 +5344 +-4232 +6299 +3445 +9893 +-3839 +1775 +-7010 +-647 +3332 +4187 +4207 +-4830 +-5961 +6760 +-6531 +8328 +-4644 +-7503 +2252 +6239 +-1204 +8135 +-6759 +9138 +-3915 +-9984 +-3472 +-7880 +-5611 +9011 +9417 +-6059 +-9463 +9202 +-462 +7942 +8607 +-4825 +1368 +-6466 +-9040 +4137 +5461 +5100 +4237 +-824 +4835 +5346 +-8084 +-1020 +9296 +-559 +813 +-30 +-603 +4407 +-6652 +6718 +984 +-3389 +2863 +8673 +-1105 +1064 +-9788 +3925 +-3505 +-4105 +9695 +-5550 +-5433 +8114 +3113 +9853 +8286 +3887 +576 +-4936 +3202 +-2237 +5613 +8503 +-4278 +-8153 +-9309 +891 +-1712 +8367 +6305 +3674 +2888 +-65 +8318 +425 +-5881 +-5065 +1463 +6936 +-4742 +4108 +-5234 +-2749 +9134 +9862 +4314 +-7079 +3202 +-4998 +6851 +6752 +-7916 +-60 +-799 +8524 +491 +3207 +-4933 +3662 +4262 +-3007 +5407 +6910 +-905 +-7996 +532 +9353 +-4555 +9517 +4502 +5977 +4402 +-707 +-2623 +-3222 +-4882 +-9343 +2643 +8947 +-7304 +9794 +5832 +3858 +-621 +9929 +7833 +2119 +9460 +-3429 +-940 +6717 +6998 +1785 +-458 +-8430 +-3593 +1195 +7481 +5956 +-6391 +4406 +3662 +6336 +-7012 +3644 +3765 +-5182 +-7849 +-9977 +-5164 +-513 +1305 +-6338 +8154 +7556 +-8792 +-8249 +5207 +-940 +555 +-9015 +8717 +3986 +-3459 +258 +9744 +2258 +1999 +-7074 +-3784 +3133 +-2158 +4886 +-5797 +-4344 +4278 +-6494 +2282 +499 +-5205 +-6669 +1861 +4940 +9626 +5971 +8573 +-9285 +-3941 +6145 +-3023 +-4189 +-4386 +4386 +-5339 +-8091 +5489 +6996 +-2659 +7918 +3562 +1862 +-9924 +6284 +-8490 +6638 +151 +5941 +2516 +1782 +-1460 +-7945 +3986 +-7465 +-898 +-8634 +-955 +-6770 +-4936 +4066 +-9541 +-5957 +-5420 +-3390 +9851 +-1619 +-8829 +3629 +-2830 +-2298 +8767 +9813 +-9578 +4970 +7482 +-6357 +1481 +-7403 +1801 +-4 +-7489 +4274 +235 +-4456 +-479 +6753 +-6613 +-5467 +-2495 +-3759 +-2671 +5736 +-6445 +-6680 +9561 +2903 +-9735 +-3860 +-9816 +-3699 +-3634 +-7508 +-6095 +-9867 +7191 +-4152 +-4330 +-2006 +8764 +9660 +9735 +-3598 +-471 +3289 +7101 +-4427 +7795 +-4138 +-3290 +-9834 +7536 +8648 +-2622 +7677 +3544 +4535 +5879 +6144 +-3612 +8589 +-434 +5689 +-164 +9266 +-1914 +-4835 +3088 +8296 +-4258 +-5091 +-7536 +-6007 +-1338 +7376 +8382 +-1437 +-8892 +-2211 +-3393 +-1817 +4004 +9142 +2420 +-442 +3072 +-5768 +1877 +5556 +83 +326 +3439 +-7276 +3003 +722 +-9974 +926 +-7760 +-1194 +2628 +-8431 +-1088 +-6002 +3543 +-6602 +3619 +-2860 +-1492 +-2625 +-2695 +-5426 +9508 +-5729 +6193 +-7921 +3562 +5976 +-864 +-2757 +2651 +7307 +7857 +4000 +4940 +-5570 +-6413 +9170 +347 +-2021 +4675 +3456 +5320 +-2455 +1931 +-600 +-6308 +-3134 +6337 +2788 +9517 +-3052 +-9979 +1603 +6918 +-131 +-4358 +9597 +1830 +-9503 +7535 +9138 +-1555 +-4939 +5931 +-8863 +-3361 +-2594 +-1807 +7166 +7905 +-9676 +-3951 +-1765 +4791 +-920 +-9698 +7748 +-5363 +3961 +5654 +-7428 +8549 +-4142 +4583 +6376 +-4080 +3827 +2341 +-6017 +3005 +-7273 +-3432 +3214 +-3586 +-6081 +-4518 +3870 +2157 +-388 +4524 +6248 +9126 +-9124 +1448 +-555 +7368 +-1677 +5646 +835 +-1217 +8182 +-4330 +5877 +-10000 +4816 +-1441 +3265 +-4755 +-7695 +-2074 +-4017 +5503 +-7705 +-1449 +4982 +-3156 +-3555 +-4537 +5016 +7436 +91 +-1721 +3210 +-5770 +3589 +9386 +9552 +5089 +-9554 +5785 +-4580 +-8247 +-5468 +9189 +-2464 +4159 +6833 +-7697 +4042 +3789 +-2105 +948 +1063 +-8637 +8586 +5973 +-8035 +-4670 +4389 +2809 +2388 +4470 +-4322 +-1549 +-2552 +1628 +8456 +3367 +7843 +3346 +-4570 +3202 +-5504 +-8520 +6988 +1311 +-5364 +-7383 +-7805 +-3084 +397 +-5975 +-940 +3178 +-1266 +4232 +-1206 +2859 +8724 +-1506 +1729 +9040 +3961 +-3760 +6995 +4152 +-216 +7164 +-1452 +6172 +-8908 +-3220 +-3758 +-1519 +5695 +3297 +3500 +-5105 +-9247 +6292 +8599 +-1798 +-1710 +318 +7709 +3822 +-5654 +4025 +7526 +-2088 +-1975 +-2057 +7453 +9163 +634 +1068 +6599 +-8352 +1771 +1682 +-2122 +-4232 +-4643 +-8678 +2749 +6369 +-9632 +609 +-5984 +-2886 +-7012 +7109 +3558 +-1694 +5498 +-6918 +8727 +5579 +-4298 +6725 +-693 +6040 +-7423 +4348 +-6417 +-3045 +-7404 +-940 +7229 +-6112 +5123 +-4794 +-8761 +-5941 +2795 +-7656 +-9785 +8911 +6902 +-8656 +-6284 +-1906 +8933 +-4660 +-5603 +9920 +-414 +5659 +-7919 +8790 +2056 +-2385 +-4816 +-5860 +5445 +1169 +-1412 +-1707 +9379 +7680 +8470 +-7184 +-4312 +2245 +4035 +5101 +-5899 +2168 +-9871 +-8027 +9702 +103 +-9451 +-1590 +2281 +-4754 +-2143 +-5941 +-4546 +-671 +-3056 +-7963 +-8229 +7109 +9895 +2202 +-4854 +-1302 +9759 +-6054 +-2293 +2532 +-4936 +-9841 +-2816 +8863 +8305 +-8280 +7833 +-376 +6079 +7721 +-3624 +-7312 +-522 +3840 +-6225 +2398 +5655 +961 +6092 +9996 +9380 +-8636 +-7481 +-8424 +3706 +4092 +4852 +9282 +425 +6056 +3567 +6305 +7168 +7176 +-4034 +-6001 +-9124 +-2101 +-2415 +-8647 +3535 +-2470 +3666 +8752 +4120 +-9940 +-6790 +-9370 +671 +5745 +7281 +7579 +9885 +6452 +-1694 +3664 +-840 +-8986 +-7316 +-6805 +3386 +6995 +354 +-3716 +1988 +-5932 +6565 +-3499 +-5204 +-188 +5718 +-6312 +-9838 +-4666 +-6095 +3177 +4926 +7779 +2269 +-1944 +6752 +-4423 +-2375 +1195 +7455 +616 +-1241 +3619 +-8707 +4117 +-8148 +-5879 +7169 +-9790 +1325 +4112 +9383 +1978 +-2639 +-4715 +-5125 +-3323 +2480 +-5436 +-3709 +6329 +-2836 +-1298 +-7152 +1231 +734 +3269 +-3258 +1916 +2189 +2274 +-1326 +-7858 +6918 +-2636 +2362 +1188 +9339 +-9556 +3529 +5794 +1906 +7660 +-3673 +5153 +-6442 +4528 +-9774 +1774 +3207 +781 +6936 +4880 +-9703 +9994 +8397 +1423 +-7889 +-2700 +-3629 +-6251 +9160 +-3110 +3392 +5489 +-3119 +-7740 +499 +7114 +9904 +9796 +-5528 +3005 +-707 +-5622 +6531 +-5688 +-9774 +3589 +5458 +6821 +9403 +-6449 +-1642 +5649 +-699 +-8707 +-8017 +-6605 +7824 +7127 +8150 +4633 +-6052 +-4629 +8604 +8528 +-9080 +3657 +6199 +-8605 +2904 +-6314 +7709 +-1409 +-3640 +6286 +2070 +3266 +-6922 +-2689 +2349 +1232 +8011 +8632 +-8035 +7276 +-4832 +-1013 +-2727 +9867 +4913 +5636 +-9039 +9660 +-5145 +-667 +-8880 +-2642 +-4809 +-4641 +-3338 +-6146 +-4036 +-9752 +6542 +6156 +-2840 +-6444 +4999 +-7731 +-4166 +5095 +4225 +-6955 +2062 +-6801 +1638 +-9909 +6757 +-8942 +-621 +-5847 +5494 +-2604 +193 +1918 +7220 +-3807 +1298 +9366 +-8768 +-5662 +-8547 +-9088 +-9387 +-9841 +742 +-1712 +354 +4129 +-7481 +-7865 +8607 +-1075 +7703 +-7923 +-2060 +-6095 +7728 +3733 +-7705 +7926 +-7973 +-3153 +6317 +-2464 +-9325 +-3623 +645 +7819 +-905 +374 +-3465 +-5262 +-5718 +818 +1530 +-1160 +4004 +-4706 +-6839 +7241 +-2301 +-9552 +-4918 +-3378 +-7184 +-476 +-9299 +8322 +6650 +5364 +-931 +-1020 +585 +-6657 +-688 +-2654 +6614 +4475 +4030 +-3552 +-6952 +9613 +3073 +7308 +-940 +3550 +-7610 +-6188 +4008 +5118 +1024 +-8647 +-3317 +-9805 +3141 +-535 +-5182 +95 +9903 +5302 +-8641 +-3418 +-7203 +258 +-7731 +227 +-5663 +3264 +-816 +6134 +6275 +-7985 +-7077 +-5156 +-8617 +3877 +-380 +-8295 +2286 +-1265 +-6001 +-1220 +326 +-9845 +-2293 +3079 +-6740 +7243 +5885 +-6363 +9448 +6337 +5051 +8629 +9120 +2763 +-8398 +1864 +-528 +-9262 +-5458 +5889 +3133 +9323 +-8897 +4521 +-6252 +8536 +-700 +5019 +-1528 +-8910 +3059 +3821 +3945 +2826 +-3011 +-8527 +-7448 +8323 +8301 +6783 +-313 +7422 +3489 +9365 +-7722 +3787 +4034 +-4529 +-6896 +-3923 +5832 +-8391 +4534 +-7182 +-5879 +-7045 +-2095 +8753 +-8531 +7703 +2564 +5479 +-3816 +8830 +9735 +8207 +8783 +-2625 +1333 +-8897 +4994 +-9373 +4777 +-7703 +4252 +7163 +4867 +-2482 +-90 +-7773 +9190 +-578 +75 +-2227 +8261 +-222 +3252 +-9854 +-9664 +-5469 +1447 +2983 +6963 +-7129 +9341 +8882 +5057 +-9814 +8388 +-3184 +3412 +6843 +6299 +8381 +-2333 +-5997 +-9184 +-6474 +6488 +-7040 +-2928 +-4716 +9218 +-1762 +7161 +3099 +-434 +4452 +-4572 +-9309 +1561 +3579 +9793 +675 +-3273 +1302 +-2896 +-4105 +775 +5671 +-1561 +-3502 +-8064 +6752 +-2045 +6755 +839 +-4179 +3546 +4015 +-442 +-9180 +-8184 +-8720 +-3616 +-6013 +-1838 +-6275 +3396 +6682 +9914 +-5120 +9104 +-6958 +-4055 +-4479 +-7879 +3754 +782 +9808 +-9503 +5329 +-3634 +3399 +-219 +-5922 +8991 +-674 +-4659 +-4759 +-4219 +-4808 +6941 +7068 +-2974 +2508 +-5429 +-1422 +-3923 +4067 +5908 +3588 +8022 +5932 +-7181 +-8492 +-942 +-8019 +-942 +-4460 +7549 +2163 +-3817 +-6770 +1961 +6889 +9348 +9915 +9548 +-7503 +-3421 +-6679 +-4715 +-8964 +-2535 +1362 +-9275 +-7336 +8509 +-4523 +-5384 +-7301 +6188 +2070 +4996 +-1646 +4476 +3507 +6294 +-1512 +-8861 +2075 +2398 +-7184 +2782 +1197 +209 +-3543 +-1193 +2628 +5918 +318 +-5686 +-1201 +8644 +-518 +-3053 +4371 +1362 +5429 +8539 +-6112 +6733 +-6415 +-838 +7447 +-626 +227 +-3843 +-7361 +-3854 +2761 +-4269 +-8207 +-1464 +8000 +-1598 +-6219 +5063 +-3395 +5016 +-518 +6664 +-8993 +-748 +7368 +-5999 +8789 +3649 +-5788 +6591 +-4643 +7454 +-9276 +9778 +3735 +-5603 +5683 +-882 +9340 +-1819 +-6925 +-699 +3567 +5410 +-690 +6227 +7002 +-1590 +-2663 +-2899 +4390 +-9744 +2250 +-6579 +4423 +9484 +-9632 +-3581 +5453 +-9046 +2264 +5222 +6815 +4278 +3605 +-6330 +3763 +2910 +7531 +2559 +-9267 +6195 +-3936 +4909 +5889 +4581 +6988 +-5971 +1926 +9832 +7382 +-6966 +5590 +-7140 +-1530 +3531 +-2006 +-5847 +-5619 +-8065 +-3291 +4090 +8442 +-6613 +-4574 +3571 +5922 +-1440 +17 +4502 +-8431 +-3052 +-1948 +-9676 +1582 +-1771 +-2439 +585 +8757 +-1399 +-5026 +-3735 +1205 +7835 +-9090 +1322 +-2198 +76 +2319 +6575 +1109 +-1454 +7109 +9301 +1448 +-5363 +-2078 +-8687 +354 +-3516 +-9770 +-3025 +-2786 +7707 +-1254 +-7864 +3230 +-1332 +422 +-6808 +6139 +-984 +-6579 +-1882 +-4145 +4909 +-7740 +-7428 +2282 +1796 +-9564 +-2007 +6617 +5922 +7197 +9509 +-9380 +1940 +-1964 +3466 +-2663 +9677 +-3211 +-5458 +-1912 +-7706 +2379 +1788 +-3004 +-8416 +-4615 +-1533 +9466 +-3430 +9760 +9513 +-5769 +-4425 +-4116 +-9312 +7097 +722 +3279 +6649 +1740 +3678 +-2239 +-3011 +6906 +-5860 +-4349 +-2847 +8630 +-1828 +-3555 +-9636 +-7256 +-4278 +1418 +9640 +1782 +8284 +-1336 +-5065 +6654 +-1719 +7063 +-1563 +8184 +-9310 +-9698 +1039 +-8637 +-3922 +4164 +-6287 +-205 +-1759 +4066 +7942 +5034 +-2149 +636 +-8057 +8397 +5703 +-5635 +-6609 +8736 +-1508 +7097 +-9849 +9755 +-5221 +6172 +7459 +-2301 +3610 +5959 +9675 +-3750 +-6899 +4671 +-9310 +-268 +90 +5435 +-2326 +2133 +-4455 +5103 +679 +7887 +-1793 +-5770 +-818 +7477 +-67 +3415 +3852 +6633 +9895 +1016 +-4207 +-1366 +-840 +-7403 +-8721 +-5570 +-6399 +333 +6901 +3005 +-4508 +-3999 +6168 +4000 +8876 +-4715 +-3424 +4044 +-5395 +-9834 +5115 +1205 +-1568 +-8043 +9945 +-8807 +4166 +1195 +-9503 +-3335 +-2412 +-8636 +3039 +8470 +-4028 +4180 +-8372 +-5653 +2813 +6615 +8842 +-5536 +8708 +-555 +1733 +-7705 +-2754 +9610 +-9050 +-9675 +-612 +-6249 +-169 +-761 +-4836 +3675 +4671 +-7403 +-2096 +-5133 +6583 +-1376 +7915 +3709 +8162 diff --git a/Media/2022/20.png b/Media/2022/20.png new file mode 100644 index 0000000000000000000000000000000000000000..e17577893c5c425ffa43103a9e281f7b6e6a412c GIT binary patch literal 8603 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 85e3545..a73b1ef 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- 2022 - 38 ⭐ + 2022 - 40 ⭐

@@ -63,6 +63,9 @@ + + +

2021 - 50 ⭐

@@ -153,7 +156,7 @@ The graphic above has been created with [AoCTiles/create_aoc_tiles.py](AoCTiles/ --- -All of my solutions are self-contained and use no external libraries or util files. I try to golf the solutions a little after getting the stars, while still maintaining some readability. The combination of these factors means they're rather short and generally quite elegant *(except for 2022 day 17)*. The solutions expect the input via `stdin` and print (generally) 2 lines to `stdout` with the answer to part 1 and part 2. Exceptions to this are the solutions which require you to read some letters from ASCII art, in that case the ASCII art is part of the `.ans` file and it is printed by the solution instead of the letters. +All of my solutions are self-contained and use no external libraries or util files. I try to golf the solutions a little after getting the stars, while still maintaining some readability. The combination of these factors means they're rather short and generally quite elegant. The solutions expect the input via `stdin` and print (generally) 2 lines to `stdout` with the answer to part 1 and part 2. Exceptions to this are the solutions which require you to read some letters from ASCII art, in that case the ASCII art is part of the `.ans` file and it is printed by the solution instead of the letters. * **2022**: Using **Kotlin** for the first time. Playing with streams a lot, many days are completed by only using streams. The first 15 days have **Python** solutions as well in order to be able to submit quicker and get better times on the leaderboard. * **2021**: Using **Julia** for the first time. Because it supports numpy-like element-wise operations natively this was a great choice for AoC. If I used more Julia it would likely be my go to language for AoC right now. From 248fc1a325ab7f45cd073042722a4de28b4ebd4a Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Wed, 21 Dec 2022 08:38:19 +0100 Subject: [PATCH 046/225] Add day 21 --- 2022/21/21.kt | 42 + 2022/21/example.ans | 2 + 2022/21/example.in | 15 + 2022/21/input.ans | 2 + 2022/21/input.in | 1901 +++++++++++++++++++++++++++++++++++++++++++ Media/2022/21.png | Bin 0 -> 7844 bytes README.md | 5 +- 7 files changed, 1966 insertions(+), 1 deletion(-) create mode 100644 2022/21/21.kt create mode 100644 2022/21/example.ans create mode 100644 2022/21/example.in create mode 100644 2022/21/input.ans create mode 100644 2022/21/input.in create mode 100644 Media/2022/21.png diff --git a/2022/21/21.kt b/2022/21/21.kt new file mode 100644 index 0000000..dea2fd5 --- /dev/null +++ b/2022/21/21.kt @@ -0,0 +1,42 @@ +fun main() { + val input = generateSequence(::readlnOrNull).map { it.split(": ") }.toList() + val known = input + .filter { (_, value) -> value[0].isDigit() } + .associate { (name, value) -> name to value.toDouble() } + .toMutableMap() + val inputsWithOps = input.filter { " " in it[1] }.map { (n, v) -> n to v.split(" ") } + + fun updateKnown() { + for (i in 1..50) for ((name, value) in inputsWithOps) { + var (var1, op, var2) = value + if (var1 in known && var2 in known) + known[name] = when (op) { + "+" -> known[var1]!! + known[var2]!! + "-" -> known[var1]!! - known[var2]!! + "*" -> known[var1]!! * known[var2]!! + "/" -> known[var1]!! / known[var2]!! + else -> 0.0 + } + } + } + updateKnown() + println(Math.round(known["root"]!!)) + val (rootVar1, _, rootVar2) = inputsWithOps.single { it.first == "root" }.second + + fun binSearch(increasing: Boolean): Long? { + var (lo, hi) = -1e20 to 1e20 + repeat (100) { + val mid = (lo + hi) / 2L + known["humn"] = Math.round(mid).toDouble() + updateKnown() + if (known[rootVar1]!! == known[rootVar2]!!) + return Math.round(mid) + if ((known[rootVar1]!! > known[rootVar2]!!) xor increasing) + hi = mid + else + lo = mid + } + return null + } + println(listOf(binSearch(true), binSearch(false)).firstNotNullOf { it }) +} diff --git a/2022/21/example.ans b/2022/21/example.ans new file mode 100644 index 0000000..0072717 --- /dev/null +++ b/2022/21/example.ans @@ -0,0 +1,2 @@ +152 +301 diff --git a/2022/21/example.in b/2022/21/example.in new file mode 100644 index 0000000..e14be60 --- /dev/null +++ b/2022/21/example.in @@ -0,0 +1,15 @@ +root: pppw + sjmn +dbpl: 5 +cczh: sllz + lgvd +zczc: 2 +ptdq: humn - dvpt +dvpt: 3 +lfqf: 4 +humn: 5 +ljgn: 2 +sjmn: drzm * dbpl +sllz: 4 +pppw: cczh / lfqf +lgvd: ljgn * ptdq +drzm: hmdt - zczc +hmdt: 32 diff --git a/2022/21/input.ans b/2022/21/input.ans new file mode 100644 index 0000000..8315578 --- /dev/null +++ b/2022/21/input.ans @@ -0,0 +1,2 @@ +66174565793494 +3327575724809 diff --git a/2022/21/input.in b/2022/21/input.in new file mode 100644 index 0000000..3814ef1 --- /dev/null +++ b/2022/21/input.in @@ -0,0 +1,1901 @@ +bwmv: 19 +dbdl: mjtf * zqpw +bznb: ntgb * rmvp +mdzc: jhmp / rsml +fgzd: 2 +fvng: bbmt + zqwq +pwjm: 2 +nzgc: crnw * vshp +wrdd: 5 +sdtq: 2 +zfcc: 3 +gzpv: 5 +bhbm: 7 +gcvp: 3 +fvtc: 2 +hzqb: 3 +srsm: djhv + ngdn +dvsh: cswn + rmgw +swlq: 5 +sfcf: hsfd * qhrz +bqpt: mzvw * fhnq +rjdp: 6 +nzqb: hnsg + ncdj +njzw: 1 +vrgp: prbv + mjfl +cjdb: 2 +hbrw: jtpw * nqcp +czcw: 1 +vwps: hfjl + cjmf +mpcs: mggp * hvhp +brtt: 2 +mcfl: pcfp + vsgw +tnqf: 2 +phnn: gdgz / mqfz +vzcv: 2 +fzdf: 5 +ldms: hvbd + srpj +wpwz: 4 +jjrn: 4 +rhqs: 3 +sjhz: 10 +bhmh: 2 +sgwj: zmts - lvhv +nmvz: 7 +hdnz: 3 +msfd: 5 +zmpc: 4 +zmdd: 8 +jbpn: 3 +qspm: qwpp * jhlw +mfgh: 4 +hcst: 5 +wqwm: bnrp + lgcm +nzfw: ntms + smzd +pwwg: jfpt + zgth +bnpq: jngz * nsph +smsl: 3 +hzsg: 2 +ntsw: dhdf * tvvw +pfgh: 3 +rgcs: ndtg + fclp +bjmc: vnqb + zjts +hdsf: pfsv + lrsr +dwcc: dpqc * fcvr +lcfl: 2 +cfgh: wphs + grrq +czgs: 6 +rwcv: shfq + hcsj +zwdg: fwgm * vmbl +vpcz: 5 +mjmt: nfdg / ntrt +dsss: fgzd * pntp +dtrg: 5 +pnbz: 3 +mjbs: fhlv - fljw +zhmd: 13 +znsb: bcwv - lftg +lntf: bmbp * dmsf +jznq: 2 +zqjm: 2 +mjnf: sbsn - vchq +hhwc: 2 +shrg: 3 +zljr: wfjm + czcw +qhfm: nmgr - qshc +zgtg: wqbz + nfqj +zpbz: lnpq * ppjh +rvqh: 1 +vrhq: pgjl + lzbr +mtth: ghmt * rrrz +qffq: qwrp + zpnq +prpq: vljj * wgwl +mqpl: qssr + wjwv +spbp: jvhh + ldms +zhrn: mcnf + swlc +mjhd: 16 +bpmg: 4 +hzrz: 4 +pntp: 3 +stmj: 2 +rdrs: 14 +ttvr: gfqw * znhz +gvzf: 4 +mlsp: 4 +mqjv: 4 +rgwv: 2 +sgbz: tvhj * lnwm +lqgf: 2 +fqws: 5 +ddvn: 5 +vqng: jvlh * ldvf +tzrc: 11 +cswn: rpjd * gczj +glgr: 3 +hspq: zlgs - cfgh +jjtd: 2 +vpgw: 2 +qggg: 5 +vvql: 2 +vcnq: 4 +dznt: 3 +hzjr: 5 +lglh: 1 +gchf: 2 +vzpf: zhdn + rnfb +nzqh: 5 +tdfl: wjsv * wrpz +bhpn: 11 +psfv: 2 +tvvw: 10 +glss: 3 +jcvg: 2 +phbr: 7 +bpwd: lggr - mcfl +pqtc: 5 +fhrj: 3 +mmhr: rplb + rfnv +lhqj: zrff - dgwl +vmtw: bdgr * glhq +wjsv: 3 +msjn: plbv + gsjn +jbmv: 3 +htfv: 2 +dlpj: 19 +szmf: dqzp + rrlm +sfmz: 3 +sdqb: hpll * fzwp +fvql: bfwm / jgnd +lcmg: dcff * rfdv +zbtq: svdq + snbf +sqds: 6 +tcvr: dqfv / szcj +dnrm: zqcl / bjzz +whmg: 2 +vfng: 3 +ptmg: cdmz + fqws +rrwc: 2 +mfnf: brtl * czzg +jbbn: 2 +ztjp: 15 +jcnm: 2 +bpdt: 9 +gtzt: chfw * pjtf +jgbq: zchp * rbht +bnrp: qbrm * wplv +fdfm: vqng * sfmb +qtjw: vzmq + qggg +crlq: nvhn + fqgq +wpwc: 4 +glsb: gghd + tnwj +bhzj: 18 +rdjw: dznt * wmpj +qdbl: qvmt + jtnm +tndm: bqws + gchf +gjlz: bvng * rdrg +jmtc: bslz + fmtr +pdgw: 3 +pgjl: dpvh * ttff +fsqh: 2 +tcrj: 5 +brtl: gvls + psnv +bvsd: 2 +zgqz: 20 +bqqt: 8 +gswt: vtqp * vmtl +chdn: fzpp - pcfq +dhjr: nhqs * nzjd +hhwj: fdbp / prnn +lznm: 5 +whnz: phnn * jvhv +nhhd: 3 +vltv: 1 +zlpr: qqrd - ggnr +dpnr: 4 +jvcz: cfdq + bdsl +vsnt: mtwc * zfdn +pzpn: vsmj * wnvf +hgcc: rhfp * gfvh +zghb: hcww + njrb +lgbl: jcmf + fhht +zfwr: rgjv + spbp +dlcq: nhbg * wmsh +szsm: 4 +nthw: 16 +dbzd: 5 +fvhd: lntf + mvgl +mcds: 11 +qztr: vczb / rmcs +rvwr: jtwj + mjhd +fhzn: 2 +pjtf: 19 +qvfm: cqst * qpmw +ddlj: 11 +qjqf: plhv + tldm +jfpt: 4 +qmcp: 6 +wgqw: 3 +svgw: 2 +jwsb: fvhw - mvzg +shfq: gspt * bzrs +hpbf: 1 +nfcg: bljl + vpfb +mqgg: lrdg + qvdm +jnfw: 2 +qjqt: 17 +sbnc: 5 +gnht: 5 +qqbd: 3 +nnsm: 2 +mrhv: fcct + jnmf +nmbc: hfbt / zcsf +bjwq: 3 +wrbj: 3 +fzpp: tfjm + wghw +hldn: wtpp + rnzj +dfvc: qnqn * dppz +dzhb: jwjp - cvmg +mjbh: jgrc * szmf +vljj: cpft + vftr +nlvv: vmcn * nqbh +gzjp: 19 +vcjt: 16 +lqbp: 1 +vvqj: bzjh * fhwl +zddr: 10 +sqrq: 3 +brwq: fnrs + trwn +zvbf: 5 +prqd: 4 +gmnb: mtdt * vsgp +tdcr: 2 +fvpr: jbzq * lbms +tfpl: 3 +flmh: 2 +fhht: tpvd * dhjh +dqrf: zhmb * ldlp +fhcr: hqpg + vztf +zjbq: 11 +wqct: wszs + lpsp +dwmn: 4 +sqhc: 6 +zjlw: 2 +lnft: csvn + qzfw +lrsr: 6 +wbtb: 4 +nqbm: 3 +mvzg: shrg * gsrm +mrpq: prch * ztsb +dgwl: cvhz * jcpf +swtw: 2 +rhgp: nwrg + rrwc +nhbg: 2 +qqtt: 7 +cpft: 16 +mtjz: 2 +znhp: lnft * vvql +tlvj: 1 +jhsv: lqcb / lznm +ggns: hzjr + nchv +dppz: 2 +jtnm: cflc * czgh +rfjh: zghb + jmcm +vfzz: 3 +cjmf: 3 +wzrc: glqg + zcjn +dpvh: cwtl + fnfj +vqvh: 2 +lqdl: nzfw + pdlp +bbsv: lclb * dfvc +jmtf: chvq + cvfc +btsq: qtjw * cdnd +czgh: 2 +zhcn: dsls * jjsd +hvjt: mwnb + ntzf +dqtl: 5 +djrh: tsdw * cbrd +zcsf: 3 +fdls: 13 +tlgd: bbpd * dnzh +nsdp: 2 +lggr: bpmg * plmh +trcq: tdbv * ggzp +vvfl: 3 +qrnp: 2 +rncb: 3 +pbnn: gjzv * fcpl +zlmn: pwnw * lpvz +bshs: rrtq * bfhf +spgv: dlsh - szmq +blhf: 2 +zjvq: 4 +wvzq: sgbf / jwtb +pvmj: 2 +gblc: bjzw * jvcz +hjbq: jznq * vcgh +qvdm: 19 +pmfp: 2 +zhfh: qvrw * lwqg +gbdl: 5 +mnct: 2 +wcwl: 2 +llvm: 13 +pbdb: qztr + ttqr +dhgn: lblh + qfls +bmnb: 3 +ntgn: 3 +hnfv: stpv + lwmh +cgmr: chtr + gnht +wgwl: 4 +qggj: mqjv * lmfc +djfn: hnfv + wclv +vczp: 2 +hfbq: 2 +bzrs: 3 +lbtl: 2 +dcvb: 16 +bbmt: hgmr + nvqm +vfbf: gnfs - mlsp +wnvf: 5 +rmvp: 18 +ffdl: cblg * nqbm +szmq: lqbw * zptz +jwjp: hgrl * zgzg +dmpc: zgtg + bpvp +vshp: 11 +qjdm: 4 +rfpz: 9 +lggh: mcln + mcth +prnn: 2 +vzgb: 2 +tsfr: 16 +vchq: rpgb * vwlf +mnqn: 7 +pzzz: wczt / vhdw +sjbm: 14 +qllr: qdjp + zdld +fdpt: qmcp * gqtl +bmwl: jppw * ldpd +znmb: nflm * jwqz +gcwj: 3 +wcqb: nwgz / smls +slwd: mdzc - hdng +rlzb: fvtc * cjtn +gwmp: 2 +dwzs: 3 +qzrc: 13 +cjsp: 5 +btsr: 13 +dqzp: ffwj * hcst +fcct: 4 +scsm: rqcr / ddgl +chtr: 2 +ztcm: 2 +tlvz: jbcs * sbfs +jvns: 18 +hrjv: dpzp + nsbl +ctwq: 2 +dvhq: shms / wssb +zhfm: 4 +bfhf: 4 +ppqf: 5 +bntm: 6 +bmns: mjfg * bgdj +trzs: 16 +fjjb: chsr * hzmp +tgwr: 3 +nfqj: 16 +hvhp: 2 +sdpv: cszr * wlss +hwhr: 2 +ndtg: 4 +gcnf: bqbc * mrfp +mbnp: hbdc + grgm +bldr: brwq / psfv +bjzz: 2 +wqcq: ljqb + mnjp +gpsj: qmnr / nprh +hgdr: fgth * crqr +tnvl: lmlp + sbtn +dfmj: 20 +bdgr: fjgn + vhlh +mvll: nhhd * pjqs +jvlh: 2 +jmsl: zmmz * bdrq +tczz: 4 +zqpw: 16 +qssr: 1 +phwl: 7 +jmlz: 3 +dtdl: 4 +gnbw: 2 +dmhs: 4 +lpbg: nrwb - zgqz +qcrq: 5 +hcsj: 2 +root: mrnz + jwrp +dchh: jzds * zfcc +vhbw: 2 +jrct: pclc + wwmh +jrnf: 3 +fswn: 2 +hdhm: znhp - tbqp +hzps: ttdd * wqsl +vvrp: 16 +cfdq: 4 +szzs: wvcs * mwjv +tzjf: 5 +lbmf: 5 +mnjp: jnvp * bmrc +hnsg: dngc + wsjn +hngp: lfpw * dfnw +qmdj: vlhz * vhth +wvrq: wqct + dsvz +svfc: 2 +hvmj: wgcs * bpwd +lzjs: dzhb * ppqf +prgf: 3 +lqqr: 3 +qcpp: 2 +jwdc: 2 +hsgc: vtrh + pmjn +tlsc: 5 +mdpl: svqw + pwhl +bzpt: 5 +fvhw: gchv + rnqz +mrnz: hncd / phsp +lnjg: mfqs + zfln +rthd: cpbd * gwqc +bzwc: 4 +btcd: bwst + nzmr +bfsh: 15 +bldp: 10 +vsgw: hldn + rzmp +tpvd: 4 +gqwv: tmgv / dqqp +ddtq: 3 +mpbq: 17 +qwqw: pvmj * hfvz +gfvh: mzrn - vghf +sjlq: fswn + vggq +cfgr: rhqs * dgtn +fszg: chzd + dwcc +jvhv: 2 +zlcl: glfw * zcnp +bcwv: gvqz * nzwg +gglj: 6 +wssb: 2 +dphd: 2 +chrg: thzp * gcwj +nbjj: 2 +nrlq: prpq - zvjw +vnqb: pjdf + zmls +mjrl: wgqw + zhfm +dzrs: rqts + vwdc +dnzh: 2 +tdtb: hggc + ztjp +fpnq: 2 +zqcl: rzpj * dbww +ftsc: fhzm * bhlz +rrgr: 3 +rbnj: ttfb * mdjl +spwn: 18 +zlht: 11 +zgth: swhc + jbbb +rdnq: hzrz + ngfn +pldw: rqbp * ftcw +drbn: 5 +twsw: bsmt * crzb +qvsj: jvmh * wqwm +dsfm: wdvv * gpbj +bprz: nfmb * pgrj +bfwm: tcjh * bhmh +wjwv: 12 +dggm: lgtb * mzlv +wdvz: bfrg + tmwj +wwmh: cnmc * hhwc +zqss: 2 +zzwh: zdfp * vjfv +crff: 3 +ctfz: 4 +jvmz: hpmf / mbbc +rsnh: 2 +gjzv: gwmp * btgm +qcqj: mwmw + cmhb +vvrf: 13 +tffp: pmfp * drhd +mzvm: 2 +lzsp: 2 +clsq: vqvh * gljs +qmnb: 5 +qznt: 3 +wdzq: qzhw + bhbm +mtcv: 8 +hmqd: 5 +plbh: wdlh / svfc +czmj: 4 +zpnq: 12 +zpcf: pqfm * qwrm +nflm: wwlm * dsfd +mcln: dtdl * zmpc +nstb: zqss * lvdw +wqpd: msrg * rbgq +jstq: dgdn + dcvb +hbvf: 2 +drrb: 1 +pcfq: 7 +smhn: 5 +lfpw: 2 +fnrs: jhgg + zvfs +fcsr: 1 +lcdv: smwh + vmhf +vvwt: vmtw / cccp +hfqr: 2 +jblj: dprq * phrn +mtmc: 5 +mmwj: tcsn * bwmv +zqmc: 2 +dsql: vmcf + zpcf +rfbr: 3 +ncss: 19 +psnv: srfz + pzfs +lgff: 8 +hwcl: 7 +fqjw: jqwh + mhqw +jdvg: 3 +qzpg: nhhv * lgjp +gggc: 2 +nlrs: 3 +vhlh: frph * ddnl +nwpl: 3 +zdfp: 5 +vpfb: prcl * jcnm +bljj: 3 +srnq: 2 +qwpp: 7 +ljqb: gswt + rzzt +lvhv: 1 +brlg: 10 +rlnn: 2 +jhlw: 2 +vzmn: 3 +hbls: hzps / gbhc +plvb: 11 +nfvl: 4 +sljl: plml + lzjv +szvf: 17 +rgvt: 4 +chzd: dbgr * mttq +rjrn: lmnw / ctpd +bbzc: 4 +cbps: zqfj + gtct +pcsf: bpnn * nhvj +cdcr: pbnn / wpwc +bjzw: 3 +phpl: 2 +dpqc: 3 +vqvq: trcq + vwps +fcfz: 6 +mpsq: qjqf * lhfm +vnmj: 3 +rqrd: rthd + gsgd +fcvr: 5 +lhch: hbjt + ljcq +hncd: zfgj + brbv +hvph: 9 +srfz: lhmg * nqsw +nrzb: qhfm * jnbm +wdlh: hhwl + rqzm +mstz: mbds + mmph +zqwv: 5 +nqsw: 3 +qpzm: dbnf * vqlt +ggzp: 8 +zfgj: mdmq * mpsq +qzhw: 1 +rppp: 16 +lhht: 2 +rfvv: 13 +rpsr: 5 +wbwf: 2 +cppz: bwtw * qppz +bpvp: dlcq * fzng +rbtw: 3 +wmsh: mpcq - dchh +lscm: 11 +bhlz: lhch / wdzq +sbcs: tfns + ddtv +rgjv: tsfr + qmdj +zbwg: 9 +pgrh: 15 +lrdg: 6 +dfst: 17 +wmvw: vsqr * hljl +gtrp: 2 +jlcj: zblj * wglg +wzrr: 16 +ggnr: 5 +zbfr: gdtz - fdqq +cnmc: gdwd * zjlw +tcjv: jjgj + lglh +rrpb: ltmf + mbfl +zchq: 5 +crdv: dvhq - lhmc +sgcm: 2 +dcml: bzwj * tbld +nrfw: 3 +fnfj: 19 +zgld: 5 +qbrm: 3 +crjf: 3 +dsvz: mmhr + nvqg +tljb: rfbl * fqjw +mflf: 4 +mtzf: 2 +zqfj: nbns + btcd +clrn: 3 +smls: 2 +tvhj: 6 +rvjc: dvsh * gggc +dzpc: qrnp * sjlq +wglg: rrpj + gmnz +thgz: 4 +njhc: dncj * mjnf +gfqw: 3 +jhjv: hcvc + ghsj +fzmr: 6 +chlt: nrfw * jzff +jwqz: rlnn * tcjv +bzjh: qspm + rncb +dfnw: 9 +pfnm: cnhz * hdsf +mzvw: 2 +mzqr: wcsd + jhsv +wjsh: scsm - rrpb +jbdr: 2 +vcbr: wdnj + lgbl +lpvz: qvdg * ljrn +dcnn: cjsp * lbhs +wghw: 10 +ndpw: 5 +vmcf: 2 +nzlh: 1 +lbms: qzcj + tzjm +vdgd: 18 +dnft: qrtv / vzgb +cccp: 2 +smzd: 7 +jqrr: pcpp * hvph +mdwj: mjdf * msfd +dncj: 4 +qfls: fcsr + hngp +dqdc: 2 +qvdg: 17 +cblg: 3 +ffwj: 13 +bzwj: qpbc * mrlh +mplz: 5 +vqdq: brlg - zpmq +ljpl: 7 +mtwc: 3 +qvmt: fqtb * vdlw +fljw: pggm + mmwj +ltmf: zjrj * ztjr +mjdf: 2 +zmmz: gtcd + tzpf +hhfr: 5 +zlqm: sfcf + frld +rzhq: 8 +rqts: 2 +jgrc: 13 +nzwg: qffq / qrjh +fmhf: fwrq * sjbm +mwwv: vmvq + hgcc +jqwh: tvvn + nmvz +snbf: pnqt * fhds +ljcq: zlmg + lsvh +qmcm: 2 +gghd: rjcv * hjsj +bwst: ztgn * bwlf +mnwp: vzcv + dcnn +djfq: 3 +rbdd: 20 +wlfb: pwcv * lmpt +wphb: wbrv + wcsf +zjrj: zzng * zsvv +vqsh: gbgn + vvgg +fjgn: lrcn * vrhq +sbtn: bqdh * stnp +njmg: bmns / gchz +nfft: qtcz + qhdd +nhjr: dqfp - mfdc +rbgq: 7 +lgtb: 3 +jzts: sdpv * hbls +gjqq: znsb * nbhz +vftr: wzsl + tjhh +tvtc: 13 +wbfs: pdgz * nfvl +fhlf: 6 +bswv: 15 +rghj: mrcn + sjsb +qsln: gzjp * zfwr +jppw: mtmc * rpsb +zwvq: 4 +wplf: pldw + tnvl +lcql: 12 +pncm: bprz / fzqm +fclr: 2 +szss: 4 +vhmc: 7 +lqww: ggns * wqls +phsp: 5 +dgdc: 2 +drpc: 20 +hbcz: hwmj * mqpl +pcfp: hrvz - vsnt +rgfj: bpls * mrhv +vmsw: 2 +brbp: qdwn + lscm +nphl: dcml - mzqr +dbnf: 3 +phzv: 7 +rtmp: tznf * nrzb +lsvh: wpzm * qwhb +wgcs: 2 +nwgz: mhsz + lbqr +rwgg: 14 +ggch: qvfm + gmnb +qlgd: nfdf * hddd +mfhn: fhrj * vqdq +jnbd: bgds + dghv +ndfh: rzbf * hfqq +hfcp: 2 +pwst: vhmc * dgwv +tzjm: 4 +tjns: 4 +bmbp: 2 +gbhc: 2 +wqsl: lvzs + nhtr +bpsv: 2 +mzrp: wqvz - vmsw +lbts: 17 +dbgr: 4 +pwnw: 2 +ftcw: gcvt + lwrb +tbrf: hdwd / jnnz +lqcb: sfdn + fwcv +gsjn: 4 +bgfq: cfgr * glsb +gchz: 2 +spbt: 2 +qtcz: pjgg * rzhq +swts: vjhg + dzzz +tzpg: hzsd * bljj +bgtc: ghtw * dhjr +cnpl: vfct + cdfg +ngcq: 18 +fpmj: qdmg + ttzc +tbjt: 2 +vztf: fzmm + jmmt +jjgj: qlgd + rppp +gtqw: mszj / jpgc +qcjv: cdcr + vdgd +vvgv: nzgc * dfst +wzzp: jcnb * lwrn +zrff: nhrd * tbzn +rdrg: 5 +plml: wlfb * bbzc +dsls: 12 +bpzs: lcmg + gtqw +zvqr: 3 +tsvw: 4 +jsrw: 4 +ldcs: 3 +tthz: chrg * qqtt +jdgh: rbjq * hpbs +zjnj: 2 +mpvz: qsch / bvsd +bgrw: qlzb + zmmg +bsvc: jwsb * sqrq +lwgg: 2 +fgrb: hfqr * wpwz +vdlw: 5 +zmbv: 3 +htls: 2 +csrv: vqvb * phpl +thls: ctzp - vfbf +qlmc: 1 +dfbs: 4 +hggq: vqvq + nhjr +qpmw: 11 +lrdb: mflv * zfcg +sqft: rmvc + nvzj +zfcg: 4 +gbnz: 6 +dsvb: 2 +vpmg: 3 +grhz: 2 +tvjr: mpzw + dgvp +swhc: 10 +djhv: 19 +gslh: 7 +ngfn: gjfn * cmmm +cdnd: hlbj / wfjv +fvjl: bpnw + swnr +scrq: 19 +ddjd: cjtt * tlvz +wlgd: 2 +vsgp: pttg * zcgl +wtqc: jhjv * hwpf +jhlz: wgdz + rwhs +mmph: 4 +ctzz: 2 +lnpq: 2 +rwgh: cgvl + hfcp +tsnd: 3 +vqvb: 3 +plbv: 3 +hvng: 18 +chsr: 2 +ntrt: 2 +qrmg: hdhm / hrrc +ttqr: ddjd - qzgj +dmbm: 3 +stpv: 3 +dvvw: ggcz - qlmc +vwdc: mbws / nnsm +qlzw: qmzj * tdcr +nsph: 2 +mrnj: 17 +jlbg: 2 +rtql: 7 +dhdf: 2 +szvm: 5 +pgrj: fmvr * gbtb +rrrz: mcqq + mdpl +dvvn: 3 +mhsz: ttpt + czgs +cwtl: jbzl * tvsh +bdsl: 3 +rqzm: rwgg + gwmb +mfqs: wdqs * qggt +ljjs: 4 +phds: 3 +jbcc: hblr + zbfn +vhdw: 3 +gbtb: 3 +gqbj: tzrc * jbmv +qppz: 3 +msmv: 2 +lmqb: ctzz * mpbq +fgnm: tbtl + rvqh +dsfd: 7 +jnvp: 10 +cdmz: mmwf * sqsj +qhnn: 2 +jlnl: ttmb + jjrn +trrs: rvhr * nrsc +svqw: 12 +wplv: qjdm + dtrs +fwcv: twsw * fqwf +pvgd: 2 +mpcq: pwst * mvqf +qjjq: 3 +cgvl: 5 +rdtm: 5 +msfl: 2 +ctzp: spwn + drpc +pzzj: 2 +ggcz: 8 +mhqw: jqbc * vpmg +vjgh: 5 +vpcm: 2 +hstl: dsfm + vbzn +shms: svgw * tqbv +gjfn: zvqr + wttr +zgpp: lhqj / vpgw +tvsh: hdnp + wrbj +rbmm: lmng + fnws +tcsn: zzww - nqzj +fhtm: 2 +fqwn: dnrm * fpmj +ttff: mnwp * zdcg +rmhb: 2 +jqwc: bfzr + tdnp +sdgc: 15 +ghtw: dwzs * rnnn +tldm: 1 +sfmr: 3 +dpnl: zgcn * hwhr +hgrl: sdqb * bjmc +vrbp: 4 +mwjj: 11 +hjlf: 2 +jcmf: 5 +mszj: btjn * dphd +mbds: 3 +lzbr: nzqb * tbnm +frph: qdbl * dmpc +jqbc: tzpg + jjtd +nrwb: bswv * rbld +tmgv: mjbs + nzgw +pbvh: 3 +rpgb: vgqm * msfl +qfjm: jmlz * cdhb +zhdn: 4 +nctm: 1 +bnfz: 3 +tsdw: 3 +pbnr: 3 +grrq: lscs + njzw +fnws: pvqs * fmgh +vlcb: 4 +nrsc: frnh * mzvm +jvmh: 9 +wnzg: rbdd + lzvf +bvng: flwg + dpnl +gtcd: 5 +bpls: 3 +qfcn: 3 +nvqm: zhcn + glqd +nbhz: 5 +qlzb: bfsh * ljgh +vlbp: hnjs + rfgp +ntgj: 20 +fqwf: 10 +jvvf: 1 +rbld: nfcc * qvgq +tnwj: gtrp * gstw +hvbd: ppns + lbts +wpqw: lrdb + lnjg +gdgz: vcjt * qmcm +mbpc: twmg * rmhb +cznr: dbzd * fgzc +jsvp: nbsl + lpbg +qbnr: mfdb + zcjz +lgcm: 2 +pwrd: qnhj - szvf +mqfz: 2 +wdzc: 2 +fjtd: 2 +qmnr: dsql + hzsg +nqzj: 2 +jmmt: 3 +dtqn: 8 +swlc: 2 +dhpt: mfnf + pwzf +wbrf: plbh * vzmn +jqjn: 7 +lgjp: 3 +brbv: pbdb + lzjs +mcth: qzrc * gdjw +nbns: dfbs + mtpc +fclp: rbnj * tbtr +gtct: sljl * hdcf +szqm: nhhh + nhgc +tbtr: 3 +pwvg: 1 +zcmf: qfjm + whrz +rnqz: fmhf * rwgh +zwlj: 3 +ntmg: 5 +tgvv: lqww * wpqw +twmg: tzjf * jtbf +lmjv: zphc + llvm +lrhn: nfft + vrgp +ctbv: gjlz / szvm +vdjr: hbdd * smtn +cvhz: blrn * ntmg +fqgq: zjbq * fbhf +zlgs: jbbn + ltmg +qmzj: fqwn + njmg +zzng: nnld - vfzv +lfnw: bdvl + dbqw +pggm: szsm * hjtg +wwlm: pnbz * sdtr +bdvl: 3 +vczb: lfnw * lwdq +prgs: zbfr + tbrf +fqtb: 5 +gstw: wcqb + mhfq +dgdn: 1 +flqb: tdts + thls +ltjl: btsr * fgrb +tbqp: fdpt * mfhn +ngqm: 2 +fgzc: 13 +czcb: tffp + jbcc +gdvn: ttqq + swts +hbzz: fdls + qwmm +lclb: sfmr * nbjj +prch: 2 +pjhq: 1 +vdch: sgbz + vdgw +rchm: mplz * dsvb +ghwr: sqds + hhfr +fvbt: 8 +wnbl: shcc + ngrj +czqg: tdjp * phds +vfzv: 8 +gczj: qznt + rnqv +mrlh: 2 +jcnb: 9 +plqs: 4 +hwtt: fbbp * vqsh +fzng: 3 +fmgh: 5 +cqss: 5 +ntms: 1 +vwlf: 7 +hswh: swlq * ndpw +bthv: pbnr * ffsn +mvff: pdnh * dnft +qwvq: sgbq + zwdg +wfjm: 5 +humn: 959 +nbvp: ffww * ddcf +wbrv: 3 +psdw: crlq * wlgd +mggp: njhc - czqg +grgm: fzmr * spgv +nlwb: glss * brbp +zdld: 15 +dnpb: hvjt * htls +jscw: 2 +zltp: 5 +rdvs: humn - wpmm +ddfl: mjvw + whwp +dzrh: 2 +ppns: fvpr + szzs +pwzf: bmwl + mfbh +bfbf: sbhh * mbfr +qrnv: ldbw * dfsp +tdbv: 5 +jnnw: 2 +tbvd: mpcs + djrh +jjsd: 11 +vfzd: chpt + ldzl +rfnv: nhng * nlrs +lblh: 2 +lwmh: hvdb * ntgn +dpzp: rpsr + mzsr +tnzw: jblj - mspv +tlnn: qgjl * zlwj +dqfp: cgmr + jtlb +hlrf: sbfj * jrct +lhmc: qzwc * wjql +wsjh: 4 +vvzd: fjjb - jgbq +jpqt: 17 +bljl: 3 +qdwn: 2 +mdth: jlbg * qrnv +jvpf: 2 +qggw: btbw + zqwv +sbfs: jzhg + tlsc +lwvz: zwlj * zhmd +pldg: csln / jcvg +qshc: nhvd * fcfz +cbhb: 4 +zlvr: mjmt * zmph +lwqg: znmb + vwrl +rdhv: smhn * scrc +bsmp: 11 +qrtv: chlt + cznr +tdnp: 6 +hpll: rrzp + fmvn +bwpn: 1 +ffpt: 13 +fbpl: 2 +vjhg: 2 +wrpz: gglj + jfcl +blbz: wplf * qhnn +gdwd: 17 +cqst: 3 +jfcl: rqnr + fmnm +mzlv: vmns + hrrf +vmvq: qhgr * pwrd +mspv: jzts + tdfl +ntgb: 3 +gvls: rfsj + qggw +fzjn: wqcq * tnqf +jvhh: 2 +sgbf: ndfh + vvgv +hbdd: jnfw * scjg +gttc: 11 +mflv: 3 +fmtr: hhdj + phzv +tfns: zlpr * bnpq +dbqw: 9 +jfbb: znmd * ntwd +dmsf: zpdc * zcgd +rrlm: 5 +lslm: hdnz * vnmj +pdps: 3 +sdtm: vvfl * qjns +hwmj: 2 +rwhs: rdhv + gfhn +nhvj: 2 +sddb: 5 +zpdc: 7 +hpbs: 3 +gcql: 2 +lbqr: 11 +gplv: 15 +cflc: dvvw + dscv +jmcm: cfrd * nzqh +hlcd: 3 +fwgm: 2 +glhq: 2 +wfmj: qwqw * pvgd +ddnl: mjbh + qvsj +szcj: 2 +nhqs: bqqt - jlrl +lnwm: sgvh * rgwv +tbtl: 18 +mdmq: 3 +rnfb: tvrb * ttsb +wjld: 5 +tvcq: wzcd - gcvp +ztjr: 6 +wgmf: 8 +hhwl: 15 +qjns: jtgb * clrn +pwfw: lqbp + pcjh +nfmh: zddr * ddvn +jlzq: 5 +ljgh: 3 +glfw: thgz * vqqm +lbhs: tcrj + hjlf +gdjw: ncsb + vltv +dlsh: zjwm * hspq +vmcn: phwl * gfrl +nhtr: qpdl + smjj +jtwj: 1 +pczh: hvfw * mjqz +lctm: nlvv - mbfg +pdlp: ptqt * hqcs +thzp: prgf * qsrr +bmzl: 2 +pgzs: hgcd * fbjr +nqbh: 2 +zjwm: 2 +mwqj: wrnh + jrnf +tjdc: ljjs + bfqp +rqlw: blbz - ncpz +tmwj: qggj + nzlh +bhwg: hzpl + mztj +ddgl: 2 +jsfv: ftnb + jqjn +zlwj: 2 +stbw: 5 +zssm: 19 +fhds: szrz + zzwh +qvgq: 3 +lhmg: 4 +rjdn: 1 +hbjt: gggn * svzg +jgnd: 2 +hjtg: 5 +zswz: hstl * scqj +zcnp: 2 +dhcd: ddlj + zncn +rmvc: 9 +ldpd: 3 +hgdg: 18 +zzww: wtls / hlsh +hptd: 2 +hfbt: hzqb * hsgc +wczt: qdlp * rfbr +bqwn: 2 +wpmm: jmtf + chdd +hcvc: 6 +mcqq: ttvr + vvqj +nhng: gzpv + bqwn +rfmg: 2 +wzsl: 1 +hcfj: 2 +whwp: tvtc * ttmh +lpsp: rfvv + wzrr +fzqm: 4 +lscs: pjhq + zhrn +ttqq: mtcv + rtmp +zjts: 5 +rjcv: 3 +qwmm: 4 +fmdn: fvng / dmbm +mpng: 2 +vmtl: 4 +wdlf: cctn + vqsn +dhjh: 5 +zsvv: 3 +nmjn: 2 +rfsj: wwvg * brwz +wzcd: cjtm * szss +hqpg: 9 +jhgg: 11 +jssr: 2 +zjvm: pfcb + dtrg +hjsj: gpsj + fftv +ngdn: mvll * hgdg +glqg: htfv * zcmf +gjlr: 3 +fmnm: tstl + pnwl +ntwd: rvjc - gsfh +jbcs: 2 +tbnm: 3 +pzfs: nljg + pfvf +dprq: 6 +cjtm: pdjl * prqd +bzww: tbvd / mrmv +vqlt: 8 +jhmp: qlzw - vhnq +gmnz: 14 +pmjn: wbrf + scfr +plhv: jssr * rfjh +mrts: tcnr * hrjv +cfqr: hwps * chzv +dtqc: cdsf * njww +prbv: nthm * dqdc +tjhh: bwpn + pwfw +hdnp: 3 +vsmj: lbmf * mslh +wdvv: 6 +gnwz: bhpn + mtjz +zgcn: 5 +mdnz: 3 +pcpp: 17 +jtbf: 5 +lmng: wrtv * pctw +sjrm: 20 +pttg: 13 +rpsb: 5 +bmrc: 9 +scrc: 14 +nhgc: 15 +hddd: grcs + dtrj +bslz: 15 +rmgw: fbhl + cppz +rnnn: pbzf + qsln +zchp: 2 +btbw: 1 +vfnb: phbr + jlnl +phrn: wvzq + pnjb +qsrr: 7 +lwrn: 4 +jtgb: 2 +vfzf: zswz + wjsh +qzfw: mwwv / pzzj +ctpd: 2 +fhzm: 2 +hlsh: 4 +csln: fpnq * fvql +lftg: 8 +cftr: 10 +tcjh: pbpt + gclq +jlrl: 2 +nvqg: 5 +zlmg: 17 +nvrh: jsvp * fqjm +fmvn: ftrh * wcwl +mbbc: 2 +wrnh: jjvw * bglg +pcjh: vsfb * hqph +zqwq: hlrf + rtql +jptg: wbtb * zwdj +ldlp: 4 +mjqz: 2 +pwcv: 3 +rrpj: tfpl * vfzz +qgjl: zqjm * mwjj +hcdh: hnws * jnnw +wwjd: wtbn * jrjn +rzpj: czhg + dfmj +qwrm: 4 +pbpt: 1 +btjn: jfdn - hwtt +mhfq: vlbp / fjtd +mttq: 2 +qqrd: bbsv / ldcs +gpbj: 3 +smtn: 2 +zdcg: 2 +hvfw: sdtm + djfq +vmhf: qpzm / vlcb +rbht: lctm - wfmj +hhdj: zfsh + dffw +vwrl: jmsl + zlnc +nqsl: 14 +fbhf: 4 +gcvt: bhwg / hgqh +hlbj: rrvm * dhcd +qdqg: qfcn * wvvd +tcvt: jqwc + tjqc +vcgh: mnql + srcd +gdbn: 12 +zfln: llst + dvhc +ldzl: 9 +gsfh: fszg + lgff +ppjh: dmfp + mdwj +nfdf: 2 +rrvm: 5 +hgqh: 2 +cvmg: wdlf / rsnh +pjqs: 3 +mwmw: 6 +hcww: 3 +dzzz: 5 +wqls: 2 +stnp: 2 +hnjs: stbw * bthv +fzwp: wnps - qwvq +fwqz: 6 +wszs: vgtg * gjlr +vggq: 11 +dgwv: 2 +hljl: 2 +nthm: srsm * vvrf +sdzf: 2 +zchv: whlm / ntld +wqvz: wtqc + mnqn +mjfl: tljb * wdzc +qgzj: 4 +drhd: dzpc + mqgg +rqbp: 10 +wphs: 4 +nphn: gdvn * bthb +nfmb: 15 +fbbp: 4 +ncpz: hptd * rgcs +whrz: mlbv + gslh +wtpp: rvwr * cbhb +ngbq: nlwb + rgfj +pdjl: 2 +nhhh: 10 +ttsb: gnhd + clsq +lmpt: 5 +wvvd: zbrb / jscw +chzv: 7 +jbzl: 4 +flwg: 1 +ttzc: rdvs / cbrl +zhmb: lrnq * sbcs +mvqf: 2 +lhjq: 15 +vhhm: ltdr + sdjj +qpdl: mpng * lcql +zmph: 5 +vsqr: 7 +pjds: nbhq * grhz +mslh: 5 +plmh: tthz + zgpp +sjzs: wvrq / sdzf +tznf: 2 +nvhn: bvfd - vmrb +lmnw: wtdl * gzmn +cbrd: mzrp + smsl +qhrz: jvpf * ttzn +pmtq: jpqt + gdbn +pvqs: 19 +vtqp: pjds / pqwz +sqsj: 3 +tdts: 13 +flnv: zlmn / zgjv +vhth: 15 +vqqm: 4 +hfqq: 2 +chvq: 20 +fqjm: 2 +nhrd: pfnm + zmfj +hsfd: wphb + gblc +rrzp: fscs / hgmm +ttzn: 3 +jsfw: djcs * bshs +lhhc: 5 +dnwb: mtth * vvrp +tbzn: 2 +jtlb: fwqz + mrnj +gspt: 3 +prcl: 5 +wnps: tqbm + bznb +rhfp: 3 +znhz: tndm + vdjr +cdsf: rrgr * dzrh +mlbv: 7 +crzb: qmnb * zdmv +cjhp: 2 +ttmh: 4 +mztj: ddfl * zwms +wvmj: 5 +wbjq: wgfv / bntm +lrcn: wjst * zlvr +rsdf: lslm * dzrs +dqqp: 3 +mfbh: 5 +pdnh: sscc - lgnp +sdjj: tjns * pldg +bwtw: cftr + mnbs +zmfj: slwd / mnct +mbfg: 3 +vjfv: wphq * trmf +dscv: 10 +tnnr: 11 +zcjn: 17 +jlss: 2 +dtqh: 3 +lmfc: pzww - rjdn +wphq: fvjl + ngcq +dffw: zltp + jvvf +czhg: 17 +jpgc: 2 +bglg: 2 +vmbl: 5 +jnbm: 2 +fwls: fzdf * wrdd +mdjl: 3 +gcsd: 13 +cjfg: 3 +bvfd: gqbj * wsjh +sfdn: 5 +gqtl: 6 +sbsn: mbnp / tbjt +pfsv: wllz - drrb +wvcs: bjwq * crff +ttdd: 2 +frld: rdjw + nthw +mzsr: wjld * cqss +sbfj: 2 +mnql: 6 +trwn: rchm + pdgw +ddtv: jsfw - rghj +pfdq: 2 +lvdw: zhfh - bgtc +jzff: 3 +ncmn: sqft * fgnm +zmts: lhlm * ljpl +nljg: 4 +rwnb: 2 +gdtz: zgld * wnbl +cjtn: 17 +nlzc: 2 +jcpf: 2 +bqdh: pcsf + vhhr +cmhb: 2 +srcd: 17 +pdfg: sddb + dtqn +qnqn: 7 +zgjv: 2 +cjtt: tlvj + csrv +svzg: 5 +tjqc: 1 +bpnw: nfcg * hmwb +btsz: vhhm + hcdh +zpmq: 3 +ffww: qcrq * rdtm +rpjd: 2 +tbld: dtqh * fpmv +trmf: 2 +jtpw: ctfz + bmnb +pclc: 15 +wwvg: 3 +hqsh: dhpt / jlss +mtdt: 2 +sjbp: 4 +hrvz: zrfc - rbsd +smjj: 3 +vzmq: 2 +dqfv: dqrf / gbnz +nzgw: mrts + qbnr +jzhg: jfmq * zjnj +hnws: nmbc + fzjn +jsdm: 2 +snpw: 2 +rfdv: zchv + lmqb +gljs: 4 +blrn: djqr + rdrs +zwdj: 4 +vmrb: gnbw + vzpf +cbrl: 2 +lmlp: djdl + nphl +znmd: 3 +vtrh: 10 +hbcr: 4 +cgvb: pczh / wlnp +zfdn: bldp + hgdr +qnhj: hbcr * lhjq +bqbc: zbtq * rdnq +ttfb: 3 +zlnc: jvmz + vccq +qcnz: 5 +nqcp: fbpl * wbjq +jzct: sdgc * hfbq +ftrh: fwls + hvng +cctn: dqtl * zlqm +ghmt: 4 +tqbv: bsmn + cfqr +frnh: 5 +ddcf: 4 +hggc: ltjl + hqsh +wsjn: rhps * sgsp +jnpg: rsdf / hgfq +jjvw: 7 +zwms: ldlg + pwvg +tcnr: 2 +bpcc: rhgp * vpcm +hzpl: bzww - wvgd +jgcg: jtmz * mwfh +gfhn: pwwg + nlzc +zcgd: 2 +qzwc: 4 +bfrg: rmtn * flnv +zmls: ffpt - ggjl +ldlg: 6 +mpzw: 6 +dghv: 8 +wlss: 2 +jfdn: bgfq * ptmg +ctdw: 3 +tfjm: 14 +jzds: 3 +dvhc: 4 +jszb: tscg * hcfj +nsbl: lcvc + mrpq +ncdj: pgzs * dhgn +dmfp: mcds * pbvh +bnrh: rbmm * whmg +vgtg: 5 +vccq: pncm * gjqq +nhhv: 11 +cfbt: bzpt * zchq +pjdf: 5 +vmns: 12 +lzvf: jszb * bbcc +tstl: 3 +nmgr: cjdb * zssm +fzmm: 4 +qhdd: cfbt * hswh +pdgz: 4 +sdtr: rjrn + fvbt +hgmm: 2 +htvs: 15 +hqph: 5 +zptz: 3 +vbqb: 6 +tqbm: pmcd * nqsl +hzmp: bsvc + gqwv +mfdc: hbvf * dpnr +gwmb: jvns / lzsp +cdfg: 3 +smwh: 1 +jngz: 5 +mnbl: zmbv * dvvn +zcgl: 2 +wpzm: 6 +dbww: 4 +djqr: 3 +nbsl: qllr + bgsh +ttpt: 5 +jwtb: 5 +gnhd: 3 +scqj: ffdl * mdnz +fhlv: hggq * htvs +njww: 2 +ntld: 2 +nbhq: zpvp / lqgf +rbsd: 8 +rplb: njmf * srnq +sgsp: lwtd * hlcd +tscg: 4 +vhhr: 3 +jwrp: bhnt * vfzd +mjtf: 4 +mbfr: 3 +sdcw: 2 +ddrh: 7 +lpfz: bhzj - zvbf +ptqt: 3 +wtdl: 2 +nnld: fvhd / ztcm +dngc: ggch + ngbq +lslc: 4 +msrg: 3 +prrc: bpsv * gvzf +jrjn: lbtl + sbnc +rwcf: wgmf * ctbv +gclq: 10 +lzgq: 11 +rhps: njgp * msmv +pzww: 8 +chpt: fsqh * lggh +zvjw: rwcv * pdps +trjv: 3 +rrtq: 4 +fgth: 3 +hvdb: ghwr + jsdm +hbdc: vvzd / vcnq +hgfq: 2 +lgnp: 5 +rnzj: vfng * bldr +pdfv: 2 +fhwl: 10 +bthb: nctm + fhlf +vngb: tgwr * dpbh +jfmq: 3 +hdcf: 2 +zdmv: 2 +vsfb: 2 +wtls: czcb / qgtp +gnfs: fmmf + hgtt +gsrm: 3 +mrcn: 1 +swdz: 5 +ghsj: 1 +qvrw: bpzs * scrq +rhwr: wcpr + hbzz +zrnq: qrmg - ncmn +ltdr: dggm * pgrh +gsgd: lmjv - wjpz +brwz: 2 +wtbn: mjrl * jzlt +sgvh: 3 +jvlw: hbrw + szqm +ljrn: 2 +tvrb: 3 +csvn: jhlz * nwpl +czzg: 2 +rfbl: 2 +zblj: 3 +wttr: nmjn * jsrw +zgzg: vvwt * hwcl +dtrs: 9 +vghf: nvrh - flqb +nprh: 2 +wsgm: 3 +crqr: 3 +srpj: ftsc + dbdl +ztgn: 5 +zrfc: zlht * chdn +bfzr: 18 +chfw: 3 +hfvz: 4 +bbcc: 12 +qpbc: qjsg / fhtm +fdqq: wzrc + crdv +shcc: 2 +dfsp: 2 +wqbz: 7 +lhfm: 2 +zcjz: vngb + hvmj +swnr: 3 +zmmg: jzct / swtw +pqfm: 13 +svdq: jdgh * tdtb +wlnp: 6 +ztsb: 5 +wjql: 2 +qzcj: 2 +jnmf: 7 +pwhl: hjbq * qqbd +mbws: qcqj * sgwj +vjhw: 2 +rnqv: 10 +hzsd: 3 +gzmn: gplv - tsvw +mwnb: vhbw * tvjr +bsmt: 2 +hbpt: 2 +cdhb: 5 +gchv: 4 +pnqt: ntgj + mpvz +pfcb: jmtc + rhwr +btgm: wzzp + hhwj +qsch: nsdp * tnnr +lvzs: 4 +wclv: dtqc + dlpj +djcs: wvmj * vpcz +zncn: bzwc * lqqr +lhlm: 2 +fdbp: nrlq + bsmp +cpbd: sdtq + lhhc +jppg: zjvm + wnzg +wcpr: 18 +pfvf: 3 +qdmg: pgwq * nfmh +ltmg: ncss * lqld +nhvd: 2 +hfjl: 9 +sbhh: cgvb + qcpp +pjgg: gtzt + tczz +nfcc: 2 +nbbp: wqqr + vcbr +wqqr: 8 +ngrj: qcnz * lpfz +lrnq: 3 +znnv: mbpc / lcfl +wmpj: 3 +chdd: tlgd * hbcz +zbrb: sdcw * msjn +wgfv: cgcr + mflf +nfgh: 2 +gvjv: qzpg * sjhz +bgsh: vtvm + cnpl +wgdz: mstz * mfgh +qzgj: mwqj * crjf +rvhr: 4 +tdjp: djfn * ctwq +wfjv: 5 +lqbw: 9 +fmmf: 13 +rmtn: 3 +nchv: 2 +qjsg: tvcq + jstq +bpnn: qjss + ncvv +qhgr: rfpz + ngqm +nwrg: 5 +hmch: 2 +cfrd: 2 +cnhz: 13 +pbzf: zjvq * prgs +hblr: lqdl * dsss +bbpd: 11 +njrb: 16 +nmch: 3 +grcs: 3 +fwrq: 2 +fcpl: 2 +hztd: 3 +cgcr: znnv * flmh +dtrj: sjbp * lcdv +ffsn: 7 +pctw: 10 +rsml: 5 +hwpf: vjgh + fhzn +dgsp: 2 +rrtg: 10 +pqwz: 2 +wdqs: 4 +mvgl: rwnb * pdfg +qrjh: 2 +gvqz: 3 +mnbs: 7 +pnjb: fdfm + nphn +dgvp: jgcg / czmj +fbhl: 20 +nzmr: jsfv * fclr +lzjv: pzpn + vbqb +gggn: 15 +jzlt: zqmc + gbtn +szrz: 9 +vqsn: gvjv + tnzw +ftnb: 6 +pgwq: 15 +nzjd: dnwb - lrhn +vlhz: 3 +fscs: zljr + wbfs +bgdj: rqrd + tgvv +jchq: hbpt * pmtq +ntzf: cjfg * vdch +tzvl: 2 +vgqm: ntsw + lwvz +mmwf: 2 +qggt: 4 +jtmz: 4 +bsmn: rqwd * dwmn +qwrp: nfgh * qjqt +zfsh: 1 +mrmv: 5 +gfrl: 5 +rzmp: tlnn * mtzf +mjfg: 2 +lwtd: 8 +bfqp: zbwg + wmvw +mcnf: 4 +tvvn: lhdf + trrs +bwlf: 3 +glqd: mdth - jnpg +vdgw: 5 +hpmf: lwgg * vfzf +wllz: pdfv * qgzj +wcsd: trzs + plvb +pmcd: 3 +lhdf: 3 +vbzn: rjdp * plqs +tzpf: pwsz * fhcr +llst: bnfz * rbtw +wdnj: 4 +wcsf: 5 +hqcs: 3 +hgcd: 2 +wjpz: 15 +jbbb: 15 +vfct: sgcm * vrbp +sgbq: dgdc + gbdl +pwsz: wsgm * cjhp +cvfc: trjv * jdvg +sscc: vjhw * jnbd +dgtn: 3 +lqld: 3 +vtvm: 12 +whlm: jbpn * zmdd +njgp: zwvq + hmch +lwrb: btsq * stmj +rqnr: 16 +rbjq: sjzs / pfdq +hrrf: 1 +vwzp: 3 +ggjl: 4 +dcff: 4 +zpvp: vczp * vfnb +dpbh: qcjv * pfgh +zvfs: 2 +qjss: 13 +qgtp: jbdr * nmch +zphc: sjrm * dgsp +mwjv: 3 +fftv: 3 +lwdq: rlzb + rgvt +wvgd: jfbb * spbt +cszr: 11 +wjst: 2 +jsrh: bqpt + bpcc +ncsb: snpw * ddtq +ldbw: wdvz + bgrw +pnwl: hpbf + qdqg +bgds: 3 +qdlp: dnpb / lhht +bqws: swdz + brtt +zbfn: dmhs * tjdc +hdng: hztd * jvlw +mfdb: rrtg * nbvp +mjvw: tcvt * sfmz +rfgp: hmqd + gcql +rqwd: 4 +qwhb: tzvl * gnwz +cbnf: drbn * jlzq +rzzt: zpbz / bmzl +gbgn: jptg * whnz +fmvr: 4 +ldvf: 8 +fhnq: 10 +wrtv: 2 +rmcs: 2 +jbzq: 3 +fbjr: vwzp * ctdw +jwgq: jchq * mvff +hgtt: 1 +lcvc: mnbl * tsnd +nfdg: rfmg * tcvr +gbtn: 5 +crnw: 3 +bdrq: jlcj + jsrh +rzbf: fmdn - wwjd +ncvv: 1 +qdjp: zlcl + bpdt +hwps: 3 +scfr: lslc * qjjq +rqcr: nbbp * bnrh +fpmv: 3 +sfmb: 9 +mwfh: pqtc + pwjm +mbfl: cbps + pzzz +mtpc: 8 +hrrc: 4 +fhgp: 2 +bhnt: gcnf + nstb +jnnz: 2 +cmmm: 3 +vhnq: jppg * glgr +njmf: 11 +djdl: jqrr + rwcf +gwqc: cbnf + sqhc +vvgg: bfbf * gttc +mzrn: rqlw / ddrh +hdwd: prrc * psdw +hgmr: zrnq * fhgp +sjsb: wqpd * blhf +hmwb: 2 +mrfp: btsz + jwgq +scjg: 13 +ttmb: wbwf * gcsd +nvzj: jwdc * lzgq diff --git a/Media/2022/21.png b/Media/2022/21.png new file mode 100644 index 0000000000000000000000000000000000000000..f8e6df0a6b1920e84505f9cbbe67683e468e5699 GIT binary patch literal 7844 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

- 2022 - 40 ⭐ + 2022 - 42 ⭐

@@ -66,6 +66,9 @@ + + +

2021 - 50 ⭐

From 97a7cdb4363db42757750422ebdf45e2e2139424 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Fri, 23 Dec 2022 08:27:59 +0200 Subject: [PATCH 047/225] Add day 23 --- 2022/23/23.kt | 51 ++++++++++++++++++++++++++++++ 2022/23/example.ans | 2 ++ 2022/23/example.in | 7 +++++ 2022/23/input.ans | 2 ++ 2022/23/input.in | 74 ++++++++++++++++++++++++++++++++++++++++++++ Media/2022/22.png | Bin 0 -> 8445 bytes Media/2022/23.png | Bin 0 -> 8018 bytes README.md | 8 ++++- 8 files changed, 143 insertions(+), 1 deletion(-) create mode 100644 2022/23/23.kt create mode 100644 2022/23/example.ans create mode 100644 2022/23/example.in create mode 100644 2022/23/input.ans create mode 100644 2022/23/input.in create mode 100644 Media/2022/22.png create mode 100644 Media/2022/23.png diff --git a/2022/23/23.kt b/2022/23/23.kt new file mode 100644 index 0000000..e1071b6 --- /dev/null +++ b/2022/23/23.kt @@ -0,0 +1,51 @@ +typealias Point = Pair + +val DIRS8 = listOf(-1 to -1, -1 to 0, -1 to 1, 0 to 1, 1 to 1, 1 to 0, 1 to -1, 0 to -1) +val DIRS = mutableListOf( + listOf(DIRS8[0], DIRS8[1], DIRS8[2]), // N + listOf(DIRS8[4], DIRS8[5], DIRS8[6]), // S + listOf(DIRS8[6], DIRS8[7], DIRS8[0]), // E + listOf(DIRS8[2], DIRS8[3], DIRS8[4]), // W +) + +fun main() { + val input = generateSequence(::readlnOrNull) + .flatMapIndexed { y, row -> row.mapIndexed { x, v -> (y to x) to v } } + .filter { it.second == '#' } + .map { it.first } + .toMutableSet() + var round = 0 + while (true) { + val proposals: MutableMap> = mutableMapOf() + for ((y, x) in input) { + val adj = DIRS.map { it.map { (ya, xa) -> y+ya to x+xa } } + if (adj.flatten().count { input.contains(it) } > 0) + for (dirs in adj) { + if (dirs.count { input.contains(it) } > 0) + continue + if (dirs[1] !in proposals) + proposals[dirs[1]] = mutableListOf() + proposals[dirs[1]]!!.add(y to x) + break + } + } + for ((point, candidates) in proposals) { + if (candidates.size == 1) { + input.remove(candidates[0]) + input.add(point) + } + } + DIRS.add(DIRS.removeAt(0)) + round++ + if (round == 10) { + val minY = input.minOf { it.first } + val minX = input.minOf { it.second } + val maxY = input.maxOf { it.first } + val maxX = input.maxOf { it.second } + println((maxY - minY + 1) * (maxX - minX + 1) - input.size) + } + if (proposals.isEmpty()) + break + } + println(round) +} diff --git a/2022/23/example.ans b/2022/23/example.ans new file mode 100644 index 0000000..3ef9547 --- /dev/null +++ b/2022/23/example.ans @@ -0,0 +1,2 @@ +110 +20 diff --git a/2022/23/example.in b/2022/23/example.in new file mode 100644 index 0000000..14005cf --- /dev/null +++ b/2022/23/example.in @@ -0,0 +1,7 @@ +....#.. +..###.# +#...#.# +.#...## +#.###.. +##.#.## +.#..#.. diff --git a/2022/23/input.ans b/2022/23/input.ans new file mode 100644 index 0000000..75cda28 --- /dev/null +++ b/2022/23/input.ans @@ -0,0 +1,2 @@ +4091 +1036 diff --git a/2022/23/input.in b/2022/23/input.in new file mode 100644 index 0000000..4bc1004 --- /dev/null +++ b/2022/23/input.in @@ -0,0 +1,74 @@ +#.#..#...#..##.#..##.##.###.#..#...#.############.###.####.....##.#....... +...#..#..##......#.......###.#..##.#.#.#...#..#.#.#.#...###.#..#...#.....# +##..###..##.####....##.#...#....##.....#.##..#####..##..###.#.#.#.##...... +.#.#.##.#..##....#..#...#.#.##.#...##.##.##....#...####..#.###..#.#..##.#. +##..##.##..#.#####..#..#####..##.###.##.#..#.#....#.#.##.###..#####.#...## +.#..#.#.##.....##.#.####...##.#.......##.#.#.######.#....#####.#####..#..# +##....#...##.#.....##..#.#...######.#..#.##.###..###.#.##.##.#..#....#..## +.#.###..###.##.#...#.#.##.#.#...#####.##.#.##.######..######.##...###.##.. +#.#..##....#....#..####.#..###.#...#.#.########.#....#..#...#.#..#..####.. +....#.#.##..#.#######...##...##.#..#.#.###.###...##...##.#...##...#.#####. +....#.####..#......#..#....#..###...#.#....#.##...#.#....#####..#..#.#...# +#......#..#######..#...####...#.#.##.#..###.....#.#.####.#.#.#.##.##.##.## +.###.....##..###..####.##..###....#..#...###..##..##..#.####.##.#......### +###...#.........#.#.....####....##.###.####.###.#....##.#..#.#..##...#..## +..#.#.#####.#..#.#.######.#####....#.#...#..#.##..#..#.#..##..#..##.###... +##.#####.##.#...#.#.#...#...#..........#.#.#..####.#...##.######..###...## +..#.#.####..##..#.#..#####.#.##..#..#.##....###.##.##..#.#...##.##..##.##. +###..#.######.##...##.##.####....#.##.#.#.#...#..#....##..####..##.#.#.##. +.##.##.###.....####..###....#.#..##..#.#..#..##..#.##.##...##..#.#.#..###. +....#.####...######.....########.#.#....##.#..###..#.###..###.#..#.#....## +.#..###.#.#.#.#.#..#...####.#.#.##....#..#...#....##.....####...####.#.### +#.##...###.#####.##.###.#....##..#.....##..#...#..##.#...#..##...##.#.##.# +...#..####..##....###......######.#.#.#..#######...##.#..####.....#.#.#### +...#.####....###.##.#.#.#..##..#...#.##.#...#.###..#..#....###.##.....#..# +#..#.#.##...#......##.##..#..####..##..###.###.#.###.##....#....###.##..#. +.#..#..####.#.#.###.###.####.#....#.####....#.##.##....#......#.####.##..# +...####.#...#.#....#.#......#.#.#..##.##.##....##...##......##.####.##.... +.....#..#.##.##..#..##...###..#..#.#...####.#.##...##.#####.#..#..#..##### +..##.#...###....#...##.#.#.......#....####..##........#...#..###..#..###.. +####...###...#....####.##...##.####..##.##...#####.####..###..##.##.#.###. +...........###....#....#...#..##..###...#..#.#..#.#.#....####.#.#..####... +.#.##.###.#.##..##..######.####....#.####...#..#...#..##..######.#.##.#### +.###..#.#..##..##...#...#...####.....##..#..##.#..##....#...#..##.#..#.#.. +.#.###.#...##..#..#..###...#.##.#.#.....#.#.#...#...##.#.##.#...##....#..# +.##.##..#.#.#..#.#######.###..###.#.#####..#.###.####..###...#.#.##....#.. +.....###.####.#####.###....##.##.##.##...###.#.#.#...####...###....#...### +##.....#..#....#.###..##...##.#.#..###.#.#..###.#####.##.##.##.#...###.##. +.#..#.#####....#.#.#.#..#.####...#...#..###..##.######..#.#..####..##.##.. +.#....#..#....#.##.#.#.##..#.#..###..##..##..###..#.#######..####..###.#.. +#.#.##.##.#.##.##..#...#..###..###.#.....#.###.#..####.#..#####...###.#.#. +...#.#.##..#.#...#.#..#..####.#...###....#.....#.....#.##.####.#...####.## +##.###.##..#..##.###.#..#..#.###.###.##.##...#.#..####....##.#####...#.#.# +###.....#.#.##.#...#.#...##.##.#..####.##...#.#.#####....#..#####...#.#.#. +##.######.#.#....#....#.#####.....####....###.#.#...##.#..#.##.#.##..##.#. +##...##.##.#..#.#......#.####..###..###..#....###..#..#########..#.###.#.. +#.#..###..#...#.#.#####.#.##..#..#.#.#.#..#.##.####.####..#.#..##.##.####. +###########.#..###..#.##.###.#.#.#.#..##.##...#...###..##..###.##...##.#.# +..#.##..###....#.#..#.......#.##..##.######..#####.##.##........##....#... +.#..#.##.#..#......##.#..##.#.##.###..###.#....##..###.#.#.#...#.##.#...## +#####..##..##.#..###...##.#...#.##.#..#....##..#..#...#.#...##.###...#.#.# +#.#.#.....###.#.#.##.......#....#.####.########..#.##.##...#.#.#....##.... +.###.#...###..#####..##..#.#.##.####.###.#....##.#..##..#...#.....#####.#. +#####.#..#.###...##.#..##.##...####...####..###...###......#..#.#.......## +###....#.##.#.#.#.####.##.###...##.#.#...#..#.....#.##########...########. +###...###.#..#....#.#.#...#...#...#.#####...##..#.....##..##...#.#.#.##.#. +##.##.#..###....#..#.#.#####...##....#....#...###....#..#..#.#.#...##..### +...#..##..###..#.####..#.#.#....##.##.#.#...#....###...#.##......##.#.###. +.#.######.#######..#..#.#..##..#..#.##.#...####..##########..#.##..#.#.### +.#.#...#..##.#...#..##.#..##......#.###.###.#.##.###...#....#...########.# +.##.#....#..#.#.##..#.#####...##.#.##.##..#.#.##.##.#.#...#.#...#....##.## +..##.###.###...#...##...#.##..###.....##.#.####.###.......#....##.##.##... +.####.#.###.##.#...###.#######..#.....###..#..##.#..##......#..##.##..###. +##..#.#####.##...##..###.######..#.#.##...##.#.#.##.#..#....###.##..#..### +.###....###...#...#...#.#..###.#.##..###.#...##..#..#...##...##....#.####. +.##.#.#.##..#.#.#..#..####...###.##..##.##..###..#####..###...#.#.######## +.##..##..##....#....#.#.#.##.#....#....#..###.####.##..##...#.##..##.....# +..#.###..#.##..#..#.##.######.#.###.#..##.....#####.#########..##...#..#.# +#.####...#..#..#.###..##.#.#...#....##.#####.#..#...##..##.#..#..###....#. +##...#....#######.###.###..#.##....####.#.#...#.#.#...####..#.#..#.###.#.. +##.#.####..###.###.###...#..#.#..#..#....##..#..###.#...#.#.#..#.##.##.##. +##....#..#..#.#.##.##.#...#...#####....##..#..####.#.#..#...###.###..###.. +#.#.#.##......#..#..##...#.....##.##..####..###....#.#..#...####..#.##.... +.#.###.#..#.#..#..###.....##.#.#.##....##...##.#.#.##.#.#..##..##..#...... +###...##.###..#.##.#.#..#.##..##.#...##..###.#........#.#.#...#.#.#.#..... diff --git a/Media/2022/22.png b/Media/2022/22.png new file mode 100644 index 0000000000000000000000000000000000000000..3b5a3861b705fad02c5c06b849b8353afda18c56 GIT binary patch literal 8445 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 X5e*)Av#!Xo27sK@XUR&5ufhKh3*e%5 literal 0 HcmV?d00001 diff --git a/Media/2022/23.png b/Media/2022/23.png new file mode 100644 index 0000000000000000000000000000000000000000..f84dab802f7ef3417122314316d010e849890291 GIT binary patch literal 8018 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 1132ddb..859f53f 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- 2022 - 42 ⭐ + 2022 - 46 ⭐

@@ -69,6 +69,12 @@ + + + + + +

2021 - 50 ⭐

From 65de645fb6891946aa864a877c0b7032644fe1cd Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Fri, 23 Dec 2022 20:08:22 +0200 Subject: [PATCH 048/225] Add day 22 --- 2022/22/22.kt | 178 ++++++++++++++++++++++++++++++++++++++++ 2022/22/input.ans | 2 + 2022/22/input.in | 202 ++++++++++++++++++++++++++++++++++++++++++++++ Media/2022/22.png | Bin 8445 -> 7504 bytes 4 files changed, 382 insertions(+) create mode 100644 2022/22/22.kt create mode 100644 2022/22/input.ans create mode 100644 2022/22/input.in diff --git a/2022/22/22.kt b/2022/22/22.kt new file mode 100644 index 0000000..4c8b78b --- /dev/null +++ b/2022/22/22.kt @@ -0,0 +1,178 @@ +// This solution was not golfed whatsoever, it still prints both parts, +// but is certainly not general to solve any input. However, some of the complexity arises +// a basic because of an ASCII visualization which has been added. +// +// Set this to true in order to paint a colorful ASCII image (needs ANSI support) +val visualize = false + +// This solution only works for inputs of shape: +// +// ## # ## # +// # or ## or # or ## +// ## # ## # +// # ## # ## +// +// Important is: +// * it has to be higher than its width +// * the middle column must be filled +// * the remaining 2 blocks have to be on opposite sites, one offset to the other by y=2 blocks + +class Painter(field: List) { + val visField = field.map { it.toMutableList() } + + var time = 0 + val coords: MutableList> = mutableListOf() + val atTime: MutableMap, Int> = mutableMapOf() + val MAX_TRAIL_LENGTH = 500 + + fun add(y: Int, x: Int, c: Char) { + visField[y][x] = c + atTime[y to x] = time + coords.add(y to x) + if (coords.size > MAX_TRAIL_LENGTH) + coords.removeAt(0) + } + + fun paint(withBackground: Boolean = false) { + if (!visualize) + return + print("") + var c = + if (withBackground) + visField[0].indices.flatMap { visField.indices.map { y -> y to it } } + else + coords + for ((y, x) in c) { + if (!withBackground && (y to x) !in atTime) + continue + fun t(mult: Double = 1.0, atLeast: Int = 50, max: Int = 255): Int = + maxOf(atLeast, (max - (time - atTime[y to x]!!) * mult).toInt()) + when (visField[y][x]) { + '#' -> "" + '.' -> "" + ' ' -> "" + else -> "[38;2;${t(1.0)};${t(0.25)};${t(0.01)}m" + }.run(::print) + print("[${x};${y}H▓") + } + println() + time++ + } +} + +val dirs = listOf(0 to 1, 1 to 0, 0 to -1, -1 to 0) + + +fun main() { + val (field, seq) = generateSequence(::readlnOrNull).joinToString("\n") + .split("\n\n").map { it.split("\n") } + val painter = Painter(field) + val instructions = Regex("(\\d+|[RL])").findAll(seq[0]).toList() + var currDir = 0 + var (cy, cx) = 0 to field[0].indexOfFirst { it == '.' } + + painter.paint(true) + for (instruction in instructions.map { it.value }) { + if (instruction in "RL") { + currDir = (currDir + if (instruction == "R") 1 else -1).mod(4) + continue + } + var (ny, nx) = cy to cx + for (i in 1..instruction.toInt()) { + painter.paint() + var ny3 = ny + dirs[currDir].first + var nx3 = nx + dirs[currDir].second + var dir3 = currDir + + val yIsShorter = field.size < field[0].length + val alongShortAxis = (dirs[currDir].first != 0 && yIsShorter) || (dirs[currDir].second != 0 && !yIsShorter) + if (ny3 !in field.indices || nx3 !in field[0].indices) { + if (!yIsShorter && alongShortAxis) { + dir3 = (dir3 + 2).mod(4) + ny3 = (50*2 + ny3 - ny3 % 50 + (49 - ny3 % 50)).mod(field.size) + nx3 = nx3 + dirs[dir3].second + assert(ny3 in field.indices && nx3 in field[0].indices) { "$ny3 $nx3 out of bounds" } + } + } + ny3 = ny3.mod(field.size) + nx3 = nx3.mod(field[0].length) + ny = (ny + dirs[currDir].first).mod(field.size) + nx = (nx + dirs[currDir].second).mod(field[cy].length) + var ny2 = ny + var nx2 = nx + if (field[ny][nx] == ' ' && field[ny2][nx2] == ' ') { + var nyxp: MutableList> = mutableListOf() + var nyx2p: MutableList> = mutableListOf() + var nyx3p: MutableList> = mutableListOf() + painter.add(ny3, nx3, '?') + while (field[ny][nx] == ' ' && field[ny2][nx2] == ' ') { + // If there is an adjacent block go diagonally + if (!(alongShortAxis && (cy in 0..49 || cy in 100..149))) { + ny = (ny + dirs[(currDir+1).mod(4)].first).mod(field.size) + nx = (nx + dirs[(currDir+1).mod(4)].second).mod(field[cy].length) + ny2 = (ny2 + dirs[(currDir-1).mod(4)].first).mod(field.size) + nx2 = (nx2 + dirs[(currDir-1).mod(4)].second).mod(field[cy].length) + } + + if (field[ny][nx] != ' ' || field[ny2][nx2] != ' ' || field[ny3][nx3] != ' ') + break + if (alongShortAxis && (cy in 0..49 || cy in 100..149)) { + ny3 = ny3 + dirs[dir3].first + nx3 = nx3 + dirs[dir3].second + } + else { + ny = (ny + dirs[currDir].first).mod(field.size) + nx = (nx + dirs[currDir].second).mod(field[cy].length) + ny2 = (ny2 + dirs[currDir].first).mod(field.size) + nx2 = (nx2 + dirs[currDir].second).mod(field[cy].length) + } + + if (ny3 !in field.indices || nx3 !in field[0].indices) { + if (!yIsShorter && alongShortAxis) { + dir3 = (dir3 + 2).mod(4) + ny3 = (100 + ny3 - ny3 % 50 + (49 - ny3 % 50)).mod(field.size) + nx3 = nx3 + dirs[dir3].second + assert(ny3 in field.indices && nx3 in field[0].indices) { "$ny3 $nx3 out of bounds" } + } + } + ny3 = ny3.mod(field.size) + nx3 = nx3.mod(field[0].length) + nyxp.add(ny to nx) + nyx2p.add(ny2 to nx2) + nyx3p.add(ny3 to nx3) + } + if (field[ny][nx] != ' ') { + if (field[ny][nx] != '#') + currDir = (currDir+1).mod(4) + } + else if (field[ny2][nx2] != ' ') { + ny = ny2 + nx = nx2 + nyxp = nyx2p + if (field[ny][nx] != '#') + currDir = (currDir-1).mod(4) + } + else if (field[ny3][nx3] != ' ') { + ny = ny3 + nx = nx3 + nyxp = nyx3p + if (field[ny][nx] != '#') + currDir = (currDir+2).mod(4) + } + for ((ny, nx) in nyxp) { + painter.add(ny, nx, if (currDir % 2 == 0) '\\' else '/') + painter.paint() + } + } + if (field[ny][nx] == '.') { + cy = ny + cx = nx + painter.add(cy, cx, ">v<^"[currDir]) + } + else if (field[ny][nx] == '#') + break + } + } + painter.paint() + println(1000 * (cy+1) + 4 * (cx+1) + currDir) +} diff --git a/2022/22/input.ans b/2022/22/input.ans new file mode 100644 index 0000000..5556f25 --- /dev/null +++ b/2022/22/input.ans @@ -0,0 +1,2 @@ +88226 +57305 diff --git a/2022/22/input.in b/2022/22/input.in new file mode 100644 index 0000000..6292b50 --- /dev/null +++ b/2022/22/input.in @@ -0,0 +1,202 @@ + ..#...........##..#..............#.....................................#..#....#..#..#.............. + ...............#........#............#..........................................#..............#.... + ...........#..................................#.......#..#..#.................#...................#. + ..........#.....#.................#.......#....#..#..........#................................#..... + ...#............#...............................................................#...#.....#......... + ..#............#..#........#.................#..#....#.......#....................#............#.... + ..#..........#......#...................#.........#.................................#.....#......... + ......................#..#.....#....#........##....#...............#...............#......#..#...... + ..........#...............................##...................................#...#................ + .#................#...................#......#................#...........#.........#............#.# + .#....................#....#........##.#.......##....#.......#.......................#............#. + .......................#...#....................#...............#.....#....................#..#..... + ..........##.......#...#......................#.....#........#..............#..##................... + ........#.#.............................#.........#................................#....#.........#. + ..........................................#.....#................#.............#...#................ + ...........#...............................................#..........#...#.....#....#.............# + ..#....................##.........#.........#.............#...#.....#............................... + ..#..#..#.............#....##....#...#...##....#.#............#....................#........#....... + #........#......#...#......#............................#.............#...................#...#..... + ....#............#.............#..........................................#.........#..........#.... + ...........#......#..#..........##..#.....#.....#.........................#.......###...........#... + .....#...#............#.......#.....................................................#.....#....#.... + .......##..............#....#....#......#.....................#........#................#......#.... + #..........................#...#....#.....#..#.....................#................................ + .#.......................#..#....#.##......#..#......#....#......#................#.....#........... + ...........#.#......#.......#.......#............#...............#.....................#....#....... + #...#......#..##..#......#...#..#........#........................#.........................#...#.## + ........#...#.#..#..##....#..#.#............................................#....#...#.#......##.... + .................#.....#....#......#..........#......#...............#....#.#........#.............. + ............#.#.........##.............................#..#.....#.#...#..#..#.#....#..#.#........... + ...#.....................#.........#.............#....##.......#......#....#.......................# + .........#...........#.............##...........#............#.##..............##................... + ...#.........#..........#.#.............#.......#...............#................#.........#........ + ....#................#.#............#.....#..##..............#..........#............#.....#..#..... + .....#..........#.........#..................#...........#.........................#..............#. + ....#.........................#.......#....................#..#..............##....#.........#...... + ..........##...................#...#........#..............#.........#.#.......#...#...........#.... + ..#.......#................................#..............................#.......#.....#.........## + ..#...#.....#..#.............................#........#....#...#.##.........#...........#......#.... + ..........#.........................#................##.........#........#.......................... + #........................#....#..#...................#......................##...#.......#.......#.. + ......#....................##.....#........#.......#......##................................#....... + .#............##..##..#.#.......#.........................................#..................#...#.# + ............#.............#.........................................#..........#.......#.....#...... + .......#..........#...................#...............................#........#.#...#.............. + ..#.........................................#.............................#.................#.#..... + ..#..............................#........#...........#........#.............................##..... + .....#.##........#......#..........................#.....#.......#.....#..#......................... + .......##...#...........................................#.........#.....#........................#.. + .#........#..........#...#...........#..#...............#..#....#...........#................#...... + ............#............#.................##..... + ..#......#.....................#.................. + .....#....................#.#...#............#.#.. + ..#.......#.#....#.#......#......#..............## + ................#...........#...#...............#. + ................................#................. + ....#..........#..........#.....#.....#........... + ....#...#................#.......#.#.........##... + ..#.......#................#...................... + ............#...#.......#..#.#.................... + .......#....#........#......#.................#... + ..#......#...#.#...#......#..#.................... + ....#.#..........................#....##.......#.. + .................#.........#...............#..#... + ...............#...#....#......#....#....##....... + .#.........................##.....##...........#.. + ...#...#.....#.....#.#.....#.#........#........... + ......#......#...............#.....##....#........ + ..........................#.......#.#............# + .#..........................#........#...#.....#.. + .........#..........#........#...............#.... + ...................#..........................#... + ...................#.....................##....... + ...............##..#.......#.#.................... + ...#............#.##..#....#........#..#.......... + .......#.......#.................................. + #...........#...#......#.......................... + ..#......#.##.#.......#.#............#....#....... + ....#........#..........................#.#.#..... + .......#.....##............#.#..................#. + #......#...#.......#.##...#.................#..... + ..#...#..#.#...#......#...#.#..................... + .....#..........................#.#............... + ....#..............................#.#....#.#..... + ......#.........#.......#........#.........#.....# + .#.................#.....##...#...............#... + .................................................. + ....#...#......#.............#........#..#........ + #....#...#...#.#..#............................... + ..#...........#...................#.....#........# + .........#........................#............... + .................#...............#................ + .............#.......#.......#.................... + ......................#......#..........##........ + .......#.##.....................#..........#...... + ..#..#.....#....#......#....................#..... + ...#.........#....#....................#.......... + ...##..........................#...#.......##...#. + ....##......#...........#..#..#................##. + ...#...........#...............................##. +......#.........#.....#...#...#.#.#...#.........................#.#...........#.......#.#.#......... +....##..........#......#......#..#..........###.........#......................#...........#.....#.. +..#.................#.................##.....#.........#....................#.........#...#.....#... +.......#....................#....#.......................................#.#........................ +....................#.............#...........................#...#...#.....#...#.......##......#.## +.........#..............#..........................#....#....................#....#.......#......#.. +......................#............#.......#........................#.................#.#........... +#.#......................#.............#....#..#.......#........#................................... +......#.........#.......#..#............#...................#........#........#..........#........#. +...#.........#..#..............##.....##..#....#..###...#.#.....#........#.....#..#...............#. +............................................................#.................#.#................... +...............#..##........#..............#.#....#.....#....#..##...........##.#.................#. +#....................#........#...#..............................#..............#......#.#.#...#.... +........................#..................#................##...................................#.. +...........#....#...............#........#.....#...........#........................#.....#........# +#..............#....#.#....#.........#......................##.#...#.............##..#...#....#.#... +..........#.........#..#.....................................#...................................... +..............#....#................#.............................#.#....#........#................# +...............#................#.#................##.#.#...................#..##.#................. +...#.............#................#....#...............................#...........................# +#...........#....#.#.........................##..............#....#..#...................#..#....... +#......................................#............................#.................#.........#..# +......#..#.......#........#.............##...#..#.#.#...#..#......#...#...#.......#..#......#....... +...........................................#..................#...#.................#.......#....... +...#..................................#.............#...#.#....#...#..............#.....#..........# +.#.....................##......##.......................#................#..............#........... +.......#........#..#......#..............#......#..#............#..........#....#.............#..... +...............#....#.........#.......#.............###..................#........#...............#. +#......#..#............#.##.#.......#...#.......#.........#............#....#....................... +.#......#.........#......#.............................#.........#............#.......#............. +.#........#....#........##.................#...........#................#.....##.......#.......#.... +#.....................##.....#...#.....#.......#.......#..#...........#............................. +.#...##......#..#.................#.....#.#.........#..........#.#...............#.#.#........#..... +#........#.#....#..#.#................#........#......#..........#......#.....##............#....... +........#......#.#....#...........#.......#..................#.....#...........#.........#..#....... +............#.......#......#...#.#......#...#.............................#......................... +.................#...#..........#.#..#..#..................##..#..........##..#...........#......... +......#..#....#..#..........#...........#...........#......##.#....#......#..#.......#......##...... +.....#............#......................#...............#.....#..#.....#........#..........#....... +...#.......##.................#..................#....#.#...#......#..#..........................#.. +..#........#..#.##...#....#.......#....#..............................................#............. +...............................###............................#.......................#............. +..#.....#............#.......#............##......#...........#..............#.........#....#....... +...##....#...............................#..........#..#..........#......................#.......... +.................#.....#....................#...........................#..........................# +.#.....#......#...................#.......................#.##..#...............#..........#........ +.#........................#......................#..#...........#....#...#..............#.#.#.....#. +.....#.................................#......................#.......##.........#.................. +.#..................#...........#.......................#.#...............#.....#..#.......#........ +.#........#.....#..#.............#..#.......#..#......#........#.#................#........#........ + ..................#.........#.#..#.#...#.......... + ...#.........#.....##......#...#.................. + ....#............#....#.....##.....##........##..# + .......#..#...........................#..........# + .##.....#............................#.....##....# + ...#............................#.....#..#.....#.. + .#.....##....#.......#..........#..##....#........ + ...#.........#.......#....................##..#... + .........#...........##.......................##.. + ..................................#..........#.... + ........................................#...#..... + .................................#...#....##...... + .........#.........#.....#.......#...#............ + .#.#...#.#.............#...........#...#........#. + ..........#...........#.#.#.....#.....#.#....#...# + ..........#...............#...#................... + ....#..#..........#.................#......#...... + #..............#..##.............#.........#..#... + ...................#...#.#...........####......... + ................#....#.....................#...... + .....##......#..............#.....#.#............. + ..............................#....#...#..#....... + .......#...................................#...... + .#.........#..........#............#...##....#.... + .#............#................................... + .....#.......................#...............#.... + ..............................#................... + ........#......##...............#.....#......#.... + ..#........#...#...#................#....#........ + .........#.....#...##..........#.#.............### + .........#...#.#.............#...........#.......# + ............###................................... + ......#....#.......................#.........#.... + ..................#......#..#..........#.#.......# + ...#.....#..#.#.............#.#..#..#...........#. + ......#............#.........#.................... + ...............#...............#....#............# + ..#.....#............................##.#......... + ..........#.......#............................... + ...#......................#..............#...#.... + .#......##.#.........#.......#......#.......##.... + .....#....##..#.......#......##................... + ...#.......#..#........#.....................#.... + .......................#.............##..#.#...... + .............................#....#.............#. + ..............#........................##......... + .......#........#..#.#.#.....##.###............... + ...#.....#.#.............#..............###.#.#... + .........#......#..............#.#..#............# + ..#.................#............................. + +3L27L4R39L42R22L2L20R47L27R11R11R19R21R36L1L40L1R27L32L7R16L23R44R8R15L22L22R22R18L44R48R27L5R32R9L38R23R48L47R25L25R27R36R7L26L13L36R37R21R3R22L38L9L43R15L50R18L19R48R6R19L30R4R33L48L42L21R45R4R9R5R4L38R41R9R37R44R39R1L8R49L24L26R33L16L22R34R39L14L28R32L23L13R19L32R34L8L35R15R29L17L3L46L26L37L48R22L6L37R16R46R36L36R22R3R12R24L17R21R26R33R16R5R44R11R2L31R23R26R25R36R27R1R1L12R39L21R49R44L41L35R31L39L3R5R14L26R30R47R6R21L34R11L42R2L20R37L28L25R47R44L9R50R49L16L33R6R7L33L45L38R24R29R29L26L36R9R16L47R27R19L35L26L24L12L50L47L11L22R39L35L12L23L31L20R32L46L46R17L35R26R35L41L30L18R7R23L9R12R21R36R45L45R41R7R29L3R22L27L35L10L11R15L39L25L19L43L18L50R24L12R7L3R28R10L32L19R11L2R6R25R43R22R8R20L31R17R45L47L48L3R20L26L15R8L30L9L34L8R35L37R30R42L31L17L19L20L9R46R5L2L48L5L15R4R13L4L23R44R36R12L12R11L29R4L37L6R12R38R24R6R1L3R50L2L8L26R24R38R24L43L42R48L35R27R10L21L34L11R48R39L4R29R28R42L35R38L8R22R23R50L5R6L25L20L6L18R48R20L33R1R13L39L7L30L48R49R14L35R38R15R25R45L18L30L2L28R25L29L4L35L25L38L33R48R37R4R29L30L13L6R23L9L37L3R17R1R13L10R22R27R14R13L32L3R6L34R49L37L47L10L1L36L27R48R15L45R23L30L47R1L15R4R30R29R40L24L37L30L28R27R36R5R15L5L6R1R15R4R23L39R38R24L46L40R16L32R4R43L17R18R27R29R24L11R38L13L31R48L5R23R4R9R35L25R12R32L39L7L22L14L14R28L1R16L39R15R2R26L34L3R18R29L46R31R47R23L31R28R20R24L18R6R18R33R49L24R11L29L6L44L22L26L1R5L1L45R29L17L31L22R46R39R7L28R4R28L13L18L50R3L17R19R43R16R26R34L4R18R29L41L33R46R16L34L23L34R22L43R22L42R1R23R37R18R36R48L18R3R22R6R27L24L47R44R19R12L41L7R23L5R39R1R1L10R17R19L8L49R38R6R3L39R1R42L21L27L25L32R18L14L5R43L13R13R26R36R44R37L23R17R41L41L22L21L41L26L20L14R22L25R42R28R16L33R2R28R50R47L21L24L5L25R4L46L34R1L2L14R7R10L34R28L34R20R35L43R6L5R32R34R16L22L45R16R9R17R19R46L46L49L22L28L29L46R2R38R2R23R47R36L45R10L46R42R9L23L38L5L50L31L14L17R6L27R28L49R45R50L30R23R3L36L10L36L21R36L25R37R40R21R32R27L3R40R28R49L10L23R36L18R21L18L36R30L44R19R15R18L22L18L13R3R43L18L2L3L46L21L6L25L19R16R43R14L11R41R27R42L30R6L34R9L14R34L49R35R21R41R4R13L3R15L38L19R37L31L9R1R9L19L6L15L9L35R27L27L27L28R26R40L41L6L3L20R39L35R9R19R14L38L13R32L12R26L27R27R42L30R5L24R32L35L3R39R42R2L35L11R33L32R6L31L33L1L9L27L1L12L25R34R13R5L34R46R44R28R29R47R47R41R20L8R40L12R39R46R34L47L42L49L5L7L25R21R20L19L2L14L43R2L15R4R48L48R5L36R36R5L46R23L32R26L29R23L6L50L33R12R27R23L22L2R33R48L7R49L5L10R26L16R48R10R19R38L34R10R42L31R45L22L36R45L40L7L19R9R15L29L7R15L35L32R31R7L17R24L46L11R5L30R27R23R9R43L36R14R26L4L34L15R49L16R20L25L12R9L8L42L39R6R20L18R9L23R15L38R13R24R18L49L47L35L41L41L8R7R10R18L39R13R46L48L49L39L49L50L34R10R30L4L19L16R18L18L12R44L17R34R2R9L11L6L14L42R29R22L8R19R42L49R29L5R44R42R46L30R44R32L45R6R38R17R14R37L47L7R5L9R7R33R10R36L13L35R19R46L32L7L8R27R3L36R39R1L26R11L20L34R38R35L10L38L5L39R17R20L26L45R48R33R20L22L5R36L16L27L28L5L41R22L9L46L20R17R1R15R12R20L24L43L35L50R6R33R5L21R21L32R34L47R13L18L4R2L43R12L30L50R49R39R20L1L45R5L12R30R6R3R7L10R44L44R33R48R14R3R45R35R11R5R10L26R9L13R37R9R34L42L11L1R42R33L4R9L26R6L2L20R39R24R17R24L22R36R4L29R35L10R12L49R9L4R13L11R18R28L49R4L18R48R49R19L28L9L49R34L40L49R31L3R19L11L33R50L33L1R47R2L7R47L34R33L39R8R49R15R47R17R14L19L5R32R24L10L21R13L47L38R23L14R40L47L5L11L24R33R34L45L38L5R41R22L3L11R44L47R5R20L39R21L49L25R28L17R18R36L16L5L12R25L39L8R12R13R18L34R45R37R22L47L8R13R18L15L9L33R28L11L1L30R49L20L27R1R2R3L42L20L44R23L11R17L18R29R31L11L20R11L6L28L3R21L22R36L49R37L39R16R1L9L48R27R32R4L3L24R6R40L28R2R39L50R27L45L15R32R44R14R8R21R5L18L24L45R29L42L46R13L39L31R43R2L27L45L42R48L3L18R20L3R30L25R12L47L23L49R27L21L46L40R21L26L22R22L22L45L18R42L6L18R30R18L23R46R22R8L44L14R26L17R26L45R41R16L46R2R16L50R20L39L24R41R7L19L25L24R29R48R41L30L10L26R3L7R41L40R20R26R40R44R3L37R22R44R17R38L47R35L28L19L23L34L8L12R8R40R43L8R43L42R43R44L30R34L6L50R20L45R25R4R9L39L29L17R1L32L18R10L8R21R29L26L34R26R41R2R49L42R43R3R10R7L14L37L1L29L15L19L23R15R28R20R2R31R44L16R38R19R12R26R42R20R12L35R34R48R13L49L48L35R30R38R21L47L41R6R10R32R46R14L20R34L1R5R7L29L41L26L41R41L41R46R18L28R18L25L20L37R47L17L35L30L49L13L19L42R36L37L36R2R1L36L31R20L36L46L26L25R26L45R18R15L42L50R17L31R30L16R45R47L11R4R29R3R9L23L19R14L15L18L14R44L4L20L20L44R17L43L9R11R42R19L1R10R44L47L46R26R22R6L24R22R34R5R35L17L12L10R42L49L43L50R5L44L24L31R7L6R37L34R7R5R11L35R34L27R18L6R16L7L31L31L50L29R34L47R4R10L48L13L10R37L48L40L32R2R36L26L41L28R38R29L32R50R32L39R30R43L39R40R35R9R34L21L25L6L14L26L42R43R5L39L1L20L37L36R25L39L14L21L37L4L10R11L35L17L47R6L30L20L18R12L10L14R37R38L2R23L17R11L1L12R34L42L24L8R34L40R34R6R25L27R25L21L4R44L41R20R14L30R30L22L40R45L11R26R34R7R40L2R43R16R17R20R35R18L1L2R22R29R44L17L41L50L8R33R2L45R49L48R46R25L23L48L13R49L1L2R18L24R19R3L29R24L20L16L48R12R8L35L4L33R19R34R11L44R40L5L7R23R46L10L15R32R49L24L40L11R26L48L13L22R23L21R45L31R49R43L16L33L39R18R24R34L39R21L45R37R7L17R44L27L34L35L11L48L7L13L41R47L19R27L17R44R29R48L48R2R35L47R46L38L20R5L49R19L17R8L13L11R30R27R18R3L11R43L19L14R37R31R42L11R15R31L1L39R16R42L46R34L48R6R48R23R48L21L19R6R17L18R7L6L22R1L39L20R28R27L10L9L4L31R34R27L29L12R30R9L28R13R37L37R48L10L28L31R33R45R1R21L40R7R10R18L17R5R11L4L48R41L37R18L50L48R30L25R47R29R40L29R4R22R44L30R5L17L43R20R4R17R14L47L20L16L33L31R48L9L30R38L21L7R5R4L13R49L48R41L28L7R30R23L25L37R23L37R34R7L22R43L36R43R8R29R35R33L14R45R2R50L44R21R24L33L39R46L47L13L48L32L22R8L16L5L13L11R35R12R36R11L50L40L26L26L16L44L26L25R26R25L31L15R31R41R7L45L29L37R15L4L36L5L47R10L46R30L1L10R21R14R3L46R7R50L40L3L7R34L34L23L49L7R19L27L32L13R10R26L26R49R41L17L27L50R29L11L31L9R13R16L47R47L40L13R33L20R24L44R14R3R46L25R11L24L26L2R2L23R34L24R9L4R22L38R24L46L6R28R35R42L5L35R11L21R42R9L40R45R22R17R9L20R6L13L27L38L32L16R23L43R33R16R10L16L6R11L9L22R44L23L31R1L20L17L9R12L44R3R49R7L8L12R5R43R33L26L16R33L48R29R26L50R9R43R48R36L30R17R42 diff --git a/Media/2022/22.png b/Media/2022/22.png index 3b5a3861b705fad02c5c06b849b8353afda18c56..6786f933689f37b42a3c5ac3b5c8000a1c58621a 100644 GIT binary patch literal 7504 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

Xgxv`&E4BR&5PQctQ_>r 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 X5e*)Av#!Xo27sK@XUR&5ufhKh3*e%5 From daf8aae2ec42603f609b7014d27b79c5a9b5fd8c Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 24 Dec 2022 08:17:36 +0200 Subject: [PATCH 049/225] Add day 24 --- 2022/24/24.kt | 58 ++++++++++++++++++++++++++++++++++++++++++++ 2022/24/example.ans | 2 ++ 2022/24/example.in | 6 +++++ 2022/24/input.ans | 2 ++ 2022/24/input.in | 37 ++++++++++++++++++++++++++++ Media/2022/24.png | Bin 0 -> 7788 bytes README.md | 5 +++- 7 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 2022/24/24.kt create mode 100644 2022/24/example.ans create mode 100644 2022/24/example.in create mode 100644 2022/24/input.ans create mode 100644 2022/24/input.in create mode 100644 Media/2022/24.png diff --git a/2022/24/24.kt b/2022/24/24.kt new file mode 100644 index 0000000..a1739bf --- /dev/null +++ b/2022/24/24.kt @@ -0,0 +1,58 @@ +typealias Point = Pair + +val dirs = listOf(0 to 1, 1 to 0, 0 to -1, -1 to 0) +val dirsChars: Map = mapOf('>' to dirs[0], 'v' to dirs[1], '<' to dirs[2], '^' to dirs[3]) +fun lcmOf(a: Int, b: Int) = (1..100000).first { it % a == 0 && it % b == 0 } + +fun main() { + val input = generateSequence(::readlnOrNull).toList() + val (height, width) = (input.size - 2) to (input[0].length - 2) + val lcm = lcmOf(height, width) + val blizzards = List>(lcm+1) { mutableSetOf() } + for ((y, row) in input.withIndex()) { + for ((x, v) in row.withIndex()) { + if (v in dirsChars) + for (t in 0..lcm) + blizzards[t].add( + (y + dirsChars[v]!!.first * t - 1).mod(height)+1 to + (x + dirsChars[v]!!.second * t - 1).mod(width)+1 + ) + } + } + // Blizzard repeats every 700 steps + assert(blizzards[0] == blizzards[lcm]) + assert(blizzards[1] != blizzards[lcm]) + + fun isInside(p: Point): Boolean = p.first in input.indices && p.second in input[0].indices + + fun minTimeToMoveFromTo(atTime: Int, from: Point, to: Point): Int { + val queue = ArrayDeque>() + queue.add(atTime to from) + val visited: MutableSet> = mutableSetOf() + + while (queue.isNotEmpty()) { + val (t, yx) = queue.removeFirst() + val (y, x) = yx + if (y == to.first && x == to.second) + return t + val vis = t % lcm to (y to x) + if (visited.contains(vis)) + continue + visited.add(vis) + for ((ya, xa) in dirs.map { y+it.first to x+it.second }.filter(::isInside)) { + if (input[ya][xa] != '#' && !blizzards[(t+1).mod(lcm)].contains(ya to xa)) + queue.add(t+1 to (ya to xa)) + } + if (!blizzards[(t+1).mod(lcm)].contains(y to x)) + queue.add(t+1 to (y to x)) + } + return -1 + } + val start = 0 to 1 + val end = height+1 to width + val t1 = minTimeToMoveFromTo(0, start, end) + println(t1) + val t2 = minTimeToMoveFromTo(t1, end, start) + val t3 = minTimeToMoveFromTo(t2, start, end) + println(t3) +} diff --git a/2022/24/example.ans b/2022/24/example.ans new file mode 100644 index 0000000..a673c3c --- /dev/null +++ b/2022/24/example.ans @@ -0,0 +1,2 @@ +18 +54 diff --git a/2022/24/example.in b/2022/24/example.in new file mode 100644 index 0000000..685dc4f --- /dev/null +++ b/2022/24/example.in @@ -0,0 +1,6 @@ +#.###### +#>>.<^<# +#.<..<<# +#>v.><># +#<^v^^># +######.# diff --git a/2022/24/input.ans b/2022/24/input.ans new file mode 100644 index 0000000..51fd5ae --- /dev/null +++ b/2022/24/input.ans @@ -0,0 +1,2 @@ +242 +720 diff --git a/2022/24/input.in b/2022/24/input.in new file mode 100644 index 0000000..7fd3bd8 --- /dev/null +++ b/2022/24/input.in @@ -0,0 +1,37 @@ +#.#################################################################################################### +#<<<..>>><><^vv^<>.v^vvvvv^<>.v>><..v>.v^v>.><>>^><<.vv<^<>>^v<^.<>>>vvv^v<# +#>>>v>v.v^^^.><^<>>v.^>v^>v><.^>><>>^^.vvv^^^>^>^.><>v.>vv>^<><>><>v^^^<.<<# +#>>vvv<^^^^^<<<^v>^>.>vv^v<^^..v^>><<>^>v>v<^v.><^<^^v><^^vv<.v..<^<.>^>^<^^^><^>v># +#v^^^v.v<>>vv>^>v.^v..<><.<><^.^<^^<^<>v>..>>^^>>^^vv>v>># +#>^v<><>vvv>>>v^^<^vvvvv^>v<<>...>v<^>^.^^^<><^.v<^v>^vv^>^><># +#<<<<><>^<>>^>v<.^<^<.v<.><><<>^^.^>>>v^<^^.^<<<.v^>^^<^>^><^^.^v>^<# +#>^>v><<<>>.v.>v<^^v<.vvv^vv>>v^v^^><^><>>.>^>^v^v><^v.v<^<<..^^<.v.v><^<.><>^>>>v<# +#<^^v<.<.vv>>vv<.<.<>>vv>v^.v>v<.>v^>>>^.v>^<>v<<^vv>^^><^<>v.>vv^v<v^...<# +#>^v>>><>^.^>v<>^>>v><^<>^.^<.^>>^^><^^v>v><>^<>>v^v^<>^<^<^v^>><.# +#<<>^v<^^^<^<<<.vvv><^.<>v>^>v^v.v<<<>.<>vv>v>v>..^.^v<v^>vv<>v^>>^^<>^.<>^v^<>v^^><<>>><.>^v<^<>.v>^^^v..^>v^v>^^^>v<^<^<^^^>><.^>v<>>v^>.# +#<.>v<>>^^>^>>v>>^.v^><..^vv^>><><.<^<><^^v^<^^>>v<>^<^>v^<^>v<<^>.<>v^<^v><>v^^vv<><# +#><^^.^>>^^vv.vv^vv^>>v^^<<<>^<<>^v^v>.^<^.>>^v>>.<>.>v<^<^v.^^vv^^>>v.>^.<>.^<^.v># +#>v<^^^v^^<^v^>^<^^^.>^^<^.>v<<><>vv<>..^^<^>>>><<>v<v.<>>^^<^>v^^.<<>>>v^<^v>.# +#<><.^<^^^^.><<^v.^<>^<^v^><>vv>v<<<<<><<.>^vv^<>>>v<^v><<>v.# +#>>v>v<>vvv>^>v<^<>><>vv>>v..^.<>vv>^v>>^.<>^>v^.<<v^<^^v..><^v<^^^v<.^^^v><^<# +#.>^.>>^>v^v^<..>>^<^>^^vv>^v<^^..^v^^^<<^><<>v^vv><>v^v^v>v^>v^.v^vv>^><^>>^<># +#><.>vv^v><^^^>.v<.^<.v^^v^^^vv><><>>^>^v.v>><>^<.><.^vvv.vv^v<# +#<<^v><<^>.vv.>v>^>><^>.<<>v><^>v^<>>>^v<>.<>>^><>.>>v^>^v.v^^^^.<^.^vvv<>v<^v^v<.>># +#<^^>^>^..v>v^^>v^.^>vv>vv><.>>>.<^<<<><<<v^.v.^v^>^..^<.vv><<<^v^.>.<<<>^<^vvv># +#>>^^<.^^v>^^>^>>>^v^v^<^>^>^v^><>.^><^<>^>^..^^>^<>.^<^<><<>><>v.^.<>>>>vv^>>.<# +#>.>v>vv<>v^^v>^v><^.<^<<<^v.>v^v<>>v><><>^^.>>^^<^>^>>^vv<<>>^>>>^<>v>.^^^<<.v<<>># +#<^v.v^>v.<<.>vv^<><>>>.<^.><>>^^>v<>..>^<^^v^.<^^.><>v<<^.^vv<>v^^^.vvv.^v^><<<^<<>v<>^v>># +#>>^^><^>v.><>.^>v>vv>v>>v^>.^><^^.^<.<<.>v.>.<><^^^^>^v>^<><v^<<>v<<^v<.<.><^^>^>v># +#>^<<..^v>.v<>^.<<>v><.^^^><^><>vv>^.<<<^v^^^>^.<.v>>v><.^vv^^>v.>.v>^><>.<^^><^^>v><^v^^.<.v^>>><<>v<^.v>v><<<>..><.^^.>^^>>vv<<.>^<.^^>v^v>^..v>>>v<><>^.v<.>^>^.>.>^<^<<# +#>^^<.>vv<>vv>^>.^^>v^^<^v<<^vv<.v^>v^>>^v<^>v^>v^<^v^<^>v<^.^<# +#><>^^^.>><^.vvv^<>>v>^^<.v>>.>^<^..<..^<><>.v>^v<<>..vv>vvv^.v>v><>><^<>><# +#>>v>^v>.<><<>>^v>^^><.<<<^.v.<^>>v.^v.v^><^>v<<^v^^>v><.<^.v<.<>>v<^v^>>># +#<.v^vv<<^^..<^<>^><>>vv^^^<.<^<<^<.^>>^^.<><>^>^v>vv>v.^>v>v>>^^.>>>vv<>^^v<.<><>>.<<<^^>>><# +#^vv^><>>v^<^v><^><^>v<>v<^v>^^>>^^.>^.>>.vv^^^^<.vvv^<.v..^<.# +#>><><^^^^>^^<^^v>>.>><.>><^v^>^^>v>^^><^^^^v.>>v<^>>>^>><>^.^<^v><>^<.>>^># +#.>.v<^<>>v.v>^><^><^vv>v^<^v><^v>.^v>v^.>..^<><<<><vv<^<^v^v.^><>v<^^^^^.<^^v<# +#<>>^>>>v^^vv>><>vv^.v<>^v^^v>^^>v^v^>v^<>><<<>>v.>v>v.^^^<<<># +#<<^v^.^vv>^<^<<<<^<<<.><>^><<<>^>^>v<^<^^>v<>^^>vv>^v..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

- 2022 - 46 ⭐ + 2022 - 48 ⭐

@@ -75,6 +75,9 @@ + + +

2021 - 50 ⭐

From e38d27b8d411c773e9757d814648abe55637735f Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 24 Dec 2022 18:19:39 +0200 Subject: [PATCH 050/225] Add day 22 --- 2022/22/22.kt | 47 +++++++++++++++------- 2022/22/input.in | 100 +++++++++++++++++++++++------------------------ 2 files changed, 83 insertions(+), 64 deletions(-) diff --git a/2022/22/22.kt b/2022/22/22.kt index 4c8b78b..1fa7af0 100644 --- a/2022/22/22.kt +++ b/2022/22/22.kt @@ -3,7 +3,7 @@ // a basic because of an ASCII visualization which has been added. // // Set this to true in order to paint a colorful ASCII image (needs ANSI support) -val visualize = false +val visualize = false // This solution only works for inputs of shape: // @@ -17,6 +17,8 @@ val visualize = false // * the middle column must be filled // * the remaining 2 blocks have to be on opposite sites, one offset to the other by y=2 blocks +val dirs = listOf(0 to 1, 1 to 0, 0 to -1, -1 to 0) + class Painter(field: List) { val visField = field.map { it.toMutableList() } @@ -60,17 +62,12 @@ class Painter(field: List) { } } -val dirs = listOf(0 to 1, 1 to 0, 0 to -1, -1 to 0) - -fun main() { - val (field, seq) = generateSequence(::readlnOrNull).joinToString("\n") - .split("\n\n").map { it.split("\n") } +fun solve(asCube: Boolean, field: List, seq: List) { val painter = Painter(field) val instructions = Regex("(\\d+|[RL])").findAll(seq[0]).toList() var currDir = 0 var (cy, cx) = 0 to field[0].indexOfFirst { it == '.' } - painter.paint(true) for (instruction in instructions.map { it.value }) { if (instruction in "RL") { @@ -86,7 +83,7 @@ fun main() { val yIsShorter = field.size < field[0].length val alongShortAxis = (dirs[currDir].first != 0 && yIsShorter) || (dirs[currDir].second != 0 && !yIsShorter) - if (ny3 !in field.indices || nx3 !in field[0].indices) { + if (asCube && (ny3 !in field.indices || nx3 !in field[0].indices)) { if (!yIsShorter && alongShortAxis) { dir3 = (dir3 + 2).mod(4) ny3 = (50*2 + ny3 - ny3 % 50 + (49 - ny3 % 50)).mod(field.size) @@ -105,9 +102,10 @@ fun main() { var nyx2p: MutableList> = mutableListOf() var nyx3p: MutableList> = mutableListOf() painter.add(ny3, nx3, '?') + val moveStraight = !asCube || alongShortAxis && (cy in 0..49 || cy in 100..149) while (field[ny][nx] == ' ' && field[ny2][nx2] == ' ') { // If there is an adjacent block go diagonally - if (!(alongShortAxis && (cy in 0..49 || cy in 100..149))) { + if (!moveStraight) { ny = (ny + dirs[(currDir+1).mod(4)].first).mod(field.size) nx = (nx + dirs[(currDir+1).mod(4)].second).mod(field[cy].length) ny2 = (ny2 + dirs[(currDir-1).mod(4)].first).mod(field.size) @@ -116,7 +114,7 @@ fun main() { if (field[ny][nx] != ' ' || field[ny2][nx2] != ' ' || field[ny3][nx3] != ' ') break - if (alongShortAxis && (cy in 0..49 || cy in 100..149)) { + if (moveStraight) { ny3 = ny3 + dirs[dir3].first nx3 = nx3 + dirs[dir3].second } @@ -127,7 +125,7 @@ fun main() { nx2 = (nx2 + dirs[currDir].second).mod(field[cy].length) } - if (ny3 !in field.indices || nx3 !in field[0].indices) { + if (asCube && (ny3 !in field.indices || nx3 !in field[0].indices)) { if (!yIsShorter && alongShortAxis) { dir3 = (dir3 + 2).mod(4) ny3 = (100 + ny3 - ny3 % 50 + (49 - ny3 % 50)).mod(field.size) @@ -156,11 +154,11 @@ fun main() { ny = ny3 nx = nx3 nyxp = nyx3p - if (field[ny][nx] != '#') + if (asCube && field[ny][nx] != '#') currDir = (currDir+2).mod(4) } - for ((ny, nx) in nyxp) { - painter.add(ny, nx, if (currDir % 2 == 0) '\\' else '/') + for ((nyp, nxp) in nyxp) { + painter.add(nyp, nxp, if (currDir % 2 == 0) '\\' else '/') painter.paint() } } @@ -176,3 +174,24 @@ fun main() { painter.paint() println(1000 * (cy+1) + 4 * (cx+1) + currDir) } + + + +fun main() { + var (field, seq) = generateSequence(::readlnOrNull).joinToString("\n").split("\n\n").map { it.split("\n") } + + // Part 1 + solve(asCube=false, field, seq) + + // Part 2 + val cube = field.map { it.toMutableList() } + // Rotate last face of cube in input to make it easier + for (y in 0..49) { + for (x in 0..49) { + cube[199-x][50+y] = cube[150+y][x] + cube[150+y][x] = ' ' + } + } + field = cube.map { it.joinToString("") } + solve(asCube=true, field, seq) +} diff --git a/2022/22/input.in b/2022/22/input.in index 6292b50..bce47c6 100644 --- a/2022/22/input.in +++ b/2022/22/input.in @@ -148,55 +148,55 @@ .....#.................................#......................#.......##.........#.................. .#..................#...........#.......................#.#...............#.....#..#.......#........ .#........#.....#..#.............#..#.......#..#......#........#.#................#........#........ - ..................#.........#.#..#.#...#.......... - ...#.........#.....##......#...#.................. - ....#............#....#.....##.....##........##..# - .......#..#...........................#..........# - .##.....#............................#.....##....# - ...#............................#.....#..#.....#.. - .#.....##....#.......#..........#..##....#........ - ...#.........#.......#....................##..#... - .........#...........##.......................##.. - ..................................#..........#.... - ........................................#...#..... - .................................#...#....##...... - .........#.........#.....#.......#...#............ - .#.#...#.#.............#...........#...#........#. - ..........#...........#.#.#.....#.....#.#....#...# - ..........#...............#...#................... - ....#..#..........#.................#......#...... - #..............#..##.............#.........#..#... - ...................#...#.#...........####......... - ................#....#.....................#...... - .....##......#..............#.....#.#............. - ..............................#....#...#..#....... - .......#...................................#...... - .#.........#..........#............#...##....#.... - .#............#................................... - .....#.......................#...............#.... - ..............................#................... - ........#......##...............#.....#......#.... - ..#........#...#...#................#....#........ - .........#.....#...##..........#.#.............### - .........#...#.#.............#...........#.......# - ............###................................... - ......#....#.......................#.........#.... - ..................#......#..#..........#.#.......# - ...#.....#..#.#.............#.#..#..#...........#. - ......#............#.........#.................... - ...............#...............#....#............# - ..#.....#............................##.#......... - ..........#.......#............................... - ...#......................#..............#...#.... - .#......##.#.........#.......#......#.......##.... - .....#....##..#.......#......##................... - ...#.......#..#........#.....................#.... - .......................#.............##..#.#...... - .............................#....#.............#. - ..............#........................##......... - .......#........#..#.#.#.....##.###............... - ...#.....#.#.............#..............###.#.#... - .........#......#..............#.#..#............# - ..#.................#............................. +................................#................. +.........#...............##.........#......#.#.... +#...........#........#.......................#.... +..#....#..#....#....................#.....#.#...#. +.................................#.............#.. +........#...............#....#.................... +..............#..#...........#.................... +...#.......................#.....#..#......#..#... +.........#..#.........#....................#.#.... +.##......#.....#...##...............##...#........ +........#..#......................##..........#... +..#....###.......#...#....#....................... +...............#..#............................... +..................##.........#............##....#. +....#..##......#..#......#........................ +.............#.....####.........#................. +.#.#..................#.......#................... +...............................................#.. +...........#....#...............##...............# +...#..........#.....##.........##....#..........#. +#...................#...........................#. +...#.....#....................#..........###...... +........#.................#........#.....#.....#.. +...#..##.......................#....#............. +...................................#.............. +..#.............#..............#.....#............ +..........#.......................##.............. +................................................#. +...............##............#.................#.# +...#.#..##....#....#....#......................#.. +...#....#......#.......#....#.....#..............# +.#...........#......#...........................#. +...#..................#............#.......##..... +.#.#...........#....#...........#....##..........# +...#.#.......................#..........#......... +.................#........#.#.......#......#...#.# +.#.......#...#.#.....#.......#...#.........#...#.. +......#.....#..................#.....##......#.... +......#.....#.........#........#...#........#.#... +....#...........#.........#.#..#....#............# +..#.#.......#.............#....#...#...#.......... +..#...#...#.....#..#.#.....................##..... +..#.........................#.........#...#....... +......#....................#..#.##....#...#..#.... +..#......#.............................#.....#.... +.......#.##......#....#.#.#........#....#......#.. +..#.............................#........##....#.. +....................#....................#..#..... +.....#.........#....#...............#............. +.#...........#..#..##..............#.........###.. 3L27L4R39L42R22L2L20R47L27R11R11R19R21R36L1L40L1R27L32L7R16L23R44R8R15L22L22R22R18L44R48R27L5R32R9L38R23R48L47R25L25R27R36R7L26L13L36R37R21R3R22L38L9L43R15L50R18L19R48R6R19L30R4R33L48L42L21R45R4R9R5R4L38R41R9R37R44R39R1L8R49L24L26R33L16L22R34R39L14L28R32L23L13R19L32R34L8L35R15R29L17L3L46L26L37L48R22L6L37R16R46R36L36R22R3R12R24L17R21R26R33R16R5R44R11R2L31R23R26R25R36R27R1R1L12R39L21R49R44L41L35R31L39L3R5R14L26R30R47R6R21L34R11L42R2L20R37L28L25R47R44L9R50R49L16L33R6R7L33L45L38R24R29R29L26L36R9R16L47R27R19L35L26L24L12L50L47L11L22R39L35L12L23L31L20R32L46L46R17L35R26R35L41L30L18R7R23L9R12R21R36R45L45R41R7R29L3R22L27L35L10L11R15L39L25L19L43L18L50R24L12R7L3R28R10L32L19R11L2R6R25R43R22R8R20L31R17R45L47L48L3R20L26L15R8L30L9L34L8R35L37R30R42L31L17L19L20L9R46R5L2L48L5L15R4R13L4L23R44R36R12L12R11L29R4L37L6R12R38R24R6R1L3R50L2L8L26R24R38R24L43L42R48L35R27R10L21L34L11R48R39L4R29R28R42L35R38L8R22R23R50L5R6L25L20L6L18R48R20L33R1R13L39L7L30L48R49R14L35R38R15R25R45L18L30L2L28R25L29L4L35L25L38L33R48R37R4R29L30L13L6R23L9L37L3R17R1R13L10R22R27R14R13L32L3R6L34R49L37L47L10L1L36L27R48R15L45R23L30L47R1L15R4R30R29R40L24L37L30L28R27R36R5R15L5L6R1R15R4R23L39R38R24L46L40R16L32R4R43L17R18R27R29R24L11R38L13L31R48L5R23R4R9R35L25R12R32L39L7L22L14L14R28L1R16L39R15R2R26L34L3R18R29L46R31R47R23L31R28R20R24L18R6R18R33R49L24R11L29L6L44L22L26L1R5L1L45R29L17L31L22R46R39R7L28R4R28L13L18L50R3L17R19R43R16R26R34L4R18R29L41L33R46R16L34L23L34R22L43R22L42R1R23R37R18R36R48L18R3R22R6R27L24L47R44R19R12L41L7R23L5R39R1R1L10R17R19L8L49R38R6R3L39R1R42L21L27L25L32R18L14L5R43L13R13R26R36R44R37L23R17R41L41L22L21L41L26L20L14R22L25R42R28R16L33R2R28R50R47L21L24L5L25R4L46L34R1L2L14R7R10L34R28L34R20R35L43R6L5R32R34R16L22L45R16R9R17R19R46L46L49L22L28L29L46R2R38R2R23R47R36L45R10L46R42R9L23L38L5L50L31L14L17R6L27R28L49R45R50L30R23R3L36L10L36L21R36L25R37R40R21R32R27L3R40R28R49L10L23R36L18R21L18L36R30L44R19R15R18L22L18L13R3R43L18L2L3L46L21L6L25L19R16R43R14L11R41R27R42L30R6L34R9L14R34L49R35R21R41R4R13L3R15L38L19R37L31L9R1R9L19L6L15L9L35R27L27L27L28R26R40L41L6L3L20R39L35R9R19R14L38L13R32L12R26L27R27R42L30R5L24R32L35L3R39R42R2L35L11R33L32R6L31L33L1L9L27L1L12L25R34R13R5L34R46R44R28R29R47R47R41R20L8R40L12R39R46R34L47L42L49L5L7L25R21R20L19L2L14L43R2L15R4R48L48R5L36R36R5L46R23L32R26L29R23L6L50L33R12R27R23L22L2R33R48L7R49L5L10R26L16R48R10R19R38L34R10R42L31R45L22L36R45L40L7L19R9R15L29L7R15L35L32R31R7L17R24L46L11R5L30R27R23R9R43L36R14R26L4L34L15R49L16R20L25L12R9L8L42L39R6R20L18R9L23R15L38R13R24R18L49L47L35L41L41L8R7R10R18L39R13R46L48L49L39L49L50L34R10R30L4L19L16R18L18L12R44L17R34R2R9L11L6L14L42R29R22L8R19R42L49R29L5R44R42R46L30R44R32L45R6R38R17R14R37L47L7R5L9R7R33R10R36L13L35R19R46L32L7L8R27R3L36R39R1L26R11L20L34R38R35L10L38L5L39R17R20L26L45R48R33R20L22L5R36L16L27L28L5L41R22L9L46L20R17R1R15R12R20L24L43L35L50R6R33R5L21R21L32R34L47R13L18L4R2L43R12L30L50R49R39R20L1L45R5L12R30R6R3R7L10R44L44R33R48R14R3R45R35R11R5R10L26R9L13R37R9R34L42L11L1R42R33L4R9L26R6L2L20R39R24R17R24L22R36R4L29R35L10R12L49R9L4R13L11R18R28L49R4L18R48R49R19L28L9L49R34L40L49R31L3R19L11L33R50L33L1R47R2L7R47L34R33L39R8R49R15R47R17R14L19L5R32R24L10L21R13L47L38R23L14R40L47L5L11L24R33R34L45L38L5R41R22L3L11R44L47R5R20L39R21L49L25R28L17R18R36L16L5L12R25L39L8R12R13R18L34R45R37R22L47L8R13R18L15L9L33R28L11L1L30R49L20L27R1R2R3L42L20L44R23L11R17L18R29R31L11L20R11L6L28L3R21L22R36L49R37L39R16R1L9L48R27R32R4L3L24R6R40L28R2R39L50R27L45L15R32R44R14R8R21R5L18L24L45R29L42L46R13L39L31R43R2L27L45L42R48L3L18R20L3R30L25R12L47L23L49R27L21L46L40R21L26L22R22L22L45L18R42L6L18R30R18L23R46R22R8L44L14R26L17R26L45R41R16L46R2R16L50R20L39L24R41R7L19L25L24R29R48R41L30L10L26R3L7R41L40R20R26R40R44R3L37R22R44R17R38L47R35L28L19L23L34L8L12R8R40R43L8R43L42R43R44L30R34L6L50R20L45R25R4R9L39L29L17R1L32L18R10L8R21R29L26L34R26R41R2R49L42R43R3R10R7L14L37L1L29L15L19L23R15R28R20R2R31R44L16R38R19R12R26R42R20R12L35R34R48R13L49L48L35R30R38R21L47L41R6R10R32R46R14L20R34L1R5R7L29L41L26L41R41L41R46R18L28R18L25L20L37R47L17L35L30L49L13L19L42R36L37L36R2R1L36L31R20L36L46L26L25R26L45R18R15L42L50R17L31R30L16R45R47L11R4R29R3R9L23L19R14L15L18L14R44L4L20L20L44R17L43L9R11R42R19L1R10R44L47L46R26R22R6L24R22R34R5R35L17L12L10R42L49L43L50R5L44L24L31R7L6R37L34R7R5R11L35R34L27R18L6R16L7L31L31L50L29R34L47R4R10L48L13L10R37L48L40L32R2R36L26L41L28R38R29L32R50R32L39R30R43L39R40R35R9R34L21L25L6L14L26L42R43R5L39L1L20L37L36R25L39L14L21L37L4L10R11L35L17L47R6L30L20L18R12L10L14R37R38L2R23L17R11L1L12R34L42L24L8R34L40R34R6R25L27R25L21L4R44L41R20R14L30R30L22L40R45L11R26R34R7R40L2R43R16R17R20R35R18L1L2R22R29R44L17L41L50L8R33R2L45R49L48R46R25L23L48L13R49L1L2R18L24R19R3L29R24L20L16L48R12R8L35L4L33R19R34R11L44R40L5L7R23R46L10L15R32R49L24L40L11R26L48L13L22R23L21R45L31R49R43L16L33L39R18R24R34L39R21L45R37R7L17R44L27L34L35L11L48L7L13L41R47L19R27L17R44R29R48L48R2R35L47R46L38L20R5L49R19L17R8L13L11R30R27R18R3L11R43L19L14R37R31R42L11R15R31L1L39R16R42L46R34L48R6R48R23R48L21L19R6R17L18R7L6L22R1L39L20R28R27L10L9L4L31R34R27L29L12R30R9L28R13R37L37R48L10L28L31R33R45R1R21L40R7R10R18L17R5R11L4L48R41L37R18L50L48R30L25R47R29R40L29R4R22R44L30R5L17L43R20R4R17R14L47L20L16L33L31R48L9L30R38L21L7R5R4L13R49L48R41L28L7R30R23L25L37R23L37R34R7L22R43L36R43R8R29R35R33L14R45R2R50L44R21R24L33L39R46L47L13L48L32L22R8L16L5L13L11R35R12R36R11L50L40L26L26L16L44L26L25R26R25L31L15R31R41R7L45L29L37R15L4L36L5L47R10L46R30L1L10R21R14R3L46R7R50L40L3L7R34L34L23L49L7R19L27L32L13R10R26L26R49R41L17L27L50R29L11L31L9R13R16L47R47L40L13R33L20R24L44R14R3R46L25R11L24L26L2R2L23R34L24R9L4R22L38R24L46L6R28R35R42L5L35R11L21R42R9L40R45R22R17R9L20R6L13L27L38L32L16R23L43R33R16R10L16L6R11L9L22R44L23L31R1L20L17L9R12L44R3R49R7L8L12R5R43R33L26L16R33L48R29R26L50R9R43R48R36L30R17R42 From 96be832284f10f008813452b0db2dc99f8bc785c Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 25 Dec 2022 08:28:51 +0200 Subject: [PATCH 051/225] Add day 25 --- 2022/25/25.kt | 17 ++++++ 2022/25/example.ans | 1 + 2022/25/example.in | 13 +++++ 2022/25/input.ans | 1 + 2022/25/input.in | 127 ++++++++++++++++++++++++++++++++++++++++++++ Media/2022/25.png | Bin 0 -> 8310 bytes README.md | 5 +- 7 files changed, 163 insertions(+), 1 deletion(-) create mode 100644 2022/25/25.kt create mode 100644 2022/25/example.ans create mode 100644 2022/25/example.in create mode 100644 2022/25/input.ans create mode 100644 2022/25/input.in create mode 100644 Media/2022/25.png diff --git a/2022/25/25.kt b/2022/25/25.kt new file mode 100644 index 0000000..8862781 --- /dev/null +++ b/2022/25/25.kt @@ -0,0 +1,17 @@ +import kotlin.math.* +fun Long.pow(e: Int): Long = Math.pow(this.toDouble(), e.toDouble()).toLong() + +fun main() { + var s = generateSequence(::readlnOrNull) + .map { it.map { "=-012".indexOf(it) - 2 } } + .sumOf { it.reversed().mapIndexed { i, v -> 5L.pow(i) * v }.sum() } + var maxPower = log(s.toDouble(), 5.0).toInt() + + var num = "" + for (power in maxPower downTo 0) + listOf(-2, -1, 0, 1, 2) + .minBy { abs(s - 5L.pow(power) * it) } + .also { s -= 5L.pow(power) * it } + .also { num += "=-012"[it+2] } + println(num) +} diff --git a/2022/25/example.ans b/2022/25/example.ans new file mode 100644 index 0000000..91cc46f --- /dev/null +++ b/2022/25/example.ans @@ -0,0 +1 @@ +2=-1=0 diff --git a/2022/25/example.in b/2022/25/example.in new file mode 100644 index 0000000..027aeec --- /dev/null +++ b/2022/25/example.in @@ -0,0 +1,13 @@ +1=-0-2 +12111 +2=0= +21 +2=01 +111 +20012 +112 +1=-1= +1-12 +12 +1= +122 diff --git a/2022/25/input.ans b/2022/25/input.ans new file mode 100644 index 0000000..adf42f9 --- /dev/null +++ b/2022/25/input.ans @@ -0,0 +1 @@ +20-==01-2-=1-2---1-0 diff --git a/2022/25/input.in b/2022/25/input.in new file mode 100644 index 0000000..26435d6 --- /dev/null +++ b/2022/25/input.in @@ -0,0 +1,127 @@ +21020=22-2=11002=2 +2--221202=102- +22120- +1=0000=1-2= +10=221 +110=1121002-10--= +10=00==--121==0= +202=-1221 +101-01- +12==- +221101-=110=0 +1=-=2-12-2202= +1=0-02-=0102-=-12 +1==-0 +1=212--00 +202 +1-11121--21-21=-2 +22--2-=-2 +2-00-0=---2-==- +1=2=-2-=0--1-22 +1=000=0-112 +121=-001=0 +110-=-020--=0 +1=0-1 +2=0--==0 +102=21=201=-21=21 +11-22=-22=1-0= +1011----1----2-1 +2===-00022 +12- +20=0 +10=011=00=0- +20-=0-0-1=2====0-2 +2000-01011=001= +1=0-01 +2=-1 +12=10--=-1- +2=21=12= +22=21-0 +1==-02202==-- +1=== +210020-122222202= +102-20211212==11--- +1020=221-00=01 +1=2=1=0---10 +111- +1=02 +10-10=-2-0=11 +1002- +1- +2=12112- +20=202-=01=2-1 +1=- +1=-=222221=1102012 +20-1=02=-- +2=2-= +1=1 +1-0==1122-02==2= +1-20-0-=0=0 +1=022-11-122-0010 +1021===1 +1=2020-- +2=0==00-==0011 +1--220-0=-=1-2=01--- +2=1=021010=2=1=- +21=2-==22-==0=-010 +200-=1 +212- +21---=-022-22 +1121211-110-00-10 +22-=1 +1=-=2-2100--=1=02 +1=0 +11102-202==122-=00 +2=1-= +1=11--00 +211-012--2 +1=1021012100 +12-101==-110102 +1==--2-==-==1-=- +1===21- +2---1100112010202 +1200-112=11=-0 +1220--00-21--11 +12-=0-00-= +100122==---=0 +2221-==-210101== +202-1=1 +100==12101=2= +102 +210=20=11 +12-=-=2--1-=---=20= +2222001 +12=0 +2--=20-10--10 +2-1020000-1=1- +1-1 +1101-111- +1==201=--== +2= +2=0= +12= +11= +1== +1-10000-2= +21=-21 +10-=--20-2-00=== +202122- +1=02--10011 +1==-0-1=2111-12=2-2 +20 +1==- +2=-0-=222=-02= +1110=1-=1022- +122=2==0=2222--12 +10111000-=2--=0--0 +1-22 +2=10-0=--21 +1===- +1=022- +1=2===2- +22211=--10120120=0 +101--=111101-=11 +1212=10 +20100 +12=112=11==01 +202111=--2===0 diff --git a/Media/2022/25.png b/Media/2022/25.png new file mode 100644 index 0000000000000000000000000000000000000000..bb15a9ae0ec99c7bbb97ba92b7bc9aa70f61b18e GIT binary patch literal 8310 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 A4gdfE literal 0 HcmV?d00001 diff --git a/README.md b/README.md index fd9d213..5dddca0 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- 2022 - 48 ⭐ + 2022 - 50 ⭐

@@ -78,6 +78,9 @@ + + +

2021 - 50 ⭐

From 64b3b5cafaa3d7137d5b9f13cdca29549fdc5c2c Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 25 Dec 2022 15:34:21 +0200 Subject: [PATCH 052/225] Add day 25 --- 2022/25/25.kt | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/2022/25/25.kt b/2022/25/25.kt index 8862781..74187b1 100644 --- a/2022/25/25.kt +++ b/2022/25/25.kt @@ -1,17 +1,14 @@ import kotlin.math.* -fun Long.pow(e: Int): Long = Math.pow(this.toDouble(), e.toDouble()).toLong() +fun pow5(e: Int): Long = 5.0.pow(e.toDouble()).toLong() fun main() { var s = generateSequence(::readlnOrNull) .map { it.map { "=-012".indexOf(it) - 2 } } - .sumOf { it.reversed().mapIndexed { i, v -> 5L.pow(i) * v }.sum() } - var maxPower = log(s.toDouble(), 5.0).toInt() + .sumOf { it.reversed().mapIndexed { i, v -> pow5(i) * v }.sum() } - var num = "" - for (power in maxPower downTo 0) - listOf(-2, -1, 0, 1, 2) - .minBy { abs(s - 5L.pow(power) * it) } - .also { s -= 5L.pow(power) * it } - .also { num += "=-012"[it+2] } - println(num) + for (power in log(1.0 * s, 5.0).toInt() downTo 0) + (-2..2) + .minBy { abs(s - pow5(power) * it) } + .also { s -= pow5(power) * it } + .also { print("=-012"[it+2]) } } From cb24e85ea2d64a7d3fae843d35938b669de3ef59 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Tue, 27 Dec 2022 01:52:42 +0200 Subject: [PATCH 053/225] Add day 1 --- .gitignore | 2 + 2020/01/01.rs | 28 +++++++ 2020/01/input.ans | 2 + 2020/01/input.in | 200 ++++++++++++++++++++++++++++++++++++++++++++++ 2020/Cargo.toml | 16 ++++ Media/2020/01.png | Bin 0 -> 8847 bytes Media/2020/02.png | Bin 0 -> 8445 bytes Media/2020/03.png | Bin 0 -> 9235 bytes Media/2020/04.png | Bin 0 -> 8459 bytes Media/2020/05.png | Bin 0 -> 9270 bytes Media/2020/06.png | Bin 0 -> 9494 bytes Media/2020/07.png | Bin 0 -> 8816 bytes Media/2020/08.png | Bin 0 -> 9332 bytes README.md | 27 +++++++ 14 files changed, 275 insertions(+) create mode 100644 2020/01/01.rs create mode 100644 2020/01/input.ans create mode 100644 2020/01/input.in create mode 100644 2020/Cargo.toml create mode 100644 Media/2020/01.png create mode 100644 Media/2020/02.png create mode 100644 Media/2020/03.png create mode 100644 Media/2020/04.png create mode 100644 Media/2020/05.png create mode 100644 Media/2020/06.png create mode 100644 Media/2020/07.png create mode 100644 Media/2020/08.png diff --git a/.gitignore b/.gitignore index 70204b3..f34cc79 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,5 @@ AoCTiles/.aoc_tiles_cache *.class META-INF *.jar +/2020/target/ +/2020/Cargo.lock diff --git a/2020/01/01.rs b/2020/01/01.rs new file mode 100644 index 0000000..59c3c4d --- /dev/null +++ b/2020/01/01.rs @@ -0,0 +1,28 @@ +use std::io::Read; + +fn read_nums() -> Vec { + let mut input = String::new(); + std::io::stdin().read_to_string(&mut input).unwrap(); + input + .lines() + .map(|line| line.parse::().unwrap()) + .collect::>() +} + +fn main() { + let nums = read_nums(); + let mut ans2 = 0; + for i in 0..nums.len() { + for j in i+1..nums.len() { + for k in j+1..nums.len() { + if nums[i] + nums[j] + nums[k] == 2020 { + ans2 = nums[i] * nums[j] * nums[k] + } + } + if nums[i] + nums[j] == 2020 { + println!("{}", nums[i] * nums[j]) + } + } + } + println!("{}", ans2) +} \ No newline at end of file diff --git a/2020/01/input.ans b/2020/01/input.ans new file mode 100644 index 0000000..ab928a1 --- /dev/null +++ b/2020/01/input.ans @@ -0,0 +1,2 @@ +964875 +158661360 diff --git a/2020/01/input.in b/2020/01/input.in new file mode 100644 index 0000000..a9175b8 --- /dev/null +++ b/2020/01/input.in @@ -0,0 +1,200 @@ +1822 +1917 +1642 +1617 +1941 +1740 +1529 +1896 +1880 +568 +1897 +1521 +1832 +1936 +611 +1475 +1950 +1895 +1532 +1721 +1498 +1905 +1770 +1845 +2003 +1854 +1705 +1916 +1913 +1956 +1798 +1823 +1955 +1713 +1942 +1710 +1696 +1590 +1966 +1476 +1800 +1672 +1533 +1524 +1957 +1923 +1545 +534 +1707 +1760 +1104 +1471 +1947 +1802 +1525 +1931 +1653 +1608 +1937 +1977 +1598 +1470 +1794 +1488 +1786 +1652 +1482 +1603 +1667 +1245 +1478 +667 +1948 +1885 +547 +1971 +1795 +1910 +1571 +1711 +1727 +1987 +1597 +1586 +1661 +1893 +1873 +1827 +1561 +2006 +1782 +1813 +2000 +1592 +1714 +1849 +1501 +1809 +1751 +1935 +1692 +1697 +1878 +1502 +1738 +1731 +1682 +1690 +1499 +1641 +1925 +1996 +1972 +1886 +1836 +1747 +1841 +1668 +715 +1698 +1859 +1637 +1477 +1785 +1695 +1702 +1944 +1631 +1771 +1623 +1892 +1466 +1834 +1899 +201 +1801 +1978 +1830 +1591 +1673 +1949 +1846 +1677 +1657 +1576 +1817 +1851 +1894 +1754 +1604 +1568 +1730 +1985 +1614 +1980 +1554 +1997 +1960 +1983 +1848 +1883 +1968 +1729 +1716 +628 +1472 +1676 +1943 +1821 +1681 +1619 +1644 +842 +1492 +1633 +1921 +775 +1861 +1584 +1974 +585 +1898 +1560 +1708 +1927 +1563 +1872 +1876 +1865 +1535 +1994 +1756 +1662 +1621 +1993 +1825 +1679 +1959 +1691 +1875 \ No newline at end of file diff --git a/2020/Cargo.toml b/2020/Cargo.toml new file mode 100644 index 0000000..a4fe7a3 --- /dev/null +++ b/2020/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "aoc2020" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] + +[[bin]] +name="01" +path = "01/01.rs" + +[[bin]] +name="02" +path = "02/02.rs" diff --git a/Media/2020/01.png b/Media/2020/01.png new file mode 100644 index 0000000000000000000000000000000000000000..5b25cbbedd3a77401814dc8c1359113e81c07a4b GIT binary patch literal 8847 zcmV;AB5>V_P)c3Yo#*QlK;ynhkl;;<6h(=WsEax*$&!5NitRXdVkg;2d{uTfJ0G@ct7dCvye{zk|Fp6xI^8_A&3g z@yKt&M{SZKqs;J7k^?Qhd001BgqGb0=17H8!ELr7aDYo)7AV^oY8CB~iE_@0ADBSTP ztWZ5V-bK~UIl4l?aZyK~v*la+&hJm1#a5xT6vx~S0062|Th{K@RjfjkYRd1LymMpo3ls-dw^0fF#N2gWJVVJP$!r zuaFvhP0a03=q(io-#`g1U#PO!%bxm)x2sir?4tS)%>%FV^!pr>Koo>^+jFX-Dxq9c zxhAKu=F?t8rBN1?sfwyJNg7o(8Iym46qbcC4iww-<|W~5=>_X0Jtt6aUB1B zJd|NLKZo|h3YBH^0T{z24pEn`G_2aDFxtdV)^rqY{~nBBGI>)VB`mSEFgksq9LuVU ztCXffp~QLZXy@<$w(rQ>aWW`zLYY|7s^TF$-Nj#{&H>8f;Ml|*@}}F%CE^Nmk^R71 z%EIz&M+JM@#*V$y``JITiFmd;`s%gXvXzs!&t?2orOYu{%-R()3?qC-6a*p~b;iSf zrO76Ijd>iNyO#j~G0*tqt#idYo)e#k1Dx~~q+l7S3Q?+!Yj=xFXum64}hK$g!99IUV2r zE;7_vwC|_7+KobaPJ6BE_uv}C*o7k!ybKi?KmEthgPWngc6aMhL_sL6rQ(`dyF#_S zy8dT>3n8d@xWG{4*oDsk0Hkv$IytJcmhk1aEeC9y_h)!s0RRAqIv!|in)uJgH9HOU zTT|2xSavC@3df}e$N&H~PWd}72JW}am?9(O+sm;`Y;r_Pug5e-z9gr;gst4NcGuAH zcNr?RrkFQ)|2p8NdM&=AM+u#{a+0vb<0=S(AvCGsD4%QO%tyks`{x=uK?eQO)=FTp&1i5;f{Bswpqq5`MF#Jt z-=0}QzP&Jpo7V5sRIc&0p9^%i0vYxqxUyvT%i)o3CQ2$zMF0RyqXz&e%|$o@#Y5hV zM@@}(lHXURg_V(&W0^!GNcmlXzB_?|yW#;89rE=Z`L%W3Ze7JHRIN)y0>SRKM8uyi ztOOZ!ocx1n-5zCO1%LqM9`oKhZQk^(P=WGKNE@6Di%nI7AOD|>BV{o-HovzSIlSpm z7M5F^4>PgI*swc-G8@f6R3RFjL55%jg7nX z^;?A(Lmt^?O6HI^1q-FBg55uYaV4%Zi3{~L>xiPt@My2A?c|*BLbyU%Q06%Pd)hbE z52V-&V+w__;9+eDRqIp*r2v3LBp8nbQqG1ea*QLh0iDlQMhRW2s&1YM4dq@$nf;ZfMC)|H0>F|;JDWe@WPNkHPBsoK2&8(H(*S>atH}39Z-kAt%+OL_=DXb+5 zQxR^op@as;l>D?O8;`McED;UUUMJ-przS^*Inw3S%IW`RY2N$qXLzld0k0e^csu7U zEP^0lT%{>rrLI`5d^kax0tC?@N)4v7s0u6ilGx-(c<`?K{*9Sluv}|#lg+y2Aa1m! z{}kx&7(MgRBjU}71;4us$eW+AGf@O0{9l6S|tFYzqK0z*4`v3&@*?unJZ;o7eBl>0B!T7*iB%*lTKNc3%4?@St7h zQ8}$e37xKPvv$RL7@gs}@yvK7ut@Ii0`kfd7J@5FcmF_LR-e1744_JN$?lgmCAH(1 zzhvW-bY%%^ArvEusx_5sRQ8$_|EJkwHmyvvP~EG4-TTQuNO(Iv3f{$|Dj-K#xYks8 z@O4yJ6PzO$YSyW&B|}Glmp&;cAjw(?f>9h%X)vt`H`$cdQe{Dzv;*Xfkyk5gtJjA5 zrk}oiD-V79hwrkgKu%#P4A#nnuOlk0bhVj5p|?~XerxdPZ!=C0rdV72^j|2$C1&}@(wFK)Ey>$l*>f`T322LL$RP9h9fyyJNQ08v!g{l~ut z0GL)a6NTlt-W(q3Ru|VyT>qAI4(Y2KjVm{Ci8$q-bhaGJmlps4<4V%;AlQ8!06Iw*5>AqJ6zkWwp zg;)}*0szoH=j4??+Yh|uy7am5tQtA}ApoHIgmB&Mk<7GF$V(sn1J9RboirU51LXi8w<=IVKJvn8IL16e|0! zAJ})l1fjSxm$zU>Ah?Q&hUNIJPqZ9k>7<95(o#%L468(|%fasJ3X2`n8Z(~9-1HP3 z^zctd9;m@eP7I43guM5z5(QvERC3 zMU(jG1Q}K&dswgu8UTQ5P3c?HFr8Ub)i{3g4?+n^k_j@*I{*q`;uHV?*PH2wW3>#z zQfqbQ4NvE7?W|$n@!Z(4ck=c7nLTFttn%J(tvvh|<)8F*wUQG4(S0y7kpB z8CGoz_T7RIRBf--ui6UIe2aPL>$k=xM`M$tg1rEMK>wYxr+#8tyUTa~I*g*)vUVG#tOuW!zGa)DzK;ek7oovn1h0|2KmSdDcX^)>7AnhwAX1-hE1VDHSA zeP)2!_kjMMoBp2EO*p~}nz!?sxI8jG000OMb|zedGv> z#4!mz1dtrRbqK|{ha-KI(CO+n1@2u*AL?N`b0X}|XfKRn!n*>d)|(o(y4x>^&wz@p zMb-MerWh!XW3sDFx{mkWRa3)OJj<(WI+O)vutFvLnFI)PzC1{hw5;7VGhr=hRRI8u zbsN;h)xPdFa$=Zc8GZFyebt)rD_=5nEaR~$e(S2DYU|d+fzGS6--YSShSfU~VPBx< zdisHgN<&9O>E)V|TKldaxbK{&yc4+IVqO1aJmmG>yDF}OimfH=EAq0|b?aQtIvmHk z+b^U9bdUlB5k=ME!MhSw7V7S%qj1Z!kK-d-+N&@YU|M5v;I6y< z0-_*_cRU}D1k|>&L^v>cy0HD0i zq2up`vy30o?Tt+g1n;-1%U2m1cP1i%aQ_|Oo%0!IJz%ApNnWVo5pnc+?q1ecH7c44 z;$gqP_onN{>68av(%@Y>gkcKUI29VcFQ;apuf1s7A^9UM!oEU6Sc~DAA%cuQhRiz*v2_`7AWY3Rm%?BAemMuCNLq!u| zf7Cg^#3Gu?HM8eU!Gfy_h{sqcq0dw~E9gL8!pfsE002`PXs=WFx@c83(eiC_0XKH; zQ~s0C%FZ)?;y<{rALBm=lUUwcr)S11fyJOIklYof2CR}sUI7_Y8E1#VR9LvaGmL~`zr*C@-pohYGtg0o-J1s0IpB-KD9lEDjIWDg?d>F;R zV^u9>-f3ZF3uBrQGAE^ySm8W2(#$d&)NHVv?(PEeP7mHW(PT_cz$nHCyOPNY!EjzX zv|^F4{K|8Pyjr>8jr_LEFMEhXgG>u6-(e7fDY7k2fix{6DotJ|&-Y^H1o{4V#cREb z@R_l&yyC#Msq4Pdz|*FhBv|vE%V1*j-48CyySsqA)578-Rmz9LP>``aBWu3Zts0ud} zz)Cd$ARY;XhwpptUCk@E=;BuuNO7A9jrEyj3k%a2gv5o?tg51_yxg7hTCtuD9z`od z2#Tn*DwS4cs}N^c#f^o<&-^@Pnnt0wDAw#S)NLF+{b6|Q!EAWtU_PIb(_JA+lA#e< z{#61jYo3t9nyNfKm@ZfZ=CRI(u{&O664f&LC-o!kcu1i__y zemH*OT|Sw1h6*TVdAN68CISy`XH4dqf<@BGDR7+pgG7c^Z_lj+O;5I;=QkW%oAwkm z?VYYuvSOn3+YBd_!7GgnQPBvkx~NiPuhCUCdhcDC$ev+!#fyK1Y78?-AONSZ@|g$a zLt!eiY(AKARvm(og6%J0y1d-HI8W!*oRt{ENgHR&iUa>-zB-#1_;Q6q`5g_uf2}ZE8~@!)n$z?@`x?ult7lk=7I- zNM)-~*(&loN(5hbTQoWSs~Dwwe#EDInK3k_bv31R;u1DNcfI>Ra~>%F?%Mai0RTWX zhLmXqZ`zI;g|Wa;n-l~lIFPzAX~xfHj%6J!$Gs0a?7Lp9e&Ls6=RYG|!}1STt2G7N zo{voohWc)6sxt4~G&enks5Ifhdtl&>pw-DJx*64f$hSQYoYneP@uk)vlnmh*NtH{iI@v!6&vc_~I? z0|2mb%6aW*nqNF9+ICoJDHgtROk(WZr{Yd$uEvoZ%aG0?hNi?J(Ih|+gwk57Z`d|@ z^{e#F=whU2SY^>9*Y>Pq{_xlX*Y%Tyo1c+$L9>MG#;NdVZ?<2Tma6y+t1;h1c(lj= z;CA}I#k_jEc$mSl%*dIK#bbcEQWcCTY+Ls0Yu34Lob=qyu|1XNg>j{I+w;+}2Mk5> zi+g;~EQQg=#;F-*SWSof&IL?kFs<5>+n`y%*WEUGTWU}3BW0gkUOvOB#Ji`yYK^UV zzwnizq9bQMjEqe$Va=7Q)J0YHo!?KyBK=?dTFw?Jo>y5=hN^X_T1S-BihnJB_BDwN ztI=qNXIqY0it#I7vI*MK_(aYtn;E?Ku8v>*W_l}UGM1LAcu1&9Q(9}^{gUvy9T^`O zJO8P8`FT!wAsDtbA2il&oV<0`-F_jj*=BOICnZ6grmE4}d{|M~OmgrKE+U!5MXa~y&xO831gRA8ea*Tv6f&kJKp z!dB7$=YP%?Yd$5zs#0g7&2|6)6Ak4IBq70@f*iu)TRCvQCFUBoZht;y7Iem-L%y-I zpGdp|FGW>J1A<|G>(RsSka+wK01$`p&kHGcmyO5zzxXE!*SeGptD4F+{BCT2=M~@W zvoq#Rft0YstxS2x$Bw;YsNbqvxmmoMG+(d@+I#QnWmpySGIT6GWouSprL%I0xUb_vpy#@weygUcF|P z{9TD(7kMjx2YEBZdC!-OjngsLNM5YzSl+Gt9pp`#L0IA#eHqpJ|f4bJH`dnj5z2SFFc%=D2Ud-*q)A+Ek~o*!3&7C`?7Lf{2Gaq28N9 zl1m;CjOgo|HC2s>N*fRR{k^w59hZ{)FAB;`4O@xAG8n_7?lD)}sp!K*PCU@%ad+p3 zHw8*_v1QE;rMakd?<)X+$y;aQkzlqAtCX`}X{+?zIun~5QJ1gM)ikk8JRb0PZ=K3X zlx{DAt3o5);+Xv@6V8R3o;I)E?rJ;5MZ84G3frz9x-NYl8MzMtP!(1bKKV+xzukNL z41gfQzQVHQAdD*lT`j`lrlx)B(mKcGFJnHJ%2I4=K7=aO&X%M6uZG&D;_c7*``Vq? zz5x(qTGd>6=*_+(zZM5Zn4znDMr-9`DXJ=+H|BASp8KTc#lPaSs`AK~VU=?B;f4Z# z$0e1$CP4=DD>pk%`~h&BW%GVzL1|2KyIV$k5d{$*?ak(EgsL>=)!WCfd_|3P0sx}U z0SLj2Yj^X)icSoUe*K%o!^Q8&P$!}wG*xS-g#|&Hsz&G4Z-RrJ0027RhEcq5^Rt4m zq7%a-r#}>;{D+3SSG@dRObyNBm%rpoh?F?*^09dC?&9Y~IEG;oEFI;TI1Hnh&I02q z>(=j0{me>jtIEcUC{&3|$w+wUs~b6%p&iq1tHItI+Uj)*i=FpOPbBZ?hY&O^ryL~S zpTj0-2tkF2XjH&WiS`O`OoH+{@rOGN`F55oEKOCTarF};U;Y|5+4K!hs0zziDmvMI zLCBAQX^jO<=i43baj;H*@`&+uNea*291S1lw z5m|X52vI2YHR~*mJ2Pfj#dYR*(8Dna7*i-LB{Anf+~)!SU>XA@@+gEADoktA)ow)9 z2G^y}r+Fh0&)v%f8}`vbZ+Nr^f)V4&O}?&HiLHf7i{01V21MC@5xF4FB1)W zZ=WgJ_fsYok;t$r<$(i1p`rT{8CI1#BcE8sxb8{aiVg0TuS0$93`HWM9IBd%)z)p# z0RZAb_xP#z5)Z@s@Vu_JlPIArfA%luHTfzn)TsNH~TjYMHN=^RYI7))cZZ9DAgxP(wiz6JUC?m^H*>+y_%72+X3 z=^U~(A1K`XtlD0kJ~y~rRkcWX`Ej(;XybVqGQ|6yg!-s?_EC ze;##>gu7CG>g5WHrf2{_Bx`^nZt&ReCR&fHEcWuJ|HI0k{`c}{f2J;~J9)qUFK=F_l*IC4Y`}y=+=}GFRNXL306jPdP{8wFNLuj-|$ezlv%tXsE zj$yQAE5%143Zi`fYiykIT=^p12~3u-_N=yto!kQ(-l{QdNc1C%85mOcNdU1V}@1F^>2kFbu1n8-@9yT zdI~~N$~&$uU8ycx<+||i{I8md)#}ofp}yO($q|;OFiWYaVXLpZO$g8Fxp$@V&|9VZ zUh&+$5|0FMjj>?E-b6Gk?A69~=8FA4=Ku)YJc%0%A!tg1bil(roCFaG3xaejHb5w* ztzIt(OQyA^`YqO`C%s**QP&6^^uic!UcH@-Q?Yzf&xx`4?=BB_q$4Smi~rtbhK_2h)*4ptpuFP~ z=RS%$r|!k%l|M%-`-zfT)4Dw{uA~DV=hd%$-P5UiV{XU5m%p*Bd$MHrOQ=c{j|3u) z{?W6a2-%YgH$Q`EjQ{}Ko*#=z-7Vh;OG8O9NCVy1wN-0E52oI6I!}BXMOEc`!rHm z{k=E+S+0^t#L*vd^z)yWcTbc8cl$*_RR920Q5B{$a|s$kP?XRy@mM_UlgO~TO^bIyyQn0VGa zK?YeWTCn{EhK`Egp;EwSSPi-yh1OETiuL~9Tlw-X{&t4?Klr=(XHCbF;B9#0SC8}O z$V8H`mc6x)dFPEcDbD-6v5N7ScUkf##d)7MRsoNBmn$#4Agnwd^DblF{|{U|iYbhU R(g6Sf002ovPDHLkV1jORSP}pL literal 0 HcmV?d00001 diff --git a/Media/2020/02.png b/Media/2020/02.png new file mode 100644 index 0000000000000000000000000000000000000000..db4027420fc1cdaac5e95a0f3e478ea03b0ecb70 GIT binary patch literal 8445 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 literal 0 HcmV?d00001 diff --git a/Media/2020/03.png b/Media/2020/03.png new file mode 100644 index 0000000000000000000000000000000000000000..103e09de3e5c9429ced067cc806db5560abe5363 GIT binary patch literal 9235 zcmX9^2RN1Q`#%YZ2wB;g*;!ec*@Um1aqN+qvK>2HBxG;0lVtBr_7>TrkgaU~cfbF0 zU8&1?JLi4x=YBrxK4EGqa=6&!*a!pyS3zD{9scftKjv6y@Kbs9mjMDnKcgTmsp+1& zZRkZC_xxHM(=2jUx=sEAkxi^~?0~iu;d}K5Q?8A5c5LzAK1{G?yWHOR;;9q!YVPZ( z1se;?MD{$1A%n&1Lb6CnvS#r?$Bgv!B#(6u%v!sQX3N3UpQow2LJLAeLO)ND9UoOQ z@T4(9+6hkegww8)+|UozF@ydrO!i$%Aqj|W6BW;sj$`-3vvu2bW`-IvB6ZLV$*HJB z-F6I|d(V$|7n;2FpFj6lY71&;X!!K$lL^PR)x2sKo4>|gghZZtk}^|lFCRa@_u0|L z2M+yoQLjli?Js0>jRxAIP91~9ztiv^C%}4(Bv1LD*nc0eC(IMd>>FHv=R~PVT z373H>0*+`1*=TBSnjo&G6Ex)c`EE0P(1#BnP~Srgxf0^zwRCiveXpqv1%0njI5-hE z)-W>EkV;B@U%v3*;^Lx^OZ8HCA+fQsV`F21afykE2*lT~UwzKE1$1|^nw`QvybNWcRkWVrj%-5(yJ-_DVSr{8Hmg-ku z9cEk``|$JeMTUphp-vAPy^cpmM?Y{GaiW#scLt2Qy0|oYpOdhd^CUsN{`>F0Z{NPj zKS=1yQ+rsfT`Hyck_nYX7Nr;D*J(;6^a|Y&?dJwmx30dv+4E14uLt)5>%)f^d+m2m z(u^%F*O!*E^7ENlSi(+U{Qdo%SvB3x!67O#^3I(*sQqP`moGo(=jW>-@9en-S-*I} zM}AOSU+)DM-eXpgR%~l)Q%Muf%gK3tvS&g}Oq}XP*!p>r70b!V=}71H?c0c!xq7!7 z2tz}|%bq?qM>)CfT!mQJ<_fE!bn)wp*j=p`|67!JKd&y&6EniY!#}V;53s%t!XYKQ z(*+IbbNNTdnIA5?2)>4z#UEuEN{kZJmmkdPthlwDt658J%A)Sh^L z^!M*_H6oB8Qw!d0YpP5xVKH@NZ}Yy>UOaT^*xZ~bGcz+Mr^D7{sk*v4s;o1HlsA9W z`fF9yW977{C_FE(bF=QKxf-XHj<9=}n3##!Z&c=WJ{g2vd9HNfawhauGwrUFRaD%& zBtB*9`}XYsDfXk1m64H=m-i4Fi`TMWBEibs{HX78q$Q@hzW#i=+>DxyYKSyvf5!ToHEZ;O-*faaSgghS7-Va_RCAq zhWKK4IkU8M``1Vg3kwUK#vX=~2fVDPs0aY{*!8!ru9Vt5Y@vvdP+?)=^XJc@jX7y) z7Z29@tmmPi^s1%#su^gAuE_g=P3>|;en_3LhzKPmrJTym?-f=%J3Ez?m3ze*88l~D z)HYg9PTY=c_Xr7-Q&M8e;6zd4-D>=VI$XykcyVf4kY?@d>N+_wG1ufRLPux1F`5@x zpyezqN=r*iN4E^UuvbdpTU%a$q{G8%{QUfq@k_N-uFV0c<-Qqc zOZX)KF~Ce;0#^>HGF-r>U9$K0Z`J3|YTDYLii?$=J@dXitBi>uSZ9JwLn4t2zSp7# z9#1@v9tsP4c1KakV-y_F85g{W4-31!?i@!N@FCxOX{{3w4ejR5=j@Zo{I*3!MG`ct z1ATq^^{(3hy6)BQ1W$ZB14^K?>1BFN%iG%9SC*HDgA!fXq+MJpp$tJ%ORs97>y;8X z(|9bfFE&PU`F|-$hPA zaT9@TLMaqg66Wf9NERhPL;m>j1DbOrMQ;9HxX;f{!TIwckE^9>C}O( zEpfoPu$G2y<*r&(e0Okg=-DSLYcTRTUGu#@H(D)D`?shNi_o88;o%3z$3}I|8vz(N zj~(Zq*o+q>a2ZhxzFe$c@S&eaU_JP&D~NC649%L7l44Ez;XJkh6B5pgGrQh6R{`UbKp~o|owuuvXDFa<`F9j(Hh?Tw~uQu{CTAIzA z#Sg|xT_f%MOzZ% zHjJ{evDvs$SV&1jLjx+Ut*tHlZ+!%qhHi(|)YJs!`}*~0zR~NK#$5vU-G$~M zH`{gVVz{nHjx9d+=U^-NIsx-*&R5rY2N&$g<+z z|5mS}O8yuN(Kj6<@3qB6V>`Qk+uxGd7#J9>t*xj59e0lrBL$X8HL^L$RmLn`;H`r{ ze`HdGLW8@yx`5?>uCC&j44Ly#QT|(+T3YAwZ!;?@c=`DFI5=?g@f^AC>6AR+sSE5; z>Zy}dQQ>4_TJNUu{avqp13^Sg+zzX)&D`AljrPZ}4QMk!kzKh`G=#i@0^Ea#m)FW( zIO;X|+YcET(N)IuQ88Isexar>tgX#0ERs@EB9!|{tE#GicTP6Z^1SyJC1F>tzdSuT zJ3HX7W}fKV!^gT2(*DBE4(Mj**Du=Hbb=f$i2~CXwzfbo#l^)D%8@rYI7(Mn&HEMj z(4=ReKh^u})v>U#+sO9bZCgN}ukw!eMbn5g%@V3N0An7D%W7+rd>n+MJvufP5gtx> z?;dv(*8BJG=jZ2ZYim0@JK<+~dU~Qoac*vILV^zLy`-e1tSqJ@1{PijJw5$vKrIj_ z{#;oe+^)Z;;i~^~WC=(U*%Os5)zwG8#j|lc-g(q$pr%IK6Pq7x{D=&6;{N_V%40vP zxVYYOAUW(Fb8t}54TPzg+1A$9@$c_95sBPpm`5ybuC9-Hct*#^`-g@yc&${VrKO#m z%AwtIa?Gr(tSl@TkNoJ02M!JnpuT|Ci!>UFkumvYWo02D-K~MQpqcyo`Bvo%}5cDXBoF9tO8%f8wuS)^2WYs~qT#TnlwBIKsAfq;LM--p(?Op_=QCrrDiu z6yfK0Isd!eW3aZhg@ce7qJe`p^~o?r&}n(8J>=&=ijKbi*82MT@8A7vuL1)CK!XDs zt5p4a5KxxYjtlGO41kyidwW=Tc!T}@=!hSnvlSILK`b`ET2pj%e|{}lN$m!85E?Tq!i)m zOvlA_y)!2w*`V}+-Q)U7)N{dmz5l+wy?uvll2leEDS{F&L@_V>x*EXL+RQ^4qeleV zqNSx}Z|`LjoAFgRR0EcbT91!E$k?NeF(=vT%uM6OX~1aqgG#%{`tRD&j9S*9Wc5{! z3)JM~;kuWEw=^SUB1jAyJu7o_8Q=!ngK>ZTj0p~w)zZ?kvdS+h`Te8zHMA>@xX+K- zS)7Cl15N=(#?J2UTW2AP^74X$g65W%bit+uoX6vZ8Ud^lrG%uUckkZi0>JCxPbrSyxko^(Bz);lq}irlX@HKz=QeW<=pybGsj|KQlLHIGVeO_&r_zw7{Mg6Vx*xF6dSP z$NArzo5|w7P1V)aA3l)q*Z{c>-yI(sa{RM70rUz`X=7s(;Pp~Cjhco=-1F!cY$MbN zRAZC(`Csrd*4UE7?}T1mp8Zi~y2ndrZA=V6`}C)!dUjiwfT(C=U0rhDS`<{IGn^QZ zg^d0_N;&b7$?3t`#>NK9*ZW{q;px+MIBUYf!cc72!}S56fQs*SExQVunwrj=<1E07 z1qBcL9fG(*$CofxFSn}~+)EYlDSRVe{PPG11gO-F2rn5h7hP{DV#;7=!C?U%l$V!- zDna-G22CGEQ;XVITl;ByK~KQTdr6CcQO3rf?Pni@P8SgoVTu)U*&KiWo^UlC#r6Y^ z)s>C8`Rew+^%nilVyE0q)%>wSP1c!|B&^M?EpKmcpeVn%|6c&Pl)}!TFkj23QLO#^d46`Lk}62Rs%>aUb%!G* zJ|3f*0ALRr8~fR_X9xt`lbhSIRg!Y^Oc)q?2dqM)aq zc%NyisO*6AJ3T!GRWsa3l-$0xu>ly>=)RBkc%yxcK(XF^-&9>h@^Q+)>Sb4AODZVz z0#z#rnHLoo52XmG4wo^jq{=^g##o?*51k?H-a9k*_rKyrZhtKN4xDbhQ!h;&9YAgB z(x%}I?C{!`OJIVeI)-yV=|dX;*Iu7(m6_aj3>qFD26P1+LmO`X=(X)R{UhA zeiwm&O^=C*!J@~Q<3S+4Z?G~jpmz^cH#AT_lSS{KkT7?4LMh>Yt*mVIwGltSmTKItG{exAB;ae4XRWZ$gD(YRa}+Q+(rh&7(|!Gjx9 z#0|uPlu@uVZ{DC^C>hne+K+boQTuCrRF;Ih62m5VF)=eZKs z2%P09CL)j&P=6`h{Lo0wz*gD=$_CFrtWHBol2fdR77*az;L?(ko&&2)OjrOpT38TM zQbzW#ad2?RMN`j}n}x*1X+D4ceYrCNepPMv9nDwN`^;HNN=jFEdSfgf*dp>stW&GO%1=*OX@K3 z#}9*4VQE<%85u?~G2}1(!})n6isBZ^ZnkP0a08SPAo$YKlJDi8sbE|RXJ_ZGC@L@D zM<@l*3=xs0k&!s`Ib;;OGnF{CuKkJJ{{H^rmq)Q`;uw()fZ>pF7&M`TQXiy0@c`m_ z4ffADEk`c;i*CtUUqYFF^{0jg6l4>R7;Ymnv$H{NxA*mJ5jP*F*qfT71=21*)z$`c@a_a}A4>bubqyy= zFR!q013c5_rea6aVp|YSz1uF+C@Wq_V3;H}V!FycrK#x(9&BcI)+8)D8~B<&NJ{AS zdSpaIL}aA0jZF~<1PzU`7Xb{-h3ymIwe%``Ic2 zA?uc13ugl~V&eGD2-5SD6M1?0mS-fwiWr0=3hL@S3=GnShThHhX6w=NUVaq5f;b=@ZU-_|RZ6Lc-r+wonQpVgW3NsQ*0zdaFKBC2(XGBizvRDhy z6&nkSmQd5+A=kPBY);?#V=9kbf9WKtD9uM)>Y<0r#t*HDCD=$7cJekv*WNVx9KdLCNN1WhX4A+=QtE9-_z5BZ}V7? zN7fDBLq?N*nHRr-BcYG+4<5}Y70ic&0m;dF^71_psbqO^aLM-n!lT>0)k*h9Jv!5a zJUKoNLz2eqg1{ft21p8zMj_eJe^-R?lN9C?zm*Ma{e<-eX!@Nx`v{$739SnU0ofh_Jw*ku0oP*ZgV+!R`G`31Z;q40T!SM z0Of|Wu(Mp$%S>(I(v*w= zkpE%y{<0+;)CE@L`PYWvKDw zfBcxqV#h#JQ@Vi%4Yz!HYewumpnxlHC6L7mOL4XQ_hw5KMuZ z$PjR(R_>6?8G)GciKysMx+o4+=~1J`6^m^y5GHn(%Ht=1$v(;ra zHJ}Fv0yyJhVoq10#dj8(xunMLU`Ww82*mIT6iHEz)M6#N5>1k?QO4r4rXmFQbxTSWmOK=YI+?X z6x0d1Z%$cRwC`fI)eyD%$j#vvn`KBrdxSS;rl%>NxZ_uxk^?-0C+YRH`qAKVug>5g z2&@$nIUhwOg2h@4svnry$@N0xxq42-Y5x9Ycg{VUo2|QldIz=SgC~GeaXisJ=H|Bi zN)a4c0@JMg?Ab^mW@w;q>M@8_poVwfenBpn8WZDmeRT=RGvr;Ho0}>bVreA{!U=tV z&YgwE*472NxvSua*4O`TP836W1N$ZFbCEdJC!?rn17)QUa9AA(2gH9Vl`ESd(9XKR zu9>Ljhw`?SaYt*rQw#?N+$^YW5IA%lB;z9^-)mn(BAQD(hMs6L0hFMsT2@rVN=Jtl z=73h26m2SsI(fv)`x=ySZn9LC8rV>X6WHI=p(McD3O6%xeSDS@i~`=#ZS({^UVH-q z1Ous>-Q$!2OC@>vNDzY;C;N2$OL=*DsJ^gh2be`9CX&VWcIf&7lVNITz&Y8Tzm2GI z-_P!8Aai#6cfKL|VS$_rf+<>BiFekh2h7aXfbw3)I~G<}v(wXir7J&w3V_y+Amv(L zT`e)J|L1@wC#xD8sgmeV%j&^#LvNnk&i?cOlvluS=LaA&&>MRplxAKt>L7(TTiaTY zvvD@5^1K5{_7qGUvXu%nHvySPQqtk5^j8(`7XJaI63?as;Lpj;&Hdy_s`0us41hqO z7Qy6&ee(taWH6YJfOU>PfBryA^YHOW8zB8NPjuNyY-g+NrCqHq(Kr*fc6XyIIzPq#m|}F2!3o4UZ-OLIN1+ zH2nzdu7Yd9u?9%xWA%Ri7O~PD&6}jGUbZa_o8MJ#){TA{eslmf@m9eNDk>_-J3_~3 zf)j|0gSAq}-_{ z0Rhm>j6HgZ?Mr)eo;cC@_%t*_rsa?AXQWx5WT=6c?da+vOe#ho{$-RBZQ zc}F|Z&|vPrVn)Zv=mPPRd3Dd)D=>5;=kaG}o=4`g*w*$RVq;Ud&AN)TiqVr2On6Gb z!92w&0540cFeAO#DG~aq1*xK-0HpA}+L5M}KT{3HX`nz?e*1Ihh~VRtoSmIfiMSdA zP1opk``6S63d`RPl4|{J-h1Xk*AnRfMiL?;Cj+xb_qAaF0qX`LEG#VXXg=4SyG4WD znJXb7p&oL-y1F(j){YHsYhYqXNaf`v+E7b}Qb$U7H0U54l9G}L2nfiwiv7om{BQ35 z%H}OOz<6&GAKCz!XQH#-qjuKh>dMOa;~Ke4)BP`1)zvg2uI&8$6W~v~x`M~g4H1Zl z&ToT*D)RDR4yaW4n?}K(q{GQ>s^9K2jTo@}xxUWCz+fDSgT9aFbjN~1^XkRgn=k4Q z;~*o@hYltu2h)q?c|A5e3vrW%y85gA<<5Wrv@Db8P+R_o-f&Lb%7S@nV`C#A;>VBc;2ciuX$Sj?b)TY~Z^b02rn(XI z7>Djj##8}S#SKt#hSRF_bB17vU{IL5SyCsaq3q^3e>YKXzcpG(~*^BVq;T!`qT{k)vpyc zPz(RBm$bAd;4wij0c+Cde}rMz;NV~^(=*dYWH5y4fxK>TPiRnqd_2>(NT2>sBhg0f%gNXcjpj$ zxk?hn*`LH~W@ZNCUQ!AQHYO%Z8=E?>V+ZJij#)(E9?ZQW!ooOoKhp{d>LQU> zQ%1gw^9XKrWHNdlarjb!7HXy8CgMv)g~y>0B(<$_xsVCJm9@3A1Dat0QsCkF*3&cH z?Ax4>K$_5pi-lG5atTd%o5TnyDgJ$W`uBVz1(TqRDj5;>8hEp;tgO)e%*Mt`AQ*Vs zMIBI}9r-sA_!Jby+1UZE*WmT#QZ%3&m9?~p&6M7bA%vL*MVu~hDiv34XJ==#7QBI3 z;uR-GN8cwT$f>(5Hv6IJG^!cQTgedMQF*!?SB{qT<9L>I38`%a-!jYs*lDK}C z?BS-k-6K?jNW74C0aj7;c*V{O^lo-R!5T=974w$SOpD|6-CdoJ=H$#DKa+nel_D(?7 zgyZem>R}`nc>?yg&*4K68H;f$v>~khTj+>_qN20EvyL%OE#J8HzGnp2jPUz8l<{v; zmz{8EkI+ND3g`cy0LQS<4Qfcdqo#HUoMjx~KH|QAFI5VeC8X*2qh<*jqNvEm#3Uv; zxeoGyVx6*Vk20g?oz>M`NIxtrTy}oc`uX|6RBVM$LQn53=YGt|viHO2o&2S>diQJe z2J4>QUI-$pAP3oR<>Tc&hpdE>ifVRdCNl>nD|4WWO~N%1esA8qf&K$*ilHnbYjHNk zA>|~B3wP`LzyS^SIUo}g5Gi|mIc!k(sg<)F!V%nXCMrY9!z4f>afQebGW4j#yu*Pk z8%M|MKT}4BS|t}3C;*I`q=QOm8Gs@eqIa+ z!u~^4uDnd@?O`F!XUfW;p@ykRhWYL*{IvW3VVR0AI*sjTw2wEyx0M+-yzC_Z)_9SW zz_s_f049gi{r&7fhF`zN4Omj#zh7HdXK8Lui@6KJA4C^SIUzX(eZ$1Wl!%Q5=LWv- zQJx^q$R*rvqpYm#;ZX}2C0tuqcLt&Xa9qt**T#3(R=x^3SpE z{73>e01P80A_8)N21tM>H`v+TZFb%mg=ESOSi9ADPus6$*Q%lO{N?>Q)vkzG6XNnL z8J-fj0SF>LsN`on@fdAyzscOb`7XYis{zfbgn(sRVvkzfhtfVt)M}9O*|UMae_dJQ zVWKrUGjj$ac*R_o%JqP7b#1pqKs}EN3+Zf}1XQJ~r`Ofp&CJNS-*mIpT=#MMq1Wv z`Tt!GxBJ}et-Hs0+xbY&%MPVkx%nYI8A_T?k8AT1Yt%YbOvC^G8%yjkN^?GXxxtr5 iJ9MalKJoY(F?A0)X#V@7Fnrkup&+9o{YlC=;Qs)A#502c literal 0 HcmV?d00001 diff --git a/Media/2020/04.png b/Media/2020/04.png new file mode 100644 index 0000000000000000000000000000000000000000..89acbdf012f79b89c8ea1ecd74901dfc315775b1 GIT binary patch literal 8459 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 K{Abx0!T$%$y|S+W literal 0 HcmV?d00001 diff --git a/Media/2020/05.png b/Media/2020/05.png new file mode 100644 index 0000000000000000000000000000000000000000..821cded5e88409331a5f8b2d0de67f423cf1bb35 GIT binary patch literal 9270 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 literal 0 HcmV?d00001 diff --git a/Media/2020/06.png b/Media/2020/06.png new file mode 100644 index 0000000000000000000000000000000000000000..16e8bb69a19337feec0a9944e6901f24eee2a992 GIT binary patch literal 9494 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 T!&?XMJ0awxlq5^U4SfC&-OtT{ literal 0 HcmV?d00001 diff --git a/Media/2020/07.png b/Media/2020/07.png new file mode 100644 index 0000000000000000000000000000000000000000..df3725c3e1034de7d24905f8ab9a2a660555e847 GIT binary patch literal 8816 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 literal 0 HcmV?d00001 diff --git a/Media/2020/08.png b/Media/2020/08.png new file mode 100644 index 0000000000000000000000000000000000000000..da0cf8bba5f2568760548f1d75e17afd6262f9a0 GIT binary patch literal 9332 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 QG!fPvRb7?0$|&^z05exj2mk;8 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 5dddca0..2eeb4b9 100644 --- a/README.md +++ b/README.md @@ -159,6 +159,33 @@ +

+ 2020 - 16 ⭐ +

+ + + + + + + + + + + + + + + + + + + + + + + + *The above tiles are clickable, leading to the solution of the corresponding day.* From 6731d3ff7ea7cce40f1e09de9e0d9c025c25da33 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Tue, 27 Dec 2022 17:40:10 +0200 Subject: [PATCH 054/225] Add day 2 --- 2020/02/02.rs | 45 ++ 2020/02/input.ans | 2 + 2020/02/input.in | 1000 +++++++++++++++++++++++++++++++++++++++++++++ 2020/Cargo.toml | 1 + Media/2020/02.png | Bin 8445 -> 8792 bytes README.md | 2 +- 6 files changed, 1049 insertions(+), 1 deletion(-) create mode 100644 2020/02/02.rs create mode 100644 2020/02/input.ans create mode 100644 2020/02/input.in diff --git a/2020/02/02.rs b/2020/02/02.rs new file mode 100644 index 0000000..9778cf2 --- /dev/null +++ b/2020/02/02.rs @@ -0,0 +1,45 @@ +use regex::Regex; +use std::io::Read; + +#[derive(Debug)] +struct PasswordPhilosophy { + range: std::ops::Range, + letter: char, + string: String, +} + +fn get_password_philosophies() -> Vec { + let mut input = String::new(); + std::io::stdin().read_to_string(&mut input).unwrap(); + let pattern = Regex::new(r"(\d+)-(\d+) (\w): (\w+)").unwrap(); + let mut philosophies = Vec::new(); + for cap in pattern.captures_iter(&input) { + let range = cap[1].parse::().unwrap()..cap[2].parse::().unwrap()+1; + let letter = cap[3].chars().next().unwrap(); + philosophies.push(PasswordPhilosophy { range, letter, string: cap[4].to_string() }); + } + philosophies +} + + +fn main() { + let philosophies = get_password_philosophies(); + let mut sum1 = 0; + for p in &philosophies { + let letter_count = p.string.matches(p.letter).count(); + if p.range.contains(&(letter_count as i32)) { + sum1 += 1 + } + } + + let mut sum2 = 0; + for p in &philosophies { + let is_first = p.string.chars().nth((p.range.start-1) as usize).unwrap() == p.letter; + let is_second = p.string.chars().nth((p.range.end-2) as usize).unwrap() == p.letter; + if is_first != is_second { + sum2 += 1 + } + } + + println!("{}\n{}", sum1, sum2); +} \ No newline at end of file diff --git a/2020/02/input.ans b/2020/02/input.ans new file mode 100644 index 0000000..b41c15e --- /dev/null +++ b/2020/02/input.ans @@ -0,0 +1,2 @@ +666 +670 \ No newline at end of file diff --git a/2020/02/input.in b/2020/02/input.in new file mode 100644 index 0000000..4951f8d --- /dev/null +++ b/2020/02/input.in @@ -0,0 +1,1000 @@ +2-8 t: pncmjxlvckfbtrjh +8-9 l: lzllllldsl +3-11 c: ccchcccccclxnkcmc +3-10 h: xcvxkdqshh +4-5 s: gssss +7-14 m: mmcmqmmxmmmnmmrmcxc +3-12 n: grnxnbsmzttnzbnnn +5-9 j: ddqwznjhjcjn +8-9 d: fddddddmd +6-8 t: qtlwttsqg +7-15 m: lxzxrdbmmtvwhgm +6-10 h: hhnhhhhxhkh +6-8 z: zhgztgjzzfzqzzvnbmv +5-6 j: jjjjgt +2-3 m: mmmfxzm +6-7 n: nnnqgdnn +8-13 b: bbbbbbbbqjbbb +7-8 k: kkgkkbskkk +1-3 g: gdmvgb +5-15 g: gggzgpsgsgglxgqdfggg +12-16 s: snhsmxszbsszzclp +2-3 n: vhnnn +5-7 l: slllclllkc +2-4 g: rnggggdkhjm +1-3 x: wxcxhxx +7-12 c: cxzcwcjqgcmpccchc +4-5 x: lnfsxjxwxx +9-10 n: nnnnnngnzxnnn +3-4 h: rhhk +3-11 r: xrrcnrjrrzsvrrplr +6-11 r: rrrwrrrrrrrrrrrr +3-4 x: xmxz +1-2 l: lllllk +5-11 h: cmxhhhhhrhd +2-11 h: mhzlzshjvtcrrcf +6-15 g: ggggfgwggkcggqz +3-4 q: qqsc +2-8 m: wmwxvmsmfqlkgzwhxqdv +3-9 b: pnrdsgbbbrbgb +1-7 w: ddqtjwwxgwkqsgswvwkl +3-4 t: lxtt +4-6 g: ggxngg +12-13 d: dddddddddddjjd +10-20 n: nnnnnnnnnnnnnnnnnnnp +15-20 j: kjjjljjjjjjjjjjhjjjn +5-11 r: rwrrrrvrbrrrrr +2-4 w: wwww +6-10 v: vvvbvsvvvv +3-6 d: tkbcdddzddd +10-13 r: rrrrrrrrrlrrhrr +3-6 w: ggsxkwjzfpnmkw +2-6 b: bbqbbq +7-8 t: tztttwtttvt +1-3 t: twrttzbfdhrkvdzgn +4-10 c: jxcxvcpnfccvc +8-17 r: rrrrrrlvrrrrrrcsrrrh +1-3 g: gsggjsn +6-8 l: lllclmjllf +11-15 b: bbbzbbbhbbbbbnbb +7-9 l: lflblhzllml +9-12 v: pvtvrvvvrvvhgmvnv +1-3 t: zbrtjt +5-6 f: ffffcf +3-4 q: cqtz +13-14 n: wnnnnnnnngnnnhpnnsn +1-12 d: bdddmdqcsdhd +9-11 h: hhhhhxhhhjqh +7-11 w: wwwwwwswtkww +12-14 m: mmmmbmdmmmmmmmzmjmv +1-7 x: qdtjxmxhw +3-5 n: nnnnn +10-13 d: ldcrdvcvvxdpd +4-8 m: mrfmwmzgmrp +3-8 s: ssssssssss +1-7 h: qhhhhhhhhh +9-10 q: kqqqqqqmhqqqqhqr +5-6 c: cmcccl +3-4 q: qqqw +2-8 v: vtvvvvvvv +1-5 z: zzzzqz +7-8 k: kkkrkqmkkkkk +14-16 j: jjjjjjjjjjjjjjjs +6-7 t: tttttpc +3-5 s: xsxsss +4-5 v: gvvpjv +3-5 t: vqgft +3-4 c: ccwcc +3-7 s: sslwsss +2-5 t: tnbgprqgzm +16-20 b: bbbbbbbsjbbbbbbbbgbd +6-8 p: ppqppwph +12-13 m: mmmmmmmmmmmml +10-13 r: rrrntrrrrhrrr +9-11 f: fffhffffhfcfmf +4-8 l: lmsrlllllzmlll +4-11 p: sxpnpbzpjppgbn +3-8 c: fcccqmfcccxrhmccw +6-7 s: sqsjdbssbsrssd +3-4 g: gggt +1-3 t: tstnsnksfsbgt +3-4 v: vvvcv +13-18 g: tggggppggggggwgggpg +4-8 m: mmmlmfdm +1-3 z: fzzz +1-12 f: ffzfffffmffrnff +10-11 f: ffkffffffff +11-12 m: mmpmdmmrmmmtmmm +9-11 k: zkkkfkkkkkzkkh +16-19 b: bbbbbbbbbbbbbbbvbbjb +3-4 v: vvvhvz +1-6 l: xllllll +8-15 c: cccccccccccccccccc +10-12 m: mmvmlzrmrnmmmm +1-3 c: whcc +2-3 q: kqgq +2-13 s: sbssscrslnssldsxtssg +2-4 v: bfdr +7-19 c: ccccccccckfgpgcmccf +7-9 f: fxvfffffsf +1-5 n: nnnns +13-15 g: gggggggggggghggg +9-10 w: hdwcwqswpwwwwww +14-17 j: jjjjjmjjjjjjfqjjjjj +2-5 k: pkrfrdtfbvkkrkk +2-3 s: ssss +1-8 d: vsxtlvdqpltcj +3-7 b: nlqhbbb +6-10 x: xfxxxrmxxxdx +5-6 n: nnnnnm +5-6 r: rrrprr +6-7 t: dfttttqtwktttgrkkj +1-2 p: npnf +6-8 p: ppppptppp +4-8 k: bkkkkqkkq +11-12 l: kmlnhhmkdlhl +14-16 b: bmbbbbbbbbbbbcbbb +3-5 r: rrfrrrr +5-10 v: glglvvmvkvvvgvrv +2-3 h: whhcsqjhtx +7-8 d: ddddbpddddhdhdddddd +2-3 k: kkkkkkksgkkkkg +2-6 n: cnrpdmtgwncklll +3-14 s: sssckrswlqxshdts +3-4 w: wwgww +15-19 q: qqpqxqqqqqqwqsqqqqz +1-5 t: vrtkttttj +2-7 z: lmpzjbh +11-15 g: gkghtgpwrgngggggvng +4-17 b: bbbbbbbbbbbbbbbbbb +4-6 c: bswcml +3-4 v: vvxg +2-4 m: mmmmm +2-4 w: kwqwjwt +7-14 x: ghflqcwxcrxzrxm +6-7 f: fffjffsff +11-12 s: sssssssssssr +3-13 v: vvzcvrvjgxvkcvh +3-8 k: jkhgbzgkkfwvt +6-7 l: llltllljl +8-10 p: pppppppkvp +1-12 l: lbhxdplkxdstmllwncnl +2-6 c: cqcwrwnbjc +2-5 v: vvkvvvbbv +3-4 g: ggnkg +3-4 z: rczzhbwmszgzhfszd +8-10 t: fvrttqnwjtft +11-17 l: cllqltnlldcllnwnllll +2-9 r: jrrwrrcjrr +3-5 s: skmsssh +5-6 q: qqqqtq +7-16 k: ktzxwrxcdrmkqfpk +7-12 s: hfsssssssssmsk +3-11 s: gssjsdxdxsqgpns +9-11 s: sssssssssss +5-9 t: xtwthrdtvj +5-7 q: qjqxqjq +2-10 r: zlrrrrrtrr +2-18 w: trwqhcfwrmqwwwqfgwww +2-5 k: kkkkwkp +1-4 s: fqss +1-4 l: xtflz +10-12 q: qqqqqqqqqnssq +3-4 s: sssd +10-20 m: mnmmmmqwmjnpbmmmmbmn +3-5 l: clpln +2-11 v: mhrvdkgsxvvvdxvhgv +15-16 j: jjjjjjjjjjsjjjkj +2-5 f: gzvzffsnxdcf +8-10 m: jmmmmmmrmmmmm +1-2 k: fmhkpmssvdkh +4-7 l: vgtldqpbmmj +2-3 v: kdvcgvnw +15-17 g: ggggggggnggggglgj +4-5 w: kjwnw +6-16 j: fjjrjkbjsjjvljzjjdj +2-4 g: bgvgqs +9-12 k: lkkgkkkkzfkqkcj +6-13 b: bbbbbmbbbcbbqb +7-8 m: mmcmmmmp +4-5 v: vvvvg +11-15 n: nnqxnnnnnqmnnnnfnpn +1-5 z: gkvwtv +4-5 l: llllk +3-4 d: ddss +1-4 v: vvvl +2-3 v: vjcvvvvq +9-13 v: vvvvbvvvvgppv +11-14 d: ldhdddddddwpdddddddd +2-12 p: rrpppwppxjplprpp +5-11 p: spfcjpmplbpzpppgpp +3-6 q: lkqfqcq +2-4 x: xvxwxv +2-12 x: bxxxxjxxxtxhktkx +1-14 c: cccccccccccccpc +5-16 t: qstttfxttmtvvgtzt +7-8 q: kqqqqqwq +5-6 c: cccccdcccccc +7-9 v: dvnbvvjmh +5-7 s: sdssswvr +1-2 t: vtsttt +6-8 d: dgdwdcdd +5-18 j: qjjjjjjtjjjjjjjljlj +2-16 r: ksrtrrrrrlchrljrz +5-7 m: mmmkmmvmxbflctjhhfxc +4-10 f: mfftfrfffff +6-12 x: xxxxxxxxxxxbx +9-12 s: ssssssssdsshs +12-14 v: vvvhvvvvvzvvvrzvlvg +14-17 d: ddhdddddddddddpdd +1-5 c: rcchc +1-9 n: npnnnrxnh +1-4 n: mnnn +2-3 q: qklxpwr +7-8 j: djjjjfjnjjv +4-5 h: hhrcbhc +6-8 t: txtfclvtz +8-11 w: grhwwqwhwwww +1-5 r: rrkrxl +3-6 v: jgtdsvlpgx +14-18 r: rrrrrrrrrsrrrhrrrr +5-13 g: xggsggggggggggn +18-19 x: xxxxxxxxxxxxxxxxxfx +4-5 n: dpnnnwnntpwgntqnj +4-12 c: ccccmcccczrspfrcpx +15-16 h: hwhzhnhhhhshhhhhhhhh +3-4 v: vvvg +3-4 j: jpjs +10-13 h: bhhhhhrhhhhhsdh +2-4 v: svvclvv +12-13 k: zkkkkkdskkkpkwwkk +8-9 b: bxbhjbbjb +1-10 k: kpkmkstkhtkl +5-6 d: qddddx +1-3 m: mmmm +1-5 r: trrrrrr +2-5 l: llvlnlllm +9-18 d: dddjhddddvdddtddddd +9-20 j: nxfjfjjbjjljjjjcjjjj +5-7 v: zkvvzpxvtctvmcvvvvv +1-6 d: lmcmvwdwq +1-5 v: dbdvv +6-11 n: snnzlnnnwnd +11-17 l: lwlltvlplldlllllsll +6-8 k: kkkkktkkp +9-14 q: nclswjgmqwvhjrs +7-10 c: cgccfccccl +2-3 z: zqkzzj +14-15 v: vvvvvvvvvvvvvvg +7-9 z: zzzztzzqtz +11-17 n: vnnnnnnnrnnnnnnnqn +15-16 l: lllllqlllllllllz +1-14 t: pgskddftttttxtflt +2-3 d: bdpqd +3-18 k: dkkpkkkkkjjtjgkkkxs +6-10 p: qlptppdjppllppp +8-9 s: sssssssss +11-16 q: qqjqqqhqqqqqdqqmq +7-8 p: pprqppvhpqp +5-12 q: qqqqbqqqqqqqqqqqqq +1-5 b: wbbbjbb +9-17 m: fdhmxtmmccxpmmfbmtbm +2-5 b: tbbptwkghzvsbvcb +12-16 w: wwwwwfwwwwvwfwwww +4-5 h: hfhggh +11-16 z: zlzzdrzzxtxzzzzqz +3-6 x: xxwxxm +3-9 w: vmpsthqww +5-9 q: qqqqpqqqq +17-18 g: gggggggggggggggggw +3-8 s: sscmsssssf +7-15 v: vvvvzvttvvvvvvgvvvv +14-19 h: mdpmhtmhsdsxxhthhhd +1-3 h: hbhcbvhxfmjqdgt +15-17 p: xmnhkrgcxxrdtpprzhfh +2-5 w: dqqrwwbvq +16-17 c: ccccccccccccccccc +1-4 p: plcvxpp +10-15 b: bbbnbbbbbvlzbvgb +9-10 g: gggwggggcp +3-4 d: dtdcd +1-5 v: vjslbjjtxldvvknn +2-4 n: fhgnl +2-3 x: xnjm +3-8 j: tzvjbjvxchjk +1-10 g: wgggggghghggq +5-7 q: dqlwqqqkqqhq +6-7 d: dddrddhdld +2-4 x: kxbxxmchtx +1-2 w: wwjg +19-20 r: hfjrqwdxppgzppwchrjr +10-16 r: rrrrrzrrrrrvrrrt +1-3 m: cmmlm +14-17 h: hhhhhhhhhhhhzhlbphh +2-4 f: bfhf +3-6 j: mkdmmmpjjbqmk +6-7 x: flxxxqxxx +12-15 q: qqqqnqqqqqqnqqs +9-10 w: wgwdwxrlwgwwwmwwcgd +6-7 k: kdnrppkkkkkkrj +2-3 n: pntsmsnb +1-5 c: cqcctccqcccccn +9-10 f: txffffffffcff +2-6 b: smtckkcqrsbkzjbtpbtb +10-14 k: kkckkkkkkhkkkd +9-11 m: jnwmbmjmmqsfz +9-10 h: hhhhhhhhhh +5-6 h: hhhhhvh +3-6 c: cccccr +10-11 l: llllllgplll +6-11 r: prprnrrrqrr +13-14 p: pppppppppppphp +5-8 j: pkjjqjjjjh +7-9 f: zfjfcfhcfkffffxv +9-10 w: wwwwwwwwwhw +2-3 z: tzszz +2-3 t: ntdt +7-10 l: llllllqllkl +4-10 j: bmsjjtjjjlbp +1-3 t: kbrxpnstztz +2-3 h: chbwpmvdh +2-11 p: qwqzlpdbpvpxp +8-11 c: tzcbpcccgfj +4-5 g: rgcdg +1-8 t: pwtkzttdlrd +2-3 l: ldlrvsl +4-5 j: jjjrj +2-4 k: vkfk +18-20 v: vvvvvvvfvvvvvvvvvvvj +5-11 w: gbjwwwwzxsl +10-12 d: ddddddddddqd +1-4 r: rrqr +7-8 p: pppppzpp +7-8 c: cccscmcfch +6-7 c: crncccvtc +6-8 z: zkzlxzcb +3-4 h: hhfs +12-13 t: ttttttttttthmt +2-12 x: xdxxxxxxxxxxxxx +2-5 n: cnnnknnn +10-11 x: xxxxxxxxxsx +3-9 q: fgfqjqxzqtlqqmgk +1-4 g: gzsk +11-14 h: hhhrhwhhsqhchxclhhh +5-15 q: nqzqqqqnqkqfqqqqqq +10-14 b: bbbbbbbbbhbbbqbb +5-6 v: rpfvdvjvvvvvdxjgwc +6-7 r: rrrrzwrhrdv +3-4 f: fffb +9-12 q: qqqqqqqqqqqqqqqqq +15-19 c: cccclcccxcccctccccs +2-3 b: jbwqq +5-6 h: hhchpm +11-12 f: fffffffffffl +5-9 s: fsggxprbsssklhhbsl +12-15 f: ffffcfzfffkrfffnh +1-2 s: fstz +1-6 b: nbfbhb +2-11 k: xfdjrwptgrkk +18-20 k: kkkwkkkkkkkpkkkkkkkr +4-8 r: rgcsrgkdrrrrtwr +3-5 k: kkkkvgkkkkn +9-13 b: bjgbkxqzbbbjtbx +1-2 n: rmbgdnjt +3-6 k: kqnkkk +3-6 c: gzggcpxszscccccc +15-17 r: rrjnrrrrtrrrrhrrxrr +11-12 d: dddddddddddx +4-8 s: sxztltlssksqwthss +12-13 l: llxllllskllqvdlll +4-6 j: cjxdvjjlx +1-4 t: mwttttttttttttt +7-8 p: pbpdpbdpmppjpp +11-13 l: lkjlgdllkllvnl +9-10 b: sbbbbbbbrb +9-13 l: lzlllllllljlllll +6-7 r: tnkpjrhkxzdzwwxv +1-4 x: hdnxxlx +4-5 b: kvhwb +1-2 p: pxmhbcp +2-5 s: csgfssjssstcq +3-7 k: htnkkhprxkc +14-20 c: rlkhpgccjsjchccjmkbg +2-3 t: ttxt +13-18 p: pppppppppppwvppppq +9-10 j: jjqjjjjjdbj +10-12 m: mmmmmmgmmlmm +5-11 l: qrwgblsqjxtll +1-5 m: mqwnn +7-12 p: pppppppppppppppppp +4-8 d: bdrntdzdd +14-15 g: gggggggggggzggc +3-4 m: mmmc +2-9 d: hsqjddjfdcqzsjr +5-9 h: hhhhsffhk +5-7 f: ffffcff +6-8 z: wzkzzzzjzzczg +2-9 q: dqqqgbqdnlfqqws +6-11 m: mhmmpmxmxtxmp +7-11 n: nvjtglngnzmbnnqjnjgp +11-12 v: vvvvvvvvvvdg +2-3 z: vmzz +6-8 z: zzzzzzzbzzzzzzzzzzz +6-13 k: hkvkhpkqkkkkwsdkmk +1-9 k: gkkkkkkkkk +2-5 g: gngggxg +12-14 m: mmmmmmmjmmmrmhm +1-6 f: cqffffsb +10-11 p: xppxpqbplpp +3-17 j: wdjldqqbxqxbcrbkjfth +5-8 w: wlhwvkwwwzkww +4-6 t: vtthtt +6-9 m: rkmtgbzrfmg +10-11 g: gggrgggsggbgmg +5-7 x: xxxxrxdxx +9-12 k: kbgkkgpkkrkkqv +10-14 z: nzzwjznbpzztzm +7-16 t: ttttttwbtltttcltt +13-18 l: lllllltllllltllllll +5-18 v: mvvvzjvvvvvmvvsnjzv +12-19 b: bbsbbbbbbmbbbwbbbbdb +15-16 n: nndgcnnnnnnnnnnpnnnf +4-11 j: gqdkjblvkgbwjjmtfjg +12-13 s: ssssssstssmpbsss +5-7 j: jmgxjjw +4-9 p: pptlvpppp +13-17 q: fqqqqqqqrqqqhqqqqngq +4-6 j: xzjcxjjpcrl +4-10 w: swwwspwwql +10-13 s: sssssssssjsss +2-4 k: nktjkkkm +2-6 z: vzqzfzncz +4-10 l: llplslghlwvlh +5-6 d: ddhdvqd +5-10 r: rrrrrbrrrjrd +1-5 d: ddddn +2-4 t: tttr +4-7 d: dsddpdkfsdd +3-8 r: klrclrkzbrrscrpd +16-18 j: jjjjjjjjwjjjjjjzjj +18-20 p: tppjpppppppppppppcpp +9-11 m: mmmmmmmmmmt +8-12 d: dtxdvddpddmq +4-8 d: qdcddddcd +16-17 w: wwwwwwwwwwwwwwwzwww +3-4 v: hpvhvvpvxnd +3-5 x: dpxxj +18-19 d: ddddddddddddddddddbd +13-16 z: pzzzzhzzqzzzmzzzzzg +2-6 b: bglglbnbdb +9-10 t: ttttttttxmttt +1-7 g: fgggvgm +8-11 t: ttmrwtttttp +7-8 d: ddxddddrddddgdddddd +1-4 p: mpdbdkghzqpkpxbp +8-10 d: dddjdddzdxd +3-4 l: lllwl +6-9 m: mmmmmfmmm +2-6 d: dvjddj +5-19 n: ctnnnnnnvngnnqndwnn +4-7 z: zzwdzdpzzd +9-12 w: wwwwwwwwkpwww +13-14 t: tttttttttttwztt +2-3 z: zzwp +4-12 q: hqtqshlcjsmqjrt +6-13 s: bssqsssstflsw +15-16 l: llllllllllllllllll +9-10 c: ccccccccgq +14-15 m: mrmmrmmmmmbmmmcmm +1-6 r: rrrrrcrrrrr +4-6 s: zqrdvshjbgpssj +3-6 h: mmhxthhbshhb +17-19 q: qqqqqqqqqqqqqqqqrqqq +4-12 x: fqvxcghgqxkwx +2-5 q: qqxqdrjrqxkfmq +3-8 z: wfzzzzzz +6-7 c: ccccqmc +1-5 h: hhhhh +3-4 f: svsf +7-8 x: xxxxxxxsx +4-8 g: gggggggngggg +4-5 w: lwwwx +2-3 g: ggsqg +4-6 q: qqqqqq +3-7 j: jtjdjncjq +7-9 k: kkkkkkkcf +4-11 z: pvdzfbzxzfhbf +6-17 n: nnvnnxnnnnnnnnnnnnn +2-5 c: ccrlttnnccdlcmjvx +3-9 l: llllllllpl +1-2 c: vccc +2-6 c: qfcncx +1-3 k: kkvkkkk +1-5 q: qqjkhq +3-8 p: pvpppzpgpp +4-7 b: bbbbbbhbb +8-15 x: xxxvxlvxxdknxxxxx +5-6 n: nnnnnv +4-7 h: hhhbhhth +9-16 h: hxhhhhhhqhhhpbhlh +8-10 k: kkkkkghkkkwnk +4-12 w: bwwwwmwwwwwmwwwwswww +1-5 q: mzhmqtzlbzvtlwqzpxf +11-12 x: xxxxxxxxxxds +16-17 s: sssssrssssssssspwsw +1-4 q: qwqcq +1-12 w: wwwwrpwwwwwqwwmwlw +5-6 m: tlgzvmqcjt +12-18 c: ccccccccccccccccccc +6-10 g: jpgggdgbddgg +11-14 w: hwwkxwhhkfwcjfdkkwfn +3-4 n: nmdnlnbjxcjsp +3-4 w: bwvj +12-14 f: cmqznmfzlsbpfd +1-3 t: txsttsttzqls +3-4 w: sdsw +6-12 b: sbfbqvbbbstb +17-19 g: nggggggggggggggxngtg +15-17 h: hhhhhhhhhhhhhhrhh +2-3 p: ppcpp +5-9 n: nvnnncqnnhnn +1-4 r: rzrrrr +2-10 b: zbbbkbbctkbbwngbbbsl +1-3 r: rrpn +3-6 q: mmlqxqqq +12-13 x: xxxxxxxxjqxkxtxx +3-5 l: nlllhpcc +3-11 x: jxxgcxxbfxpxxfml +3-6 l: nllqlln +9-14 j: jjjjjjjjhjjjjj +11-13 j: jjjjjjjbsjjjj +19-20 k: kkkkkkkkkkkkkkkkkkkv +7-11 n: ndnnnnxfnbnnnn +5-6 g: gggtgh +1-9 f: nfffbnffffc +4-6 d: sdxlgtrmd +18-20 n: nnnnwnnnnnnnnnnnnhnn +9-11 j: jjjdjljjjljtj +3-4 z: bwcsnqzzz +1-4 j: jzjj +9-13 k: cdvwnnwqklwplbzk +5-9 q: hvqpqqtqh +2-7 f: vdkrwpz +12-13 z: zzhzzpwmzzzzq +7-13 s: nsssssfssssss +4-6 s: kgmksst +17-19 p: pfbcgcnxkbpptcbxpsp +12-13 s: ssssssssssspm +11-12 g: gggggggvggsg +6-8 g: gggggzgz +1-3 j: jjjj +5-7 d: ddddgdd +6-7 r: kmrjsbpkrrnpr +6-9 m: mmmmmmmmmm +5-6 b: bxbbvbb +5-10 h: thxgvlhchhzhnfhhhhh +11-13 l: vcllllnhlllvvllll +1-9 j: wjjjjjjjnjjjj +4-8 n: xnlbndngnn +4-5 f: fffmfz +7-8 c: pwmzcxvc +15-17 z: zzzzfzzzzzzzzzzzx +4-8 d: krddfddxddd +1-2 w: wpzxcbxmcktpjmspw +4-14 t: ptcdtvtttbpwtttt +8-13 f: fmfkffdffqfff +6-7 j: jwnxpjlnrlxdjxvzhsll +2-5 m: mmmmmm +3-4 c: cccc +3-11 f: fffrvfzqnmffd +3-5 k: kkxrkkk +5-8 k: kkkvskvkkkhsk +12-14 k: jkkkkdkkkmfzkknkpkk +1-2 h: vhspjh +3-4 p: pppn +5-6 v: vrvdvg +7-8 j: jxrjjjtdjjj +3-12 z: fzzxzgzzzzzhzz +10-12 v: vvvvvvvvgvxxv +12-13 k: kkkplnlpvwkkkkkt +4-8 t: dvjtltttptt +15-16 z: zzzzlzzzzzlwzzzhzz +15-17 n: nnnnnnnnnnnnnnlnn +12-15 z: zjzzzzzzzzzzzzs +7-8 x: hzxnxlxlfxxxxvxxxnx +9-10 r: rrrrrwrrrp +1-7 r: vrfslcr +6-15 t: tttttsttttttttt +3-6 j: wjjdnjznwfclpskvdq +2-4 v: vzlvls +9-10 j: jjjjjjjjwj +8-9 r: kxrrrtqnr +14-16 h: hhhhhhhhhhhfhlhjhhh +14-15 x: xxxxxxxxxxxxxmx +8-10 h: hhhhhhhhhhh +10-11 m: mmmmmmmmmnnmm +3-17 r: fwmqrcjkgrkhzcnfrb +1-15 q: qqqmqzqgcnrqqlkrq +2-13 w: wdwwwwwwwtwww +1-8 l: lllbllln +4-7 n: nnnnnnbnnn +11-18 l: lkllnllqktnllzllll +4-5 d: gddbrlb +12-13 l: llllllnllllztl +2-6 m: lbhptlvgcsmksqspmtk +1-2 t: wtctt +3-4 w: wwbw +9-12 g: gcggvzggqzgggggsgnt +2-6 b: bbrcbc +9-12 m: mmgmkmmmbmmm +14-17 m: mgpjmmqmmmmmmmmmt +6-8 p: dpvzpskp +12-18 x: xxxxxxxxxxxtxxxxxf +7-12 r: xvjvrrrprrrvrrrcbr +3-5 q: rqqxhqq +6-16 s: ssssskssssssssssss +6-9 c: cccqccccxc +8-16 r: rrrrrrrrrrcrrrhr +5-9 t: ctwttthtjl +16-18 t: ttttttttmttttttttgtt +13-16 t: zrtttgttttttmttttt +6-10 k: kntkplgkkkkkmh +2-4 c: vhsccfcc +1-4 v: vvvqvvgpvvvvvzzv +3-4 g: grgvgd +5-9 p: pppbppppdv +3-4 x: lxxxx +8-9 q: qqqqqqzqqqqq +14-15 c: cpcccccccmcccdcc +7-10 p: ppfppppppppg +1-2 h: thrk +1-3 m: mzlzmtmqrm +3-5 x: xxxxp +4-6 t: gtstvvjzqtxdtsrfc +6-15 p: pppwppwspppcppn +4-5 g: tkhgj +10-14 m: mmmmmmmmmnrmmmm +2-3 b: pnbxfzxxbbrt +5-16 b: tfvlbmbzbvxbtdjl +16-19 w: wwwwwwwwjwwlbwwvwwwr +14-15 w: wwwwwwwwwwwwwgwww +3-6 n: npvzfntbfvngns +8-10 s: sgsssssssz +2-5 n: nnnkcnkn +12-15 n: nnnnnnnnnnqnnnq +1-4 p: qppk +5-10 h: ghdhhcsxtzsdphwh +5-7 k: kkkkkkb +10-11 f: ffhlfffcnffmfrffcnff +6-7 f: fffjfxf +11-17 j: jjjjjjjjnjjjjjjjj +2-4 z: wgrdp +5-6 d: dpmdddfmxzgwd +8-12 h: qhhhxhnhhhsmhlhh +7-19 w: wwwwwwwwwwwwwwwwwwmw +1-4 x: mmlxlc +1-9 g: mgggggggggggg +1-12 z: mtkfgpzmjrgs +7-8 v: vvvgvvzvd +10-12 j: djjjjjjjjbjj +3-4 r: srjsfjbrp +1-4 r: trrr +3-8 j: jjjjjjjpj +6-7 l: lltllwl +13-14 g: gggggggggggggg +1-4 w: wwrxww +1-10 l: xfllllldll +5-7 s: xmwsqpsr +6-17 p: pkpnpppznppppplpl +11-12 s: sssssssssdsf +14-19 c: bsxlpshjmwcflcdhlhcr +8-12 b: xbnbbbbbmbbkbbbb +14-16 w: wwwcwwwwwwtwwswww +13-14 f: zfsfbbffffffsf +13-15 s: swssssssjsssxss +1-3 v: vvnvxrwbrbgdc +8-10 t: mkstnqtttt +14-15 g: gggptgggggggggtg +12-15 r: rrrrrrrrrrrrrrkr +2-5 w: cjwpg +13-14 w: wwwwwwwwwwwwqw +5-12 s: bkrrcczsgsfshpwjr +4-9 w: wwwwwwwwwsnw +3-4 x: xxxzv +3-6 g: rggghqvgfk +9-12 h: hhhdhshwhhkrqhh +8-11 q: zqqqqqqmqqhq +5-7 j: ngxjlbhjjjj +8-9 p: rpxpdqcpkp +11-13 d: htbdddddddjdddd +2-3 p: hpbp +3-4 x: xxxq +4-7 m: mmmlmmm +7-8 r: rrrrrrqr +9-11 x: xxxxxxxxxxx +5-8 h: hhhhflbv +1-2 k: vkrkzjpwtbk +8-10 p: pppppppxpg +9-10 h: lhbhhhhhnqhh +3-9 x: xxmqxxxxgx +17-18 p: ppppppppppppppzpqwp +8-9 x: xxxxxxxxx +1-6 l: lrblvjllhll +1-4 k: klkk +6-8 m: mmmmmbmmmm +1-6 h: hhvhqkh +5-7 n: nnnnwnss +6-7 k: kkkkkzkksl +6-9 b: bbbbbbbbm +9-14 k: kbkkfkkkkkchtklkg +3-4 f: fcjpff +6-12 f: fzfxfrqlvhwflfglftpb +7-8 j: djjjjjjsj +13-15 v: vvvvvvvrvvvvvbvvvvv +2-11 p: qpnpfmppphxpp +3-4 g: ggwgg +1-4 q: nqqq +4-9 t: thpqpkxntg +1-16 l: dllllllljlllllllll +3-8 w: dbwwhxwzqwph +13-15 p: ppppppppppppqpm +4-5 b: bbmbqbthmbn +2-4 d: zddq +2-7 x: vpmchtzdbxxxxnxd +11-13 x: xxxxxxxxxxjxxx +7-9 m: mmdjmmmnm +10-12 j: jjjjjjjjjjjx +12-14 j: wfcvflhjvblzdf +2-12 j: lqfjjjzncbgjhj +2-7 j: jtlfjqjbjgqrxgjm +4-5 t: ttttc +5-8 v: vvvvvbvpvv +4-10 b: qghbgkcbbs +12-14 n: nnnnnnnnnnnnnhnn +13-19 v: vvvvvvvvvvvrvvvvvvv +4-16 z: znzvzzzwgzzzzzzzzdz +4-13 q: qqqlqqqqqnqqlqqm +9-10 q: qqqqqqqqrs +2-12 q: qpqszqxqqqqkq +10-16 v: vvfvvvvvsxvznfvv +1-3 f: fvjpkglwfjbcgnbc +2-7 v: vfvqvvv +6-8 l: llllcllllll +9-14 v: vvvvvvvvzvvvvwb +10-11 s: ssmsssssssxsls +9-10 b: bxbbfbbxbzbzjbbm +3-15 x: xcxxxxpxxxxxdgxg +10-13 k: kkkpkjmkscgxkhkbkgd +2-4 j: djqhc +9-10 c: cccccrccds +7-10 v: vvbvvvvjjpvkv +13-16 n: nnnnnnndnnnnqnnsnnnc +2-4 g: qfgg +3-13 v: hvvvvvzrvqvcpvvhj +5-12 n: rnsnnpnnnnntnnn +7-8 p: pppptpppp +1-6 d: cdddqdddddd +3-5 h: cwzhhhbwlhtd +8-17 j: jnjdscnljmhrljrjjmjj +3-4 j: jccj +4-14 m: mmjkmmhwqbkjqmg +2-4 b: bbbd +4-7 v: vhlvvvq +1-4 p: jppm +9-12 g: vggzgppggggnggcdfp +5-6 r: rrrrrp +6-13 t: bxztttrtbttrm +17-19 d: ddddddrddddwddddpdk +1-3 w: jwjwwc +5-6 k: kkkkkk +5-6 f: ffffjxff +8-10 x: xxxxxxxwxl +6-8 q: qqqqqqqq +5-8 d: fddtdbfdkddddddjd +7-15 k: kkkkklnfkqkkxqkkvkk +2-5 x: cqzxxx +3-4 j: jjjb +7-8 w: wwwwwwlw +18-20 g: gggggggggggggggggggg +10-11 w: hwwwwwwwnwmwws +2-10 d: xsdjqqrqzdnhgmvlhkgm +2-3 s: rsxhms +7-8 n: tdnnznwpnnn +10-12 g: gggggggggggg +7-13 z: zfxzqzzmzzzrndzkvz +11-12 k: kkkkkkkkkkkk +6-7 t: ttjxxtc +4-6 n: nwzlfxnnn +4-6 j: jjjdmj +8-14 p: xgspprprpppppppp +6-7 k: kkkjkkzktn +5-8 d: dddddmdt +4-6 j: jfhjjb +3-4 k: jrkckdwqjbcctpklm +6-9 w: wwwqwxqwzkwgwwwvqbs +1-4 t: gthttttttt +3-4 h: bhhb +4-6 t: ttqltktv +11-17 v: vvvvdvvvvvpvvvvvvvv +13-14 d: ddndddwddkcdvkddddkn +3-4 b: xhdb +3-7 w: zwcptvwlkswv +8-11 p: pptpppppppm +5-14 p: wpmpnplrppppppptp +1-3 q: stqdkc +10-11 c: ccccccccccv +1-7 s: msszslsps +12-14 h: hhghhnhhhhhhhmh +14-16 g: gscwmsggggdgggmg +7-12 z: htztzwzzkzzkrzzzlz +3-6 n: dcnnvn +3-7 k: kkkkkkj +2-3 m: vmlkkjn +12-13 r: rrrrlrrrrrrrrr +6-7 z: zzzzhxxczzsd +2-7 g: htjgfggbllbgxggq +13-17 m: xhhnpmdxfpvsmjzwb +7-9 h: hhhhhhhhjh +3-4 z: zrzzz +1-5 l: llgwlszllvxxmflglldt +7-9 v: vvvvvvmvcq +5-7 r: rrzcwsmrrgrwxnrg +14-16 t: twttpttntttttttlt +7-14 j: qjsmcdzdqjgjpjjcjj +2-3 s: sshscbks +3-10 p: vppkpwpplpvp +2-5 t: ftrrt +3-7 c: cgrsczccpcpcc +9-10 v: vvvvvvvvvxvvvvv +2-3 v: vvsvw +9-11 d: dddddxdjddbd +3-4 p: pdpgrpj +9-10 p: pwppppwpvpp +4-18 r: hmrdmwvrnggrcgrsrrwg +3-4 n: nnnnnf +1-8 x: tblrxhhxwjb +10-19 f: ffbffffpfffhfksflfkf +5-12 s: sssjtsssssss +5-6 z: zzzzfz +7-8 n: nfnnnnrn +8-9 x: xxxcxxxxx +4-8 x: tcdxxxxdx +3-4 x: xxwc +6-8 h: whnhrvdlhhhhhhhxkd +14-15 q: qqqjqmrnnqktdtq +5-9 f: fhffkhfxhc +6-8 c: cccccccwc +17-19 s: ssssssssssmssssszss +10-12 f: hffffffffzff +6-7 k: nkmkkdkk +4-9 v: bvvvvvxvwnvcv +19-20 v: vvvvvvvvvvvvvvvvvvvv +4-8 h: nhnhhhhvtvfh +12-13 l: lltllllllllqll +13-17 s: ssssssssssssnsssgs +6-9 g: gdvctgcgzgrgf +13-15 w: wwwwwwwwwwwwswb +4-8 l: lllfllcglllljl +8-9 q: flqqqqqrrqq +4-5 w: wwwmww +2-5 v: dqkgvhlmqvv +6-8 g: gvtggvgg +3-11 t: ntvttnqtgltttttt +3-7 m: mmqmjmmm +9-13 d: dddzddddddddndd +3-7 j: jjqjhjt +13-14 q: qqqqqqqqqqqqbq +5-11 x: lxxxhxxxckxx +5-6 q: qnqqqwqqq +2-5 z: hzzskzzckj +2-3 j: jjzm +3-4 g: wggs +1-3 v: vzsbsvv +2-4 z: mrnz +16-19 x: fxxxxbxxxxxxxxjxxxf +6-7 x: xxxxxtx +1-6 v: qvrvvvv +4-5 w: hwwdww +3-4 d: tljd +6-13 v: nvcdjvjrvvvmqj +6-10 v: gfqjlnxfvhw +6-8 f: kzvffvffff +5-6 r: rvrctrrwcrvr +6-11 s: csfcvsxhgcsvh +8-11 b: bbbwwmdbbbjjbtb +5-13 x: lvxxbvtxbhvdx +3-6 h: dhhhvmscwwbhbrbk +4-5 s: gmpqsw +2-12 z: pzncbwqpfbhsfzzz +5-6 w: dwwbwqhgb +2-13 l: llllllllllllcllllll +1-9 v: vjjvvvvnvvvtvvd +12-14 f: ffjffzftfcfrffbf +2-5 b: brwzbs +6-10 s: tnfszsnjvbwzzhtwqg +5-6 p: pfkppppppppp +3-5 n: vstnnnprjn +9-18 s: sssssssssssssssssr +1-6 d: wdldddnvdndfqvd +3-5 t: kttjlcpttzt +5-7 z: zzzzhlzz +2-9 p: ppppppppjp +7-9 v: vvzvvvvvvvvcv +3-6 r: zrrtrrfpwgzbrtskt +9-12 s: mptshmsssssslssss +5-10 c: nccmccchjjthdtlcj +18-20 r: rrrrrrrrrmrrrrrrrxrr +2-14 f: frplctstcgdfff +9-15 h: hfhzhhhhhvmfjhhfjhhh +1-6 w: wwwwrpm +4-6 f: hfffhcfjfszdzbbg +7-10 w: xwwwwzhwrpwkw +9-10 r: rrrrrrrrzr +14-16 n: pngnnnnnnvnnnnnsnn +14-15 p: gppppdpppjppzptpppp +1-4 n: wnnnnnn +12-13 t: tttttttttttgt +4-5 n: nnwsd +9-10 l: vlllllllln +5-16 p: pppfxpxpspppmpkgppp +1-10 v: vlvvtvlkvmgcdwvvtrv +14-15 s: ssssssssjssskrg +4-5 n: gxnnnn +4-10 b: lvbqbjbbbbw +5-6 k: xkrkfldcs +5-6 n: nnsnnznfjnf +6-9 v: gqvvmvvvpb +14-18 f: sdffffwffflffsfffn +2-4 m: mmdm +11-12 g: ggnmgdmfhrpgzgr +14-15 z: zzzzzzhzzzzzmzcz +7-13 s: ssssssstssssj +4-6 g: zgtbcg +2-7 t: rttskmdpmvk +6-20 n: nnkpnnnlnfnnbnpnnnnm +9-10 w: zfpwwhwjwdwwwpwwjww +3-9 d: ddldddddwdddd +4-5 f: hfftmfcq +1-2 w: zwbjt +7-11 g: cggggkxggvgggtbmm +5-9 d: dwgfdltddgndwd +3-4 b: rbrbb +6-10 z: fzzzzxzzkzxz +4-5 z: zzhzjzffcz +8-10 x: wwsxdbkxgd +9-10 t: lttttfttdtttc +13-17 d: dddddddtdnddddddrdd +13-15 w: wwcwwwwwwwwwlwdwq +4-18 r: rvrrrkwtrmrbrrrzfwlj +11-14 j: jxjjjjjjtjjjjjv +8-15 m: mkmmlmmmmmmmmrqmmm +1-3 g: gsng +3-11 n: ttdplnfpkmnrwcrqwbvr +5-10 n: wgnqrlcnnnnnnn +7-9 c: jgwbrcclt +1-4 l: flml +8-13 s: sjssqssrgssrz +6-7 x: xlxbclxxxzxbwqx +12-19 g: qlzcctgmgfmrvxgwvgzj +4-5 w: wwwrr +11-18 m: kmgxmjskmmmmmmmmmz +12-16 f: ffqlfhzflqffffkfz +1-6 k: kzkhrfxkkk +10-11 x: vxfxxxbxxxxx +4-6 d: gvqdwrclzsdmhglrz +5-9 d: dwjddjddd +1-3 n: ndcqcn +4-5 r: rrrrh +5-10 g: pkbxgvczgn +4-6 w: wggwpfww +2-4 g: glgggg +7-8 h: hhhhhhhh +12-16 h: nkvzdqlbsptvnrzh +8-14 w: bwlwbwghwwwwtwwl +4-11 q: vqsllpqnqdcbbtvqrqxb +2-5 x: xkxxx +4-10 c: cccjncjsccr +10-18 h: xkswshrhghxlnmhqzr +5-18 k: kkkkkkkhkkkklkkkknk +9-10 t: ttttttttnt +10-11 x: xxxxxxxxxcv \ No newline at end of file diff --git a/2020/Cargo.toml b/2020/Cargo.toml index a4fe7a3..d7e16ab 100644 --- a/2020/Cargo.toml +++ b/2020/Cargo.toml @@ -6,6 +6,7 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +regex = "1" [[bin]] name="01" diff --git a/Media/2020/02.png b/Media/2020/02.png index db4027420fc1cdaac5e95a0f3e478ea03b0ecb70..60343fe1fc8c48edf76a345a35caa4bda0839fea 100644 GIT binary patch literal 8792 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 Cnbw8n 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 diff --git a/README.md b/README.md index 2eeb4b9..b5df77b 100644 --- a/README.md +++ b/README.md @@ -165,7 +165,7 @@ - + From b66c7358eb0149cef5676749600f51d906643bee Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Fri, 1 Dec 2023 08:13:53 +0100 Subject: [PATCH 055/225] Add day 1 --- 2023/01/01.py | 13 + 2023/01/01.rs | 47 +++ 2023/01/input.ans | 2 + 2023/01/input.in | 1000 +++++++++++++++++++++++++++++++++++++++++++++ README.md | 6 + 5 files changed, 1068 insertions(+) create mode 100644 2023/01/01.py create mode 100644 2023/01/01.rs create mode 100644 2023/01/input.ans create mode 100644 2023/01/input.in diff --git a/2023/01/01.py b/2023/01/01.py new file mode 100644 index 0000000..503a01e --- /dev/null +++ b/2023/01/01.py @@ -0,0 +1,13 @@ +import re +from sys import stdin +s1, s2 = 0, 0 +digits1 = list("0123456789") +digits2 = "zero one two three four five six seven eight nine".split() +as_num = lambda num: digits2.index(num) if num in digits2 else int(num) + +for line in stdin.readlines(): + nums1 = [n[1] for n in re.finditer('(?=(' + '|'.join(digits1) + '))', line)] + nums2 = [n[1] for n in re.finditer('(?=(' + '|'.join(digits1 + digits2) + '))', line)] + s1 += as_num(nums1[0]) * 10 + as_num(nums1[-1]) if nums1 else 0 + s2 += as_num(nums2[0]) * 10 + as_num(nums2[-1]) if nums2 else 0 +print(s1, s2, sep="\n") diff --git a/2023/01/01.rs b/2023/01/01.rs new file mode 100644 index 0000000..9fc8c81 --- /dev/null +++ b/2023/01/01.rs @@ -0,0 +1,47 @@ +use std::io::Read; + +// fn read_nums() -> Vec { +// let mut input = String::new(); +// std::io::stdin().read_to_string(&mut input).unwrap(); +// input +// .lines() +// .map(|line| line.parse::().unwrap()) +// .collect::>() +// } + +fn main() { + let digits1: Vec<_> = "0 1 2 3 4 5 6 7 8 9".split(" ").collect(); + let digits2: Vec<_> = "zero one two three four five six seven eight nine".split(" ").collect(); + // println!("{:?}", digits2); + let mut input = String::new(); + std::io::stdin().read_to_string(&mut input).unwrap(); + + let mut s1 = 0; + let mut s2 = 0; + for line in input.lines() { + let mut nums: Vec<(usize, i32)> = vec![]; + digits1.iter() + .for_each(|digit| line.match_indices(digit) + .for_each(|i| nums.push((i.0, i.1.parse().unwrap()))) + + ); + nums.sort(); + if nums.len() >= 1usize { + s1 += nums.get(0).unwrap().1 * 10 + nums.last().unwrap().1; + } + + digits2.iter() + .for_each(|digit| line.match_indices(digit) + .for_each(|i| nums.push((i.0, digits2.iter().position(|&x| x == i.1).unwrap() as i32))) + ); + nums.sort(); + if nums.len() >= 1usize { + s2 += nums.get(0).unwrap().1 * 10 + nums.last().unwrap().1; + } + + } + println!("{}\n{}", s1, s2); + + + +} diff --git a/2023/01/input.ans b/2023/01/input.ans new file mode 100644 index 0000000..39b9ad3 --- /dev/null +++ b/2023/01/input.ans @@ -0,0 +1,2 @@ +54644 +53348 diff --git a/2023/01/input.in b/2023/01/input.in new file mode 100644 index 0000000..857ec0b --- /dev/null +++ b/2023/01/input.in @@ -0,0 +1,1000 @@ +76xkqjzqtwonfour +sixthree8sixjxjqsjgjgp +38bgcczgtninefivefive +sixthree4eight +nhp3zdc +279four +vzxf4tqrljgxmthreejcr +bbm4twoeight8oneone3one +nineninesix6nine +fourseven5seveneightsvtkcjdrfour +3mkmnpsix5ggfive7 +twotwoqbv5qrpnfl7seven8 +56snzkgsone2cxtpvvh +threenine3 +9dd3twocnrfljs58 +mqtrqnrgrcxbvpgdsmsqhmxlxx4 +nine9mdxzlrbmrxceight94eight +jtqsrmmbonentvmnxbdsseven4 +ninefive8fjnjj +nine53 +33 +ftjhckeightfourvkbd3eight9 +rhpnppsfour7 +95ht1x +fivezqfcvmgdxb5mfvtnlfkonesix +ninefgxxltpkszdnb89ninefivebdbdhckhb +9vtglcdvkgcgrvm4sevenrhppknqfvhldfgqhpgdqfv +852bfkjmccknlqreight1 +fiveone8threethreezsfpzsrbb9fourfive +1one58eightseventhreeqfpxcpv3 +11fg1 +tbrcgcqj2three9sixeight1five +seven2m6 +eightzhqvdrjknb622btfrs41seven +67nine8 +3one8ncctmbsixeighttwonegb +7fivefive +m5sqxstbxp9xx +1onejjz7gcddeightnkfqgxbbtl1 +3jrjkxvhctzmkmqccrmbrvlcvsjnqjjb +ndjfls337six2three87 +bconekhvtkblfour2n5dq2 +922twonmxfeight4 +7two59xvmzc2two3czdn +ninesrdsq99tskfpfpdqqfive6 +tbzgvh4ninesixjzdtxhbpsjlbkr62 +5fourthreebdpnqzbeightjpchone +8ktdbjtvfvkseven +3zhjbjqbpff +6hh7twofourcvmpfjp +sqfzkmrponechzzzbhz34one +jkdrxxbrn43qbjllcfbptddb7 +jdjbq1lcsz5 +fivehlpltzfrzfznxrpnfourmhpkjsjzz971 +gjc5qbgrhlj2one9 +tdn1676spccqqjc4eight2 +one2966lfourldlnxmzqdplzptp +qlkjthree5eightdztseven +512ninexrqpvktwoner +lkgqvlgdqbjhkxp58one7six3 +4two1one7zxxtvxtdvpgfrjh56 +4qbbmlpmjx5fiveninepkcnqgqgdjsrzkgxjsxnkqnd2 +1jjfive7xjfmdfvnz2 +fourxbfsdqlmmmnh9 +c5 +z4s8gdmkbkhbhd18 +threevsnkmbrcgdsvdkqeightqstlvvdtlvp4seven +7eighttwo64nlgxcbthpbgnbf +1mvbvrx +drhgqkfrln2 +three1sixthreelvjthreeffptnm1 +qzlqvjz8ninefive +eight23n1teight2 +31twoqqbmz88 +68fivesixqzfcfsjjzxfiveeight6 +sqpfonezdtpqrfbhzgjmgv7 +4mcmtqnonexkdpnrcfkfxhq5one +hhrldnffive7six6onefivezllprrncczseven +5dfxsn7hjgztpeightqnnninekjxlzdv +vtwobjxdfrkrzeightfxtlkct4 +seven4fiveksnsix7128 +onenfzxhpc7gxthree +jgtwone321fourkjg3 +dphnmspctdfour3 +four91zmlpbxchmsixpn +9eighteight8pgvrngxszvnlnzlzmbqgs1 +fgznzclmcrjhtbdjoneone9 +fttdr4five8vmxrlnr +1nspvnsrdddfhjjdcvltjl +7fiveone8nshjlrxgkeight +57eighteightsrgvcnbncv83 +5xnine5blgjqdjmtgx3 +6rjzh487eight9nndgvj7 +2seven2bvqlftkcplffivefour +x8 +vdbxxb2six4skntkvfcgdfcp2cnvhr9 +7hmqxgvdfgmxhfzfxfour +eight92jckrxshsrbtwophbfvnb +sevenxzjc6 +drflhlxphzspnnzdbcfbpcbtddvd8three56 +fournjhqnxrkjpvjssl9 +81333 +five1gmccznfseven8xlzvlrjsbffour1 +6dlbklsddnqhtwotwo2 +m27six +5mflrcmbbqnztndxtwoonekcsevenone +m24njqdqxrjmn1cjprdzdcntwoldzsgfkpvxbrnrg +ngjrvdd3onezcklpsfoureighteightwoxg +tkrzphtvthreeeightfsxbbdtone762svzt +khqtnrppp81183one +onetplmtp2zbrmbnrzt9sixknkrblt +662 +fivekhclmzchthree3 +5fhgcfzvss +zhgsq2hfbzjxgxgrxvhdkppbdljk +zqd9stvrrddk +7kthreesix7 +46six8eight +hthpnnghjglhhmg8seventwo86seven +5ffr8 +fbdxn76twofourlfdxxbgvmd98five +eight4mjjn4ninelgpc5qnxgneight +oneszfjdcxzc2five +4nzjqv3six +qtnfiveeightkjhhkckrpcdnine9 +6eightggsddqcjhptp9tmhconelg +eight45eightfour87 +25523 +two54nine2mnxszzxeightqf +2kbqpv2sgcskg +4three5njdpbnine +9rdmninejbbdgtffiveseven6 +tmnoneightdlrtninenines847bhldgkpdm +nine762gkknhhfvrbmck82 +three9xdbnxvnvqsvjmnzzdfoursmrspxxrdkgsv +twofour73zjj +4hvdbthree1four +1threeoneone +2576 +ztgbfpsznntnpl3six +1ctllvsztwo6 +2eightsevenbldhvhctpck69ninefour +nzdrfive4zsbrshcmqm5fkzzfptxntgzffthzhxbffskz +1nineqdmlfourlsfn94 +lqvfhgqkbncvzrnptwofourfivefour42jpg +92dtmcpzskzp1 +2djkdgsrrtcnklpxfmfrbcjmnddqntn5six +2nzxgtd75one4four2 +hbvjjrfd74five1six56 +zcnxmgvmhfsevenxxzkxnine1fxxpmkthreejfppctls +2sevenqsrdvchgpfdjfjpld +6njl7fivemkkxlhkmgm1ndlgjbpjt +jneightwofivetwo9eightgjtnrneight +zfvjfive3gfourfiveeight +five71zgxk8chrfzdzjpxxdkqfour +zbx78sevennsninethree7 +rrs8one2jtznfcgdsfxcmkznpptlglnmf +nldfdgpd5seven6tjg4fourddhfg +65sevennlckct93 +qjhgdqgpcfivevleight63two +4jqrzmthree +5llfourfourlvtvtx8vjksjlnrchrkthree +dcpdbsvsshgklkronefourqnsevenf6eightwohf +6ctlhskqqch +threeseven2mpvsdlx +1hnjrxsrflxjtlzqrzvpjsjjjpz6 +nineninervqqmnsevenjtlkfvzpdztwo8three +3bmthsgsix23sevenzvkszfpfq +6sixeightfour1bnhvpsv +3592nine +ttz117ninesix +bgtmckkpq5sevensix +354nine +7spsevens2 +512htbtgxkzdvqtqg +fhkbrst1 +6cr2xsevenchdvgqqht +cmbcdqkjd1xffkggmthree4chklqone1 +gsevenqnfpjzgbv7 +four2njkqbfszj +9qblmmzbtwonkzr +sixsixeightgnflxglkttxk2 +nine3vcfghmgm +two7lgnmpnz87nqrqgczrt +klvsx15 +rrkltqfttf8two2rzzgjbrffxvcbseven3 +5sixctgqr31 +qkhjklpztmkffql45seven213 +pjstvthree4lrmrznbvdseven +sixvnxfltnqv9fpbfbmninesix +pnvthree4threetfjqnvxbxvxb +two1nine +twosix1ninehkqjtkn2 +8pchlzgsixonevrzmqgbf +fxrccmfourthreesix9nineseven +seven929two3zgz +4four386nine +six8three75onehpgsnpjbczninevvcszkr +onefive6eight5 +foureightfour34 +six6mndfhgcjzjreight7sjbv4 +9dlmsnlgj2 +seventhreelmkn5sixjllfqfourlpznlhv +zfgvmzgv95seven +ppdsbnxxx1four +vvfnvbkvtzfourfour675nine8 +2fourthree1 +eight4pqdpjdzbmn31 +pksvg9bzzdcgktgstwosevenvnvftzblfive4eight +seveneightonethree1three +nine69dkv8oneoneone +72phzthreexqlhvsqfoursixninefive +2ninexqpplhqclpl5 +1nineeight +7nineonefour9two3fournine +8mkzqpnnlqljrfive +9nine5foureightthreegdbcrjhnthree5 +sixt69 +rzfg5 +vqdb8bc7mftdt +ngzlhznbtbone38srxvrfrjxsxkglvrpvqgm +9xgrjgq7eighthnbmkbdsdnine4qt +5dfcrkhzbvfourkkkqjfcb77sevensix +loneightfive8seven3 +7ncqhjdhzqeightnine +bsngnjfcone8bhd49tzfdb +deightggcb27four41lfrdbctl +3sevenoneninentjdsxmsixlpqgb +threernmpfptnmcmmrmlngppmbtwofour7sevens +eightjxxlm86 +twoninefmdtnk6rjkpdqzdzfiveninecrlgjrvctgtrrdkfkm +3threethreeonefive +three8thq +bfccdtfmtvhkhp5fourdcgszjgcseven2 +8xcxscl +sixzvdbpqcheight3twothree5lqtcmjdmpq +nbspfour32lddhpsz9 +jgleightcdm9twosllxnzqhjq +2three3sevenfour +jrnineone8qltfvgskbs2244 +zmbonemblfourkfjmvntjhvkbk69bnsjzdkxc +vxxlcpslfdzbhm91 +fjxhtfnqfive3zpctnfive +smxmdtbtfpthree8lkmvlljdcx1six +5bnine3614 +8cdfktkdd8 +twosix9 +4rxgx895drgvoneqxdvvh +threedljsix9cv5jlkvsmgzgbhnkmmfdpqxgzx +twoone7oneqvqoneonefive6 +2tvvmplskcgbxdkzh +gfvffive9six83mhgxkgdprxtwo +2threeeightmnmrtzmdtfivesevenrsmkkslsm7 +ztv23316three6seven +eightcvjqlfbh6fourvpgdpgz +1fivefive9 +brxmhgnnthreethreeoned2 +dgrcgr5xgpnxjbd6ninejsqmgmrvmqz +mtl6three +97bjvklbkpzktckfivenvcmftnnrp4 +7fivejmf +six54 +jktdhlbjbztpp7gjjc46fmkb +64xdrnfxgccrxkdpfxpnninelbmldlmllknine13 +9jbpcbsgk +6hqszplnjk +sixseven1721two44 +6threenzsjtj5cfqvdpcpfbcnfpnp9 +141moneonepzcvtnjpgnine +7n +8cgglsksnz1sixgkhqseven9 +ninescvxnzslj7lldvskqphrqhlsmthreeseven +8twofive3psmxh +4xclmfour3 +4sevenxz5onen3sixvgdmbtzk +3cclhckninejkmddqjkj +7eighthxsntjskvdonefour9eightfiveseven +three2six2seveneightqrlcvvczzfcgcm +plxthreefivethsmpqhzfour5 +6two3sevenrbscccjhxbd +rdzxlnbxbh7eight67 +65four +23mdqdh2 +bsrmxvmfoursixgdssplvshdjlnvgf7gt +823jvfour +5eighttwosixjmlthreeqgtlzbpfqhc7 +35foursljjvpfour7seven5 +nsfourdtgzffvh763 +9thtmpjtpsfnine +mkqcz9pmkpgnd +one6xmpjfkpsdcnfghs5 +jqzgsf834 +twotqpvxjc88659 +4onetxvccvkclcqhl6two +kbgzsixfive7one1four4 +gbkvfour93fivesixseven66 +97pjzlvmonesix +fivenjmtgkjfz7nine3threexsntbqxg55 +fivefive5threemfour526 +bdpdqklfgxninegsrsixmkqbhq33 +twosix9five +nineninenngsevenonegscxlttn7 +sevenpllnzvqjlksevensevenjtkone32five +7dhjbnjvzxfdrhc5r3gtxgxgzzx24 +kqsct1nzzbxldhfive6 +964eight4jp1two +4cds99 +twotworcqrpvgtcq3twoffqz8 +6sixtwosixvzpzlr +ninebkktjnineone9sixfiveseven +fp6sixrrj3sqncfvzqtkcthree +6foursevenninekdbmqbbccjeight8nxvvnbvcdv +nkzthree9471seven +fivecdtrjone4seven22 +twothree6onemvfourvtkrnnvvvbcs +56ninesixmscnd1seven +lnzntzqdeight2foureightthreexjpcprdncd +56zeightz8jfzthgf +eightthreeonegrnine24hsk +hlm185nrphc1 +9five5 +threegqtxmeight9rfkvqnineqnjxhskndqzf +1eightsix +539tzsgsjhnx7 +cxhd32lksevenseven +2qnbljpnjgssbzbhxtcfcxsqjlh5 +eights2kpfznvgghqtrmlb +2six2nine +cdrxjsxvvseven4bdljtxffdjhfive +399hvclz +1six18 +xlnrghvfmz5qthzss +67rcgjkqckptsthree6twofourztsknx +4qhsh2five67cgkjsnqtfvtwo1 +4lghphnh8 +1vpvslztbphninezbttbskeight8 +9fccbx +2zvsxhlceight +threehlmpkghvpz3cpseventhreetwonsix +lsbttpxhlnqzppm868fourtwo9qz +three17 +69513zfxqjvlpfh6mvrr1 +threenkchdrkqnfive5nine +two2tcmsnfivekfh6rfhthree +dtthree61stgcdkxqtm +4hldzqzxqd1dcddroneone +5jknllhktmhqjngc +qphxzsgtwozmpcdq2fiveonevz +three15three4eightthreeeight +vckqkjtonexnzrdbm6vsxfivefive7 +three6eightsfnslxjnc7fourchtxdvftxpnzm +sixfxrxx2 +9crhcfive8tlkr7qmxbcdcqb +6hvjqxjzzsz24bc +fbgsrsqmfv5hpkvlnxsfkpsccprhnv36 +mbpmgvmjcmpgxmfive1fxmh4smb4ct +fourvpdcjttndp9qbfclcz6rnrhnkqjgv +onemhqsm69 +rrz9 +5qfsxdxktfjbdnzcrfvt15eightjmsvhrnks3 +rgmvhprvkm3seven +twolxvjhc269tsnpjhvone +fiveeightrsrgxfjxn96 +mfourjcxsvss3oneightlxh +sevenqjfg67k49xnqddlvf +hgxhtwo6kbkeight +97fivethree8 +ncv228 +95vjxzdpvxb6vxxtwo +rsfeightmrcccsvqsdsfxgonenine7 +fsvjgqhgxsone64zdkdpghcjbprpzlmjfxsfknfd +xbhbtph8eight +1pdgmtwoslhkrtlfour91 +16crzkxrxpxjfourfourfive8 +slhmvmsixfrbggqdxfjcllbzn535two +twosdjxhpseven5eighth +6qdrmmvc9bvs +onedljtrk2pvgvqpfkqc2lgslhfd1 +ninesevenxfqd4ztxnb7fourseven +fpvbdpjkqfive2tsxb +fglmcrcd9xsnxsxgkzmmgtcjlxlfiveseven +gkgmm5onethree7jn +ztmg3onetwo4 +hhbgmpnrh3 +188btpjkpdsix3oneightkpl +xbqjpdst9762onethree +4tqcdrzgljs19g8oneseven +ninezs46eight +grkgdppchchpzfive31 +298three +2ghmxfjdjcfthreefive +9hrq3sevenonezxrvgxbr +n12kjninelvm +sixfourvgpctkk48seven +sixllxqmndkfcqvcdnssxjthreesixseven46 +nine7six +lkcmctcnbeight8364 +k2zqvznsrjjvtjtwo +zcxjvpgmllnlxxsonekrgsmqlntzsfxx4 +twocgzfcj6nskqj84 +rldlhnine5onefourvrstwo +lqfr92eightnsbgrpncdlheightpvktkd +vthreems422sevenninenine +zcmhzlnonerqtnl1zxdjtqqeightseven +8six3ps +blqhvpgt7 +6gdf +3jrl54xchxvgclqq +8twosixfournine6ckrbnzr1oneightpp +twonine5three9 +kmvmvrznj28eight4tlfourmqtmcgt +prpmhkpg5sixqqkhvjtsmdjlgsxgjnfour +5jfmzsprdmngm2nine +ltzvtgkc5nine1sldgncp +four6fivenine4 +hgsjtwo47qg15 +twoninesevennpmzshts4 +hjkcjjkdqxplmsjxdjphcb77eight6eightf +8six3four2twoeighttwo +tgrh83ninethree3seven +bb6nineseven +trpbxtzfour24skvqhc8 +rm4 +pqrtvrtfivefour52 +pdhtwo1q3 +fivefour4 +ninevvlfgvbzvdk7hkvsdjf8 +two3nlprsnkgfzxbhlfoureight5onepdqgtcjp +one4hdjrvcnlfgpckx +52six6nplcqfvxnf +fzqgdmzdjeight8four +two7zlk +fg16seven8476cvthhjoneightt +ldcmngfninetwo2eight +eightsix8 +twojlm2onetjn +3prnfrbng +276onebpks2 +fournineeight52 +3198hvd64 +sixthreejmrl2 +zsvmnnfsjbfourfour54sfnlghlv +5six4 +6dvrgdfncvd +two4sevenhhvxsljvqtj3 +dcmgr7five13 +cmrgqdlthreemvcc9six +fivekjsx8eight +vhlvninefourtwotwo4five +vffxj9 +pglbr7 +rghtnsixfkbnrthreesix8seven +3fivenine5x17 +3rdonet2ninexbslcnsevenflqxplkxbs +xbdgjfjttfhlrfldsmeightfour1tfjvcljc +sixrjp1 +9sevengnsj +dpmmrqksixeightsmnt58three +2six66ninemnj6qjtvqpzcj +sevenfzgg2six +eightnine9sevenmhvxtbjxnh33 +tscsvpdtjzsjmlfvrzceight8eighttwo6 +seven193ltgmzczzqqmrrgseven +fourtwovjhqfzlrnine1xmkqcs5fjrcxfssh +83nbqmsrbbfhnjsixvgcbbtmphg +3ccdbzjpkx7nrjnmfljgfour842 +threeseven8 +foureightpjlj9 +ctf5eightjnsvcrlfvz351 +4sixfivehqbs16tgqhf +fourninekbvbtrbkl2h8nvflxrlvjdtrhz9 +dgpvtwonbspfvtkqfgxsixonefour4nine +fournine15 +66tpr6frphqtfgcvpsjctqccbl +foursvfjslmkb3rmxseven +jtqsntfvpbthreejsqqgqnxq7766 +bjttrrvl9two +one73three4rffjxsm +fvmmheighttwokmcx7eightlzxcb +3kvkhkrzld7sixtwo +2three3mjqnpjznone2 +gfhvmznd8431two5three9 +62xdgeightqjgsfggzbrjcfsvmfourn +pdznineeightsevenhxb4 +fiveone3sjqvhh +4nineqzrh +lhp5sixseven +2blntmnfourmnn +kcnxhnppzbsstbtvdrzt55three +1gtrkltzfzsixs6 +85nsix3threethree +32three +six9fivefive4nineeightoneone +fivektmbvvlzl5 +pdhfcjfrtprpqtqdnvnchl5356 +one2sevensixsixmhfhsevenzvkrgxsmhd1 +snvhxpxsevenc4twofivefour +dqrvvlxrcrmnjkmjpgr8threeshzgnfbcsb92eight +nkpll5nflrcffourtwoeightthreehzjvvdhm +sntlr3rthreetwonzxzlvxxbbnsbkrl6 +eight26vhjjz4foureightwojk +five24414lbddfpxnqdxptlzl +dgqdninekmrs81n7x +pfgnp5sevenqpnckfkz8 +eighteightgpxhrhprmmfpcp6 +hqgxtkckqxvfcxskrhn9 +4five8 +sevensix5 +rpk88gfxxz384brvgtkcqjnine +ninexjk21onetwo1hzdhsm +41hbthnkbl7gssdksjddone5kqkvxzc +jjhmxrb56fd +4kxxtmqjpfivesixone4nffllnkj +8jlkmhmjjfour +281one +qeightwofkzzzkgcspgxp1threeqmjcksr64four +xnbv3 +4seven3ktgrjvdfive7five +dgroneightjmcrmplthdrncvld8one +4ninegkxpztlbzs3 +1onetwosklsjcmsjh +nine16 +8sixtwonine +3qhtzxzqfmh +twozgbcpzvsffthree4 +48fkbpfpkzhfpnvmctsjq9 +seven2two6zprbpmqdk1 +4hhztrv7sixfournine +3threemxlshrpv59clfrt +sevenmqmnine4eight +xg36mlvzsix3kbqttvhtpd +699fourqhbhsdhrflmbfdk +gzjhseven63251 +two8twonqplqkq +eightrbsgj21three +sdckkgcvmsjbvn5nine +624onesix +pjdnz7nctxzssf +kl5232rqkdrkd8five5 +three53fourthreesixpjm +6sxpnjnqn79nineoneoneeighttwonenf +five398nine +96srrjjvjkpkbmhzdxgpkzszxxbseven +812vjlglflnd +34six9five7threeftcqxtcxxz +4threelpcjptwo +fivefivebldxbxeightjzsixthreefqmgb8 +9cmrblfnd4 +nine53one +seven3one +tsqrmmlvqjqone43 +one5bm1ninefourthree +p882seven +c3eight +3eightsix +4sevenfqdrpdqbjpxdbjdsevenmsfxsmjdtcdhpd +cbeightxkttcgmsmone2nine88 +nb7jtsvpggtcrntrbpzjthrsix35 +5ninevtv3712 +five3two2fivezbvfcvlnkskccj2 +six8seventhree14 +1eightmkzbxone9nv46 +three4one +3njpjstjvzh9xjxnqr +threetwo9sml3 +6rmzg6 +seven91xbpnine8onefxktwo +ppmpn2oneone +qch5 +rjrkk2zqzndfb7chzmtdv +vgkqbtwosix48zrntbhpn +82oneeightmbzvzvjb3four +6hrxnlmsfsngpklbrlrsvcl4 +65sevenfivesixvjm +kkkhbdcnxfbfourfoursevenonesevenfour5 +68qkcfd4four2 +two94twofour +zzmz2jbl46kjnktxnvqrj +982 +ninezrj9six +snxrvhctcrvzvfivehldldnjttonerstc4 +bsftwonezfhnm5vlsjtnpnzj +onefiven57 +seven6vbkrk +5five9 +twoseven9 +hglskzhzs7fpmmjzvmx9six9 +1vsb +4lrhsh +gnln3ccc +four23 +threebxljqlxkssmvndjbltcvfc4 +fournine6eight2fourthree +4sevenqtsfccrrpdhseven +6sdzjdrfcxmdztrhpxbfshmrstq7fiverrcmtdfxmqphnpfxhkt +jsnbngsppbhgsixeight9xmhkvvqcdjzgplvztspone +rtbrqpgdcmmx9nnjjs8seventhree1 +93five21 +tss6eight +cpgvone9four +1eightwom +rgrsvtv48857 +fptwonesixfivenine2 +8xdbvf1zgfiveslb +ninenine3 +p637sevenqbbvbpmlgrk +723onethreedhhvgls +four7five91pjlpnbmlfzvhrfhvs7 +six547eighttwo7rg +vphlckdvqx3three +four12th +2kqzlthree8 +sevenbl22 +two68six4four7 +lmrbqzgrsm2sixnine +fivexspftvthreezvjtgfbknp9mzslnb3two2 +8twofive2 +9vbngfdjmp +1qzphhnlbqz76411km +sevenfivethreetdnpmxllmkgnvhdz7tvjv +threectnine1seven +9fone +9sxbxsix6zmqllpzftsftbdf9nine +xninehhxsbzzspctdbpfdscbjq687glqdsqtvqz +threemjrdnvqrk7bvvsgfjfbone17 +npntthqz4nine9fourbrdsqgnzlf5 +133xqjvmjmpqdkt4 +2dnvzgtnl5d9vvjlknxxqfourfive +mtntzxzvkmqr748 +foursix6sixfour2vmqzxtzdqbzgmbrggmgtnine +hphqmdsgmvtwo35qnmsqnqnhlkb +flsxtqfxhsevensixgtkdseven6qzvscqbztwo +sixgxbmgchcrksixfivedznxzkzpttsvtzqhkdzrhqnhtwo5 +69zpddjrnztqbr +1fourone2four1hfgsrvgtht +1rbr2gpfpdghtwo7ninedzx +4sixfour +9fivebcckvbdnkqhhhskb2 +fghbcczsmhnbm1ninexdcpzjknqvfive6 +5sevenjtmhs1one +8htpbfhgsdh55one2two +mmxsmst1fivefivesevenfivetwo4 +984six6eight96 +bhrrjtgdmj4two +seven8three +three3onefour8v +five9qbf8fzlvtsix +nkcmtl16four +gkdlzkfrnteighttworjjmtbrb451 +txpkjjztlkth221seven +frtrvninesixlftgsxtxvbdnjmxc7 +4mzdfjsxzvs9one6jrjv5 +96threecxhhdjkmjhsrgz +one8sixcrchbgpz +grjvxszd1s6 +qbxvjggkfrcfivempdck4 +7one32jzpxdgstwo3pspjhmg +gsvgpdhthreesixeighttwo5hkncndcmthree +xksmqqsvzthreebjzr1fiveseven8seventwo +mlgjjjhn44 +threefour12sixseven16 +one2ghggthree4 +ninefiveseven8tbldpbcmmvn +jxtxlqcc6twoh2 +1xlsjrcfourqvlx9one +twothreetwo5 +tmsqz1vrrj72 +lcxdvtsl3onesix +fxqbcnpjzeight8seven +scpqzdhss13seven7nlkxmkntk64 +fnlcc74 +five4lkxcvztwo1two +85nmsjmgvcv +sixbqsxnq4 +6fiveeightfiveseven +mbcxhgrjdtdtfpclfxzc1fnvlnz1five +9587sixptttpksnbnzzsrls +1jcqnzffpmrninesevenssxfndgkx +7zffzsjgzbgzzfvv2vnrrfvnclseven +mbghnmthjjfmcxzsixfive44 +hklcflkm7four3 +fddnsshjxf6twospgtkzzkfsix +sevenninesevenlkrhnzdzxfive6six +55bqeight +5nine6mfbeightsixone1 +rjlkpq77 +jqeightwofourtbcqvkvvqzcmrbbmzfiveseven59qmtz +ldb2jfqll +4nineftshkg77jtxggdt9four +nine2seven47seven487 +8lpctcvhvfivezqcrtrxrsevenqhhtxrdplfbqpr1mjfkcfrrfc +zmlhsn6tfiveseven +djfmdf6 +fhcthree5 +9sevenbftsixone +four11tprnmdmvczfourgpjx +eightfourninexdchgfblq7 +4c5sevendgtngqxzghpxpcs2 +xdqcfmhsz3ktf +eightkvhvqgqn88rrftxjzzsrfb +gznfkfbtbnthree1four +273kfrsjbpzbzseven +five9foureightvlpmphnp +1qtgttxninetwosqfffcsfgxdz68psbmvvpmt +nine9fivefcnpbnl6tmbsjkrr9three +szmthreeonesix2bqfqrxkljlseven +jvphjsqzlc2dbzchmronetwo +8sixthree2v9threesixqkqb +fourone3eight6fiveeightrgjmfive +9ppveight +two6vgkdlv73ninesix +44886488 +lsjxprxdz58eight32 +four95skp +2eight3three9jq7nkftgzn +cssgnvhvnnrlklmmxdfxhtvptwo6fmtmchspb +9five7xnx4hxvdlslgpfourfour +onetwo9six3cpsdjprgkjthcfmkkx +1threeeightqgxvvvgvs1lqrfivegfqqslmc +five7eightfivesix9one29 +59eighttwooneone +4s44549fiverhcbmpqgjm +nineffkpxf2 +seven8fqsvjnjzphsevenj +eightmpgfxkspplninekqzlplrmmn224twonezxf +mqqqctworfpjkkhninevgh7eightonezdmfrrvv +one31 +8nbcjdx3 +rdprrrcjjflkxszthreetworvfksix4 +one59three +2rhxjrb6kjdpxqbthree6xlzgvk +threexbsvqsseven7cxmggqrnsthree9 +gmqxghthreeone7fourvfivefoursix +5nine8 +khcnjsfourzxjkvp5zfhpcvv +three3xnbzpmjqsix5 +3ninehvdbz43 +47ssqq5fourfoursixcggslftbttlpb +2threemdtlrprfzc +2threethree +nine84fczsrqzd7six +fourmrbqh79 +gqdhhggdxfive6 +d99fphzhxghqt44seven +lldllhmzrskzzbzsixfour6two91seven +3xzjfsppg +7five6nzfpvcpm5 +one9mpggcblrpstzpvfffivelkrqvkvkkhtzseven +eightbr3ksix +4eighttwothree2bzfivebn +18twoseven +bdjbgtxdjx57seven +eightthree89two3vmsbxbskclh +lgnbbjxtmgvfsix5three +cgrsfsns653five7 +two1sevenkqllxjvqbfvfxnr +jptmclgmdzhndpkbcd9 +twosix62threeone2 +three5chntgfivegkbzfrvvxkb +5djqstgsrbhl8 +9v3 +8four9four89 +five2nineseven +h3cpsxzx3four2 +fivehpzczrl5zxkzkpxcvdkshsfqzxpjqqhdg5 +bdfftptqt8kmpbdgsncceightzmtfjphnxqbslplrqxv8 +two74tworvzjftxvqzpvx +bpjslrgkbonethreelfsxshjtpfour2kjxgzgv +rqktwopdlvjrrxlgvrfnnine3qonesix +fivefivec4sixgdldnine9 +eightz1zzqph +dgmcl5153qtgxlkzgtzseven8three +knkrvlxvjs6svsrj51fourhjbqzq +three96 +szxkfqthreethreenine1 +9gxtwofourzeight +fninel8 +ninevzddbcfhttwo1onesj +mdbg8qxvzfsgmh9eighthpqcrzklheightwofp +78lqjv3fourdthreethreeeightwonlq +fourkkrzcbphdseight8brqjsfsbfktwo +4tnvlcfjqsixql +zd7nbzhclh8 +plkrkone2 +mksjljks4xfslzzlp +nine22462seven2 +gbtwonine93 +vkvb6fiveltone2eight2 +cnxxhvlcj863sixsevenmckrblvvtbzqbc +nfldnvnxx2eightninexnsbseven +1six6 +nine83 +one5djxkzxrttqthree8jzqdfvthmtwooneone +gjdj1eight +3fivetwonzflsvgdmgtbz +threetwosixvbssrqxjfvffour3 +2ninefivernscgdfrgpsnvtchzfxmdhjfsfivefour +threegsmtcn12 +foursmbzsrhnnseven6twodnnjhbthree +62twortpndjsgfgmd +ktxsgdskqtlbnj5one1mxhztxgb2four +threefourfmfxrmnlhninersxz1eight +3jkqdvsevensixhbxfq +slmseven8sndphqlhjgbzhrdrfxzphfvs +6gfvsxprrmg7nzmjkvnm8 +34qgtjsnoneqbqrmkz9 +2sevendvqvdtjrjrhpfzkphpsixtwozkfg +72nineseven +nsgmfsfive8two +71sixhzsl9sixfnrjntxpv +onennncchq73eight3 +vsxbb13cpdpvhnmz2 +681 +mpgd2 +bzh72seven +fiveeight4589jknzbnjlrt57 +one3dm4 +91nine6mbspjn +bzmztdlkqslzbnghlsxtvfk2 +3two12vpl7dkkjjln4 +zdmgeight9kfvtpx7nine +7114nine655xxx +332 +six183fourfivelstnlsvgvx +zsxbg9tbpsnbvzhj6eight +nqqctrzlpggjrrrlzdfkjthree2 +fivecsvzxptmhk8 +d7hssmvk6one +kngdgssixeight1four3 +sevengptvbjtkbxsdgzdeight8twop +fourlmscbhkkfour89kflkf +7bxl6mcgzfxv +klkqmz29 +kmszrdfour2ppkkdlffivendgcfthree8 +kcvpt7 +sdjttwokhtzdksix6 +eight83four31nine4 +4eight4vxctcsgzf31qhjptxhfrjtl +dhhfmbhtst6ninehmb2 +1ninesevenkhfmgjjltgkrgxvm48cxtzzvhn +dczpdbfl45jcpmckczpssnqn2six7 +6tsmftwokdgltlkzqdqttflqhm +1qthkhrrjxvbkngldslmzp2 +2sevenr6zzcvkqgkn93 +1fivec1x2gbdkqvkqpsix7 +3znplrfxnrq +ninetwofiveseven44bsn +onefive9zqknglr8thzhx +sevenfourcts5lttdprpg8three9seven +seven9vfjqdfkg3 +5tjmtkhseven3five +crf14 +5fourxxn +r3fivejbvrzgnl +4nine5 +svhmflmpbkjjponemj2threefslgpxsrprjzvfxcrvp +91threeeightfour6bmqfmr +6krhfmtwothree2sixeight +pdpvrlqb36 +4sixsevenseventhreegjthree +threehgckkksz8eight3 +qqhtjq3lnvqkpjvrp42 +3three8four942 +mggbbhxd4eightvmmdvl +fourtqpgjkszglhthree752 +ninehsnqzkrzpfgdvlg5six +6two8xstlhvhkhdone +fivesix55eightqpjdxkpnine +ftwone4seventhreenine3two +sixfivetwoqplqntzlldbmkgzsix78 +onenlqnxcr4 +seven5spnronedhtxsdgtfgsgjl1jlhf +fivethreednbvgpbr7four5 +qchoneightpbgdzxjbshqf527four4 +51threetwo5sevenhnnpjvx +qdkcbnkjssixtwobkfzcnfkb84 +qsjgzbgpxq9 +7eight3six +8jvmxgnp6cqpsqtqgfive1nine +nineg11sj +3fourfour +pg6djcsdmdlgjtwo1 +bxcbznvnqbfjjbfonedgl3foureightjgsqbqhzhg +twofivetwosixv5fiveonenine +l8eight6gdmd +nine15bcseven2 +l4 +g5ldxkrk4fivevft +fourxmf35 +nine6xdhfmltwofnqkf +phbcjjmnmcvjgzfsixfour6eight5 +2ckvh +rzone3745 +keightwosixfour466 +one3lbkl7tssqxqrbbmxkh +6oneonezllhftdf4bfpxj +6eightpc +ninenine4nbfbqrtnvkl +sixqbbffgdsixtwofivesix8 +zfplftwosixsixnine9 +two4rncnine77nineczlfdrp +43jseven +7mntc +6z146fourtwo +seventhreethreevxmbzhmpktj6twohxzjnhp7 +tz6vrdbzgzhxcfd +seven6eighttgglxnhmknine +8eightseven41crvrxbonetmscnl +xbhtfgg5four86onesixthreejk +3dlblsjq +sevenmsrgcfmxmthreegzgxdqmkcgkjcbnx45pzlcjc +5nine69 +9cpjmdgf +4fourkgzmjnhplrlmeight +ninetwo6sixmdz +dcdbk71twothree56fourtbzkz +tcc3nineeightseven2flrlndb4 +sixcpztsj72zpdhmvfp4two +9hnine5 +two7kktkms +1sevennine +5zczmvxthreethreetwovvnfvvsjnv +9dhjcgnnsvh4five4 +bbv46hvj68eight7 +sdmntqgftc5blnhkktqmg1five +5ninefour +gmg6bzgrxhgtssthreenine1 +78twothree4mtbfthree +hclggrdf9 +jnbmj3seven4 +xdhcgkrkrtrfourcxmlzp1scxkxxzlsdjfccchzg +rpdphff9blkl22csthreex +stwone791seven +cdfkxhfqr4sdlcleightnine72tkftldjnq +tklpckfour7seven1qvxthlfourhtrdn2 +b4three4cninetwonebbv +nfourdzxjxcp7mnzkzdnmpqsixgn +jfcfncxone9kmdrbxfjtpvfp26 +6threeseven21ssblsvrbfsvzmbktkpztcsmpt7 +vgchkqhxrbjnlqnvpml77twonejcv +gxklhvtwo55five +sevenfivetwo1mtdfjgcp2sevenpj +qvrjceightcjlp5 +tbl4zxthxzpsix +rvzlvnhnineeight2cxxcslhpph +shrxnz9rtfrtrtr +1drmztt2zfournrmxfivejzksgzqfour +chtmdlppljlllhg8threendnhkn1qzxkrtnqgrtwo +two15eighttdlrpqjx45 +1kqd5 +3krsbnzthreetxpv +7ninefivesix67sixseven +sevenninesmjkdfssnl3two7 +pmjmkzdrvfour4nineseven +t1xnlcvlfninecbrzxc5 +nine3qnjcktfiveeightkhb +psqrone1nxcsrntkjg9 +6lgdfgxts9two9 +48six4 +threehvxfhzvxhs8three2two +onesrmxjlv43gtsjtdneight +5eight14fournineeightfour4 +3mljsmn7mrnvnc844 +5dmdvxxddhone9fiveone +twogscrq26xfppjzhthreervonefour +6ndcblbmdjpthreetwotwovpcsmffive +5gkqzhgvrcthreeseven +sixkhgqjqnineqhxl4 +z6ltpkcqxmd +fivetwo5rstcq9 +threetwo563 +4fourtvksk8onefive +294tv +7flzfzm22brfgxsqhhckzc5 +twoone9sixsixninethree7 +2glqfourseven1one +nine4five7418 +9xfivezxrr1xpjm896 +foursixtwoninevtzzgntnlg6oneightbxp +2eight1fiveeightfive +mzjxlhjmqp58six +one34 +8fivejdmljr +tsblxssixseven4djq +8drrmf32 +11twok9663 +hsoneight3sevennpsbbkdvsb46 +dtrnnhxcdmzzlssffhgvbxxrgbcz2fiveonesix +kkeightwo6975six +jcftbeight9 +fivefivephbpdtkqfm246 +5eight97nine +4sixfour4nppgsr36one3 +glxlmnvhjxsevensix1fourseven +sevensixjczjhjzbj8fnsnrsevenfive2seven +jjpngnpzglkbltbrv2tjmqrpb +4txvpps9kvjhgsqpcv6eight2jxk +onesix8qfvkckg145ndkfdcvznine +nkthree86b5fgzzfoneqn +eightgndhmrfouronexldvdvqnzxqjczfk1 diff --git a/README.md b/README.md index b5df77b..1a52e2d 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,12 @@

+

+ 2023 - 2 ⭐ +

+
+ +

2022 - 50 ⭐

From 4d846cfdf89ed4af9f26c4208d61ad193adc8c4d Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Fri, 1 Dec 2023 08:14:37 +0100 Subject: [PATCH 056/225] Add day 1 --- Media/2023/01.png | Bin 0 -> 9652 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Media/2023/01.png diff --git a/Media/2023/01.png b/Media/2023/01.png new file mode 100644 index 0000000000000000000000000000000000000000..602cf348d8170d05a40475a8bfb7c61959d92c11 GIT binary patch literal 9652 zcmV;lB}>|gP)NklrHpkopkD_E`d5iLWm*@Fdz)Z1TYxedEFAnu^lI|-y}|)_ZKIQ(;UY( z_Ad@`65AMy*cj7I6-5FhQ~;sg>q#eF?`8M>u;R4Wi@MD7>279rpV^uJ&QAFkDDTJn zL7*th?F#tXoi*ZnybG8Yo)y+_TPuGHc>@%zdHS^XcxQ|^5W$+iPkWDd#&{88>R+E) zy*xFXm}0V^qbgmeM0u*V`@*e0vlX4!PkWDd#&{7Ad4@({xOa7ZDWO;pKe{U zG${-Ku)n)b#Y#m;Fbv@-38El$&7%XS{%O(rEnIWtX=i{J zA|WI?n@(px9R{9Uv-n^|>pMs5ELIc%ked)1AI2?A4PTZV4nb4Qi(~Gzvs=NcYLmS1 z;RP6m3X(+sw|iL-lL`QUsdT}z%|mBDnIx<4n2)V&0}MkCuSgd0m@oh95&+=M$BMX2 z>h$r>sdo1ADMV4MvU$*Q`wS@9gs0Gi(G-4|NhSdRkZ8=HMTLyWWD<>OQc4xKF9QHV zSM9({S`FIXLvR02Lt@omcGzyX;}6HWM^pfSuYb8k#AD)#zx=e~bX|`#`@CyqlT0#X zVTkxF3No=OTD3TGO;+^T`rhf|1#?WQfLFo7SvB3Hko;0`clf4{YP*;^idg zvBc?QHs2(ZD4MQrK8g}^(_=$+uS`je;s-IQJtOKbueKez-Vp#VOr}I^cp6~^bscyE zU>Ke#D%nE|jj@%f+CBc`;FZ=te|5u_?nSV0Rt&XT^lF5`8NY_f1po+(9t8^H*7)~Rw}^rjBjf-8Uj4K}YcT)jk;14D_GEZ@nZ?}H zeEH3ClYE#FnJ8Sjv$*@ph1-32?vjMicb+LeTHX2H@p=eAD;7okaz{R!PT61HQLA(UJ{MTP0b&xKBexc2LNn7 z4qn~Ce|BSLc|#vQrrc;B-u{PU19w-WXX<-`nA8XI;+zG`GcPN45hFZ7e(PfJlKYA2 z#<4*#-p)e+05+ZStDX7p9;<5|kQ0l!-5|~6=qCzM=`e+E`)koDDM6vOzb3gv*?b*C zQImXF(NN)VpSvTduUG(5#beQ)-H=I4X&+L!E4(RG<=4%bv5PRPMbq5??mq9Am2I&? z&Z6iLTbTj-Jq{|Fq%)cw?o*cA#m_E@-u4npobJqmu!4f~HpuGEp=P6VF0q||yd|f5 zL{)aV#qkclJPh#z2LR9wcF@D(To-j(MH?+v;$IRxF3Kz#*|F&Sm#R;HvH=1hJeWl$ z*}bucD%+>z{r~_ni)U7iVOGl%caoN+gjBUk+6Ltq1|ou44Lzf_Vh{v43~E#ed;9Vv z5s&$ckFOAKQkL5VAc&Kg3n657e72_RHZd21U}52dhT(2?M?EVp!=VDic8(QtHZF;K zX73s2dU`q1fgqR}lNPkN$d;lX?lvn&O|l_d3WXQOP05E~m=YwkCa!Y01BzlJN}cWR zeHl>zfYQ7;Hl5;7a=uFy03cS#i4k%fr0Uc1rpo5QsiHs_Y^y=Lvqt>G(yYHdU0k{( z&Wd6RtuZu+K`eHEcI=toZ2Rbib*Yj3@9jO?&^u64Q?^uF^=h^KdJ6y$l)eIC za-`RfJF`2q^Pb|=Tiw!|T~ZhIboT)CFmddTS0EAs2zz;`Q9pX^C;-49?K6%IQiI3O zfA~3T_}L}E&92{-#=(b{CE&lGzCV3WaVni+$7{CC%afuHx&^Nlcq*VZnE&z3?awYX z2Tb7%3`Og;Yyd!0pG>OKcS;lh01^!0d$2ZKZX9^xozr1F#+uBS1231p{`s|Yw|as7 z^U7~tkl(!EaDSR0io2+A_`>I?QSXrD(9SdpvOY)r*5Mn#73?}Vn>#VI00@E*yRVf= zDV0`yWzmk$2}UZu5|!-1SBQ9d06<;mNOqhM*yE!!4J8>-w!J|*1<@HTP5ooJ@#7P< zA4T;ThFwcPvbfeiS*BH7-RFzGGr)s+uS{HMa$>2yglpRL{03506z!zd< z63k&xh@S-jfYxAc=oxM30cY!bpWl@A+OC2d9m5}{coA`!LK74|s2^yz8g&$2C;$Lo zicxuCFVqVFP!kJhiUkw|uIqF$TmhnBmF0E;u+$+NL# z22TAmXwhLEOXS*vS6T*TT4%u;QR<$0@67X?vX&%-0suAijJ|WM?v;loy2Y#< z1p#5M?FttCZ<)z{PU(zDx@j`J-=V3u79=pJh|W0P7pYNv06?Eq?e3~ecLp9UPWyP3 z-s{^-6GkIU4#MOxB9n;e;p?AxBVE4dt&_yWyo6A--qbzf`h0I(u<%wME-&-KY!B3^ zm(`wK`wzPfjHN&M%(-OGi0Y>wU4kJ9#V{(Fv?V`2J!X6rV;mc_8nk}#;+ShvH8Z^5 z)b_lvDZ6w@+p6?uUr)Q+{P>}lY(f+WH(N$+Z{D?@Kqr@F5P)mNaQVb zHIKv*!l8Tk{`$0!<&M?gORQE*sWmcbWXPm5Nc&W+Hw+`*k7g&&Yr`bpBHOvx4D&iC z9;$3RRN3b4k`p(&PTc77%Ik7f=)ilty7PE-r^^DHeskE}wPm?o0SZ=Nz59CEH87v& zH}`mb=M6-#Y^+}$^=7rsG^*A&_sg34WVgDd!wMad zH89MzRz6nUdCbk*?2@CK18Lvcv+^oS|&Gu4=xHTKtnQU!IoFraiqbeQQAi z47(EcfH2>CcNTg55Ufw&lEc5q_NrX#0Wg`$%UH=tULvbGgP+g)0UWEzOG) za_JIeH#vg$$m-O@aNh49F9HCh^nYW~(L+oI`pfG8mtzJqDuo@N1pt6x z7nTRMT+CH20N_Vka#p8D{prw+PKhEVlK+zjbAy=Fw~vhP(ev4~f4_J?T`Q4ZI|?wA z6_**Y{>h>9`;DUmwmZ1}lt2jCuw?hNN)-+gogKPj8}a$)g;W6mS_b5=?XQ$5v_JpP zmAHmaOo|cIq#wC*XynQvt8U^wG0KLNP1gVfD{fz*M; z$CpUedSl?^zJZhbP^+U-vMsmhx91Ed7rGcQ1eGp{`}?U|<+uBKrRvjlJ@22m`M}Z% zo#97Ur*dH9@WnFyP^VtfEv@`oH`EcFv)1k=?rPkUup=?t#ct4afEp6P&mFJUe32?5 zJkM`XlL5E8$E;=;M#!8Hm_ipU+bk&D0wI)NHHA$RuV;9EUJ?w^$P=%+-ee&YbO*Mj zGK`}G#7U&8rJ5QNL1s?~jO$O~dxoOFWh<%+>bX*>Z9!_X~W-WTYw*(GHOi z->2#(#Rvdk^x82DwLW??-sEJo<0Ga|s!$C3>{9dh)@SsMs;@Q=AtZQfLBgS{?I?!f zycR#5H{a@_cYx_M?Q8dq3o61fGZs^w2L;w-<)*T`BwdX239ylBm%*N3s+XF@;!_=;EEK$pA$)fWKYp7(t zIv`gYOrt8pJ4fqmyxN||(3RVR(h5}_br1<*MkI05mVvwKrZ^l0YiEu4$+fBBeE&8V zOcv|0>aGIy6|-6fFpRY>WNFFzT~V(%V!dE>0``dG3!BdW4_(54+~ zv7-3{Utv}YBO=kEBx=;-7RmJRc+_Md?%p8|tUHz`0e|r37gcYI-JbfH0;I+f0()R|N|qgrozK99wWN%O0=6D)Ik%$QwXrPi1r3WA_< zEB3P7E{H@0FbOqHC?Z1$8MBOUWFQOS6C>!FXuOxFr5LS@3w@KM}6{gZd zmTt7_RNd6L*HbjV+FxnAR={Pvwln|rvg-~efzI&vd8xsou=^gd{oR-=-k2)}0Q~2C z*TmV3GzwC*3PXEuEMelz%k3?H-(Wwo?-O|dhZN^lF;VxBk6*DF+ zC}X8XtJHMflHa=MFz2zGycgPgw)G6uY}5_-WCx+`xf8tPe&1J!%Tpsf2-aL1Gq`Dm z!r&Kj|uV5LU#y;j-= z{ZJ={`n0)+nvI5$9(tIsotozUuz504RVil%e60swWz$ugQ~?0!qBt@q7_*ol5`r)| zR+_s0RTNxbvTbHQyUmm@@u=6Q4v_B^RnqM*WM!Ec_&5@4uisH(|o_)F9RFH zaJTP;!}&}q*~Q`LELv`P%El(%E`-5h#-zz_mMfdC;i_g&-HaiW9N$JEli)YMsM>d? z;gxMm0_XLJS)WHv2v%HJkYBejtNgHwH~C{k4?~bRlV?a<@^jar zX2S~&uD4E#Exc*n`ZyN|pcFc+i>5JxN)&Cy|% zXP^czvrZx&zb^3W=1hWHwmBeM^03jTnYqXa#uy^R5-p zJ*k?fyb~jqUlv`M&-Pn5D~e)%o#E4|ll4|I87!FIokiXW!7^L@=y;b3ubx>+{%AT_ zCKnBAGFV8xJBz#%pFf?!533RgAp_fCk`Js13HHlEYnM=>_RpK})WEM+7Vm!5Athk1 zA(O-$;U(_7P6(F9$z!u;z+@_FGPuiikmV3R?R+rH6nj|o1^&LfL?2~yaLkxp-ignX z2PaxCL1w$%rgvry3-WI-!|LQ&b-J-2dv_LjCj<+Ro#Z>n+z^-PE?NDx%Lv#jX<%5W zy*rD%6N1$@s`g8mq8`(|H+1kV3vb}|977$&QG?R)SBeO zHd9AmV2j{d*Q+Shx(zbrt^xo6*rAniZCc-v63Ksc`%;&?>SPl9#-qz)L;Z`3scLZ@ z^oNMqdUt&U9$}T35+mf4<#y?ZI!CKc;8Fzu(018bHz9P#u&Xw>d*1)umgiC(9$9=4Y2^dm3N(sG?&?`PP%GiqoU~ssM0y3Sv@9 zeVj$wP?{I__EW1J!qG+x*n6KX@z**-H`s1g%RHBv7heR2H!Ym*;vAMlw^NlyEv`>K z-0|L@6I+xP{_k^loU=F#YIDErTFcN&tV;b*r+%o@FzVg*f4o+ABe<^rbhxTj^5?H^ z9Iftrc4MZq7h?|t3m>W+FNA-<*qghgAa!4U^H1$=wJ2v1;y zClFIGi@E#YAH81ayHvT0u&QzjD?;H4SaEj3r|or&+3b#&1VgVsQh1|%_{jB+(mcmd zw=e{;Xp|RMhLh;elV}W!PNnH?P&Qq|97aSpv2@5RUel1qWU(@79=dDIR6htQv)Ts9yrKnBo-}p3D@N2Ac8DUk~bWJ~K7a$FSNrGjYiS}@2<*2sT z&e+NW?^Em2!}!eK9=z@{7lMF(pj9vF9H}@oc;-Kvu7;pR%LVyPZ={>TevCt#AybGT1P4l6XyUPc-eHyZyqVU(l{X381ch5Tx}#NoToFId!=fZ z^D5my8!vM;B}nLbLW%Q^D0FxzQbksXT0SeTTSSNCsosj$Ix?KpE;f|s@rQl1mv}0-ACO3bi2&*9KjV3 zq{^iWR^UOfoLgCMvi#$l+Xt_-K31H%DKF07jc?SbS9je~HeU4{v;Lk``Hs1)gX&ta zJg_RY#&?g^?>%vIX=2#gte8x(AS#6IVYkbyksGD`+TJGpP={ByNApXn@Cd6u_AY8M z5v_VA!;51sOBHY_SiZ2LD0Z!7=vvDV0DwUyCq?jtTsn(R`ChyR0Dzi}sL5b4XiV~9 z&#PSDd7t>(Hy(25cq@Mkd0qH<_m@m(G}m{I;H(NaKH$7!VYl+Pkk@VpVZlG`J>D7P zb@cN-Gps}`JYEu&5xwER=kTYn$VQ0+6`I<gv0s>#}3E79<$V*6v~D-`seMBqES6 z5rw83Y*)2ZztJ|nzpo=WeJM_l+L9j+03f>xs{QWKdJcmE0Qg1X_=Y<@ERK`B#3nlQ z(Ad!8U7F6DvikD?f*28rA^D{+g{o|tP!I|{KH#@as+@UEa*4F^>xhldj9fWnOT>Ri zY@47hho^Wt9Jl+t%(FNGh*&sa?ji9pRp z#hpsqp%}vC@-kM@gfS#4-K>@wq$c~gKB>ZE1-Of_`cZE%0Coxw?L!Ixz;Da0 znXM=Vfju~430#^X2qM!qGxx1I%i{FjUo29hAO8 zUVp)Mv`nHh7!irmio?X4Os02#5G#eq8Pt%7&{aEheJ$F$W)g#KR^N3A4nd-lJywHu z^!hQYNl#|;Suu~u3lzV zjSijt*rHY1`Ec~Tx^Ew;eFnLRA0V4#64AQHS>g1ub5|5@)FHhJa$mE=ElT zVz8Y__ihG>LKhZ2G+chrIOeEtgD^M?LL>G^Zep)2nECfpxB5oazVku|nI&HAP7_l%&^CDb z-*_;Nh|*_X-CqU3M6eP+boZVMnrJ@5Xus88R%1uyNM3*5S*id47Om1C?c?XH;b)i7!^F1D$#2_y&K>XN#sL68f+)x@UYZ~Zf=LFc z>)1A^*=QUc(DpWsT>f(Z<@VQh6>ymov%0{QLQ%63rcRgyDO;+@EFQjhLg9r`c%in{ z=@hoIUefKZq~zRwdHn?nKP+_h&Y0~#4J+RDM@8To)zd0f9wMwx6EE(>U#)lR@x>)C zJv0_I8N7N|+*u>ObZ3B0L5PCulVJTg&T%~qK`_GL5UnySTBWwH8MnM($E6#j{btn| zn89}!L#?W|8p*l+J^%glaCzBnHDmAh?_1K1;vXzXFj=g) z-n#F+WKOWd>JJA!Jf6Z85P7r20&v&h0*Bok>xBohH|52>eWdopjR~f*+%5o8000nW zVxVKiXF?>zVDIHY*?c{G?c)fO%Zy2r)n5Sqw=%H;ezh`$kRcdBO?m(TX0>cS4*2ZK zQ~&o+awPvwuOBgg!2Fjg0Kk^~_$3LUUsrY9?iw{)(e*j8YqFyMc&Hj5u^b|-ZWCKo z<_G|QRj+pN&`F}RTpD|_Viz-`Qq&#wf2=YtOEKjqiFU3?{`z_cG4|qwV8Iadox(&K z1$i((-X>VYrwuFKrE0D+$|barNN!r8wztXQ!(<#CFpLcd3Lk_>6m4&l-#*|76?hyw z@7J}Q#N438E7a|^#?gV7su-DKWY@|Rt-)N?;?`#0CH(DOVuaOa_BR3`d;0$LxKM6H zFzf8i-jB~Wa+%bhe`o24QkNDLJS1})VRdSy`IUcP+FFqCz|#25OXC3m?St}{_LWyO zjk_Xph_Ff(r?bTA002c}rM%wGew9RLnbj@^IceqBdU5A%X7+O%`CKNYSE~N=S2qq{ zv(ud?_#nlw&o8%>=Ed2x>m8nUaoz7= z^tK8_NUmzU7q^45>6%Fu5=uTQU@LXT+dZSt>^)0#0qPZj^)4P^)%Lt!RJ6%8 z1{i`qdU4%>i_HLlQ&q8HESDf8yq<;lnPo+$rtbpdaqu zd;$W%@jTc^1l+sIrmMuaXjzIVM##|{EfjGKWQBlt zKMwqyH4QzZ{!VK=^ZJO{YUS5kLID^*tQB$@YqMfr+E6QD?IWy41hbAkog%&J zQ(SFl%w?$pE(I$9Rx&pPp|hDWi;$4$x86JB@8tpW+Av$Kd~}!#z{HGIs?sTS#@{`< zT&Xo_3~ocn;1O2eioI<$l(59CV$Yv<>E q##n8*$GcE@;aOqDagTQa^Zq{{sXVH$+` Date: Sat, 2 Dec 2023 07:51:51 +0100 Subject: [PATCH 057/225] Add day 2 --- 2023/02/02.py | 13 ++++++ 2023/02/02.rs | 33 +++++++++++++++ 2023/02/input.ans | 2 + 2023/02/input.in | 100 ++++++++++++++++++++++++++++++++++++++++++++++ README.md | 5 ++- init-day.sh | 5 ++- 6 files changed, 155 insertions(+), 3 deletions(-) create mode 100644 2023/02/02.py create mode 100644 2023/02/02.rs create mode 100644 2023/02/input.ans create mode 100644 2023/02/input.in diff --git a/2023/02/02.py b/2023/02/02.py new file mode 100644 index 0000000..705bfc6 --- /dev/null +++ b/2023/02/02.py @@ -0,0 +1,13 @@ +from sys import stdin +s1, s2 = 0, 0 +for i, line in enumerate(stdin.readlines(), 1): + _, subsets = line.split(":") + r, g, b = 0, 0, 0 + for subset in subsets.split(';'): + for showing in subset.split(","): + num, color = showing.strip().split() + globals()[color[0]] = max(globals()[color[0]], int(num)) + s1 += (r <= 12 and g <= 13 and b <= 14) * i + s2 += r * g * b + +print(s1, s2, sep="\n") diff --git a/2023/02/02.rs b/2023/02/02.rs new file mode 100644 index 0000000..56bf67e --- /dev/null +++ b/2023/02/02.rs @@ -0,0 +1,33 @@ +use std::io::Read; +use regex::Regex; +use std::cmp::max; + +fn main() { + let mut input = String::new(); + std::io::stdin().read_to_string(&mut input).unwrap(); + let re = Regex::new(r"(\d+) (r|g|b)").unwrap(); + + let mut s1 = 0; + let mut s2 = 0; + for (index, line) in input.lines().enumerate() { + let mut r = 0; + let mut g = 0; + let mut b = 0; + for cap in re.captures_iter(line) { + let num = cap.get(1).unwrap().as_str().parse().unwrap(); + let col = cap.get(2).unwrap().as_str(); + match col { + "r" => r = max(r, num), + "g" => g = max(g, num), + "b" => b = max(b, num), + _ => {} + } + + } + if r <= 12 && g <= 13 && b <= 14 { + s1 += index + 1 + } + s2 += r * g * b + } + println!("{}\n{}", s1, s2); +} diff --git a/2023/02/input.ans b/2023/02/input.ans new file mode 100644 index 0000000..b0c8433 --- /dev/null +++ b/2023/02/input.ans @@ -0,0 +1,2 @@ +2156 +66909 diff --git a/2023/02/input.in b/2023/02/input.in new file mode 100644 index 0000000..e6ea9eb --- /dev/null +++ b/2023/02/input.in @@ -0,0 +1,100 @@ +Game 1: 4 blue, 4 red, 16 green; 14 green, 5 red; 1 blue, 3 red, 5 green +Game 2: 3 green, 8 red, 1 blue; 5 green, 6 blue; 4 green, 4 blue, 10 red; 2 green, 6 red, 4 blue; 8 red, 11 blue, 4 green; 10 red, 10 blue +Game 3: 7 blue, 2 green; 9 blue, 2 green, 4 red; 5 blue, 2 red; 1 red, 1 green, 10 blue; 1 green, 5 blue, 1 red +Game 4: 5 green, 4 blue, 15 red; 1 green, 5 blue, 2 red; 14 red, 3 blue, 2 green; 6 red, 12 green, 1 blue; 1 blue, 6 green, 16 red +Game 5: 1 red, 1 blue, 4 green; 3 blue, 2 green, 4 red; 4 blue, 1 red, 2 green; 1 green, 3 red, 4 blue; 1 green, 2 blue +Game 6: 17 red, 2 blue, 18 green; 4 green, 10 blue, 14 red; 10 blue, 15 green, 14 red; 6 blue, 9 red; 5 blue, 7 red, 10 green +Game 7: 2 green, 3 red, 14 blue; 3 red, 2 green, 6 blue; 3 blue, 1 red; 10 blue, 1 green; 3 green, 17 blue +Game 8: 9 blue, 13 green, 2 red; 3 red, 10 green, 18 blue; 8 blue, 8 green +Game 9: 11 red, 2 blue; 1 blue, 9 green, 13 red; 2 blue, 17 red, 6 green +Game 10: 13 green, 8 red, 8 blue; 10 red, 5 blue, 9 green; 3 blue, 2 green, 1 red; 5 blue, 1 red, 10 green; 10 red, 8 blue; 8 blue, 1 green +Game 11: 14 red, 19 green; 2 blue, 6 red, 17 green; 12 green, 9 red, 6 blue +Game 12: 19 green, 3 blue, 10 red; 8 red, 2 blue, 19 green; 3 blue, 6 red, 2 green; 8 red, 5 blue; 1 blue, 15 green; 8 green, 7 red +Game 13: 2 red, 8 green, 1 blue; 4 green, 3 blue, 2 red; 4 red, 1 green; 1 red, 1 green; 2 green, 1 blue +Game 14: 4 blue, 2 green; 2 blue, 6 red, 2 green; 6 red, 16 blue; 5 blue, 1 green, 5 red +Game 15: 2 red, 4 green, 4 blue; 5 red; 5 green, 2 red, 2 blue; 5 green, 1 blue, 7 red +Game 16: 4 blue, 7 red, 1 green; 8 red, 5 blue; 9 blue, 6 red, 3 green; 4 red, 3 green, 7 blue; 3 green, 1 blue +Game 17: 1 green, 15 red; 8 red, 4 blue, 7 green; 8 green, 11 blue; 4 red, 1 green, 11 blue; 11 red; 1 green, 3 red +Game 18: 2 blue, 8 green, 6 red; 6 green, 5 blue, 15 red; 13 red, 15 green, 5 blue +Game 19: 8 blue, 8 red, 2 green; 10 red, 2 blue; 6 red, 4 blue, 3 green; 7 blue, 2 green, 6 red +Game 20: 8 blue, 4 green, 13 red; 14 green, 2 blue, 4 red; 1 green, 11 red, 2 blue; 8 blue, 14 red, 1 green +Game 21: 4 red, 14 green, 2 blue; 8 green, 2 blue, 1 red; 2 blue, 1 green, 1 red +Game 22: 3 blue, 2 red, 5 green; 2 blue, 3 green, 1 red; 4 green, 4 blue, 7 red; 1 green, 1 red +Game 23: 3 green, 9 red, 15 blue; 8 red, 4 green; 4 green, 13 blue, 6 red +Game 24: 1 green, 2 blue, 1 red; 3 blue, 2 green; 2 blue, 4 red, 7 green; 2 red, 8 green, 2 blue +Game 25: 4 blue, 3 green, 5 red; 4 red, 3 blue; 3 green, 7 red, 3 blue; 5 green, 12 red +Game 26: 9 red, 1 green, 3 blue; 1 blue, 13 red; 3 blue, 5 red; 14 red, 1 green +Game 27: 1 blue, 7 green, 3 red; 2 red; 1 green, 1 red +Game 28: 13 red, 1 blue, 9 green; 4 red, 10 green; 1 blue, 12 red, 6 green; 6 green, 3 red, 1 blue; 2 green, 16 red, 1 blue; 12 green, 16 red +Game 29: 1 red, 9 blue; 15 blue, 3 green; 2 green, 1 red, 9 blue +Game 30: 6 blue; 1 green, 4 blue, 2 red; 2 blue, 2 red +Game 31: 1 blue, 2 red, 3 green; 3 blue, 3 red, 2 green; 3 red, 2 green; 2 blue, 1 green, 4 red; 1 red, 1 green, 1 blue; 1 green, 3 red, 2 blue +Game 32: 1 green, 6 blue; 1 blue, 2 red, 3 green; 9 blue; 2 green, 1 red, 6 blue; 6 blue +Game 33: 3 blue, 3 green; 2 red, 4 blue, 5 green; 2 red, 4 blue, 3 green; 3 green, 5 red, 8 blue; 2 green, 2 blue, 3 red; 11 blue, 6 green, 4 red +Game 34: 11 green, 14 red, 4 blue; 18 red, 10 green, 2 blue; 3 green, 11 blue, 3 red; 10 blue, 6 red, 10 green +Game 35: 4 green, 2 red, 4 blue; 3 green, 2 blue; 4 green, 2 red; 1 red, 4 green, 6 blue; 6 green +Game 36: 11 green, 15 red, 6 blue; 10 red, 7 blue, 2 green; 7 red, 7 green, 10 blue; 6 red, 14 green, 2 blue; 6 blue, 13 red, 12 green +Game 37: 2 green, 9 red, 3 blue; 2 blue, 5 green, 4 red; 3 green, 3 red; 4 green, 2 blue, 12 red; 3 red, 6 green +Game 38: 8 red, 4 green, 6 blue; 1 blue, 6 red, 6 green; 2 red, 5 blue, 6 green; 9 blue, 7 red, 7 green; 1 green, 9 red, 5 blue +Game 39: 1 green, 9 blue, 8 red; 9 blue; 8 red, 9 blue, 1 green; 2 blue, 1 red, 1 green +Game 40: 7 green, 13 blue; 11 green, 17 blue; 16 blue, 10 green; 7 green, 1 blue, 2 red; 5 blue +Game 41: 6 red, 2 blue, 7 green; 6 green, 4 blue; 2 red, 1 green, 3 blue; 6 red, 2 blue, 5 green +Game 42: 9 green, 3 blue; 1 red, 7 green, 6 blue; 3 red, 6 green, 10 blue; 1 blue, 8 green +Game 43: 5 green, 1 blue, 2 red; 4 blue, 2 red, 8 green; 4 green, 1 red, 4 blue; 2 blue, 9 green +Game 44: 9 red, 7 green; 7 blue, 9 green, 5 red; 4 green, 19 red, 16 blue; 5 green, 13 red, 6 blue; 3 green, 4 blue, 7 red +Game 45: 17 blue, 2 red, 3 green; 17 green, 9 blue, 1 red; 12 blue, 12 green; 1 blue, 1 red, 16 green +Game 46: 3 blue, 4 green, 1 red; 7 green, 1 red; 4 blue; 5 green, 1 red, 3 blue +Game 47: 6 red, 3 blue, 5 green; 2 green, 12 red; 6 blue, 2 green, 14 red; 5 blue, 5 red, 6 green; 8 red, 9 blue, 4 green; 17 red, 7 blue, 7 green +Game 48: 8 red, 18 blue, 6 green; 5 red, 2 blue, 1 green; 1 green, 12 red, 8 blue +Game 49: 2 red, 4 blue, 11 green; 10 green, 7 blue, 11 red; 3 red, 6 blue, 12 green; 7 red, 5 green, 6 blue +Game 50: 2 blue, 3 green, 3 red; 3 blue, 14 red; 3 red, 1 blue; 1 green; 11 red, 1 green, 2 blue +Game 51: 9 green, 2 red, 7 blue; 13 green, 3 red, 4 blue; 4 red, 12 green, 8 blue; 1 blue, 9 green, 4 red; 1 red, 7 blue, 4 green; 12 green, 9 blue, 4 red +Game 52: 10 red; 6 red, 3 blue, 3 green; 5 blue, 11 red; 3 green, 5 red +Game 53: 11 blue, 3 green; 17 blue, 1 green, 8 red; 2 blue, 3 green, 2 red; 7 blue, 10 red, 3 green +Game 54: 11 green, 5 red; 8 green, 10 blue, 2 red; 2 red, 8 green, 1 blue; 11 blue, 2 red, 17 green +Game 55: 4 green, 7 blue, 12 red; 8 red, 5 blue, 1 green; 1 blue, 11 red, 8 green; 12 red, 2 blue, 3 green; 7 green, 7 red +Game 56: 2 red, 6 blue, 6 green; 7 green, 1 red; 1 blue, 5 red, 5 green; 8 green, 8 red, 5 blue; 10 red, 1 blue, 5 green; 7 blue, 1 red, 8 green +Game 57: 14 red, 6 green, 3 blue; 11 red, 1 blue, 7 green; 19 red, 4 blue, 6 green; 2 blue, 17 red, 5 green +Game 58: 5 red, 11 blue; 13 green, 2 red, 2 blue; 6 green, 1 red, 1 blue +Game 59: 7 red, 8 green, 7 blue; 6 green, 12 red, 20 blue; 1 red, 10 blue, 1 green; 11 red, 5 green, 18 blue; 3 green, 13 blue; 12 red, 4 green +Game 60: 6 blue, 10 red; 1 blue, 9 red, 9 green; 5 red, 2 blue, 2 green; 4 blue, 8 green, 12 red +Game 61: 12 red, 1 green, 7 blue; 19 red, 1 green, 12 blue; 9 blue, 17 red, 1 green; 3 blue, 1 green, 13 red; 8 blue, 1 green, 10 red +Game 62: 3 red, 12 blue, 20 green; 4 green, 4 blue, 4 red; 6 green, 2 red, 4 blue; 10 green, 1 blue, 4 red +Game 63: 3 blue, 7 green, 12 red; 13 red, 2 blue, 2 green; 7 green, 2 blue; 2 blue, 17 red, 15 green +Game 64: 1 green, 10 red; 5 red, 17 green, 2 blue; 2 blue, 4 red, 1 green; 5 blue, 5 red, 3 green +Game 65: 6 red, 2 green, 2 blue; 4 blue, 12 red; 18 red, 3 blue; 2 green, 17 red, 8 blue; 1 green, 8 blue, 9 red +Game 66: 15 blue, 5 green; 4 red, 9 blue; 6 green, 15 blue, 1 red; 8 green, 8 red, 6 blue; 17 blue, 4 red, 6 green; 14 blue, 8 green, 7 red +Game 67: 16 red, 8 green, 1 blue; 9 red, 8 green; 10 red, 2 green, 2 blue; 11 blue, 6 green, 15 red; 4 green, 3 blue, 10 red +Game 68: 4 blue, 1 green, 10 red; 2 green, 2 red; 6 red; 2 blue, 1 green; 2 blue, 8 red; 4 red, 1 green +Game 69: 4 red, 5 blue, 4 green; 4 red, 1 blue; 1 green, 2 red, 3 blue +Game 70: 13 blue, 2 red, 10 green; 11 blue, 17 green; 6 red, 10 blue; 4 red, 13 green, 2 blue; 9 green, 13 blue, 3 red +Game 71: 1 green, 8 red, 5 blue; 1 green, 5 red, 3 blue; 7 red, 2 green, 7 blue; 1 blue, 2 green, 17 red; 10 red, 1 green, 2 blue; 5 blue, 16 red, 1 green +Game 72: 19 red, 2 green; 3 blue, 19 red, 7 green; 3 blue, 1 green, 15 red; 9 green, 2 blue, 16 red; 1 blue, 8 green, 1 red +Game 73: 1 blue, 2 green; 8 blue, 1 red, 1 green; 5 blue, 6 green +Game 74: 12 red; 5 green, 12 red; 4 red, 6 green; 8 red, 5 green; 1 blue, 10 red, 7 green +Game 75: 3 green, 1 blue; 10 green, 8 red; 8 blue, 11 green; 6 blue, 2 red, 6 green +Game 76: 9 green, 14 red; 2 red, 4 green, 18 blue; 7 blue, 6 green, 2 red; 6 red, 13 blue, 10 green; 4 red, 2 blue, 1 green; 16 blue, 12 green, 12 red +Game 77: 4 red, 2 blue; 6 blue, 1 red, 4 green; 3 red, 3 green, 8 blue; 7 red, 2 blue, 4 green; 4 red, 6 blue +Game 78: 5 green, 4 blue; 1 red, 4 green, 9 blue; 3 blue, 8 green +Game 79: 12 green, 1 blue, 6 red; 10 green, 2 blue, 1 red; 3 blue, 2 red; 11 green, 5 red +Game 80: 3 green, 3 red; 1 green, 3 blue, 2 red; 15 green, 2 red, 4 blue; 9 green, 3 blue, 8 red; 3 green, 2 red; 3 green, 5 red +Game 81: 9 blue, 9 green; 2 red, 3 green, 16 blue; 12 green, 16 blue, 4 red; 1 blue, 2 red, 6 green; 10 green, 4 red, 17 blue; 13 blue, 6 green, 4 red +Game 82: 1 blue, 16 green, 10 red; 15 green, 11 red, 1 blue; 1 blue, 8 red, 8 green +Game 83: 6 blue, 5 green; 2 green, 12 blue; 1 red, 2 green, 6 blue +Game 84: 3 red, 17 blue; 2 red, 10 green, 10 blue; 14 blue, 1 green, 9 red; 8 green, 11 blue +Game 85: 3 blue, 5 green, 14 red; 2 blue, 3 red; 2 green, 9 red +Game 86: 7 red, 1 green; 14 blue, 8 green; 3 blue, 10 red, 7 green; 3 red, 8 green +Game 87: 9 blue, 1 green; 2 green, 8 blue, 18 red; 10 red, 3 blue, 2 green; 2 green, 4 red; 4 green, 9 red, 9 blue; 14 red, 5 blue, 2 green +Game 88: 3 red, 16 blue, 1 green; 13 blue, 3 red, 4 green; 3 green, 1 blue, 2 red; 4 green, 1 blue, 3 red +Game 89: 12 blue, 5 green, 14 red; 7 red, 4 green, 10 blue; 7 red, 11 blue, 3 green; 5 green, 7 blue, 4 red +Game 90: 8 green, 3 blue, 1 red; 1 red, 2 blue, 13 green; 2 blue, 14 green, 3 red; 7 green, 2 red, 5 blue +Game 91: 3 green, 3 red, 9 blue; 5 green, 1 red; 1 green, 1 red, 3 blue +Game 92: 2 blue, 1 red, 4 green; 7 blue, 6 green; 7 red, 12 green, 3 blue; 7 red, 8 green, 4 blue; 14 green, 9 blue; 15 green, 3 red, 3 blue +Game 93: 8 blue, 4 green, 1 red; 15 green; 9 blue, 3 green +Game 94: 12 green, 17 blue, 11 red; 3 green, 1 red, 19 blue; 17 blue, 10 green, 11 red +Game 95: 13 green, 1 red, 8 blue; 12 blue, 10 green, 4 red; 13 red, 5 green; 11 red, 12 blue, 6 green +Game 96: 13 blue, 11 red, 13 green; 12 red, 3 blue, 4 green; 14 green, 9 red, 15 blue +Game 97: 9 red, 9 green, 11 blue; 11 green, 8 red, 9 blue; 5 blue, 6 red, 9 green; 3 green, 8 red, 4 blue +Game 98: 5 blue, 6 red; 8 red; 1 green, 9 blue, 5 red +Game 99: 4 green, 3 red; 3 green; 1 red, 2 green; 2 red, 1 green, 2 blue; 2 red, 4 green; 1 green, 2 blue, 1 red +Game 100: 3 blue, 3 red, 6 green; 7 red, 2 green, 16 blue; 14 green, 9 red, 9 blue; 8 red, 10 green, 9 blue; 6 blue, 11 red diff --git a/README.md b/README.md index 1a52e2d..e7816f3 100644 --- a/README.md +++ b/README.md @@ -4,11 +4,14 @@

- 2023 - 2 ⭐ + 2023 - 4 ⭐

+ + +

2022 - 50 ⭐

diff --git a/init-day.sh b/init-day.sh index b61e3d6..5ab5391 100755 --- a/init-day.sh +++ b/init-day.sh @@ -1,6 +1,6 @@ #!/usr/bin/bash -year="2022" +year="2023" cookie=$(cat session.cookie) input_prefix="input" sample_prefix="example" @@ -19,7 +19,8 @@ if [[ "$1" ]]; then if ! [[ -f "$input_file" ]]; then echo "Downloading input for problem $1" # Don't DDOS! So check if file exists already - curl "https://adventofcode.com/$year/day/$1/input" --cookie "session=$cookie" > "$input_file" + nozero=$(echo "$1" | awk '$0*=1') + curl "https://adventofcode.com/$year/day/$nozero/input" --cookie "session=$cookie" > "$input_file" fi # Add empty file so there are not that many lines when showing input instead From 95486e76bf04c2f509975277832a8cdb508ad249 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 2 Dec 2023 08:10:00 +0100 Subject: [PATCH 058/225] Add day 2 --- 2023/02/02.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/2023/02/02.py b/2023/02/02.py index 705bfc6..3d10b4c 100644 --- a/2023/02/02.py +++ b/2023/02/02.py @@ -1,12 +1,8 @@ +import re from sys import stdin s1, s2 = 0, 0 for i, line in enumerate(stdin.readlines(), 1): - _, subsets = line.split(":") - r, g, b = 0, 0, 0 - for subset in subsets.split(';'): - for showing in subset.split(","): - num, color = showing.strip().split() - globals()[color[0]] = max(globals()[color[0]], int(num)) + r, g, b = [max(map(int, re.findall(fr"(\d+) {c}", line))) for c in "rgb"] s1 += (r <= 12 and g <= 13 and b <= 14) * i s2 += r * g * b From ceb52f19733bfee1b7c1bd686a70418cdc48d95e Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 3 Dec 2023 06:44:35 +0100 Subject: [PATCH 059/225] Add day 3 --- 2023/03/03.py | 28 ++++++++++++++++++++++++++++ README.md | 5 ++++- 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 2023/03/03.py diff --git a/2023/03/03.py b/2023/03/03.py new file mode 100644 index 0000000..0dd5584 --- /dev/null +++ b/2023/03/03.py @@ -0,0 +1,28 @@ +from sys import stdin +from collections import defaultdict + +lines = stdin.read().strip().split('\n') +gear_to_num = defaultdict(list) +s1 = 0 + +def is_valid(y, x): + return 0 <= y < len(lines) and 0 <= x < len(lines[0]) + +for y in range(len(lines)): + for x_start in range(len(lines[y])): + x_end = x_start + if lines[y][x_start].isdigit() and (not is_valid(y, x_start-1) or not lines[y][x_start-1].isdigit()): + while is_valid(y, x_end+1) and lines[y][x_end+1].isdigit(): + x_end += 1 + good = False + for yd in range(y-1, y+2): + for xd in range(x_start-1, x_end+2): + if is_valid(yd, xd) and lines[yd][xd] not in '.0123456789': + good = True + if lines[yd][xd] in '*': + gear_to_num[(yd, xd)].append(int(lines[y][x_start:x_end+1])) + + s1 += good * int(lines[y][x_start:x_end+1]) + +s2 = sum(n[0] * n[1] for n in gear_to_num.values() if len(n) == 2) +print(s1, s2, sep="\n") diff --git a/README.md b/README.md index e7816f3..efecf67 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- 2023 - 4 ⭐ + 2023 - 6 ⭐

@@ -12,6 +12,9 @@ + + +

2022 - 50 ⭐

From d89de28b6afc15f4b26f66d6d85d83a00d9ff74c Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 3 Dec 2023 15:50:47 +0100 Subject: [PATCH 060/225] Add day 3 --- 2023/03/03.rs | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 2023/03/03.rs diff --git a/2023/03/03.rs b/2023/03/03.rs new file mode 100644 index 0000000..d35225d --- /dev/null +++ b/2023/03/03.rs @@ -0,0 +1,44 @@ +use std::{io::{stdin, Read}, collections::HashMap}; +use regex::Regex; + +fn is_valid(y: i32, x: i32, lines: &Vec<&str>) -> bool { + (0..lines.len() as i32).contains(&y) && (0..lines[y as usize].len() as i32).contains(&x) +} + +fn main() { + let mut input = String::new(); + stdin().read_to_string(&mut input).unwrap(); + let lines = input.trim().split("\n").collect::>(); + + let mut gear_to_nums = HashMap::new(); + + let mut s1 = 0; + let mut num; + for (y, line) in lines.iter().enumerate() { + let re = Regex::new(r"\d+").unwrap(); + for cap in re.captures_iter(line).map(|g| g.get(0).unwrap()) { + num = line[cap.start()..cap.end()].parse::().unwrap(); + let mut good = false; + for ya in y as i32 - 1..y as i32 + 2 { + for xa in cap.start() as i32 - 1..cap.end() as i32 + 1 { + if is_valid(ya, xa, &lines) { + let c = lines[ya as usize].chars().nth(xa as usize).unwrap(); + good |= !c.is_ascii_digit() && c != '.'; + if c == '*' { + gear_to_nums.entry((ya, xa)).or_insert_with(Vec::new).push(num); + } + } + } + } + if good { + s1 += num; + } + } + } + let s2: i32 = gear_to_nums + .values() + .filter(|v| v.len() == 2) + .map(|v| v[0] * v[1]) + .sum(); + println!("{}\n{}", s1, s2); +} \ No newline at end of file From 7f304dd6ae4138e5578be92fd173f8039fc77a55 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Mon, 4 Dec 2023 06:28:16 +0100 Subject: [PATCH 061/225] Add day 4 --- 2023/04/04.py | 13 +++++++++++++ README.md | 5 ++++- 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 2023/04/04.py diff --git a/2023/04/04.py b/2023/04/04.py new file mode 100644 index 0000000..c937250 --- /dev/null +++ b/2023/04/04.py @@ -0,0 +1,13 @@ +from sys import stdin + +lines = stdin.read().strip().split("\n") +p = 0 +repeat = [1] * len(lines) +for i, line in enumerate(lines): + right, left = line.split(":")[1].split("|") + shared = len(set(right.split()) & set(left.split())) + if shared: + p += 2**(shared - 1) + for j in range(i+1, min(i+1+shared, len(lines))): + repeat[j] += repeat[i] +print(p, sum(repeat), sep='\n') diff --git a/README.md b/README.md index efecf67..26aad1a 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- 2023 - 6 ⭐ + 2023 - 8 ⭐

@@ -15,6 +15,9 @@ + + +

2022 - 50 ⭐

From a337d61c052e8265b9e6129a2984c5de8ba61dd9 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Wed, 6 Dec 2023 11:26:46 +0100 Subject: [PATCH 062/225] Add day 6 --- 2023/06/06.py | 14 ++++++++++++++ README.md | 8 +++++++- init-day.sh | 10 +++++----- 3 files changed, 26 insertions(+), 6 deletions(-) create mode 100644 2023/06/06.py diff --git a/2023/06/06.py b/2023/06/06.py new file mode 100644 index 0000000..55c16e9 --- /dev/null +++ b/2023/06/06.py @@ -0,0 +1,14 @@ +import re +get_nums = lambda string: [int(a) for a in re.findall("\d+", string)] + +def solve(times, distances): + times, distances = get_nums(times), get_nums(distances) + result = 1 + for time, dist in zip(times, distances): + result *= sum((time - start) * start > dist for start in range(time)) + return result + +times, distances = input(), input() +print(solve(times, distances)) +print(solve(times.replace(' ', ''), distances.replace(' ', ''))) + diff --git a/README.md b/README.md index 26aad1a..9a66d30 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- 2023 - 8 ⭐ + 2023 - 12 ⭐

@@ -18,6 +18,12 @@ + + + + + +

2022 - 50 ⭐

diff --git a/init-day.sh b/init-day.sh index 5ab5391..c239b25 100755 --- a/init-day.sh +++ b/init-day.sh @@ -31,11 +31,11 @@ if [[ "$1" ]]; then fi # Prepare dummy python solution - # solution_file="$1.py" - # if ! [[ -f "$solution_file" ]]; then - # echo "Create dummy python solution $solution_file" - # cp "../dummy.py" "$solution_file" - # fi + solution_file="$1.py" + if ! [[ -f "$solution_file" ]]; then + echo "Create dummy python solution $solution_file" + cp "../dummy.py" "$solution_file" + fi nvim "$solution_file" "${sample_prefix}.in" "${sample_prefix}.ans" -c "norm G$" From 2d8eea4e3c266d9222ea9f1877521d0ad2c8f90c Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Thu, 7 Dec 2023 06:49:02 +0100 Subject: [PATCH 063/225] Add day 7 --- 2023/07/07.py | 38 ++++++++++++++++++++++++++++++++++++++ README.md | 32 ++++---------------------------- 2 files changed, 42 insertions(+), 28 deletions(-) create mode 100644 2023/07/07.py diff --git a/2023/07/07.py b/2023/07/07.py new file mode 100644 index 0000000..410dc11 --- /dev/null +++ b/2023/07/07.py @@ -0,0 +1,38 @@ +from sys import stdin +from collections import Counter +from functools import partial + +def lookup(card, j_is_joker=False): + order = 'J23456789TQKA' if j_is_joker else '23456789TJQKA' + return order.index(card) + +def hand_type(occ): + match sorted(occ.values(), reverse=True): + case [5]: return 6 + case [4, _]: return 5 + case [3, 2]: return 4 + case [3, *_]: return 3 + case [2, 2, _]: return 2 + case [2, *_]: return 1 + case [*_]: return 0 + +def sort_by(cards_and_bid, j_is_joker=False): + best = 0 + for j_replace in ("AKQT98765432" if j_is_joker else "J"): + cards = cards_and_bid[0].replace('J', j_replace) + best = max(best, hand_type(Counter(cards))) + + raw_strength = [lookup(card, j_is_joker) for card in cards_and_bid[0]] + return best, raw_strength + +hands = [] +for line in stdin.read().strip().split("\n"): + hands.append(line.split()) + +def solve(j_is_joker=False): + as_sorted = sorted(hands, key=partial(sort_by, j_is_joker=j_is_joker)) + return sum(i * int(bid) for i, (cards, bid) in enumerate(as_sorted, 1)) + +print(solve(j_is_joker=False)) +print(solve(j_is_joker=True)) + diff --git a/README.md b/README.md index 9a66d30..c50ba3e 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- 2023 - 12 ⭐ + 2023 - 14 ⭐

@@ -24,6 +24,9 @@ + + +

2022 - 50 ⭐

@@ -180,33 +183,6 @@ -

- 2020 - 16 ⭐ -

- - - - - - - - - - - - - - - - - - - - - - - - *The above tiles are clickable, leading to the solution of the corresponding day.* From 35083b5619ebaa444c8592dd1c7b4ada84a74c3d Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Thu, 7 Dec 2023 14:38:33 +0100 Subject: [PATCH 064/225] Add day 7 --- 2023/07/07.py | 42 +++++++++++++----------------------------- README.md | 27 +++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 29 deletions(-) diff --git a/2023/07/07.py b/2023/07/07.py index 410dc11..8bfaff4 100644 --- a/2023/07/07.py +++ b/2023/07/07.py @@ -1,38 +1,22 @@ from sys import stdin from collections import Counter -from functools import partial -def lookup(card, j_is_joker=False): - order = 'J23456789TQKA' if j_is_joker else '23456789TJQKA' - return order.index(card) +def card_strength(cards, joker=''): + return [f'{joker}23456789TJQKA'.index(card) for card in cards] -def hand_type(occ): - match sorted(occ.values(), reverse=True): - case [5]: return 6 - case [4, _]: return 5 - case [3, 2]: return 4 - case [3, *_]: return 3 - case [2, 2, _]: return 2 - case [2, *_]: return 1 - case [*_]: return 0 +def sort_by(cards_and_bid, joker=''): + types = [] + for replace_j_with in ("23456789TQKA" if joker else 'J'): + cards = cards_and_bid[0].replace('J', replace_j_with) + types += [[c[1] for c in Counter(cards).most_common()]] -def sort_by(cards_and_bid, j_is_joker=False): - best = 0 - for j_replace in ("AKQT98765432" if j_is_joker else "J"): - cards = cards_and_bid[0].replace('J', j_replace) - best = max(best, hand_type(Counter(cards))) + return max(types), card_strength(cards_and_bid[0], joker) - raw_strength = [lookup(card, j_is_joker) for card in cards_and_bid[0]] - return best, raw_strength - -hands = [] -for line in stdin.read().strip().split("\n"): - hands.append(line.split()) - -def solve(j_is_joker=False): - as_sorted = sorted(hands, key=partial(sort_by, j_is_joker=j_is_joker)) +def solve(joker=''): + as_sorted = sorted(hands, key=lambda k: sort_by(k, joker)) return sum(i * int(bid) for i, (cards, bid) in enumerate(as_sorted, 1)) -print(solve(j_is_joker=False)) -print(solve(j_is_joker=True)) +hands = [line.split() for line in stdin.read().strip().split("\n")] +print(solve()) +print(solve(joker='J')) diff --git a/README.md b/README.md index c50ba3e..e974892 100644 --- a/README.md +++ b/README.md @@ -183,6 +183,33 @@ +

+ 2020 - 16 ⭐ +

+ + + + + + + + + + + + + + + + + + + + + + + + *The above tiles are clickable, leading to the solution of the corresponding day.* From d171c168b212b92fac21f6430804a6fc39cfd302 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Thu, 7 Dec 2023 19:26:09 +0100 Subject: [PATCH 065/225] Add day 7 --- 2023/07/07.py | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/2023/07/07.py b/2023/07/07.py index 8bfaff4..71330b7 100644 --- a/2023/07/07.py +++ b/2023/07/07.py @@ -1,16 +1,12 @@ from sys import stdin from collections import Counter -def card_strength(cards, joker=''): - return [f'{joker}23456789TJQKA'.index(card) for card in cards] - -def sort_by(cards_and_bid, joker=''): - types = [] - for replace_j_with in ("23456789TQKA" if joker else 'J'): - cards = cards_and_bid[0].replace('J', replace_j_with) - types += [[c[1] for c in Counter(cards).most_common()]] - - return max(types), card_strength(cards_and_bid[0], joker) +def sort_by(cards_and_bid, joker='_'): + cards = cards_and_bid[0].replace(joker, "") + types = [c[1] for c in Counter(cards).most_common()] or [0] + types[0] += cards_and_bid[0].count(joker) + strength = [f'{joker}23456789TJQKA'.index(card) for card in cards_and_bid[0]] + return types, strength def solve(joker=''): as_sorted = sorted(hands, key=lambda k: sort_by(k, joker)) From 93b2e9c7124b08a8e66320298da7ccde57008149 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Thu, 7 Dec 2023 21:51:22 +0100 Subject: [PATCH 066/225] Update to use new aoc_tiles script --- .aoc_tiles/tiles/2020/01.png | Bin 0 -> 8847 bytes .aoc_tiles/tiles/2020/02.png | Bin 0 -> 8792 bytes .aoc_tiles/tiles/2020/03.png | Bin 0 -> 4725 bytes .aoc_tiles/tiles/2020/04.png | Bin 0 -> 3987 bytes .aoc_tiles/tiles/2020/05.png | Bin 0 -> 10162 bytes .aoc_tiles/tiles/2020/06.png | Bin 0 -> 4909 bytes .aoc_tiles/tiles/2020/07.png | Bin 0 -> 9688 bytes .aoc_tiles/tiles/2021/01.png | Bin 0 -> 10299 bytes .aoc_tiles/tiles/2021/02.png | Bin 0 -> 9811 bytes .aoc_tiles/tiles/2021/03.png | Bin 0 -> 9804 bytes .aoc_tiles/tiles/2021/04.png | Bin 0 -> 9249 bytes .aoc_tiles/tiles/2021/05.png | Bin 0 -> 10122 bytes .aoc_tiles/tiles/2021/06.png | Bin 0 -> 11086 bytes .aoc_tiles/tiles/2021/07.png | Bin 0 -> 8441 bytes .aoc_tiles/tiles/2021/08.png | Bin 0 -> 10020 bytes .aoc_tiles/tiles/2021/09.png | Bin 0 -> 9872 bytes .aoc_tiles/tiles/2021/10.png | Bin 0 -> 8826 bytes .aoc_tiles/tiles/2021/11.png | Bin 0 -> 7550 bytes .aoc_tiles/tiles/2021/12.png | Bin 0 -> 8658 bytes .aoc_tiles/tiles/2021/13.png | Bin 0 -> 8178 bytes .aoc_tiles/tiles/2021/14.png | Bin 0 -> 8155 bytes .aoc_tiles/tiles/2021/15.png | Bin 0 -> 8014 bytes .aoc_tiles/tiles/2021/16.png | Bin 0 -> 8303 bytes .aoc_tiles/tiles/2021/17.png | Bin 0 -> 8064 bytes .aoc_tiles/tiles/2021/18.png | Bin 0 -> 8813 bytes .aoc_tiles/tiles/2021/19.png | Bin 0 -> 8455 bytes .aoc_tiles/tiles/2021/20.png | Bin 0 -> 9551 bytes .aoc_tiles/tiles/2021/21.png | Bin 0 -> 8294 bytes .aoc_tiles/tiles/2021/22.png | Bin 0 -> 8123 bytes .aoc_tiles/tiles/2021/23.png | Bin 0 -> 9303 bytes .aoc_tiles/tiles/2021/24.png | Bin 0 -> 9258 bytes .aoc_tiles/tiles/2021/25.png | Bin 0 -> 9171 bytes .aoc_tiles/tiles/2022/01.png | Bin 0 -> 9511 bytes .aoc_tiles/tiles/2022/02.png | Bin 0 -> 9614 bytes .aoc_tiles/tiles/2022/03.png | Bin 0 -> 9808 bytes .aoc_tiles/tiles/2022/04.png | Bin 0 -> 9371 bytes .aoc_tiles/tiles/2022/05.png | Bin 0 -> 9416 bytes .aoc_tiles/tiles/2022/06.png | Bin 0 -> 10628 bytes .aoc_tiles/tiles/2022/07.png | Bin 0 -> 9704 bytes .aoc_tiles/tiles/2022/08.png | Bin 0 -> 9854 bytes .aoc_tiles/tiles/2022/09.png | Bin 0 -> 9863 bytes .aoc_tiles/tiles/2022/10.png | Bin 0 -> 9011 bytes .aoc_tiles/tiles/2022/11.png | Bin 0 -> 7474 bytes .aoc_tiles/tiles/2022/12.png | Bin 0 -> 8965 bytes .aoc_tiles/tiles/2022/13.png | Bin 0 -> 8826 bytes .aoc_tiles/tiles/2022/14.png | Bin 0 -> 8532 bytes .aoc_tiles/tiles/2022/15.png | Bin 0 -> 8664 bytes .aoc_tiles/tiles/2022/16.png | Bin 0 -> 7803 bytes .aoc_tiles/tiles/2022/17.png | Bin 0 -> 7630 bytes .aoc_tiles/tiles/2022/18.png | Bin 0 -> 8041 bytes .aoc_tiles/tiles/2022/19.png | Bin 0 -> 7985 bytes .aoc_tiles/tiles/2022/20.png | Bin 0 -> 8603 bytes .aoc_tiles/tiles/2022/21.png | Bin 0 -> 7844 bytes .aoc_tiles/tiles/2022/22.png | Bin 0 -> 7504 bytes .aoc_tiles/tiles/2022/23.png | Bin 0 -> 8018 bytes .aoc_tiles/tiles/2022/24.png | Bin 0 -> 7788 bytes .aoc_tiles/tiles/2022/25.png | Bin 0 -> 8310 bytes .aoc_tiles/tiles/2023/01.png | Bin 0 -> 9725 bytes .aoc_tiles/tiles/2023/02.png | Bin 0 -> 10039 bytes .aoc_tiles/tiles/2023/03.png | Bin 0 -> 10857 bytes .aoc_tiles/tiles/2023/04.png | Bin 0 -> 8990 bytes .aoc_tiles/tiles/2023/05.png | Bin 0 -> 9352 bytes .aoc_tiles/tiles/2023/06.png | Bin 0 -> 10940 bytes .aoc_tiles/tiles/2023/07.png | Bin 0 -> 9651 bytes .gitignore | 9 ++- .pre-commit-config.yaml | 9 +-- README.md | 153 ++++++++++++++++------------------- 67 files changed, 81 insertions(+), 90 deletions(-) create mode 100644 .aoc_tiles/tiles/2020/01.png create mode 100644 .aoc_tiles/tiles/2020/02.png create mode 100644 .aoc_tiles/tiles/2020/03.png create mode 100644 .aoc_tiles/tiles/2020/04.png create mode 100644 .aoc_tiles/tiles/2020/05.png create mode 100644 .aoc_tiles/tiles/2020/06.png create mode 100644 .aoc_tiles/tiles/2020/07.png create mode 100644 .aoc_tiles/tiles/2021/01.png create mode 100644 .aoc_tiles/tiles/2021/02.png create mode 100644 .aoc_tiles/tiles/2021/03.png create mode 100644 .aoc_tiles/tiles/2021/04.png create mode 100644 .aoc_tiles/tiles/2021/05.png create mode 100644 .aoc_tiles/tiles/2021/06.png create mode 100644 .aoc_tiles/tiles/2021/07.png create mode 100644 .aoc_tiles/tiles/2021/08.png create mode 100644 .aoc_tiles/tiles/2021/09.png create mode 100644 .aoc_tiles/tiles/2021/10.png create mode 100644 .aoc_tiles/tiles/2021/11.png create mode 100644 .aoc_tiles/tiles/2021/12.png create mode 100644 .aoc_tiles/tiles/2021/13.png create mode 100644 .aoc_tiles/tiles/2021/14.png create mode 100644 .aoc_tiles/tiles/2021/15.png create mode 100644 .aoc_tiles/tiles/2021/16.png create mode 100644 .aoc_tiles/tiles/2021/17.png create mode 100644 .aoc_tiles/tiles/2021/18.png create mode 100644 .aoc_tiles/tiles/2021/19.png create mode 100644 .aoc_tiles/tiles/2021/20.png create mode 100644 .aoc_tiles/tiles/2021/21.png create mode 100644 .aoc_tiles/tiles/2021/22.png create mode 100644 .aoc_tiles/tiles/2021/23.png create mode 100644 .aoc_tiles/tiles/2021/24.png create mode 100644 .aoc_tiles/tiles/2021/25.png create mode 100644 .aoc_tiles/tiles/2022/01.png create mode 100644 .aoc_tiles/tiles/2022/02.png create mode 100644 .aoc_tiles/tiles/2022/03.png create mode 100644 .aoc_tiles/tiles/2022/04.png create mode 100644 .aoc_tiles/tiles/2022/05.png create mode 100644 .aoc_tiles/tiles/2022/06.png create mode 100644 .aoc_tiles/tiles/2022/07.png create mode 100644 .aoc_tiles/tiles/2022/08.png create mode 100644 .aoc_tiles/tiles/2022/09.png create mode 100644 .aoc_tiles/tiles/2022/10.png create mode 100644 .aoc_tiles/tiles/2022/11.png create mode 100644 .aoc_tiles/tiles/2022/12.png create mode 100644 .aoc_tiles/tiles/2022/13.png create mode 100644 .aoc_tiles/tiles/2022/14.png create mode 100644 .aoc_tiles/tiles/2022/15.png create mode 100644 .aoc_tiles/tiles/2022/16.png create mode 100644 .aoc_tiles/tiles/2022/17.png create mode 100644 .aoc_tiles/tiles/2022/18.png create mode 100644 .aoc_tiles/tiles/2022/19.png create mode 100644 .aoc_tiles/tiles/2022/20.png create mode 100644 .aoc_tiles/tiles/2022/21.png create mode 100644 .aoc_tiles/tiles/2022/22.png create mode 100644 .aoc_tiles/tiles/2022/23.png create mode 100644 .aoc_tiles/tiles/2022/24.png create mode 100644 .aoc_tiles/tiles/2022/25.png create mode 100644 .aoc_tiles/tiles/2023/01.png create mode 100644 .aoc_tiles/tiles/2023/02.png create mode 100644 .aoc_tiles/tiles/2023/03.png create mode 100644 .aoc_tiles/tiles/2023/04.png create mode 100644 .aoc_tiles/tiles/2023/05.png create mode 100644 .aoc_tiles/tiles/2023/06.png create mode 100644 .aoc_tiles/tiles/2023/07.png diff --git a/.aoc_tiles/tiles/2020/01.png b/.aoc_tiles/tiles/2020/01.png new file mode 100644 index 0000000000000000000000000000000000000000..5b25cbbedd3a77401814dc8c1359113e81c07a4b GIT binary patch literal 8847 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 R(g6Sf002ovPDHLkV1jORSP}pL literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2020/02.png b/.aoc_tiles/tiles/2020/02.png new file mode 100644 index 0000000000000000000000000000000000000000..60343fe1fc8c48edf76a345a35caa4bda0839fea GIT binary patch literal 8792 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 literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2020/04.png b/.aoc_tiles/tiles/2020/04.png new file mode 100644 index 0000000000000000000000000000000000000000..a657c3dbd4016862ffa46c96cdaebaed9e48d1f7 GIT binary patch literal 3987 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

Ubg`JI^X5X|4$}wt4m) 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 F{s+Uo-(LU# literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2021/01.png b/.aoc_tiles/tiles/2021/01.png new file mode 100644 index 0000000000000000000000000000000000000000..9a07af1cacfc1d6a8e8408d00d5a6374a1a07f33 GIT binary patch literal 10299 zcmV-BD8$!^P)!sW8}I6ICz;f%OkawOLF9%sjKhn!s$)(EYw%VqCzb{r^YSA;ck zYwH^BadsRSXBs|r=9A+BMtR{=Oh&Utu9LN^>I>VON;}Oa^N6mk3%JMGao{=ANb&&y zm4@&<**s5nV7#}qRki+y^U&_%U57($odtpO4{v|{$U9GBU(*vOuUou^P(*Ju^lExr zyW31v%(`o>%5IJIWrZSc%F=cIZIolPM#cVMd%~TpfK`3a7 zyFYL1GqYBIe6mg2>+D^JNo}2iYn&N0I)m@#&Ub?_NSGZ~d7-)RNR`=S0RZ1f51}77 zAkHfw)(a@Zh%<_zea?1;)m9}ryS0ddQ2b*&(;gYkQ^tjhVgo%Y zS|kAA&SR~a6+dlspa+jt-yz?2>IML8T00HRDN$-OHyljx&j04Mudxfh`o&wV-R%JI z>0dwa5_+PEpC8zEsqCut-AA0N8rqsXsGeL8HkH=@Ruq&V3K{Fuc)erL;v+&;!HJ@2 zk0t){-UW1&x5s%9VWB1Ig*|UBPepEzi4&rID_SHWBEgsIGrR6x`{hplNc*3}l=!A&)NuwuJ zofj7$t0rV%@fb<>MTx@Qm>jyKRau=cZYZ`fxhCN}$Z`W((qJ-oEBhy*e(qcf1>Rph z1ydCOm@O8BLU~|vB$h%&^yC*O!AMjU23@bAAtjip}xU%s*Rq7@6B2G%0#bV;jQe({2$9CEy~p8aeOZ}Asabo zvK|Xxl11;&X*8LWBYh+N+_02S4j1jaSQYLo+_ZL@NXQ|%rXv{9szO1b4w#&yoqb!C z1OQA%Ga>WPa@HGkVg4Z>JiTG-ksaj?l{QOdUCqwAnw=?K@z4kU*1sk#h|;L^r#4?T z>P!I8e6y?MWG(s`!%m8XoS5AntBKOz-w3%(0f&KoZI`K|aH^^lOZVhf7)|CXvGm)l zn}q9FEaU`;xC>Op;xWd~kHDwM+En&37lVxs%t6@XtT!6o-o7!np3LZ}xZgF`Ft4@`{2f6Xs% zHQUn*h4>n6Fd7Ej522zTI80*K3L{@t3tpYL`1Q$4H%#@7^uVWA<+lvU_36aomF7utME+B?_sBz#aWMAug$_sGKWPRF-N+p06-|>S|{GhZWNby57jMDIKsK1z3Hv( z?=4AR_~u_;`Qh}wtgC%R$e%OMldYEN1m2wS_ecALyHjb1tX*~Omr8UT-;8w4gdhNr zs&sGd&PV%~4q5N!bu$ygyf0U_Vb`%MtO-%R=igt!q*1Y#K>(2V>fYIV833-=cin34 z85Pv`;`6sfNiWdsbl9yPG39r z*#9nVlr&-4_U2Y#qgHjB3;;xK1A2-9Ltz7MUWFhOHiL#&Rb9LM=`YT<-(GfqW9LQu z5}_HYTX$TC>S=^3$tLC7n98p;xNCwD*?9Y-t)}qccXK zH<$o`h79Od`g^R+NY}?!Weg^Bw_H=#AwON*aJHmbZ|tAMwMta0KR&r8BYs9gke86z zE$hj;dahH}9UBr&xQIj{-SF*y9-g&qR9FlErKY8B&zYYeoA(HoLDp_}ZcC2grm8)! zp0$4IBR~QsH&^fLIOkEJu}>{}OsQ7>bKAeg-EH9TOhehNVX$dNeSbrnP3BgG+Dm9- zPE3M6VWBPb;`SV;3d?(SpByPVe*PnTB7U0|Lt9V#M?ZZ|p-?Oq3xh_VK5lAMP&oQi zPm@Bca%IJ9xT(q!Y(~1$TrKM$XDWiMn!9pFQu;5s$BtY$VYZmT8P4KcU3#rCIxX;4 zc3)q+&!hJtPhM4v)G4+!_#Inl+4RNtrDY-rLc#69mS)wtaNm)rs@P`|cCs0PUOar_ zyzyb&}howBNIZyo4T9WWeid>8ZMwn@$rL zChvewVKdT|}zqW z$=0iko%OQHyylKt=Q>yznSIso$=PH!1N4c&Cg=7l$*vc($S)!;?|!Ya+~!Z`N}DIV zya%76(i#XUQNnB&h2>fcZ9DQEjGPw2;~r9~KJ$7O+$`)n2@DnVTP|2ZMEfN8n&> zV*@?jT#*_R;BNKH!IOl$hYi znBYi5hVfQTrG8^I8s{=KI_Rj2}>qMB8YvnUnemfTF6-p6V6TuYi+vjkvSWA zY~J8m?SRgrC1ys%ObNR7OI3Yg+u#KNz=7I|gq(-cW0p*c;xJu*7qP}LX(6XDd^kJQ z5_~pe28!4AFY;m4mh-j zS+xU~HcBi#c&P@zww@5`wPH$4VyG9JL91wye08$4tf_~$Y+=&=6VflOTwm&ybz~MVyVQ0a0XU%;s<@m=}G;$q2{Z9TvcLJwWCB^09c+DofzgF?9IP$t93%O@8`#guh)0Y85go- zVx-n!YUq%EdbAjv@2ghLS&aEUzt_Fg9G&+w+rC_oYxMQxhleI<@y& zMRBHdMFX_cnAGw2MPb5ic6(%p~GqxEis=|Yuvs|s$8B7YbUS}{dXh^6? zAYe28_0XjMdw4RNK?~qqbK#B%f-q0;LTBXt9_%~&0xtd zZv_Av6`@fPt$q*=ae*F(3;GVUMG3Rx!)Ag7u2JL z+1lPYB9=uWo2t!bCy({qG48OhT6n4E>*r=SbSe&BsxGM?yu0mIXg)uFee1Kc^ja}c z;y>HJm2lp~5hxDOo9LYx>yjj5r9orVD0D?f`VXDf7q`z?J9czNX!T_=m4*b4_8y%P z1^^s4CID1>L7+?>yUkXxTv7Yw!fEo<3j};#;KwPxIGv2cJt~{ zNPIm+tLChT35llDXyVS+U8jG#S=YaBO%zs?Fnht|h2Cz&(>&xb7!A24`T9JzvRiGj zfY65ryA-&|kt%0z?Cv>EAogAvAOGyb`|{ z!`Ger%97+C&R5j6%ds~M7K6oMab8;a?B25nK0o+1lfhguP8!Z-# zcbFRhd?#xIfG)YlXfi*sIZLY20)RrTfA6O&>G6Tn6M}Z<3^0{(=dm_FHKVMlXY0vQ zJZFhgYBHHN?D#;@s{{a*ruXZkJCkC@CdVcnzjO-C(?5AfOQt2HI`t-~)@lCz-G4__ zOt${1t6p~I%R;j=24Vr8y!6q5j_1D<{DG?a&(j-RD~oatP85mDyLG*N1E|?#DLhhb zGMWS9iHq2}UIRMu3W)VoYV?&YQUGY~Rtne*{JhFwGWRGn1gmx-m$~KXnHs(EweR!7 zcxUlHbx1n7Y>rOfKd&;HjB=ISoiD^v5UjT7hdC+EbywdW+cmyE!``nFv9joBjlExO zV&xR#Sqv2A%{@6cnvYzm-IZOw<@ogv_7~W6P~#v*XkUeX(5VdWetf)H36+i@RK%d^ z*9!iiDaVZ!mL9b8+%5DC<6?QMN^4j;ISR|*$_N#LNETUCl zarF(gRx>MkI+o%o@DRCsH?%kR6TsKjOXwNm>%+1UnZn@S+!M9vNs_o((==$q{+HTo^bufOs@GMh=eRNm^r zXRn_>25;3KYvUY{L8$DSPW)K%?$xh zuyV$drjC{YEARN)j*A}SRBfA2$p_72FlQt>?dbOs#UT4X1kREc#feV}5@v@@Sv8u)XQ*Y`_G-z+-8ZqrPVLo_@|?!d zalVO}+$O2&__eyNCrkCXWvxS(YdU1=zhsPhC_PqTW!3)N!m;S8)t0Ac0`!kyUmyKG zr}zT;`CL(Mk3zC2ZC>WYS-qOx!pf2ZIfsq7rIP`Z_r%E2;4lnYV@sJsf8Y9|_LK)= z9e+biiwhtT)*rZ2`>3t-)iX!E@@=l>_LOD+#cHWai%=-v{&mie=PLjpCcypY(;pwr zR=&CVWg%A}?^OV*s>N%*c3xE|WNoUvoj2?iF`Fzm&o)925qvv7=Us`f_yyqwH@s--)Vx^+DAj zbFC~%3+>D<*Wf0?lVbfsL;{V@$e>Yu+&D_DK`L)nsFeWF*3;qb<|*%0u$ZiMi`Ot{ z^j^&%u4YE=sNMfo$YXPbT!G`|J8GQRz;CY}#GMiz{vKQ=o#^BQ{?LCP3h=@T@V4QDiv$ESj6pIx zbBG?HP{MqKgv8;gDgwF`YPnkX-lJ(REgrAZ8bbM(ZDv!cRh`nVn|0;#Ud7ZglWgW0 z(W(Oc9LrnioVAmp!x>>YlNkW~J-DdRneVB}aSTJw{X?NfZ}+r} zjbaQc>g@!kao zD)1@xYKu@PsnLE8UKRjaItOt&HH5g67FwIGTetXYLLwGnwX&(^Lg^*U1{?qc9DeGk z@d**}!9IcR9CrXv%d{=Gx+`*ba2 zF@EkmCl<-d8Y%|QG!(ew7P4WGjYU|E4~x4$eZlF1>^)gOo6M$QpP+Z1c!LmaOCaKo z5^*C_19HDFZL1`nVgGG7y9j6d*Z!d}Q@TQY%Q@2VGeXc0?Ty2-kKJN9CSx(5*)uQ0l!fTHMBLg^|TYFs>!kACXPxrnazcj*U=PJ zk4DuqU~z}Rro~JhWD+t=R27^kdi3Mj*5L~Ypy5lJP3Fepj>w4t4&IW2P@-4G(mrc4 z+SxZ`F=+o>G10-Rp}2VC3hMKo9K&Y}l&)y4=()VF990zn5PTYPgm$N)PH`4;nQttgz#-kmCy%h|>mk~>?(N8c zu!gfeBoS80LA z=hnZj%vh@ERpx(EO%h?19Gj6Y8-l%lqSi0k)0Q`6yGV`k`}wtng*6@Z9SXhC6z%Um zKGMfo_l*{dh44qm!%OJNpwp+y=Rse9G+^==_A=Xqm}L$X4QODq#nRM877_x3Q*#sn zm%n_*{rD7{5mv)f1}woy#Wt9@@K4YgOlv+pwI(Be^SWtg3t{h>1A1qCLj-#Jr^Jmr z|7|IGgjJ*7962!{JlW49kT37(y>_Uwt3i(EY(rSxjq;i+V#jA%C=d!ICCWD?%Gaq< zcw`sn)wkIV*z)|cb&&ysoM9wKTAV-OHA15|PJ4adpamUQ)yAjZrcl7!&5Jg0h_Q~a z>gLOfm@wc8W2XW!xZJ-QP3D{{pEWcFuUouk4oVO?<#yo?q0*@KojXL5 z!OiICA)ldzQ+<`cmyQ3Gb%a$a4M}?>9&dUiZ|^0{j_-W7ZZEMSx+a4!rfl4>R*7gZ6l@YHRSEOVfnp03Rx_cEeE$N)pj?YhxU}IF0BYPFy)NXj$|*V-Z%-bJaSv;nLn)L8HBc5=2-8Ljp_&Gmu1BwMN;w2CfGyChfO% z7@1w1cR24?d%un>RXw)x8H3S4!Z~EDPx9jaeF&Y}koSElev}z1Rar+^B?rdYW`tFZ zLPxS1vJL5e&?<2dciaX0D~vi*{LIinnYo5j1?P61+-m{bWA4aO6$%p00dZbaR*lA9 zw>xU27x&!6Z$A%-s%%DBb)2(xgjKE^i|5IawAg-q-i&ndz{XsB@Bjj9j^{tDlsva^ zER8yp-ug{u^MRbhhcDbEeHDs1(xoP_-H=ooGHp#Fa{C!tEEYP8I&DoNmZ3x{hwoh! z7M`)vv3JIOonNK_R$C{zlS-v7^}P$>BMI{-vDVgE4z1kQvAtJVnj z4}Ig&m-@fjkFXjyEm+rUXesNuexla;v>$o@N+v9P$%+=qqnl2wni2PKdMy4lsk6`- zbf>PIJ#z6RiHZH)r>fr$)|~MXR&AoJz8nn*Px73_<=uoO5)4fxox5Jl!fV4i!YYsm z%UX{bz47Z)H}+kqT0J9fVM@3=&xr%B0HD&S@=7ipy?7G!<6{r^ROL8^v;C@VVUd)S z_v$tuyT0Yuk_l11v&V)chIt2h@hNsTZ!BQxly+A)*Id4Jt+b}hWFBO{X=JG?w};vWel(nJ6q5YOB^6uGe(}K$I}sWz)}lE#x>x z1m^)O2zPyL3Ao4EaX8DlzsIs!^5JQ*(-VT8`aBB&yaen|o|ujx6dyNE#yK!VK zof_;N=0;;sds-AFzt(m)5k0HNrU!>7`!T)Qqr{S3=gRRemcM)^V|;{-bAtOWRDF1; z&mBL_UTwd8CWFsnu$iuGlb5rmjG5%i_N&ToDLdET87xRy5{t!X z96K*UE!SCF#^GVjc|x@BqtoL&_$(%!w(V5u>EcEJIPm&?Kjv1l zbDmE={?TQ5d%yC=Er^Vp9`NmZ*fJw9;L+G(%vypVmPZ;xp6(dz=v0Q23{Xy4^i zVvZE_Z>88>AYK2(SpXOv?D@i?Bu8rNAQ&_{P$-u^s%3JT7QH^XwW6n|NkO52yFXvr zsssuIkM%j}{K|sKWO?VOD_wGRkQaZ~OPRT4Vy)iDq*EzCdHl1}0uJNne=NLQ*$%zL z<0y{9y05}VSj7_2&kJ7ZKbs_JQEo4*C5f<#zEj(S^>eOkZNPu!usBaGdhExn{f)OH zjx3x!*I+dK@5jv1)gaIPt`zgpFD~m|{AOD0l;A7-`yw>4_>8#eA@3i& zdgMwi02EZUGwIaz^AmG!Hlrq3x0(l>t>v>BZ>>z-e5@E7+@gfpF77Me$q2~36aWA^ zwV}OQ;vFUgfQsCv=*fWqAPRGrij|IgN5W88+u^}u{$=KazFMQ{Brb--f&A)FksvI{!ZTbS)SqO#V;~@e7%3#eCC<^%E<&RS0`UX?9 zg**cV0KoU+_{Dg(S4#oFY_ilBwuO!N^9~iZ+HqlkSCuu}dE-O(=2f&xRIz~`BAhR- zxIhm8m=abtI(!u75<+LtIbMZ9`>Lw^mbovaq&+fP6y`?483Pt!^~1;0-(NkIL9-Dm z0URC^7EYd9-CSGMJRroH?g~Q`<~BMbl*y%Ygv{u)!0C@C!tDsF1cWF1F*x-4!gh?a zj~hp#)B?bB3&wu>YMDjJVQU{h^y`1vj^XP z?C)K&?mb!i301O&*=$BHjJ1$|tY_l92r3P^w6{zx>oaq!&Tm=x_er${tu_tqty_q| zcH7Ato1dB~>($+C?5@N)h@Tka_x$`&25s8*qdW0YYaFbCBO_pKL2GRR(LK)b4=CxfnlVb!+F7W|)$Lo!S{&2;;6SV`=- z7?#PdC7?yJm*fCdR({&0FD&YqAz-M zDk9)8I_1P+G%?JZK|_k`x~w_dp1dOz3fe`Fi|}sfR5(>zYYbGJDBrmFh!)%o^*a_Tw9hsO45)tL7~YtHxxt9rEoZ(hvg(r2w7Z_t^} ze^+8QS@4{jyOp6L0f*T?n#Bcq06??V;og);AEic5*V;H{Y+G0Xp1iM~$=LZ~W>SRD zjx%My=_)9T$5{0G=0eiz> z3z>7DOEDQuXTB;j>P!UAr-~W@U_o*?ma=qmbfs8YX|+@y>Lcipwc9+hVEe7Gxm)@8 z?X8=kZJ`7Imq$p^s`N+R&$ljn=PmU7Cx3UL>_|}+0J!mmO0^QKI1?hQj+q^g$4kW8vTy5WiKvHV$!MQEs~jIf@Y5m zesxE#HGx2Pqf%|#C-NZ64S$CJJs!?-9=|BMwX!EBEs(*Xzk1{fw1B+`tD}NE+a#*D ze(3)Tc?&sjuT1^-PggqSYS%cs@r3P?4r|W%2&*coruJ%U$%$I5yGpt*is!)wfZ6NE z1HkOtrQY3l1ziyZfE{Pb zRXKvuGefh#x&E=S@44HIu=<|^1yYsn%k>!^d=~m9?=4`z{ous+_PMSq0C@hBzuV-D zMOd|2>imup^aJ^GKA2yP*&kSA&@sWTuG zJbCXv82IHcF5Y*TKW7`lx~D3~QA8QAw1Y)hmG|mZTDxAU^2I%ZN{ z=_P0HJN%zBCFP|bTq|jf;a^*8IK}zVk7wgg+KdR!1pIEC2MFt~uPp)hI6Dq!IrlG+ z{uyeE$34!D!v)TW%Ox?4pxR=%$JueX#u;(BB#Mz$TNL*=I}VpQ|379s;hY5eGR6P^ N002ovPDHLkV1nu6KJ)+p literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2021/02.png b/.aoc_tiles/tiles/2021/02.png new file mode 100644 index 0000000000000000000000000000000000000000..848b3fdb461d30b4eccc901e089a1d2fbbe896f0 GIT binary patch literal 9811 zcmX9^Wmp_dw;TwrfdqGg1qtp>g1am%F2UX1-JRfW!7aGEySqzp56<29yFXT*d1iZh zyU(dpr>esg)Ls-Q%? zK=>jP2JwDFQt`BaCM-`>vmtyRpEv9i??hDX6_v%H-Mux3$HfN0p=9&&N#BNS9#;*~ zpuDAcgW+)eJg=zKX?p-FfGpvEg!?D;m3huKlqJQFrUrb$sAmhuIKj<0k#UW+^30h1 zVY|n=F~o~8d$Mz~HO%d=MbDFw#XcjMO-j#7PJR2N$E0g7#==0wnb(HLz-XUt#cOdz z4L8OEoeugb6L%ErLd`-93W&FlzZ#Uxpc2-pF zw)oxZBKF_Zwm3QoPjvfuxzz8+1J!IzKI^L41C9wWHWht7gYqx8koQHYME@D;S`|Ed zKxi{5Y+?6%Ut40e+zR*a>W{cr?s{+ua{04UbhWtKek350*GJGOw9%83(yB+-s3CKT zQn1iS)Oh$2!+Ra~XBc&*_o;!o?!YoH@PAsn@uu5 z@L6|#Aelbw3yb2@)W4CZ%IMt-ZMFAYk1mh%3hXNQ0|fBA?qtlclHQ`SlnPmp6XVI~ zCx<*GBWCsRf{N*NocYG+yT{L4;apfThd+wHHi_K(56rn(X|3nw_YsJIO|A6NEjfju z@zC38lr90(IU?GA6<9#%W1v|6{;5n)<&^Zypug5Fo$drY`0#m6_PZD{bPkriF_HA7h)592D{f4zi1 zdC-tne|keE+eS#Q&pPm7rf?Z7;y1%(CCd<{f8$xg*-{Dsn1x;M2Alhc+V3ysiaDgp zx&af{{XQGCu1wA6h4GLy54gj><+1Y;#qccaCR0Qz%^Hc2Q)5a+>HX8ZO~T*u#?8lQ z=(PA=0WbU!@Eu1ud$W#X5#?d8_Vtoi(C;@A?|3*6fU|H5_zVEcT54}Aa6k&4dI|xj z7?tGoNs|0Nh%c4EvZ3-Uee!qscU_z1gfz|c!0Z|*fa6FKBYm9e+g31Nris{dm0X}K z#>c%AWDot<-^}eJ0Sq`I3(5WZ_7CMDZ_;kFH66%4)<$-?g)zn#k2;TWKAopE4DuFm zm9jad&;Y%hIshy!`5E+wMrEr_AF)w|_^HkBB<|mAu2tjzDzZG>v>veO&M!>^!KW}d zXOlRr{4&9m;ppAH-8oD;=+9A(jRo8A;_Gl)Y6cd;VW-8Q5_`0Jqk{T(nCP-5D&1`?kt>}V`~y#IMN zf5wPSC_SC2J`D8f^l2nsYJR*L|y)UGdV5y#`oUed zMoHIK}fr#FW)6^uf@J5071}-B!8+0#*8QVM0AD646<`EkCnC6h1Q@M`+X3FusI1GY0r^1 zj93N-XT)e=`2=2l?%~YQ?WM@k>Uj!IFO@g6fsh_db2}YTtQsd%NFyyWg6!mJkLi}l zreX1hNyBb1pMct_vqwq~QdJUxz$vV5^hWz6L3A~fs$U{ODt*#m*k?O~tiav_=4DT8 zplkoK>C`%8*=$M!o9&>PIe#2sTfMi}-NMLeHnGJlobN){$JHI=I;=Oonp#`^;3*I? zDYb&1sX|yG6A$+%a4&3$4?`1^GE^@40{}qZ{v4=T`1=-IQ|)8dwNl$O7WyNMT#h0d zGxW1(R?0X=HC}mP00R1+6F7saU0cw4>i+LxJyj`ua<{9b!MKMDs#^)7G&#=U9EI^B zMKza-bpe!7xJoMddW&HD$&19I8@r#VxX{C#Dki1G5++vir(B7T@T=!0b}95|3Dny| zyM4o=)B7=pOOaDTuRk{H?OG9$Vv;czzF$<5F~WN7Ef!#r3?Z0lNdp|o>a~J&RaDK} z5|fta#dnFqyTNwee8=-`n7}&H|v7e+t|rvS|}S_Fm-!ta9crO z|3RI3r+Nk$7mI_LSPP^0UbFwIdE~?gQUu9@zx`?O{K{EO#oSK*YgqqdGCCq$g3hgk zn1=dkvmhIzscd)nx+GmM%7sIx_fhY=TlX$n?)v<`wqPl=A)#tNhJUeli$%Rk5Lr9l z+g0}IXG{%PgL<#M{o2z^M3+ihlpTcbZl8@T@JHD(X*jd}nukW`R-#(2PS=}*WOWef zUMQt<*nMYhl=xLfC`Ex{&xa~dwr4)s);(!QL)r%Sn1Dfjmm%{pT2hwxNs+bQH(W-% zf?p+K)(p!5KPzOIu;D&X>i9)!{$b>&m4!3?^N6V28}}{yElMixaGpxMm^OuQ;3cr; z@xj;IGssIw$4W{}wC%@N@SM5_W7IRjz2TXJ#8<_zFOP5){hfe0dzDN=!LI>GZr?Sg zQRCPAz_K0vbSSq?EPQ|V&lrznKTB=mBe?C8H_uc0HTlL`hI!xFGQR6i@HXxB8X(6L z;JsCEo@(x9pyA9^yc4G76mh=dp&c>1puPD`hDKrMD}>O{tz-*q2sqrWPx!)OA|-OS zVv_Gry82M?`6ERP8}q#=!K&f*>>W*z#o9yWI%C&4*_m`_p5IG2A?ze!3v-$|i3PVy z87yp4@}4u;fS~PBbuxBggYRfuJnr;nd-K>kzSKbk=y}g9Ie7<8Y6~ZEHgXJ~_%XJx3$Qmat>m`f%B2^{>prRwtLmv*arrbo9zUP` zJe$q8Qr2x-KC0%rai+}AzV6HLZ<%}QbU|H|mqo`*i$VLHUWD|oNS{|+3xl_ns^;&k zU&rVt2w4VJCQ-ewpOWNtIx#I#KdXT2854&Ldel9G{Cqu0IK?sNbYDu*0?F*oXJ$lVjtwzIFdq@uih9 zN~~~*`5ClZ?v!WY7WvOzFJOXRi5|pM!8UQ?=d?Z=Viv&p2eXirTz}Y_znKRAzUwE$ zY&TMD>Le_-s+gI9z2a8bnYM_vEX$RT%S$C9GN4e)N#~eLYRj|MO^6L`AZ!5#Xt{On z&hT1|XQPZq;gzt67~|-U^#7|Qu>Sz`N$FQ>l7A|=Nh>tV=2FsISZyOt={FiM{A%jB zvXcl)Dpb(5_WV$^1uIdB3H>Kjf}GxKY|-(RSnpX4+3Yr_G89tAR>_y6WJ?u{hI&`C z>sHSopibgt<#E;+o~OKDV9hKHq1r^Q_3jt{${<1f(K1@Zx8@$tsP>PoJdauzwnQ^G zZvx4SH69>DbCX$`C&3tVhyd=Dl_m&@M}RW4g95_u3k7X|)6}!U`C$wl>}+;qGVa6B z33;FWZKd72d2DWt4@5HW@Y6vrw@y256);b$Cqp0yh1HgQnjPKs%m9UwMPL}K44`gI z!Mx!@eIlxZ#Ov2rrudv`vzld${HE?~lqpqW%M?P(l-tLngvF{HM)#_6uKqOQGTmxu%P7gH-FITys<$KFm=S%*Xp>1Rqi`0te@5@0`?Th?k+H~jwx1=PseC^ac;H#5u=?7 zA~2p0etQbzXH0t5B*h>#QQJ`nz^BxpQ`c4RUKSGRFo-NGlwDBl+? zr@XgV^dpWykZEZ5M`B=o!?Res+JJjiq#dkf@p=>~f`vV}s95f(i{dXz~lP6$eyY3e%tOyqAhs}DheOUO6)D)`QMEktI8dk7+{q`IIsx1wH zEngs#j;D@7Oh0VYGK&p7AcU=Uh<8`BcoOq^Y<_d)Ejw8*Y2&cGUX9a$M+QNR2cJ0? zU6q7GSU@7rUryo0E~IqjeRt&Y{BAqQ^4qO^N-WO)pVmWmv6o^kC=bZ&tcM)lY*|l( znAtTCPUC5yyc^ZyNX4q)=|~l7p@1TFBmqY0o*po3SqZ8d=lgWkA{_fd`eMpU<3wm& zbHEWi%KB7;mw@N#-BV>^eKO6C1_M@>qx7Sy~0Db;byWQ7A7#5w4%Dw2iURO07 zzeEoR%vB9~95}>XMfx_XT zd_dm)kSdb$xz3O_j>cbbg=gN*IfYKo=KTqKmHcxidE+;cJD-z*^L=Tqq{#yg?>Q56 zc9*M?Dr>!t6MvoxHaT}8Q*B!m4!MR5+^*KlB*CnRbB%4QRVW~eE?b;Dz1nWY#Gzdtv(^sq&(rW z2@|n|xm{(AL*p^lvo-v!dz)}D$Jv7dE+3$rVg915jDLC6HW44qqFA}wY$}Cz)tAis zTHXi+9ChGHD%j^0Pn*6)_>|Uzs762A35yH(z(n#0CoLK~3aKuh`_PuS^Gq7K+_?HR z_GEH2I(0Mi8~V~$CMwNm-aP4zgJ3Tm=yUmO>0kovg8fyoOMZU@NL6f6SN6yKnank7 zvwN!u+i zeo^g`Fom%NYwsb?^3BQhT~6TZ&vB43LQ({;WzFih4eaI43e11}l1pEa`6Z~G>5;)n zAp62uscyDkg;>mLnGgGM9To6h{fl?yfWAif->suP21-{)*Rj}0BjE?lr0=i4M|#W7 z?yIaYM!pi}{nJf#Tvj_}w@lm6{=Q+PuNeL$L~U~FXHp2y8FmGKD%w+KwNaV)XJ%M2<1oQG}hpmR@23oJHkbEEsT(GIB?ZRjYpSz@-RAbqaZXn z6_D6yNtYy{6L}{>FD3&IQ>2i|-^v+Zr3lD>~) z9!6};o!~K-l1vcEQzAS`EWd;W3rY|P;ltk>5{~Tpi+x%tan75BB55Dga7TlEhlfnQCrDeP3z!ozEB;cH>+;$0iho3zX(oGerKW7_YUoDC>#1Qla?({7k( z@;zY_vAeA0BL+XvJCzQ06TU=YN}bHqHc)20E7vt-t5k3XmI7~zrj4uAEhUfVR&GpD zD0Co)LrF}*06N2qcYTmyUgBvodCp}VOYz?5#s-vGkcImgluW*D@?ji{GiDG zNDaBtaeH`wul!|cU{%}PC}1J-$$y724^I^Xclw?_O7g%heKM6ZeR8Bs7BQWZLbav? zQ8RI}U6DE*;ffQCaY%IEb&Rd8%C5f2kDqzp6+vm@y$Iv+;UbY`IdY^bww_0vd98qQ zVx2Vl5x5cD5Vlm9Qjp@KmqV`lS5U ztru^PtGuSdQcIuu*eI5c^9yLBeL+`_XvV~t)g8l{pdj=@_z0{oibz>6W>GBa9JWri z+r2sg3rcS)&O>A)@E!1z5z5$B?^=XrtOkIPxfzQ5nAwvf;2`q>2>tSyG`W}O9ka*0 z%xi&k4wWmVcIsA=vG?uB^;u@LMmWT%U+jcG-Q>X#jEYO0)OpQDzSJx*UxSpb?^I4F zL~dfcx`_n{#p>U!y<3R-#21-V-bALgEkhw-AGSZb`e>;dcG(Vfe@rNGz4cKUM`KJg zw$eeTkH8Ww9;P8eg9bjrm~mswolzIk6y5h5u*9KdaJW2|V6?l(jsM&R9r+Sk+D)B( z8#)N~FTTyi?i^w4Jr*HFAB-HqvPkpQ@zCdknno#eYfW$=p*?P;>U8=Oqhu+})_a`f z!h0okt%jAR&tCY0GUijNu@%E0T#Z(`@NV15AU3?UOl-DUZqBsnG~V?Qih1;zE6SYw zm@MuGZwjSL7oXxl!+ZPxtuqJczVhZvR5nc3PVB|H9-iuRWz=(GVt*)0nJR@jfz@3- zBC>}LtVdk>pu3m`8~Y><|6`~5x6VZYUULL50$|HI7^J<)2l!6pOyk}9Ml3^y_}=FR znJHsQY+BVT5p-=cLhWZ}uw#6whLghay6<6e=AjrHKOKhxu8jK`a=+^pgPi6Z10AuZ zi-2bKVoLPej``Kb*lU%w1>el>rz{HGJ=&V}qtD{k5$MK03WsoITI>c^u9tIScJ;eZ z%Dz~QLTN(_s*|Rl>||@6Q`8Ytk|NmuWvqaKpXB>ipSo+lE$5B{Z29v=iMxBA?LhtZ zZU8!~PMms^H?4YCdn*?3Ki+rE_9A}^N$)ZM&;_z54Oy4@jK?E1g9+-h-!3e~eVo^G z>gL+ON33rDCaXvGDyEba$`m0XH*4~`AEUfVkATiV4ae3F)f1l6)VqO7uzlse&SdC> zS2UKkvAnIR@$MtteXjDt_Tjz@=WWeD`$PG!Qm~fsenRtKtgG?tI~QFP3`D5i`gGEz zhzv+dK8yWXCpL6ljC*D9BddWE&PspbJ$wWIX zhvrBtokA&tv6zJLy%FkUS&U4M#m7d?%Z-z=!qSwn&@>zCAo|Mx#7>DG6+>?9@wR~R zpF4-3Y8>a3Oc*>>qG$jljn&BTAOqBIlt$AKvOt^_3*)KBghK ze)SBB(^rI7!7-EAVRbw2^>3mGSs)C`7s#TmaE^k5dd?9_Y2hN?wp@|}zJEdJIjDu` zEe5cJVvFBG>|c)#~7~cj8%PvFUtBR`qAU6jQ-sK62zqs6W*c z&!6@@Wf|i$5B`Pg>AtvcOY+(efTkaM`>`aG-;blK)FSO?mZNQ`Wx zLJ%RzwJ}u!{Gh5cl_LLoU~FxrbUy)8T3O-hnz3;%olj&Ej8MM9nO%BL4BeOKhavRv z&}-2DaZYVf@FKem8a7QIYx2at=`~;yCMi^~Y;gaKFQ2$cAXPIxQ3LzCQ!;XGb1*(T zkx59HGE_O}f<=AXgk6)a+=O7RtA||AX=TkS8@(|bU(skNp+QWXO1dB8CFf8OfoXEp zcrJK);j668QMEXM#h4IldHkt%8(kf zfo*gR+niqiZ+GTpXu8B;#f%S*V%cRq-+g}=5Ax`hj`SEiAvk>9s5V%FX;WXt^hEk- z2wsP|qYT5c+ZfK-(=+bD-Y@JuGyN@*SbwfyCZ&j?0o1mxSCnQ5FWG*TTvHsmYoW_EO_y=lW={k;Bu+>jCppwR~`vdfCY0}v;N-$c#8 zTpdNXrv@)~`rt1_r+HxK{nd>HB_!D3dSY57Z#V^!X1dSkhJJii8{(MIc&>~_Ujy6y z7%$LR9Wo3P8o{D<9l)bgT`l_Q1%WF7fNfR&StpUoZu0~5NJ_4wq>x+`nw&$;3h_0q z#7qYl8v(#z2FvGl8lq5G%i24piR68jLC00WyKYG6eNy~6vv71<3a%pH7+=wdf#;v= z+0xxCExwLN0zrB@78!N&PZS{C;X@>D2ue-K+jy@;6f*7DasdFSh`f%6SejYOp6Lsj z?(*$l2<@Pa`IIb>1=0Abb^VQP+2u4D+gF3TB#c2Xp9D*|A6E(L@})PFYt%7fUUKZK z^)c^yB^c_DqpnE5)KdNk)bhboePoa+a zyf7w@-AJ1#9Aguy4Na6vbp`ex-h8DVb>QX`D9sBW&!xQ<;$y2?J^9nz4$;>Nr1M}b z1Lp*!9()gpi<6^U zwTY?Ih}FA_k1vO}kbo|gApc=wJrhS7#u5y=3i5?P{>xpTX48UrWTf5$MA4?4sraoO4H%b6o#NC#7icuQY`O) zXm|A#2dA3j533N@?en>0{n&Cb9QF~4hC7H}AU)e@`dea^={Nd-6C@H^{H^Qdcp71A z*;v+_#25t>Vr3)*6iqxc_#=3 z0B1C0Jjk{ibw?jkQqm6{i=cweoOv^ej4O|1OK3mx_0o>;f;-9e>C=kzYBggfY){%c}oE#-i?imno;7K~uq} z`g=>1O8PE8g66{YQ06s6n~b$d&T+!?zRW^|Td)Y9nWi~SALQ3y0mYQTbYbm@U*mJO`IL=oE;U{^UB^vew9`oOhn>VKPVVd zUz{`~agsAa>JdxZuqbl^zxz{w*6i)%&RaQvUUJ4USB1UM?Rk7u&H@3IhxsjDgW6%vWvL;9t zvmRN8RGk%2Na?Y2d1@hLs5Z(__H3Tpe|Ll%4{FWi3b63h`HU@&TEU1f-5rUXTeqVK z_9XpMPhYhEuw{B<-y$Scaazp<>6sgrmjBn*LC!wJbTqtne>Z}BQw{k3xtr004ZfD^ zN}2F8A2a-Qg!-C~)phPg@~Nk{^!vPID~17*Ddlqnp)vJAI1x*Lg}b_zeVqB_K!N_u zv3(OLHT;wa@e8NZ!&<~>Pu{dCgdU_=in)u@Q_+`Jl%HkO@uu8#HA=$~Q0-4+LfW9_ zTjido3+>MjC}n5V^T_x&zxYeyY5Wwr(~mOF+PNk$s%f)EASWV3+fqn-X(=}zC1-1N zb?DqFel8-5dNMCs`x^(Nata(>{nOtITQ=_8Q--T}ytPTcK8Y{u%o@b1g*b{O-ObWI zW=?Bp+88VWClJ76ecDlu*ug~3_Ds3!*sUY*<6(9zXx>)JAt*=dx;l^LAm{h{e-_0#+(vt<vW7`>`%AjeFOxOn|bkbsW~6|pq1*2NIj2-%P@x%a2K z?SD1a_KtFx!1Y?Li&i;Ik5MLe*p+|r-ukk3c~p)PVz`-EI6jxeb&T%9SWAF|=ko%# zJ)o;@oYAUd_9r!}d9j2cx-rCgy zcYM?jY5Jfl^-!54LzO=C^*I4s=wttZ>q8a}@2EqruHe`oe$tRxqfA-sEyVPCJECyor fLoSXzze820Sz@%+>oP(Pivg0Naz83X^!)!1$A3nq literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2021/03.png b/.aoc_tiles/tiles/2021/03.png new file mode 100644 index 0000000000000000000000000000000000000000..7ad98788d6c957bb08911cbefd37535d639ed387 GIT binary patch literal 9804 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�VgY#CJz+gJCig| zT+5swe3^PtNgBO|zbLj5eDPCiy14sK2RMsWYP?M5x1YeM zbg~Segreg#%p;=Ojpc){s!-#oZn568afa8~T9i&q5TBo=Q z8zi*A9XE`)n>Uh`R~yIIfbJC0b3#)?24l^=27k?|9k=^zm=~ohFX>Z$`s9>qCSdNQ zs5~5hSpK$={l8q;yqxCNq~1Wt zzS!(qZo{9>PNCU#dvfFOg8B2vvU%AEPF2!|qUmjCtdGC$7vlz}YrD|FDt>vgIjra| zUwCYg=wy2mL8sW3lJ{KhU}iA86|zoo(C@#_g22zHE$>^UJiD3XPWIxRbMUg-afZ<% zuK)bxYm;cRZr&GIJI#d$((`H!UJNe1Jip%pG)T-buy9#hHLK;kEvF{^0Yr+9|uCS=6Zt-OQ%(zY+7KYlpDZ@7K zadj7lcX>0T4JhS&Hb_i7dBlr-@h0Hx;(kn-K1#BTbAdmP@}P}Jayuf-0^}ehrg5Qh zmHXSSBZnD+_DM$o`dLU^bIkTZdJCvC5`ZOy~!niy>j zt46@jPn@mq=$i=#gF&ul;=H!(36?@=ygnR>-j%aP|KZ2qUZGnZVq99ZloyV2ke`B3>~DlapCECgu)|lZ g5s@9_>9?;4M`&$IkZ|RD*eNkUURqhITGBY=e~`daMgRZ+ literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2021/04.png b/.aoc_tiles/tiles/2021/04.png new file mode 100644 index 0000000000000000000000000000000000000000..9e8ff7bd68f924e59e3f1a60f51179b66ec03c1d GIT binary patch literal 9249 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 literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2021/05.png b/.aoc_tiles/tiles/2021/05.png new file mode 100644 index 0000000000000000000000000000000000000000..46df117e357e46db9573ceac586eaf96562dc2e1 GIT binary patch literal 10122 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 W(s!udaqwsC05TGa;+3KXf&T+DzXPZM literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2021/06.png b/.aoc_tiles/tiles/2021/06.png new file mode 100644 index 0000000000000000000000000000000000000000..d8410be4a65b3c69cb3863636cd77711aabfd053 GIT binary patch literal 11086 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Μ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 Zz16;7ZoTC%fETL)MOihO8Y$C|{{tI&ha3O^ literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2021/09.png b/.aoc_tiles/tiles/2021/09.png new file mode 100644 index 0000000000000000000000000000000000000000..a4a2e85b8925654b5380a17c818447cc7375b01e GIT binary patch literal 9872 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 literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2021/10.png b/.aoc_tiles/tiles/2021/10.png new file mode 100644 index 0000000000000000000000000000000000000000..96a98f7d9702e30e495129165553d5522f1aed34 GIT binary patch literal 8826 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 literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2021/11.png b/.aoc_tiles/tiles/2021/11.png new file mode 100644 index 0000000000000000000000000000000000000000..df47e05dc81ee91f714c41bf63cb85baac87ef6f GIT binary patch literal 7550 zcmV-^9f9JBP)=RcdGLPfv1^lhf9X z(=T5Xe`##hpPkf>6f4$BOO|Ab6iHDO_nia@E+7el*mn&2W9Z>vFaQA%1VNC`FW}EUly$V+6z5|I8rT zUoFR)ah-Uhs-0K46}nOPbica!gC6{vpOP-l01R`}_;ZbgU6n|;%@vU*a- z;xPCUE}gM5DoWpxn7J!y;?dmt@j?XS&8bX1dZzllfB0CxVDiJeim))&;nu0gzPt;+ zC#DrAswZ{vNrF?a?&FD;#gUL1|HPl|>AS5UZW~qqp$PC^|JehV6J_(6`@gg!wMdGW z=TxPvDy&Gx%Z+0v<%&~_q*)co-8V*CF7%NqlpW3~s7V(k^3_V+qiZ9|9_oYl!@J7k z1}s|CiJEm*yih3R0s=?RRO6}w0JqzXAV|q$S$GM8`0hunhRvud95$1q^U5f(BrcH; z0H2=gy7GFfK}|ss#(3F$X3ghIm~4NSjEwTc(j!@7xsb-7I7fR+hnF$B_a*>fx_^Per0+RhGX7{5+=Oaej=@AR;Kkwdisf>-@Xs7Ri_K@@ zUkw_IG;KvyYNf90<5ARwE-G~oFOx^k#G?rWF`z1rfVJz%Tw;lK*66FU)8Po2h%#Q6 z1HJNk%V_IN!?!A{KUYX+QlDa9@#a;hxt!>5s}e8iy*(bEEJ(^0dmOeM&8v|={^wOM z{P@uESN0@iiAehi=*fHWfh^)zWzU@39jIPNe^C6d%;Zp9EH}HVPP|t0^xxJ!`_J{s zc@kpzP}5Xc_D_VLcu|+T>)P0r*ISeFBqv|1^*-x<;*Cq-YgGo917&d->7|J@8lsuf zgByf0K30LnW&uFe>4Kc96vac;g9}3(KI_moDv0+qSXEdw8j@EnuRKwJmrM_+mu3wM z6FR&^mM$u9$feO~(zLkB6NRKbxKX!RyV5_)C{F}{-0D;omn^K!t||Z!CGz7E`82vm ztM+{|G2O2Y7X^ku;?+zWF8_PWM2G6=OI3yY)A4fu@e0Hoi{1tRd!H$J@;kK!wdpA8 zwi;~$F_*||H98vqPy0~Q)JV(p{rCIXd}d-!JaIoh`&enk315HXB%QhPfD{0%Ci|_o z9|C}CWN|^EO~_i_SMBpa9=psSE1Tu+KY><(3}KBB^_mzA0j{SpF+Gtj^A> zWBs=$LZ+ZZ;PIj^bbd^mU*{CcmN!{7UKDjR=rjOWn9!QER?Un701z62x=49jN#)q9~d>uUAD$I+fMz}KB07(3{%zI=u%Ry z$ITc3x*NwccP8P_1{o~6)8<-K>XY)8YwDMLc0pD}v^~*qIZ&(7uA4JW_p8U-XKkj? zyHG*#dV|Sk?0z~wrz-W)<&pl|lMqqo)iEE?oAHdn*;zFgU05w9A@&E1Bc6j z!e;{%94o@2WJR5*NoQS}HH@@Qk3F2mc7eg5HlP3D?TRN0vMW+}B93XvI{4|NQDgNM zmRW1P`bOLCQ~62xVg!(d3EjhsLwlYr!Yg2s4*}7ps&`+z;XUXh!HotvoC$!}8_9W+ z+80Y~M#rUpyRVxwLBR3q=1s-*Sxh#=VRK?737PQ#U|0yQxt4{6v0nMl`$27NHQAfr z@9DfWMlAgAR~o%*>gP?L{OS>cAa1vt&ZOnl$no3gfYz`~I--vbc=IT=A9HTk-n< zDP9(b5uYN&J|i@Q7tcw|76X7;Yc(!eY-UHtm7%)NmoZrMg$ZrJo{X%DwULwLc1`L*0nl9q-$^Ct99Ge@*#@@U6LQwJAEzZmT z-h#SNoR?G~AxnJnl{)-uK}~u=O*#NPx;l)#+j)3-$ZE6~?aSPKqHs~Ezxm6D*rVN` zu==|~UkKssx>2{y)XO&T+ z?~X$8V4m`)$xHdxcDH#$5!U97HoUx}tuv#oGlBEI z{a07Q!W#%Syq$v<7LUi1q{Y>~P$H2Fy?<47s6IW{y(()UkY$J-`{N2(I{9_Psw`{d zC1F#a-3{aoPFRwp_?=JW=GV#*TF_Hs0*{s($F4eASX`eK0?S%>y|LNP?gsJ(DlER3 zTY0Ropf-*4I6gF1KP=@(a*7XR`JYY{c3w)vz}ekE-c`;YgH6vUP0FuH&)ks|^7UiY zXmOT|9Z9rsT%`i!^@FvvGD>%S`6o}j_xB$=9j?`DhmSXUR0SkqAvA=^X7EI8QKCSW zAxh4ZrsPYB)3?LIx*jZn@CJ^cS~+j8e57TX#C!RT`&(I6KoZvJ@6{(}li&2M1(d8| zX969OH@>!k&qqFV9^(+^eyLm%?j#}nHD%AE3IL@Cvy=0rqD1~=_gq?W!u|7os*%OKYI$*emeb+V&KjCO=na-PcTeix z=ZnYNXCGV`1RCVm%Aa~||L=ZqYiX9^bzc1!${9?LZgF8eMG+-P`!{cJ*hI@UR2G_JANr>A`I8 z0|@gC2uIAT3IH_IhP&_dn3k+}-s-yg^ZS}i=dG^h-}Fs(&kr;!F2B)iG1$ruWqa4m z+mn{LBe~;>$9(a*QBC97w%g}A<_2|>o%1)(c36$}qWu|oh0?=WE+=~P&5oJDMb(hz z-v95J8Ca}3y)uP!L7~I;Fy1jc_Hc&s0M_M-wG~tqIIqp*aN1o~lf&si=}ek9Mabqc z4}EQUohFOL2Jp8k!5jK{lYV|>CXCC8YNqx0#5f#68L$3}JDdNf2Y+vfK|5#E&KdD| zT~1UxYvfB-rs+x2gbNBSasJQ1oyo`lyh=&!9F_wzKyEgjra`IjE7u241WBKUF;aTD?|f=)0{@jjlcm zz^t>jTIVR&BszYDjRdyt6`2IAVK}#!3C_9o30K9lMWjj+Iz&du`BZiH=0}eJ#4mM4a ze)`}Cx3CZRbU6&OLuvpR@0gt%40_l|;>944aQDBkqpNY0I14v9PrB=P!R0rattLBZ zTT;AyF{k>OqP|-bTGh(z@Ts1K)(-~CkL6UH%y-zFGyRLVe)Z_YcWX>~id#120RTx@ zG}?Og<<}3<*{_NWFIUJu@p9eV_)^=&0lbjKV;=eX?#b>stHCZ!69Irg!UF(Vx`+-8 zJz<71N5E?MR;7AE*Lh`x#4>nKIe1UW<}>YPr`zpL$c_g9?<_-<2Y_KkSZj%PqYw>e zHw4~O->dz@Pny@r%i*(5yj+XA9*aw_91eRzxyBozTO5~q-xenZL?>F7jbP>LsQ>!u%pP%7i zv)IJ1LK&~&+m+yk)(az&R3ZK-Q#WU_=xhLxS|r`~#j@TTiltd2H=a@XWT9Sd?)hY8 z$xI*zz}Toe;97XsGWHB_yfx33PW8=~9?WL*n9U#bE=*{vP8Eq$ghCl_tbOLuwP6mQ zRsW@(rX_1~j>NcRz5CxQ)5v%tcI}I$&A;h0Q>lRnlA8BEQ;Iz_B2HZgfZOLDk;eQ$ z6>sIKe1U`u07t*Qn^@lb+rE+e(*U3v*7V<+$f`&#KgKgIS_YdZA6y(D4qXE|fQ=ay zZbmixx>oHvmVfo&7Sm$TCFj7lt2wG%^wPxmWP!uxq%&y(G1qQ(m^3!4(GCFmd9y&mwHoY94rAYorF16E zZl>s+1jxH8Hea6iwIIe+1)eLL`C@KvwY>HB{hilG?N%oMaCsEj!f15l{`>u1*T(id zSLFR`fV}>(;r+;nUa?|NRV0|S7OT+#(UpZxkEiTC6G+m3x`d4GAWGyV{({i0W%y1;n- zAR1H!5xW(}q^h=g{qROYSlg=Fg1qZ4tZh|oP2Tkt*0!p)Ebl6vcYC;V`bGc|YvnU% zpAMNQCP7RM5@??HU=j1G0s!K>-YC3gY%H(OTj924&9t-eq2j(Smg*m_#{F6(Y&I4nT@|}o9bVn++l#cfgqCC$dx#^+IqkU@L~?D2fk7c09ut1 zpX^Hli^n|rr`3W0T+^aFULt5~XI%?oOjVjGy?)+AS|^A(th!P6RL}A?Nv}4MTnkw| zX4&DKka<@{7~{>@nfT?`j|ye0{0-Kc=Y1`RF;xM;)t|QcaabL^KVi4oJFX04>!^00 zEUY@UG9N3gBoRn+B?9L45AS$+B2H?7G_52tw_4tFW6Y1k>e95a_ogBQlPTI}RMlF> zo)L(b(qYwXHYxq0>x`;9@8Sb!p z=dG@#S>vH^?7}?Tg2KkkdEbm`4(jZZ99Ai9(Rgtli)Sd8VFk+zo(`+yUDK3xdT)(m zOSJtstWI_;0Kn{!hQXxmI*~WoJs-HIshO1LT`1*|3^}<%HUtAEhapPzu=H@d-Fi=d zA37J};{@x?;*E%@%G+Ueaa!+Pjg+fHt)y6VAHp3Fb672F$Zj}O*>^|Ma=tI9+=7_H z>U8&tvBTiKsk|DwEJLIwm{ej8t2tFEk~E=i&h+5I;DTcLSFD{qgw^oPsx{`?lNZb6 z#WG@v)9!ljuW#aC&1UoGzH?x`S-cS$Rh@XP1_2OAxnwWQI|@=wajLMeE`wMy);>e3 z6LP-_b-C|f=oxvSJoweh=l=2FCvSDkjRopi5|_Zo#ve=$BOyyPJEU2fF@PI{QZ7+g zRi_KMacspy)mYo?j-%O!zEN@hUp{r(U3fc3bTLKD-vKEdRy(hcD0}9JC3FVu@Yi+| zt1ZnMMjv?Gw$|QTS1Wbre{_4aedg4w`$`W|q-CRoNXEw&s8ycKKXRrrw>s60x~(R1 zVk1h2Rbo3wPFOLoDsR}W&gS=f$n)X>_POVe*KV`{vcdqK-7uO4lmj* z4pPs-7kE4#in_6t&5KICMQ6jZ&>%F#?U~=f+hLW#_0Up;I`3OYRhYx7W=5~Tn=V!9?Ei4prq-`MK4p zgLjo!NkLtjABR=5+05cHy~|@Eqn|f6OjQ=2ymTh*@o!brK6@bPcDq>|=Fv0Ncm<2r ze*3LevMTuGCB)0(GE?%U7k+fdSFU-I!)lyNAj=d1fJJ9BX{~m%qvzxCs?&vZCQYL> zWb91zKfSwzQj*o@`pu2J0W^&~1m6t!B=yTu%c5{>j&?6QPd57Z-2PMs-Jj= znx=-DrYL{H99D_Ec8kN?vUT$%9rc54RRxaqev2PFSFFglGUl)vAg{yb^!{5%=Nyf& z@OlXA!jJDnfE8o$Mhv&|7UU)03S&FkZQh9SdI&4#quu6>81IU(wnDU#;pGU~U;fDx zBr~@N@cKuDd1)KMiX#Sii}q!ZDp(CRUk`c6QwgY?bjj0?Qg$&C6HakMk^Q8W(?dTd+AU<^$sI1(IS=7;4~>mQr?i8kQvVru=ES& zp{6M;)i#Dz4ODSBQ2UENY#FvCtW7KNn6JF3)Zq?75JH~!glrK%o+FTQwJIYX zZR>@;&g&xpP~MO$FG>hxKbuiiB*@Z5O{wa((B`gl3 z@74qaV4zCmJ^Uw?l=pNtk2TpnM|2gylKJ8Y`Z?B(Upy4bc#BFsFhd`zkgG&HevB9 zI#g^vD|c@yCM?`Q62iVdViu|RS4x9Z zTvZt8Od387W>o`KjMtYzD+V^7W!Bp$j~U|)NLYC_^4dQtA(s61`!|TO1&-KLmBZ@t zR+G(Rqwfye7@aLVKH00B0SDU|UF_ooXa+&gbCU(fs- zsA9bS4O$TdVRM=Jd((D3ks06U5vSdSw{t+kn(A4&GP``8lw=6@K2zeq zzAwa{ssO-`!zv}OMQ`i)!|)S-QDrsQ{Wz=!9;&WdNX?GhO>xn`vpe zm*U4j73cM1&aXjX z-s_#{oCDtmst()o8XG?btr$?$eeLHfnp02eP?vkp>EfP71wPRuqpK zIt2CLO1bfuJTlV-4{w#BO1)xlF~qRaYhS%4O;D1r_M+JXMR`<0OAxu(87xT zR^CLsejHW<=k+!?^}{>Wvru|COPnH9jjY_PaRXI(krX#j^<&UVdQydh$Kx^B3;-bd zy96Yx;9A*pIeFBc-A&EwZE#BDl^4rQOID(PIJWRc|Jk6AXrRiA=M>hb;|8j}3|ff~ zNHfcmmu3z61ryGjUn6%pQO(rKf^QFD?S85tcTehr4+n|1K|!^$#b9G`nfPEQw$JWH z@p>DavN>!ZSfpm}PR=M#8flrHAJf_`j+8=a@qvty`_q^=BGEuKE|IsRA)92Nx+;qH zWuz7*4BVa2PMKUTG-r28=B}jH4+f~OSO|g?>`P;?==n8rTv)-j@>KuAp3@~qzEL&U zG$~0IX{Pk}lK!9&{bv^g(P6dYqtQjBe&?}VQ4(Ju(>-mA<=H*v9xPj`G++1o&MRb2Z; zYe{`paeY?t{!9Q^nlaq`Wd|wM(TcF#Zuh{Q$=vGHp{C^{2;uB5D71Ipd9>?T{?Rkl zrX_3F)zJ`ywOLe!0drVo(U0g7~6sy6c6SV5Bv>mJ#K{^mqt1+jbNXBv0@9D z{3I~x|8!!aJ)m@&l-OLV0)R)?MsQUDKx(m6l*o73Ty!RlFJ{{D5fH|zr zD;E=TMFlnKL-&=wYWhO-w=;6?y0;2C; UufkRP>Hq)$07*qoM6N<$f?{$Cf>zYUvB^fMqa&!Oyu;gT=)DY)k#BPrI0&!H>+S3OBnhZH9aSiWm zcz~Bb#eB|gmiS35ApWf*IERo)jkORgEw5Fxoyk|jd(EI@vAJ9!pAGH!y?yMO7GGz$ zD&WF1!mQNZc%&y-^FgQ9eB_{rKFRc?BiZ<6BktXxD5Wz9DTMbVdNu20 z%=z?>@msm{ZgDim$uFJau9STdlj`K8zG zc7yWo-a?-r{iQ9D&mw;BHy*%SZDyP|FG0%{%iFNOb0TX7oQAf+t^j~ewDSd|kH*3v z565m|BpPnGLtiYhJdNxIlY#QYx1 z6i$AsWfwmd#*e#sDu$nf~@WLl(gJ2BQVU zS%rTRX1n{YRpM_fxOLZ7u+> z-7XfcxcVkdgLELRcGj%*NA>GLLEf8pY%_jpwf}_4D{5^P^a&J6mI0Yc?9?r(yX4?I#t{6(JO$ z^szm8q<{cp$XvGW`rXwE8P=G*1holXW$`rAtyL3-W|7&7Az9 zyTT6h4@dymkvsMCqKlAQvjuv-m~bH-aY>zx-xG7!^~J=Ui|`p=^Z-|8K>O*&si63Q zYYXu+diVr&=|XAE7gJ(QZr&=VHi13QmffK%MWe*kY$Wnv=TGsHd4z~V)Gk9BwNAl}H6_rbG^3czn{gEiHO*2p*J6zFe9e&mnH#!1oSOeUj zL5A1is98knX&Kw=OXSA-v)b*r(XroF>YHg~q%tuT&J(gWf(WA_K}!`bP)CBJ%0I0V zjsPK6-ZpStyW#nQXsYm?sMm;kfB$B{ECGv}C?3+0N86vq>TtGB1Ck6{k$YdJeeean zJ-mJ@w0U2_*8T@(7|r;1r2Jr#9-3LY6t~oOHCVg85wG_#1%Uk1=1*lGZHsJL*A=Le zC0B1c{7v&-{U9X9lw^{Q`bPKVUj*1nNzg(go=t?5&J?BPb&?4>Yvei!r5xRCaI0$c zL|9Pl?^GlpDY|fnod)%-k1`<*gq7u7BrXW^~ox zZJ-JN1;xZx{6SBjd*~HIluYw@EGWZNKY*qN1dksz--#0d#=gde!iC8UtbaA{-91Ot zb)G&S5*WCR)~1I(`!e#|1-+1iX1NzfDE)fP7QB#MnHJW{GSUaLp!N2HvfUgdur-WD zcCmq2iJK^j)r^5)Uk$6dMXuz}0Dvs%m?pC-QLL^OZ3cc`IZkf+WlMO{Q2*aGz2Qr~ zoZC>os&B>-qo>XPmgF{Py(kniLur;%y$<6$T9e=FQ1@wYbC$*`FnG2 znR7Pk+jfSq5}7dGVd-{BCcLYevgFc_ShjTCvl;^*x2z8`wekO>(U5J2<#UuSQ^_kb z$2i{E=C`?GuGGy}G>od#1Hrk1X2M>B0PvB>(s|EPV(0~s@Jp6a!y6nFC}&8r@#@A< z#hDfTw-rlUj$<9HBQ*g2t@`iA0;5I0)Vw{E1j^DY zZ>4H6QW)(tzy1h}7`CCnQY#{61Awxzq9<7??>-^88*riNtD3QfCR9LgbY|2A38qaCUsz!Uz7)RM923B zEG=JZ=8bR3u96u!gUa5{23;W(uPIZ3**Kkx=fo|ff7&ke33qT-8d?gC`ID}ZH6kKh zy5B7FJswLtm1Kzc7|A8yk+6f8~=Ag6l8 zn$NSqv{1mIM%#@GemU=+0+>~m5RaX3#K)g0Yrv|u*&RLhg*weI=r)8O&JZ3rSD3@4 zbTwwj5KHqxyvmPdHN3q5O`eizOfWrL7aY8nU|{O6%M!KmZbxQdceEHyB8cFIiy?Ke z$o0E|3#Mp|7SvvLto6) z5K6YceTG-FrFmxDjsMXVhrvQP<&TG1{pJB=X8l~-HKhJLV7To&q!jauzLvSIoV~x2 zIjJ&}lU7_rs&-L+lKD5DK#rpJ^#I?F> zSqS>;Y=}Zg!eM*sjcPN*8Fq)(@yw|eoHk%3#SmRM^A7Fq{1{v#7-aK~D7ehoQ2L9m z4XaH5C!30Z2D3`-S5U*lbS{Rgj6C@67Z6p4XKHhV9JuSwU$i916g+J!06%8+>u1V>)GMSBABf#4^9ojFS9H17 z=I(v_#9Lz5_6bnWAH?W5<4@G*VA(C$x^U7q`lt9IRXp}f>h~#vE7;qvQ!RLClWjm} zvlwm>Ypes`Jm-o~aUKWO-|~abJtdZCI-=jq%26XpjYe;|W z1$m)wKqwtfo|dkGNf8wj!DytH_O0h2*6GNyf8Tj=EP}vA-5SCeHDo+<-I3n)T#aFk ziJmh7!ZJh+E4>_uKCBmH(n#kkpo>l=6wR6PuEMFghmH{hdyU*{8-nCTIA4)#e8pgW zeHX6Q$7jb6uGPcK>xdK`QziufUgZY;pz5-xI*}^~n-Hwq%jsdZr&os4w9Xs=(qC8| zec1z(_XLRW>nq*4@y|SFe$~}1ZM$S8{+)CcLPTYT7ohTJVkv7j4QkogKE}U5lMYK6 zDPC5HTT|BAsRKXE4VzV;Oe<2fG0Q|8uLmkmEg$FZ`(8G<_HQ8Lmil%%$gPUywSUF< z8!$D#!HM%+>K>@?)I>|%QF&dbbo8DlE649+B#SBR*35089qC{Q5*6arCDvmc!hEux zGFwU!R;_g$ zc6id($j0wyLlQg|*=4fHWXLwtM%j}OLY(CBcPM4sJ!_dXnrvvRyYA0kyzTwAK1=>P zS&Wz%-7?&RGeq|aGLhf7FpmAJZ(wV>II=ee>M|{5BAY7HkM@mlPAij_mNvj@r7@%| z@2Q%Cr_QX|2Ye=Bw6Cr+WC-FZZwrKXO-9exSTtZ^$4SeCe3hwsSFYd48MDS{As}kH^7J zYiZw@;yt>q9nHR z1U&|nv-!q0N!`#@)qSz4R+gYh%6l@|XI{Cu_allcuHnbBU}FaaTo*C#u^up^mBSB= z6Dng0_nbF1o~DeAZhq*8t{j02Im>$elr2!h79eyJsc|E!b`S9<{1Omi<7eBRGwE}>f**#}h z1v6j8%8e;w&TUqHyey|k zGLsJ8(Tla3ZImoa3-p?|F;a2c9XBbT!WRFt`P|$FU!n%6X_fwXmvn9aGais%&Jb!H z-va;$a!jpNo$V84ErOcCZ@D=L!OGSeVdW=0$Yv+Tk6XqaLn&A8c{_dDRmg!nW>*gn zspFQ_A&}nY)*c)P06clNSE%7EoL>P|%z&8v4+X|uTF>{PuiT_r!%;Zwj?(9_>WHh- zEjR_N6%Hn>>KM5eOms}={OB&**Uze^{=JCg*6246g{W}ymgq4VVt&=j;M>`b0F6jT zwX(PBvEvBXD*-?>-0UrBiC9CPXH$T1{brf_iBZTFR*VOgOw~RCi;x}N2FgN=e8MSA zte-)<^NRTboinS)x5P_ZnYzfbbul50!QUAx}? zK^5Hzeu&r5m!V56{6cS~ea=Oi?BH+U=lQ7d_mw&qff}kYi{=yI17QD#d9=O=o*xTklmZv1PtYpvD)g5AcFu$=S-z2OmB^ zgNTKs{}3kt!>*%3nyHGeIwdq^*)&i;=+3-jIo5GYs}sj30M(Aag76Dp;+v1n)Vqmk z@}Y?|tQfZMV|Rlz;SgGi_S6$eSZd5h7bPE(>(O>jQaY~b_pvx@_D*#>PQkhIRJZGr z6yYpsfjx;8Y>dJ@j!Eo8Su(8*eP4e=bB$Ih!U2nOL`^2o3C!_80|SPazw!V)onSx? zbXd$xvL$qXV}a*FQ)*k}ale#Dp6xmR+0FtT%My*06-ly+kbtuys?aCCy*7jpRg!ds zNUNymB&O>;{2r~EF`wq_RY-&XXSSslL$GV#gjw|ulY+sJ7wDPn*9K1k&{rBnXrQoJ z=;{axuven^lnvRp*Bw|T^s%Bu%bI^b*Ss5=HrYxk=6>^2lntlzb$!Mgk{~_38)@Ds z$Ns5S%UId#IwJcl;yU}aVQN09}Y4y%}gYLw6bru zgWr|Bd3sRe5iK1?!NySYYpr{j>wR(ITgEJVI|i|>0kP)%IGfP#TNrvx#>-GWL;oB_&iLVDA6Rktc2vr%n3e4mtv|Z^<7%I zY%9-Dcn>mqeFmk6k-PHMHz>X474&Z z^lRq$TiM4SuWioq`*PF@Wtn5}hfXg!cfvS34iZD3Pv|Bd5GupQS(rylCy}_mo_Flt zEbk1zgsQNBF5xSrHQi5=t4khJ0 z?wIhpZV@hFH|dVa6>}0$uvYfmc{BJh&M6r^_2pJA?$|JFcG$cIjF5Lw4%u`em9Sb&KO9uhNC?CEufSG1HlP=we-$xNWH< z@({Q_^kFMFSmwaHanQ}>dcT$o{90RrPwP}SeZSJ>M*{flCo+`6 zVr7fsAN_MdQ_w&Mj$cJxnB@@zSb!{(mbqxk>2?;kC+DX*k>x-i>xZAC;YLe=2n>U! zoJciekZB38YR^f4ZsNg+QbO`ZOy9-I9|S%wjmNQ^@ZhSqR;GXpXK1ej->+J_XCrK6 z&rv$mPQ?8`H=qExY46oNCf5t&D1)@h<3lHAPtg06HQHG1#a6#A z91TCR6R*jMy?@vdd6wReDn}11$XOi|{`Ye_cloE)Q%h74GteytMLzX^KMu_+R3+nP zrUSYiC8Sh^OiR?zu?A^pk$2vi1nkskQ5=>qmm3+PV+G#6mOkx}BPNvISI`}Zq-_t@ z+%5IbqpT7J8Je<^6MtaVblr(%4yxIaBhyM1+`vEI=6(MA?QzL~+w=4U{iZ!(-hkh7 zYO&c=D_E8rX~_oz;pVJdP}lg@co~zHOcUqKQlrxPxRHXsCRMxw_74OqhWB}yJKRuk zzgmHyf%Fc6E6$HNit0D6?A8pJBte>K>WQEyeV$|)9NaR7Q)nAXC=t&bOW};`T7U=Q ztKXs(e3sIl9hU8@n9OrmF9BMRYB0;C48w`e;sWdD#Kn178^gfghHR^2guP9Xa2;99 z$h1P*TO*+R0eVhR9+Riu!rwi1(lpD*!C5?a803widUqmQ@4Q0wmj9PK9MV*LaQa^s zVL&+dXbfLE{p1s~yDB7`tq-Drb%V?dy$wJv_DHbHoUN@_JU^jEVY45Mof1wXF5Y6I z$Nw7G9;wQ+pHs|oo{J)omP45WA!Uu6_1KYwl-b(V*Vb}j>y5ta-L1GmKd(g@vo5A* zQ2(J{wAak@U3!G!>xfy3P$H9ZBBa@Uyr`y2mwQ?$_K{u@*Ze3lt^b@%KhtDxT3eVy zMgE%G!gU{INR193S%EDeP=8gETf+TlJxXUl*&Jb}1IXjpb|<;V{g=UXTYM+eQb;nx zTVFt}HUy3i(2T0N-!Fk+#6pO2x9LVFhLCAWOGs5vH_=Mtvvg}&l26`bdhi61Y5nr$ zQvKpGbN94JV<6Ef)S$2~v2su5_K~d%cFnLOW05lS68Oizfo`5{R-GzXA*;NdK5Lxz zE;=f2BAsfUVz=U4;|w7IuMRa7cOPg_qeh|_A3rnX$iZ7%NbBO>TTuCz{jqeZHz0%T zIjD|CKvyT!;}0Mae_2H~BZHQHW^k=|caeGgw6UmBewy#t4f1&HCN_Y3E;QE=bhT!pEZ3hCSnh(yXJ2%pBKEg&4mMTAO8JSzF{M#m{IhwlbTv- z{4E)!P^M$|dx5|U(M%bmh(&W~CLa-=r72v2ilU`on_h*GYB)ZXfOn`Z}!V_E>}T=n`U zY~k8DionI-Uz6^b$>-Uhh=uld`d3}o?XDgOi6`sL`B+=u0eu;>hCP-h3eI1&7Th#w zOfxQTC^`l$zdKLmk)DoVSB_$_x-454OD{{*&bw`yCL=N$$3N78gPNgVB|;**(6?8b z^>zC04E5yzU}HCeZ+$F*Se+>B`cN`a&U7pX*KRjI7sT`~YTC&hKmOmH)x0}rXNTJh zv%@m}Pnz%|G(hD-E^T?cL}eY&`PkQ}oyZ`K1U|@o33L;pmUN5o zm`DcqlprPZE1)idAZmilb?WI zE^~nzQznz-m63q+d`*wr)-6O%V#9dBf9xltn0}ByB5s19Y&_L`Kb^9v^w5k3~WLK zvLcug=iQ<)^aYG=RFS#7HHN-vi?I%17{cfuyJ%vpVxT8FfCO73SB z+X+cI1hF9G=+pw|Sf=_Q!>&!Blr@e(%2h%4(D>2(a6o*z4PFRQA%vHa%d;j)QChc8f1@{J9fQr?L!`M5Th8!4PBa6qkxBqcyu!qQ;sh{P}VTRAz zWH-GUhP3VH>%xly@z10ac^ygi3iJ?YowFRvnsLd8%6W~QAX%|C{f=_ f*oU!)XQcXxQJ+4$Y-Gg08i1U%l2nz1@wfj2!jJzU literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2021/13.png b/.aoc_tiles/tiles/2021/13.png new file mode 100644 index 0000000000000000000000000000000000000000..57c4a0ee35eefa96040d6d66fc79c7c5acec0924 GIT binary patch literal 8178 zcmX9@by!sG(_R6Q21PnmN;;&wk*=j{>F!!kI;1X68 zBRGBrn)&syjpwgTb55OH1$Rm%rxHAXrS>YZ;l{ZT7XD01IZ?IbRSj<1?DLNybv#^& z*Lyo5gSq?0odKs3gHqaOTRmo+|8N!oKZrdqziS6w(jn_o`MsTgnlXiNCx`V>$h=1m z2e&`_0dI5}>furD^_ZKK=8ViH`?_1ubC;4Sv{UQ3^^qdAi{~BS7_!px>x{Rf@|d_Y zE^T|;s}JD5+0NQqzPc%PF%QA0zAi`7(fj&e2Ko$BumQx*1Op?qY5Pwus}oZ)9n3HB zVNfqC1%f2T^pl*rt)7ze`dE(TjMDns-4hwSjd4y5aqp7T2RCz`aU%!+a4cNALpSQ+ zO}6D2CrhJZOV{7oRj+9Ry|ScQ7!o%*Vxqsdw<5N&ZhAZ}=whEC%Y(aiJOaC9E|0j} z)Hsrfms{C%r6Wn8{x{ervF|frFv7!>HSkctkmV80Uy^PXt zFhZ6qm$>e$rp0!mE%7(Da2DsdUN?7nSH{P?#I7syl{@l;Z|#uVWK@5nn^05EN}lYI z2EQ*VWmbf)bH~8U2rDKuGOLNdaQI2iIyMrj=s=Rb>oKOEI$ToV2(;C>)Bh%U5kDXW zu&8l+1`u;aQl8!pBYeS|6xbU5rlwaxl|dHM$c_NyE^0XoEYm%1Rv|0%1*1gW@X$ln zG(3)P#9HSj@wq}n22cIPemWH-50Q9&>DYeWBj#cV^b)bU%a8_S!zhr!OC38~e@H|J z?H3*_h^u0m*PVl9WZ{9dOYZQBg|Z3HF>FBJ6W zraNk00#foOEgCw%oX;gRjy{eS#lR2)OOjNSu!;Fc>CrT|x!DIJ72*Bbn5>~KfD~i~ ze2;N7@~~H2QC%P1av9uraK5(Y+morGAU$k=hncEV%_*6y=$x~gW1Po3naKGxRpveV zEu0cF?Tv;Ci)60GBKkJOIcn>~a9H3uz@Ak{_)|@jKz9v5s)UG%CE_*E$CNIAx4@VU zhr0M@4>#!XJQ}~0VTJ`m)y4$w@`8w!jKrgE5*p4I{BS@J!KHJpacJ0iwL~$f| zk}{72=#@58s2Yh#!6uR1M5KO@f981~%)vVaHXw%)-<$jjtKb$DcJsGGz;ZehUB|L? zx>*mfze;s#HkGwUwri!GnVt4Fd;13tOzJQU`QCARf6d0Bb>97Y;#IGqaUFH1P1&j@ z|IY*4Exy!~;|)qK58g$0+vIYGxgkma$m2;WGi*RNHW%G}dZkt#V`5W6Jl?@!Vt5}W z7uAEWY!`{ahBmCB5q75D=WyCqcA-y^Hhe;yk7W+OnoVpPUO%(;o%MfmUYoGP{es!K z`A(|0dLQOydeOI63OI`bixQ(Xa%p>7^K+31bL`#(*9h*{6P=|Dr#89I<4V>OBA^7d zh@;o1^QsXJPtN&AgS%=9%?6{s+j0+B*Xfi9NgN#?+v(sG(ye!Lw3vzxT92F zwSR!%j~k|Z33Psq*j&+*+V*9r98fZO!E)m1UniGA9-P2UB>h$+h4DGy>j22GO-Dja z=@p|(3Ls>4w=LCmFf5D&YDTIIj?dtW9^VO2T)G!yG%+^goj<1KHZcQtM=+NqUZDz9 z5E@zV5h)f3f@tZHd;o>RHW>ZipqjKAZ9Ug#j7`{rWmWxHYjISqRg&B zq5`yx(f&!&BrGQIb#ndKz>I6VrC6QHQLu~DyW)l?Ey#V^0T(GCLD?s^ASApXL?MFY zdfFV!J&p?V(f3*ye1(P4(iV|R7H93)jI4aeG1H;pgJEO3zRf##GfKf2d;W@%hi)4e zli1)@h16hL4L!d(0f4qcAI8I{DH$p`k00xU+NtcZ6yGx9(Ehvxm69mQoh+zJUw&# z!!mOMYCe_AE9uLL4CIw>nX8!ptHhB^ch|a9G1K?p_aM2IkY*MH0Ec76L2PVavw79d zbT|VQ+%rp>l!5DG8<8o83`E)N3KzJMCU1-bZG?#2FbveV0&@x)@Bbd(1^Yk}0>V1X zMB&$3B$^SZ92Ll7Om=6)(bA4$U{q`v%b2Nr83n1KGjU(kOr#$P3&Ya%{qRf7iOR)T z{VBnaYe%>G1tk+pZ{cIvqqH9C6Bp;pfyW;g+R-BC5D;%uzFeFON^PR5fPVKHH@J=8 z-Dy;$d!S*fjyzV}-+Vej%*SEMVn^JnQ3KQ$RWW(bwg#_!hR#?et>pgA>H|hyE<-MoOUL?74 zQpq|0AW<{7+OYRLdVycpa308QNOPf7etxI+^>Rn1Zlzwxh znE&t8(YHcR++1iy%m=B;#ZBL#@GxuK6MU6V6{iE8JY~fB*DUDQb6|hB_3Z0(@tDfe zo#);`)xZa*@y79mGf#)$A^+7EG$yoy!G5<^!6qJ$h5HFJ(AFo4<=4VvF?XlUWrso_ku3O^llO0)g5R>-r9s@de zY9g`E^35HR`b@nLtG;jHQ0A|Izg=#~ce&#U6bj1~*836LXMM)sSUGUN)h9VhJVq~* zM;(H@bTill)u&eHZY_O(`Xg2^PbLh1z%=<2`mXcC8Sh$MpSttyThCPF30lw6o`PTa zbU(8wbGd~t(%!cRx&J#It(d-a5QE1|bZrE;*IM`~3@Jhh*-py*0rXs}?=(Nr6Z>>= z-M7(B`l9;Z=L4V~s^ic-4Y`zz*9>cfN_kDV8<_G9J@Vb_6Q<-9CNto{C+JE9`#p@b zI-na(C9bnjYrZm89{nHiC*{RZNp?H09BKkV6Oozt3=|CVUx7zr6NBGs=CV$3s`U9a zkm-XSdoD?pCRL+AqU_ouS zTM~7!Qxa%t#mCD!fcrWP@O66Hy#i4!=vOKrNbin{7gn3R9?%siqCaxvW>PRp%#6*B z>l-6uaQEq>azh@(l2bKjUt&t#dooO;7lnlqL&R68wG*)?L>E4ITpI(IlQu6`Xi*zB zRt7E;?f^oRx<4(&t^XA#+WwU=FW;j%=GP-O#F18d7+|`ChkGLVf@k&nl$UW07|xPC1z7pVAjH^aMm#uVv3?_fTnnHMRdz##!3%DCdZ540wr?eFo$`hJzm)#baG z(!`*Rm!ZkCyJNvx%1Lk2nMqlKRbR>CBu(mStV7_!s(U57OvXhIPF1^*V3NoNOJG z;S=!<2&lel!56RNxzjE!tL4bhCjWnN^7UeGemThU;ORJ81Ee@*+v>{ZnBJxxHUCpI$IU!9n=2OYb{jA`KexAA?A;R?2b3)dTBWyDI9txk~Y5S zZKzd=@3W|xwOao>#Wu4%g4Blr>tPqCe8A1vgy2fX9>FVc+oha6B6=IZvF{yxyV0|0 zEJA8mloi+xXX@x^stObXIF)7o(q{HH=I zPB(9ntle6VWrVTQ%P(K|(2iXRf6_aTAPL~|iagM42$vmCE3OM&+^tDviBL3ee2ypa zq!uk^Dx-=+SuyT!)D4Xi$lHTItm_G6@mI_-Gcl)&r?d(=&^k<`hX{RiKmNKEBE6CG z%&;cA)1Kl&uV)$?;7qGha&NgF@+=)yJCwNe4uZ>jFD#!1Bi{4K>psf$J4{sc^;@dp zvt{Z_@yhIwFq~cne-;(oC04)_al?D=&^oVwzi$`!tH(C>%EsgQK@XkJL?R_?B8d{v z(j(QP3fywh8dQ+nx&tkrmseE&_Pb@b^9=6Uk}EY>53asGa_e>;AbqbnYjUB=BjF^k zj>0uxD~)14MjtJ|%ajjXOj&Vx!LQCH0vBEm01d%d_p_ysTXYf3%? zoW^6ED*oqx_HK^TciwEBoXqR=5neZBpQta=nQ#m4OLK(tX0wz{ope*T8uzkHM^F7u zK6pcDD^&kyZ_vwKllBLtBS^3lJtqr_E*;u3htZqgp7kB-zj#LfUiQzYitiUIe~V$h z$3Ll~7oP(@VRu}XulIb%HwFUS_tvOnZw5r_gMvmTfBfC%TH5_CwAyhDr^<4e7&lAm zxUdXHKti0@Fwh1>u;K!|Us~`|;E{$yY)<8=gV6NTe`ZxfJ{mK`ye}cTaxiQQeq0X8 zseJ?wJyYZA2ojK@ttca7d!-{+H8XC_C#T&HjWQz3BZ$KVsPYM<#3Q+T7R2TovSM?b zqo4{jw2>23uMvTer1qvyrJoPlan>L+pn)xS^IOBxnSGo%LGP(6Ua&56`YC_LKJJtD zqy;bUw+aBj{4aBP%7EOyY8|8*@G{om*jnY;TUuzw| zHme@9XJ}pIIsqpdvei=jNrF&gqxgq|JjaUfv^U(Imt;t9vwswEIR(DWw}Z&{x6y@U#OoFL1$BWU&K>g<;3@BmYR*{Y5SJSrA~TCtaQ zD%ILR`m7o`F`gFy_PERD%e_P=S-F%mO`@k7wAiL~O`y;UXVT@;R0CN@REr>HTJcEc zIvY}NR3%)h@3%GI^(#*ELABAe6dJwq>h)i13m@M{q*T3Tq#b*|(7ts#`E|G_{K=m_b=Iw0mFqj+-#Ue?<&ZL3P4`L5$dWhjCP3%B%Td*mzM7H zh^BQDAizQ}QVUmNcYl!O;&iZc^n+FTruI5PZ8jMdj59w?)k`nd>5bwKPT^!49yiT8 zP%lM!Y~%fIve5gHHH&s1xPEw(|IIpgX35O5lmha5;K?tw4+OP+7p0t)wOcZh1&PfY zqxZ2^&`W9ud7Pq6<%r)ZglqnL;<}@Smn(lFfstPUR;Id;?Plr;?wVlcV7$JRyfe7=sLIR%EBbHTbQ8KqXd_v}C|YQ2YH6=X4G$q=jfJoCeF)p;oLps}IX-#N+%uE&j&6S2no}Qx{6g*<0ch<<=I{A4 zH-^}+21wi&K^Jmh7>D7|UW5HCX_<#X`^`L9@;V_FsCTYI##D`)ruT?8c^B-P;2+n@ z+L~p^fK$9FB_QGLV`N$({1qA{a>x=sN~G+s-JT602>jz?`%`N16&3Kgr@>)2zl_6s zHIf~eZE^=5zlOqZl~7ptT;Vjq%FN-N(T!JdAM&<`*RIRu&+>gCY3NLG9)B}vtWP-9b7Dji zUmk0R{1UC?D|m#D(v}-0wZN`suWfV3?z;0t%Sf}#`uZhjhSpM#4nBzUod%U z(9p_CsruFpgjg_tBeF~Xd3GX$s>-(^=m$X##@bO4{wVni7VJ@I5)7(8de-NP)P3rO zCPrOPz4bOTj|P$kM`l`j55HCXS`t&zWUCnet{z%mVA;sJ0`dXnr=`6-hm!4GJC!*QrDMV|N(_SaF`-8Ct}d z%Ujh?MF?C(t&b+jQIqmeZM7y$OkbuK_2;wJx&);IvRn0Pl*cueuI6~77kyB&v1}L8 z48L*pXh+)aJhHt-=|vngy*6CZEhc{V>}j5|B6Ex!0y;vS=+hr;TM^j1)@v&Xe#RqC zu=$9r0Vzkb1*1+o=)+kb2icvKCS&B#mDdn00?clc`N1+8m(pK+VRg+rv3>Hd8%zy& z8PcmNu+gl~hK;1h8xj(`EGEv7L+=^zIa{R%lAxWYu5TSL)|lMnAXjm8oeJQx877XH zAbK?HtYJ__MWGdE9ZUR*i^9&%_dn`{?5kS8>=gLJ2k0li(qqZcen$_9q4QNUqfYlX z^*ukoat%O-@t0p|mZ#?ydl-}>cMNdjn2ipd(I`+=!9LqwVmT@31dmw)NFshcjJU9r z3cM-3(uAmtPko~CGhjUHKB#K6ajJ_1UWIs;Z?AZ(RzP}Vf$P($XjIXzugHD| zefKN628U*PBEulsE^-@e42^uu#C^EOXkh)1yR)H~P5Bg(Jo$FjaQSx=s3g$UL{w!| zJ?1ml20`tc(-QR#&FQ{aoN5;UeKbTFRPUwJXXX;_J_)aB>w`}xPvk85&=b{N| z92BL;sWJ^E1gvlpniW9A>~PcFsdxJB0jJuN1_<){nOKo}g`!N=BoVitYoA9{!bxV1 zze+4c_wsC*eicDdF)l3}pZ;7ysSfT%W%1)=jpp3*kr_Xj{&Fm2NIU%H7DX4Xa}D#C z{TVBQEG}B#yN}m~w5M@&-r-CH?8@2rf?44|KpqdLOL(sh6`O{n($@>vwQl{TKPtCN!G_z7DV)$15rg^1IHKtLT4S-@E zHFmMuXQ^l+bx~9@!(h1%4!s!prazL%*bk0Rz7R3V2 zfx_P(3K8v;)S=XRl>wx>;Fi0cTe~Q{9GmxD?T&=|{QLFeg&2(=q+_z2Q&5`ENk2O( z!pRX^J74RkPd9-=0`+`Y7W+ zpbs!x&uf1B=OKqlTb){j2}3nf^jM1mt;cXp~{o^U2I!__$G2$@DM_jBcu>gy-ddxu5C6E~bgtqDQ}d*~K?! zF!InI9bk{q_P^65IwQ!-f)|mXiPnv!V@HfCD-C)YnE1!mkK0N3 zOCtSE5uFJ}NONKiY5`Bzk9`bCurRX8dQJ-K<-SIGq`|^7XvQ7-xa|wdm-!}CtfpcK z;pifDBIrVOf8G@&9fgk~5KWX{{7Rg@9oQ%8GM2m~9iSR1;;&VeC#Tn@*6Vm(i58Nf z8~=WGAn^X`6mz{C<$XR370HGuo-EYv_=iS%gYb=9m@1Ja;wvB^Jy8|zCMT6Lxr@w~ zL7c`c{fYRWhtsQ5y@PUa9k;{FPVt?mE`smo@6IYnn00CfHuY-7U6F&Gh0hmJ2Su8# zS)O5wnE`wIqfHhkFG=>^%()u);PEm90FoyXG8a4E|l7 z`d=MPRK}r@w7lDDHoJTax9i)?^XSNH$!?($f?AFp%pISKKkq1Gv{_Qm6j1_!z9LHP zyEu~Y1`fWx80K0!b^P-Ii1O4CV1OD)+<~ETSJZI!s!-NsJfjYY z+{3n#cP=wmL2I&`)2Lzz22!9(X^TCbbFOm_H~AEZWT>gY*eZ8yw!fPZq~Pvtr-+9F zSluYHhH5G(I(Y{fz=~+s(v3v-GuYzJD#$yBPYbhiVo1{lf3~|y-~l9;$52V^`x=;_ zYRS+RqiEf25?OeEx5rqlJDQxHsCc7#ZKW5^%wMr8Am~kK=9$XS zqg35B8dEMB(`tvJ;#XPL$~`hF6(C^hb`em_3Q*!mS9vWny9a7P4NYM-eqVPEQE5QM z2`2(S5W*b{%2}IX8|5Cni97bC1JHl$jiRp@PI;l)MiYeIrgX*cAEQL;z6A^DK6EVo;UC)CA zW!#g!{%GL(=1KIU@Egm>CV|gwgkY=T9swV?pz{Blm?%^8eS+mb2U%^ literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2021/14.png b/.aoc_tiles/tiles/2021/14.png new file mode 100644 index 0000000000000000000000000000000000000000..dd5bec75c2c156f4a1523d8c1cc992c31791de3e GIT binary patch literal 8155 zcmV<1A0*(3P)u>xQJRUT5@FBO1#95?ZnAAqfGquw9{^+3Eu&lD&*gHt+q_$t7u^unuUjjB4S9nUR)|`=&AV>A!3ZmK zt=;BbH(olq^uP}bOZQO^0BCfSFXr&Y zoY?HB#RvLpziAAbcQaVKO5Woqo;-2<9C4Ul5x?(yg_Kk5HiyMvQ%~y_#&jdi4|MY; z_sa?;yppFfWN8rq&~t07<=lX8-hi-4+S#kHoS4&L$7pmEK@q$}6vKbwuPe{|tXj7a zF#RU6b{%->3>rP0#tUc5Goo^io;)*Bo)HPi8uQ}VJnigN zSW^S4>nBfo5$S${i5?fzq3kK{}GCN+FT8!SbF^*Rojv4Qd462O zWYc*O92$N3ttc*6l28ymc5mk4@xnUVn_LuAb-d)GfA~^6XYj$hg0OJb!N!TbFBK5a z#Mn&9{J17Ont$~5U0mUkIHD555B+#&PxUDI+)ec#S_j^%zif8cF&2+e`C@KNhL|W% zE|#q*to5{)6UK^Gh+;CtiG|Y6>%$Fadx)=&zP>9aEzC`@||FoOUW0Ff^Go!Ni zC->bQ^UX_vFJY0br88;7XUyT0r${22=pxuw!e;>u#^z>JZ0=J^s_O+K;+th88`Z)qh9Xe@AIF8h`Nq5z1F{qiXUY zlgrrq-NO1$yBCxiayf^?))_p!@DlJUEQiBEd}i~QERu?KDw8;NSyl5&O~;qR0I;Cc zw0<$L`-Oa$3pstTd%zY@6`Rj2_=bX9qMp)wt8BN~f+q54ufv92daohpVA8=K6%E{- zXuUA#uu-K9e%rh2*`{%(vpj1qpj1;X9w6k=Kfa-$0sxAV z7$%1*tWZ}K006@v)BBIp7|Ro+0AMy) zZ++Mb0MkPYbEE30#HDMMKa*4TbhfwA`b5usT1D*AZ#}HYK9ERJcZjYOF_}!?6>MgE z`{j||YU;3emGIwQ%z@30s8cKK#Os3p_R^WO)Y916PdYvF_SK9LPp!oVIso8?vt3Rn zACSjY2#U~IF5SQQK=|kE8Lq0C;l*f$i1HIVuia0`k0#~@ z=}em4;#g2>qf?e@Y8Sl@K~}_Oo6&ICFtgsOnK4ZE&fjmDvKWFNLIuR@4hD<95Q^YhnIyJbkA}>CMLs6I8%CfLLvSN13pfN8_>4q97M_MPz!$94< z@yySv3%`+;R4C&L*@i`P|Lt+T%Iq#IquPA={iYp9Q=?Nw2q1G~n%46JJD!Y}igWwI93Uu>Ea0Y2FJvdeZ0kP&krpP{!h@uF2 z3AXi%{)f#=!A7a-!0`emhY=RVBNwKY#>vtmCwgWZKkHo+UM7bwQHULgpuFNZA!Sk<061YRP8bVcck_mT?6sQgU;JwW=D-MEN`Y;?m0E z0N~!`LGs!TSIE+<%n&SAUMuv5AbQt{IV}bogH1QHKO|+9U5|-yGSi%p18qyhoFRJJ)3LeQ^c}VG1+~4tyukpFe0q-#oV9;9W(-J<&;wSP{Sl~h}-+c`}JRE zRRKj<$9}pSpM+g2tkT-jr!)BC)%v3b!5dJ0#ZDO^EW+M}361wN)_^xEQJA?mK^zyx z;xn|f#;%(q6xZP+e_0-zB_WqAC^e_wzC|4797s+pixWzCi1A*9?JCxYA1&3 zC&3kLJ~QvJBx#D6&1WtsH9a+>!_CWef}bE=5vx>HawoXJRv>>d*8{4=tpW$TN2* z+HDT?l&SxWdIg%gcVzTKyx0balh~ifLc!$+w z>$o;#)R<*yk$YaqpBqyXO9&53SgTYOU(6x9KdcV|y;rFwb$9;Qb@Zp@H6L^k_Fg;D z1OQL}!#<+g{J46oeJVm8)^f2wAvapDGUh&_`0QV9JDtwmFXYQo#hS^$#)8v>s&nt$ z)i0O;z-Tn~+yyqDnNbn%A}k(5**&A|o^?N+6UNG`Qr!7d$9UTu089<2=nS;rNXmHU zEIwmTzCHkqwoS8mOhsu7Sy*|8lgv8Hx&L(s-?A~d$g!k8<+Y9uR( zvMFfoJ8$))$h&lHJYr!&3jnuH-oxyeAdJ7F|CToxO-444 zDU9Z2?@JPhxz~Q(M0|xH2#do=EsZTWl*$pX^eW?E<3#(_A-mN90AW!)?X1CJ#~5sS zRHATdK(+Wl2Tl-(IrAisb3lN_We6g<>6LN(2u{t1OPdOfMq_emvJ;%+T{8fH(omF! z;8!MNjfF+_K@Ajm?@E%xa}Or1-7oT&H#iuL#@^ebPrk8RJ+14h9wobndp$*CZaCZX z#Oswdqa6^a`Jf{RZ5fTm)Y8}kKiB~Pi&MJuKfgl`sDU6b+A+PL)F``W9Cj=rPg?j` zTDVkj{kP2kAdKXhbyffog+?P*T;s4%~XHT-hWqF@q9LMeS_MBIh^O- zy*<+Uz+$lKRi^4c+`}ALQsMGj{IZf(W9@1{@G44T5(}l?s?Cn5@w@Sw^9F%cs_N)Z z%h#57tbLl!qD7E)5mP{C(E-3}vIBr_&M1uLk(cJg@nLwmx6_B3mE`Md=L{?^!)9F` ztz&k~sI`zoE-VQPZ{-E0cD!?TsD85h#%SAx!G=@49)rNFA&A};L~=@=qV7o~;ILzL zpY(Y9b~U^~V8icKaXHbV7#G(PX{s0i@Gw3AkdP;(I6&v_Q#kCHYC;PD_uHlcKv5Dy ze4ADgtD4lQCYM~9<(ZM;Qa+iNa{aN+8LP>by?1#i%olOOBDv&k_;j+hji0*gc?AF_ zhwkGpvPuxV2#Qp`l*?dw9q@Hr8PU%Aa^4M&HwbLFssJE$XKYfDtpD!#^w5IEXp7B~ zEUVGh_2vEIW9c*os#5CW z^CgLe(p$f~M_fN?hcrGfdZ=M?c0{dH>+`dcDc83eZ4GC8E1%0{u;}AmGu$v%$+66Z z3GEPh=6%DTfB;bNm?ARX>->UhQrCTB^kML>9%WBuPxQ=Y?@MBF8Fi<-=f>29k+ zfgqAQ((>Tml|eR-x%%m)_v5yn!R}5cmsvEdsV^V)XV?gK+GR@-@0$oSr7#I z=HKq=xIPR3k@3QovxE083|GCngDqgp4#7sTu95 z8TDcBK<$K&h!P`BQ(e`=zJHjqYew1SIp`Oc%iREBk*#HN8M|K0@exU@`{o$&>|aCP zK;h#Fc<;&(c~&|uTM{ni+bnh(1Lcc2R-?_JvY7Q&0MO1F`4Jqm&dOlZcRim?W1v=} z*AP}K@~()Ded4e8`~t<=vS%}S;a=w#v~$Le%gg^83=49S+MPEb_-gik3x#IDP{76{AjPWoly624>2np z60K}do6LIa!5@iGM#gH69+(l3}|G9r^pWFt*etK_9%!&L?ADJ+V$ zf+%juH@(g;0Kh=)#O%mYK)Oxa%JrXiyBs^==6|$Oc)$FAE%=9qQ%ifDKYzCl|Il)N zAUIwh*bJ(Ib$b+2S!u}bmvSk=jL0yk&8?pg;-9xbD}N1n*F#wDtOegl5yyF*CI*0p zKlkEp7^|_C!wKH|bZhkP2J$|1VY#zPQzNqWC-^w!e#;a->9T=w7J@!^Q}yl!@;+Q) zxwEo(j9oAInqM&Mtxae9VOv!p&bz|k-MZE>eapU`#TBxAoYi!u-(s+ZgsP68c=F-> zl28OWG>E@(-UEe4Ri%{4<8vkM6v zHWpjBcQ=rCEu;8{B35H>?!J_Y=d&q=4jX1Q+B7qU+52irhE+D7nUEhX%MgoXeB3!$ zzi1lonC`qWLIgSY2b*72KoQoqs{DtyR;Dpfj*!I>vZQGd_pSS<-@bMF?OX1{J_JG1%Hx{P_s#Tcv~$MMw&}KuLn%9BJYL5ejFdR< z0x_4yaFH5E;A>sa9Sk;IC~?`*=5#u>U+sjveX{fR$B~BRYbBee?UY{#<6ar zSN9C73zJ&+YH8(hxH-Qqy$D4qvt zxzKxtRS$9A5B{)tl@a~qnUV5LmmKJJtK*};xj`JRrgv8p0bqSpb>xjQ1b{E*P;+6{ zj8bZfVg%_G@#K<`mIp!eQh+&}^=G?=nw9%rE_(XE?YsFw+sw$y(MoVQozA}M@q)t& z-JJ13-vUZQQY+*GwG)(_y2Z!RIAN^O*6ER^sobih{jU_BdF!^_>Igp0`)aVY=b8b4 za<|6OeszelO^QZG4}5Y{`v@dhrJ z+jen?Enq%!yht^vvzhEBt)=z+Af=jFZ@cq{E?jK}wfW$WiX_S5L#@j@($;T`wdGai z4y)N-cdCo(7Y|VRd>(m&uEU1i{Et@hYu8%Yi`lWM!3C?y=27wPz+sk0n%b(6pEsJaVthe(zH4VKxaNd+sdCnt=pTApYG1$gCXFIQs z?06#W(N}j|_<6m0%5x&zr3|YyFBw)J9yUr<>mTPG&#>ylUPZCI{OKIx&|~Ip2|gcxM21yw_Nu4!K5_%%8CJ=>R+G&=W$UI}(%Dv(|Jcm$ z+MDZ+6g>GV(t3yvIVS{-aSN~Tv#7o-&ki}mpJe1#!6rd@Mi3a zr&KWOEZ#D#ZUKA!giD-ve^7iZJw9J@<3t;tg9T@;I$n}owB%%H)>}V({gOYI+8V8# zRvzDXmzqn*=`x6v9W4J<=N3V8H7%N&KipdZs6h^x{#p6F9@1P))(eBPBkIILX=;VsVZ$^t27i3XDfXsU#P5C~f3RVq_RpONf@JSYdg6`B zPv5>pEH>AF+D+uWVX;^MAWIjgSH=-3hKrA-#pg;IKkZXb>pgn4$LC2>%H&QA^XL>W z&xriSe=YB?9mfTikSBFd@fz?v*7aYt3L?1+N-f!1&8z{y002gfU+Hc_QC04|^GeN) z-?u#TkNfegsyIAmSe@!siDLL2S4ZSoQHDix=HB?r|JLMmI!m9)lq8FYP^*6O&J3%r zooE{CSjt8-)-nCu+Xr*@C*A(jQcA(OQ8oU7%jE*-nH+lgbJ?w*58{E%5d=|`#58@@ zKi)YD0NObtokiPmG?gr@{yWOHtNj4*gZGcP|D?&j`A^=wp`Bk^gBot0q@;M|1`+4o zYO+&Q6)3ibs{Du3jyP-%i^1lwVKh1_jOH=9jEe6p?aimS{QASIp3$pkmOWS;c1$&? zb>9s@*jxO~bnT3xuV(pqji3m5bA!8A`-=7ws=`4|@rv{MC9IS(dHJ`q$R(e=d7W&V z|JZt}vY8z|GORM0Ov?V%#Rqx-sQb7Fb6_+&>LUxL|Mo`3hf{_)guOxuPf;9m<(JF% zRHxI~TRrB(tKDB-1lU|^idTZyFJVn|&0U&m#6L&G^Gm;#<-5K&Y&}&0fR7BT9(he# zOWWszhyJ42th4&auBit^L-w9B}w5lIy&R}a)5iaUwOZ2ymPkw((u{;aa-9r`{=7X*x`W< zxXCGA2kuT(d?%a5TXrS&S6G|Bl|zWvM}}4ZdD%SXk=H70X8W}hP52a)JFhe~0uREc=6-M*)DidYf!LnETSFqa5C=KzL_Qxa0DPD12Npd&;-H$uPaY6(^SZo#mXl4v1jZ4TAP8iE< zpaxW@c(v1cNb%7klh#6P#ilsLbHmyA{&=I>tY0(%DaEU5TyHhmWa;9}J@G^JljPis z%fdnsByCqLok>eAlM})Uw3R1%=XM^;dgPVj{@U>fsZcecCARbjgw5Z(ILH}R+b#?* zD7E>A6~bs9U(6Y6pXt6n%HlD~p2;$5%;LB(9~o8y;w}AFHa=@bc3lU6x=(tB>Rq-| zbHbR~dFqv2yxRFp{i5kX|J;q=wU~5EqNF&*r3{d^ z8i{+gd*daX;(cJEV_~9W!AAv`M`7E=p|*=lv+~|p@eNEq0+{sP9vf@%E1afBgqErR z;NF!XLRA0|lPMNTcs7fJ#z1)@mepj}Etq^{SPeOQ{p1Ze&bvq^z#N#5Ovanp+K0i* zWHOh3LpVFJP}+8JsORP=vBcpHBExFYv6P^BH+egIn7VLh%{!=YI$=Sn36}}-4k`xf zl$e(dMw{H)HRok8Ts8q4HD-&!w)?xe7NgDE)?xT6!|JSZAxa@kD~t1$Hrxv~e>)>5 zU%R>@YsIs9XbyGq{UC!XBSpW`Q7gtg_Z-R504-nEJI z9xB#u^R6538pL@IA#1mJ*Nqq55LO)9yjz&}{{!4jM=RcmF6uh1)u;B1i=N|_nqP-+v9S&*&G(aLWmM+hUnSv@B7n_ZyMEM z)5nRmQQ+lp*_=eSFp-~Gma^km{>U9==Y>(X%L4%Nq9jSWFta>4vn&~q4dx{fKkXb) zSPP??>u0+V7Lrja+xtotPsjxTz7Re9TK$Ee-dQIrb8N*{CV{Y!vI99nDZk}6y#R3F z8`VTJZW3=?wR4D}(Bt;Z4XIi`=qLO9^kP|Zjzl%12LOSXS9h``uU0Nd;A!WLofk&{ z;Kb{@iJBIJ?cAG}6Qtso|M>`c!wdg(Prqyifaia-Unu1hg}2W=obF!qW#4kGteVlI ze2y?lz~-#2in4d4=GLYudX_ei7vfA+5K>qK>sb5j!LQbmV`5f$s%l1`m?k>)#$HUa zDvp%g#N+>U*Wk@*Cag@b64b2|uGmmQ|5j z*qGUWee(W?gEV`EQhxn2#c4%SKoFHe-~GuL@ndGln^urieY7woH<2$wbxWqfo72O0 z6|@RfNAl%`GA@s!o;CD-HbHbWRD{@WAXwc_H?Fsmg<_ci5IA z`}=Q9Ni)PJU*9d13WD5|3AVJV2q0{)9~Fy*0Kmei1^`@6_d0n8TBZhCrU2kCfBrOw zOP{n=9?5e#-Cw-bO%N@PYB*?3!|Bq?KWk^gJ2$L)|3_aKRI5GQM8_OogqH2e>AN;g zlq^kXuAP0bGHzI{KcITZ$jjtF|GmrQBLC(KQJxSbKN>X_S=O4WR7!o{ z=M!$1TdmZ0eMVn7gC`J!e{2I)@kMCuQ-#zL-GV7lWv9atF%jZ#ZJCrMUYXWWK3UR~O}hiBDgqpoZMQnfkGdrjsVV?)Io-MilQ4-7-UvO% z0)X-ZdDM@}{-vyn6eeE;pC2gsQ|9vhP;YfrJ^f}A0w9tJSZuFf?C8DO4Y@xRf$X&! z?3mQ+F*|H707yu|$Wa)_aRfms59M=EcGW`U6a|4G_D*##9{y%+)f0JRZF6i6 zE2}D{>WO>+z!G^x1;SpB$Mf*|WJz=O(Cum8n-uTLI`Wr00YJN8yztXI5KY+!pbU7`R31`VRP3uNCCiVwzs_71ptfV>Xm6-N?syS-uzNk(~FgXX6v(q zs**if#NRb13M-G~QDg2U?Uy*xQ|QxUvcxCn0VZ2wC82gB7T3hJII zcG#TrL+X}a_dNamCZgY>+S~roVEaddes7}aUHs@@Zi$kxf}I&J{o~=5ce*FL=6!jE zQhwv}WrHmW-6DOg_YxL$UWKp_4$tfHYv+xhztv&VtiGeT_SS<_f45gGTO}h@wKSnk zE0oeW9$uTutw|&I2019(X>+NShP0y9ng(saDM(1f+m43I;kKIW`X%$+kZP)P!Dfzp z3KbSF6(e_*BX^ZNA=i#OJswX=ej)&vH5TUf+O5u|N$t|4cA{f$_wyBpzfrGMnrXK1 zMd;CQ*Q*rz-b>@YcUTjaUsku%ZPr`03&!#Gxyi0Mmt$?hWK`jQ`ti-Wr%Lkc(lH6& zthJ8Zo-t{xzQV$F*2_PCu=7-LTCo%XWJRIxx-h!yg)*{&cHYR)U>f30Rlj@ly6>Wo z29G<;m8E-fTF>`WC-2!+X(kO${i)|v z$N|7W*?tp9c*nlI(_wdBKiloJxxgPd5XDxmIayeFB#*`NS|)dWHnQ2gG{j0(N6yru z0&YTz*95U)jJ?81e5TH%}(kl=Q$i|MeXKygV(z~&NxNa7Rblb2to-`)k-IaC<7yl3$g9pMKaextHizq0cgV%b z*wOFQg9q9_98by+lN(n0C9_4p)?A)HG^7_aqys?z_37@5V*s!?rWtBc^il zZva5+`-9_cYtin5#K#VPP1Sl$Fr@ zUn-I^#lBakyBBYtdl-@x0Qgvl-Ngvta=N3YDkgZ8dBYP{Qd(lo@xtQfOzL)g1gr>x zpn?#-lo7yU@Uv|Z53T$N@-h{cP%5ZDQCiZRMca;#jFpFRgE)Oh4C->%FK<}b22VGJ zydi|e;jwcn(~6t2b9bag&`Skk4e9zFA(3~F6{}Wuvt3{P$?@O+@N=ib|K{N)@y3s; zfF>-2g>ZQsOv00-ijs3A@*-J!v5e}zy-}<@pY5Ct0ky}9S}Par&ZIhx5WJuLyzNm| z70`rr`Um?{^XYH;)`LK-nA@GT{= zvr2^^ftOY&%_x)Q)yao$&G=SG$&-{H%uUJ?2l9)Le1kM3f;?URW)6i>Q&m!?xZ-fG zG(&vg8`S{N{_&s-K@YrI0{|JtvUk6K82~B|<;#m?l2qZ$!=~<8Z*oH z=Q$lN-GZ_8gMn~)Y4B@reqDO`zFYwCJKzMr3II9PsYOkh0Knq-ng7U(lb$$JKXOko z_Ms90a;xPBzgCN4T+)3RHcwc=pDu3`_8I`dqPIn}uhPsJ@4VN4>IcoY-svNGubq7W z05ATJLu578j84(Jkd&Fw`RPdRjx>`7-|trl0e3TACpO*-Q0{ z4|Em7FzU%XDn{-oNA4&Az;A`cG0powx*o(Y9yUo>A)oFhP2M$2VGlqgHgA4oGdrAi zm(}cWI^1k7OPVg`Vcf&7t)A0FQ64~q!iwd*%A1+y7Y~~uEGE|azKh)um?>w}!oqr5 z*=BLDxh!9<56=8UUc>T#wu77AJ^8`fmk7>}TtN{o-N6g+=v24T6w8*4_W?SI-!N z*P+55th1GeZcjh==6>Cxaq#B!;)EvjSM=8V9}YhI#y$t`1O#rq(-(oZ zVy~*ee(?l0aq=DnAyQSiRvx)GGjeZ+cIkuv*+Tq5Oms*rjH&=&s(WE+ zB=S)^9#jPZ{Nl;0UczFr*0p8D93dv}9>8@>eM;k`l^;P~U%&YI5tY?!C$6q3X+5mr zBKUTL#b|T87>y3`)5>A-p87#^On4*yZb)85?;?lCPNE!R=1^JHN&{}N+070c?y%zy zyTzGSB+aXnNBj>3Lhzx`tYtI@kK0z>X1u;mkHth-kJ{4>ix=f{64O_mnh+L}kSwD5#fS8or&a(KV2OO&@Gu( z6uOy*OY>u@aAQMkti4SyRL%}AS02jeVcgaa238chhErwIbg?)Yo9vwLxiZEVqWfR1 zF>9^zf+UmHdgr%m&T5#1*Zgv2>mLTma|(eFu9{Qwq|bbB5BZVi7a!7Vo>rlxDVvDz z&~tf=cs1nZ7cWHh%jUa(csT6sJ0F8pVaUA(v(B2cBenWOp)^B8yToF%IVc-TpMjL`4fA$Xt`mRp^Kyr?x^TV;8 zixbCQ-^mxFR-+vN1QOn!mn&P}-*{C4z})Z(5i8ZNy&=8ki3-7a3BUM2S1}BWfv^%~ z3BfB=KUu&RG1@^DNd@~}uHNxP;q_m4tW4{ISKg$NsOQQ!^=w^sWon{ajB2b#dqHFR`gv)HxvC(Vb1ae--L&zy`Nb-O3ZL#-@XH$kLbh_-9|ycX zd*H^~T{Pa$|E-hw8v(BIVq?P!i^MX&DI%d2<5D%(?sP$M>*3Ia#R)N6b*XoIL zy1u;OVjDc&81hC#STxpv6MHNG04S)>NGp)W zRVzP&yqha5zpR@rEC8r|vLxc~Zl|XkL*5YcX!|;1`UYa9g{s~Rz=$idBx#8-;H$=su}%6=bUOrZ!y?}iTuLG%#z*N z%+I(YEF_~$Hr*9ofTVEkrDg()!#*Rnya9!^d8}@iXR>2qvST5mR90~~H@#Fwy*fXt zdhqe^;`my4BlWC)rhiG%yLj|l4a^VCW|W2}tZn&pW60}YSkbX|endS#qLyZeDh}u6 z)yW-J=iT@F#_szMi9Xpi-}m`M&67obulgcU9bdhFeCsA$j2m9#>a!)?bM`X%%7l#Z5Rl`lebYtquoWYTmIUyK5PNo$$u zTYUJ%BT{>@y8?MrGa59 z6B$+ye7za~bc-f3L^cg5#y$4ejUonF)3%DLfE3o2P!#}>i7-OKz!QA3#P%Hf(q>h5Uelx7%IIbL6zV%)&d19Ehu_BcEcisYTRmqE!p8Ri(c8jCy z;#k}JLxyE@^Pg8#9LlBEuY0c>F2 zL+Ekd$21@R(_QkI_;mLoPly)o&KPW24Nt`vqveNk+y6K`-ZqEh_(abvhs)k|x?-wl zf#JcEkg;e8zPr8ZS5{T#aY%S#JBz~-{3qRg+CyPfW-js?=*ftyoh`*PFrrAw1q>KFay z(h0&#g-9mY{Ze_y$D{55nTWlFb@W>e>x}4^S)QC(o=h!q+Fif@`!8s$0`Y3MkFb!G z+{BdJL?WHF)8R5Ko2_QM-Qom~hbKgnG7}>3hFG4|Q8$nvTB-_^VRi7y|3RPkvSj1wJR6Y$`?`St1hUabNE{gV00FCI{j_+p7Xv(5ql zyPvP9IGBI)T=($Z8LP=g+s+7-ONWWQ)yE4&QvQwq=%$rZ+c|o|qO#Ja7aNO(5%v7= z+B@u6y*U8@yVcqG$#CE26SVSuFIOk$NXU;ahx^9cUDTtIA$ey9RxbVDcA=D?S1W(^ z@AusM{Qx=iI~-09mkj_b3Y}SJ)yx|K0AV4%M=yPI=`gW3wIFfF(fsRYyJ&eaY3&>( zVNqFGY}O`)iUa_=#o2a#Ek9fIRYhc2)yx}|150D~XNePqR8$`=EZeuXh;uvLpZ`b4 zib59_ufyt8DfB9ZUeU8uf2w%TUsNuRYiwo*j^k#nMP4KWfZ@9{!*^!@fW=|)gs3^x z$yg@5sDQKY)g7~gDyzvM%@D(vi&;#@Zbzd;#O)HcNrF@~3pIwzgEr0&MA5<&#WK=MShOm5=xSKT&dZ6w6kn+pj z?Kt!u$gWB|@>)IlqnaO8wY<|!4TQ&pH?ut1thG{;d#4s80>F}Tb@U%^pKW@fvZOhi zjQLi1Fi)k_`>s04RpD$O)8u~2{uSEs{Hz+;;cwLc>N^)`8>BJV$HF85cLF1Z+vUE0 ze%LqOdIVUPsw@F{*<99>-)>}mx#j5bcu+p~*qKJMf<Oy3U_ZTBupC1?ROulW>$ZZF`TUj0gJ^V=F|ib1fkB~0l**#mSmO0o%i|+ z8r9jAsddj3@q}FC3Vz2Y(o5H8qgIo>Y;SJ;Qza`3{b#>uoAYsM-7dFo!K7OVw&SuHypiEC zZxDFBE8X_iKIV-Y@5aP=-zwHdhnFwref1~DshbPY;SG)`^Ri;XN@5%EmhH`%fnYs$rm>)Y)i1|tvcLPrB__Ap9<5x`oI||p zrNVE9)wr^kFGA~26{i*?@-VJu-Z*w|Zn}FdA_19UHMcI!H$f`^JpH%LSrw_&68gKs zaIHNo&YA1%x*O9^^|Rm4>*M~38VN%gTJS+<0DGt+r- z#H_Oh%CNdHtVu6P>bf|#JgLj8lNayFbUEDmC3EM;{-Z@wvElZLQ?TQ&H`p!C!5a#T z!IoMm-ThLzTB#?!BZ&;F9=AJ?+dB_KXC5x~-&pf|TW`L?>;K**PR7(q1JzpnvKhb( z064RZfm=~kzPu`>{)^vqzVwfWiL9yw{AO5P7}7{HM15B$Gb>WeT5I{ioXbCZ;PH5N zzf_)DAYJzM7!JwH9D(euf4bOWvS0bd1Hz|S*}u|zd4lTSJaR|beRTu^BxnTyo{*~? zSW*rw2jUG|Sayq(rmAqUJygXU9w*{*xNK&J%i(5oSdug$igEY+#p>C7x{v?H@dmOt zQ7+1k_B^Z!eQ~>~sjj-4(+7a!LyaJ=gtS;V(uAViFe|ch-mY~%)!)n>yoQ$%R;X4Z5tl8yq7wk;WtxaqHV3^uttqBW3kdnPw z9F$$$lo`_VH4tWpR(74Pc;c@bM()id$t9Xu!^$+%-vJd{<>^v0tae|VP%8~JCkiEL zLXk|M=v^APKFt$yn_jBG^;TJSLXZrrQMPxibr#oIE1$?KJCJQNJEnUVJ3bjEqcG4C zwEAXPz4Gtv75nqb_ve-G%LM@Kyzz@)b`)K3tO+Du=~^T?oY>wzXMrI9ANVM>Yl*R zZH1zfQ8-P%*jlOrfSxPkq^bZQqg*CQ6*_D#HkT!o^6VC;QEds5VRg&d%aGUqPPXWvL)Dtk$1q8n)gSao*01;=ETM zE%bOmt<)!`i>r?ojE z6iP~(vV&yp4utq`XXM;>uZCpZ^OYTWwQ?+hZ&c%ozQqR@hWx%7i+^j^$$RGPbC2`q zFoc(|w!O8Fd85X=F>&6vinWh=Rcb-sgrB?tlp36KQ$T_i<{lt}HXWm{G(FLLcHwUZ{5Q#U@`eW$faIg(P5?rkB55bv-`R2a& zVdgFO-HW{c-AfQD>~?#^-xY~O4|&%yFKb0uzi74m1>}uTSZmbUhrChajYL>$*V>1? zQRC%MkM8|eX;Oibdc^C&9441>+&a)OKGZUad9gKZ?L*$E@p6Kc0{}LMB~b_^3Sn|# z{OqXp@~`S5=3NceE|T}y@h6WTJ4ODRyH&gU#ZuZ=JgC=YLyhB>8J(rSe$+DU@V%@| zC9ZfTPn{D70PWSfhEv_adBeggspo*g!ZFkFHy0!lqv( z)<%Js!)0?~+2UA1QeJ$~f%L9h`i9fpm=_0t#H=`(TAY-xOv+ONvc$XuR!=<#6xLX` z;mYwwgoS8w72CeDfiLC)fI!UK^YyaR|8{GUtjw_%YncSXLh^QM#d1OQJIw&F^QB^< z8kdQ8Rn>EdS0Rq!BOTLsKW-(T`RZ(iQY)JtG68^4$}fE^Cv9V*For)nYH2vr1ptq} zvV|z=FuUG={X&df`odd#$qSx-^NwlK1^`cge}`BuAP(Mq|G{9>xG(#ftL5n-6HmYq z#|hb-`B70ykt%g#g6{sr^6^3x?ae6D95`0-!S_BhPuYU-h7cCP+EX{Y>uVdycVcqB zYI?{Nn;<#-+BT7FP8{*6u?PQRbNlr{>UUSwZzu}9mwsOF^NAiN=_8whJL z4`w$x$%9gb5D++Utb$Y(0N^-|AV|TkH1Y_71nx(K!dg@n36~9RKHo<@5~C6Wz|Hqt z&c9t}nf61mg!b~q+{)()xcp#`3~jNha9^4{Ny_5*X`{_Y3M!u|?5iKSbo`!S#QfMR zThdF_A$e&CMo+bt!()@5F)yB!8y}YxLms*NQETh90l7x{*ehGaa$%5bGQpZw6#<03 zput!y1OUdm4FKTvU`xpBYp=)cRcK?Lc%$;p2W=C*vwpwTbxYrMOK-Q^zwxs}v{S+u ze({0KTmRS6d0PhnBOOy5E_?Hlf`R*EfK!SI1s0p10WXPwPb{z3OMVuJd3-UC{MTY| zD3a$@HLW+beAb6~u^GLo@f>~ROuZW>SO=;SNO&6`&!iqPj#&d0_Mm9QM1Jk{qS*Pj zYy0X(_rF|L@l-CG>%WNu*_&07?Db$hb$aqh+x3CiL`g!re8FwIv8>9ZNB*+>`M35w z_Uh*NG#TwWjAq{RccxMQ)wfRII8(jQexT$}nJe(~uw3h^I`n$wlYhVUnSa`mm=#Ao z-hF3yNv=;t5PLB%-g2@3{M&U2S#eLiUgg{BLF|o*7aPYdUKHaAI4OlH77H;9n*j%@ zQcM)!@p%AHek3QOTs_!0UVpM%Am;7)W-0ZZ1|fyTVj)=-No9v}$Ri`2)3aliDV>Qt zqD+w$@6TkhS&HPCvO~GFE8rMzH_rFZw8bg_$gI%tgmhu8byWd?OeKy{iCOFgwc377 zH_|b^R1^f5*lQTEocl?wu4(+hE9JS{Q^@1N?Ul#{4zmjYwme<%_+M4!RHa}T?zFlj zav_!1X+cf#|vHnb$XgF^mkm> zMNHur%uvq{wr8C-$PQ$1L01y^}c`+()=M5eC)|wr) z0Dve~K)ucaVNv^42n*rx7c~FusO7U?)msg7UAD`=x_9`mw@DRqWQ3|F`eqX{7rcxC z;KAjA)RF{pZji%cdtBZby*VLkuB3T3U>77LR@;n*7sZ@bw`syQ(lI^IFy^vF-h~Q_ z*B4wqXVa6}8ReS$=XyJ?4*@fKZL^NVECm2`-X7|_Jp=$O4vR15p?3P1gM=5w;PU|r ziFsl9WyL(0&E%XNv-H-D^f!(Wmmpx7wx9UX_0q?4(o5AMnZP#d?7BH*H8_2RWj8u6 z{OsPQ!`TVhas-emovHD3_vUBv$O44qBfx4?)&ISI#dpw01CE6`oMFK0i^QzBsuv1e zR`l$@*O(@3z}Q~Xq%D6(8kf&OT^`~{d}=HJSf;|Ot~p^5tmpruCafw@1W-m{` ziB(I9&jV7R=B6q!Iw@9zs^_`(=IvF;WKVcF|;c+UN#7V}~x zFReg)n*51Zx03(nRHo!qrU1bG3q8czPUE?5r`4UeEp^kO+!?+3>Mt9Ksok&;daW=J zB4}M4!(BF%E8sY-uJJxY>(&0To|!1{l32%YKoU5H~OZeZL0J7&_v(tYN+KeATLv4iRHqwM{{$klKnnB!etGD zn0WEdua+d`#YezG0%0NAB9*pCHQGI0_esY@U)X~hSQo9kg1jMw#o@EHg$db}DXB#X z5j>>=u?9kVse1Q|r95E>$8hG*Np3vb z#avin)pFLBq~6*Q@?XN;{BQNsj&hH&p2UizdlHK zgpy}B>`hP1RB-rg!?30KTpzJJhQK4Ql#~7eRCL|c*PZC3-he7gmRXV1dZpjjYd-P` z(vV=Ts;Z+KmQPgx&{NCQ&n~RijZ2ai>`9etq&r_K27tO#?Ouep^Q$EQpvhMJ=5H`+_l%M_g z8q@gP?0>_j-F(r4-iSI^k-I&G`e4=;t1>sM0U*!|ZMlTSTva($DaHFULzjybIEMG# zV?w`pJLTmbYD7`|;dj<;;+odNrPqQ}ujd*^`ID=%aW_5d=Yog*XQD($K=u3gF%Kq1?cc)7gqRYR$N1mbCt4NNazUHWqsl=J(nu|Z5|1QJ!U1DKTeNaQ9U{`v$ zQ=ovul+L7oFlm~!In8bi!vzwqK+22Nh&8!NxthKh;6c3u_s4=?a*@xfj+=u|zP`ga zZfU1# zay3uH9cb|HV^Xj;b#l-+IbdYYOJEs0@4>+ramx?WcU}a?w9ZuXVTZ4~DQT@#DJtBR zp1Vy;dZ!HDA4i@3R}Tp+{tei5XQ=DW5be~*KddG`knVB>#=55gV4!JiqAToSBaJsC zbj{mh z`VWh>s41(kQ1VC?-^V#A2>R+q@BY5sciS1&TFbP(=8tXnPInaU&e(J)hbQFr)&+YH zuBUk;U$~u~iT>G%{@K3zku6Ub?0KndR&S&F;0q+Y{V$hI>rBn(d;MNPl^)CHuqOIv z!{Q|{ucXCT8!lKJR{r)>=H>MdCPS)>(J8GJ+MdFh}{2^+2MsK#8U2YrdvZHQ0 z>UMY%vgB!{i4oZn44Ipf1X4c3!l=_z`%wo&RgrL7-8Fw~3v_mUKdVwUBv=i0YM(({ zkO%=B50JHA?Cn{_5;#93#Z zw|+bCtR|B2t6nI)`}=n4PI14W*&EVn{pvdnIqfN_C5fA#DiBC`mMMGPiO!z8bJbXO zI9n1Y1b_qI-bB6Z-9NO`s#+lB&Wl{%&W>l|BGaYGn;4d+wj7QVLbEi4xT1VRKm$xzKG#Z3dUq>IMMwq+JpxbXwe80cYC_g={X%Z4WjT5}Y?A zR`!h_ZDEN-B1K9VlcH0fPt5^<-EL>G5OuCHDK}oJmB|vs0tuhXV`E<2?L@5xhhfA# z-e=IYj5~bRaF(x@sXLp+a$#mg()pj)u-GhZQ6c~cMSh}%vDiq>M;%gyaPzZyxBs^_ zGTz`=@qT1fg(VV+0GSJK#{_OWN(3wg01WYLK2ngkO)HF{4=33yM9Ad}rTqBR*xapJ z9LIIdQ6Bfxz zMyFu{tHH_UvZ`Jv@EZd&1Q5vIk*3a4UOC=qH$@T~VjZ;Z3i3u{4Ts9=8*eQL9A?+9 zZ`Uvt zJM6nOL_=7$eC+s>i@T}y25M*!rg7fGMIbGE++lBuS`u)0?40c>w7C8>gljK#_IVXP zGgg*2;Hz+%Skb_1>C26b@?e92b=kTr$m{=!wS26>{W*Psd9jhs>EZUtDV@C8{> z`tD%1o1Au&bEIRc>3sLTZUtz7|)?Go~rHtaw1ePf~k zTo?YM=I9Uh#>6u+*mpH)G4>Yi&f5AyA?=_S#R#v<$pIrR!>T~SOD#!I=PBfB2{E;1 zoplVgj6b;APX;+>g4M4opb0Aq@j1O7%w}*(6pRu%Nf_jN;&J&M*L7Q-&1Z5!k!->8 z&T`Z;o68c)_(B;!F(;0iVO6e?KKANn+P>k~1WD|Hth{Zhmw$P0xMONDyi5?yXXLz{ zQH%OIqxa)G<`=>kesFCO)*6PHMvA7!V2VO56B$-_zE}(Z#&K()5iw81J@DrhOnyac zMO8owD{86&fYHt{0@@}Qr~;iLtz|x|j(dYeePxIswQLwRn-LN-A^omuYDs74CYi}QrDntAX78~b10*rQsk+CR$XDT&J3JI#Ua*c%H z)rdjm^8I!%{PbRs469u=I=9Q+biRk!JG$wK-15Wo={b@MR1mG*A0nARlcPv3Q2C7& zLp|GhL*I0!CjwGdlvM=)c9Uyb$8@`^ocCLVRrpO-x)gNcOZn-y0i?deh0y#g&vE6wqb?)tRge4CS=J2 z{fgSE2R{B`^~XP~_S@|v&Yt^8o!1?CT!{svLa9PTOUNl?y!(#;SHO`i9Ma=BZeEz* z$8NXx)jKPnEo69cu7LBztJ|6`bhlm`VB_;QER7eHJ&{c$Kx6{91Dzc7pUO5Q!fIXL z468FEe#R>~RSTZP(|SKo@d)04M26K3`_uOyD{H?IS9_v;IbsVE8CEmO)p5yE(}b=5 zWY^T--2K~qtJVB>iIy|JPL>3hCe zdg7mNdfeW~K?{h`bGAgtDv`E%!Q zzSOI4UGNHKb69)7zKJTn*)dCB{enGxi|?&Z>rE%#yuRsB?%~(A-TkPQ7M>&!81g!; z=&j$j65G>lM(6&Q%TyV$y^Zskq@&lzqP_1i48Qe3OSq}XBS!1heiP#`q$C!(yVdRV z-2JH4cc=gM7mAhI`8>^D6ub6rBbiodk-XG;#yr?q&y3rF`c=FynDhE(Smg*8Xemlh zEWf?T(XQ$GGo92S_cFmWX{-N~9z7r=B5PeD!>VD_tZ$p>sU0SE6jD*VKQoUK5C!vK zpZ!lgxuGaxUINs5<_b7f&lYA^rri6aJSYMIn570Wcoow6Ze z@7K%7B%q_+)79@ak<(gB#mizLRnHaW??`Pt+tqZThe@X3Me_RfTw1Y+ek8mocIm(B zcD-0i1eRDrIIZpr|5-!C4P%Z))v_a?s@PoCBQIC5KA&>LahxaM9ynG(7H}Bd*WY6l zRlyH0H5QGKtIk%OeDg-2So5@4F)>PsGF1iu4wK7fbaDk8a=4AK5Rr^eJsX6VhLsl< z0ALt??cK)l-kGYS8^YRc5d@=M(^ubV@U4sBSiaahEEbEyonHb+5QN%)2LQ7$Sd!Hs zptY{sfu4BtIuH=YXsERq3+gD}7}rao(Ar{7A00M0NFe6Ony|U_EfGBBM-0 z6mVMIzj^IElS{3STF$A`cHXAv((ya%y@b5Moz`guXnyNV5~#+f$?|ulDpF$jVysw8SXp1)NX>~h@JY~0K&BEOer>zkfwo-kwVRyk z9OcfhluYT2=Bc^$gRtkZuKahSR4JO#o2k~CCT##V0I-`FEupMMRr&Hx>rGeRX*l|W zJw#Sj0)8{Bj&&I18cEBg{-lC<+pIHxm-fO>@8LMU6#z(8 z5uhe$1pv85no+8`_}_J;k^q3JDq#4;%BoDN`jZ0ckw1L@3iG`1RIEQ$p-yj*468gI zkG6kxcGL<0cYoiGc`-JJ6(kF06zug)pgPYRI6-StZafb7Q0oK$u-GgX8zFc5ki3k9 zHQYLNeyoo89H*6RdAcBY`9N5Issex@8CL!BI?S%7PkRo2r`&0A2g$G+9eZgBRH?jy z60`z(LE~*$NJaZ5T7(`LK0XH}9aqNLWs*n{ctU+wCk~gsuncQdJN* z!z#f`z=bm(SsgxCg(zrS4?=XaCc{ z<+CfE%zyMRww(FbyJU2oFg8=H=GJ}48v!phfvPVrk)XA&e&q7;du`PNdtNFdV-4Gk z4$O<6`ti;F#!;8eZ8bRVecX*>cuLXy9#5viTKBaaP2M0GR-AWc$66Bf%`#lr06)-oc z1OT9WFyVHfg}c&8UU95Iq7YHzNiFDOZTeD9=4MU(sV-{Tps=iUSX?|ImmKV@p;}%; zyuJxewfSnGxTQ1nTNlRgoi@~$mzJP4xj?mHZ${@Wo$d4Nsct)3d$MEu^F<APLC@xWE7&enz z`oqHNZ(Rb^4699N`eyXzl1DRT31W#tsB4~RyE4cZb1RP)*iBAFN=%Rpt6}j5N^nZL zr8D$f7sl}XCQx0FpjFH>P1L28+fn}Z%ZR=6)Mf0x!}Lx8 z7LMbcH-<7RG~IXRruHLf-Kjz2jo;nh_-OWlV->bpXUm1Y2!yp(R7HTuu*zf4buYSZ z>77>U0f^!fE=&+ENt&+`rgMstN!!`3jjz zjJmvRE=w%uyB!|Oj3Y>f)iq}?Ltg)#_aLltwG{JWK{6SyW^0#&m&cp;#}~y4(n=GX z&i1xn8*~TWdrf3mZMoQAb|foe-c?@DjN-f(@6W_>n9-YJ)zaeqnca8wSbz;itK8Zp z=jC!2xCz)zPL~bc@ux*DJBs?ttxAB%usW%qiO-bfRHg)f>G;L!uV>`_?_LVYy7jrD zw2g_P7=dNRu4@^;ce=yx(%9;^c9Fctjz9S@e-1+|5Z1c4_91W7c$X&5`&zN~A#c=p tmmtpj8nX5wZ`62ME5b_PA@4fo{eRlqf%vcQjnM!A002ovPDHLkV1fmEcYOc= literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2021/17.png b/.aoc_tiles/tiles/2021/17.png new file mode 100644 index 0000000000000000000000000000000000000000..3964e343afd1da1fe08b870a679a14e315872a56 GIT binary patch literal 8064 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 literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2021/20.png b/.aoc_tiles/tiles/2021/20.png new file mode 100644 index 0000000000000000000000000000000000000000..02d9784e9acc877d62b7543ca5c836c712c658d2 GIT binary patch literal 9551 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 Zr7}VX-DScz@Pkr-oRpGexwuil{{V_&`da`1 literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2021/21.png b/.aoc_tiles/tiles/2021/21.png new file mode 100644 index 0000000000000000000000000000000000000000..96776ad400938394b36e962c9590172df4dbc09d GIT binary patch literal 8294 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%0ASRZ6&=%^H%Gje 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 literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2021/22.png b/.aoc_tiles/tiles/2021/22.png new file mode 100644 index 0000000000000000000000000000000000000000..db4e6ccd88bffa13c84420cd9f7ffafb23aafe26 GIT binary patch literal 8123 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 literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2021/24.png b/.aoc_tiles/tiles/2021/24.png new file mode 100644 index 0000000000000000000000000000000000000000..691247e1583e5ef5a45e6dcd5461446fc0d9b1b6 GIT binary patch literal 9258 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 literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2021/25.png b/.aoc_tiles/tiles/2021/25.png new file mode 100644 index 0000000000000000000000000000000000000000..99ce1d9b2dc1cad1149ff54bad9caba82fc5e75a GIT binary patch literal 9171 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 VR$%&!2d8C#q^O)og|MFg{{d$92;2Yw literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2022/01.png b/.aoc_tiles/tiles/2022/01.png new file mode 100644 index 0000000000000000000000000000000000000000..40244101cac965d232093b0da32d37efc209886c GIT binary patch literal 9511 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 Eg4Wdtl>h($ literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2022/03.png b/.aoc_tiles/tiles/2022/03.png new file mode 100644 index 0000000000000000000000000000000000000000..f36b1a8080e595d679aaf70464a4720865271864 GIT binary patch literal 9808 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 VIjC_;$XNgY002ovPDHLkV1h(&aHRkM literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2022/05.png b/.aoc_tiles/tiles/2022/05.png new file mode 100644 index 0000000000000000000000000000000000000000..809bb8e26d057620cf893624f9e10f7b4edcfea8 GIT binary patch literal 9416 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 literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2022/08.png b/.aoc_tiles/tiles/2022/08.png new file mode 100644 index 0000000000000000000000000000000000000000..286afb36ded951946ef57bf54380a0d0f603af37 GIT binary patch literal 9854 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 literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2022/09.png b/.aoc_tiles/tiles/2022/09.png new file mode 100644 index 0000000000000000000000000000000000000000..b02492e164b6aec41b2c7efbc209f23e041e4bd7 GIT binary patch literal 9863 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 literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2022/10.png b/.aoc_tiles/tiles/2022/10.png new file mode 100644 index 0000000000000000000000000000000000000000..2132b2169eb1e36b3c7e8377bd925df08bcc2703 GIT binary patch literal 9011 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 literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2022/11.png b/.aoc_tiles/tiles/2022/11.png new file mode 100644 index 0000000000000000000000000000000000000000..1bdfaaa3742c99c3ad6d50d57908306fd892200a GIT binary patch literal 7474 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 literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2022/13.png b/.aoc_tiles/tiles/2022/13.png new file mode 100644 index 0000000000000000000000000000000000000000..2ff728ec25f9e56b929662c8763eeb62d68fa127 GIT binary patch literal 8826 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 literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2022/14.png b/.aoc_tiles/tiles/2022/14.png new file mode 100644 index 0000000000000000000000000000000000000000..0a528747f3f6d7358b79db7778f2cc96706745b6 GIT binary patch literal 8532 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 N002ovPDHLkV1n;SO&G$%PZDUMH0a*`j3@;Uir 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 literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2022/19.png b/.aoc_tiles/tiles/2022/19.png new file mode 100644 index 0000000000000000000000000000000000000000..cd25e370b358fa5b84f2fb8c64654646a34ff05c GIT binary patch literal 7985 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 literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2022/20.png b/.aoc_tiles/tiles/2022/20.png new file mode 100644 index 0000000000000000000000000000000000000000..e17577893c5c425ffa43103a9e281f7b6e6a412c GIT binary patch literal 8603 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 literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2022/21.png b/.aoc_tiles/tiles/2022/21.png new file mode 100644 index 0000000000000000000000000000000000000000..f8e6df0a6b1920e84505f9cbbe67683e468e5699 GIT binary patch literal 7844 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

Xgxv`&E4BR&5PQctQ_>r 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 literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2022/24.png b/.aoc_tiles/tiles/2022/24.png new file mode 100644 index 0000000000000000000000000000000000000000..be664db605f42ad94d732e650be800bfc2492d3c GIT binary patch literal 7788 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 A4gdfE literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2023/01.png b/.aoc_tiles/tiles/2023/01.png new file mode 100644 index 0000000000000000000000000000000000000000..7d1f6f5cef5239f77132d77bebd5c4022065c0dc GIT binary patch literal 9725 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 LNkvXXu0mjf(jr$x literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2023/02.png b/.aoc_tiles/tiles/2023/02.png new file mode 100644 index 0000000000000000000000000000000000000000..00d518e7bddc5ec07ded8f41050025d5d860d51d GIT binary patch literal 10039 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 literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2023/03.png b/.aoc_tiles/tiles/2023/03.png new file mode 100644 index 0000000000000000000000000000000000000000..a771f9000b7404f5193a10872895160b8d4bdb74 GIT binary patch literal 10857 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 literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2023/05.png b/.aoc_tiles/tiles/2023/05.png new file mode 100644 index 0000000000000000000000000000000000000000..2f0f0b561f46e4ab58da468ffd139c5f8c8611f8 GIT binary patch literal 9352 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 literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2023/07.png b/.aoc_tiles/tiles/2023/07.png new file mode 100644 index 0000000000000000000000000000000000000000..848932b5f825e0f3d3a5de397da183acd0e55a7e GIT binary patch literal 9651 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 2023 - 14 ⭐

- - + + - - + + - - + + - + - + - + - +

2022 - 50 ⭐

- + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +

2021 - 50 ⭐

- - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - +

- 2020 - 16 ⭐ + 2020 - 4 ⭐

- + - - - - - - - - - - - - - - - - - - - + @@ -237,3 +219,8 @@ In order to test the programs you can pipe the input to the program, for example Programs are initialized with the `init-day.sh` script. I.e. typing `init-day.sh 10` initializes the 10th day by creating a folder named `10` and downloading the input test case with the `session.cookie`. +easy. + +Programs are initialized with the `init-day.sh` script. I.e. typing `init-day.sh 10` initializes the 10th day by creating a folder named `10` and downloading the input test case with the `session.cookie`. + + From 8baceda4331fc7bcb4e6e825c736e42a862a276f Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Thu, 7 Dec 2023 22:05:20 +0100 Subject: [PATCH 067/225] Add day 5 --- 2023/05/05.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 2023/05/05.py diff --git a/2023/05/05.py b/2023/05/05.py new file mode 100644 index 0000000..039eb92 --- /dev/null +++ b/2023/05/05.py @@ -0,0 +1,26 @@ +from sys import stdin + +seeds, *mappings = stdin.read().strip().split('\n\n') + +seeds = list(map(int, seeds.split()[1:])) +mappings = [[[int(a) for a in m.split()] for m in maps.split('\n')[1:]] for maps in mappings] + +def solve(for_ranges): + min_seed = (1e12, 1e12) + for for_range in for_ranges: + for seed in for_range: + initial_seed = seed + for mapping in mappings: + for dst, src, size in mapping: + if src <= seed < src + size: + seed = dst + (seed - src) + break + if seed < min_seed[1]: + min_seed = (initial_seed, seed) + return min_seed + +print(solve([[seed] for seed in seeds])[1]) + +ranges = [range(s, s+count, 100000) for s, count in zip(seeds[0::2], seeds[1::2])] +initial, _ = solve(ranges) +print(solve([range(initial-100000, initial+1)])[1]) From 244cea278f353910d7b686c54169639157baa5ca Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Fri, 8 Dec 2023 06:42:48 +0100 Subject: [PATCH 068/225] Add day 8 --- 2023/08/08.py | 19 +++++++++++++++++++ README.md | 5 ++++- init-day.sh | 2 +- 3 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 2023/08/08.py diff --git a/2023/08/08.py b/2023/08/08.py new file mode 100644 index 0000000..4e55376 --- /dev/null +++ b/2023/08/08.py @@ -0,0 +1,19 @@ +from sys import stdin +import re +import math + +rl, _, *lines = stdin.read().strip().split('\n') + +parsed = [re.findall(r'[A-Z]{3}', line) for line in lines] +tree = {top: (left, right) for top, left, right in parsed} + +def solve(curr, s=0): + while not curr.endswith('Z'): + curr = tree[curr][rl[s % len(rl)] == 'R'] + s+=1 + return s + +print(solve("AAA")) +print(math.lcm(*[solve(top) for top in tree if top.endswith('A')])) + + diff --git a/README.md b/README.md index c058736..a36af68 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- 2023 - 14 ⭐ + 2023 - 16 ⭐

@@ -27,6 +27,9 @@ + + +

2022 - 50 ⭐

diff --git a/init-day.sh b/init-day.sh index c239b25..261e0f8 100755 --- a/init-day.sh +++ b/init-day.sh @@ -34,7 +34,7 @@ if [[ "$1" ]]; then solution_file="$1.py" if ! [[ -f "$solution_file" ]]; then echo "Create dummy python solution $solution_file" - cp "../dummy.py" "$solution_file" + cp "../../dummy.py" "$solution_file" fi From 52d6e786d98d18a0942cb40c986ede411792c70b Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Fri, 8 Dec 2023 08:23:24 +0100 Subject: [PATCH 069/225] Add tile --- .aoc_tiles/tiles/2023/08.png | Bin 0 -> 10738 bytes README.md | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 .aoc_tiles/tiles/2023/08.png diff --git a/.aoc_tiles/tiles/2023/08.png b/.aoc_tiles/tiles/2023/08.png new file mode 100644 index 0000000000000000000000000000000000000000..abb893a0cb2d2d5596133fd65f9be7b72324c340 GIT binary patch literal 10738 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 s61M_L;Ci#B - +

From b859e916f11c0e7aff8d465bbb53d0cf2ad2b7cd Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Fri, 8 Dec 2023 20:27:38 +0100 Subject: [PATCH 070/225] Add cargo --- .pre-commit-config.yaml | 5 +- 2023/Cargo.lock | 54 ++++++++++++++++++++ 2023/Cargo.toml | 109 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 167 insertions(+), 1 deletion(-) create mode 100644 2023/Cargo.lock create mode 100644 2023/Cargo.toml diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2add082..33eab12 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -3,5 +3,8 @@ repos: rev: 0.3.3 hooks: - id: aoc-tiles - args: ["--what-to-show-on-right-side", "time_and_rank", "--count-as-solved-when", "both", "--language-sorting", "rs,jl,kt,py"] + args: + - --what-to-show-on-right-side=time_and_rank + - --count-as-solved-when=both + - --language-sorting=rs,jl,kt,py diff --git a/2023/Cargo.lock b/2023/Cargo.lock new file mode 100644 index 0000000..c5f18eb --- /dev/null +++ b/2023/Cargo.lock @@ -0,0 +1,54 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "aoc2023" +version = "0.1.0" +dependencies = [ + "regex", +] + +[[package]] +name = "memchr" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" + +[[package]] +name = "regex" +version = "1.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" diff --git a/2023/Cargo.toml b/2023/Cargo.toml new file mode 100644 index 0000000..57e69bf --- /dev/null +++ b/2023/Cargo.toml @@ -0,0 +1,109 @@ +[package] +name = "aoc2023" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +regex = "1.10.2" + +[[bin]] +name = "01" +path = "01/01.rs" + +[[bin]] +name = "02" +path = "02/02.rs" + +[[bin]] +name = "03" +path = "03/03.rs" + +[[bin]] +name = "04" +path = "04/04.rs" + +[[bin]] +name = "05" +path = "05/05.rs" + +[[bin]] +name = "06" +path = "06/06.rs" + +[[bin]] +name = "07" +path = "07/07.rs" + +[[bin]] +name = "08" +path = "08/08.rs" + +[[bin]] +name = "09" +path = "09/09.rs" + +[[bin]] +name = "10" +path = "10/10.rs" + +[[bin]] +name = "11" +path = "11/11.rs" + +[[bin]] +name = "12" +path = "12/12.rs" + +[[bin]] +name = "13" +path = "13/13.rs" + +[[bin]] +name = "14" +path = "14/14.rs" + +[[bin]] +name = "15" +path = "15/15.rs" + +[[bin]] +name = "16" +path = "16/16.rs" + +[[bin]] +name = "17" +path = "17/17.rs" + +[[bin]] +name = "18" +path = "18/18.rs" + +[[bin]] +name = "19" +path = "19/19.rs" + +[[bin]] +name = "20" +path = "20/20.rs" + +[[bin]] +name = "21" +path = "21/21.rs" + +[[bin]] +name = "22" +path = "22/22.rs" + +[[bin]] +name = "23" +path = "23/23.rs" + +[[bin]] +name = "24" +path = "24/24.rs" + +[[bin]] +name = "25" +path = "25/25.rs" From 1eb0ba27c5e81497554370ad52f591e10c20c56b Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 9 Dec 2023 06:41:32 +0100 Subject: [PATCH 071/225] Add day 9 --- .aoc_tiles/tiles/2023/08.png | Bin 10738 -> 10459 bytes .aoc_tiles/tiles/2023/09.png | Bin 0 -> 10157 bytes .pre-commit-config.yaml | 2 +- 2023/09/09.py | 15 +++++++++++++++ README.md | 7 +++++-- 5 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 .aoc_tiles/tiles/2023/09.png create mode 100644 2023/09/09.py diff --git a/.aoc_tiles/tiles/2023/08.png b/.aoc_tiles/tiles/2023/08.png index abb893a0cb2d2d5596133fd65f9be7b72324c340..6e198cf7b83f5dda7d6d2602419707adcdd95de0 100644 GIT binary patch literal 10459 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 literal 10738 zcmZviQ*>T!w6<5$sIl!djcuEaZKJVm8;#AzR%17|Z8f&F-*4~npZ#MjoUDVn9?a*S z*F7T?=_D?|OYT7SgLxs}Qc+xp}{W)|;4gGkaKBNjJ{{*WJ273`egRRYBR( zPFlM|yYv}{LxMT=TciBMx)G<;c>HPSx7%se@e5|Lb8Rix{Suc!xC@uZ2E$Jh_Zc?U zqm#X1Y}v-5%gCx?fa#KNR@v|I_Bu&B%eH3Z!t#O{(P>^g!*c^O$gj!TK}BU#Cr1eqU{p&zp^0U@ z4Gj@uo(zD58*-?DHX;E6!{JI<&E9Vt2w%4aOL{${Dh+owaZM33iwthjjR*m03)lRz zi@>g3%2-1Hu(f8UR=f)PeH{wldENm5HN^>yPTO8A<>XD{Ppqd?Zq#Rl8HNPJ!*F)% z^X;U^mDy>uROavL;UDk|#&Z?|D3Wb*=K$~*lRk*6gJ+1RbdYPf1bMrqv+#Q3lA*il zWH3wMJKJ{_A-%b3Xka*a{WG1-$kH`XXV~V1+1Ire7N~tlRgOsTY}gCfx?JU#%kH?5 z)%Q8~`aEa92LRO6N+Af;-GYZZx5X5zkNwAW%B9BBut*0{$`FH;OHu(6k@zH2o2o9S z4ug0p3>bP1ppsg-PIJPp8XLNwqbmaPcr?S+$1(b8?#N6$%B~|Y{p(G)0F&ubI+TDK zYdz*xRN*+^yGQ#{|LzqATI$uVlFw2|`7a?z8rn_OL>A2bGSmXGCd+sAp>lo9tYUNn zho^cbmX^qGm|;iE&grr)Rd^d7T6MNZ0O0D|9Pb!9DzWF*z~HLrcea{_#s1>mzBR=vPHq?rq#TZ zb|%dKUpu3~J!lZPHgcNU$F|lS2n~Br_0y^% zlb>Msiw3Iwd{ag)gsTZ=v$u}e??vOZiAQiH%EBxLNgEtje8~CqXc=VFF)8kKpY7eA z|IE3RNsp}R%fVd5mfof&g(Y4DeB^Tu~351?BjiWw$kLFyu=7Wm&+L)MT!)Q*Y-&|H*HEj?3QbH_kN6Lp4M+1wZD7E zD@weOa#pa8AzG`!$jU--9I>*}MT3RcmeCfCIt!74!l2E^=AYs$-K$ci$wRQ08oQYHc~cs(@5TlS z3=prljoZrk0;sUN=v$rQud5p6p0xdbRS3hcNPjIv8OzBTkoS=EJDB-KGFmj zJ{G9(rOr<108Tt!6_GJ)MdJf~fzbWmMcdl|`(vI?*MTB8xxm}%B~mg{B&v_5WKjgcxCXZ|3v+gs`TC6#$q!ik!^`heA+L|=Hw+- z1P`T4Bc7Mnw|B11$%|@j)7PpJ)_AK8FO-BZGQQ}fZSd)gLV}HB;o`ITnN<@~UNTu^ z?PRNKlct2pe5)8$csXt8;GgBSuE%R+Qoh$Xw)G3%`suZX?8D?KpJ~|Iqqn115iAfN zXQ`nB2K21Em)*C=W${_UnDtUl8MB~3^18Cbdhj6G)&E&Apl=_toK3#ycZkkSLs9cH z6~5@s$?#6BZTRWaFtEyU9-OWC1V;*=CL*KC5if$^Gx$nicJhx>iW?8Lq z!$DGICF-0%yt%VL=DtfA;^({)V3Cj^N-s@vFXq34}uD+JChVp8z zBhwls>2KJRiW-4~)oPRC8I$>AWi-1Pqa2lHzh_;AIQGIagH; z88`$F{4l7MQVs9enrtE0`!S~aoR;1dz}|jHXJj7VRB6Mpm-ps z>ijLqp>=O>Kqq#yq6D;aL}>q(U7~+8gG~svlDBzG{;PxNb8ubS(aIRO%8jeZ8$j;k zDq?=QGm7aL65tvVF;n0&HQodE@pw5pyJu=={u7V{16rc_^xAO%Vwn-lZ)O>IGz1$q zX=5W%$`LF#6EVqMc1&RVwz158SjxXoZbei}s{d?R=rP;w5i;s*_Wv+J1yda%#d0_x zwauIyw`VBo?o^le(sfm|jAd<~F1tMAzOJ$xlIU4i*r`kZ-A@t80>^6h7*cUEg{b4| z#pIYS*xttmCxNC_5tn<;(FDp6C`arY=B{h1OV3}AZ)R8wl8%^8@3D~5@u(?n5T)WU zr0qn&VvW=05bL=3Fpr83FKh-}FqXbpBHEGFAU*DGCZ;Uu=-XDC&&I6q;GPr2jCVA) z_ifqInr)LCSd`bZszSbC0JY^Z82JWb?4zJv=<+x-_a2cNz=7I((qMHM#T5w=%Zr#y zh0=v==Jd6R;?UKAK5WR=;h0U%r=+2M;}NV2uG92KL2Klqr1N|vOWvu%xbLS60r54a$o3T$?2E1-=}EGL(q&=tnCwi;)8d($1@QD^3VXPOI-Y;J!wsf_?dLhK}dp?Oo;X z5=mea%VI(_3o|zzQ2pkJ5#c4?)|^%OacB}Vfg`#i0_J45vP-#AS{C?M<}*>+EZqIy z8}Gs!ud1f;((2{dDNiXB-Q&v~fuJ7cr@FRqhtn3U;(VH>P>fYjpMisKZTnfz#9m3B z!3iCNRG55HY?chyT?~L7`gt^*j1X3SmAQ!h(NVr&H*0zP#w3|@0o;V{t5fdg59t%` z)%=NrXC^s{Ly~{%KZ)>04)r-3z=YUW|1+{|K6<{e}%qR#tZ~ zPPDVD01Z?<*9IA0H^MvS%rw4}@m8^qYC0@%G?trd-`3Bb*J<|~76PL(N#lAEtEAq& zAUpym9-r*Pdg2U=pKo>3`1&)swOP@_$*x@mMT6J2bdez8@(WmgxqPj6;aRs1Tx2_y zsx{`@aAPIpa~TsV;h13~t1i1*>Mr&~CeSeRjJrAVk-7Zu~H zb()(C>dU+))Aoz@=J0LpoKmlI1yuao`PDn?P0kvBMfk0`To;wnl( z`6xc$5@W{1_fS4MyGSTHR9!|+tW0Gw<{3CBnylUKU6iVzD1>|XJrC@g3vli7IKgm_ zDjJ(ZSN-W6s;_GKQ>nO?-@L3#NRrBD9d2!yW9h4BIo(M{ihPU45-6udA5{E0e)04y zZ}r3VIp+c|QyKvDKP_`=G^(`xPAp%iIgkAi)n#!BYmS@Vy`>Kmi3s}a-|i0}3zdyG zOaWU3D#X?w$s2E}cfGh)GCWIByar zABF}wTL72a3kvvw5yUY)h7<4A&@U#BW~8PK?PoVaGemjzNZxnj6f(9UW1E z6tW-x3r(OqaX2V#ctQ!w052p=&uv$EQg_^cKw3R$z@xGGwh&<%Rw2(PMW(R^yISCw z8&Nsa9O!}+r}XKbv(Bewj}b8rsnu9a$dVYa^mv3D2&)zznXGDB9%A2rWM#%-CEGr^ zsBZ~tR0$7Er=OiZs8;(Ks!{(y%Ja4vsm}Wo(AcrFxhtY*o4BKd7Db~X_t`o&9ny+V z7$&CgkfbBd?Z`}uY$b;|b0dt*>C)8MRrn|)8#WY$fk<@oG=8>^ef{~`Hf5JWtpU=R z36*{J$#5-8#ujaFH@>==lhKAP)M_0jI;$P)=)oA`Z*(fSWO8^`doF?RAOaZ;R>Uw-#8m>L~*J~6`75Umagqapbkv*K+|LxQ*B1 z%IfK^8GocS1^{3mP=DwDsm|e^&8~tOHEQ$~siK+9I1wGJNp4_i9suf*oN^6ND*KYo zYFz`<)>b^+Z)Xd^KXXA*ELI8}BKCUsK#NiyP(VCOLPEleFpN(bQUgN5w#Y@@W5Xtt zu2J$Fz8`bHHoUZdr{|_woc_F<5a$d%ritCvLlW@C2K@07gJJ%@1>b>^9_pt_VKF$s z-u=?k9)}54o;4)|0A^mfAz;FW7$rv`3pyLm?_+W!U*5GU*u6WNZ<5Ik|7CqUeg^$m zD0teKP)ix3!F5ai_jap|E@}8e&AK9lUkROYKMj{ypZZ z+=>=6Bmdq%ecetJ$n#``-SxcOw3Lb!tVIQJy%(yLQN~2^#R)k+EEDh7W%dx_ zIng}OR8r$&z=;SfD=yPX>GygY+o?)XM!5k!pxQHO(Um?oiGDX9q&{mbmIT<`Oe`zE z@k_h!E1e!1FMR`_#2bTa6kiL{1dk&xc^!Z3^3wGFWwb7=d(0n+7bsv`!`gnA0V-08 z$i7p3r!{ndB+OiySy=ZmYhDsUn8yx(^yA3U;^wze?42Hf6afPe2tw64vN&}&gy`q& z)Q9o=;=wEWb!8$6d;Nnj=xXRD;C#Y{(4`L?MQ zqxI$P`!A3(+j3mZ+sb7Qc(BO!>Tvq?Uw4z!E;n6owxa zTQe(WQJK#$Q8dIkL{St<(fYq>HoQ`cBK<4WEBM}Z!#iH-b+(rL)}rm+!%WN<=r0!au|c_$UH-ieQ;_aVKPWQ6n-v;6j^Ijlb4sBO8Ci- z08F%(dO4t3t6<@*p~`9%G`?fP>JqXiiX>$HwTWqe)0U=;JTPyQ-hf_WsF&eBdFYJ} zw-5KgHgV#o)5r6SRJT@wl|zfbXt7)R9rromj~d;%eHRT7(rPrluqXrHXT$76Vkqb# zK&J(k!OMQsT)#^lS7G&k+BuCBs}mt#lfv6egGDSc{jjADljDY`oXJ1;~({X!TR@cg3T2~ z^uD<&%f%{9zj2eO>D*{cP#ObChqZI-Xiv*&FS&ZV}k-F4S6e`4%|BDq^U z??Osc}N*C4K#M`>t{ z**Q3Ke{e^cidKq&>d(3Xj_SfEmx z?J%#ogYYSoC=sid_<>v40-5 z?1K4$vwe+LR&^h~f)-IfK4~E8hgcC4p^CdD*T0jdWF2L!R|qTB^hl!$40I&d>-riG%T*%F7q~Q?H z2{-fgjl=>Tl9F*nN0n~=etJ5-ga+_mBK(WGT3o&5m@rbA1CG+Yl@1}|r|TKBHZP)C zj*6q^fZwng-B^85r!d|m#_Mcqh%B-0C0P!TPqwc`5ma02GSjQ@C}D?oc``TODqzIU z$OFiIv4q{kl~4qfb`OvK@mCf~A!5-W;kW;1P{LNOSx9K{3rn0MNSU~A!&lf5&d3uj z)L#En6+V8M&-x`lao&)g9*^@_(}}^F{BrGBus4A7y#7xV+mPoz`>$Mxl3vy?29+3- zsD1j*!+SniAo!Z@hFl>TmXo$(Qimb`n*u@+7^7H9b522BsW~7)h^1TWuU3KBTbU;H zV`Y~yDV-B>7)<6x3nw-qn=W4y^;z()nFaq7vCo9TdD=`vSGAa1eeHSk;g(wYGhxVeCU|@6|{NLiA@ELTo{>AJ0)|Yp2 zg`QP*oQF_k*BIhJO{@~byg1!{^14~DpT>y(=Y$Xr<~B;uW3Fw375Yu_ot$dAl|N*u zOxY^RZFT`kXZx&l~l2zouVbmp8rOx2rKuDoTO>I{p2W{ESRIM}wc)owa zYGdrAOn>f@&51+iixKZ$+R{RWDctWan!qHK|D<@=?&;+u%l(f*1cG1aK1H9qYzp)Q z!sXt6O8*5V*u#0LuI2TRWe4w5@>5Dx8uQ?B?wp`gbYd8*fYoW= zVV@0Io6;%MQ!Pgx-F~G|sbFf!;)DmD6A=W{O?r)nYd!n%0+|9V^PnIiZo6#t59ZGx z%Jg?rd7ujyM&gS~Z`u}58$*iV(Z0tae@AfpH%}jACIR<25K@UvCBQ>P%}?F2XKyY+ zaF}|C;nY>Pbn?5D1^i(4T1?A8E>C*Rf7@X*M(s#jKlkHEc`m4}U<=cL z^J6iEr4f1xqHENGbtzS}tBzP7S~D_YpEF!KZ586<5p+e@^%~Oqq4~4P zM*Y~{`}<;piGCY$5iCl0;mskg)#R_lj_ifo7Hb$lVWaqxeWk|A6AYlmzIj}@ohsVf zL&y+Z=mtyDHRuWVEpo|-d(?-uqC;g`Bx)H)c8>p7RoAAHma#WR=i_EzQ{~E7s(tM5 z#iti`Zq$A+<1!R*WA@o>dY>e7!`y#9u=#f4?4rGeODtMu`t+H3eJ)ro7_ zFaG*Rg6_Y0Apy@hGIYbv&nJ`I8X$BJ9P#yi=v6HyqD4&`U#E7NG~IEq9~eR~g;vz0 zg%AS#1r`RV{)&_SZe6)}x%s!Co*I2ntGRIgf>VfU9w$c%y-l{ghS9~(lAnl9&-L@a z2tQ`|xc!!6u!>s8BxB16_pjGAw&s(#8>=Fvkm|+2L<~bh5IYa5=*-JAzN|_zb+o4x zQ>WJPnC&LiI=|%iS6f{0HxF4Ezu1cc!H~Za^Lmg)^}4?R>&5XhdZvZu#Nb~6L9RW+ zt${dmf44u$7gU`nZ%1Qf>M`s~yMgl*X67IdSbxPnke30K*fk_hPKKG|?nfyO>wmMD zn~+eOfCr>OM!h*_zsTLk;r-S``q8dKa}lYc>DMk7d69 zLqevF?$`&$z4E)r!blz!3^eBIuCEl*7atF|?6NJF;+)pMOy zDz==8{g^Y9j>XJ?YfclpKEhb2YY$VJjl%KVD5QA^agGwXB;lm$H)d}l2mI3el(C5o z32N=B1t=shbO$?>E_WJs-$v^1G>SRMS*S9Jh;HXvA-LZxALi_Sm!83_uHCb0vRY5us(HoS!<9&218l!2 z;+Bve=g<{}q)$D$3<#gzd1rrEJap!;^u%N9bW7);U4QJD=e%?aOAZ7zNeJj!W<9p| zOAo#e(V#hEGgofjsJcUY9l_+cJli zRq5K6I51Mzqi^&bWjk+U20-j^Ys;f|2ru8@9ZOpE?<4>3e^=Zf1s&_P!5CdTFvB>i zETiGQXWnKl&>X_?_d`4;`<(ecJ_uF8-LJ{Sx?xfDA;)qiLrXG0MwhTMzkx%Jp7=JD zS_5R1)t`;nc=3xLjHV=cNTiBupIyifRlmS%@9hVgAI9SHu!>V}Hy)2C%Wi1P%|DsX zM4TPNqOueY(WTvo5$S1Xu#m9G4T~|bS$uxz;uv-e2IgOG=_q-t%6|L2-+3RRD1bfQbR30UPnxMW9OEfFdZM>@W_{+sD_!>5@r-&fTNJ^5*X=bVPP~j8GXEkrlv|28$gibAue}LSLkFWVZJvv>Zx^6VqDmV=`9cIB(;N&* zeB~hQluk3BZ#+d(|D!OvK02rC#dpY%*c;|G>QhY%>PiX4I-(s{M^Qcm@!6cL#7<)Q zrmFo=yw@+r%CxTP*KGIMAK*}m^v%7!^&|055SH^R0|$P>FOC*psAIWrJ3_ubvydOnBn-}QV&_O%UW!(7v45I_5>*cW)m2?&aJST7^5 zu#SxgK5oL=DL|Yvh=eY*Q%!U%qmLgD3(wBn9F`1ZoL8ICbzY{5_B=nW;JBtzT+A+g z^zsO!Rw{U&-Wc#q%?o@U&*0eEe%|}Z^&sDYylC-nVjCo7M!oS$gLdRxFwQ4cLlvuP zGPqEHMtttcKU)f(vrYQVycUW>YH(`@^k1s1$ad0|8XLy>_mUt7CAX6i|>g}rAlG|{sU;9+3Zl8Kbhj#b-j%mfA&W?aayaX z^nScX`g=Np)qu(T4?chb|gm5D4kFEoFzifIpeCYu4w?DSVotOWxsd zgx$F*eeG4;)|}qw`QUC|$NM}&=#L?UR9gs({JTW~KN?6-AC314eG~|_gfFaigE@8m zM7*mgUOKrP6cq7wsN9>uC_Vz$g{eWW25M&*4FvCL|fo)VT z9%ui_`^!O*eh1RzCNo|=TE|UYLl$?FpMR_Nj_F{gg^!MC?U(){G*IUaYrd#$b)XN9 zT1_#1T$&r>4~#sF%3dnf@nyFDapm%YA-a8PRIky%EP-|LO|iQ7Kf8pPU!7Ksztbfj zP4=#XW&a9?uZVgC>s%3vNWdV4YE=RAn|SS{R0Y{9vz20jziHKL)SS-n%;R3FuTN-7 zbuaka!yH4{`>A_>NKNB%+d;UYv{+4HwRIh2w@*p;%6B{x*>!`?_L$^o(AoZD)7N41 s61M_L;Ci#B68xX?(Xh9QaYr&8wI3GTDs%t?vQTj7AfhHu5aJ@ZZ2l_c5ZK< zfBoW#P*s+BkNg1{0D$*$vXbiH=P>v(M|=amEAIR?000^{IY}{1uOBC$tVFRFSAaV!8upO1OUGp3E44QLryrK8<59m#=zZ&vNFIuM%t zis0>AsspRJ;@MFh(@Yb|>{V>)2dm8 zKmDs~+uy!J^M?-r@F&|@7g|{t;_X;!sjk-@On(W<#=J$a_8rNr4V<5jL+gK?eCM=s z^YVF4g-ShLbxuoj{j#I-;%4?wPp6eV+NPs*CaULx0~C|=@H#s2Y+5pL%sBX zI_-DN^dDkH@gr2FKZ705ZwG6fQ}*hp6@#V5NXr7Uxa=FUMn{R43w|E9V(UiaO~j>+V$-+qlOB0N(LN zpNvVQyap7cR{mr|*C&8aSJY!2O?Mn#_B+M^jE5e@1W~u=FK#M47B1;DX}`z0mIt(_ zoj;GU1-2A~u978H*1-co7^&A==2NwXO@juOChlWhgd;$Zzb%b87oq+@uTeHP+g#j+ zFk07EM~=hyxyCm@Re-=3$Khb)ZXp~`o+8aG|DHw{h%Rin+&8wHW0Q*%YqD0Oxli`p?U5gwCO4lGxHLpw;su3${Tv> zCwYraW;anY@^h8sAM|AX8?PHAId@5Gh}s-);@KVlX%9pYhJf6Fw2f_ zD@H^NWee4Z5f+tdIQC68kaKR^Ln#S3k;|v2mM`zZY9I;bn6e$5n}0|5!NZqd*UD>Ne>h@} z%9>X?QAUK0GCK-hkV#N$?`U$8bi^3)F(ix9binCZlny<4Mbgw2=C(;`Sd=L)pwLG< zid%nTsMG?2nA7uf+d>_`2CPa^%oHyNuyr%0pPrQlU@>5wdPao=w5Cl{pQ?8w+v2>1 zkD*AERda8css#X7nX-3oZ0Wl&RSQd6^TL6c>7x>=!z`M*aS;LYJw1!%8iXbBKn>?Y zftu#Vl0qEH!_JE=dg|i*%3quOQ6gC?%mleYxZWy7e)mb)ecOxs;R%D7@j?l8}1Stj+F(%PQTIDF(%~~U?dE70L zpNH$;+xuz;ZTp%N_$<7 zS?w&_Fr=j;%x7Fgm?%ki0g*+madgaLCQuLK^4!~7qkU<41raRAU$8)n4k3f=_qvDE zYde_|&VmN=0_-&vrbo_k+avMUlF&x+uQluCUqjhDSA{reyVN*#U;;2zB;F$ zgB*uk3P*Z8#Qu`h3E1)0uhrnfmqy%2#X9ynY6(r;TnwbE``DNFHq zTuqxGSsdXxYu8Nx6AS)S5Y1VFbg#W5bfO=qFOt!EPg1f^!t z0l6K97J;$l5y@n3HoI}uzKq1%^5hkYgQy$w{_`EQ9dyu@dVa|qrDis@^xrCkTdaK% zq^Vl9kB1r*9YoX5^Il`E7^XO76|y^T2e{517s*=MlV%CnS(3%~xxQLwcw zKHDGn+#y6{^s?xZo?8g z{u17vU+xEXcq-yX3-?i_jvcptj#AEFA+N+{XgHK^FT0d2)pXoqCF2OqlNAA=O(ugD zz9_qlG!6-E(*I0Y_%`+f>o@+PErMft*;Blj8OLW!!6w*E)}LnRfM}j7^{)1&5_4Bd zJWI-FzH-9p&PRA}If(@#iWdb9%8ft9i&DLlcJPC8IgkcV`M6CLkpK~i=W$HZjKW=K zd|PT?#oKzBtO*QBSKs{z1Ojkn1^8=o5C$^uRwUdZJ|B^^Tl z6(S{ouL<%tgTdP!RtyFnsil-i(tdx?%T>?;$U)uzF{k}_*K>p z3IF5vzv@RzkjdA>*t7LK zDQd)88*Rl=YOA}oKPz7ypsc=(`L{6j@7n!Ol58Oeg#39l6f`|QuiGo(#&|e4va$bW zWreO-V_znsFVYD&;fDP`i0a z81qn$=Kz4ZD49N;9QV^Pf_trrO`<^A0**dExS>TALr*gHf(Dp!*0o;0sc^F@8l02P zbon=hY7&)QS^Gm4GYNx3uNiENUZvM)`y_Y}p7xbAKd!0Gp#G;_(>DfU1*U8VbDg9r zenon4z0pG(_gi4M|j?Hvbx%7K zr!xoMe*oaLm8t90SXnnX+`vx5&=1?JE{)b$=3ryQ?=hTcRK@Up6dD!cN5oiH;p4zn zc%bmLAxh?x9$T*jMN;)6M~Ju?03=@82IvXfJpVIccx^$^^3qckxGf<}X7O*ChpvoJ zssD9qC*I#CEldFbd7Dr>c=zpN4B3HSyh9Hry59SsB9yQZ1Ok07`5*khIiD{968KHBI{l1=gS2?D6t9nDa~T=#?@XjpMwz zdhO%o^wgLNwa{N8M%J|>qZz^Fn_C=$MjQ?p^93Q|NwD;JT)pw!4z%5}vi zg)QIw&hw3i>vd?(!QJX;2f>bF|E4w!e{zRO@l+TkT7;$po+sO9>_4-09i!Ahk0%YO zoCPwhe<72MFa4MzU}wB9J^@vGLJxD>GEt-|wq=$eS<)_yeMysts52zcvZ` zzUDJylKHz+Kq~CXsH>|)f-&wpE*H^`Q)ArQ6IEqP!1&hs1XdCPJ>#Og`oY%os8^?5 z4|9?^{=bt(_;6zE^Q(OF{x&N_4CfT!L`_(-AUO{R683@|CV;Z+&QuX%ou!)h76glY zVw1DdysGZY=$^j`$5EYH(8Em#%`GYsbcr#<#2x0tB+%k5>r}36Cxyo|cvh}g?}N?R z)p%Ay3qGCWpxEp(s9aVFj!1m+ISU_~CY_cBk{UtPp>zNu;`p5yx`UB0;4iM{SH#SK%yg0e}m^4$$+o;*wsGSTft##Vclnyb8 z3B~zd5Vb&Qu1J+$$W93Ww92!&KUdtqy|7J1kz>8+1}ihr_>4cin1b+D%w{B5pAH1I z#QLQC`{4>;H<+H9@tsKWw{zD+YVwp9S@T3I(_&SRve7>4DmuN3f@Lu4oRMG?#9g=h zhN|6OMYZ*VA$(|uYF7)Z11I8b@%^%y;i1J@_PSuBRriU$J+6mrt|#yGK%LTBvi?lv zL9=HLP947Hl7e?g^Cvq?xMLcSl?QZwpZ=I6VfBPQOuOJsndRoQMvRAv!f?p-X@c2t z&HJO;td`<9TAvqS#;nn)N^BZ&tR~GDkR{?sjTM-dz?^az3hPrD67(+3c+hN$aMzE5 z9VPn^u1yD-vCT~An+7@)Uh?g@R(356M=tVgcUhtE6+WDWRiVdm>) zcgu-kJ-;#i3-|Y*F7xB~DCgEjmhNQmqAGUpR$G0ZMuwv^_E5ovZZr{&f&OV9S+^|G zENlQPj$iIERj&}`{H*}Fk&cDg~+y7XQR&# zlEWsVC~+VCGQ|zpPi)cwN}tcZOPAP2+`rv|sBbM^!A4Z0%e3j`VMpbzmLRE&@xJYp z@=l(3i-Q6H2*9tob})?td~$tTolZ?WG&0i^DYEWe9wLVK0YIBD$*7u&XH#+W^@5j@ zxxNgF1sH?Ky{+dp{JaYUD58GKI6DKOeA1&kk=qHnV2I{edRwj=?)nN8e<0r{D`mz? z+O&;Y)@xyp&9BI6Xt@hcmQO#d2TyO%DUDX6I+61ewUwPPB1(P59ve-wwVh-r!!b1s z)o;Z<8rR2y&pd)%+Ys{MdEaV)_`%fPY7$GX@E!d?pK7%dRhiAdgIf#E7KX-?XETA>oR?z^!;2M5%|cRtop$B1t@lV6;7 zMzic0i!gl+uFwL?bijF)<)CJ;D&FCe$E^I%91{sA81hC)G!hdN-rIJ#_q9lIBg*4YW+)at9Vc}Rh>MXJ zy*6$v#i}4*6eF0`U;sPnjgWtf3P{6&$@1s(n=>o{cXi1ke0QeIb=ww-ouS=pAume> zxLd@1qKouFnv6ngxSBGq?Wiz#KiSv+Bv3$8$gQgf@cf7(QM-ze7O2MXwqnQvU0|Q^Fl7 z`V`b8BxgLeFAm?d@>CDq!q7tZ#N`=|<9|f{)CamLWD8wd#ltnq0_NKtiw?&DJ_G>f%QN^pqp1JqoI>U1?fo=3*EA7J4 zyIn*@oVdUOmAhZrBWT3NBscSkS4=?u=BAt_xOWtVi<Y9J26T1AfqU(75sAtxW`~x-^0F*IirpA`?JcsR2{fW?kfeD-dUMqjtr<1^Q>qK#*!#;1ineN}X!3*+oAx?(_fB1< z`5k%x{g(6ixc46E60`S+h_ZbbJ3=xp+qU*d%H-b5lcLhKwlc;!cfJE(8col;xckcj zA3^kz;&E_18OwK*>!I5(03gN1l=Z)4Uw7t5g5-Mlu=%ekhM|C( z{VM7x5$ddm6TyFsZ%KJDQ8@1_DP}mVMY8sk*7g{=D-49*p$easi=1wm>vSf>FD}o! z-zn=^m=OZT_J3;{P5OWHQ?6I43Fl;ZDgD#!Kc0B{aR-i`oT!n|e5d}UZVw_$&TLS> zU413TKK`j;+{A1Ct+|sgN^EREe!83s_q}S|Rlubfyz{`D|3oZ*4$q%W=WkmxxTk4% zP84K7US89rP2ZdTSujZ#ku(&Q)NW7+`+_JoUE%GlG@|9h!Ea^%l%6ExH={L?nw7nl z4-^Ts%nDzl3B81B!ER~^|3M^_)}CbB0XC+cv-0B;>7qs+dOtc9rd&|Pd_FpldAujl zIOuh>ecqY)*#~kDUB$t*1Z7aQ)_Hh5`IG9=Drq_cxU2jH)jgW!WSA;`FD;PbD*n?I zG4hH0_e5$w`s~rwjb|dGfe0$KMecgz9ZPl|Y1LU-e2$l_?PDsJEP|6P^G&ca)JeDq z?S7btN`6M1-Q@&ay}zuZC9{mwYP{4+FihXmkREpIZ(mLh?ZN=@x@#up$)0h{AQu_S z5A1fEb4{Wy0}169uX(Hnn;0or&H?Y&?FWuPJccYx{zty6DMut< zh^oH9>dMC?0o@M|ylF>nyoi7*ZL)8*NPl&|W&Nkh7_vuo{$#3FJ| zl!C;eCiwZ;3J8FzIs;=FPG3hFl3wFrK1`aJ*srJ~W}(UXgD;2xS(0p5EH3!ue@2b~ zan<=A9JR5Ly=H53&pUa(1?tmshr`bY@out(2Dt08an`oQDuOz&(J}=W z#J8lXg0LBBm|rAO7cQDY!Jf`JvI@~4W{#R{JhX3F^>D^>NvzN~GbO=&_CNDhEFOhN z&XQm562w11)7Dvc*-w{e4iVOc4Pfo1Y%Il{U69paCdRJz34tKq)qV~t?y+SePGpId z#?Z~WM#7fgO_eEdLd`a@mf_VycWXXl>k=T)xNxak%G`hhKm{nU3q7tb3IXt|C!4lc zy(LJMqf2}m<$boI^OJsB}mm0n>Yd^f?d;&Dlg zGrsz98Y5&9Za%v;Ov5LXK2-)gaI|l_OrMDUFHZcw_zd)}TZJkNweaZ@e55c?YFuKs z6S%!w5_%VU!tf(@^l9n>i>s-`>oh`#ves$1X!Q4gsrU+7d#!p?&cEjV>m z&U@aq*(g9t4-P=r!Pn$$*uuYe$T-2f8cRHQiKR8v@Lw=G8dNB}bVs0&vSG_>7|ajO z?aaB^96^sX&-v{IZKG@M*;79~$gkW(F|!gP5-1%9(45$M^B*7)#J zyifkvqnQ&^@BR*oYz5E%$tOQ?PF5pi!F~&Ax;172yzY4-XP#cVR0%V|cH8F$lmsH) z46>AAWho1i2wD3@zm=HHc6g#eP!i({j_ve*2Lx#r^I~OrpL^IGjeVokYeY^iq#M@` zsvEkzKTaz?AF+d1658R%EOLjs2DXX)ox%9qyb$ui$lo2}oO-PK^Xh!5<94Ve>>k-| zeb?q7-XLm9#Dxc1i!&9fSJ42LN+*v-+{RSeA2Yl?27Gbezf93L$_H5`q2Uz2;;G@Q z9V&g?|2FHvamMJZ__GcdV#MNNb-??sq_3noab>;ICgLH-%T))Jh3$IR)wS^PIXS{Kt@vH0#|5*Z;K8XpAVt3h}(?DQN5z z6dtG{;G|)Y;2=?mld=N+{amFr5Gs}9MY@a8Xf4ERF^5r~9n<4FLB0ragGv zFd_*d>Lg|I1X)n};C9w_^|f-4GW!yiaLIJK&NCc^vH!`6J%Y2bRG9|i{x728J=9cb zf#V+X7(=ntDTgX1jfo`6C}zYGtwCwsh#{NX^5|NEDLWkK4t5@4}fcv;{=gX_1#_hxg0F zuNjcCE6Y?K2R>Z?`*uE6h!!GvGutjU$M^6ur$VF$mRhqEdaNrJ^V#jlMJ{8$lpSv^ z%QE7cSiK{F(HfBR&4U9utVQ1Z@;aPUJnwvtqf#7a;mMhhU+UXb*~<0S9m~d*(bE{$ z9kn1gC3n4eQY}{I#OYS6%j?1V%M?Qj-A8rric$rNQFeGY$r+~-Xc*q3(Nc&QS4 zr+&CDWN&aVW~XwJ!7}EvSGMU87U3?CO%;RX;)6U6pYE|bbjkbf$zM#IazO_z6V!nx zmOR`iu%`gLE|R1a1J!z=CnUFACGsT7rinOZmi6Kfqb7^t+XtMZEB+Xgg&#v+%CsmV zuxa|~vy@Xy2ZtF;9Y9L;NMlH^JzZx0<6T9y>_%9VvZf}TX4w47o=2BWpZu`4X$?Vj zWfu-0N}bTcIM{%J3Ich2XI;>a23@?k4TZDg#NG}`8Aj%)01sE%B z>)&k`-2to*L$@+B^LwIiy`6(t&N{!Vs|d_mn5}yeh0(=yKly{n)|_7rBzfm<*8(%Wv!2M;%SvwC`A5vQ}K#d>2> zmR9kLa@v*Z(IQYn*hK< zx_1W!kS>@?9U&fMdmMKHaz-m@+SiHha2bp>~K(BQ9 zYyT!&Q4Q{j`cZS|WA}K}WX*>iw|@@&F3-W0#ty@}MC@;M$(Q`&C&q9nehSQP<|$B5 zL62k8N-pW1>@qyls*M*Lcl1@-J6%kyTfcFZ)Wc@sbISY0%2(E4-R9)1aZZe;33#^% znNtgp>D`}f4>Uv}d|*|H!mw>MCUx{ipD{D4U+{}NKaXcTJ42aA7f;JPl0ibT|gAkl$ z1+}*{72eQ(>DLVfhAIV?vejCOuTmx8vFjvAK+%8Q&ex%ESCbQ(y~E79uS;;WuEHRI zkv_1^+U4UYnWeg8X%?Mi(&)H5Z;n@;ZPHj?c4FiAvT-yOzp8h^r$s|zu1LVFgU4N2 zUiPW8uN!qElW>QfX4oD4!+@xm*40D*jPo-6XwWyYa?R|hk@wd)Jqy>g);vT$HEze# zI9P%ozUF^v)_7^lDrVlfcq9-IA@UUF4wpP=t#}ljp+{5=)6&@hF?X{5wUPYa?*UiT?xi>QOVV}!l|h&nUF{G#3%+WtM^+i zbo%}CW-j7OH!pwX`rpFMGx<6e7yr(lx9tm>E{}e$*w~#SN5mQMIr{$wHmyG$-P{nW zjf<}24tnPeBSMB~&kjchmiw3*aj&6A+^ZLnFQObUf%k^6;5Ix!PD)v_O58Z)e-d-M AdjJ3c literal 0 HcmV?d00001 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 33eab12..25eeda5 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ repos: - repo: https://github.com/LiquidFun/aoc_tiles - rev: 0.3.3 + rev: 0.3.4 hooks: - id: aoc-tiles args: diff --git a/2023/09/09.py b/2023/09/09.py new file mode 100644 index 0000000..815e184 --- /dev/null +++ b/2023/09/09.py @@ -0,0 +1,15 @@ +from sys import stdin + +lines = stdin.read().strip().split('\n') + +first = last = 0 +for line in lines: + diff = [int(a) for a in line.split()] + sign = 1 + while any(diff): + last += diff[-1] + first += diff[0] * sign + sign *= -1 + diff = [b - a for a, b in zip(diff, diff[1:])] + +print(first, last, sep='\n') diff --git a/README.md b/README.md index fa18baa..97c365a 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- 2023 - 16 ⭐ + 2023 - 18 ⭐

@@ -27,9 +27,12 @@ - + + + +

2022 - 50 ⭐

From daf05aef807ea37eb127cc21d52e39f04bda0b7f Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 9 Dec 2023 07:26:02 +0100 Subject: [PATCH 072/225] Add day 9 --- .aoc_tiles/tiles/2023/09.png | Bin 10157 -> 10484 bytes 2023/09/09.rs | 21 +++++++++++++++++++++ 2023/Cargo.lock | 16 ++++++++++++++++ 2023/Cargo.toml | 1 + README.md | 2 +- 5 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 2023/09/09.rs diff --git a/.aoc_tiles/tiles/2023/09.png b/.aoc_tiles/tiles/2023/09.png index b5011bfde76352b9310d91deb92d79b0c88b82c6..a4380ca745968bae5fa3d868478e4c7112880dd3 100644 GIT binary patch literal 10484 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 literal 10157 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 AdjJ3c diff --git a/2023/09/09.rs b/2023/09/09.rs new file mode 100644 index 0000000..4838aba --- /dev/null +++ b/2023/09/09.rs @@ -0,0 +1,21 @@ +use std::io::{stdin, Read}; +use itertools::Itertools; + +fn main() { + let mut input = String::new(); + stdin().read_to_string(&mut input).unwrap(); + + let mut first = 0; + let mut last = 0; + for line in input.lines() { + let mut diff = line.split(' ').map(|n| n.parse().unwrap()).collect::>(); + let mut sign = 1; + while let [a, .., z] = *diff { + first += a * sign; + last += z; + sign *= -1; + diff = diff.iter().tuple_windows().map(|(a, b)| b - a).collect(); + } + } + println!("{}\n{}", last, first); +} \ No newline at end of file diff --git a/2023/Cargo.lock b/2023/Cargo.lock index c5f18eb..90b98d9 100644 --- a/2023/Cargo.lock +++ b/2023/Cargo.lock @@ -15,9 +15,25 @@ dependencies = [ name = "aoc2023" version = "0.1.0" dependencies = [ + "itertools", "regex", ] +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "itertools" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" +dependencies = [ + "either", +] + [[package]] name = "memchr" version = "2.6.4" diff --git a/2023/Cargo.toml b/2023/Cargo.toml index 57e69bf..e3a6db9 100644 --- a/2023/Cargo.toml +++ b/2023/Cargo.toml @@ -7,6 +7,7 @@ edition = "2021" [dependencies] regex = "1.10.2" +itertools = "0.9.0" [[bin]] name = "01" diff --git a/README.md b/README.md index 97c365a..258d52f 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ - +

From 7d7013cbc77fd756bff563d1755f16b96d6d73ff Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 9 Dec 2023 18:40:58 +0100 Subject: [PATCH 073/225] Add day 1 --- 2023/01/01.rs | 43 +++++++++++++------------------------------ 1 file changed, 13 insertions(+), 30 deletions(-) diff --git a/2023/01/01.rs b/2023/01/01.rs index 9fc8c81..fee2057 100644 --- a/2023/01/01.rs +++ b/2023/01/01.rs @@ -1,18 +1,9 @@ use std::io::Read; -// fn read_nums() -> Vec { -// let mut input = String::new(); -// std::io::stdin().read_to_string(&mut input).unwrap(); -// input -// .lines() -// .map(|line| line.parse::().unwrap()) -// .collect::>() -// } +const DIGITS: [&str; 10] = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]; +const WORDS: [&str; 10] = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]; fn main() { - let digits1: Vec<_> = "0 1 2 3 4 5 6 7 8 9".split(" ").collect(); - let digits2: Vec<_> = "zero one two three four five six seven eight nine".split(" ").collect(); - // println!("{:?}", digits2); let mut input = String::new(); std::io::stdin().read_to_string(&mut input).unwrap(); @@ -20,28 +11,20 @@ fn main() { let mut s2 = 0; for line in input.lines() { let mut nums: Vec<(usize, i32)> = vec![]; - digits1.iter() - .for_each(|digit| line.match_indices(digit) + DIGITS.iter().for_each(|digit| { + line.match_indices(digit) .for_each(|i| nums.push((i.0, i.1.parse().unwrap()))) - - ); + }); nums.sort(); - if nums.len() >= 1usize { - s1 += nums.get(0).unwrap().1 * 10 + nums.last().unwrap().1; - } + s1 += nums.first().unwrap_or(&(0, 0)).1 * 10 + nums.last().unwrap_or(&(0, 0)).1; - digits2.iter() - .for_each(|digit| line.match_indices(digit) - .for_each(|i| nums.push((i.0, digits2.iter().position(|&x| x == i.1).unwrap() as i32))) - ); + WORDS.iter().for_each(|digit| { + line.match_indices(digit).for_each(|i| { + nums.push((i.0, WORDS.iter().position(|&x| x == i.1).unwrap() as i32)) + }) + }); nums.sort(); - if nums.len() >= 1usize { - s2 += nums.get(0).unwrap().1 * 10 + nums.last().unwrap().1; - } - + s2 += nums.first().unwrap_or(&(0, 0)).1 * 10 + nums.last().unwrap_or(&(0, 0)).1; } println!("{}\n{}", s1, s2); - - - -} +} \ No newline at end of file From 2e119f29641eba33f590d42c1d57b302319dadf2 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 10 Dec 2023 08:19:27 +0100 Subject: [PATCH 074/225] Add day 10 --- .aoc_tiles/tiles/2021/01.png | Bin 10299 -> 9843 bytes .aoc_tiles/tiles/2021/06.png | Bin 11086 -> 10300 bytes .aoc_tiles/tiles/2023/10.png | Bin 0 -> 8927 bytes .pre-commit-config.yaml | 5 +- 2023/10/10.py | 175 +++++++++++++++++++++++++++++++++++ README.md | 5 +- 6 files changed, 181 insertions(+), 4 deletions(-) create mode 100644 .aoc_tiles/tiles/2023/10.png create mode 100644 2023/10/10.py diff --git a/.aoc_tiles/tiles/2021/01.png b/.aoc_tiles/tiles/2021/01.png index 9a07af1cacfc1d6a8e8408d00d5a6374a1a07f33..0e8688a29988ab9d5fdc377334986734b4390cdc 100644 GIT binary patch literal 9843 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 XQh7Z(NP${R29T3d{#GVw`0M`wH&vm; literal 10299 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 N002ovPDHLkV1nu6KJ)+p diff --git a/.aoc_tiles/tiles/2021/06.png b/.aoc_tiles/tiles/2021/06.png index d8410be4a65b3c69cb3863636cd77711aabfd053..fe99590c9bef96d2770e9d7c019a138e28480abe 100644 GIT binary patch literal 10300 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 C;rrwO literal 11086 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

*tx@6=k^ zRP!vvAzPIY+ok^fKSzCsip)IXiEhLS2C=XxeA$u(`R8PbWq!1{YTv zwr>z7^Z7Xx=Q*LteETngOT@FfT(!KL)Yl9K5LRDzqugEF|5J-M{BmGmQx!Jy3ZRj{ zI2mUaYzV8f)H(VFxwGn~=PWB5^$y z^dJ|Na&##H^ooM?Beuy^l~65@K-%j=p5E!>$2Kn*cyWRf^Z|6W1N};H`ZCu6Mn1k7 z>H7M;3~$+cb||`2BLeNa?oIOLwu&2o07(oZhynM(?=E{$t(c6uTmGr(67!LbIKq(M zh^6t3k-{fB4>?U#ZWR|@&M(KtPt1NeD#d8f|IdZ~cLKys^4E=##StZpYm>

- 2023 - 18 ⭐ + 2023 - 20 ⭐

@@ -33,6 +33,9 @@ + + +

2022 - 50 ⭐

From 6fb5fd2a2aa9afb9a4e547af083972f9be8c1431 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 10 Dec 2023 08:55:56 +0100 Subject: [PATCH 075/225] Add day 10 --- 2023/10/10.py | 184 ++++++++------------------------------------------ 1 file changed, 30 insertions(+), 154 deletions(-) diff --git a/2023/10/10.py b/2023/10/10.py index 2971b96..85dd408 100644 --- a/2023/10/10.py +++ b/2023/10/10.py @@ -1,175 +1,51 @@ from sys import stdin -import re -from collections import defaultdict, Counter, deque -from itertools import permutations, combinations - +from collections import deque lines = stdin.read().strip().split('\n') -start = None - -q = deque() - -s = 0 -for y, line in enumerate(lines): - print(line) - if 'S' in line: - start = y, line.index('S') - q.append((start, 0)) - dirs = [(0, 1), (1, 0), (-1, 0), (0, -1)] - allowed = ["-7J", "|JL", "|F7", "-FL"] -allowed2 = ["-FLS", "|F7S", "|JLS", "-7JS"] def is_valid(y, x): - return 0 <= y < len(lines) and 0 <= x < len(lines[0]) + return -0.5 <= y < len(lines) and -0.5 <= x < len(lines[0]) -visited = set() -m = 0 - -inside = [['I'] * len(lines[0]) for line in lines] +q = deque() +for y, line in enumerate(lines): + if 'S' in line: + q.append((y, line.index('S'), 0)) -blocked = set() +# Part 1: use BFS with allow_from and allow_to to check whether there is a connection +inside = {(y, x) for y in range(len(lines)) for x in range(len(lines[0]))} +visited = set() +max_dist = 0 -while len(q): - curr, dist = q.popleft() - y, x = curr - m = max(m, dist) +while q: + y, x, dist = q.popleft() + max_dist = max(max_dist, dist) visited.add((y, x)) - blocked.add((y, x)) - inside[y][x] = '#' - - # for yinsi, insi in enumerate(inside): - # for xinsi, c in enumerate(insi): - # if c == '#': - # print(end=lines[yinsi][xinsi]) - # else: - # print(end=c) - # print() - # print() - for (dy, dx), allow, allow2 in zip(dirs, allowed, allowed2): - if is_valid(y+dy, x+dx) and lines[y+dy][x+dx] in allow and lines[y][x] in allow2: - if (y+dy, x+dx) not in visited: - q.append(((y+dy, x+dx), dist+1)) - blocked.add((y+dy/2, x+dx/2)) - blocked.add((y+dy, x+dx)) + inside.discard((y, x)) -print(m) + for (dy, dx), allow_to, allow_from in zip(dirs, allowed, allowed[::-1]): + ya, xa = y+dy, x+dx + if is_valid(ya, xa) and lines[ya][xa] in allow_to and lines[y][x] in allow_from+"S": + if (ya, xa) not in visited: + q.append((ya, xa, dist+1)) + visited.add((y+dy/2, x+dx/2)) -for insi in inside: - print(''.join(insi)) -print() +# Part 2: use a 0.5 grid to find all non-visited spaces, using the same visited set as in P1. +# Since we start outside of the grid, any cells inside will not be reached. +q.append((-0.5, -0.5)) - -q.clear() -visited.clear() - - -for y in range(len(lines)+1): - q.append((y-0.5, -0.5)) - q.append((y, -0.5)) - q.append((y-0.5, len(lines[0]) - 0.5)) - q.append((y, len(lines[0]) - 0.5)) - -for x in range(len(lines[0])+1): - q.append((-0.5, x-0.5)) - q.append((-0.5, x)) - q.append((len(lines) - 0.5, x - 0.5)) - q.append((len(lines) - 0.5, x)) - -dirtype = "hvvh" - -def set_(y, x): - if inside[y][x] == 'I': - inside[y][x] = '.' - #elif inside[y][x] == '#': - # inside[y][x] = 'B' - -import math - -while len(q): +while q: y, x = q.popleft() - visited.add((y, x)) + inside.discard((y, x)) - if math.isclose(y, round(y)) and math.isclose(x, round(x)): - set_(int(y), int(x)) - for (dy, dx), dirt in zip(dirs, dirtype): + for dy, dx in dirs: ya, xa = y+dy/2, x+dx/2 if is_valid(ya, xa) and (ya, xa) not in visited: - if (ya, xa) not in blocked: - q.append((ya, xa)) - visited.add((ya, xa)) - if math.isclose(ya, round(ya)) and math.isclose(xa, round(xa)): - set_(int(ya), int(xa)) - # if dirt == 'h': - # yup, ydown = int(ya-0.5), int(ya+0.5) - # xa = int(xa) - # if is_valid(yup, xa) and is_valid(ydown, xa): - # set(yup, xa) - # set(ydown, xa) - # con = lines[yup][xa] + lines[ydown][xa] - # if con[0] in 'L-J.' or con[1] in 'F-7.': - # visited.add((y+dy, x+dx)) - # q.append((y+dy, x+dx)) - # if dirt == 'v': - # xleft, xright = int(xa-0.5), int(xa+0.5) - # ya = int(ya) - # if is_valid(ya, xleft) and is_valid(ya, xright): - # set(ya, xleft) - # set(ya, xright) - # con = lines[ya][xleft] + lines[ya][xright] - # if con[0] in '7|J.' or con[1] in 'F|L.': - # visited.add((y+dy, x+dx)) - # q.append((y+dy, x+dx)) - - -# while len(q): -# y, x = q.popleft() -# visited.add((y, x)) -# print(y, x) -# for (dy, dx), dirt in zip(dirs, dirtype): -# ya, xa = y+dy/2, x+dx/2 -# if is_valid(ya, xa) and (y+dy, x+dx) not in visited: -# if dirt == 'h': -# yup, ydown = int(ya-0.5), int(ya+0.5) -# xa = int(xa) -# if is_valid(yup, xa) and is_valid(ydown, xa): -# set(yup, xa) -# set(ydown, xa) -# con = lines[yup][xa] + lines[ydown][xa] -# if con[0] in 'L-J.' or con[1] in 'F-7.': -# visited.add((y+dy, x+dx)) -# q.append((y+dy, x+dx)) -# if dirt == 'v': -# xleft, xright = int(xa-0.5), int(xa+0.5) -# ya = int(ya) -# if is_valid(ya, xleft) and is_valid(ya, xright): -# set(ya, xleft) -# set(ya, xright) -# con = lines[ya][xleft] + lines[ya][xright] -# if con[0] in '7|J.' or con[1] in 'F|L.': -# visited.add((y+dy, x+dx)) -# q.append((y+dy, x+dx)) - -for insi in inside: - print(''.join(insi).replace("#", "_")) -print() - -for y in range(len(lines) * 2): - for x in range(len(lines[0]) * 2): - c = ' ' - if (y / 2, x / 2) in blocked: - c = '#' - if (y / 2, x / 2) in visited: - c = '.' - print(end=c) - print() -print() - -outsides = 0 -for line in inside: - outsides += line.count('I') + q.append((ya, xa)) + visited.add((ya, xa)) -print(outsides) +print(max_dist) +print(len(inside)) From a37a551b728580d679538f9d97cbdd44c89f4d3e Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 10 Dec 2023 19:26:24 +0100 Subject: [PATCH 076/225] Add day 10 --- .aoc_tiles/tiles/2023/10.png | Bin 8927 -> 9252 bytes 2023/10/10.rs | 69 +++++++++++++++++++++++++++++++++++ README.md | 2 +- 3 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 2023/10/10.rs diff --git a/.aoc_tiles/tiles/2023/10.png b/.aoc_tiles/tiles/2023/10.png index c6d5cf743601faee52f2f6cabdee96f80862e90c..62fc24ee3a37ef50e8ac0f5d62074023e157c427 100644 GIT binary patch literal 9252 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

*tx@6=k^ zRP!vvAzPIY+ok^fKSzCsip)IXiEhLS2C=XxeA$u(`R8PbWq!1{YTv zwr>z7^Z7Xx=Q*LteETngOT@FfT(!KL)Yl9K5LRDzqugEF|5J-M{BmGmQx!Jy3ZRj{ zI2mUaYzV8f)H(VFxwGn~=PWB5^$y z^dJ|Na&##H^ooM?Beuy^l~65@K-%j=p5E!>$2Kn*cyWRf^Z|6W1N};H`ZCu6Mn1k7 z>H7M;3~$+cb||`2BLeNa?oIOLwu&2o07(oZhynM(?=E{$t(c6uTmGr(67!LbIKq(M zh^6t3k-{fB4>?U#ZWR|@&M(KtPt1NeD#d8f|IdZ~cLKys^4E=##StZpYm> Option<(usize, usize)> { + match (usize::try_from(y), usize::try_from(x)) { + (Ok(y2), Ok(x2)) if y2 < ys && x2 < xs => Some((y2, x2)), + _ => None, + } +} + +fn main() { + let mut input = String::new(); + stdin().read_to_string(&mut input).unwrap(); + let lines: Vec<&str> = input.lines().collect_vec(); + let (ys, xs) = (lines.len(), lines.get(0).unwrap().len()); + + let start = input.lines() + .find_position(|line| line.contains('S')) + .map(|o| (o.0, o.1.find('S').unwrap(), 0)); + + let mut q = VecDeque::from([start.unwrap()]); + println!("{:?}", q); + + let mut visited = HashSet::new(); + let at = |y: usize, x: usize| lines[y].chars().nth(x).unwrap(); + let mut inside: HashSet<(usize, usize)> = iproduct!(0..ys, 0..xs).collect(); + + let mut max_dist = 0; + while !q.is_empty() { + let (y, x, dist) = q.pop_front().unwrap(); + visited.insert((y+y+1, x+x+1)); + inside.remove(&(y, x)); + max_dist = max_dist.max(dist); + for ((dy, dx), to, from) in izip!(DIR, ALLOW_TO, ALLOW_FROM) { + if let Some((ya, xa)) = in_bounds(y as i32+dy, x as i32+dx, ys, xs) { + if to.contains(at(ya, xa)) && from.contains(at(y, x)) { + if !visited.contains(&(y+ya+1, x+xa+1)) { + visited.insert((y+ya+1, x+xa+1)); + q.push_back((ya, xa, dist+1)); + } + } + } + } + } + q.push_back((0, 0, 0)); + + while !q.is_empty() { + let (y, x, _) = q.pop_front().unwrap(); + visited.insert((y, x)); + if let Some((ydiv2, xdiv2)) = in_bounds((y as i32-1)/2, (x as i32-1)/2, ys, xs) { + inside.remove(&(ydiv2, xdiv2)); + } + for (dy, dx) in DIR { + if let Some((ya, xa)) = in_bounds(y as i32+dy, x as i32+dx, ys*2+1, xs*2+1) { + if !visited.contains(&(ya, xa)) { + visited.insert((ya, xa)); + q.push_back((ya, xa, 0)); + } + } + } + } + + println!("{}\n{}", max_dist, inside.len()); +} \ No newline at end of file diff --git a/README.md b/README.md index 0b6da1c..ca3ce17 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ - +

From e77442fa685398f97ecdc7a743688741bcd1dfa9 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Mon, 11 Dec 2023 06:35:40 +0100 Subject: [PATCH 077/225] Add day 11 --- .aoc_tiles/tiles/2023/11.png | Bin 0 -> 7622 bytes 2023/11/11.py | 28 ++++++++++++++++++++++++++++ README.md | 5 ++++- 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 .aoc_tiles/tiles/2023/11.png create mode 100644 2023/11/11.py diff --git a/.aoc_tiles/tiles/2023/11.png b/.aoc_tiles/tiles/2023/11.png new file mode 100644 index 0000000000000000000000000000000000000000..33a7af6ddc5ce1d5574d9cc7f06dc7c0cb53e607 GIT binary patch literal 7622 zcmV;%9XaBOP)#){ZTU%{wYlo{=>!fZR zC_{#_WXs;01V|wJ_s7-C%_IpB=JQwXxhLnzd+w97?t9LQ3)*r5^aY>K*ZaG4I(>|H z1oPqtg>|&m@+johQ&_{)+A&^(@#-V2;cM*}ufceU*wk;=&zS0MhfNWRrOoa9(t7T- z^zu8|RU(OWSX(>BYcO7-hI{}(CgSbPn098&a3A~PI?lFVZx!oHJQS?$BX7=6>nChF zj9xw)>hbxD(-poV5Q({bVQC%bQDw{32W8bQoyx^JTN!U#5;(=f1^`aP zoipKdV$t{iW{4$H0GRA%?P_BZ=4}`1X@|r0GcSUnQ_pIJmHN2;?O*QT@wgBV+yAZ( zHDyo$z?4DR_416D_g(5EtM(X^Y0F}4|KlD2?0zxagh3fN-XT@by>x|A zsVu3W_M5XQpFM5!1Kn+WoGkJxn*qSgh_-S5q*;E>=0?<#I?lmM=>TwW^IRlnOM6$u zdnYVd#&Nq=parh@>QZ@QI{;k#DB70AKoUPXo_HgpLYaNo)pA~CGlNRDHDi*AJ+q>S z2@Z4ooNi`T4jeBGF;zjY!a`Utr4|2g?KHGc4E3_lt88|*Hu>Y-C`*$k<@z{T{IKbn z)A#bVVbuo1v6eR;yd@M%Oc|6<*Mx<5+M?+T0$h3(miD}sCiFme+b|#d$Uye7+qvIe zNKA9I2?StVK%BN0FcULcpPrUbZ;~Tr(qn?8-}B*P;hvHL)Wsg!Ww5~3;-V< zPvmurK3x;$XkpYB-Z_5G%fdYYfJ7vKMtk2|7DOQtG!&(h*O*Sems54(PA;0l>lP_z zqtodc%GV?;EGw1VlT$2_27B7M+nb>&d(I^P6_@8`%R0DuE~-DhF|1XEfPk0#QxOR` z07xyW2LO>++DG1#ck@o(%>#hc?_MI2Nb0i93vdqiu{(4vd)tygl^N9Wn$Rf;xz&kz z)f#>Sole(WzS;#+i9~{aHf2z-qt3e4P7jQ#@~c{o-pUb6qy^P2hpsBloMoyTV6_+l zs$wyzn-)yMrWDt4)MXZl#eJYs+b7tWF?TEr+W&7xXP1h`1_1bc{{)v>CR26@<;jXIV zTNmH}?97=Yg4{p$TvBnrl#hi5dkJ{lXKTV96gR}Altcxwl{4`9d^`@fGQyimCN7)m z8I$}Ny@ki&jA)caQ`}yiJJHODR@d5jC9UN5*z9hh80GD?eCSnJ1U!CjfXnNVerQTc zVQonr$Am#eQ@kC`Uz+24;!ZBx#`LuX{t6{XrLsmY-|FdTY}Q1_l6p>55Zj1GR<>62 zkI{gkpeg`xwlY>uJRX;yR8ZSr6bLliyMC^(jTvLh?{`(+MeLQzWXEpjMu)op6JLP6 zi^JjWWLFecwl^|DXcWx-pQPQj}gttaHwE)8`blH9D;oI0Hctlkh zrH#rQzsKfae*}$8NVQnkVpKYa3NF$fO{y^+o3;hD! ztO0O270usY%J|RHAT)!9v8`qdHC2VbcSd=S1TJ9!-mC(m>@R@ zKKkx_b!$<*lTt_k(9tE-Tz*ka+uD6s(Ud2`LTY*Q!RtCva(IHT&!!x_`UsmiW$Rzc zIV&35xBY$(kHbl2G75}hu{u`si=K_r$&hkDNObJ}w*4Qa8o2hotVY|Ww* z<>%o)UQWN0t>P_V|MFtdk8?m>dA%IXO_g3kn;X;2jcJvQnnsyedwm?u557JNy^Ngf z5;@rg0FKLIqeS>gX3id`P=wIs}QX_yD#aK*K4?;egz%-4BVtJOM| zO6c))B@!8zCty%XZJpg2B@KVY_}|)T-j3$Fvhx_STvk(>6y1ED!h6gQYLL${6lXcMy5C6_z!N z@ycAkC86$giax!kmeyLc7%$A4uwt4QvMASg43SzMg}l9}ghnBT`#3HRahpEDiJ))$ z(W|u>7Dv?mq3;;1TBhKomv^t8|M6*oNN1Ork)bM35EdSfqfTb&(X1*^5Z3W+izd1#zUk`=RI>Iv zi3g_YHxHqV~yYOTz2I-zLq`6sUj ze4Q;;Pxtb&XPGjo z(~N24KX3NDH6AEojd)c7Kw(YW&J#%|w@1EzBmw2!^6M=CIP>8WG+SO}%k8X64|~?n zS2CtgaI9ec zKYl*=hf5hnHEl@BgW`sT|NW=BxdXYp_Mnu-q&^$wG2p@)4XV*WaKE~z(fLA`l3LwkF-LFM}?#sIZf#|AjT$RMpuf zq>u<$Pc_Xbs%Zs)kB{9GiKV8-Org@I9W7xPd!4O}BLmqR5BB(!qP#d9n9wQXtV~wT z@Ub^%ZasV(`^A11mZUc~w*kT+wpIVc7aZNXsH}l=>Rx^Z#w}JInz;OLFQomsWg(X@ z!~yR8qY1tG2CC%M>-PfaXz$vY-r40%S!GSiyiq}JyVuPCfYN%-OW#~lIMHJO2k!>M z;P!wQ?iXFSU!-sg_0>cMIw&4It^ra6WB?4!an;D+o#bLkCgL+nn^f|4c8jvg z8nen8uRko^vSi8^FGi#m)^eV1Zs=L&?u)g9g<<-1Pi~JK6kc7w669vx(IqTzfUEUf|8cthAkE0FY;NN6xjX@vFW?KM zdb12uRShFvXKUk{mQEf|k$2j7$GXuq3-}zipQF?Jh zN0%Vf%YN;w@n;hY8`^ki9^zp2fPLZZ%iObn?cKICI5EF^WrU9joxJBvN?v92=7j;S zwk$^rqw5dLe!G!n%AkC*CcL4IH<4{q*V_5=*))BimiXv&~gG;(*Hx_>6YP_J|}U^uE- z-P3(_?xeSVzR@Lk^2+(|yZNmhU3eVsulE)oz5NIPyd5p}UPy1doc+_L*=9!6){brf zur#LaTp9Ak>Hb$003;XGB4?$lv{y^7c|M;%`-79}?#3iPj#1-EkMItHutt)q0O0o< zS*WT2Abh-oi?s<~AfgZnHY{cbUr^i1YwHvMKt)rB9gET0(M_k2cCHGg5b^E&UiMTC zi=I~{Z@)P|>BMSy3|uWsF$XnSvl#Oyv-e+o@JH;U&TbI^(6GEubCL-7-Dgq{$L9QJ znd+0PwBgl^K_5pNw8a{Es!~8BhsWg!_P#oc!|U$o64I#D4pnF2aruIpmd=`%&Ja)A z$Uv7X56YDD3~N<^A%!&}RkinA3ieVagZKZ8Q{a8`(36*FyU#vxidyyc739PBN+-N) z$*TcFK~-R|u5d)EYK&I{uOWmrrm9iMJK(|^Q`P9?9av$FscO{n_A+=EiBzA7+eg*` zg~4h$=co006OBk<*Il(e=UrEfcvS%aHWJtnY%>OzS8Z1~rm8XCzVNCR)|jfsc>Bn! zLRfuaCG_`(W-T$qYk3s%Dvq%RYmZG|Fj%#`B4WbMl_3g=0+FP>OIY5(%`9tDh_K3H zQf5zb3ihydw=*?kQURd8jTiT*^2D9oI$dIm4t-UDg0KclRf9G69Ee(`kO-C}nx!!< z$lV4TVb$G^^~XE&uyG6lz}ed5WozGMQ$4r*dh33EO<#Dmfg#(-9y>?den3NvGw`^T z(>%X?F&qF&>p5sR8U+~9$on?Tw$UPL+7P!F3w+;M`+^ass)Fj)ipF+@J*Y^8Rf$w~ zH|I&9w(91Nny35I5g5_PYi5quo3~dOzMlJf&U;@l!c+wS>wk#V5MlLFN>R5^c=%dY zO-ly=Y>o=pyf6UGGu6l8n{%n!@cKGitO)m<#^>r_@+7v^i?e+vI9Zr7sg+F~XYW6bNhwjt!(vk2jPmzmTbeQ`MKx{b z?ia^q${nkYAC9W(%iPld_978hu_@!MjQM8*wSH!>=A9EmTeY(BVo?i_z-Eq{El zr`?e)3)}gEeHYSp{gYbJ)c((oXnoPJ19brzz9F%5g!B~U$sQQ&=4(Y)hGd_vxnk$ys6&Dr-CuL$?} z>Z!ArnGtn$g!i6vX)!4!d_F%evy@6EzOy*+R%W?2K}k~zYmt*=5Z>6#3R4DUQ4sq? zTu-#`H=_L7I=VL=jO7c&0B|>_`j_k3e2jlKU*Vj0J2NIlKHwXRNd;X%r;rq4_DN;3 z$|kw-geetoZEQNwEXpvLs+1$F7S*aahfN{0X+gDOcczlJqOrXK6UIU)mKN7>Y|VOF zyLtZ3BC+J!!*bN#Q}^!AXvu5C zVr*Lyc;aqBX+5{6G@%GNA3vv}sgcVssp9|u9)}Z46%XRte=%*=j=wHp<`5`vd|u5f z-{1J)SVCz7_vH4d*%O_5@{ox}H1gN$rk_tPj{5X`^cNQkYufg%n{LjKYorX+VvQbE z2}F{%&hC=Bw)ouY%c;d}o!trZk;km)9-Isc6orfSZ|>Z!PrOxhmvANdpol zw~5;&mPptC5Q~`B&KG`hDrLHl{cOK+f5r~{8KhW@9#tU`RyFX>o6O$6tmpM2mnYbE z`1bvRo|idV@|rLx2VbAnB^2*C5|1`@2yaDW`|@xvI)#LexW_wL0zhRWS6ykEdGF=c zyfD+p&DQi`aRUHUHFp@($k=fex1+PUz01l(ZneuCsw|CZzq~O=AdbOMaE&taIDa;P|iC zE)H?W@`icYv2Em5#r#|>0if#Xq&qRcwzFHbEX*C{wP7(FER6E2nz7#+2`Bm~W3W`! z)uon~LLz+k+HBI(m(Ws~j6o%R_u3pZLp`T!$C3D6DI6_~4!kx?2C}{9A9~ockYKd} zL3e2#Ajd$o^98?L%Y1Kn2!%|@t7v{Ez-9hqHa0Ll0(4fmVw(5O>>hE?pX@x-*D)rw zB&)2cqe~dGRw@3EZ>d}EUIZ$n0$;tVGT_$ zMFJjAA@$TY9*4t@-vNL@)#_00Hy8RLt5(<(V*p_1@p$wI|6i_Va(IHJVIHq9@XxJm z-gMwPwp~Pk%nF|k^Eh{3?ghZk6G@SQF4M<5ybUPmBRr5f){P;94Gqyoz1n$hLNj*I>MI!W!|`j`13dw|~xgA1>A!hL^>p z-r2nxySQK&Ud=EtFMd#1QH%iIC1D;48QMC#)kRnx0rqMMxpUqP#)@EM@ID*rfxPR* zLS=+iL)xo3hAPNA#UHz!pHxtby=!4i3vjgx_OPAn@1z`{6$=KHboRrg4i-ie-}p@` z?RkIKr*qzi&eJsvuL8Us&0m`1>*-*=Z^LW=_~}YUBZsFh!fH}M{S*(I1D7%~%bMo; zk6RMr)-95hH*oi>IV}6vi zV|1{qR3=sVbu2z!HI+hAkw^b^tkI?_W#0U%mK}e@o&R_l5>*v}$_T581@*4BroY8L zn(AX;&*86}?zR5=8&a8U$8%Hs*jAaPji4U-*{dOjD%L3;08)$UDI~(C$VqWIRj5<^ zKZ!+0VlzQafL0VyL9P+LPCvvv_~7|4Y&u=1tJX*R>@?tK)&9K>o@@L`Ke@)L`o*&HAGk)AbSy~c%fLrppqs! zTcj4%Kdx<)$-v&6i3m#@UIHG!XWh({!rF6*g;*CIlvmq#g+?^;$?Z{865*S3DL-CH z_hVcCwS6(txk{wc<9BivhqyDTBs4#ZNsaJzI+r9DUuEQ}3ILD@tGn0D@OQP=hPS!B z>%isALvPI4`^xk$Uz|o(Gl&^Dd#z3BNZ6G(qx|-7m>CtwmPlnBp1|6au08LjD1TdX z<|oJQspHk5EBr1d{ongf9Pjh1T8?jD6dmGzI=%n^&Lk9WiVTPj^*C|o$=mX%DQ+EI zg1GETm8`mA$f^p|M_5I8|4Ed)m0r>a0CA71;vQ9jdJL$&VyTo$A_72uRcljwS7|*5 z00?-TSR&PuH^9wi!~99F|8N}*dx`MM%?h>u#hJxDGt$h`hSrWQFUKbyMV(#3b4i7( zB7FXe%S8r&OF}(jl8aHV*^#QM;mF&_;rp|#03ar{Bqp^407wM9F`Zo1$kB$vh(`Wu z-Hf}Bs#-g{JRQscz}Acj03LQMzCeWT?$m!)*v=Q4VK$l`zn!~g#`sV#`=tCDZ%1=a z2eWOzJ&DLLlxulVcu#JRM1xZpk{3Z$bH|bpH#&ugx;1+{nn7<)@hE~kY;Db$wr0#( zljK579({LyQBB+0eOHl7t%M~I2o+KYc)YC{^JZo_no`r!5t~`QYKBizeob_UdqznE z66$WqKHX8vdp*74?S=kPfo!y!em0n`(kWggZf8{}oa!4D#QtPuNXYh+YP-U>7x^y? zVt*Htj&&eJtu>;N(Zr=;9uyKGS>ECG=*>sRwk@(ZH<};limcTR{aPN8yqaUEc615< zxRv{EbO41!$gggl?qjRq6t57V)!LMS>|Af;@D%otX|Pw$3;Ve+cPg3qY_KaTEUdMM z-kN{xc20g}%Otkd`gxPCr>_;0Kn6p z_0`$bwoZY%2&?^WuQoAM&m}!RepAI01WbTdEqO1em0nIORmdRM75;c7>&Gik$ds+E zYwc9tMWleLrgi|h@~}d4HVqhFsse!DZ)9QrMWJ4{A%xQ_?Sj!|b1^sMgLVw0@+)r1sj>qNmltW-D zMOfV$?XNfQP*xSFoE7T9>S}9hWx|LIat&~^dF?ix;MH zdBRRru~iWu5mp~pH3qUR7l*iOh}x|VLtIq=fD77kqF2^u{9V4?ID5g)(@0OJjL%=3 zJ}-b>T*o

- 2023 - 20 ⭐ + 2023 - 22 ⭐

@@ -36,6 +36,9 @@ + + +

2022 - 50 ⭐

From bdc4d6125b6ec49d850fe50ff8b79876d2b55feb Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Tue, 12 Dec 2023 07:07:48 +0100 Subject: [PATCH 078/225] Add day 12 --- .aoc_tiles/tiles/2023/12.png | Bin 0 -> 8515 bytes 2023/12/12.py | 67 +++++++++++++++++++++++++++++++++++ README.md | 5 ++- 3 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 .aoc_tiles/tiles/2023/12.png create mode 100644 2023/12/12.py diff --git a/.aoc_tiles/tiles/2023/12.png b/.aoc_tiles/tiles/2023/12.png new file mode 100644 index 0000000000000000000000000000000000000000..88ca7d92d4e80f456c650c2e2d4c30362174fd05 GIT binary patch literal 8515 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 uQMlajavJn$5U~+K{}s1y1TXvrrAsztI>2DD9w+ literal 0 HcmV?d00001 diff --git a/2023/12/12.py b/2023/12/12.py new file mode 100644 index 0000000..6017534 --- /dev/null +++ b/2023/12/12.py @@ -0,0 +1,67 @@ +from sys import stdin +import re +from collections import defaultdict, Counter, deque +from itertools import permutations, combinations + +lines = stdin.read().strip().split('\n') +cache = {} + +def decide(line, curr, needed): + # print(line, curr, needed) + # if needed and needed[0] == curr: + # needed = needed[1:] + # curr = 0 + tup = line, curr, needed + if tup in cache: + return cache[tup] + if needed and needed[0] < curr: + # print("===== False") + cache[tup] = 0 + return 0 + if len(line) == 0: + good = len(needed) == 1 and needed[0] == curr or not needed and curr == 0 + # print("=====", good) + cache[tup] = good + return good + + s = 0 + c = line[0] + if needed and c == '?': + if curr == needed[0]: + s += decide(line[1:], 0, needed[1:]) + if curr < needed[0]: + s += decide(line[1:], curr+1, needed) + if c == '?': + if 0 == curr: + s += decide(line[1:], 0, needed) + + if c == '#' and needed: + if curr < needed[0]: + s += decide(line[1:], curr+1, needed) + + if c == '.': + if needed and curr == needed[0]: + s += decide(line[1:], 0, needed[1:]) + if not needed or curr == 0: + s += decide(line[1:], 0, needed) + # print("=====", s) + cache[tup] = s + return s + + +s = 0 +for line in lines: + chars, needed = line.split() + needed = [int(n) for n in needed.split(",")] + # curr_sum = decide(chars, 0, tuple(needed)) + p2 = '?'.join([chars] * 5) + curr_sum = decide(p2, 0, tuple(needed * 5)) + cache.clear() + print(chars * 5, needed * 5, curr_sum) + s += curr_sum + print() + print() + print() + # break + +print(s) diff --git a/README.md b/README.md index 7afd2ae..4887232 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- 2023 - 22 ⭐ + 2023 - 24 ⭐

@@ -39,6 +39,9 @@ + + +

2022 - 50 ⭐

From cb216168d6befe1f3c4e13c372b753b48a6fb4bb Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Tue, 12 Dec 2023 07:27:21 +0100 Subject: [PATCH 079/225] Add day 12 --- 2023/12/12.py | 62 ++++++++++++++++----------------------------------- 1 file changed, 19 insertions(+), 43 deletions(-) diff --git a/2023/12/12.py b/2023/12/12.py index 6017534..7f04f0a 100644 --- a/2023/12/12.py +++ b/2023/12/12.py @@ -4,64 +4,40 @@ from itertools import permutations, combinations lines = stdin.read().strip().split('\n') -cache = {} -def decide(line, curr, needed): - # print(line, curr, needed) - # if needed and needed[0] == curr: - # needed = needed[1:] - # curr = 0 +def decide(line, curr, needed, cache): tup = line, curr, needed if tup in cache: return cache[tup] - if needed and needed[0] < curr: - # print("===== False") - cache[tup] = 0 - return 0 - if len(line) == 0: - good = len(needed) == 1 and needed[0] == curr or not needed and curr == 0 - # print("=====", good) - cache[tup] = good - return good + if not line: + return (needed or (0,)) == (curr,) s = 0 - c = line[0] - if needed and c == '?': - if curr == needed[0]: - s += decide(line[1:], 0, needed[1:]) - if curr < needed[0]: - s += decide(line[1:], curr+1, needed) - if c == '?': - if 0 == curr: - s += decide(line[1:], 0, needed) + if line[0] == '?': + s += decide('.' + line[1:], curr, needed, cache) + s += decide('#' + line[1:], curr, needed, cache) - if c == '#' and needed: - if curr < needed[0]: - s += decide(line[1:], curr+1, needed) + if line[0] == '#' and needed and curr < needed[0]: + s += decide(line[1:], curr+1, needed, cache) - if c == '.': + if line[0] == '.': if needed and curr == needed[0]: - s += decide(line[1:], 0, needed[1:]) + s += decide(line[1:], 0, needed[1:], cache) if not needed or curr == 0: - s += decide(line[1:], 0, needed) - # print("=====", s) + s += decide(line[1:], 0, needed, cache) + cache[tup] = s return s -s = 0 +s1 = s2 = 0 for line in lines: chars, needed = line.split() - needed = [int(n) for n in needed.split(",")] - # curr_sum = decide(chars, 0, tuple(needed)) + needed = tuple(int(n) for n in needed.split(",")) + + s1 += decide(chars, 0, needed, {}) + p2 = '?'.join([chars] * 5) - curr_sum = decide(p2, 0, tuple(needed * 5)) - cache.clear() - print(chars * 5, needed * 5, curr_sum) - s += curr_sum - print() - print() - print() - # break + s2 += decide(p2, 0, needed * 5, {}) -print(s) +print(s1, s2, sep='\n') From 5f648dc18b5498f10b6e1a6b5bb81d5e7ffe3d84 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Wed, 13 Dec 2023 07:00:19 +0100 Subject: [PATCH 080/225] Add day 13 --- .aoc_tiles/tiles/2023/13.png | Bin 0 -> 8971 bytes 2023/13/13.py | 28 ++++++++++++++++++++++++++++ README.md | 5 ++++- 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 .aoc_tiles/tiles/2023/13.png create mode 100644 2023/13/13.py diff --git a/.aoc_tiles/tiles/2023/13.png b/.aoc_tiles/tiles/2023/13.png new file mode 100644 index 0000000000000000000000000000000000000000..a1c316c31cc11b5e6754291aab524024b017b808 GIT binary patch literal 8971 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 YT{|v8A

- 2023 - 24 ⭐ + 2023 - 26 ⭐

@@ -42,6 +42,9 @@ + + +

2022 - 50 ⭐

From 2834f77ecfcabf89d825dfe70977517e8663cdcb Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Thu, 14 Dec 2023 21:31:37 +0100 Subject: [PATCH 081/225] Add day 14 --- .aoc_tiles/tiles/2023/14.png | Bin 0 -> 8510 bytes 2023/14/14.py | 34 ++++++++++++++++++++++++++++++++++ README.md | 5 ++++- 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 .aoc_tiles/tiles/2023/14.png create mode 100644 2023/14/14.py diff --git a/.aoc_tiles/tiles/2023/14.png b/.aoc_tiles/tiles/2023/14.png new file mode 100644 index 0000000000000000000000000000000000000000..78705b880056ee50a080ed3c43a2e41772f73327 GIT binary patch literal 8510 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 -x#FxgrlVQCn@Vrh%1 zpXXy;E5@kR^wOpEw74JL643p>nFtGj)@xR~{krd|+x02G8PT_;YAh^_*Lf!((4+vT z3dT8!wpUCz&0{Xm4imi15v5T08G)UPwBsqU*$4qBybe1r@%r#L!hn)laExbmHhs^s z;n6HX6Zz51B6}HQ%W|AmfQy(W?gyp}O`i>W0HDNvuVn4iDyAWew~v<%#@$v@S(lHP z?EBoS-Ec;9YDdc1w2V&R(QE?kV7bo?qh%9nj=pAfR0x}syS`fPj{(^OPKsb1KU#jTOu2DoE5EGjKnLL~zarZSXq-tz zkl28jl|c!Ae#id3D|If2k`wvycVCmBQ--K~z}yS^C>RI$iF$G^MNlS}&$AB6{{`z<=wH)H+I zmVu8t|5i|L&l#bc#kkU1+F^jw>c|_vqpr!KdR2zte~aJutdF*y1SK{hXLm>-3s-0y zxNPZAQY-t?^4p~`#n7FjNl^-^9GhkA`z`jXHSe#JrsM=$nEH7$>4P`NeZT$K7Q>+a z^xV59#It9c8sl~SOs6B8AK=^@1TmJQ5eeV&m2XK{&jnlDR zqK*L>hNkI-tzJcH#hRgHI7&WicD_IFr*7

- 2023 - 26 ⭐ + 2023 - 28 ⭐

@@ -45,6 +45,9 @@ + + +

2022 - 50 ⭐

From 7d9039a656d13012be25cda4bb8dea0499bb3e60 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 16 Dec 2023 20:28:10 +0100 Subject: [PATCH 082/225] Add day 15 --- .aoc_tiles/tiles/2023/15.png | Bin 0 -> 8804 bytes 2023/15/15.py | 20 ++++++++++++++++++++ README.md | 5 ++++- 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 .aoc_tiles/tiles/2023/15.png create mode 100644 2023/15/15.py diff --git a/.aoc_tiles/tiles/2023/15.png b/.aoc_tiles/tiles/2023/15.png new file mode 100644 index 0000000000000000000000000000000000000000..88bf5c0b03bb6b61343c4264bc9bc96389eb891a GIT binary patch literal 8804 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 Y#)T4Bh}(Fh{vH7o-mA!#OB)CLAHhphcmMzZ literal 0 HcmV?d00001 diff --git a/2023/15/15.py b/2023/15/15.py new file mode 100644 index 0000000..0380aec --- /dev/null +++ b/2023/15/15.py @@ -0,0 +1,20 @@ +from sys import stdin + +def hash(s, val=0): + return hash(s[1:], (val + ord(s[0])) * 17 % 256) if s else val + +boxes = [{} for _ in range(256)] +s1 = s2 = 0 +for step in stdin.read().strip().split(','): + s1 += hash(step) + match step.replace('-', '=').partition("="): + case [label, "=", ""]: + boxes[hash(label)].pop(label, None) + case [label, "=", num]: + boxes[hash(label)][label] = int(num) + +for i, box in enumerate(boxes, 1): + for j, num in enumerate(box.values(), 1): + s2 += i * j * num + +print(s1, s2, sep='\n') diff --git a/README.md b/README.md index 2d05b71..f745a1e 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- 2023 - 28 ⭐ + 2023 - 30 ⭐

@@ -48,6 +48,9 @@ + + +

2022 - 50 ⭐

From f80fe9b3b4b87782f2129be2065b5fc398ead9b0 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 16 Dec 2023 20:29:31 +0100 Subject: [PATCH 083/225] Add day 16 --- .aoc_tiles/tiles/2023/16.png | Bin 0 -> 8926 bytes 2023/16/16.py | 37 +++++++++++++++++++++++++++++++++++ README.md | 5 ++++- 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 .aoc_tiles/tiles/2023/16.png create mode 100644 2023/16/16.py diff --git a/.aoc_tiles/tiles/2023/16.png b/.aoc_tiles/tiles/2023/16.png new file mode 100644 index 0000000000000000000000000000000000000000..86cf251ca029133ef7e8f9b215bc47167738ea65 GIT binary patch literal 8926 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

- 2023 - 30 ⭐ + 2023 - 32 ⭐

@@ -51,6 +51,9 @@ + + +

2022 - 50 ⭐

From 52d64531441a28354287e53b8bb1462a4092c6db Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 17 Dec 2023 07:20:29 +0100 Subject: [PATCH 084/225] Add day 17 --- .aoc_tiles/tiles/2023/01.png | Bin 9725 -> 9652 bytes .aoc_tiles/tiles/2023/02.png | Bin 10039 -> 10039 bytes .aoc_tiles/tiles/2023/03.png | Bin 10857 -> 10882 bytes .aoc_tiles/tiles/2023/09.png | Bin 10484 -> 10457 bytes .aoc_tiles/tiles/2023/10.png | Bin 9252 -> 9253 bytes .aoc_tiles/tiles/2023/17.png | Bin 0 -> 8365 bytes .pre-commit-config.yaml | 5 +++-- 2023/17/17.py | 37 +++++++++++++++++++++++++++++++++++ README.md | 15 ++++++++------ 9 files changed, 49 insertions(+), 8 deletions(-) create mode 100644 .aoc_tiles/tiles/2023/17.png create mode 100644 2023/17/17.py diff --git a/.aoc_tiles/tiles/2023/01.png b/.aoc_tiles/tiles/2023/01.png index 7d1f6f5cef5239f77132d77bebd5c4022065c0dc..602cf348d8170d05a40475a8bfb7c61959d92c11 100644 GIT binary patch literal 9652 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 LNkvXXu0mjf(jr$x diff --git a/.aoc_tiles/tiles/2023/02.png b/.aoc_tiles/tiles/2023/02.png index 00d518e7bddc5ec07ded8f41050025d5d860d51d..0d2b15b4ddcfaa74374285353a18ced1c3c99155 100644 GIT binary patch literal 10039 zcmX|nWmH^EwCq4|cL>1(A3At&*Wm8X5ZoOG4-SI|*WeBV!CeCh?(Pl&f;+s)UGLr> z=bW|rM|Yp@-d(k;c9g2J3?>>W8UO&ml#`WGhkb`(k2wlF?5((aXb1q%y~;_6YkFs& z`h!gg_SW9KEYCkJjkUJ&qP9|f{D>;kf>8=Dfr|(?IPWuCsPE9&)YSE&Ro&!dQaQg< zs_rkWswOVIOVme5m4J@tn(#!GrBrWqyPgAnOJ~nm%MrFj{ZC3X@Koe#)Ndc0doFZv zCl;Nzij;5W3-TSlb1c(*9T1EHPq~0z>gF!v6L_V1+r$-~@XtMVFr}f6tJALozH8n~ zv$KI~UNftI_-v!sqA*EE9hhFaD&lAk+R0h}gtMNibS%WCozhbRoR_S#4aw++|=dw*mI@ z4cA_F5KGGe_@1Wv@P)3*+ldhr{GwccG@|e=o>It=Wj=#MQ4z4Oj@Ik$>?wX`K(~cX z)~5CyTc6nv1iY_eu7S+YuD=@ClzF;ejTⅆKV>aiu(4ta-OT%qkIVOzZk>gm%_T! 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 diff --git a/.aoc_tiles/tiles/2023/03.png b/.aoc_tiles/tiles/2023/03.png index a771f9000b7404f5193a10872895160b8d4bdb74..bc9398636dc4b7dbbd3a9a12c364ab03a22c78ab 100644 GIT binary patch literal 10882 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 SK!lVIKvGOrv_e?l|Nj7$nJLo% literal 10857 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 diff --git a/.aoc_tiles/tiles/2023/10.png b/.aoc_tiles/tiles/2023/10.png index 62fc24ee3a37ef50e8ac0f5d62074023e157c427..9df3551819cb93903cfdcb0f5794cc90d9414153 100644 GIT binary patch literal 9253 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 F{{SyzCl>$! literal 9252 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 D1Qw9p literal 0 HcmV?d00001 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b84b639..10fe7ea 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,9 +1,10 @@ repos: - repo: https://github.com/LiquidFun/aoc_tiles - rev: 0.4.0 + rev: 0.5.0 hooks: - id: aoc-tiles args: - - --language-sorting=rs,jl,kt,py + - --language-sorting=jl,kt,py,rs - --exclude-patterns="2021/*/*.apl,2021/*/*.py,2021/*/*.cpp" + - --auto-add-tiles-to-git=amend diff --git a/2023/17/17.py b/2023/17/17.py new file mode 100644 index 0000000..ffafef7 --- /dev/null +++ b/2023/17/17.py @@ -0,0 +1,37 @@ +from sys import stdin +from queue import PriorityQueue + +lines = stdin.read().splitlines() +Y, X = len(lines), len(lines[0]) +dirs = [(0, 1), (1, 0), (0, -1), (-1, 0)] + +def solve(min_straight, max_straight): + q = PriorityQueue() + q.put((0, 0, 0, 0, 0)) + visited = set() + while not q.empty(): + dist, y, x, movedy, movedx = tup = q.get() + if y == Y-1 and x == X-1: + return dist + if tup[1:] in visited: + continue + visited.add(tup[1:]) + for dy, dx in dirs: + ay, ax = y+dy, x+dx + if movedy * dy < 0 or movedx * dx < 0: + continue # prevent reversing + movedy2 = movedy + dy + movedx2 = movedx + dx + straight = max(abs(movedy2), abs(movedx2)) + if abs(movedy2) > 0 and abs(movedx2) > 0: + if straight < min_straight: + continue # prevent turning if not at least n straight + movedy2 *= abs(dy) + movedx2 *= abs(dx) + + new_tup = (ay, ax, movedy2, movedx2) + if 0 <= ay < Y and 0 <= ax < X and straight <= max_straight and new_tup not in visited: + q.put((dist+int(lines[ay][ax]), ay, ax, movedy2, movedx2)) + +print(solve(0, 3)) +print(solve(4, 10)) diff --git a/README.md b/README.md index fe260f7..f667242 100644 --- a/README.md +++ b/README.md @@ -4,15 +4,15 @@

- 2023 - 32 ⭐ + 2023 - 34 ⭐

- + - + - + @@ -30,10 +30,10 @@ - + - + @@ -54,6 +54,9 @@ + + +

2022 - 50 ⭐

From 61c336fb4a993e15f44053138fb938892d118dfd Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Mon, 18 Dec 2023 12:14:32 +0100 Subject: [PATCH 085/225] Add day 18 --- 2023/18/18.py | 123 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 2023/18/18.py diff --git a/2023/18/18.py b/2023/18/18.py new file mode 100644 index 0000000..0090ac9 --- /dev/null +++ b/2023/18/18.py @@ -0,0 +1,123 @@ +from sys import stdin +import re +from collections import defaultdict, Counter, deque +from itertools import permutations, combinations, product, combinations_with_replacement +from queue import PriorityQueue + +lines = stdin.read().strip().split('\n') +Y, X = len(lines), len(lines[0]) +# dirs = {"R": (0, 1), "D": (1, 0), "L": (0, -1), "U": (-1, 0)} +dirs = {"0": (0, 1), "1": (1, 0), "2": (0, -1), "3": (-1, 0)} + +s = 0 +y = x = 0 +visited = {(y, x)} +y_vis = defaultdict(list) +x_vis = defaultdict(list) +# y_vis[y].append(x) +for line in lines: + _, _, color = line.split() + _, _, *five, d, _ = color + num = int(''.join(five), 16) + print(line) + print(num, d) + if d in "02": + x_prev = x + # x_vis[y].append(x) + x += num * dirs[d][1] + # y_vis[y].append(x) + s += abs(x_prev - x) - 1 + x_vis[y].append(sorted([x_prev, x])) + if y == 56407: + print(f'\t LR {num=} {d=} {x=} {y=}') + else: + ynext = y + num * dirs[d][0] + if d == "1": + assert y < ynext + r = range(ynext, y-1, -1) + # r = range(ynext-1, y, -1) + else: + assert y > ynext + r = range(ynext, y+1) + # r = range(ynext+1, y) + for ya in r: + # assert ya != y + y_vis[ya].append((x, d)) + if ya == 56407: + print(f'\t UD {num=} {d=} {x=} {ynext=} {ya=} {y=}') + y = ynext + #y_vis + print() + # num = int(num) + # for i in range(num): + # y += dirs[d][0] + # x += dirs[d][1] + # visited.add((y, x)) + + # line + +for y, xs in y_vis.items(): + # print(y, xs) + # assert len(xs) % 2 == 0, xs + # assert len(xs) % 2 == 0 and len(xs) >= 5, xs + xs.sort() + curr, d = xs[0] + skip = False + new = [] + last_d = None + # for curr, d in reversed(xs): + # if d != last_d: + # new.append(curr) + # last_d = d + d_first = xs[0][1] + # is_split = [False] * len(xs) + indices = [0] + if len(xs) % 2 != 0: + print(y, xs) + for x, ((_, d1), (_, d2)) in enumerate(zip(xs, xs[1:])): + if d1 != d2 and d2 == d_first: + indices.append(x+1) + indices.append(len(xs)) + for i1, i2 in zip(indices, indices[1:]): + x1, d1 = xs[i1] + x2, d2 = xs[i2-1] + for a1, a2 in x_vis[y]: + print("AAAAA", a1, a2) + if x1 <= a1 < a2 <= x2: + print("AAAAAAAAAAAA", a1, a2) + s -= a2 - a1 - 1 + if len(xs) % 2 != 0: + print(f"{x1=} {x2=} {d1=} {d2=}") + assert d1 != d2, xs + s += x2 - x1 + 1 + # for nex, d2 in xs[1:]: + # if skip: + # skip = False + # continue + # if d2 != d: + # s += nex - curr + 1 + + # xs = list(reversed(new)) + # print(y, xs) + # assert xs == sorted(xs) + # assert len(xs) % 2 == 0, xs + # for x1, x2 in zip(xs[::2], xs[1::2]): + # s += x2 - x1 + 1 + + #for x1, x2 in zip(xs[::2], xs[1::2]): + # s += x2 - x1 + 1 + +# y = x = 0 +# q = deque([(y-1, x)]) +# while q: +# y, x = q.popleft() +# visited.add((y, x)) +# for dy, dx in dirs.values(): +# ya, xa = y+dy, x+dx +# if (ya, xa) not in visited: +# visited.add((ya, xa)) +# q.append((ya, xa)) +# +# print(len(visited)) + +print(s) From ae568c0117769a83518358663f0851cf0cdbfb7f Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Mon, 18 Dec 2023 15:15:34 +0100 Subject: [PATCH 086/225] Add day 18 --- .aoc_tiles/tiles/2023/18.png | Bin 0 -> 8602 bytes 2023/18/18.py | 133 ++++------------------------------- 2023/18/18scanline.py | 43 +++++++++++ README.md | 5 +- 4 files changed, 62 insertions(+), 119 deletions(-) create mode 100644 .aoc_tiles/tiles/2023/18.png create mode 100644 2023/18/18scanline.py diff --git a/.aoc_tiles/tiles/2023/18.png b/.aoc_tiles/tiles/2023/18.png new file mode 100644 index 0000000000000000000000000000000000000000..9bc52675d0a1c13f2f8bbc2db0d659af928bf3b9 GIT binary patch literal 8602 zcmX9^by!s0*S(;qbcb|Im+=Uu5`iR(W&Qf%=1i&vH4g zs!iYaxR!mG?3^bLR%u8l($X^O_X2k+F1MHNHidWk8!cfwes6PVGM?X}2GO=0=c^TS zdwqG!?JlEZRIBHY;&nkZ^Q!KWsiNKU0)M9Of34HL64A2M_ba_5UedI`YCR;C)8+-7 zp~oWSgpo`P3kylG7aQFrZ(ahl>s9p%shsg7hc?>dT?@X~N+GRXo$U+$XC#kJ0}hAy z^KBKMz3l^R==VulRk}i-E2rt8)ltpTXij@L64AhIWmi9OGY(CX1CH++Jx4_w_r2UY zc#16{9lvDqe8I`Vy(U#;*OARX_p;KqIToC%s?=r8_qw2jpS3vSUwO(C!t&AiIucYMIa2g6`RSH70<1QJ8=HCnMmhADl6dN20nZmQPweI_9Q5&e z((h?=yjaTY#!(p_G7gHsWhbV|&-8%9H)NluLzRm)_E|6`G>KJMI2hSe=Csuq6N7!` zz31MVYqyFfIk7eNEr&W8FJq-Vp7(@n5o1wm9eoMuH30zJ!Bi9gX}u`S!gb)x%71Y* z&rpUF4cMG@A1~Uht3v4yaZ`H(07TPnw1X7t;rgUu$IZX=XU6gg9Sn-}hje=VB4S01 zDD$u1K;$xBA5b3J_?+}?3?n3nFpCUmiKDu!+Z2Dw^r>2^v-A??K-ZgMOg%89zskz` z^|r%zQ))D1aiKW5VwzawUWW(3CM1$M5!xXEmMIMD4gG^I^{WJz{jZD9Xdy&Mf1+0~ zm7ViR)z{I@=4$m#ei0n+xm_krW;Oh0BR+Mc$9xKfgCThf+}8qEIr~3*>dYrZ4Dp(F zvJ7yPixRX;AXg!TzHv_lpNiElJJ0|i`{Z^bs;e)+Y0fhG{X6l~BXBvCFwG+C!E6L# zR}tfqM6qQcQ$iNE^9-Qm*wq~7XjQRoe;;vP-){1D>!+dGn@Zl?Hze-$c}P>Kn{)%4 zaK!OQe&`ZxbY_D|qpu|VB0Imf8GZOrQ+q05{YEQCyjX(`C+fyqcPckBv1>>UOY0`^ z%a2M&or43s2EMBA)$A$xKOu@7o?5Rud)sYqYO6dcXC`BARt{*V2pI{i*qbZn3$BF# zU|quS=Nl=FesDP(5Lm;s-2Y4IZ~ydu#O8YKub%I}E5DMtxgv@*_Cx>t6)s`v4fzwv zq(+kDU=GcDv66g%_|wGM2F3Qmuh*uBP%C>+41|spBxE1yQIMLMe!e@q_UnGxaRIaL z(XlBQzYJF3TUFm8W1m>$g6|MBO01&30Rp?Xp04Kn05K(L7Zb&_tavnEzrmmrMMNjj zH1>wL>c+i{$Mx|vZ*S|{`7nuu4dTepn@afL@JGAszlX%st-6l;B28Pj&#H7J3gQ5u z+bzRx8CE#V0RT8r-)D`%w1lTML5A)|ztYg@50_m&*op2 z1i?Ryb${)idP_syI;h1O7;Ny2p;uFfBUIwoUG48;n?Z11!Oq}OS_~uAGMVL|@65AK z=z!k>`KEQm`t^qUnnu9OdDfp2U6Q`4PJUswT1zw2W!vn~UPt}$f0*5d=_~s)N44uc z6d$G|hbNU?9j{{&nSsErFvy8iY+&a^vDBsw%ICl+H2m0MzlB*ttJ>LQiF^C4JRdZ- z49d(TVM4&TGY+8QAH^z74sat}c2hjcrKT8pinyFt(FJ13VYr(Y99BmwmY` z64_%lCyrz+v$Z!TgzIT-9WJr8Rw{d89|}jg8yE<)JL<*NghZ&ikP57cTbZ(GtLl{5 zew%(=JRU{Ia%w;Y)O99XujGz;5t8O;Q_*(QrhkgrZsXg~&P?T`W%72*rCC;*E;GIG zk2DCV*F`BV?gV*I0JreZA^7|D)18DG4b^J_byWgWlRcrbH6{}U&jsl!SbQ(7btPvh znk!y5>+11Fm%je|*8j2(wU>V+2(z#JAGj2bvozJOM3U47_uc*ucQ);;R4gQtpQ&|s zc-#;n`2m*6XGG-^S+XmgtkG34QPj7@Rb~N^bt-CxuC=77Bihrm|KQEm6q}!1ps8l& zV;kmUl%S7jormJ!d}7xgX!i2=^v&xnN2El&-a3Kg-IH%}2?4Ys9UEy|Z>ujxeL^mZ zE`MUWJvhq-pP{M!m_GBVxnE5`_|Z9l-Gc)fq_71Mh01CAXe<9#kHFb>-R#!xSnB*_ zrxvw;WuR5fQQo)MNl4j(Ff;Y#i3nsbKTcmi<`EvlUx|`xPgnXLCN6gvVi{sa@89mp zol;38&S*8aq=5#bvzd<+?;adY_HRsexvKhQ*ztW!`YW&#*mUMCl$^q5E0H$-#==$3 zuB1tod0-{?NyJ1lsL`a{LHUZk`1pPlZ05N~jOOw&zr5@Vq~)ZPM`S|MNvkMQo8{XI zJEfRbmCnHS+0VXUE+q$h^TFaxme>KvR9_%sfX8_?kkvqjy)CYwI_>-0of7$dFUSan zDond36Ey4%-KLYn6vN9atUNE-s(2a!a*N!I&Y)}4UvxsNNPeJ{&lGGdmHAN(Q*rFN zTlDl0(T4>0npU+);CGSMRp<2J*jq_jiYwl2?7Me|P(FAP=M1c{>nc|iJ@Dmv<_gfz z;DPLTHmzrLbu`$f7c+0Ve>-vug{~JiAgo&jGofHj;q)?vZE3Hb&_DA$5LwSg?201~F`ehz4=JINJhYP3VIwk&WIxbI7%+Lo6hvR}Bq{ zs@n_I?oq^b)~XAyz~~|RY8x((JlxF(kK{jW{q%D=UQ-$5rmd*&sQyaUBFx|j%6kdP z8(mb-t<&MKm>vq`s}h%j$-Sht;~5#=zwXg(d(!vZ)cUUR(ZKo!ZF4%C00W)o5Y8je z;rBa>LFo!4N6e0aoab4gc$Pb%V(tQ_N}Zwo*QSOXiXtC<^^e2O3ln8^`lmDGE$tNl zVY<0Q?6Dl5s1l2zV@7qW$Ues;gyy38Mdy0OrA-Us!u{Rp$jiDnD%(o4UT<6FwkDS+ zlk8px$mcd>$c%4*GOWGqlPM-X5C+k{3go+Ufb~I9SxqwL?jzeUy$dTu$9fh`~ac?Mjvh*)=rw;7OQ1FtS> zQ!2Nf1OG0_R*gN_S>)r95ezI+-^^{XrSX0g$4OtXy;+;qdtvBy&9|T&#){=>l%GHQ zX{cm?+rKh6KfjKKJ9u_hXiXgiS67HMtaTMg10@ zMnd1j;#Occ3o7^tB_dGL8(REDSCR!VhM(R^fV&cu2w5o?#tA}Ii4XXmj=s0v@C`+s zN5yKpQ1yAa;T@i=#BNi)U;HWi?Q?0hlX5S zJ*+Pcko;_@t;)&bGJm)kr{rh+3k+HIQhz(g))*+6y+RZF;-d;eyaUZ~`#*5AQC+`q zIw{A$#Mt3i9TN{guRfBo_KpT6tkLnoQ7U}85EFSOp3Pv_XhBG*+!DJF9Cfn?dl=g7Nd z36ySs?TjPc2hn~vJAR(hW{}eX*TwFHA`qjzv zc6%+}pcfW}()g5_fmRBtMi%ye^aYeFpR6;#s$jedLT23e_FW85yiouW*MWK_{8dIQBTaF< z_ZNuCg#=i-s=w}IIxa+x3e}{)RFTvE;9$?3yd>@FO-HD#J_TtlKMoZmYRLJo&{!N6 zI@4vWiL~8V{hN21D8TRDxn`XdF<(0L*cyv5Z(4s-mWHU#m%vo*#oW8-k3QbTj2-o} z46>fK0(p#yQHe0}x3vzS2VV8_Fyc@djvMx38AX!^TCm*Hp9|07)-;)3NPCGnx&%xM zD_3{J;L5lYqKoS(yM%lR=m z)*f+E9f9rCcq!AbwT+}t0FWypJ9+k|6~2L57jXXbi?YB|W*(Rr-G_I*=d3x2_rg>H(K3B@=G@JHc(d+swXvf#c8}XJg9C+l0`gpAF3f z{tdM{Uu-INw7}2cvDWi=<@M6zr2J=HrhD{HmmjL)LN5<6<6a>(jM~SBJXqm^H(_+a z43z{3yMq9O?;2;f7vo1@r+qTvAJ3qq@?Lc}RFtp>|L))|(baGJo7Nnq>YSvHO;DOu z8zR)#ALSPXkDDZNp=9sRVjYyHoaGC%c=+i3s%g(f!{Vn&C#ON1SWaY@uO$adoTK@Q zN_&XbAFr5girMn}`CX+G8aUaA88C9Ik#5j#tbCDnF*wWcZ>)%%4lg3R|Oe22^807Xe_Ncvy&F!U)~P zh+qS5VG8Z_h&rz~8S68otd-njwMV`!jX4N_iL@1_|H0`cNeizwms^LWaFiWyLE|ZR z((w-&{IGX8Delq~#&5|2ED=5-&PTcrRUWF*tMyE~E@0oBKWQvQ_9i=;bvf@!-+jv~ zMu}O=<0P7b=k0XOo8TN9M+Ct+%K_8W_LM zY<^){Ybzn1X#LYU!Xo)k+;}80Yx71JZtRBfg1xX%0A$!? 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 ynext - r = range(ynext, y+1) - # r = range(ynext+1, y) - for ya in r: - # assert ya != y - y_vis[ya].append((x, d)) - if ya == 56407: - print(f'\t UD {num=} {d=} {x=} {ynext=} {ya=} {y=}') - y = ynext - #y_vis - print() - # num = int(num) - # for i in range(num): - # y += dirs[d][0] - # x += dirs[d][1] - # visited.add((y, x)) +def solve(instructions, s=0): + ys, xs = [0], [0] + for d, num in instructions: + s += num + ys.append(ys[-1] + num * dirs[d][0]) + xs.append(xs[-1] + num * dirs[d][1]) - # line + # Polygon area: Shoelace algorithm + for i in range(len(ys)-1, -1, -1): + s += ys[i] * xs[i-1] - xs[i] * ys[i-1] + return s // 2 + 1 -for y, xs in y_vis.items(): - # print(y, xs) - # assert len(xs) % 2 == 0, xs - # assert len(xs) % 2 == 0 and len(xs) >= 5, xs - xs.sort() - curr, d = xs[0] - skip = False - new = [] - last_d = None - # for curr, d in reversed(xs): - # if d != last_d: - # new.append(curr) - # last_d = d - d_first = xs[0][1] - # is_split = [False] * len(xs) - indices = [0] - if len(xs) % 2 != 0: - print(y, xs) - for x, ((_, d1), (_, d2)) in enumerate(zip(xs, xs[1:])): - if d1 != d2 and d2 == d_first: - indices.append(x+1) - indices.append(len(xs)) - for i1, i2 in zip(indices, indices[1:]): - x1, d1 = xs[i1] - x2, d2 = xs[i2-1] - for a1, a2 in x_vis[y]: - print("AAAAA", a1, a2) - if x1 <= a1 < a2 <= x2: - print("AAAAAAAAAAAA", a1, a2) - s -= a2 - a1 - 1 - if len(xs) % 2 != 0: - print(f"{x1=} {x2=} {d1=} {d2=}") - assert d1 != d2, xs - s += x2 - x1 + 1 - # for nex, d2 in xs[1:]: - # if skip: - # skip = False - # continue - # if d2 != d: - # s += nex - curr + 1 - - # xs = list(reversed(new)) - # print(y, xs) - # assert xs == sorted(xs) - # assert len(xs) % 2 == 0, xs - # for x1, x2 in zip(xs[::2], xs[1::2]): - # s += x2 - x1 + 1 - - #for x1, x2 in zip(xs[::2], xs[1::2]): - # s += x2 - x1 + 1 - -# y = x = 0 -# q = deque([(y-1, x)]) -# while q: -# y, x = q.popleft() -# visited.add((y, x)) -# for dy, dx in dirs.values(): -# ya, xa = y+dy, x+dx -# if (ya, xa) not in visited: -# visited.add((ya, xa)) -# q.append((ya, xa)) -# -# print(len(visited)) - -print(s) +split = [line.split() for line in lines] +print(solve([(d, int(num)) for d, num, _ in split])) +print(solve([("RDLU"[int(c[-2])], int(c[2:-2], 16)) for *_, c in split])) diff --git a/2023/18/18scanline.py b/2023/18/18scanline.py new file mode 100644 index 0000000..49f1d96 --- /dev/null +++ b/2023/18/18scanline.py @@ -0,0 +1,43 @@ +from sys import stdin +from collections import defaultdict + +lines = stdin.read().splitlines() +dirs = {"R": (0, 1), "D": (1, 0), "L": (0, -1), "U": (-1, 0)} + +def solve(instructions): + y = x = s = 0 + y_vis = defaultdict(list) + x_vis = defaultdict(list) + for d, num in instructions: + if d in "RL": + x_prev = x + x += num * dirs[d][1] + s += abs(x_prev - x) - 1 + x_vis[y].append(sorted([x_prev, x])) + else: + ynext = y + num * dirs[d][0] + for ya in range(min(ynext, y), max(ynext, y)+1): + y_vis[ya].append((x, d)) + y = ynext + + for y, xs in y_vis.items(): + xs.sort() + curr, d = xs[0] + indices = [0] + for i, ((_, d1), (_, d2)) in enumerate(zip(xs, xs[1:])): + if d1 != d2 and d2 == xs[0][1]: + indices.append(i+1) + indices.append(len(xs)) + for i1, i2 in zip(indices, indices[1:]): + x1, d1 = xs[i1] + x2, d2 = xs[i2-1] + for a1, a2 in x_vis[y]: + if x1 <= a1 < a2 <= x2: + s -= a2 - a1 - 1 # Remove x line which were counted twice + s += x2 - x1 + 1 + return s + + +split = [line.split() for line in lines] +print(solve([(d, int(num)) for d, num, _ in split])) +print(solve([("RDLU"[int(c[-2])], int(c[2:-2], 16)) for *_, c in split])) diff --git a/README.md b/README.md index f667242..d178303 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- 2023 - 34 ⭐ + 2023 - 36 ⭐

@@ -57,6 +57,9 @@ + + +

2022 - 50 ⭐

From 61f33267778f3d73e05f5b29eb692753c922a82e Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Mon, 18 Dec 2023 15:38:39 +0100 Subject: [PATCH 087/225] Add day 18 --- 2023/18/18.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/2023/18/18.py b/2023/18/18.py index c7d57c9..027cd50 100644 --- a/2023/18/18.py +++ b/2023/18/18.py @@ -1,7 +1,6 @@ from sys import stdin -lines = stdin.read().splitlines() -dirs = {"R": (0, 1), "D": (1, 0), "L": (0, -1), "U": (-1, 0)} +dirs = [(0, 1), (1, 0), (0, -1), (-1, 0)] def solve(instructions, s=0): ys, xs = [0], [0] @@ -10,11 +9,10 @@ def solve(instructions, s=0): ys.append(ys[-1] + num * dirs[d][0]) xs.append(xs[-1] + num * dirs[d][1]) - # Polygon area: Shoelace algorithm - for i in range(len(ys)-1, -1, -1): + for i in range(len(ys)): # Shoelace formula s += ys[i] * xs[i-1] - xs[i] * ys[i-1] - return s // 2 + 1 + print(s // 2 + 1) -split = [line.split() for line in lines] -print(solve([(d, int(num)) for d, num, _ in split])) -print(solve([("RDLU"[int(c[-2])], int(c[2:-2], 16)) for *_, c in split])) +split = [line.split() for line in stdin] +solve([("RDLU".index(d), int(num)) for d, num, _ in split]) +solve([(int(c[-2]), int(c[2:-2], 16)) for *_, c in split]) From b555b2f2f0cdbdb145750bb293d1d18ef20feb68 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Mon, 18 Dec 2023 17:54:36 +0100 Subject: [PATCH 088/225] Add day 12 --- 2023/12/12.py | 46 ++++++++++++++++------------------------------ 1 file changed, 16 insertions(+), 30 deletions(-) diff --git a/2023/12/12.py b/2023/12/12.py index 7f04f0a..7207734 100644 --- a/2023/12/12.py +++ b/2023/12/12.py @@ -1,43 +1,29 @@ from sys import stdin -import re -from collections import defaultdict, Counter, deque -from itertools import permutations, combinations +from functools import cache -lines = stdin.read().strip().split('\n') - -def decide(line, curr, needed, cache): - tup = line, curr, needed - if tup in cache: - return cache[tup] +@cache +def decide(line, curr, needed, s=0): if not line: return (needed or (0,)) == (curr,) - s = 0 - if line[0] == '?': - s += decide('.' + line[1:], curr, needed, cache) - s += decide('#' + line[1:], curr, needed, cache) - - if line[0] == '#' and needed and curr < needed[0]: - s += decide(line[1:], curr+1, needed, cache) - - if line[0] == '.': - if needed and curr == needed[0]: - s += decide(line[1:], 0, needed[1:], cache) - if not needed or curr == 0: - s += decide(line[1:], 0, needed, cache) - - cache[tup] = s + match line[0]: + case '?': + s += decide('.' + line[1:], curr, needed) + s += decide('#' + line[1:], curr, needed) + case '#' if needed and curr < needed[0]: + s += decide(line[1:], curr+1, needed) + case '.' if not needed or curr == 0: + s += decide(line[1:], 0, needed) + case '.' if curr == needed[0]: + s += decide(line[1:], 0, needed[1:]) return s - s1 = s2 = 0 -for line in lines: +for line in stdin: chars, needed = line.split() needed = tuple(int(n) for n in needed.split(",")) - s1 += decide(chars, 0, needed, {}) - - p2 = '?'.join([chars] * 5) - s2 += decide(p2, 0, needed * 5, {}) + s1 += decide(chars, 0, needed) + s2 += decide('?'.join([chars] * 5), 0, needed * 5) print(s1, s2, sep='\n') From e420a4cee739a6d6b8794e4aa7435ef097f0655d Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Mon, 18 Dec 2023 18:39:45 +0100 Subject: [PATCH 089/225] Add day 18 --- 2023/18/18.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/2023/18/18.py b/2023/18/18.py index 027cd50..c4ebaa5 100644 --- a/2023/18/18.py +++ b/2023/18/18.py @@ -1,5 +1,3 @@ -from sys import stdin - dirs = [(0, 1), (1, 0), (0, -1), (-1, 0)] def solve(instructions, s=0): @@ -13,6 +11,6 @@ def solve(instructions, s=0): s += ys[i] * xs[i-1] - xs[i] * ys[i-1] print(s // 2 + 1) -split = [line.split() for line in stdin] +split = [line.split() for line in open(0)] solve([("RDLU".index(d), int(num)) for d, num, _ in split]) solve([(int(c[-2]), int(c[2:-2], 16)) for *_, c in split]) From 7242b8bbcc6d63dd81d36ceaa5a0fac5e2cc5826 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Mon, 18 Dec 2023 19:01:50 +0100 Subject: [PATCH 090/225] Add day 18 --- 2023/18/18.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/2023/18/18.py b/2023/18/18.py index c4ebaa5..68c9047 100644 --- a/2023/18/18.py +++ b/2023/18/18.py @@ -1,16 +1,13 @@ dirs = [(0, 1), (1, 0), (0, -1), (-1, 0)] -def solve(instructions, s=0): - ys, xs = [0], [0] +def solve(instructions, s=0, y=0, x=0): for d, num in instructions: - s += num - ys.append(ys[-1] + num * dirs[d][0]) - xs.append(xs[-1] + num * dirs[d][1]) - - for i in range(len(ys)): # Shoelace formula - s += ys[i] * xs[i-1] - xs[i] * ys[i-1] + y2 = y + num * dirs[d][0] + x2 = x + num * dirs[d][1] + s += num + (y2*x - x2*y) # Border + Shoelace formula + y, x = y2, x2 print(s // 2 + 1) split = [line.split() for line in open(0)] -solve([("RDLU".index(d), int(num)) for d, num, _ in split]) -solve([(int(c[-2]), int(c[2:-2], 16)) for *_, c in split]) +solve(("RDLU".index(d), int(num)) for d, num, _ in split) +solve((int(c[7]), int(c[2:7], 16)) for *_, c in split) From 43456b015e1bed5f1b3a60d8f0306d843e877f6b Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Tue, 19 Dec 2023 20:52:10 +0100 Subject: [PATCH 091/225] Add day 19 --- .aoc_tiles/tiles/2023/19.png | Bin 0 -> 8929 bytes 2023/19/19.py | 45 +++++++++++++++++++++++++++++++++++ README.md | 5 +++- 3 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 .aoc_tiles/tiles/2023/19.png create mode 100644 2023/19/19.py diff --git a/.aoc_tiles/tiles/2023/19.png b/.aoc_tiles/tiles/2023/19.png new file mode 100644 index 0000000000000000000000000000000000000000..e860181d0b0fae9213cb6e5b5af184fdb4c28c03 GIT binary patch literal 8929 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

-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 Y)`Q0{wO_}geq90HDrzd!%UgW>e^CXPQ2+n{ literal 0 HcmV?d00001 diff --git a/2023/19/19.py b/2023/19/19.py new file mode 100644 index 0000000..477a135 --- /dev/null +++ b/2023/19/19.py @@ -0,0 +1,45 @@ +import re +import math +instructions, queries = open(0).read().split('\n\n') + +rules = {} + +def is_accepted(x, m, a, s, rule): + if len(rule) == 1: + if rule[0][0] in rules: + return is_accepted(x, m, a, s, rules[rule[0][0]]) + return rule[0][0] == 'A' + condition, trueval = rule[0] + if eval(condition): + return is_accepted(x, m, a, s, [[trueval]]) + return is_accepted(x, m, a, s, rule[1:]) + +def range_combinations(ranges, rule): + if len(rule) == 1: + if (curr := rule[0][0]) in rules: + return range_combinations(ranges, rules[curr]) + return math.prod(map(len, ranges.values())) * (curr == 'A') + (var, op, *digits), trueval = rule[0] + num = int(''.join(digits)) + (op == '>') + lower = range(ranges[var].start, num) + upper = range(num, ranges[var].stop) + + rtrue = ranges | {var: lower if op == '<' else upper} + rfalse = ranges | {var: upper if op == '<' else lower} + return range_combinations(rtrue, [[trueval]]) \ + + range_combinations(rfalse, rule[1:]) + + +for inst in instructions.splitlines(): + name, conditions = inst.strip("}").split("{") + rules[name] = [rule.split(":") for rule in conditions.split(',')] + +s = 0 +for query in queries.splitlines(): + xmas = [int(a) for a in re.findall("(\d+)", query)] + if is_accepted(*xmas, rules["in"]): + s += sum(xmas) + +print(s) +ranges = {key: range(1, 4001) for key in "xmas"} +print(range_combinations(ranges, rules['in'])) diff --git a/README.md b/README.md index d178303..2468aad 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- 2023 - 36 ⭐ + 2023 - 38 ⭐

@@ -60,6 +60,9 @@ + + +

2022 - 50 ⭐

From 66636b89a62af0eb4d9a5000ab1ff7dc7c53d6dd Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Wed, 20 Dec 2023 16:11:53 +0100 Subject: [PATCH 092/225] Add day 20 --- .aoc_tiles/tiles/2023/20.png | Bin 0 -> 9324 bytes 2023/20/20.py | 61 +++++++++++++++++++++++++++++++++++ README.md | 5 ++- 3 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 .aoc_tiles/tiles/2023/20.png create mode 100644 2023/20/20.py diff --git a/.aoc_tiles/tiles/2023/20.png b/.aoc_tiles/tiles/2023/20.png new file mode 100644 index 0000000000000000000000000000000000000000..ea6cff4851bfb101fc9fae8405eb4ac86e5d040a GIT binary patch literal 9324 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 ") + pure_name = name.strip("&%") + modules[pure_name] = destinations.split(', ') + if name[0] == '%': + flipflops[pure_name] = False + elif name[0] == '&': + conjunctions[pure_name] = {} + +for name, destinations in modules.items(): + for dest in destinations: + if dest in conjunctions: + conjunctions[dest][name] = False + if dest == 'rx': + rx_parent = name + +q = deque() +counts = [0, 0] +rx_repeats = [False] * len(conjunctions[rx_parent]) + +def push(name, i, send=False): + if name in flipflops: + send = flipflops[name] + elif name in conjunctions: + send = not all(conjunctions[name].values()) + + if name == rx_parent: + for j, is_good in enumerate(conjunctions[rx_parent].values()): + if is_good: + rx_repeats[j] = i + + for dest in modules.get(name, []): + counts[send] += 1 + if dest in flipflops: + if not send: + flipflops[dest] = not flipflops[dest] + q.append(dest) + elif dest in conjunctions: + conjunctions[dest][name] = send + q.append(dest) + +for i in range(1, 100000): + q.append("broadcaster") + counts[0] += 1 + while q: + push(q.popleft(), i) + + if i == 1000: + print(counts[0] * counts[1]) + + if all(rx_repeats): + print(math.prod(rx_repeats)) + break diff --git a/README.md b/README.md index 2468aad..a20402c 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- 2023 - 38 ⭐ + 2023 - 40 ⭐

@@ -63,6 +63,9 @@ + + +

2022 - 50 ⭐

From f1dadfdb9042819d5628994f4d05d0fcf5d7d316 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Thu, 21 Dec 2023 14:45:54 +0100 Subject: [PATCH 093/225] Add day 21 --- .aoc_tiles/tiles/2023/21.png | Bin 0 -> 6719 bytes 2023/21/21.py | 85 +++++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 .aoc_tiles/tiles/2023/21.png create mode 100644 2023/21/21.py diff --git a/.aoc_tiles/tiles/2023/21.png b/.aoc_tiles/tiles/2023/21.png new file mode 100644 index 0000000000000000000000000000000000000000..3cb957c2966b6b00496ce9ec25a34d665c0e67c2 GIT binary patch literal 6719 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 y%Y) else -Y) + xadd = 0 if (x == x%X) else (X if (x > x%X) else -X) + _, veryouter_do = dists[(y+yadd, x+xadd)] + repeat = veryouter_do - do + # repeat = do + v = str((di, repeat)) + v = v.replace("(", "").replace(",", "").replace(")", "").replace(" ", "-") + print(end=f"{v:8}") + print() + + +target = 26501365 +target = 1000 +for y in range(-Y, Y*2): + for x in range(-X, X*2): + if (y, x) in dists: + # print(lines[y%Y][x%X]) + in_inner = 0 <= y < Y and 0 <= x < X + di, do = dists[(y, x)] + inner_di, _ = dists[(y%Y, x%X)] + if in_inner: + if di % 2 == 1: + s += 1 + else: + new = (target - di) + if new % 2 == 1: + repeat = (di - inner_di) + do + s += new // repeat + +print(s) From f82dcc42ceea1fb7ce4b76d2d363a3061391eaa9 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 24 Dec 2023 21:32:31 +0200 Subject: [PATCH 094/225] Add day 24 --- .aoc_tiles/tiles/2023/22.png | Bin 0 -> 3297 bytes .aoc_tiles/tiles/2023/23.png | Bin 0 -> 4270 bytes .aoc_tiles/tiles/2023/24.png | Bin 0 -> 8809 bytes 2023/21/21.py | 196 +++++++++++++++--- 2023/24/24.py | 374 +++++++++++++++++++++++++++++++++++ README.md | 5 +- 6 files changed, 545 insertions(+), 30 deletions(-) create mode 100644 .aoc_tiles/tiles/2023/22.png create mode 100644 .aoc_tiles/tiles/2023/23.png create mode 100644 .aoc_tiles/tiles/2023/24.png create mode 100644 2023/24/24.py diff --git a/.aoc_tiles/tiles/2023/22.png b/.aoc_tiles/tiles/2023/22.png new file mode 100644 index 0000000000000000000000000000000000000000..403ac2a5676a9432e808b0e18d60206cdc2e0955 GIT binary patch literal 3297 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 HOw4}($#sUv literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2023/23.png b/.aoc_tiles/tiles/2023/23.png new file mode 100644 index 0000000000000000000000000000000000000000..5f3a4b72dc82e8c0a8e40c1eedadbf2fd754d346 GIT binary patch literal 4270 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 NF}!P{OV+V}@jraXaWVh^ literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2023/24.png b/.aoc_tiles/tiles/2023/24.png new file mode 100644 index 0000000000000000000000000000000000000000..9e76897ba6aae8eaa08a7bf0fc5f6c3edfd5f4f0 GIT binary patch literal 8809 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 TK}@uQ1b`Q+Ix5vluipG0<5xXG literal 0 HcmV?d00001 diff --git a/2023/21/21.py b/2023/21/21.py index dfb9c7b..cb40167 100644 --- a/2023/21/21.py +++ b/2023/21/21.py @@ -5,7 +5,10 @@ lines = open(0).read().splitlines() Y, X = len(lines), len(lines[0]) +S = Y +assert Y == X dirs = [(0, 1), (1, 0), (0, -1), (-1, 0)] +dirs_diag = [(1, 1), (1, -1), (-1, 1), (-1, -1)] q = deque() @@ -13,7 +16,7 @@ for y, line in enumerate(lines): if 'S' in line: q.append((y, line.index('S'))) - dists[(y, line.index('S'))] = (0, 0) + dists[(y, line.index('S'))] = 0 s = 0 # for i in range(64): @@ -22,7 +25,6 @@ nextq = deque() while q: y, x = q.popleft() - dist_inner, dist_outer = dists[(y, x)] for dy, dx in dirs: ya, xa = y + dy, x + dx in_inner = 0 <= ya < Y and 0 <= xa < X @@ -34,7 +36,8 @@ # ok = dist_outer+(not in_inner) < do # if ok: if (ya, xa) not in visited: - dists[(ya, xa)] = (dist_inner + in_inner, dist_outer + (not in_inner)) + # dists[(ya, xa)] = (dist_inner + in_inner, dist_outer + (not in_inner)) + dists[(ya, xa)] = dists[(y, x)]+1 if in_inner: q.append((ya, xa)) else: @@ -45,41 +48,176 @@ # q = nextq -print(dists) -print(len(dists)) +# print(dists) +# print(len(dists)) -for y in range(-Y, Y*2): - for x in range(-X, X*2): +for y in range(-Y*2, Y*3): + if y % Y == 0: + print('-' * (15*S)) + # for x in range(-X*2, X*3): + for x in range(0, X): v = '#' if (y, x) in dists: - di, do = dists[(y, x)] - yadd = 0 if (y == y%Y) else (Y if (y > y%Y) else -Y) - xadd = 0 if (x == x%X) else (X if (x > x%X) else -X) - _, veryouter_do = dists[(y+yadd, x+xadd)] - repeat = veryouter_do - do + dist = dists[(y, x)] + # yadd = 0 if (y == y%Y) else (Y if (y > y%Y) else -Y) + # xadd = 0 if (x == x%X) else (X if (x > x%X) else -X) + # veryouter_dist = dists[(y+yadd, x+xadd)] + # repeat = veryouter_dist - dist # repeat = do - v = str((di, repeat)) + # v = str('Y' if dist % 2== 1 else ' ') + v = str(dist) v = v.replace("(", "").replace(",", "").replace(")", "").replace(" ", "-") - print(end=f"{v:8}") + print(end=f"{v:3}" + ('| ' if x in (-X-1, -1, X-1, 2*X-1) else '')) print() +# for direction in dirs: +# for y in range(-Y, Y*2): +# for x in range(-X, X*2): +# if (y, x) in dists: +# in_inner = 0 <= y < Y and 0 <= x < X +# dist = dists[(y, x)] +# # inner_di, _ = dists[(y%Y, x%X)] +# if in_inner: +# if dist % 2 == mod and dist <= target: +# s += 1 +# else: +# new = max(-1, (target - dist)) +# if new >= 0: +# print(y, x, new, target, dist) +# if new % 2 == mod: +# if not (0 <= y < Y or 0 <= x < X): +# div = S*2 +# s += new // (S*2) + 1 +# else: +# div = S +# s += new // S + 1 +# if not (0 <= y < Y or 0 <= x < X): +# for side in [-1, 1]: +# for i, rem in enumerate(range(target - S * 1, -S*2, -S*2)): +# new = max(-1, (rem - dist)) +# if new >= 0: +# if new % 2 == mod: +# # print(f"add {new=} {S=} {dist=} {new // S=}") +# s += (new) // S // 2 + 1 +# if new % 2 == (not mod): +# # print(f"add {new=} {S=} {dist=} {new // S=}") +# s += (new) // S // 2 + +# In exactly 6 steps, he can still reach 16 garden plots. +# In exactly 10 steps, he can reach any of 50 garden plots. +# In exactly 50 steps, he can reach 1594 garden plots. +# In exactly 100 steps, he can reach 6536 garden plots. +# In exactly 500 steps, he can reach 167004 garden plots. +# In exactly 1000 steps, he can reach 668697 garden plots. +# In exactly 5000 steps, he can reach 16733044 garden plots. + target = 26501365 -target = 1000 -for y in range(-Y, Y*2): - for x in range(-X, X*2): +# target = 100 +mod = target % 2 + +curr_sum = 0 +next_sum = 0 +for y in range(0, Y): + for x in range(0, X): + if (y, x) in dists: + curr_sum += dists[(y, x)] % 2 == mod + next_sum += dists[(y, x)] % 2 == (not mod) + +print(curr_sum, next_sum) +# s = next_sum * sum(range(1, target // S, 2)) * 4 + curr_sum * ((sum(range(0, target // S, 2))) * 4 + 1) +# s = curr_sum * sum(range(1, target // S, 2)) * 4 + next_sum * ((sum(range(0, target // S, 2))) * 4 + 1) + +s += next_sum * 4 +s += curr_sum * 4 +s += next_sum * 8 + +# Visited is a HashMap which maps tiles in the input-square to their distance from the starting tile +# So read this as "even_corners is the number of tiles which have a distance that is even and greater than 65" +let even_corners = visited.values().filter(|v| **v % 2 == 0 && **v > 65).count(); +let odd_corners = visited.values().filter(|v| **v % 2 == 1 && **v > 65).count(); + +let even_full = visited.values().filter(|v| **v % 2 == 0).count(); +let odd_full = visited.values().filter(|v| **v % 2 == 1).count(); + +// This is 202300 but im writing it out here to show the process +let n = ((26501365 - (env.dim.0 / 2)) / env.dim.0) as usize; +assert_eq!(n, 202300); + +let p2 = ((n+1)*(n*1)) * odd_full + (n*n) * even_full - (n+1) * odd_corners + n * even_corners; + + +for x1, x2, y1, y2 in [(0, X, -Y*2, -Y), (0, X, Y*2, Y*3), (-X*2, -X, 0, Y), (X*2, X*3, 0, Y)]: + for y in range(y1, y2): + for x in range(x1, x2): + if (y, x) in dists: + d = dists[(y, x)] + for times in range(target // S+10): + num = d + S * times + if num <= target: + s += num % 2 == mod + +for xlims, ylims in [((-X*2, -X), (-Y*2, -Y)), ((X*2, X*3), (-Y*2, -Y)), ((X*2, X*3), (Y*2, Y*3)), ((-X*2, -X), (Y*2, Y*3))]: + for y in range(*ylims): + for x in range(*xlims): + if (y, x) in dists: + d = dists[(y, x)] + for times in range(target // S+10): + num = d + S * times + if num <= target: + s += (num % 2 == mod) * (times+3) + + # num = (dists[(y, x)] - S * 2) + (target // S) * S + # if num <= target: + # s += (num % 2 == (not mod)) * (target // S - 2) + + # num = (dists[(y, x)] - S * 3) + (target // S) * S + # if num <= target: + # s += (num % 2 == mod) * (target // S - 3) + + # num = (dists[(y, x)]) + (target // S) * S + # if num <= target: + # s += (num % 2 == (not mod)) * (target // S) + print() + +print(s+curr_sum) +exit() + +for y in range(0, Y): + for x in range(0, X): if (y, x) in dists: - # print(lines[y%Y][x%X]) - in_inner = 0 <= y < Y and 0 <= x < X - di, do = dists[(y, x)] - inner_di, _ = dists[(y%Y, x%X)] - if in_inner: - if di % 2 == 1: - s += 1 - else: - new = (target - di) - if new % 2 == 1: - repeat = (di - inner_di) + do - s += new // repeat + dist = dists[(y, x)] + if dist % 2 == mod and dist <= target: + s += 1 + for dy, dx in dirs + dirs_diag: + dist = dists[(y+Y*2*dy, x+X*2*dx)] - S + new = max(-1, (target - dist)) + if new >= 0: + # print(y, x, new, target, dist) + if new % 2 == mod: + div = S if dy == 0 or dx == 0 else S * 2 + s += new // div + 1 + for dy, dx in dirs: + dist = dists[(y+Y*2*dy, x+X*2*dx)] - S + # print(dist) + for side in [-1, 1]: + for i, rem in enumerate(range(target, -S*2, -S*2)): + new = max(-1, (rem - dist)) + if new >= 0: + if new % 2 == mod: + s += (new) // S + 1 + +# +# #---# +# |###| +# |###| +# |###| +# #---# print(s) + + +# Too low: +# 618261433216623 +# 618249208752749 wrong +# 618261433216623 same diff --git a/2023/24/24.py b/2023/24/24.py new file mode 100644 index 0000000..2ac984e --- /dev/null +++ b/2023/24/24.py @@ -0,0 +1,374 @@ +import numpy as np +import re +from collections import defaultdict, Counter, deque +from itertools import permutations, combinations, product, combinations_with_replacement +from queue import PriorityQueue + +lines = open(0).read().splitlines() +Y, X = len(lines), len(lines[0]) +dirs = [(0, 1), (1, 0), (0, -1), (-1, 0)] + +def find_intersection(m1, c1, m2, c2): + if m1 == m2: + return -1, -1 + + x_intersect = (c2 - c1) / (m1 - m2) + y_intersect = m1 * x_intersect + c1 + + return x_intersect, y_intersect +from z3 import * + +sx = Real('x') +sy = Real('y') +sz = Real('z') +sdx = Real('dx') +sdy = Real('dy') +sdz = Real('dz') +s = Solver() + +coords = [] +for i, line in enumerate(lines[:3]): + x, y, z, dx, dy, dz = map(int, line.replace("@", ",").split(",")) + # coords.append((px, py, pz, vx, vy, vz)) + + t = Real(f't{i}') + s.add(sx + sdx * t == x + dx * t, t>=0) + s.add(sy + sdy * t == y + dy * t, t>=0) + s.add(sz + sdz * t == z + dz * t, t>=0) +print(s) +print(s.check()) +ans = s.model() +print(ans) +print(ans["x"]) +# print(s.x) +exit() + +# Please replace the example points and direction vectors with the actual data of your specific problem + +from typing import List, Tuple +def find_intersecting_lines(): + lines = coords + intersections = [] + n = len(lines) + print(n) + + # Helper function to solve a linear system + def solve_linear_system(a, b, c, d, e, f, g, h, i, j, k, l): + determinant = a * (e * i - f * h) - b * (d * i - f * g) + c * (d * h - e * g) + if determinant == 0: + return None, None # Lines are parallel or coincident + t = (j * (e * i - f * h) - k * (d * i - f * g) + l * (d * h - e * g)) / determinant + s = (-b * (j * i - l * f) + c * (j * h - l * e) - (a * (k * i - l * f) - c * (k * h - j * g)) + b * (k * h - j * g)) / determinant + return t, s + + for lini in range(n): + for linj in range(lini+1, n): + # print(i, j) + line1 = lines[lini] + line2 = lines[linj] + + # Unpack line equations + p1, d1 = line1[:3], line1[3:] + p2, d2 = line2[:3], line2[3:] + + # Set up the linear equations + a, b, c = d1 + d, e, f = -1 * d2[0], -1 * d2[1], -1 * d2[2] + g, h, i = p2[0] - p1[0], p2[1] - p1[1], p2[2] - p1[2] + + # Solve for the parameters t and s + t, s = solve_linear_system(a, b, c, d, e, f, g, h, i, a, b, c) + + if t is not None and s is not None: + # We have an intersection + intersection_point = (p1[0] + t * d1[0], p1[1] + t * d1[1], p1[2] + t * d1[2]) + intersections.append(intersection_point) + + return intersections + +def dot_product(v1, v2): + return sum(v1_i * v2_i for v1_i, v2_i in zip(v1, v2)) + +def cross_product(v1, v2): + return (v1[1] * v2[2] - v1[2] * v2[1], + v1[2] * v2[0] - v1[0] * v2[2], + v1[0] * v2[1] - v1[1] * v2[0]) + +def closest_point_on_second_line(P1, d1, P2, d2): + # P1 = np.array(P1, dtype=np.int64) + # d1 = np.array(P1, dtype=np.int64) + # P2 = np.array(P2, dtype=np.int64) + # d2 = np.array(d2, dtype=np.int64) + + # Calculate the w vector + w0 = np.subtract(P2, P1) + + # Create the coefficient matrix for the system of equations + a = dot_product(d1, d1) + b = -dot_product(d1, d2) + c = dot_product(d2, d2) + d = int(dot_product(d1, w0)) + e = int(-dot_product(d2, w0)) + + # Check for case where the lines are parallel (cross product is zero) + if cross_product(d1, d2) == (0, 0, 0): + print("The lines are parallel or coincident, no unique closest point exists.") + return None + + # Solving the linear system via matrix computation + denom = a * c - b * b + if denom == 0: + print("Lines are parallel or coincident, cannot find a unique closest point.") + return None + + t1 = (b * e - c * d) / denom + t2 = (b * d - a * e) / denom + + closest_point_on_line_1 = np.add(P1, np.multiply(t1, d1)) + closest_point_on_line_2 = np.add(P2, np.multiply(t2, d2)) + + # Calculate the distance between the closest points + distance = np.linalg.norm(closest_point_on_line_1 - closest_point_on_line_2) + print(closest_point_on_line_1) + print(closest_point_on_line_2) + print("dist", distance) + print() + + return closest_point_on_line_2 + +def find_closest_point(XA0, XAd, XB0, XBd): + from numpy import array, cross + from numpy.linalg import solve, norm + + XA0 = np.array(XA0) + XA1 = XA0 + XAd + XB0 = np.array(XB0) + XB1 = XB0 + XBd + # compute unit vectors of directions of lines A and B + UA = (XA1 - XA0) / norm(XA1 - XA0) + UB = (XB1 - XB0) / norm(XB1 - XB0) + # find unit direction vector for line C, which is perpendicular to lines A and B + UC = cross(UB, UA); UC /= norm(UC) + + # solve the system derived in user2255770's answer from StackExchange: https://math.stackexchange.com/q/1993990 + RHS = XB0 - XA0 + LHS = array([UA, -UB, UC]).T + return solve(LHS, RHS) +# prints "[ 0. -0. 1.]" + +# closest_point = closest_point_on_second_line(P1, d1, P2, d2) +# print("The closest point on the second line to the first line is:", closest_point) +# exit() + +import matplotlib.pyplot as plt +from mpl_toolkits.mplot3d import Axes3D +import math + +sdx = -33 +sdy = -25 +sdz = 32 + +# Define the figure and 3D axis +fig = plt.figure(figsize=(8, 6)) +ax = fig.add_subplot(111, projection='3d') + +# Loop through each line and plot it +for x,y,z,dx,dy,dz in sorted(coords): + # ax.quiver(x, y, z, dx, dy, dz, length=100000000000 * math.sqrt(dx**2+dy**2+dz**2), normalize=True) + color = f"#{min(255,abs(dx)):02x}{min(255,abs(dy)):02x}{min(255,abs(dz)):02x}" + if color in ["#9e1324", "#824b3c", "#a93b2f", "#5d2573"] or True: + # ax.quiver(x, y, z, dx, dy, dz, length=205000000000000, normalize=True, color=color, linewidth=0.5) + ax.quiver(x/sdx, y/sdy, z/sdz, dx/sdx, dy/sdy, dz/sdz, length=20500000000000, normalize=True, color=color, linewidth=0.5) + +# azimuth:-26, elevation: 29 + +# sx = 373474908948239 +# sy = 361357857930075 +# sz = 185364402503613 + +# sx = 373905585564057 +# sy = 361528383921964 +# sz = 185128885023709 + +# sx2 = 373584835366359 +# sy2 = 361409039061671 +# sz2 = 185289314254093 + +# sx = 257400146806249 +# sy = 272828776985511 +# sz = 298676339005784 + +sx = 242925990361460 +sy = 262097223462152 +sz = 311766970071262 + +sx2 = 312182148063510 +sy2 = 312874854707645 +sz2 = 244607326974783 + +sdx = -(sx2 - sx) +sdy = -(sy2 - sy) +sdz = -(sz2 - sz) +print(sdx, sdy, sdz) +diff = abs(abs(sdz) - abs(sdx)) +print(sdx / diff, sdy / diff, sdz / diff) + +Ps = (sx, sy, sz) +Pd = (sdx, sdy, sdz) +# closest_point = closest_point_on_second_line(Ps, Pd, P2, d2) + +def calculate_distance(r1, e1, r2, e2): + # e1, e2 = Direction vector + # r1, r2 = Point where the line passes through + r1 = np.array(r1) + r2 = np.array(r2) + e1 = np.array(e1) + e2 = np.array(e2) + + # Find the unit vector perpendicular to both lines + n = np.cross(e1, e2).astype(np.float64) + + # Calculate distance + d = abs(np.dot(n / np.linalg.norm(n), r1 - r2)) + + # v = r1 - r2 + # t1 = np.dot(np.cross(v, e2), n) / np.dot(e1, np.cross(e2, n)) + # t2 = np.dot(np.cross(v, e1), n) / np.dot(e2, np.cross(e1, n)) + t1 = np.dot(np.cross(e2, n), (r2 - r1)) / np.dot(n, n) + t2 = np.dot(np.cross(e1, n), (r2 - r1)) / np.dot(n, n) + # t1 = np.cross(e2, n) * (r2 - r1) / (n* n) + # t2 = np.cross(e1, n) * (r2 - r1) / (n* n) + # print(t1, t2) + p1 = r1 + t1 * e1 + p2 = r2 + t2 * e2 + # print(p1, p2) + # print(d, np.linalg.norm(p1 - p2)) + # assert math.isclose(d, np.linalg.norm(p1 - p2)) + + return d, p1, p2 + +# def search_distance(p1, d1, p2, d2): +# P1 = np.array(p1) +# P2 = np.array(p2) +# d1 = np.array(d1) +# d2 = np.array(d2) + +# start = 0 +# end = 1e18 +# for i in range(80) + + + +# for x,y,z,dx,dy,dz in sorted(coords)[:1]: +# xyz = (x,y,z) +# dxyz = (dx,dy,dz) +# dist, c1, c2 = calculate_distance(Ps, Pd, xyz, dxyz) +# l = np.linalg.norm(dxyz) +# rang = np.arange(-dist/l, dist/l) * dxyz + c2 + +# for cx,cy,cz in rang: +# for x,y,z,dx,dy,dz in sorted(coords)[2:4]: +# xyz = (x,y,z) +# dxyz = (dx,dy,dz) +# print(calculate_distance((cx,cy,cz), Pd, xyz, dxyz)[0]) + +dists = [] +for x,y,z,dx,dy,dz in sorted(coords)[:1]: + xyz = (x,y,z) + dxyz = (dx,dy,dz) + # closest_point = closest_point_on_second_line(Ps, Pd, xyz, dxyz) + # closest_point = find_closest_point(Ps, Pd, xyz, dxyz) + # print(closest_point) + # closest_point2 = find_closest_point(xyz, dxyz, Ps, Pd) + # print(closest_point2) + # dist = np.linalg.norm(closest_point - closest_point2) + dist, c1, c2 = calculate_distance(Ps, Pd, xyz, dxyz) + # if len(dists) == 0: + # ax.quiver(*c1, *(c2-c1), linewidth=5, color="black") + Ps = Ps + (c2 - c1) + print((c1 - c2)) + # exit() + print(dist) + dist, c1, c2 = calculate_distance(Ps, Pd, xyz, dxyz) + dists.append(dist) + print(dist) + # ax.quiver(*closest_point, *closest_point2, linewidth=3, color="black") + # print(calculate_distance(Ps, Pd, xyz, dxyz)) + print() + +print(sorted(dists)) + +m = 4e12 +r = 0 +for ddy in range(-r, r+1): + for ddx in range(-r, r+1): + for ddz in range(-r, r+1): + # ax.quiver(sx-sdx*m, sy-sdy*m, sz-sdz*m, sdx+ddx, sdy+ddy, sdz+ddz, length=400000000000000, normalize=True, color="red", linewidth=1) + ax.quiver(sx, sy, sz, 1, 1, 1, length=40000000000000, normalize=True, color="red", linewidth=1) + +# Set labels +ax.set_xlabel('X axis') +ax.set_ylabel('Y axis') +ax.set_zlabel('Z axis') + +# def on_mouse_move(event): +# print('Event received:',event.xdata,event.ydata) + +# plt.connect('motion_notify_event',on_mouse_move) + +# Show the plot +plt.show() +exit() + + +# intersections = find_intersection(lines) + +# print(intersections) + +print(coords) + +# print(intersecting_lines()) +for line in find_intersecting_lines(): + print(line) + +# for xyz1, xyz2 in combinations(coords, r=2): +s2 = 0 +import math +for i in range(len(coords)): + for j in range(i+1, len(coords)): + xyz1 = coords[i] + xyz2 = coords[j] + print(xyz1) + px1, py1, pz1, vx1, vy1, vz1 = xyz1 + px2, py2, pz2, vx2, vy2, vz2 = xyz2 + slope1 = vy1 / vx1 + b1 = py1 - slope1 * px1 + slope2 = vy2 / vx2 + b2 = py2 - slope2 * px2 + ix, iy = find_intersection(slope1, b1, slope2, b2) + + # if 200000000000000 <= ix <= 400000000000000: + # if 200000000000000 <= iy <= 400000000000000: + # if (px1 - ix) * vx1 < 0 and (px2 - ix) * vx2 < 0: + # if (py1 - iy) * vy1 < 0 and (py2 - iy) * vy2 < 0: + # s += 1 + # print("inside") + + if (px1 - ix) * vx1 < 0 and (px2 - ix) * vx2 < 0: + if (py1 - iy) * vy1 < 0 and (py2 - iy) * vy2 < 0: + dt = (px1 - ix) / vx1 + if math.isclose(dt * vz1 + pz1, dt * vz2 + pz2): + s += 1 + print("inside") + # print(ix, iy) + # print(ix, iy) + # if 7 <= ix <= 27: + # if 7 <= iy <= 27: + # if (px1 - ix) * vx1 < 0 and (px2 - ix) * vx2 < 0: + # if (py1 - iy) * vy1 < 0 and (py2 - iy) * vy2 < 0: + # print("inside") + # s2 += 1 + +print(s2) + +print(s) diff --git a/README.md b/README.md index a20402c..6037e22 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- 2023 - 40 ⭐ + 2023 - 41 ⭐

@@ -66,6 +66,9 @@ + + +

2022 - 50 ⭐

From 64b2b78795c85ee922141500b52b0f5528b98915 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 24 Dec 2023 22:01:40 +0200 Subject: [PATCH 095/225] Add day 24 --- 2023/24/24.py | 403 +++++--------------------------------------------- README.md | 11 +- 2 files changed, 45 insertions(+), 369 deletions(-) diff --git a/2023/24/24.py b/2023/24/24.py index 2ac984e..bdd93c9 100644 --- a/2023/24/24.py +++ b/2023/24/24.py @@ -1,374 +1,41 @@ -import numpy as np -import re -from collections import defaultdict, Counter, deque -from itertools import permutations, combinations, product, combinations_with_replacement -from queue import PriorityQueue -lines = open(0).read().splitlines() -Y, X = len(lines), len(lines[0]) -dirs = [(0, 1), (1, 0), (0, -1), (-1, 0)] - -def find_intersection(m1, c1, m2, c2): - if m1 == m2: - return -1, -1 +import z3 - x_intersect = (c2 - c1) / (m1 - m2) - y_intersect = m1 * x_intersect + c1 - - return x_intersect, y_intersect -from z3 import * +lines = open(0).read().splitlines() -sx = Real('x') -sy = Real('y') -sz = Real('z') -sdx = Real('dx') -sdy = Real('dy') -sdz = Real('dz') -s = Solver() +sx, sy, sz = z3.Real('x'), z3.Real('y'), z3.Real('z') +sdx, sdy, sdz = z3.Real('dx'), z3.Real('dy'), z3.Real('dz') +solver = z3.Solver() coords = [] -for i, line in enumerate(lines[:3]): +for i, line in enumerate(lines): x, y, z, dx, dy, dz = map(int, line.replace("@", ",").split(",")) - # coords.append((px, py, pz, vx, vy, vz)) - - t = Real(f't{i}') - s.add(sx + sdx * t == x + dx * t, t>=0) - s.add(sy + sdy * t == y + dy * t, t>=0) - s.add(sz + sdz * t == z + dz * t, t>=0) -print(s) -print(s.check()) -ans = s.model() -print(ans) -print(ans["x"]) -# print(s.x) -exit() - -# Please replace the example points and direction vectors with the actual data of your specific problem - -from typing import List, Tuple -def find_intersecting_lines(): - lines = coords - intersections = [] - n = len(lines) - print(n) - - # Helper function to solve a linear system - def solve_linear_system(a, b, c, d, e, f, g, h, i, j, k, l): - determinant = a * (e * i - f * h) - b * (d * i - f * g) + c * (d * h - e * g) - if determinant == 0: - return None, None # Lines are parallel or coincident - t = (j * (e * i - f * h) - k * (d * i - f * g) + l * (d * h - e * g)) / determinant - s = (-b * (j * i - l * f) + c * (j * h - l * e) - (a * (k * i - l * f) - c * (k * h - j * g)) + b * (k * h - j * g)) / determinant - return t, s - - for lini in range(n): - for linj in range(lini+1, n): - # print(i, j) - line1 = lines[lini] - line2 = lines[linj] - - # Unpack line equations - p1, d1 = line1[:3], line1[3:] - p2, d2 = line2[:3], line2[3:] - - # Set up the linear equations - a, b, c = d1 - d, e, f = -1 * d2[0], -1 * d2[1], -1 * d2[2] - g, h, i = p2[0] - p1[0], p2[1] - p1[1], p2[2] - p1[2] - - # Solve for the parameters t and s - t, s = solve_linear_system(a, b, c, d, e, f, g, h, i, a, b, c) - - if t is not None and s is not None: - # We have an intersection - intersection_point = (p1[0] + t * d1[0], p1[1] + t * d1[1], p1[2] + t * d1[2]) - intersections.append(intersection_point) - - return intersections - -def dot_product(v1, v2): - return sum(v1_i * v2_i for v1_i, v2_i in zip(v1, v2)) - -def cross_product(v1, v2): - return (v1[1] * v2[2] - v1[2] * v2[1], - v1[2] * v2[0] - v1[0] * v2[2], - v1[0] * v2[1] - v1[1] * v2[0]) - -def closest_point_on_second_line(P1, d1, P2, d2): - # P1 = np.array(P1, dtype=np.int64) - # d1 = np.array(P1, dtype=np.int64) - # P2 = np.array(P2, dtype=np.int64) - # d2 = np.array(d2, dtype=np.int64) - - # Calculate the w vector - w0 = np.subtract(P2, P1) - - # Create the coefficient matrix for the system of equations - a = dot_product(d1, d1) - b = -dot_product(d1, d2) - c = dot_product(d2, d2) - d = int(dot_product(d1, w0)) - e = int(-dot_product(d2, w0)) - - # Check for case where the lines are parallel (cross product is zero) - if cross_product(d1, d2) == (0, 0, 0): - print("The lines are parallel or coincident, no unique closest point exists.") - return None - - # Solving the linear system via matrix computation - denom = a * c - b * b - if denom == 0: - print("Lines are parallel or coincident, cannot find a unique closest point.") - return None - - t1 = (b * e - c * d) / denom - t2 = (b * d - a * e) / denom - - closest_point_on_line_1 = np.add(P1, np.multiply(t1, d1)) - closest_point_on_line_2 = np.add(P2, np.multiply(t2, d2)) - - # Calculate the distance between the closest points - distance = np.linalg.norm(closest_point_on_line_1 - closest_point_on_line_2) - print(closest_point_on_line_1) - print(closest_point_on_line_2) - print("dist", distance) - print() - - return closest_point_on_line_2 - -def find_closest_point(XA0, XAd, XB0, XBd): - from numpy import array, cross - from numpy.linalg import solve, norm - - XA0 = np.array(XA0) - XA1 = XA0 + XAd - XB0 = np.array(XB0) - XB1 = XB0 + XBd - # compute unit vectors of directions of lines A and B - UA = (XA1 - XA0) / norm(XA1 - XA0) - UB = (XB1 - XB0) / norm(XB1 - XB0) - # find unit direction vector for line C, which is perpendicular to lines A and B - UC = cross(UB, UA); UC /= norm(UC) - - # solve the system derived in user2255770's answer from StackExchange: https://math.stackexchange.com/q/1993990 - RHS = XB0 - XA0 - LHS = array([UA, -UB, UC]).T - return solve(LHS, RHS) -# prints "[ 0. -0. 1.]" - -# closest_point = closest_point_on_second_line(P1, d1, P2, d2) -# print("The closest point on the second line to the first line is:", closest_point) -# exit() - -import matplotlib.pyplot as plt -from mpl_toolkits.mplot3d import Axes3D -import math - -sdx = -33 -sdy = -25 -sdz = 32 - -# Define the figure and 3D axis -fig = plt.figure(figsize=(8, 6)) -ax = fig.add_subplot(111, projection='3d') - -# Loop through each line and plot it -for x,y,z,dx,dy,dz in sorted(coords): - # ax.quiver(x, y, z, dx, dy, dz, length=100000000000 * math.sqrt(dx**2+dy**2+dz**2), normalize=True) - color = f"#{min(255,abs(dx)):02x}{min(255,abs(dy)):02x}{min(255,abs(dz)):02x}" - if color in ["#9e1324", "#824b3c", "#a93b2f", "#5d2573"] or True: - # ax.quiver(x, y, z, dx, dy, dz, length=205000000000000, normalize=True, color=color, linewidth=0.5) - ax.quiver(x/sdx, y/sdy, z/sdz, dx/sdx, dy/sdy, dz/sdz, length=20500000000000, normalize=True, color=color, linewidth=0.5) - -# azimuth:-26, elevation: 29 - -# sx = 373474908948239 -# sy = 361357857930075 -# sz = 185364402503613 - -# sx = 373905585564057 -# sy = 361528383921964 -# sz = 185128885023709 - -# sx2 = 373584835366359 -# sy2 = 361409039061671 -# sz2 = 185289314254093 - -# sx = 257400146806249 -# sy = 272828776985511 -# sz = 298676339005784 - -sx = 242925990361460 -sy = 262097223462152 -sz = 311766970071262 - -sx2 = 312182148063510 -sy2 = 312874854707645 -sz2 = 244607326974783 - -sdx = -(sx2 - sx) -sdy = -(sy2 - sy) -sdz = -(sz2 - sz) -print(sdx, sdy, sdz) -diff = abs(abs(sdz) - abs(sdx)) -print(sdx / diff, sdy / diff, sdz / diff) - -Ps = (sx, sy, sz) -Pd = (sdx, sdy, sdz) -# closest_point = closest_point_on_second_line(Ps, Pd, P2, d2) - -def calculate_distance(r1, e1, r2, e2): - # e1, e2 = Direction vector - # r1, r2 = Point where the line passes through - r1 = np.array(r1) - r2 = np.array(r2) - e1 = np.array(e1) - e2 = np.array(e2) - - # Find the unit vector perpendicular to both lines - n = np.cross(e1, e2).astype(np.float64) - - # Calculate distance - d = abs(np.dot(n / np.linalg.norm(n), r1 - r2)) - - # v = r1 - r2 - # t1 = np.dot(np.cross(v, e2), n) / np.dot(e1, np.cross(e2, n)) - # t2 = np.dot(np.cross(v, e1), n) / np.dot(e2, np.cross(e1, n)) - t1 = np.dot(np.cross(e2, n), (r2 - r1)) / np.dot(n, n) - t2 = np.dot(np.cross(e1, n), (r2 - r1)) / np.dot(n, n) - # t1 = np.cross(e2, n) * (r2 - r1) / (n* n) - # t2 = np.cross(e1, n) * (r2 - r1) / (n* n) - # print(t1, t2) - p1 = r1 + t1 * e1 - p2 = r2 + t2 * e2 - # print(p1, p2) - # print(d, np.linalg.norm(p1 - p2)) - # assert math.isclose(d, np.linalg.norm(p1 - p2)) - - return d, p1, p2 - -# def search_distance(p1, d1, p2, d2): -# P1 = np.array(p1) -# P2 = np.array(p2) -# d1 = np.array(d1) -# d2 = np.array(d2) - -# start = 0 -# end = 1e18 -# for i in range(80) - - - -# for x,y,z,dx,dy,dz in sorted(coords)[:1]: -# xyz = (x,y,z) -# dxyz = (dx,dy,dz) -# dist, c1, c2 = calculate_distance(Ps, Pd, xyz, dxyz) -# l = np.linalg.norm(dxyz) -# rang = np.arange(-dist/l, dist/l) * dxyz + c2 - -# for cx,cy,cz in rang: -# for x,y,z,dx,dy,dz in sorted(coords)[2:4]: -# xyz = (x,y,z) -# dxyz = (dx,dy,dz) -# print(calculate_distance((cx,cy,cz), Pd, xyz, dxyz)[0]) - -dists = [] -for x,y,z,dx,dy,dz in sorted(coords)[:1]: - xyz = (x,y,z) - dxyz = (dx,dy,dz) - # closest_point = closest_point_on_second_line(Ps, Pd, xyz, dxyz) - # closest_point = find_closest_point(Ps, Pd, xyz, dxyz) - # print(closest_point) - # closest_point2 = find_closest_point(xyz, dxyz, Ps, Pd) - # print(closest_point2) - # dist = np.linalg.norm(closest_point - closest_point2) - dist, c1, c2 = calculate_distance(Ps, Pd, xyz, dxyz) - # if len(dists) == 0: - # ax.quiver(*c1, *(c2-c1), linewidth=5, color="black") - Ps = Ps + (c2 - c1) - print((c1 - c2)) - # exit() - print(dist) - dist, c1, c2 = calculate_distance(Ps, Pd, xyz, dxyz) - dists.append(dist) - print(dist) - # ax.quiver(*closest_point, *closest_point2, linewidth=3, color="black") - # print(calculate_distance(Ps, Pd, xyz, dxyz)) - print() - -print(sorted(dists)) - -m = 4e12 -r = 0 -for ddy in range(-r, r+1): - for ddx in range(-r, r+1): - for ddz in range(-r, r+1): - # ax.quiver(sx-sdx*m, sy-sdy*m, sz-sdz*m, sdx+ddx, sdy+ddy, sdz+ddz, length=400000000000000, normalize=True, color="red", linewidth=1) - ax.quiver(sx, sy, sz, 1, 1, 1, length=40000000000000, normalize=True, color="red", linewidth=1) - -# Set labels -ax.set_xlabel('X axis') -ax.set_ylabel('Y axis') -ax.set_zlabel('Z axis') - -# def on_mouse_move(event): -# print('Event received:',event.xdata,event.ydata) - -# plt.connect('motion_notify_event',on_mouse_move) - -# Show the plot -plt.show() -exit() - - -# intersections = find_intersection(lines) - -# print(intersections) - -print(coords) - -# print(intersecting_lines()) -for line in find_intersecting_lines(): - print(line) - -# for xyz1, xyz2 in combinations(coords, r=2): -s2 = 0 -import math -for i in range(len(coords)): - for j in range(i+1, len(coords)): - xyz1 = coords[i] - xyz2 = coords[j] - print(xyz1) - px1, py1, pz1, vx1, vy1, vz1 = xyz1 - px2, py2, pz2, vx2, vy2, vz2 = xyz2 - slope1 = vy1 / vx1 - b1 = py1 - slope1 * px1 - slope2 = vy2 / vx2 - b2 = py2 - slope2 * px2 - ix, iy = find_intersection(slope1, b1, slope2, b2) - - # if 200000000000000 <= ix <= 400000000000000: - # if 200000000000000 <= iy <= 400000000000000: - # if (px1 - ix) * vx1 < 0 and (px2 - ix) * vx2 < 0: - # if (py1 - iy) * vy1 < 0 and (py2 - iy) * vy2 < 0: - # s += 1 - # print("inside") - - if (px1 - ix) * vx1 < 0 and (px2 - ix) * vx2 < 0: - if (py1 - iy) * vy1 < 0 and (py2 - iy) * vy2 < 0: - dt = (px1 - ix) / vx1 - if math.isclose(dt * vz1 + pz1, dt * vz2 + pz2): - s += 1 - print("inside") - # print(ix, iy) - # print(ix, iy) - # if 7 <= ix <= 27: - # if 7 <= iy <= 27: - # if (px1 - ix) * vx1 < 0 and (px2 - ix) * vx2 < 0: - # if (py1 - iy) * vy1 < 0 and (py2 - iy) * vy2 < 0: - # print("inside") - # s2 += 1 - -print(s2) - -print(s) + coords.append((x, y, z, dx, dy, dz)) + if i < 3: + t = z3.Real(f't{i}') + solver.add(sx + sdx * t == x + dx * t) + solver.add(sy + sdy * t == y + dy * t) + solver.add(sz + sdz * t == z + dz * t) + + +s1 = 0 +for i, (x1, y1, z1, dx1, dy1, dz1) in enumerate(coords): + for x2, y2, z2, dx2, dy2, dz2 in coords[i+1:]: + slope1 = dy1 / dx1 + slope2 = dy2 / dx2 + b1 = y1 - slope1 * x1 + b2 = y2 - slope2 * x2 + if slope1 != slope2: + ix = (b2 - b1) / (slope1 - slope2) + iy = slope1 * ix + b1 + + if 2e14 <= ix <= 4e14 and 2e14 <= iy <= 4e14: + if (x1 - ix) * dx1 < 0 and (x2 - ix) * dx2 < 0: + if (y1 - iy) * dy1 < 0 and (y2 - iy) * dy2 < 0: + s1 += 1 + +print(s1) +assert solver.check() == z3.sat +model = solver.model() +get = lambda var: model.eval(var).as_long() +print(get(sx) + get(sy) + get(sz)) diff --git a/README.md b/README.md index 6037e22..af281bf 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- 2023 - 41 ⭐ + 2023 - 43 ⭐

@@ -69,6 +69,15 @@ + + + + + + + + +

2022 - 50 ⭐

From 7efaca4df63637bb4f2f61c71d36d8adf9e2bfdd Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Mon, 25 Dec 2023 02:29:16 +0200 Subject: [PATCH 096/225] Add day 23 --- .aoc_tiles/tiles/2023/21.png | Bin 6719 -> 8385 bytes .aoc_tiles/tiles/2023/22.png | Bin 3297 -> 8841 bytes .aoc_tiles/tiles/2023/23.png | Bin 4270 -> 9667 bytes 2023/21/21.py | 217 +++-------------------------------- 2023/22/22.py | 63 ++++++++++ 2023/23/23.py | 34 ++++++ 6 files changed, 110 insertions(+), 204 deletions(-) create mode 100644 2023/22/22.py create mode 100644 2023/23/23.py diff --git a/.aoc_tiles/tiles/2023/21.png b/.aoc_tiles/tiles/2023/21.png index 3cb957c2966b6b00496ce9ec25a34d665c0e67c2..6130adafb9075bbd0d997fb60829538cae68026e 100644 GIT binary patch literal 8385 zcmV;yAU@xTP)gvb!lHf#=umojddFx%2GYJNKS@4$g1w3D6cC4oB;AX*Akv z-eJs(e<`f5S}VVTyjluth+6xacffeH5!TSP_BHQ-@eP-F6IDmA~tX5)il+- z8ex#Mvr=J+#S)%SL?IIJcpOsVWMOc4-K_arFFk8f&{!I=YJ{QH$`lgORG(<7PYZOj z{2<)x?Bl{+SJQ+dF#wEpGIKQ7ALnivJZ`}RR|_V6!=Z-&ux)9uKAqBkyo0Kpd*}+q zVo7}dv)?Wx{_x_N@9S*tVQZXQ*#rQFy3~)Rj|%m%Gt$*5sb%enP6dEHtEM6~o7=b{ zU!5>!>cwuIFTLRWpQFng+5q6nH<1=hI#T$}@yEB*D&*ORTr1~RHqmv+7KRKmvHPtk z#LGI|$M$Y|W&iQQAX63eC@h3EI=T4!B@?85Vvw6vZe^35nf{?KW}4_fzpjU^@t-TF zoPC(54y!sCimm+7o*2GRWI(6M>&`-4fFQ0H8x=Al-IM*#N}OlT%fQ5 zQ&*>=q5Z;>qNv0Y%td;bZa`QCLUALzo8Hohfy2S?ABIU)1ps1+1dqebpXe?v!KoNW z^n{_PDk)fmDHckClLwweg8Mb-b`QNrQ~@7TrH2Roz=$S?YNx$-HEuede;AzOjs7~Eni{J zjf@}9CRH@HeKS8`@g#T5byPjE(5yP-?wUf8IKb7?*~(B_^2_;zld-u@7R)`XrkcIz z;Izh&RuuvQUgl3lB;WubsjvCs2fO@yAz2;X#DZtD{(G+ah5B!%lrkAQZ;o?0d^ZbSp@kztzTQc%FrZW3 z@N+m3E7MsiePW43BI#!XIt4xItZnIVL8&UQs`+S4wooL_uWsIV1N-JIktkzOjA5WE zCPQcCj8W*4;#!un$^xOV7gP%Rgo=hXsj2{gFBBKovMda-|8@?Cv;M7sxL=pd4s^yG zs+N7GQb@$kE&;kks;U;8B`nIA#GKbJB? z2m4opp|7gr>t^5pER7f>g3LemVtjF*Tptbf?RB>{ypkj{2I6oycpPp)h`SD%ICs2j zR6-Hv6dVrpX_OJB`U@v{SQ#R2=V z9CWE`o=i z@Ct-Oa;1n&#{M@j=nxuIg`GAj_-*F`K5Jiqy%m6&MV0~uV4pW z2x2oU7XK1uZpfHE*8cM5x!)XpcssQW%^R0n^Zu^e=1f}ns1c_&%>3bWLQJO2Yp=`` z8$GVV<8f395v{7?+ScVeqHAA>ciq8z=qY$aRcWOS^1t%mJK5|`p7bk~Oyux{PfO~h zC5^3Z3e8gogKb8GClJ-Ob|w_m?zsGP&eo`xs46By=g*HO=TtUJUs2V!x1&ptQPyzl zY3UdHV@^NF`*CTAg$WZ~p|eYnUD0$my>jD`xC`-xn->OR=6<`M912+lLU9ATv!s@F zJ-OsgS{YB!t-PA1_W4^ceK_4Ge6*d3KE1BB^X#L7XDywh9ZWG7X<&0!?7s8aEFWJd zGXPw6Mbob6v@hTClU7hMwpES6rmEnt&hTZ&l=2Wuuy2LE=aq*(owDbXP%dA%@kku9 zprp0E_cJTrpE}aX!r*Cfy}}9)b86n5?18E9Tv!O}sy(+fqGWaQe!Y;m=SCK~(0|=Y z`I;3CZR`Jih{xf?5($MwhzxM_9$}0e%C2Z^Y3FLhi(s&+YVh!y=uvln63XETSMR^i z;R%)Tu74{aGRXPY3yJ8#`vgy$+Ln&u+E!^vpt}tKR5d<-RUGGLS;y*>_N@TmV{d}4 zfPkosRZVEr${$Z3`R-(Q0$ye?w(oj+fAeDSvQ)L}!%2EHvW>CK0RIhtCw~`<$GO!z zucWBMOV=UUzj#F;;BhAUR4-d20BCIE*0VSOU}LPi`{PgvNVZ>k>SD#j<8VA)7l1)& zEvo@F%dPCKaHhZGl+kt<;|o)Z>)W}!iQabaOmMxDSRy@l`dGWk-ZoK5B^hOn?Oc9< ziv^|v0^&fnvKf;`lzk8X>ssplOa-fieankRAHD->%IjuhWFWT)ZKOvv(xX;3s2XLW z?e(xR+Ve@M^lQXe`-rjj0C419?w)Ju0PyK7A7s`FT@3&>ACE(?%qV*++;}K9KF@jb zNZZff^kp)1DjVCkUrM>0&^=wU`9yq#ul+<%>;H@J(WjH;D ziYs$C94&>VT`T`^CIN=U-F?m5Bd<2X8oJi@EpK#kX>@X_`n3EX$rCoWaVr|yifUPj1+|6GT2(9#_Qu*V zF4mjo2e?`>~-Ns0ZtDERiS4{O<8tQQ(Ht$eOP8VOOkX22XG3oDydd;8UPNQf!791q4{0j1R z-!L;KeOb8o-0`k7iUPj_jX);imxp^!9X;a9!*NB=S~aznN+AY&*vt-en&@RC^@h*_ zFRPU)c=5Gui>7~jmM75IC1!Z23edtj^;M*)zV=s_hm{fI-_=vs9gK<1ROOY6$Kz-e zl8HXe)r8v_J#=b>6Gu^ov?DZW-HvV7%Hb^(o;#_IqWOgmHV9d5yo3Qo4Aur`Eq!HC9X;l~PpO zPZx)mr>YJvpF$#_J=IjBu%-n7zCHF(AQT(uG5B(ucGN_F+pEm0ox|Y-1lUVJ@-U|g z0Eh%UGF6T_T}D_LW%ac!9TtWRt$(o!1i4!>89J>UUHx(Km-wtY7ngr@-5X`~tTPYu z(n=J&!lBW~=KOv+`S99VYz`j>xUY{s>d`k)A+J`y7eH-$6?(NJyjDiKb*-HvO!U8; z7dY0*j7%gJ*S7w0F5yXj_wFDWVM!zqlUcPyZu4QEfPlx3_ppvm>ihjFBF%4%6us{O zFFz@~{G)|juglP1zJIQqGH1(01%r2l^>$hXT38YZWRy3il{93OHC8pXvpRWPzL3e# z8D($0V1nC7J7bNk@~}1T4`FGI;WTg5=e&qldv*ofO|SfHme1w|fpJ-7tWF*PG_W`V zk$B0kR}t4=b|-K1@rRQ~+J^azIDF^1J8`$L5Z3(ama3+98)My;_OA2sh1XKbYFn^7 zdm7oCyXlqpGOE_h9=&j)1~U{6<_7YGctUUILbbz7yt}71L@fOE`oQyQeeUh2CGSr5 zaIrE>Dy#*7%EmT*8imX69<2+6;-)sPsebpiSfV`Zh4>-@9)Ip}q5Oyp4Y5SBGb+u` z+1$y(K+WH$N5j4W(P*^1s^%s(r;WpBbNFo>UOSgR#?fr*=n-mOQ#%ZaXU5Co#dx)I zIGnLg&HzyHqMLh=RoTwvzcbNY`g}5H(yfhk^QxMp7a_{Co_wJ0jwP`~5}jD|`I~+{ zR|Nn7n(Xdpg!k8rSYK~lD!E^UH6-qCZ+ICxBnOM<{zU{l&eB*9?HAvp*F4&*y@}Nx zu~ z-#yCi4R3GIx4i4$3V57Xy&%LxpGN-Wd}3~8)2dlx94(kO#=5tjmi==(!+=itZgFsZ zYv)J@^V*hM) zsc2wtJ@e%JBbi7>=N{$PwRV0mZPe0GFLo#IerCn)=u~vP6YYK85o<%tcpUEJSF?}a%K`v*8{_SlQ(LcP?p+yXsH@Y`-UR?A zdeqGe0)IT)_o@Pbg#2entW<^e_UJVa0M}E>&OgjiT_-N5DlVr=;UOB0)>}U(XG;Yx zoyt(%)CR*#RRHks?F^}^03g`Y+TKi`!xK=51al^%ox^+9(%IU<1AvOgc1tF`rM-(r zA#Gk5L?PnaIDD;nd&JA_@p~KRJ;d8q{S$L4n}(UH06>iL#WrKor;l~mc_ro0ove;7 z0RT|Zyf12!2>5O1lMdd={&KFb*1W3m(#Me+Ke5oPBkfIHtqoOF#vr$v-E*aWz<{-K z1FMtW$=m)xD66xpoy(`{=(KlX14jV>o5QPV?x<<*2z0fG@U>UCm1;<<3N#fKhIQ4< zG3uXNTE|uxC9%KJudTfOVj}vhL;_zQj>YhPy6<^#sckP}>PaWDcF9F}SCdx-27{_V zqplFcI?>A}*i%XPHAT4E(@v@Wz#wVmSCCg-VPRMqRPwhA$E#1w;R)nj5c?a0r@ftZnoP1Ew&h6n1sBbZ-TKN^^?O9mztcxdm&hT|qpS!NL^Vt2|p6m4; z23sq?g1kKp-sM??+^oKQJ3xJIi3GNtPv)vzcI;aWSSx4mU7QWD`iO?wPL}5+q#v^eeu?86ghHERog1icZCC{o) zryN*4!%j&)7KJFSV}H8uUWcN2XJr`1t^5k|V#iqWth!Y4fz>lKTDr-pZ2tUUEII^t zkLZoHgkJ2&?+x$#5U} zHb-Yzb+%+4S~Cru#}EMQ%=DL;dCwj1y7oZKle`**7gUp19Sr0%vfEC1RwhH|-_K{N zuPTWI4#nhrc_{9cRTTzEhSi^z1_MB89ZQ+3w=R{uHO8+)MO7dbmOQJeKJCc5 zS?c$I>`va=e`5Du&k$>p?`xQ;D!;m=qM;452NlV%DiTW`WLG04)lKa+vg`4>RC147 zg$IeMLPy#p{kF*3sE2hI#c|%PjdlN76Jcent0s3sLG2Hx6B^~B_^HM)QxyQL`16j6 z46D(JgmiUe%Ddca($a;z^#P9nGi|Qf_6_ zpHV4U<&E+u(sf7|znN=g#0cDQO03D-Jpkb4SzWCSk8hZ*rmEVx{H^DbR`0+6DyT|L zD9o_R;cy=3R)2ru5uz#pxGKBF($qj{SE!My^y!rU%=4E<&y%tyceC5<($q`C^2fZt!(BKeBd~u^v^OlW(V0%>OxBK6reO7>cUW z=-T$9 zs!&PHk}iQLGQcsy*WT5NSytb+fhk#_FBqgF<`+gF4t3y_R~0iE*oJb(2p z?Z%1Nyr0fs<7RJP5!%a$e&gLO$GcmiOSpVt$k%7lB?F@>Wf@k_$|aX`vS7{$azU5e zdWv;W)_Pne6p43UPQ3lJ_{aA`E^L~!>F9$DMd|*e@U%6)7~j3SOP4|aVez<>;`*q> zl9_%E3QzeWa*VMa^;T;6wdAtp;hw*}9}>Cc3YRaGwsW`rWD-G5RcVdh49ZAok`}HNUg%@~za;Lto5X7~-L< z@+^NReLCgZi)fcL8g0c?Z*xQXma~bI;MY0O^o)>MeKq!7%RM)}f+bYT_ z3;-5}j7BP%fdXrKlMcQ!pZ4}`OMj|a9i%xms=SLs)QQ2gaT_i`$_qaO5?s^~hT^>YJe2RQAD zdU`A-TfVZPF7?3b8JT4byRSY)cy+1d|1BQ(D7U7ygNN)GH8-FEfQu!Q!xP94TM_UD zA^;%DzOM{tVGX>hkPNFTc&CkZ*f6(yd6C`8TYvB#I$l{{smkBQ;)kUZTRXbuZM|Gt z$C9sXK&KpBGlRnue6c@9C=w&QV;oJ*nRIg|J;Y09o6ONKrWe+Jeqb+)>`-IoR>c-28E72Rs-(8VdEK(VW`SbmEkq_$Fdo8*2 zn(R*Fdzn@K>rSG1JGgwb`#*x=Ki!}vhKH)uM}PZDynbQ{B$cJIv%C8_VwksUo*1qN)FkTs94SQ=}^9~qqx3FFX zYX^px$XWMF^;AIE*4Wqk2oDyfH}H%RoGZZGx^_eGB$VX znRw~f#gjcF1D$P6^zy2j|Gk}waSiHioOi9y9g4gdxZ4=L7w+w9ZM5UVFaX$lJ*|P& zsVu{4e14t3i}~*8wDhvZsiQ~C33Tcbh|25PJC#I>L_^+Q)hSYYtT5TzCNjVg07ygy z6PbTrO-FKw@OaNXXM)_V7ESWF__*5{a80D&d*NQYqEZT~S|*LO-Lq=y+JiB7)5@h4 zdK>3mI}Alt$@At_HE%o=d+FP`NLEz@3Nx%e&aZQ{F!<+A)_4!AIu>WaM7I^YZi^+7 zjc@z=IGCoZbnjGXuj&M<&{Gc8bB_zpJuU)0pmckil*@O9)1#n(`~jLtmFn>*fhq@8I-Sp&kWmasxc z+H9I15V_^bCo@I`xmhrDNU6njThBg0lB*E#_*+}viOsCoaylM;)*l~*lSzbCdt_2U z4?k6Lcmfp}R>@>CPd1%maV-k~wwy^2h{R+fUPXr0!C`C6Ug6bBD1gwp9i|U_y0jaxIs7ocE+AvdxMELDu;$P9JJ`QFlH_S#h zor%Qa?2RbuQIhdFXoe*zZw2M9rM^ym;l3{h*@=2rR2D}P+o7%X$uchz%zwqtv zPyA`=1Z8`o28q4zPZ^nBT93&bYsREEw{ZdBi#h&(e>#13pp!@}W_5Pin02Qq(V#2* zBP#Xkljpll@~WDTZ+Igz(D`g!J^-A5RIoB)Ok|LY^np3k->IF;i_NT*o<1y91D;g)WN0ijE z0DyqUquus3@NP&ie%AfDw7#XC>t^%Zqo{++zZhSzFvLUZ9yuq-B`Tp<$~0V6HN1Jp zIGT}(gr~)InDTm7C$ii2QhZ_P#*>+44f?taJsKIEa7uf(nKlmJ5Vf=P_`Muk6TKie zD*$k}F>|uSB`h9~k0~MG@fL=R@`mmWwKdJ{chbujPVxYN$Ux_`lKQeb77XIM`ZW%2=t0+$O8_7;&{@hmcbrQ>O>03-tF(^H7;E(#qi6X!{1KIkP8)=t&yW_rHO_@X zA|&L?#0oolH|yB?H>`|wr~5i0bHT%@l?M+mCV{G%0o~ut22d$dRp(H}95tkqk)7xb ztj@Ytnf%`-`ZSiJ-Gyx&-u|2EU(E~DrBm~&TS7BsJ6=T$b3axh&nZPcyQvIN;U+ZkmIndJ@JmQSLRiMLWqhxgq@fX=YG zD>@^;y5+-Z-VSE^Rz{4w8I?!xKv+=qteq4-par%4VmcCDjF1f;_tta&Jjpv`#Zcp#VfzM<@1BFNrf^)v2J0BC6d!| z1vC8|ESPe>*b%nWGlU4okC4iy9RP4@gbdm6c0hJT zQ%0KoaJJ<%iUl+pITe-t)j^I4>)lgE~&6Q_-FD6VDgzLuV*a;;t&hJ>oJ z_pW%IKSxc-2y56|`|;FUh@u1UZru~`;}FS*Sy1(7ynXN5xnLd#=QRz Xe)Cws$F*D{00000NkvXXu0mjfvh=^> literal 6719 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 HOw4}($#sUv diff --git a/.aoc_tiles/tiles/2023/23.png b/.aoc_tiles/tiles/2023/23.png index 5f3a4b72dc82e8c0a8e40c1eedadbf2fd754d346..cfb2fbf12a49fd1a67227f6531807388d3afddc6 100644 GIT binary patch literal 9667 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�`93Zc6^k2k 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 NF}!P{OV+V}@jraXaWVh^ diff --git a/2023/21/21.py b/2023/21/21.py index cb40167..f299463 100644 --- a/2023/21/21.py +++ b/2023/21/21.py @@ -1,223 +1,32 @@ -import re -from collections import defaultdict, Counter, deque -from itertools import permutations, combinations, product, combinations_with_replacement -from queue import PriorityQueue +from collections import deque lines = open(0).read().splitlines() Y, X = len(lines), len(lines[0]) -S = Y -assert Y == X dirs = [(0, 1), (1, 0), (0, -1), (-1, 0)] -dirs_diag = [(1, 1), (1, -1), (-1, 1), (-1, -1)] q = deque() - dists = {} + for y, line in enumerate(lines): if 'S' in line: q.append((y, line.index('S'))) - dists[(y, line.index('S'))] = 0 -s = 0 -# for i in range(64): -# nextq = deque() -visited = set() -nextq = deque() while q: y, x = q.popleft() for dy, dx in dirs: ya, xa = y + dy, x + dx - in_inner = 0 <= ya < Y and 0 <= xa < X - in_outer = -Y*2 <= ya < Y*3 and -X*2 <= xa < X*3 - if in_outer and lines[ya%Y][xa%X] != '#': # and (ya, xa) not in visited: - # ok = True - # if (ya, xa) in dists: - # di, do = dists[(ya, xa)] - # ok = dist_outer+(not in_inner) < do - # if ok: - if (ya, xa) not in visited: - # dists[(ya, xa)] = (dist_inner + in_inner, dist_outer + (not in_inner)) - dists[(ya, xa)] = dists[(y, x)]+1 - if in_inner: - q.append((ya, xa)) - else: - nextq.append((ya, xa)) - visited.add((ya, xa)) - if not q: - q = nextq - - # q = nextq - -# print(dists) -# print(len(dists)) - -for y in range(-Y*2, Y*3): - if y % Y == 0: - print('-' * (15*S)) - # for x in range(-X*2, X*3): - for x in range(0, X): - v = '#' - if (y, x) in dists: - dist = dists[(y, x)] - # yadd = 0 if (y == y%Y) else (Y if (y > y%Y) else -Y) - # xadd = 0 if (x == x%X) else (X if (x > x%X) else -X) - # veryouter_dist = dists[(y+yadd, x+xadd)] - # repeat = veryouter_dist - dist - # repeat = do - # v = str('Y' if dist % 2== 1 else ' ') - v = str(dist) - v = v.replace("(", "").replace(",", "").replace(")", "").replace(" ", "-") - print(end=f"{v:3}" + ('| ' if x in (-X-1, -1, X-1, 2*X-1) else '')) - print() - - -# for direction in dirs: -# for y in range(-Y, Y*2): -# for x in range(-X, X*2): -# if (y, x) in dists: -# in_inner = 0 <= y < Y and 0 <= x < X -# dist = dists[(y, x)] -# # inner_di, _ = dists[(y%Y, x%X)] -# if in_inner: -# if dist % 2 == mod and dist <= target: -# s += 1 -# else: -# new = max(-1, (target - dist)) -# if new >= 0: -# print(y, x, new, target, dist) -# if new % 2 == mod: -# if not (0 <= y < Y or 0 <= x < X): -# div = S*2 -# s += new // (S*2) + 1 -# else: -# div = S -# s += new // S + 1 -# if not (0 <= y < Y or 0 <= x < X): -# for side in [-1, 1]: -# for i, rem in enumerate(range(target - S * 1, -S*2, -S*2)): -# new = max(-1, (rem - dist)) -# if new >= 0: -# if new % 2 == mod: -# # print(f"add {new=} {S=} {dist=} {new // S=}") -# s += (new) // S // 2 + 1 -# if new % 2 == (not mod): -# # print(f"add {new=} {S=} {dist=} {new // S=}") -# s += (new) // S // 2 - -# In exactly 6 steps, he can still reach 16 garden plots. -# In exactly 10 steps, he can reach any of 50 garden plots. -# In exactly 50 steps, he can reach 1594 garden plots. -# In exactly 100 steps, he can reach 6536 garden plots. -# In exactly 500 steps, he can reach 167004 garden plots. -# In exactly 1000 steps, he can reach 668697 garden plots. -# In exactly 5000 steps, he can reach 16733044 garden plots. - -target = 26501365 -# target = 100 -mod = target % 2 - -curr_sum = 0 -next_sum = 0 -for y in range(0, Y): - for x in range(0, X): - if (y, x) in dists: - curr_sum += dists[(y, x)] % 2 == mod - next_sum += dists[(y, x)] % 2 == (not mod) - -print(curr_sum, next_sum) -# s = next_sum * sum(range(1, target // S, 2)) * 4 + curr_sum * ((sum(range(0, target // S, 2))) * 4 + 1) -# s = curr_sum * sum(range(1, target // S, 2)) * 4 + next_sum * ((sum(range(0, target // S, 2))) * 4 + 1) - -s += next_sum * 4 -s += curr_sum * 4 -s += next_sum * 8 - -# Visited is a HashMap which maps tiles in the input-square to their distance from the starting tile -# So read this as "even_corners is the number of tiles which have a distance that is even and greater than 65" -let even_corners = visited.values().filter(|v| **v % 2 == 0 && **v > 65).count(); -let odd_corners = visited.values().filter(|v| **v % 2 == 1 && **v > 65).count(); - -let even_full = visited.values().filter(|v| **v % 2 == 0).count(); -let odd_full = visited.values().filter(|v| **v % 2 == 1).count(); - -// This is 202300 but im writing it out here to show the process -let n = ((26501365 - (env.dim.0 / 2)) / env.dim.0) as usize; -assert_eq!(n, 202300); - -let p2 = ((n+1)*(n*1)) * odd_full + (n*n) * even_full - (n+1) * odd_corners + n * even_corners; - - -for x1, x2, y1, y2 in [(0, X, -Y*2, -Y), (0, X, Y*2, Y*3), (-X*2, -X, 0, Y), (X*2, X*3, 0, Y)]: - for y in range(y1, y2): - for x in range(x1, x2): - if (y, x) in dists: - d = dists[(y, x)] - for times in range(target // S+10): - num = d + S * times - if num <= target: - s += num % 2 == mod - -for xlims, ylims in [((-X*2, -X), (-Y*2, -Y)), ((X*2, X*3), (-Y*2, -Y)), ((X*2, X*3), (Y*2, Y*3)), ((-X*2, -X), (Y*2, Y*3))]: - for y in range(*ylims): - for x in range(*xlims): - if (y, x) in dists: - d = dists[(y, x)] - for times in range(target // S+10): - num = d + S * times - if num <= target: - s += (num % 2 == mod) * (times+3) - - # num = (dists[(y, x)] - S * 2) + (target // S) * S - # if num <= target: - # s += (num % 2 == (not mod)) * (target // S - 2) - - # num = (dists[(y, x)] - S * 3) + (target // S) * S - # if num <= target: - # s += (num % 2 == mod) * (target // S - 3) - - # num = (dists[(y, x)]) + (target // S) * S - # if num <= target: - # s += (num % 2 == (not mod)) * (target // S) - print() - -print(s+curr_sum) -exit() - -for y in range(0, Y): - for x in range(0, X): - if (y, x) in dists: - dist = dists[(y, x)] - if dist % 2 == mod and dist <= target: - s += 1 - for dy, dx in dirs + dirs_diag: - dist = dists[(y+Y*2*dy, x+X*2*dx)] - S - new = max(-1, (target - dist)) - if new >= 0: - # print(y, x, new, target, dist) - if new % 2 == mod: - div = S if dy == 0 or dx == 0 else S * 2 - s += new // div + 1 - for dy, dx in dirs: - dist = dists[(y+Y*2*dy, x+X*2*dx)] - S - # print(dist) - for side in [-1, 1]: - for i, rem in enumerate(range(target, -S*2, -S*2)): - new = max(-1, (rem - dist)) - if new >= 0: - if new % 2 == mod: - s += (new) // S + 1 + if 0 <= ya < Y and 0 <= xa < X and lines[ya][xa] != '#' and (ya, xa) not in dists: + dists[(ya, xa)] = dists.get((y, x), 0)+1 + q.append((ya, xa)) -# -# #---# -# |###| -# |###| -# |###| -# #---# +n = 26501365 // X -print(s) +even_full = sum(d % 2 == 0 for d in dists.values()) +odd_full = sum(d % 2 == 1 for d in dists.values()) +even_edges = sum(d % 2 == 0 and d > 65 for d in dists.values()) +odd_edges = sum(d % 2 == 1 and d > 65 for d in dists.values()) +print(even_full - even_edges) -# Too low: -# 618261433216623 -# 618249208752749 wrong -# 618261433216623 same +p2 = (n+1)**2 * odd_full + n**2 * even_full - (n+1) * odd_edges + n * even_edges +print(p2) diff --git a/2023/22/22.py b/2023/22/22.py new file mode 100644 index 0000000..4d3f0c1 --- /dev/null +++ b/2023/22/22.py @@ -0,0 +1,63 @@ +from copy import deepcopy +from itertools import product + +s1 = s2 = 0 +X, Y, Z = 10, 10, 400 +stack = [[[-1] * Z for _ in range(Y)] for _ in range(X)] +bricks = [] + +for i, line in enumerate(open(0)): + x1, y1, z1, x2, y2, z2 = map(int, line.replace("~", ",").split(",")) + bricks.append([]) + for x, y, z in product(range(x1, x2+1), range(y1, y2+1), range(z1, z2+1)): + stack[x][y][z] = i + bricks[-1].append((x, y, z)) + +def z_lower(coords): + return [(x, y, z-1) for x,y,z in coords] + +def at_z_lower(coords, stack): + return {stack[x][y][z-1] for x,y,z in coords} + +def at_z_upper(coords, stack): + return {stack[x][y][z+1] for x,y,z in coords} + +def drop_all(stack, bricks): + changed = True + dropped = set() + while changed: + changed = False + for z, y, x in product(range(2, Z), range(Y), range(X)): + if (brick_id := stack[x][y][z]) != -1: + brick = bricks[brick_id] + if all(z > 1 for _, _, z in brick): + if len(at_z_lower(brick, stack) - {-1, brick_id}) == 0: + for x,y,z in brick: + stack[x][y][z] = -1 + brick = bricks[brick_id] = z_lower(brick) + for x,y,z in brick: + stack[x][y][z] = brick_id + dropped.add(brick_id) + changed = True + return dropped + +drop_all(stack, bricks) + +for i, brick in enumerate(bricks): + ids_above = at_z_upper(brick, stack) - {-1, i} + can_remove = True + for id_above in ids_above: + supporting_ids = at_z_lower(bricks[id_above], stack) - {-1, id_above} + if len(supporting_ids) == 1: + can_remove = False + stack2 = deepcopy(stack) + bricks2 = deepcopy(bricks) + for x,y,z in bricks2[i]: + stack2[x][y][z] = -1 + bricks2[i] = [] + s2 += len(drop_all(stack2, bricks2) - {i}) + break + + s1 += can_remove + +print(s1, s2, sep='\n') diff --git a/2023/23/23.py b/2023/23/23.py new file mode 100644 index 0000000..e3f6343 --- /dev/null +++ b/2023/23/23.py @@ -0,0 +1,34 @@ +import sys +sys.setrecursionlimit(1000000000) +from collections import deque + +lines = open(0).read().splitlines() +Y, X = len(lines), len(lines[0]) +dirs = [(0, 1), (1, 0), (0, -1), (-1, 0)] + +max_dist = 0 +def dfs(y, x, dist, visited, part2=False): + global max_dist + if (y, x) == (Y-1, X-2): + if dist > max_dist: + # Prints all current largest paths. After a couple minutes it finds the correct answer + # However it does not finish within half an hour. + print(dist) + max_dist = dist + + adj = [] + for i, (dy, dx) in enumerate(dirs): + ya, xa = y+dy, x+dx + if 0 <= ya < Y and 0 <= xa < X and lines[ya][xa] != '#' and (ya, xa) not in visited: + adj.append((ya, xa)) + if not part2 and lines[ya][xa] in '>v<^' and '>v<^'.index(lines[ya][xa]) == i: + continue + if len(adj) == 1: + visited.add(adj[0]) + dfs(adj[0][0], adj[0][1], dist+1, visited) + elif len(adj) > 1: + for a in adj: + dfs(a[0], a[1], dist+1, visited | {a}) + +dfs(0, 1, 0, {(0, 1)}) +dfs(0, 1, 0, {(0, 1)}, part2=True) From 5fb785901024c686e0ef1a8ffa76307222d18557 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Mon, 25 Dec 2023 02:30:08 +0200 Subject: [PATCH 097/225] Add README --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index af281bf..1a63765 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- 2023 - 43 ⭐ + 2023 - 48 ⭐

@@ -69,10 +69,10 @@ - + - + From 784bf05c7cc2a539a05a3895ce3281dcf87eac9d Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Mon, 25 Dec 2023 02:53:04 +0200 Subject: [PATCH 098/225] Update hook --- .aoc_tiles/tiles/2023/18.png | Bin 8602 -> 9018 bytes .gitignore | 6 ++++-- .pre-commit-config.yaml | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.aoc_tiles/tiles/2023/18.png b/.aoc_tiles/tiles/2023/18.png index 9bc52675d0a1c13f2f8bbc2db0d659af928bf3b9..d8b9026dfaf601e07a0ac8441ffeee07c73cc765 100644 GIT binary patch literal 9018 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%0A$!? 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 Date: Mon, 25 Dec 2023 03:04:51 +0200 Subject: [PATCH 099/225] Remove old AoCTiles --- AoCTiles/README.md | 70 +- AoCTiles/create_aoc_tiles.py | 451 -- AoCTiles/examples/01basic.png | Bin 9511 -> 0 bytes AoCTiles/examples/01checkmarks.png | Bin 5377 -> 0 bytes AoCTiles/examples/05dark.png | Bin 9423 -> 0 bytes AoCTiles/examples/05none.png | Bin 7491 -> 0 bytes AoCTiles/examples/05outline.png | Bin 13416 -> 0 bytes AoCTiles/examples/basic.png | Bin 9811 -> 0 bytes AoCTiles/fonts/PaytoneOne.ttf | Bin 100576 -> 0 bytes AoCTiles/fonts/SourceCodePro-Regular.otf | Bin 132740 -> 0 bytes AoCTiles/github_languages.yml | 7981 ---------------------- AoCTiles/requirements.txt | 4 - README.md | 2 +- 13 files changed, 2 insertions(+), 8506 deletions(-) delete mode 100644 AoCTiles/create_aoc_tiles.py delete mode 100644 AoCTiles/examples/01basic.png delete mode 100644 AoCTiles/examples/01checkmarks.png delete mode 100644 AoCTiles/examples/05dark.png delete mode 100644 AoCTiles/examples/05none.png delete mode 100644 AoCTiles/examples/05outline.png delete mode 100644 AoCTiles/examples/basic.png delete mode 100644 AoCTiles/fonts/PaytoneOne.ttf delete mode 100644 AoCTiles/fonts/SourceCodePro-Regular.otf delete mode 100644 AoCTiles/github_languages.yml delete mode 100644 AoCTiles/requirements.txt diff --git a/AoCTiles/README.md b/AoCTiles/README.md index cdb1b0f..75681dd 100644 --- a/AoCTiles/README.md +++ b/AoCTiles/README.md @@ -1,71 +1,3 @@ # AoC Tiles -This script creates a graphic for each day for each year of the Advent of Code. -A tile is an image which represents both parts of a day, it looks like this: - -![AoC Tiles](examples/basic.png) - -It uses the personal [AoC Leaderboard](https://adventofcode.com/2021/leaderboard/self) to get the data for each day using your cookie. - - -## Installation - -Feel free to use it, here is a short description of how to get it working: - -Copy this entire folder into your AoC repository. Then install the requirements. - -### Requirements - -Install at least Python 3.10 (because of the new typing union `|`, if you cannot do so you can -change the `type1 | type2` annotations to `Union[type1, type2]`). - -Install the requirements (`pillow` for creating images, `requests` for the leaderboard data and `pyyaml` to parse the language config): - -``` -pip install -r requirements.txt -``` - -### Configuration - -To use this script, you need to have a file named "session.cookie" in the same folder as this script. -It should contain a single line, the "session" cookie from https://adventofcode.com when you are logged in. -No prefix is needed, only the string of length 128. - -Now add `` and `` in your README, everything between these 2 tags -will always be replaced by the script, so do not add additional information there. Note that these are HTML comments, -so they will not be visible in the rendered README. - -Your year/day script structure likely looks different. You can change the patterns for years and days in the -[create_aoc_tiles.py](create_aoc_tiles.py) file. - -The variables at the top of the script have comments to explain what they do. - -To try whether it works you can run the script directly: - -``` -python3 create_aoc_tiles.py -``` - -### Pre-commit hook - -Add [.pre-commit-config.yaml](/.pre-commit-config.yaml) to your repository and run `pre-commit install` to install the hook. - - -## Customization - -There are various flags and variables which can be set to change the look of your tiles. Some of them are listed here -with examples showing how it changes the look. - -**Note that in order to regenerate images you have to either delete the images or delete the .aoc-tiles-cache!** - -* `SHOW_CHECKMARK_INSTEAD_OF_TIME_RANK`: - -| `False` (default) | `True` | -|---------------------------|--------------------------------| -| ![](examples/01basic.png) | ![](examples/01checkmarks.png) | - -* `CONTRAST_IMPROVEMENT_TYPE`: - -| `"outline"` (default) | `"dark"` | `"none"` | -|-----------------------------|--------------------------|--------------------------| -| ![](examples/05outline.png) | ![](examples/05dark.png) | ![](examples/05none.png) | +This script has moved to [LiquidFun/aoc_tiles](https://github.com/LiquidFun/aoc_tiles). It has been improved and can now easily be run as a pre-commit hook. See the link for more details. diff --git a/AoCTiles/create_aoc_tiles.py b/AoCTiles/create_aoc_tiles.py deleted file mode 100644 index 2667de3..0000000 --- a/AoCTiles/create_aoc_tiles.py +++ /dev/null @@ -1,451 +0,0 @@ -""" -Author: LiquidFun -Source: https://github.com/LiquidFun/adventofcode - -To use this script, you need to have a file named -"session.cookie" in the same folder as this script. - -It should contain a single line, the "session" cookie -when logged in to https://adventofcode.com. Just -paste it in there. - -Then install the requirements as listed in the requirements.txt: - pip install -r requirements.txt - -Then run the script: - python create_aoc_tiles.py -""" -import functools -import itertools -import math -import time -from collections import namedtuple -from functools import cache -from pathlib import Path -import re -import json -from typing import Literal - -import requests -from PIL import Image, ImageColor -import yaml -from PIL.ImageDraw import ImageDraw -from PIL import ImageFont - -# This results in the parent directory of the script directory, the year directories should be here -AOC_DIR = Path(__file__).absolute().parent.parent - -# The directory where the image files for the tiles are stored. This should be committed to git. -# Year directories are created in this directory, then each day is saved as 01.png, 02.png, etc. -IMAGE_DIR = AOC_DIR / "Media" - -# Path to the README file where the tiles should be added -README_PATH = AOC_DIR / "README.md" - -# Path to the cookie session file -SESSION_COOKIE_PATH = AOC_DIR / "session.cookie" - -# Whether the graphic should be created for days that have not been completed yet. Note that missing days between -# completed days will still be created. -CREATE_ALL_DAYS = False - -# Instead of showing the time and rank you achieved this just shows whether -# it was completed with a checkmark -SHOW_CHECKMARK_INSTEAD_OF_TIME_RANK = False - -# The year and day pattern to detect directories. For example, if your day folders are -# called "day1" to "day25" then set the pattern to r"day\d{1,2}". The script extracts -# a number from the folder and tries to guess its day that way. -YEAR_PATTERN = r"\d{4}" -DAY_PATTERN = r"\d{2}" - - -# On how to improve legibility of the text when the background is white, outline will add a dark outline around -# the text, "text" will make the text itself dark, none will not change the text color (leaves it white) -CONTRAST_IMPROVEMENT_TYPE: Literal["none", "outline", "dark"] = "outline" - - -# You can change this code entirely, or just change patterns above. You get more control if you change the code. -def get_solution_paths_dict_for_years() -> dict[int, dict[int, list[str]]]: - """Returns a dictionary which maps years to days to a list of solution paths, - - E.g.: {2022: {1: [Path("2022/01/01.py"), Path("2022/01/01.kt")], ...}} - - This functions gives you more control of which solutions should be shown in the tiles. For example, you - can filter by extension, or only show a single solution, or show tiles for days that have been completed - but do not have a solution. - - These can also be links to external solutions, e.g. if you want to show a solution from a different repository. - (Untested however) - - """ - solution_paths_dict: dict[int, dict[int, list[str]]] = {} - - # If you use a new repo for years you might just remove this if, and assign the year manually - for year_dir in sorted(get_paths_matching_regex(AOC_DIR, YEAR_PATTERN), reverse=True): - year = find_first_number(year_dir.name) - solution_paths_dict[year] = {} - # If you have a deep structure then you can adjust the year dir as well: - # year_dir = year_dir / "src/main/kotlin/com/example/aoc" - for day_dir in get_paths_matching_regex(year_dir, DAY_PATTERN): - day = find_first_number(day_dir.name) - solutions = sorted(find_recursive_solution_files(day_dir)) - - # To filter by extension: - # solutions = [s for s in solutions if s.suffix == ".py"] - - # To only show a single solution: - # solutions = [solutions[0]] - - # To show tiles for days that have been completed but do not have a solution: - # if len(solutions) == 0: - # solutions = [Path("dummy.kt")] - - solutions = [solution.relative_to(AOC_DIR) for solution in solutions] - - solution_paths_dict[year][day] = [s.as_posix() for s in solutions] - return solution_paths_dict - - -# ====================================================== -# === The following likely do not need to be changed === -# ====================================================== - -# Color if a part is not completed -NOT_COMPLETED_COLOR = ImageColor.getrgb("#333333") -OUTLINE_COLOR = ImageColor.getrgb("#6C6A6A") -# Add outline if too bright ( = too similar to TEXT_WHITE) -CONTRAST_IMPROVEMENT_THRESHOLD = 30 # Range from 0 to 255 -TEXT_COLOR = ImageColor.getrgb("#FFFFFF") - -# Width of each tile in the README.md. -# 161px is a rather specific number, with it exactly 5 tiles fit into a row. It is possible to go -# to 162px, however then 1080p displays show 4 tiles in a row, and phone displays show 1 tile -# instead of 2 in a row. Therefore, 161px is used here. -TILE_WIDTH_PX = "161px" - -# This results in the parent folder of the script file -AOC_TILES_SCRIPT_DIR = Path(__file__).absolute().parent - -# Cache path is a subfolder of the AOC folder, it includes the personal leaderboards for each year -CACHE_DIR = AOC_TILES_SCRIPT_DIR / ".aoc_tiles_cache" - -# Overrides day 24 part 2 and day 25 both parts to be unsolved -DEBUG = False - -# URL for the personal leaderboard (same for everyone) -PERSONAL_LEADERBOARD_URL = "https://adventofcode.com/{year}/leaderboard/self" - -# Location of yaml file where file extensions are mapped to colors -GITHUB_LANGUAGES_PATH = AOC_TILES_SCRIPT_DIR / "github_languages.yml" - - -@cache -def get_font(size: int, path: str): - return ImageFont.truetype(str(AOC_DIR / path), size) - - -# Fonts, note that the fonts sizes are specifically adjusted to the following fonts, if you change the fonts -# you might need to adjust the font sizes and text locations in the rest of the script. -main_font = functools.partial(get_font, path=AOC_TILES_SCRIPT_DIR / "fonts/PaytoneOne.ttf") -secondary_font = functools.partial(get_font, path=AOC_TILES_SCRIPT_DIR / "fonts/SourceCodePro-Regular.otf") - -DayScores = namedtuple("DayScores", ["time1", "rank1", "score1", "time2", "rank2", "score2"], defaults=[None] * 3) - - -def get_extension_to_colors(): - extension_to_color = {} - with open(GITHUB_LANGUAGES_PATH) as file: - github_languages = yaml.load(file, Loader=yaml.FullLoader) - for language, data in github_languages.items(): - if "color" in data and "extensions" in data and data["type"] == "programming": - for extension in data["extensions"]: - extension_to_color[extension.lower()] = data["color"] - return extension_to_color - - -extension_to_color: dict[str, str] = get_extension_to_colors() - - -def get_paths_matching_regex(path: Path, pattern: str): - return sorted([p for p in path.iterdir() if re.fullmatch(pattern, p.name)]) - - -def find_recursive_solution_files(directory: Path) -> list[Path]: - solution_paths = [] - for path in directory.rglob("*"): - if path.is_file() and path.suffix in extension_to_color: - solution_paths.append(path) - return solution_paths - - -def parse_leaderboard(leaderboard_path: Path) -> dict[int, DayScores]: - no_stars = "You haven't collected any stars... yet." - start = ' *Time *Rank *Score\n' - end = "" - with open(leaderboard_path) as file: - html = file.read() - if no_stars in html: - return {} - matches = re.findall(rf"{start}(.*?){end}", html, re.DOTALL | re.MULTILINE) - assert len(matches) == 1, f"Found {'no' if len(matches) == 0 else 'more than one'} leaderboard?!" - table_rows = matches[0].strip().split("\n") - leaderboard = {} - for line in table_rows: - day, *scores = re.split(r"\s+", line.strip()) - # replace "-" with None to be able to handle the data later, like if no score existed for the day - scores = [s if s != "-" else None for s in scores] - assert len(scores) in (3, 6), f"Number scores for {day=} ({scores}) are not 3 or 6." - leaderboard[int(day)] = DayScores(*scores) - return leaderboard - - -def request_leaderboard(year: int) -> dict[int, DayScores]: - leaderboard_path = CACHE_DIR / f"leaderboard{year}.html" - if leaderboard_path.exists(): - leaderboard = parse_leaderboard(leaderboard_path) - less_than_30mins = time.time() - leaderboard_path.lstat().st_mtime < 60 * 30 - if less_than_30mins: - print(f"Leaderboard for {year} is younger than 30 minutes, skipping download in order to avoid DDOS.") - return leaderboard - has_no_none_values = all(itertools.chain(map(list, leaderboard.values()))) - if has_no_none_values and len(leaderboard) == 25: - print(f"Leaderboard for {year} is complete, no need to download.") - return leaderboard - with open(SESSION_COOKIE_PATH) as cookie_file: - session_cookie = cookie_file.read().strip() - assert len(session_cookie) == 128, f"Session cookie is not 128 characters long, make sure to remove the prefix!" - data = requests.get( - PERSONAL_LEADERBOARD_URL.format(year=year), - headers={"User-Agent": "https://github.com/LiquidFun/adventofcode by Brutenis Gliwa"}, - cookies={"session": session_cookie}, - ).text - leaderboard_path.parent.mkdir(exist_ok=True, parents=True) - with open(leaderboard_path, "w") as file: - file.write(data) - return parse_leaderboard(leaderboard_path) - - -class HTMLTag: - def __init__(self, parent: "HTML", tag: str, closing: bool = True, **kwargs): - self.parent = parent - self.tag = tag - self.closing = closing - self.kwargs = kwargs - attributes = "".join(f' {k}="{v}"' for k, v in self.kwargs.items()) - self.parent.push(f"<{self.tag}{attributes}>", depth=self.closing) - - def __enter__(self): - pass - - def __exit__(self, *args): - if self.closing: - self.parent.push(f"", depth=-self.closing) - - -class HTML: - tags: list[str] = [] - depth = 0 - - def push(self, tag: str, depth=0): - if depth < 0: - self.depth += depth - self.tags.append(" " * self.depth + tag) - if depth > 0: - self.depth += depth - - def tag(self, tag: str, closing: bool = True, **kwargs): - return HTMLTag(self, tag, closing, **kwargs) - - def __str__(self): - return "\n".join(self.tags) - - -def darker_color(c: tuple[int, int, int, int]) -> tuple[int, int, int, int]: - return c[0] - 10, c[1] - 10, c[2] - 10, 255 - - -# Luminance of color -def luminance(color): - return 0.299 * color[0] + 0.587 * color[1] + 0.114 * color[2] - - -# How similar is color_a to color_b -def color_similarity(color_a, color_b, threshold): - return abs(luminance(color_a) - luminance(color_b)) < threshold - - -def get_alternating_background(languages, both_parts_completed=True, *, stripe_width=20): - colors = [ImageColor.getrgb(extension_to_color[language]) for language in languages] - if len(colors) == 1: - colors.append(darker_color(colors[0])) - image = Image.new("RGB", (200, 100), NOT_COMPLETED_COLOR) - - def fill_with_colors(colors, fill_only_half): - for x in range(image.width): - for y in range(image.height): - if fill_only_half and x / image.width + y / image.height > 1: - continue - image.load()[x, y] = colors[((x + y) // stripe_width) % len(colors)] - - fill_with_colors([NOT_COMPLETED_COLOR, darker_color(NOT_COMPLETED_COLOR)], False) - if colors: - fill_with_colors(colors, not both_parts_completed) - return image - - -def format_time(time: str) -> str: - """Formats time as mm:ss if the time is below 1 hour, otherwise it returns >1h to a max of >24h""" - time = time.replace(">", ">") - if ">" in time: - formatted = time - else: - h, m, s = time.split(":") - formatted = f">{h}h" if int(h) >= 1 else f"{m:02}:{s:02}" - return f"{formatted:>5}" - - -def draw_star(drawer: ImageDraw, at: tuple[int, int], size=9, color="#ffff0022", num_points=5): - """Draws a star at the given position""" - diff = math.pi * 2 / num_points / 2 - points: list[tuple[float, float]] = [] - for angle in [diff * i - math.pi / 2 for i in range(num_points * 2)]: - factor = size if len(points) % 2 == 0 else size * 0.4 - points.append((at[0] + math.cos(angle) * factor, at[1] + math.sin(angle) * factor)) - drawer.polygon(points, fill=color) - - -def generate_day_tile_image(day: str, year: str, languages: list[str], day_scores: DayScores | None, path: Path): - """Saves a graphic for a given day and year. Returns the path to it.""" - image = get_alternating_background(languages, not (day_scores is None or day_scores.time2 is None)) - drawer = ImageDraw(image) - text_kwargs = {"fill": TEXT_COLOR} - - # Get all colors of the day, check if any one is similar to TEXT_COLOR - # If yes, add outline - for language in languages: - color = ImageColor.getrgb(extension_to_color[language]) - if color_similarity(color, TEXT_COLOR, CONTRAST_IMPROVEMENT_THRESHOLD): - if "outline" in CONTRAST_IMPROVEMENT_TYPE: - text_kwargs["stroke_width"] = 1 - text_kwargs["stroke_fill"] = OUTLINE_COLOR - if "dark" in CONTRAST_IMPROVEMENT_TYPE: - text_kwargs["fill"] = NOT_COMPLETED_COLOR - break - - font_color = text_kwargs["fill"] - - # === Left side === - drawer.text((3, -5), "Day", align="left", font=main_font(20), **text_kwargs) - drawer.text((1, -10), str(day), align="center", font=main_font(75), **text_kwargs) - # Calculate font size based on number of characters, because it might overflow - lang_as_str = " ".join(languages) - lang_font_size = max(6, int(18 - max(0, len(lang_as_str) - 8) * 1.3)) - drawer.text((0, 74), lang_as_str, align="left", font=secondary_font(lang_font_size), **text_kwargs) - - # === Right side (P1 & P2) === - for part in (1, 2): - y = 50 if part == 2 else 0 - time, rank = getattr(day_scores, f"time{part}", None), getattr(day_scores, f"rank{part}", None) - if day_scores is not None and time is not None: - drawer.text((104, -5 + y), f"P{part} ", align="left", font=main_font(25), **text_kwargs) - if SHOW_CHECKMARK_INSTEAD_OF_TIME_RANK: - drawer.line((160, 35 + y, 150, 25 + y), fill=font_color, width=2) - drawer.line((160, 35 + y, 180, 15 + y), fill=font_color, width=2) - continue - drawer.text((105, 25 + y), "time", align="right", font=secondary_font(10), **text_kwargs) - drawer.text((105, 35 + y), "rank", align="right", font=secondary_font(10), **text_kwargs) - drawer.text((143, 3 + y), format_time(time), align="right", font=secondary_font(18), **text_kwargs) - drawer.text((133, 23 + y), f"{rank:>6}", align="right", font=secondary_font(18), **text_kwargs) - else: - drawer.line((140, 15 + y, 160, 35 + y), fill=font_color, width=2) - drawer.line((140, 35 + y, 160, 15 + y), fill=font_color, width=2) - - if day_scores is None and not languages: - drawer.line((15, 85, 85, 85), fill=TEXT_COLOR, width=2) - - # === Divider lines === - drawer.line((100, 5, 100, 95), fill=font_color, width=1) - drawer.line((105, 50, 195, 50), fill=font_color, width=1) - - image.save(path) - - -def handle_day(day: int, year: int, solutions: list[str], html: HTML, day_scores: DayScores | None, needs_update: bool): - languages = [] - for solution in solutions: - extension = "." + solution.split(".")[-1] - if extension in extension_to_color and extension not in languages: - languages.append(extension) - solution_link = solutions[0] if solutions else None - if DEBUG: - if day == 25: - languages = [] - day_graphic_path = IMAGE_DIR / f"{year:04}/{day:02}.png" - day_graphic_path.parent.mkdir(parents=True, exist_ok=True) - if not day_graphic_path.exists() or needs_update: - generate_day_tile_image(f"{day:02}", f"{year:04}", languages, day_scores, day_graphic_path) - day_graphic_path = day_graphic_path.relative_to(AOC_DIR) - with html.tag("a", href=str(solution_link)): - html.tag("img", closing=False, src=day_graphic_path.as_posix(), width=TILE_WIDTH_PX) - - -def find_first_number(string: str) -> int: - return int(re.findall(r"\d+", string)[0]) - - -def fill_empty_days_in_dict(day_to_solutions: dict[int, list[str]], max_day) -> None: - if not CREATE_ALL_DAYS and len(day_to_solutions) == 0: - print(f"Current year has no solutions!") - for day in range(1, max_day + 1): - if day not in day_to_solutions: - day_to_solutions[day] = [] - - -def handle_year(year: int, day_to_solutions: dict[int, list[str]]): - leaderboard = request_leaderboard(year) - if DEBUG: - leaderboard[25] = None - leaderboard[24] = DayScores("22:22:22", "12313", "0") - day_to_solutions[23] = [] - html = HTML() - with html.tag("h1", align="center"): - stars = sum((ds.time1 is not None) + (ds.time2 is not None) for ds in leaderboard.values() if ds is not None) - html.push(f"{year} - {stars} ⭐") - max_day = 25 if CREATE_ALL_DAYS else max(*day_to_solutions, *leaderboard) - fill_empty_days_in_dict(day_to_solutions, max_day) - - completed_solutions = dict() - completed_cache_path = CACHE_DIR / f"completed-{year}.json" - if completed_cache_path.exists(): - with open(completed_cache_path, "r") as file: - completed_solutions = {int(day): solutions for day, solutions in json.load(file).items()} - - for day, solutions in sorted(day_to_solutions.items()): - handle_day(day, year, solutions, html, leaderboard.get(day), completed_solutions.get(day) != solutions) - - with open(completed_cache_path, "w") as file: - completed_days = [day for day, scores in leaderboard.items() if scores.time2 is not None] - file.write(json.dumps({day: solutions for day, solutions in day_to_solutions.items() if day in completed_days})) - - with open(README_PATH, "r", encoding="utf-8") as file: - text = file.read() - begin = "" - end = "" - assert begin in text and end in text, f"Could not find AOC TILES markers '{begin}' and '{end}' in the " \ - f"README.md! Make sure to add them to the README at {README_PATH}." - pattern = re.compile(rf"{begin}.*{end}", re.DOTALL | re.MULTILINE) - new_text = pattern.sub(f"{begin}\n{html}\n{end}", text) - - with open(README_PATH, "w", encoding="utf-8") as file: - file.write(str(new_text)) - - -def main(): - for year, day_to_solutions_list in get_solution_paths_dict_for_years().items(): - print(f"=== Generating table for year {year} ===") - handle_year(year, day_to_solutions_list) - - -if __name__ == "__main__": - main() diff --git a/AoCTiles/examples/01basic.png b/AoCTiles/examples/01basic.png deleted file mode 100644 index 40244101cac965d232093b0da32d37efc209886c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9511 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 diff --git a/AoCTiles/examples/05dark.png b/AoCTiles/examples/05dark.png deleted file mode 100644 index b09227f7b3e4e2f75cfc29c74c8e001eb3fa68dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9423 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 D4k?KI diff --git a/AoCTiles/examples/05none.png b/AoCTiles/examples/05none.png deleted file mode 100644 index 249c3fe52c4a3d0b87c0af7b5364782465d36610..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7491 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 N002ovPDHLkV1j=YvLgTh diff --git a/AoCTiles/examples/05outline.png b/AoCTiles/examples/05outline.png deleted file mode 100644 index 795f4590456262500820033ac585da03e9db297b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13416 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 diff --git a/AoCTiles/fonts/PaytoneOne.ttf b/AoCTiles/fonts/PaytoneOne.ttf deleted file mode 100644 index 5cb0bbb8ba8da3de2df608a9e4dec5e4642c8d31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100576 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 diff --git a/AoCTiles/fonts/SourceCodePro-Regular.otf b/AoCTiles/fonts/SourceCodePro-Regular.otf deleted file mode 100644 index f32e6bd628dd9277896272a5e63fd8f324cc304a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132740 zcmbS!2Vhjyw)Q?{CS{UI@5#)hOoA;=rX&PWOr@zHMLLp35=em*ssdK9q9Q7aR8f#7 z2#SaZ2-px1D=J9wV!hbV0i)#q)?OzB?|t{Z_doCb=38fh*6R1`1{7z~X_udm>!H{ae6+J&Q|9f1Y#Z zs8HTtB82)~&;I=et_X}dER>%=6(V|M&w+yrmG)64p?rA15Gj574ZPAl|I1I#B8mQZ zeoRGu*@S@R357yL&Jw~iwx+7AGU54}Q@Hm7kXwTQvq#K9{0v-Y)YP|33E3PrS15Z% z3K3FRUp8fe*+EGuz3^jhD66mf;%Uu}>lcIw-#?+Txut!J@CZ?YItT|!j$#IF_1)@t z?&h%WzX?sFaPdV-sK0~Tdz|m4CFqo&CR7T=e|S#&^!$%_cxZc%_8wY-Oo{LDFJkl; zW(O`bb*S=?Fd^=}>QG$wWmZNDw~~%fiz!IcHC5FeLiMYntHuckQBYjiPh2Y;?d|I6 zb~ELuM2r#2V!E%KQXd65P$nUIX=A~P9*9gsaLuv;ImD1vks;y@Swm=dL)IbpGGr6v zL56IGJjRd%M5L%QySX?UJF=UI#6=w`NL=-ER8nRV%QyL68Oe8BS z4LKZo*loxW7nL&-aeg<#qb{Tqg!=7OBV~9Hv~E*BHDpy-RgNEokn1$v2-h!)V-l5G zecZiZ~sMS=c<0*&xMkr9+=$U(vpbd4bgi_3#X z8?r^Xg6=is5Ro0U)sRDlJLnrjwu-L79qELL%-{h=c(~{uJjIYBE-G`RNDDS}r9@qn zX7q(L6Hxca;E(0A35o)l^GZ-uJo|?cu8C+%vLWjt(c&^>6XZUIY=&HE$N`8y!;k}o z%kqdJ2Z=70U51RhTfQ@7i|~fT8ghu}8q$%bRdf%z-3Sj8u8{4994>l=oHpc$i^>@( z+@ZNfcoe0hZP0dTuWI|yD#+2p3}QMp`?x*R>as;s$N6Om7{Y*nz9}kp2c4 z^NRlv^L1?(;%?C1KsuX|!g@$3C50mWOYzhjNM##J_d3!-u9Ua72fRs!Y>>}z$bVhN zjQ^1H8lkZKw91{%Z_m5e1*7N=6;cW5ke*Hv|H!BE&p<_T3-LV-aDVzYs9!< zNwEs~x}nh=z=8bvib5QsKvarGQ7)<=4-`{HvuJ@_4|a&&qCr&PZj+cGf6L^(O5Eup zY9O~DyqmZZ|C=oTmo3UJq?Rq8tjE1es64n|i}*E=1|a=rph--^FQrzB)EjWuA#Okl z^$2x1;!&DL(TZ3VqRNpVvM;_y%p%;aq?nkznjllE)ren*6q-=mY}C#px{9k%!(ve= z`a!xV#S72#(^ve<^ZZmlJXa!aLds1jajh&R>8>;F8icjTnl_*|4rrL}WrK4tw_Js~ zl!@_po??v!PXRauA7bSSA3%2b-{JG{pp2w_vK?t)Ji;20=l|8hwXg`K zS|dw57*}LJw%0&N+!i?Z2IPAsa%+-#@-rk;+i8`SZNk%J_3Zysd+U$f$g&PtG8@0W zj8v&z4MMt&l3T&`$fp4z4gVkQvjwew0-hO!XIP(|?UA%S7PXx$bxOA57 znc6VbleACu?$Fvm^q}i--A|@Z`s_^ky1%7BHTlz-)=>(*-v}nFbp!vs_co(0WT6STOE#jmUI!+NR>QLW@cecEQj*S^{3jh% zA{81H#;1Vc@>FOL0isRVYEV@wEvlQlF?s`cn}`BPz94YPTID1eNH2YWdm!r#3?+ zW*t&)WwHjH*VVEV)IMlzq+ZnNqYOlBsuw&F=!Qy7X;F>fPyAcRmVXP`i?%_vFUM1| zt!aDFMy4W!+BWwi2kw&1Wvc9%AQ!SiGiu8vnkG}B5k~qX&@qh`jnF5Jw-co1DsZ<( zhSO8jx@ndl^&jI>`qUe!EX{JHmj1}UtdJf!e zh1Mu#x=Z$@(U8iM^WT=|UsIwMcEMATId@vEOt#B^x5?jaE&Y^#vx@X){?#%%&3~QN zrr!ClsqfW$=-2Ak=mmNqe)HjJy8bmpRO>e(yen`3C;;*ht3dbZJ@syoy6atW<&shX zLb_5qN*{!ELz6q6-r1tC+}F6n_^vy(5v+#+?6GQd<{~#PTB_kF~Yl|%-851nMUzNd3y15 zG44VO+!p`KxLkrf-Hq6Jx)&))P045AAOFX4fBVEJ& z*n}NcN)>4$9s3?mtRu6q2Dk+4n9HE0D=;@+Dg9VCd~UDsVcqtYwpV`;mFp(1#{4{5 zEEFrm$BM3Kib)Aj%u29gS1wg9Q7%)iQ2Hu;lRr@UB~h8JEzlm+tF=YiVr`-Jw0?(v zMA<2R)@$^^SlK>fjx)z&g}6>zqAk_yu$H)4T_@u4`R z4A#HXf7XB1&**;rH~p;syM9jpUg#m~VCv`57y`ue&{973$%bRcYMPj#%u?=E<|^}) zrOFG+F69g5r1G`$z4DvVt|qB@YLPlptyXK)26d7;U7excsXn64R~M*@)n)24>T~J~ z>Wk_t>NfRtb*H*deP2DQex-$IQJO=$RJ&Zu(Y)H#T8VbER)#h)O`DxvtFUM>hqw#<@##R9LQii6CNLiS&B;{3GfGxrnXG^tRX1mJP+cwZvVXL+^+U~MFZd+tK zXWwZ*VE@woqy4-iz!C1SIno@N4wu8@@Hx6UdN_(5y&V%BQynuM_c$JOJnC5Lc*gOZ zW0hl#W1VB8W3ywcEY?A&c)89&Na@h&fU(v&V9}U&cn`AnGu;WncXw5%`D6u zlUb2DHgkMdRMvp3%B-)mOu8W^_V8KFfCq7hpn<m@u@`LBAGUf3wmJw~snS*vuvJ2u?Siewq*Y2=B|C+4iSv2qM&~xz z>TTHSQ`jmTw(54lR#lnf3|pOotlRKd}_@f)kJ7cMzp=qV~ju6LlwW zc5=db{EOqa3306X%S5^(#8I3)9Q{^^BkvsDdKB6}`sC3CN1Kk;L#jCP%8_wLCVu|g zN83Mo)j8E!XNe7n5sLCWbcdN!IS72J9Hmq+r!CYLffr#fZaenCc44>dki7Gu{FUb% zB+-A`SD4X^|1Oqs=a}|`c1DMt^vI4FdVGh3P{?{3UDL0AdFP!@3BAe2!)D|D$mIPW^6u4*KFseLH&L$NH!GQT+$R`qQ+| z^pa_-X}f6`MK}aAjz~^otDn2_ZkR zEU%HTWT`jPY11!e6$eb=Ks4VW*^ojyq<`c8$?y1^k8!cT&@uO$8Zq-?=GJf22WjtU z`}JQi%VcUR^oO*S+DXil^Y#0*pR}Jbvn7rFz4n= z58`_G5ToEl+>Eh!hB5#C37=xAoP(bcEA-pNE8>uxi9Z%UiocWv@HBMz8fJJK!SDp^ z@HH-#-bNqz8{}>5gTK)Tk7FXdjb{B0Wi~vH<>YfHuVZ}QDXvliMRz4gT&skNfeLnE zlvHt(k}d`-X<`UY^+qUNM7e@}PUT8bspN<%#U;ilmx~EXcQH}9S~Mxwh-RgSn4%Pk zTb178HsyM8htf~nqYM&vD>sTemB9-2gnN~n#C^&TWw>}y86h50Mv1w~NHJe27mq4s zVu3PNJgtlqPboD@gJ@Uwi)WPN-MgAv=5d&TR@ed0Cce({F#u-L6UBHmQy zi#^Ib@t(3!>{Ff+?<-5iN6HHEiSnHI6z5rol~v+1^u{lgHR1#7 z-V%Q0P31`?MIVA)q>ajL;-vDT=%Iv&yOjQ7l`=_uuB;YEl(pihvQB)dtQW^{X4y|k z7A?xP;(2AVXjHBePb$^o8pR@RP?E$}WsZ1Dc}(nAo>o3kK36_eK2knbKEViZSousj zq8wGeRE{bCRDM!^R(?@_Rg>WheXpEWepJq&KX${Kpg{l9@T<pDwZpY~ zZ@o=FZ&FN}$z%#J1(`xkVWtREj495PU`jScnQSJ9Da~|+Dcf|V$z^hzyrx`Jp8l6f zn2Jp4raq<;bp!mUN$Og4GG^|n>MiiJR;bf3hc8s0Ru{qBdRBd0eMo&6-q$?L>GRdc z)FtY2%uGci}2Aq)g(@a`_&8*$11!x1bKy9EFqz%%7wZWQ2 zy9qwp5G_<2s#&#R@BqTK;o1l-LK~??YNO!2jn<;!2gGP&v{-mSHB}+6Y-9)QWAf_oLVyaRsrYk+gElMwOzcN%j zpbQfaE2G6D%FSY)GDbY6REWowO7VnJB^D{;#bTun9!|a3g86T|@_^W(JScW5bHy&@ zA@R2IxOhi-LhMx@6$g|>;vmj-zg1ol-zi(g_sXl{pUP|E7iE_?r@SrxP~H)3%DYOb zvP2XpR#B*gi6SK&XQC0JM2QroIFswCM2lWZjOeYziatu5=&Qtw>y!jBR&k4J#UpAI zuc%dgVw{pI#w&TEPU$M@m3%Q<86f5;1I21(iddse6>F7gVx2NwtXFOkFDSQ)4ayAh zqH?>~q}(AkD|d>Ql)J>s%H86)vO%0sHj1y5P2wNQW^qb+NqnumEWS~;h||h;@vHKN zID>QD-;_P-OX_C$X*<>3@YP;}XT1#`+YWV?`UX7ht?Cw>QPFx~E&Q?Vv|_-@V3}M! zEX4`hd)j()lwK$O>en%k9nwD3KG06%Ozf<7PS4e=^}mCro= z0sU_H@Snnq|4d(~KMh}TqqYrm5S^KA!c0V`doSsG;l;m!6Spn;Zha4(MCotpZ|g_& zSM)!$SM|5_58yR^0pIa`tPAm9#-ltNXcn-;fC5fsXz&iO5|q%M0;eKFM{?k_)3QM zCfEh!BOIOxW)FdL7@^GrcW3Cc!SEOf`d#2_82TJ=4~F&x_*#baI0_&S2QZgnMIfQQ z0mj=L1nq6`D2BEhJer~355Ad!(@r7AFtDx`n9Bs#fdVURffa^?wg-F*LwgH+D+9Zi z0yCe4TvsoF3}7uwD^LmTaquz*_QHf*oi0Zm2SR>^q2CBz!O#bRpJiz8fJvu-20vD; zWa#8$tYT=#!SLV+I@xnIL!`kE*v!z$+kJ_l9RS0(C1{k-7KVNn{0c++5xkY5cLBf3(5T+qfbFOYwUgHw z@H>Rq0gw%I0kQ`HZAI)ga6OpX8G+h4*@^T=_NTT>AlvQ(NS9o01DZN>HsKYpYsgmJ#ae%ewy4+Q*cTBT!A1F2v!-?@2Sob zL13LBt_7P6go4cs>_!VEz<>ixX#qHM67UBZsbJ_%>hC77#XveZgn?5l0pF342DUPA zjwLWJGBUv73>sH3PcpiIBN;fQ5STX^+2CjfcF6_iQO1?vSO!i~1m;yn4mh5HlK_Ev zmf-@!-qPk{z)1!!2PZRdx*?Pl1EfP6LresteMnplb}(@2AmAf2t^re>0h}KQ_|1$S zV5&19rhuIWiolr+8uQ@KFnWVY7l618e2IbU!Iv_`9pK9h^aE2J0C5la3Ik+2(j6e~ z29v%BHv*&!K->u?eG$lZZUeXlzl3oR>}801!9D}j267qVK5(7^vUOJj!@>Cs@gTUH z0kS)_T|hhpCS4Oo0i<6*%mtH92_pg0BOvC3uQfpJq<|qF1s5791CxFMfpGx7A!97K zgdv^=ml_xc?#U2OfqNOK0h2ul4L~0T^+lzxf&Jj?7&NzF&BJH`-@u@`1?wQjOmKe& z%{|f{WRq540E5PC_R2 zCVK!hCt&r&SPCY+1L7lat$`I_vJ*ga1$=l0>9CGLa|V2R2I-t^2GATrW3j|4@C1hV z3_Q`m^I+=F0L?QB^-4LDxW*JBUQ#%02C&T(hg60irKiCj!T7h-31Xi~~ zS;8Q{18Zc)ZQ%6`aT5H3ffvEM7-|xj>wd&OkNz4+i<&N}B-- z_)mto0sNPNBrw?zAU{rNH!ugTcszsrFExRIT?U~hGRXHLJ4stT4bEebebgcb-X0UG z0kVU7BZKs%4giKCKiEVa22h)VE!5Ef)#Et0hM}M@sN)#QKf&maY6If@1cqKzvNLp} zP64JvM*Y-Vff;}T%mVHNG+;J>wyFjKj{@_7IN%8bu#vieLH1M^GRP(>)pHTjKMh{Y zAp59j+v+la^z@8@Xz;VZb3hD$HbKCdt5DG&2)Y}Lc2B^GuTWoR=xFom76wk4h58CZ zN83|h1-2nR+MBu^cpWm@n!1yre+5RLSN9k6<6YQwbGk_@>9L_LBf$4d`WCKSsOb#&J159b)cmQFh3~)M-3Hb_e7Q+O)Yh4&7 z=t{c;xD;`6!Iv{kUBTHv4#M-n6b~?64W?_b=^8L}O3?oT7cih2p%pSrMPLIaDoZiL z)CXL`FcII(FqMMK7^a@!7N8Y2TMwSbP&a{RFw`~RI~nQ*@LddQ)7sq(>Yv(dhKey( zn*-d7G$(`aXHdV@9%QJufafx(4{HxG)D_@|fu(qMG+2U@3n)# z`;eaif5cFq1b@Pyu|PY_P*;M{&j>2&pdDeTRFC5f74^_zOFay6eguaDS3*7jb^&Cw zL~uDnZ3kB{v_9Y_hDK>LGqk>7*pxthPKRv?+I3*mnLzzdhn@-A_25Ss)DQJ}4DAN+ zV+`t-I&??S`hih@0`*baQy^&l!O#VP`m6pFL%R_S{Sv6(>Ps2g0Pr#f^$ddWJR_`~rjexxRs+-2~pqpgymoy%Mw`;FlO$DEMWDHWa*- zp;^JNGPGgf9l%aJ8wTFR(1wG_PJlK7e2_t72lfIbw2|Ns88nvYXfp(D6!>EXjVbyk z3=M5w|CFIcgVB}<)OTqPAZRh*lMHPP_!L8n1%J(;{;hw*(Bi<~GPH8=X$Fm9`i~5) z0{ja@O921M&?@ouRuMzL1l*IMUkdI8^hUhP!DvGSYP%`@7`g|HHbKyRVAz|W=Ye4x z0^VK{DMJ9#eRnYQNYJkVqdyb$%fM(m1U(xJyAbq3A#7-81c5eYL)#)KHZbf>5J=Ys z8xv@)Y=d110yedUF=*Xv3un+Cr49BY&>GqXof1R?7 z+9*GO)`&LB0}xZelrBK)NLv>M?O)oUUxLyT4E+*lFVlwl6BOv%=4Ocd!O$;()@L>^ zLp%V6t_ieOv*j|x!(iy0K_HHZfqO7$O=i26 zAsz=){Q+8^*~m74cmj;}L!h;qjp_`DMPSkkKx;2sDMKsr0TkuQ<&X9y{7K8Q~ZMQLSt|V-?Gicw@b_WAzO~Q63L;Mqb7ejdsOu7KX zFJP)aKx;J{)fu4uMH{st0OwS~M(qX=e}Jj201DNe>IR55@O*~yE|}U4Kzk%M(ifmC z0aKj;+Vi#1H6YN2Y)cum=Vx2S5QX673?&Tw3_}!wS1@QV(Dp0?Z>kI1a}3%Sw5?=_ z67VVp?Gf6ZX9z0WY6k5W+SV`xwa2v#+B>wZV+d-S>lw6xW6+s~?Ry5!d4=r8*t)cA(RHSJ~yCTq<+m3ccP$@mM zD*~;(?XVqz*5r2BjzH^jJ8VZ#DQ)P-j{2$SCwAzBKx=yYUknxf(|(>o>wZT7!!!XL z&Y*RUBa%UD8b=fm4S(->a129R3yx*bTEr2@&`=&nJdl9+3&DvDZ3#Gup)CU^11X5J z2yA1}TFc=8QW1_m=SXAFn#z&M(B^}$WSFU3E{0wQb^{*xV~>G-4E+gkKF|$mE(dpK z(AvpyHG|eqj%$D(hyy)4iWzzhxFXdi${cYp@HJ0>#p9B>OT72#-i zj$45lkkNJ=GZ}g=couLE!v6$606d8Do57DV^inYC1<;3rsSbc%4St594+B37Jcsb% zV6q>ej|5}PBIu*QWJ^FF3|`03E5RFpjR+qN-UMuhJO;dlp;v)l0nm16{pWa%p^p_J z)x^+|e=6)j&{2+5v<-qb9*nj@&`yA1UxJ1{o(lUCw6DOK41EbWo1w1+_h;x+z&8Q| zkUn&oIuJlzb?7~H1c0*Z&~++wNzkF=)Q5n1kfDoI=reUbWYjGc?IU#oWVGQ_$^)Ra zSL#9F1IW+^iX}m7#59#b>&Y~YLF>gdGecht4rAymz!3}`_DPFm=(mAm7+p2+&2;2VdkN{VReCDoEHqvNL0wJFke2{U5so(D#JJ!@8>4*= zC)yW5+XhCPa=wT-+rem8PUv34weuwa`qp=V(Z-x;TN>^;DJ?+X3#RAM&S;J6q~~8p z96aNsXLcfdH<<3dfp9$Uq-#Kb6HLzoI-YmF&CrQ4w-fXu;CC51J-d&g{{cS0(5YOX zGBk|I&ch7-E$}G@?eSznZ<(;Sj&w6&UjnVCGrIv-LH+>TouPjLzLueX1}!Ybm09q%q(A-v)$`0u@OUNA(A7FF;Wo3Tc|4L;votSJ}b>~byqo7Zq= z_%7bf_*8reZ{!E8M*hTmsKH8v5|1}fGx4p9SGh_lRC+6el;KLHG9GWAPEqc_w*~W+ zg?Rh)d1ZsLS$P#-80^EFlAkHZm2dDK;^3W3Dzgn48Q~%rnh*n;$SgYJSSR)V#+0qIs)%r};he2j;`(W9F~Tr_H~a&jpBp zfB9q>TFqXAC^EDcy0ur^>* zz^ehf0^SZd81Q+(@qljvP6zxJ@MoYF7#tWLm=u^6cuAluFfZ_$z@ot3f&BxA1da}@ z3aks95I8CD*1$Ug=LF6VTo|}K@cFwgL26K7 zP*hNIP+HIxLEfONf(nCr2lWdY7BnWPI;bINV$hVJX+ie{JsR{>(6XRaK`#Wo9JD=X zPtd-g4}v}mIv(^*(2qgC2mKYS2U~(8gA;-s!CArC!M@<`!9~G+f^Q5S8hmr`*x>r$ zmf-2Zw+G)7{7~@Y!Ha@d1g{BxF?eh6&fvF#4+MW4d?fg*;O~Qf2|i~LmH>;@5@SiW zq+2ev<@iheH;GtO!{b@>0m_ zA^SoOgd7ez9`bF-?;+uL#Wz?Gf55^v2K;p_QQxp_4 z)n(1IcC%h>z1G^(dZTrewaVIHoo2n;`iOO@b+z>c>n7_f*6r3k*0-(utnXVtvVLYg zX8qdwt@V5BFV-_wzx7XRdzd*aC@dr_EG#-KDJ(7Qk}y}8FRVvc->`vUBg1OKTEb?9 z%?(=+_I%j(usvb>!afN5EbMsLH(@`AoewvKhlEFjCx&N*XNUX3yN4Hr_X)o-d}#R1 z;bX(=!&}0qhu7XE$s?-5EwNJLabVnk|0mxwDP zawD#eD30hGF(6`C#F&Wch=z#Ph+87=h`2Z6;fN<97DqfAu{L5;#H$gzBHoTT81YHO z(TIOU{1EYL#2=ALWME`iWNc(gWJcs=k?zR+$ZI2eM&1xPIC5lUMdY~1iIGzxXGY!~ z`9S2OkxxY~i(D1?LgdSl+avcx?u+~&^0Ua}k>5oA82NkTUr~CLB`Pv1A<7Yz6_p+3 zi|QU#6xAo{#;BoDH%E<)s*h@knjUp~)ICuTMLiz1C~8I2ny43}wnpuYdMoNc)W=ar zqP~jyKI)gKbI~F?Ale!o6P+BL9(`$aPITAk9?_-I*GCVE9uZw0T^l_idUEuP=)0ot zkDeF(Wc1SLmC@^?Uy6P$dUy1@(TAcBM<0v+I{I|M49Q#D<;@Fk38)ILO z-5dK}?1!;OV!w+0KK7T`b8#XrAkG>W6PFy99(QS6PF&Zx9&x2{*T)Tt8xdC(S06Vi zZf4xGAi*&yQamzcT)X_$~3f;@^$`F#e19Q}I8=pGycxh)qaMxGce&&^@6z;f91E z31bp!5}FcjNw_OvUc$13wFxgL>`r(m;b6kY311|fNcbk!ZDod(KYD}7xbZgR` zN%ti^lC&UcNz!vk>ylnc+Lg3F>Eop1NvD(kNY;}>lB1FnlT(wsBzuytN-jz6mwZ$5 zsN~Az@ySieQrw`$3{NRbsYz)}nUr#C%AF|>q&%APRLZiHRVkZNcBQ#i2z#R4Y0t5DwHMj@*azE3 z+Nw}qTaE*cj~z!GUpans z{Oe)-!DYzM!m2o1S)e+WfR7Y3tLrrtL{PnD%+vskEQd&Zf1e2c^fPC#R>UUz(ni z-Zi~PdTILg>4VZoq?f1HrcX$poIWG{uJrrU=cPZHzBGMh`ug;j(qBv8o&Ik6q4dM) z$I`z}Kb`(t`kxtEMsP+%Mtp`nBQxWQ3~$C&8HE|WGx}!?$rzncl~I?`oG~rqwv0I$ zb2A>xcsk>mjMW(%GhWHqk@056{)~?@zQ{P4@mKJuHf2uDoRv8{^TEvdnF}+Q zXFi{~A#+RS>zR8q-^=_k^YhFTncrsql-7HT3f1G8){uSMa2b;)r}2R<8hT!Qs828GkKYEnYuC+FcmSC zNGjy#3i-K0ey%XLprkXS61wMddp+_2S8kEKRa8;iRMA>LwytVQQAHUFSyb8BQdUt> z)zDHbuQ@hn=Hkq9T*atPSqr6?)3u;P#w+1EmdHAmTu7wkqRJI=1q!(Wg`8#~r&+`m zDB=nfaRrLF;yFaFoKkPk&cgPT`SiSykBs4V_v|dQn^JVSym>BsoQH>N z=J8%9^?qGPK@p))mZc*er{*cR4teqo){vJq*#Y zRp?jKie}f;T3=Vz+R{&!6wzHd#W|8n*eFG8lp@Zun6oVAq8D?*#hh?)*M2pPO${>3 zVt%-oA1>yHOZZ{g>~czc?taa6Wz99R>;w3>qv*Ixm3HO$IB6dz=i}sjB?D#jfq&C$ zPDw6B#xs%pw3!BRJash1AE zSZ6Y~V$a|UmWS?0+o#qDRn; zOG_H6d-oyP%9GfLmn&=?Hh5TG0KUbJnRwXNeD6X6m?#Nxa2Clpcd8?vR85Ppr6&EU8*>b#D&-hfB_mXE<*H=ms<b1|F`D$2Y#Zsj8}>uB@T5wxUj|yso3Dh|KM{ z;~7rbQ&@-E$c#nuvi`E1K2PI?o?6T)6?00(oKgwbpv2SI zIg&MXR>qgt)KM7>XsiYwr{m*ve5K7Ydh_4ZjggE>gOQA~!2rdN=5lVip1Q_{>gJY? zq%n@kKH$#bq;omxTrOgMUJI<>Dy`pYSf6W19k%t~73Xce&?+#F@rYW?gRvac5oiok zY?hL|)(c81;er}kFX4iea6wAB^m(O|<#07w)_Zbiy(f1JXH(_INw)=ijp2Zd9~w6fTzR5nH=)bUf~Y7=oy#WN8<=cHXpZ- z73-4&qT5G#cBE5?bd0$;y9|Yq1t`Vci)J5O7$xqU zfsB}LB*?Rnk(HaXLMM_lQFd8vb{V=~T~%{4q*_B|wMKPoFIE}PL5S3;GGjtAGAnlB zCJ#SGZbcoHFXGB$Qsl~`DR=FRT-otdrK}&_tCW3#1P;nC&aSM>F5}4xEQe1cUr&*d zou@%~Oys^J!^pXlynTXStx8aYG|EO+sM_KP}@|~*i6-FDQj)z z1SZtfR@Br&ZmdUc@)_=j9=XhLd3Yt_DfS^IS}~PG7S<>L%SI)s1Tuhxj%pa0%Wxyp zi{;K}9kspq;r}WohmrQ##rG7;@ya9J0|d$u$|L;(mnW~Jtf8@`s;;WG?1GS8Q8q!= zlm}K%o=+wzf9PIEkvcPy!)s0{uZm0A%`9a%v$Rw?`K3I?mX=cPIi>9Fl(MT*$_uwr zUV`E8Cder4zm)P4yObyDQeJnIvg?YBjH2csmkVM^=>@U0GeS|PSllUMl;g_gAomMm zQD+Lp9iq#dBc~v5jvU3kIdV|;=E!-%nrBd_Ib6wE z!#4R4OLi8n`1NZuSdYj}Apz{^gx*UkC4IX}7fcX_2V4U%(+S9;jEk`shiy4JWV zAX9qXoS&QXb8~)f&d<&HxwwApWq4hjA8$f=G1-aq@}`rwgahRQ*yWW?&*d#;y?8h=4>tz6 zP2%#(r3Z+W^(Y z0y#gqlY%QQwOoqeiu3bweqPSc%f{iAve(P`c{x8X8;6}tFZ+yM_BFliYkJw&^s=w% zWna_FzNVLbO)qhK8!+Qe4OBeYfA)Ld0bHFwF461Pi^ zn;_~ASXxl?bo*qt1(Ct9`k)pJ;wW;*6<5?|LDWt_q;V`z$ZjA{ZNsGU*1Ec?ma(CF$VP|SP?i{zPtOe?9t}1JWrfQqV zXP4DX#STG(;jk63+ejKCf3*&8ju_3N8IA!dnV4)QSsINbX*DU3*+?L}NtT8qi7iKx zG#v>O%9^k}QZ=?kMwM4hvhm29C}3lyyi?H#r%FoF+Rd%yMp?>@vVe`Uly{T`0+*%S zC=1vqOZkPely{V+{BLD3t~$zs%Z{>?!?;|Q@@83<%7#YSU5H69l4V&)l6sK>m4yV- zi)2|Al2|V!NxhKJsh0~^To!rBWg(HvLXs>CdMsSxs%&B^i)2|Al4Mz=KxH9;$|6~o zg(NNuNwO>?be8496_-U`a#={^vXIo+R5`Y)zE-Ay1tQt9oXseI*`(Y`#>$Xt`CB7@ zYvu1a`8!_z*2&*``P(3Wx%Ewu@;gw$@H6tE+0LfG>}}HnFv=4*Q>FG$fNuPChZ#KTVBOq=>P)uCcnd zLf))xK+I+gqP1A6HMP``8OrKv8^)p~wM?ZfUDC+`$q~-Q-VN%HCfZVqb!Y8Z#BCv~ z;xXoy2^~^-OA{76$cj>OOaBq$p{%r9`ke@r>0$${xfOk!%7Kzrw$iYU`by6eBdMpV zxdjXI7CFVB-mbEyrpC#w6J(@(x4f!soJ=P?xXW6Vjsvb(tI~gP=Scq##OjoXMY!_F z1j-v*YK(L%8!iYKxF}Vh^cg@rbxCg&6PZjWkImvM%57#vFaiblN|p3 zTT@F#U2Az|Z5f8iN{q6VRn7Ia81u_2s*v^tnd+4%_wumK=WE5GC5}9DO7pRh$tm^a zxG|!jZ4uBZ>l&wFx3a3Hu~jO><(7>fB%Lp}JR!vu^#PD{l-%reyV>b>v%BS%>phoS zoK!|NDO=PhbzbiCRb zLVXz_-p&x|yL()|&JeO5;^byi$7R7N1ch}Jh}T3OS6=6X(gXLnx^{-hntELM7eaVx z>A}2zAswj(kE@_FM5@>0D(nm~v{H0Y2)hy6r@iNxK%UBPuUp>5V_3*+KTjMfIUW<8n_2uCemWNkZ9$sO2c!lNR6_$rrQJ@P- z;w6-a*CZa^@rLDKZMi@�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�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

) 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 diff --git a/AoCTiles/github_languages.yml b/AoCTiles/github_languages.yml deleted file mode 100644 index 3a41c5a..0000000 --- a/AoCTiles/github_languages.yml +++ /dev/null @@ -1,7981 +0,0 @@ -# SOURCE: https://raw.githubusercontent.com/github/linguist/master/lib/linguist/languages.yml - -# Defines all Languages known to GitHub. -# -# fs_name - Optional field. Only necessary as a replacement for the sample directory name if the -# language name is not a valid filename under the Windows filesystem (e.g., if it -# contains an asterisk). -# type - Either data, programming, markup, prose, or nil -# aliases - An Array of additional aliases (implicitly -# includes name.downcase) -# ace_mode - A String name of the Ace Mode used for highlighting whenever -# a file is edited. This must match one of the filenames in http://git.io/3XO_Cg. -# Use "text" if a mode does not exist. -# codemirror_mode - A String name of the CodeMirror Mode used for highlighting whenever a file is edited. -# This must match a mode from https://git.io/vi9Fx -# codemirror_mime_type - A String name of the file mime type used for highlighting whenever a file is edited. -# This should match the `mime` associated with the mode from https://git.io/f4SoQ -# wrap - Boolean wrap to enable line wrapping (default: false) -# extensions - An Array of associated extensions (the first one is -# considered the primary extension, the others should be -# listed alphabetically) -# filenames - An Array of filenames commonly associated with the language -# interpreters - An Array of associated interpreters -# language_id - Integer used as a language-name-independent indexed field so that we can rename -# languages in Linguist without reindexing all the code on GitHub. Must not be -# changed for existing languages without the explicit permission of GitHub staff. -# color - CSS hex color to represent the language. Only used if type is "programming" or "markup". -# tm_scope - The TextMate scope that represents this programming -# language. This should match one of the scopes listed in -# the grammars.yml file. Use "none" if there is no grammar -# for this language. -# group - Name of the parent language. Languages in a group are counted -# in the statistics as the parent language. -# -# Any additions or modifications (even trivial) should have corresponding -# test changes in `test/test_blob.rb`. -# -# Please keep this list alphabetized. Capitalization comes before lowercase. ---- -1C Enterprise: - type: programming - color: "#814CCC" - extensions: - - ".bsl" - - ".os" - tm_scope: source.bsl - ace_mode: text - language_id: 0 -2-Dimensional Array: - type: data - color: "#38761D" - extensions: - - ".2da" - tm_scope: source.2da - ace_mode: text - language_id: 387204628 -4D: - type: programming - color: "#004289" - extensions: - - ".4dm" - tm_scope: source.4dm - ace_mode: text - language_id: 577529595 -ABAP: - type: programming - color: "#E8274B" - extensions: - - ".abap" - tm_scope: source.abap - ace_mode: abap - language_id: 1 -ABAP CDS: - type: programming - color: "#555e25" - extensions: - - ".asddls" - tm_scope: source.abapcds - language_id: 452681853 - ace_mode: text -ABNF: - type: data - ace_mode: text - extensions: - - ".abnf" - tm_scope: source.abnf - language_id: 429 -AGS Script: - type: programming - color: "#B9D9FF" - aliases: - - ags - extensions: - - ".asc" - - ".ash" - tm_scope: source.c++ - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-c++src - language_id: 2 -AIDL: - type: programming - color: "#34EB6B" - tm_scope: source.aidl - extensions: - - ".aidl" - ace_mode: text - interpreters: - - aidl - language_id: 451700185 -AL: - type: programming - color: "#3AA2B5" - extensions: - - ".al" - tm_scope: source.al - ace_mode: text - language_id: 658971832 -AMPL: - type: programming - color: "#E6EFBB" - extensions: - - ".ampl" - - ".mod" - tm_scope: source.ampl - ace_mode: text - language_id: 3 -ANTLR: - type: programming - color: "#9DC3FF" - extensions: - - ".g4" - tm_scope: source.antlr - ace_mode: text - language_id: 4 -API Blueprint: - type: markup - color: "#2ACCA8" - ace_mode: markdown - extensions: - - ".apib" - tm_scope: text.html.markdown.source.gfm.apib - language_id: 5 -APL: - type: programming - color: "#5A8164" - extensions: - - ".apl" - - ".dyalog" - interpreters: - - apl - - aplx - - dyalog - tm_scope: source.apl - ace_mode: text - codemirror_mode: apl - codemirror_mime_type: text/apl - language_id: 6 -ASL: - type: programming - ace_mode: text - extensions: - - ".asl" - - ".dsl" - tm_scope: source.asl - language_id: 124996147 -ASN.1: - type: data - extensions: - - ".asn" - - ".asn1" - tm_scope: source.asn - ace_mode: text - codemirror_mode: asn.1 - codemirror_mime_type: text/x-ttcn-asn - language_id: 7 -ASP.NET: - type: programming - tm_scope: text.html.asp - color: "#9400ff" - aliases: - - aspx - - aspx-vb - extensions: - - ".asax" - - ".ascx" - - ".ashx" - - ".asmx" - - ".aspx" - - ".axd" - ace_mode: text - codemirror_mode: htmlembedded - codemirror_mime_type: application/x-aspx - language_id: 564186416 -ATS: - type: programming - color: "#1ac620" - aliases: - - ats2 - extensions: - - ".dats" - - ".hats" - - ".sats" - tm_scope: source.ats - ace_mode: ocaml - language_id: 9 -ActionScript: - type: programming - tm_scope: source.actionscript.3 - color: "#882B0F" - aliases: - - actionscript 3 - - actionscript3 - - as3 - extensions: - - ".as" - ace_mode: actionscript - language_id: 10 -Ada: - type: programming - color: "#02f88c" - extensions: - - ".adb" - - ".ada" - - ".ads" - aliases: - - ada95 - - ada2005 - tm_scope: source.ada - ace_mode: ada - language_id: 11 -Adblock Filter List: - type: data - color: "#800000" - ace_mode: text - extensions: - - ".txt" - aliases: - - ad block filters - - ad block - - adb - - adblock - tm_scope: text.adblock - language_id: 884614762 -Adobe Font Metrics: - type: data - color: "#fa0f00" - tm_scope: source.afm - extensions: - - ".afm" - aliases: - - acfm - - adobe composite font metrics - - adobe multiple font metrics - - amfm - ace_mode: text - language_id: 147198098 -Agda: - type: programming - color: "#315665" - extensions: - - ".agda" - tm_scope: source.agda - ace_mode: text - language_id: 12 -Alloy: - type: programming - color: "#64C800" - extensions: - - ".als" - tm_scope: source.alloy - ace_mode: text - language_id: 13 -Alpine Abuild: - type: programming - color: "#0D597F" - group: Shell - aliases: - - abuild - - apkbuild - filenames: - - APKBUILD - tm_scope: source.shell - ace_mode: sh - codemirror_mode: shell - codemirror_mime_type: text/x-sh - language_id: 14 -Altium Designer: - type: data - color: "#A89663" - aliases: - - altium - extensions: - - ".OutJob" - - ".PcbDoc" - - ".PrjPCB" - - ".SchDoc" - tm_scope: source.ini - ace_mode: ini - language_id: 187772328 -AngelScript: - type: programming - color: "#C7D7DC" - extensions: - - ".as" - - ".angelscript" - tm_scope: source.angelscript - ace_mode: text - codemirror_mode: clike - codemirror_mime_type: text/x-c++src - language_id: 389477596 -Ant Build System: - type: data - color: "#A9157E" - tm_scope: text.xml.ant - filenames: - - ant.xml - - build.xml - ace_mode: xml - codemirror_mode: xml - codemirror_mime_type: application/xml - language_id: 15 -Antlers: - type: markup - color: "#ff269e" - extensions: - - ".antlers.html" - - ".antlers.php" - - ".antlers.xml" - tm_scope: text.html.statamic - ace_mode: text - language_id: 1067292663 -ApacheConf: - type: data - color: "#d12127" - aliases: - - aconf - - apache - extensions: - - ".apacheconf" - - ".vhost" - filenames: - - ".htaccess" - - apache2.conf - - httpd.conf - tm_scope: source.apache-config - ace_mode: apache_conf - language_id: 16 -Apex: - type: programming - color: "#1797c0" - extensions: - - ".cls" - tm_scope: source.java - ace_mode: java - codemirror_mode: clike - codemirror_mime_type: text/x-java - language_id: 17 -Apollo Guidance Computer: - type: programming - color: "#0B3D91" - group: Assembly - extensions: - - ".agc" - tm_scope: source.agc - ace_mode: assembly_x86 - language_id: 18 -AppleScript: - type: programming - aliases: - - osascript - extensions: - - ".applescript" - - ".scpt" - interpreters: - - osascript - tm_scope: source.applescript - ace_mode: applescript - color: "#101F1F" - language_id: 19 -Arc: - type: programming - color: "#aa2afe" - extensions: - - ".arc" - tm_scope: none - ace_mode: text - language_id: 20 -AsciiDoc: - type: prose - color: "#73a0c5" - ace_mode: asciidoc - wrap: true - extensions: - - ".asciidoc" - - ".adoc" - - ".asc" - tm_scope: text.html.asciidoc - language_id: 22 -AspectJ: - type: programming - color: "#a957b0" - extensions: - - ".aj" - tm_scope: source.aspectj - ace_mode: text - language_id: 23 -Assembly: - type: programming - color: "#6E4C13" - aliases: - - asm - - nasm - extensions: - - ".asm" - - ".a51" - - ".i" - - ".inc" - - ".nas" - - ".nasm" - tm_scope: source.assembly - ace_mode: assembly_x86 - language_id: 24 -Astro: - type: markup - color: "#ff5a03" - extensions: - - ".astro" - tm_scope: source.astro - ace_mode: html - codemirror_mode: jsx - codemirror_mime_type: text/jsx - language_id: 578209015 -Asymptote: - type: programming - color: "#ff0000" - extensions: - - ".asy" - interpreters: - - asy - tm_scope: source.c++ - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-kotlin - language_id: 591605007 -Augeas: - type: programming - color: "#9CC134" - extensions: - - ".aug" - tm_scope: none - ace_mode: text - language_id: 25 -AutoHotkey: - type: programming - color: "#6594b9" - aliases: - - ahk - extensions: - - ".ahk" - - ".ahkl" - tm_scope: source.ahk - ace_mode: autohotkey - language_id: 26 -AutoIt: - type: programming - color: "#1C3552" - aliases: - - au3 - - AutoIt3 - - AutoItScript - extensions: - - ".au3" - tm_scope: source.autoit - ace_mode: autohotkey - language_id: 27 -Avro IDL: - type: data - color: "#0040FF" - extensions: - - ".avdl" - tm_scope: source.avro - ace_mode: text - language_id: 785497837 -Awk: - type: programming - color: "#c30e9b" - extensions: - - ".awk" - - ".auk" - - ".gawk" - - ".mawk" - - ".nawk" - interpreters: - - awk - - gawk - - mawk - - nawk - tm_scope: source.awk - ace_mode: text - language_id: 28 -BASIC: - type: programming - extensions: - - ".bas" - tm_scope: source.basic - ace_mode: text - color: "#ff0000" - language_id: 28923963 -Ballerina: - type: programming - extensions: - - ".bal" - tm_scope: source.ballerina - ace_mode: text - color: "#FF5000" - language_id: 720859680 -Batchfile: - type: programming - aliases: - - bat - - batch - - dosbatch - - winbatch - extensions: - - ".bat" - - ".cmd" - tm_scope: source.batchfile - ace_mode: batchfile - color: "#C1F12E" - language_id: 29 -Beef: - type: programming - color: "#a52f4e" - extensions: - - ".bf" - tm_scope: source.cs - ace_mode: csharp - codemirror_mode: clike - codemirror_mime_type: text/x-csharp - language_id: 545626333 -Befunge: - type: programming - extensions: - - ".befunge" - - ".bf" - tm_scope: source.befunge - ace_mode: text - language_id: 30 -Berry: - type: programming - extensions: - - ".be" - tm_scope: source.berry - ace_mode: text - color: "#15A13C" - aliases: - - be - language_id: 121855308 -BibTeX: - type: markup - color: "#778899" - group: TeX - extensions: - - ".bib" - - ".bibtex" - tm_scope: text.bibtex - ace_mode: tex - codemirror_mode: stex - codemirror_mime_type: text/x-stex - language_id: 982188347 -Bicep: - type: programming - color: "#519aba" - extensions: - - ".bicep" - tm_scope: source.bicep - ace_mode: text - language_id: 321200902 -Bikeshed: - type: markup - color: "#5562ac" - extensions: - - ".bs" - tm_scope: source.csswg - ace_mode: html - codemirror_mode: htmlmixed - codemirror_mime_type: text/html - language_id: 1055528081 -Bison: - type: programming - color: "#6A463F" - group: Yacc - tm_scope: source.yacc - extensions: - - ".bison" - ace_mode: text - language_id: 31 -BitBake: - type: programming - color: "#00bce4" - tm_scope: none - extensions: - - ".bb" - ace_mode: text - language_id: 32 -Blade: - type: markup - color: "#f7523f" - extensions: - - ".blade" - - ".blade.php" - tm_scope: text.html.php.blade - ace_mode: text - language_id: 33 -BlitzBasic: - type: programming - color: "#00FFAE" - aliases: - - b3d - - blitz3d - - blitzplus - - bplus - extensions: - - ".bb" - - ".decls" - tm_scope: source.blitzmax - ace_mode: text - language_id: 34 -BlitzMax: - type: programming - color: "#cd6400" - extensions: - - ".bmx" - aliases: - - bmax - tm_scope: source.blitzmax - ace_mode: text - language_id: 35 -Bluespec: - type: programming - color: "#12223c" - extensions: - - ".bsv" - tm_scope: source.bsv - ace_mode: verilog - language_id: 36 -Boo: - type: programming - color: "#d4bec1" - extensions: - - ".boo" - ace_mode: text - tm_scope: source.boo - language_id: 37 -Boogie: - type: programming - color: "#c80fa0" - extensions: - - ".bpl" - interpreters: - - boogie - tm_scope: source.boogie - ace_mode: text - language_id: 955017407 -Brainfuck: - type: programming - color: "#2F2530" - extensions: - - ".b" - - ".bf" - tm_scope: source.bf - ace_mode: text - codemirror_mode: brainfuck - codemirror_mime_type: text/x-brainfuck - language_id: 38 -BrighterScript: - type: programming - color: "#66AABB" - extensions: - - ".bs" - tm_scope: source.brs - ace_mode: text - language_id: 943571030 -Brightscript: - type: programming - color: "#662D91" - extensions: - - ".brs" - tm_scope: source.brs - ace_mode: text - language_id: 39 -Browserslist: - type: data - color: "#ffd539" - filenames: - - ".browserslistrc" - - browserslist - tm_scope: text.browserslist - ace_mode: text - language_id: 153503348 -C: - type: programming - color: "#555555" - extensions: - - ".c" - - ".cats" - - ".h" - - ".idc" - interpreters: - - tcc - tm_scope: source.c - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-csrc - language_id: 41 -C#: - type: programming - ace_mode: csharp - codemirror_mode: clike - codemirror_mime_type: text/x-csharp - tm_scope: source.cs - color: "#178600" - aliases: - - csharp - - cake - - cakescript - extensions: - - ".cs" - - ".cake" - - ".csx" - - ".linq" - language_id: 42 -C++: - type: programming - tm_scope: source.c++ - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-c++src - color: "#f34b7d" - aliases: - - cpp - extensions: - - ".cpp" - - ".c++" - - ".cc" - - ".cp" - - ".cxx" - - ".h" - - ".h++" - - ".hh" - - ".hpp" - - ".hxx" - - ".inc" - - ".inl" - - ".ino" - - ".ipp" - - ".ixx" - - ".re" - - ".tcc" - - ".tpp" - language_id: 43 -C-ObjDump: - type: data - extensions: - - ".c-objdump" - tm_scope: objdump.x86asm - ace_mode: assembly_x86 - language_id: 44 -C2hs Haskell: - type: programming - group: Haskell - aliases: - - c2hs - extensions: - - ".chs" - tm_scope: source.haskell - ace_mode: haskell - codemirror_mode: haskell - codemirror_mime_type: text/x-haskell - language_id: 45 -CAP CDS: - type: programming - tm_scope: source.cds - color: "#0092d1" - aliases: - - cds - extensions: - - ".cds" - ace_mode: text - language_id: 390788699 -CIL: - type: data - tm_scope: source.cil - extensions: - - ".cil" - ace_mode: text - language_id: 29176339 -CLIPS: - type: programming - color: "#00A300" - extensions: - - ".clp" - tm_scope: source.clips - ace_mode: text - language_id: 46 -CMake: - type: programming - color: "#DA3434" - extensions: - - ".cmake" - - ".cmake.in" - filenames: - - CMakeLists.txt - tm_scope: source.cmake - ace_mode: text - codemirror_mode: cmake - codemirror_mime_type: text/x-cmake - language_id: 47 -COBOL: - type: programming - extensions: - - ".cob" - - ".cbl" - - ".ccp" - - ".cobol" - - ".cpy" - tm_scope: source.cobol - ace_mode: cobol - codemirror_mode: cobol - codemirror_mime_type: text/x-cobol - language_id: 48 -CODEOWNERS: - type: data - filenames: - - CODEOWNERS - tm_scope: text.codeowners - ace_mode: gitignore - language_id: 321684729 -COLLADA: - type: data - color: "#F1A42B" - extensions: - - ".dae" - tm_scope: text.xml - ace_mode: xml - codemirror_mode: xml - codemirror_mime_type: text/xml - language_id: 49 -CSON: - type: data - color: "#244776" - tm_scope: source.coffee - ace_mode: coffee - codemirror_mode: coffeescript - codemirror_mime_type: text/x-coffeescript - extensions: - - ".cson" - language_id: 424 -CSS: - type: markup - tm_scope: source.css - ace_mode: css - codemirror_mode: css - codemirror_mime_type: text/css - color: "#563d7c" - extensions: - - ".css" - language_id: 50 -CSV: - type: data - color: "#237346" - ace_mode: text - tm_scope: none - extensions: - - ".csv" - language_id: 51 -CUE: - type: programming - extensions: - - ".cue" - tm_scope: source.cue - ace_mode: text - color: "#5886E1" - language_id: 356063509 -CWeb: - type: programming - color: "#00007a" - extensions: - - ".w" - tm_scope: none - ace_mode: text - language_id: 657332628 -Cabal Config: - type: data - color: "#483465" - aliases: - - Cabal - extensions: - - ".cabal" - filenames: - - cabal.config - - cabal.project - ace_mode: haskell - codemirror_mode: haskell - codemirror_mime_type: text/x-haskell - tm_scope: source.cabal - language_id: 677095381 -Cadence: - type: programming - color: "#00ef8b" - ace_mode: text - tm_scope: source.cadence - extensions: - - ".cdc" - language_id: 270184138 -Cairo: - type: programming - color: "#ff4a48" - ace_mode: text - tm_scope: source.cairo - extensions: - - ".cairo" - language_id: 620599567 -CameLIGO: - type: programming - color: "#3be133" - extensions: - - ".mligo" - tm_scope: source.mligo - ace_mode: ocaml - codemirror_mode: mllike - codemirror_mime_type: text/x-ocaml - group: LigoLANG - language_id: 829207807 -Cap'n Proto: - type: programming - color: "#c42727" - tm_scope: source.capnp - extensions: - - ".capnp" - ace_mode: text - language_id: 52 -CartoCSS: - type: programming - aliases: - - Carto - extensions: - - ".mss" - ace_mode: text - tm_scope: source.css.mss - language_id: 53 -Ceylon: - type: programming - color: "#dfa535" - extensions: - - ".ceylon" - tm_scope: source.ceylon - ace_mode: text - language_id: 54 -Chapel: - type: programming - color: "#8dc63f" - aliases: - - chpl - extensions: - - ".chpl" - tm_scope: source.chapel - ace_mode: text - language_id: 55 -Charity: - type: programming - extensions: - - ".ch" - tm_scope: none - ace_mode: text - language_id: 56 -Checksums: - type: data - tm_scope: text.checksums - aliases: - - checksum - - hash - - hashes - - sum - - sums - filenames: - - MD5SUMS - - SHA1SUMS - - SHA256SUMS - - SHA256SUMS.txt - - SHA512SUMS - - checksums.txt - - cksums - - md5sum.txt - extensions: - - ".crc32" - - ".md2" - - ".md4" - - ".md5" - - ".sha1" - - ".sha2" - - ".sha224" - - ".sha256" - - ".sha256sum" - - ".sha3" - - ".sha384" - - ".sha512" - ace_mode: text - language_id: 372063053 -ChucK: - type: programming - color: "#3f8000" - extensions: - - ".ck" - tm_scope: source.java - ace_mode: java - codemirror_mode: clike - codemirror_mime_type: text/x-java - language_id: 57 -Cirru: - type: programming - color: "#ccccff" - tm_scope: source.cirru - ace_mode: cirru - extensions: - - ".cirru" - language_id: 58 -Clarion: - type: programming - color: "#db901e" - ace_mode: text - extensions: - - ".clw" - tm_scope: source.clarion - language_id: 59 -Clarity: - type: programming - color: "#5546ff" - ace_mode: lisp - extensions: - - ".clar" - tm_scope: source.clar - language_id: 91493841 -Classic ASP: - type: programming - color: "#6a40fd" - tm_scope: text.html.asp - aliases: - - asp - extensions: - - ".asp" - ace_mode: text - language_id: 8 -Clean: - type: programming - color: "#3F85AF" - extensions: - - ".icl" - - ".dcl" - tm_scope: source.clean - ace_mode: text - language_id: 60 -Click: - type: programming - color: "#E4E6F3" - extensions: - - ".click" - tm_scope: source.click - ace_mode: text - language_id: 61 -Clojure: - type: programming - tm_scope: source.clojure - ace_mode: clojure - codemirror_mode: clojure - codemirror_mime_type: text/x-clojure - color: "#db5855" - extensions: - - ".clj" - - ".bb" - - ".boot" - - ".cl2" - - ".cljc" - - ".cljs" - - ".cljs.hl" - - ".cljscm" - - ".cljx" - - ".hic" - filenames: - - riemann.config - interpreters: - - bb - language_id: 62 -Closure Templates: - type: markup - color: "#0d948f" - ace_mode: soy_template - codemirror_mode: soy - codemirror_mime_type: text/x-soy - aliases: - - soy - extensions: - - ".soy" - tm_scope: text.html.soy - language_id: 357046146 -Cloud Firestore Security Rules: - type: data - color: "#FFA000" - ace_mode: less - codemirror_mode: css - codemirror_mime_type: text/css - tm_scope: source.firestore - filenames: - - firestore.rules - language_id: 407996372 -CoNLL-U: - type: data - extensions: - - ".conllu" - - ".conll" - tm_scope: text.conllu - ace_mode: text - aliases: - - CoNLL - - CoNLL-X - language_id: 421026389 -CodeQL: - type: programming - color: "#140f46" - extensions: - - ".ql" - - ".qll" - tm_scope: source.ql - ace_mode: text - language_id: 424259634 - aliases: - - ql -CoffeeScript: - type: programming - tm_scope: source.coffee - ace_mode: coffee - codemirror_mode: coffeescript - codemirror_mime_type: text/x-coffeescript - color: "#244776" - aliases: - - coffee - - coffee-script - extensions: - - ".coffee" - - "._coffee" - - ".cake" - - ".cjsx" - - ".iced" - filenames: - - Cakefile - interpreters: - - coffee - language_id: 63 -ColdFusion: - type: programming - ace_mode: coldfusion - color: "#ed2cd6" - aliases: - - cfm - - cfml - - coldfusion html - extensions: - - ".cfm" - - ".cfml" - tm_scope: text.html.cfm - language_id: 64 -ColdFusion CFC: - type: programming - color: "#ed2cd6" - group: ColdFusion - ace_mode: coldfusion - aliases: - - cfc - extensions: - - ".cfc" - tm_scope: source.cfscript - language_id: 65 -Common Lisp: - type: programming - tm_scope: source.lisp - color: "#3fb68b" - aliases: - - lisp - extensions: - - ".lisp" - - ".asd" - - ".cl" - - ".l" - - ".lsp" - - ".ny" - - ".podsl" - - ".sexp" - interpreters: - - lisp - - sbcl - - ccl - - clisp - - ecl - ace_mode: lisp - codemirror_mode: commonlisp - codemirror_mime_type: text/x-common-lisp - language_id: 66 -Common Workflow Language: - aliases: - - cwl - type: programming - ace_mode: yaml - codemirror_mode: yaml - codemirror_mime_type: text/x-yaml - extensions: - - ".cwl" - interpreters: - - cwl-runner - color: "#B5314C" - tm_scope: source.cwl - language_id: 988547172 -Component Pascal: - type: programming - color: "#B0CE4E" - extensions: - - ".cp" - - ".cps" - tm_scope: source.pascal - ace_mode: pascal - codemirror_mode: pascal - codemirror_mime_type: text/x-pascal - language_id: 67 -Cool: - type: programming - extensions: - - ".cl" - tm_scope: source.cool - ace_mode: text - language_id: 68 -Coq: - type: programming - color: "#d0b68c" - extensions: - - ".coq" - - ".v" - tm_scope: source.coq - ace_mode: text - language_id: 69 -Cpp-ObjDump: - type: data - extensions: - - ".cppobjdump" - - ".c++-objdump" - - ".c++objdump" - - ".cpp-objdump" - - ".cxx-objdump" - tm_scope: objdump.x86asm - aliases: - - c++-objdump - ace_mode: assembly_x86 - language_id: 70 -Creole: - type: prose - wrap: true - extensions: - - ".creole" - tm_scope: text.html.creole - ace_mode: text - language_id: 71 -Crystal: - type: programming - color: "#000100" - extensions: - - ".cr" - ace_mode: ruby - codemirror_mode: crystal - codemirror_mime_type: text/x-crystal - tm_scope: source.crystal - interpreters: - - crystal - language_id: 72 -Csound: - type: programming - color: "#1a1a1a" - aliases: - - csound-orc - extensions: - - ".orc" - - ".udo" - tm_scope: source.csound - ace_mode: csound_orchestra - language_id: 73 -Csound Document: - type: programming - color: "#1a1a1a" - aliases: - - csound-csd - extensions: - - ".csd" - tm_scope: source.csound-document - ace_mode: csound_document - language_id: 74 -Csound Score: - type: programming - color: "#1a1a1a" - aliases: - - csound-sco - extensions: - - ".sco" - tm_scope: source.csound-score - ace_mode: csound_score - language_id: 75 -Cuda: - type: programming - extensions: - - ".cu" - - ".cuh" - tm_scope: source.cuda-c++ - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-c++src - color: "#3A4E3A" - language_id: 77 -Cue Sheet: - type: data - extensions: - - ".cue" - tm_scope: source.cuesheet - ace_mode: text - language_id: 942714150 -Curry: - type: programming - color: "#531242" - extensions: - - ".curry" - tm_scope: source.curry - ace_mode: haskell - language_id: 439829048 -Cycript: - type: programming - extensions: - - ".cy" - tm_scope: source.js - ace_mode: javascript - codemirror_mode: javascript - codemirror_mime_type: text/javascript - language_id: 78 -Cypher: - type: programming - color: "#34c0eb" - extensions: - - ".cyp" - - ".cypher" - tm_scope: source.cypher - ace_mode: text - language_id: 850806976 -Cython: - type: programming - color: "#fedf5b" - extensions: - - ".pyx" - - ".pxd" - - ".pxi" - aliases: - - pyrex - tm_scope: source.cython - ace_mode: text - codemirror_mode: python - codemirror_mime_type: text/x-cython - language_id: 79 -D: - type: programming - color: "#ba595e" - aliases: - - Dlang - extensions: - - ".d" - - ".di" - tm_scope: source.d - ace_mode: d - codemirror_mode: d - codemirror_mime_type: text/x-d - language_id: 80 -D-ObjDump: - type: data - extensions: - - ".d-objdump" - tm_scope: objdump.x86asm - ace_mode: assembly_x86 - language_id: 81 -DIGITAL Command Language: - type: programming - aliases: - - dcl - extensions: - - ".com" - tm_scope: none - ace_mode: text - language_id: 82 -DM: - type: programming - color: "#447265" - extensions: - - ".dm" - aliases: - - byond - tm_scope: source.dm - ace_mode: c_cpp - language_id: 83 -DNS Zone: - type: data - extensions: - - ".zone" - - ".arpa" - tm_scope: text.zone_file - ace_mode: text - language_id: 84 -DTrace: - type: programming - aliases: - - dtrace-script - extensions: - - ".d" - interpreters: - - dtrace - tm_scope: source.c - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-csrc - language_id: 85 -Dafny: - type: programming - color: "#FFEC25" - extensions: - - ".dfy" - interpreters: - - dafny - tm_scope: text.dfy.dafny - ace_mode: text - language_id: 969323346 -Darcs Patch: - type: data - color: "#8eff23" - aliases: - - dpatch - extensions: - - ".darcspatch" - - ".dpatch" - tm_scope: none - ace_mode: text - language_id: 86 -Dart: - type: programming - color: "#00B4AB" - extensions: - - ".dart" - interpreters: - - dart - tm_scope: source.dart - ace_mode: dart - codemirror_mode: dart - codemirror_mime_type: application/dart - language_id: 87 -DataWeave: - type: programming - color: "#003a52" - extensions: - - ".dwl" - ace_mode: text - tm_scope: source.data-weave - language_id: 974514097 -Debian Package Control File: - type: data - color: "#D70751" - extensions: - - ".dsc" - tm_scope: source.deb-control - ace_mode: text - language_id: 527438264 -DenizenScript: - type: programming - color: "#FBEE96" - ace_mode: yaml - codemirror_mode: yaml - codemirror_mime_type: text/x-yaml - extensions: - - ".dsc" - tm_scope: source.denizenscript - language_id: 435000929 -Dhall: - type: programming - color: "#dfafff" - extensions: - - ".dhall" - tm_scope: source.haskell - ace_mode: haskell - codemirror_mode: haskell - codemirror_mime_type: text/x-haskell - language_id: 793969321 -Diff: - type: data - extensions: - - ".diff" - - ".patch" - aliases: - - udiff - tm_scope: source.diff - ace_mode: diff - codemirror_mode: diff - codemirror_mime_type: text/x-diff - language_id: 88 -DirectX 3D File: - type: data - color: "#aace60" - extensions: - - ".x" - ace_mode: text - tm_scope: none - language_id: 201049282 -Dockerfile: - type: programming - aliases: - - Containerfile - color: "#384d54" - tm_scope: source.dockerfile - extensions: - - ".dockerfile" - filenames: - - Containerfile - - Dockerfile - ace_mode: dockerfile - codemirror_mode: dockerfile - codemirror_mime_type: text/x-dockerfile - language_id: 89 -Dogescript: - type: programming - color: "#cca760" - extensions: - - ".djs" - tm_scope: none - ace_mode: text - language_id: 90 -Dylan: - type: programming - color: "#6c616e" - extensions: - - ".dylan" - - ".dyl" - - ".intr" - - ".lid" - tm_scope: source.dylan - ace_mode: text - codemirror_mode: dylan - codemirror_mime_type: text/x-dylan - language_id: 91 -E: - type: programming - color: "#ccce35" - extensions: - - ".e" - interpreters: - - rune - tm_scope: none - ace_mode: text - language_id: 92 -E-mail: - type: data - aliases: - - email - - eml - - mail - - mbox - extensions: - - ".eml" - - ".mbox" - tm_scope: text.eml.basic - ace_mode: text - codemirror_mode: mbox - codemirror_mime_type: application/mbox - language_id: 529653389 -EBNF: - type: data - extensions: - - ".ebnf" - tm_scope: source.ebnf - ace_mode: text - codemirror_mode: ebnf - codemirror_mime_type: text/x-ebnf - language_id: 430 -ECL: - type: programming - color: "#8a1267" - extensions: - - ".ecl" - - ".eclxml" - tm_scope: source.ecl - ace_mode: text - codemirror_mode: ecl - codemirror_mime_type: text/x-ecl - language_id: 93 -ECLiPSe: - type: programming - color: "#001d9d" - group: prolog - extensions: - - ".ecl" - tm_scope: source.prolog.eclipse - ace_mode: prolog - language_id: 94 -EJS: - type: markup - color: "#a91e50" - extensions: - - ".ejs" - - ".ect" - - ".ejs.t" - - ".jst" - tm_scope: text.html.js - ace_mode: ejs - language_id: 95 -EQ: - type: programming - color: "#a78649" - extensions: - - ".eq" - tm_scope: source.cs - ace_mode: csharp - codemirror_mode: clike - codemirror_mime_type: text/x-csharp - language_id: 96 -Eagle: - type: data - extensions: - - ".sch" - - ".brd" - tm_scope: text.xml - ace_mode: xml - codemirror_mode: xml - codemirror_mime_type: text/xml - language_id: 97 -Earthly: - type: programming - aliases: - - Earthfile - color: "#2af0ff" - tm_scope: source.earthfile - ace_mode: text - filenames: - - Earthfile - language_id: 963512632 -Easybuild: - type: data - color: "#069406" - group: Python - ace_mode: python - codemirror_mode: python - codemirror_mime_type: text/x-python - tm_scope: source.python - extensions: - - ".eb" - language_id: 342840477 -Ecere Projects: - type: data - color: "#913960" - group: JavaScript - extensions: - - ".epj" - tm_scope: source.json - ace_mode: json - codemirror_mode: javascript - codemirror_mime_type: application/json - language_id: 98 -Ecmarkup: - type: markup - color: "#eb8131" - group: HTML - extensions: - - ".html" - tm_scope: text.html.ecmarkup - ace_mode: html - codemirror_mode: htmlmixed - codemirror_mime_type: text/html - aliases: - - ecmarkdown - language_id: 844766630 -EditorConfig: - type: data - color: "#fff1f2" - group: INI - extensions: - - ".editorconfig" - filenames: - - ".editorconfig" - aliases: - - editor-config - ace_mode: ini - codemirror_mode: properties - codemirror_mime_type: text/x-properties - tm_scope: source.editorconfig - language_id: 96139566 -Edje Data Collection: - type: data - extensions: - - ".edc" - tm_scope: source.c++ - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-c++src - language_id: 342840478 -Eiffel: - type: programming - color: "#4d6977" - extensions: - - ".e" - tm_scope: source.eiffel - ace_mode: eiffel - codemirror_mode: eiffel - codemirror_mime_type: text/x-eiffel - language_id: 99 -Elixir: - type: programming - color: "#6e4a7e" - extensions: - - ".ex" - - ".exs" - tm_scope: source.elixir - ace_mode: elixir - filenames: - - mix.lock - interpreters: - - elixir - language_id: 100 -Elm: - type: programming - color: "#60B5CC" - extensions: - - ".elm" - tm_scope: source.elm - ace_mode: elm - codemirror_mode: elm - codemirror_mime_type: text/x-elm - language_id: 101 -Elvish: - type: programming - ace_mode: text - extensions: - - ".elv" - interpreters: - - elvish - tm_scope: source.elvish - color: "#55BB55" - language_id: 570996448 -Emacs Lisp: - type: programming - tm_scope: source.emacs.lisp - color: "#c065db" - aliases: - - elisp - - emacs - filenames: - - ".abbrev_defs" - - ".emacs" - - ".emacs.desktop" - - ".gnus" - - ".spacemacs" - - ".viper" - - Cask - - Project.ede - - _emacs - - abbrev_defs - extensions: - - ".el" - - ".emacs" - - ".emacs.desktop" - ace_mode: lisp - codemirror_mode: commonlisp - codemirror_mime_type: text/x-common-lisp - language_id: 102 -EmberScript: - type: programming - color: "#FFF4F3" - extensions: - - ".em" - - ".emberscript" - tm_scope: source.coffee - ace_mode: coffee - codemirror_mode: coffeescript - codemirror_mime_type: text/x-coffeescript - language_id: 103 -Erlang: - type: programming - color: "#B83998" - extensions: - - ".erl" - - ".app.src" - - ".es" - - ".escript" - - ".hrl" - - ".xrl" - - ".yrl" - filenames: - - Emakefile - - rebar.config - - rebar.config.lock - - rebar.lock - tm_scope: source.erlang - ace_mode: erlang - codemirror_mode: erlang - codemirror_mime_type: text/x-erlang - interpreters: - - escript - language_id: 104 -Euphoria: - type: programming - color: "#FF790B" - extensions: - - ".e" - - ".ex" - interpreters: - - eui - - euiw - ace_mode: text - tm_scope: source.euphoria - language_id: 880693982 -F#: - type: programming - color: "#b845fc" - aliases: - - fsharp - extensions: - - ".fs" - - ".fsi" - - ".fsx" - tm_scope: source.fsharp - ace_mode: text - codemirror_mode: mllike - codemirror_mime_type: text/x-fsharp - language_id: 105 -F*: - fs_name: Fstar - type: programming - color: "#572e30" - aliases: - - fstar - extensions: - - ".fst" - - ".fsti" - tm_scope: source.fstar - ace_mode: text - language_id: 336943375 -FIGlet Font: - type: data - color: "#FFDDBB" - aliases: - - FIGfont - extensions: - - ".flf" - tm_scope: source.figfont - ace_mode: text - language_id: 686129783 -FLUX: - type: programming - color: "#88ccff" - extensions: - - ".fx" - - ".flux" - tm_scope: none - ace_mode: text - language_id: 106 -Factor: - type: programming - color: "#636746" - extensions: - - ".factor" - filenames: - - ".factor-boot-rc" - - ".factor-rc" - tm_scope: source.factor - ace_mode: text - codemirror_mode: factor - codemirror_mime_type: text/x-factor - language_id: 108 -Fancy: - type: programming - color: "#7b9db4" - extensions: - - ".fy" - - ".fancypack" - filenames: - - Fakefile - tm_scope: source.fancy - ace_mode: text - language_id: 109 -Fantom: - type: programming - color: "#14253c" - extensions: - - ".fan" - tm_scope: source.fan - ace_mode: text - language_id: 110 -Faust: - type: programming - color: "#c37240" - extensions: - - ".dsp" - tm_scope: source.faust - ace_mode: text - language_id: 622529198 -Fennel: - type: programming - tm_scope: source.fnl - ace_mode: text - color: "#fff3d7" - interpreters: - - fennel - extensions: - - ".fnl" - language_id: 239946126 -Filebench WML: - type: programming - color: "#F6B900" - extensions: - - ".f" - tm_scope: none - ace_mode: text - language_id: 111 -Filterscript: - type: programming - group: RenderScript - extensions: - - ".fs" - tm_scope: none - ace_mode: text - language_id: 112 -Fluent: - type: programming - color: "#ffcc33" - extensions: - - ".ftl" - tm_scope: source.ftl - ace_mode: text - language_id: 206353404 -Formatted: - type: data - extensions: - - ".for" - - ".eam.fs" - tm_scope: none - ace_mode: text - language_id: 113 -Forth: - type: programming - color: "#341708" - extensions: - - ".fth" - - ".4th" - - ".f" - - ".for" - - ".forth" - - ".fr" - - ".frt" - - ".fs" - tm_scope: source.forth - ace_mode: forth - codemirror_mode: forth - codemirror_mime_type: text/x-forth - language_id: 114 -Fortran: - group: Fortran - type: programming - color: "#4d41b1" - extensions: - - ".f" - - ".f77" - - ".for" - - ".fpp" - tm_scope: source.fortran - ace_mode: text - codemirror_mode: fortran - codemirror_mime_type: text/x-fortran - language_id: 107 -Fortran Free Form: - group: Fortran - color: "#4d41b1" - type: programming - extensions: - - ".f90" - - ".f03" - - ".f08" - - ".f95" - tm_scope: source.fortran.modern - ace_mode: text - codemirror_mode: fortran - codemirror_mime_type: text/x-fortran - language_id: 761352333 -FreeBasic: - type: programming - color: "#867db1" - extensions: - - ".bi" - - ".bas" - tm_scope: source.vbnet - aliases: - - fb - ace_mode: text - codemirror_mode: vb - codemirror_mime_type: text/x-vb - language_id: 472896659 -FreeMarker: - type: programming - color: "#0050b2" - aliases: - - ftl - extensions: - - ".ftl" - tm_scope: text.html.ftl - ace_mode: ftl - language_id: 115 -Frege: - type: programming - color: "#00cafe" - extensions: - - ".fr" - tm_scope: source.haskell - ace_mode: haskell - language_id: 116 -Futhark: - type: programming - color: "#5f021f" - extensions: - - ".fut" - tm_scope: source.futhark - ace_mode: text - language_id: 97358117 -G-code: - type: programming - color: "#D08CF2" - extensions: - - ".g" - - ".cnc" - - ".gco" - - ".gcode" - tm_scope: source.gcode - ace_mode: gcode - language_id: 117 -GAML: - type: programming - color: "#FFC766" - extensions: - - ".gaml" - tm_scope: none - ace_mode: text - language_id: 290345951 -GAMS: - type: programming - color: "#f49a22" - extensions: - - ".gms" - tm_scope: none - ace_mode: text - language_id: 118 -GAP: - type: programming - color: "#0000cc" - extensions: - - ".g" - - ".gap" - - ".gd" - - ".gi" - - ".tst" - tm_scope: source.gap - ace_mode: text - language_id: 119 -# Collides with markdown, so commented out until someone actually needs it -#GCC Machine Description: -# type: programming -# color: "#FFCFAB" -# extensions: -# - ".md" -# tm_scope: source.lisp -# ace_mode: lisp -# codemirror_mode: commonlisp -# codemirror_mime_type: text/x-common-lisp -# language_id: 121 -GDB: - type: programming - extensions: - - ".gdb" - - ".gdbinit" - tm_scope: source.gdb - ace_mode: text - language_id: 122 -GDScript: - type: programming - color: "#355570" - extensions: - - ".gd" - tm_scope: source.gdscript - ace_mode: text - language_id: 123 -GEDCOM: - type: data - color: "#003058" - ace_mode: text - extensions: - - ".ged" - tm_scope: source.gedcom - language_id: 459577965 -GLSL: - type: programming - color: "#5686a5" - extensions: - - ".glsl" - - ".fp" - - ".frag" - - ".frg" - - ".fs" - - ".fsh" - - ".fshader" - - ".geo" - - ".geom" - - ".glslf" - - ".glslv" - - ".gs" - - ".gshader" - - ".rchit" - - ".rmiss" - - ".shader" - - ".tesc" - - ".tese" - - ".vert" - - ".vrx" - - ".vsh" - - ".vshader" - tm_scope: source.glsl - ace_mode: glsl - language_id: 124 -GN: - type: data - extensions: - - ".gn" - - ".gni" - interpreters: - - gn - filenames: - - ".gn" - tm_scope: source.gn - ace_mode: python - codemirror_mode: python - codemirror_mime_type: text/x-python - language_id: 302957008 -GSC: - type: programming - color: "#FF6800" - extensions: - - ".gsc" - - ".csc" - - ".gsh" - tm_scope: source.gsc - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-csrc - language_id: 257856279 -Game Maker Language: - type: programming - color: "#71b417" - extensions: - - ".gml" - tm_scope: source.c++ - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-c++src - language_id: 125 -Gemfile.lock: - type: data - color: "#701516" - searchable: false - tm_scope: source.gemfile-lock - ace_mode: text - filenames: - - Gemfile.lock - language_id: 907065713 -Gemini: - type: prose - color: "#ff6900" - ace_mode: text - extensions: - - ".gmi" - aliases: - - gemtext - wrap: true - tm_scope: source.gemini - language_id: 310828396 -Genero: - type: programming - color: "#63408e" - extensions: - - ".4gl" - tm_scope: source.genero - ace_mode: text - language_id: 986054050 -Genero Forms: - type: markup - color: "#d8df39" - extensions: - - ".per" - tm_scope: source.genero-forms - ace_mode: text - language_id: 902995658 -Genie: - type: programming - ace_mode: text - extensions: - - ".gs" - color: "#fb855d" - tm_scope: none - language_id: 792408528 -Genshi: - type: programming - color: "#951531" - extensions: - - ".kid" - tm_scope: text.xml.genshi - aliases: - - xml+genshi - - xml+kid - ace_mode: xml - codemirror_mode: xml - codemirror_mime_type: text/xml - language_id: 126 -Gentoo Ebuild: - type: programming - color: "#9400ff" - group: Shell - extensions: - - ".ebuild" - tm_scope: source.shell - ace_mode: sh - codemirror_mode: shell - codemirror_mime_type: text/x-sh - language_id: 127 -Gentoo Eclass: - type: programming - color: "#9400ff" - group: Shell - extensions: - - ".eclass" - tm_scope: source.shell - ace_mode: sh - codemirror_mode: shell - codemirror_mime_type: text/x-sh - language_id: 128 -Gerber Image: - type: data - color: "#d20b00" - aliases: - - rs-274x - extensions: - - ".gbr" - - ".cmp" - - ".gbl" - - ".gbo" - - ".gbp" - - ".gbs" - - ".gko" - - ".gml" - - ".gpb" - - ".gpt" - - ".gtl" - - ".gto" - - ".gtp" - - ".gts" - - ".ncl" - - ".sol" - interpreters: - - gerbv - - gerbview - tm_scope: source.gerber - ace_mode: text - language_id: 404627610 -Gettext Catalog: - type: prose - aliases: - - pot - extensions: - - ".po" - - ".pot" - tm_scope: source.po - ace_mode: text - language_id: 129 -Gherkin: - type: programming - extensions: - - ".feature" - - ".story" - tm_scope: text.gherkin.feature - aliases: - - cucumber - ace_mode: text - color: "#5B2063" - language_id: 76 -Git Attributes: - type: data - color: "#F44D27" - group: INI - aliases: - - gitattributes - filenames: - - ".gitattributes" - tm_scope: source.gitattributes - ace_mode: gitignore - codemirror_mode: shell - codemirror_mime_type: text/x-sh - language_id: 956324166 -Git Config: - type: data - color: "#F44D27" - group: INI - aliases: - - gitconfig - - gitmodules - extensions: - - ".gitconfig" - filenames: - - ".gitconfig" - - ".gitmodules" - ace_mode: ini - codemirror_mode: properties - codemirror_mime_type: text/x-properties - tm_scope: source.gitconfig - language_id: 807968997 -Git Revision List: - type: data - color: "#F44D27" - aliases: - - Git Blame Ignore Revs - filenames: - - ".git-blame-ignore-revs" - tm_scope: source.git-revlist - ace_mode: text - language_id: 461881235 -Gleam: - type: programming - color: "#ffaff3" - ace_mode: text - extensions: - - ".gleam" - tm_scope: source.gleam - language_id: 1054258749 -Glyph: - type: programming - color: "#c1ac7f" - extensions: - - ".glf" - tm_scope: source.tcl - ace_mode: tcl - codemirror_mode: tcl - codemirror_mime_type: text/x-tcl - language_id: 130 -Glyph Bitmap Distribution Format: - type: data - extensions: - - ".bdf" - tm_scope: source.bdf - ace_mode: text - language_id: 997665271 -Gnuplot: - type: programming - color: "#f0a9f0" - extensions: - - ".gp" - - ".gnu" - - ".gnuplot" - - ".p" - - ".plot" - - ".plt" - interpreters: - - gnuplot - tm_scope: source.gnuplot - ace_mode: text - language_id: 131 -Go: - type: programming - color: "#00ADD8" - aliases: - - golang - extensions: - - ".go" - tm_scope: source.go - ace_mode: golang - codemirror_mode: go - codemirror_mime_type: text/x-go - language_id: 132 -Go Checksums: - type: data - color: "#00ADD8" - aliases: - - go.sum - - go sum - filenames: - - go.sum - tm_scope: go.sum - ace_mode: text - language_id: 1054391671 -Go Module: - type: data - color: "#00ADD8" - aliases: - - go.mod - - go mod - filenames: - - go.mod - tm_scope: go.mod - ace_mode: text - language_id: 947461016 -Golo: - type: programming - color: "#88562A" - extensions: - - ".golo" - tm_scope: source.golo - ace_mode: text - language_id: 133 -Gosu: - type: programming - color: "#82937f" - extensions: - - ".gs" - - ".gst" - - ".gsx" - - ".vark" - tm_scope: source.gosu.2 - ace_mode: text - language_id: 134 -Grace: - type: programming - color: "#615f8b" - extensions: - - ".grace" - tm_scope: source.grace - ace_mode: text - language_id: 135 -Gradle: - type: data - color: "#02303a" - extensions: - - ".gradle" - tm_scope: source.groovy.gradle - ace_mode: text - language_id: 136 -Grammatical Framework: - type: programming - aliases: - - gf - extensions: - - ".gf" - color: "#ff0000" - tm_scope: source.gf - ace_mode: haskell - codemirror_mode: haskell - codemirror_mime_type: text/x-haskell - language_id: 137 -Graph Modeling Language: - type: data - extensions: - - ".gml" - tm_scope: none - ace_mode: text - language_id: 138 -GraphQL: - type: data - color: "#e10098" - extensions: - - ".graphql" - - ".gql" - - ".graphqls" - tm_scope: source.graphql - ace_mode: text - language_id: 139 -Graphviz (DOT): - type: data - color: "#2596be" - tm_scope: source.dot - extensions: - - ".dot" - - ".gv" - ace_mode: text - language_id: 140 -Groovy: - type: programming - tm_scope: source.groovy - ace_mode: groovy - codemirror_mode: groovy - codemirror_mime_type: text/x-groovy - color: "#4298b8" - extensions: - - ".groovy" - - ".grt" - - ".gtpl" - - ".gvy" - interpreters: - - groovy - filenames: - - Jenkinsfile - language_id: 142 -Groovy Server Pages: - type: programming - color: "#4298b8" - group: Groovy - aliases: - - gsp - - java server page - extensions: - - ".gsp" - tm_scope: text.html.jsp - ace_mode: jsp - codemirror_mode: htmlembedded - codemirror_mime_type: application/x-jsp - language_id: 143 -HAProxy: - type: data - color: "#106da9" - extensions: - - ".cfg" - filenames: - - haproxy.cfg - tm_scope: source.haproxy-config - ace_mode: text - language_id: 366607477 -HCL: - type: programming - extensions: - - ".hcl" - - ".nomad" - - ".tf" - - ".tfvars" - - ".workflow" - aliases: - - HashiCorp Configuration Language - - terraform - ace_mode: ruby - codemirror_mode: ruby - codemirror_mime_type: text/x-ruby - tm_scope: source.terraform - language_id: 144 -HLSL: - type: programming - color: "#aace60" - extensions: - - ".hlsl" - - ".cginc" - - ".fx" - - ".fxh" - - ".hlsli" - ace_mode: text - tm_scope: source.hlsl - language_id: 145 -HOCON: - type: data - color: "#9ff8ee" - extensions: - - ".hocon" - tm_scope: source.hocon - ace_mode: text - language_id: 679725279 -HTML: - type: markup - tm_scope: text.html.basic - ace_mode: html - codemirror_mode: htmlmixed - codemirror_mime_type: text/html - color: "#e34c26" - aliases: - - xhtml - extensions: - - ".html" - - ".hta" - - ".htm" - - ".html.hl" - - ".inc" - - ".xht" - - ".xhtml" - language_id: 146 -HTML+ECR: - type: markup - color: "#2e1052" - tm_scope: text.html.ecr - group: HTML - aliases: - - ecr - extensions: - - ".ecr" - ace_mode: text - codemirror_mode: htmlmixed - codemirror_mime_type: text/html - language_id: 148 -HTML+EEX: - type: markup - color: "#6e4a7e" - tm_scope: text.html.elixir - group: HTML - aliases: - - eex - - heex - - leex - extensions: - - ".eex" - - ".html.heex" - - ".html.leex" - ace_mode: text - codemirror_mode: htmlmixed - codemirror_mime_type: text/html - language_id: 149 -HTML+ERB: - type: markup - color: "#701516" - tm_scope: text.html.erb - group: HTML - aliases: - - erb - - rhtml - - html+ruby - extensions: - - ".erb" - - ".erb.deface" - - ".rhtml" - ace_mode: text - codemirror_mode: htmlembedded - codemirror_mime_type: application/x-erb - language_id: 150 -HTML+PHP: - type: markup - color: "#4f5d95" - tm_scope: text.html.php - group: HTML - extensions: - - ".phtml" - ace_mode: php - codemirror_mode: php - codemirror_mime_type: application/x-httpd-php - language_id: 151 -HTML+Razor: - type: markup - color: "#512be4" - tm_scope: text.html.cshtml - group: HTML - aliases: - - razor - extensions: - - ".cshtml" - - ".razor" - ace_mode: razor - codemirror_mode: htmlmixed - codemirror_mime_type: text/html - language_id: 479039817 -HTTP: - type: data - color: "#005C9C" - extensions: - - ".http" - tm_scope: source.httpspec - ace_mode: text - codemirror_mode: http - codemirror_mime_type: message/http - language_id: 152 -HXML: - type: data - color: "#f68712" - ace_mode: text - extensions: - - ".hxml" - tm_scope: source.hxml - language_id: 786683730 -Hack: - type: programming - ace_mode: php - codemirror_mode: php - codemirror_mime_type: application/x-httpd-php - extensions: - - ".hack" - - ".hh" - - ".hhi" - - ".php" - tm_scope: source.hack - color: "#878787" - language_id: 153 -Haml: - type: markup - color: "#ece2a9" - extensions: - - ".haml" - - ".haml.deface" - tm_scope: text.haml - ace_mode: haml - codemirror_mode: haml - codemirror_mime_type: text/x-haml - language_id: 154 -Handlebars: - type: markup - color: "#f7931e" - aliases: - - hbs - - htmlbars - extensions: - - ".handlebars" - - ".hbs" - tm_scope: text.html.handlebars - ace_mode: handlebars - language_id: 155 -Harbour: - type: programming - color: "#0e60e3" - extensions: - - ".hb" - tm_scope: source.harbour - ace_mode: text - language_id: 156 -Haskell: - type: programming - color: "#5e5086" - extensions: - - ".hs" - - ".hs-boot" - - ".hsc" - interpreters: - - runghc - - runhaskell - - runhugs - tm_scope: source.haskell - ace_mode: haskell - codemirror_mode: haskell - codemirror_mime_type: text/x-haskell - language_id: 157 -Haxe: - type: programming - ace_mode: haxe - codemirror_mode: haxe - codemirror_mime_type: text/x-haxe - color: "#df7900" - extensions: - - ".hx" - - ".hxsl" - tm_scope: source.hx - language_id: 158 -HiveQL: - type: programming - extensions: - - ".q" - - ".hql" - color: "#dce200" - tm_scope: source.hql - ace_mode: sql - language_id: 931814087 -HolyC: - type: programming - color: "#ffefaf" - extensions: - - ".hc" - tm_scope: source.hc - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-csrc - language_id: 928121743 -Hy: - type: programming - ace_mode: text - color: "#7790B2" - extensions: - - ".hy" - interpreters: - - hy - aliases: - - hylang - tm_scope: source.hy - language_id: 159 -HyPhy: - type: programming - ace_mode: text - extensions: - - ".bf" - tm_scope: none - language_id: 160 -IDL: - type: programming - color: "#a3522f" - extensions: - - ".pro" - - ".dlm" - tm_scope: source.idl - ace_mode: text - codemirror_mode: idl - codemirror_mime_type: text/x-idl - language_id: 161 -IGOR Pro: - type: programming - color: "#0000cc" - extensions: - - ".ipf" - aliases: - - igor - - igorpro - tm_scope: source.igor - ace_mode: text - language_id: 162 -INI: - type: data - color: "#d1dbe0" - extensions: - - ".ini" - - ".cfg" - - ".dof" - - ".lektorproject" - - ".prefs" - - ".pro" - - ".properties" - - ".url" - filenames: - - ".coveragerc" - - ".flake8" - - ".pylintrc" - - buildozer.spec - - pylintrc - tm_scope: source.ini - aliases: - - dosini - ace_mode: ini - codemirror_mode: properties - codemirror_mime_type: text/x-properties - language_id: 163 -IRC log: - type: data - aliases: - - irc - - irc logs - extensions: - - ".irclog" - - ".weechatlog" - tm_scope: none - ace_mode: text - codemirror_mode: mirc - codemirror_mime_type: text/mirc - language_id: 164 -Idris: - type: programming - color: "#b30000" - extensions: - - ".idr" - - ".lidr" - ace_mode: text - tm_scope: source.idris - language_id: 165 -Ignore List: - type: data - color: "#000000" - group: INI - aliases: - - ignore - - gitignore - - git-ignore - extensions: - - ".gitignore" - filenames: - - ".atomignore" - - ".babelignore" - - ".bzrignore" - - ".coffeelintignore" - - ".cvsignore" - - ".dockerignore" - - ".eleventyignore" - - ".eslintignore" - - ".gitignore" - - ".markdownlintignore" - - ".nodemonignore" - - ".npmignore" - - ".prettierignore" - - ".stylelintignore" - - ".vercelignore" - - ".vscodeignore" - - gitignore-global - - gitignore_global - ace_mode: gitignore - tm_scope: source.gitignore - codemirror_mode: shell - codemirror_mime_type: text/x-sh - language_id: 74444240 -ImageJ Macro: - type: programming - color: "#99AAFF" - aliases: - - ijm - extensions: - - ".ijm" - ace_mode: text - tm_scope: none - language_id: 575143428 -Imba: - type: programming - color: "#16cec6" - extensions: - - ".imba" - ace_mode: text - tm_scope: source.imba - language_id: 1057618448 -Inform 7: - type: programming - wrap: true - extensions: - - ".ni" - - ".i7x" - tm_scope: source.inform7 - aliases: - - i7 - - inform7 - ace_mode: text - language_id: 166 -Ink: - type: programming - wrap: true - extensions: - - ".ink" - tm_scope: source.ink - ace_mode: text - language_id: 838252715 -Inno Setup: - type: programming - color: "#264b99" - extensions: - - ".iss" - - ".isl" - tm_scope: source.inno - ace_mode: text - language_id: 167 -Io: - type: programming - color: "#a9188d" - extensions: - - ".io" - interpreters: - - io - tm_scope: source.io - ace_mode: io - language_id: 168 -Ioke: - type: programming - color: "#078193" - extensions: - - ".ik" - interpreters: - - ioke - tm_scope: source.ioke - ace_mode: text - language_id: 169 -Isabelle: - type: programming - color: "#FEFE00" - extensions: - - ".thy" - tm_scope: source.isabelle.theory - ace_mode: text - language_id: 170 -Isabelle ROOT: - type: programming - color: "#FEFE00" - group: Isabelle - filenames: - - ROOT - tm_scope: source.isabelle.root - ace_mode: text - language_id: 171 -J: - type: programming - color: "#9EEDFF" - extensions: - - ".ijs" - interpreters: - - jconsole - tm_scope: source.j - ace_mode: text - language_id: 172 -JAR Manifest: - type: data - color: "#b07219" - filenames: - - MANIFEST.MF - tm_scope: source.yaml - ace_mode: text - language_id: 447261135 -JFlex: - type: programming - color: "#DBCA00" - group: Lex - extensions: - - ".flex" - - ".jflex" - tm_scope: source.jflex - ace_mode: text - language_id: 173 -JSON: - type: data - color: "#292929" - tm_scope: source.json - ace_mode: json - codemirror_mode: javascript - codemirror_mime_type: application/json - aliases: - - geojson - - jsonl - - topojson - extensions: - - ".json" - - ".4DForm" - - ".4DProject" - - ".avsc" - - ".geojson" - - ".gltf" - - ".har" - - ".ice" - - ".JSON-tmLanguage" - - ".jsonl" - - ".mcmeta" - - ".tfstate" - - ".tfstate.backup" - - ".topojson" - - ".webapp" - - ".webmanifest" - - ".yy" - - ".yyp" - filenames: - - ".all-contributorsrc" - - ".arcconfig" - - ".auto-changelog" - - ".c8rc" - - ".htmlhintrc" - - ".imgbotconfig" - - ".nycrc" - - ".tern-config" - - ".tern-project" - - ".watchmanconfig" - - Pipfile.lock - - composer.lock - - mcmod.info - language_id: 174 -JSON with Comments: - type: data - color: "#292929" - group: JSON - tm_scope: source.js - ace_mode: javascript - codemirror_mode: javascript - codemirror_mime_type: text/javascript - aliases: - - jsonc - extensions: - - ".jsonc" - - ".code-snippets" - - ".sublime-build" - - ".sublime-commands" - - ".sublime-completions" - - ".sublime-keymap" - - ".sublime-macro" - - ".sublime-menu" - - ".sublime-mousemap" - - ".sublime-project" - - ".sublime-settings" - - ".sublime-theme" - - ".sublime-workspace" - - ".sublime_metrics" - - ".sublime_session" - filenames: - - ".babelrc" - - ".devcontainer.json" - - ".eslintrc.json" - - ".jscsrc" - - ".jshintrc" - - ".jslintrc" - - api-extractor.json - - devcontainer.json - - jsconfig.json - - language-configuration.json - - tsconfig.json - - tslint.json - language_id: 423 -JSON5: - type: data - color: "#267CB9" - extensions: - - ".json5" - tm_scope: source.js - ace_mode: javascript - codemirror_mode: javascript - codemirror_mime_type: application/json - language_id: 175 -JSONLD: - type: data - color: "#0c479c" - extensions: - - ".jsonld" - tm_scope: source.js - ace_mode: javascript - codemirror_mode: javascript - codemirror_mime_type: application/json - language_id: 176 -JSONiq: - color: "#40d47e" - type: programming - ace_mode: jsoniq - codemirror_mode: javascript - codemirror_mime_type: application/json - extensions: - - ".jq" - tm_scope: source.jsoniq - language_id: 177 -Janet: - type: programming - color: "#0886a5" - extensions: - - ".janet" - tm_scope: source.janet - ace_mode: scheme - codemirror_mode: scheme - codemirror_mime_type: text/x-scheme - interpreters: - - janet - language_id: 1028705371 -Jasmin: - type: programming - color: "#d03600" - ace_mode: java - extensions: - - ".j" - tm_scope: source.jasmin - language_id: 180 -Java: - type: programming - tm_scope: source.java - ace_mode: java - codemirror_mode: clike - codemirror_mime_type: text/x-java - color: "#b07219" - extensions: - - ".java" - - ".jav" - - ".jsh" - language_id: 181 -Java Properties: - type: data - color: "#2A6277" - extensions: - - ".properties" - tm_scope: source.java-properties - ace_mode: properties - codemirror_mode: properties - codemirror_mime_type: text/x-properties - language_id: 519377561 -Java Server Pages: - type: programming - color: "#2A6277" - group: Java - aliases: - - jsp - extensions: - - ".jsp" - - ".tag" - tm_scope: text.html.jsp - ace_mode: jsp - codemirror_mode: htmlembedded - codemirror_mime_type: application/x-jsp - language_id: 182 -JavaScript: - type: programming - tm_scope: source.js - ace_mode: javascript - codemirror_mode: javascript - codemirror_mime_type: text/javascript - color: "#f1e05a" - aliases: - - js - - node - extensions: - - ".js" - - "._js" - - ".bones" - - ".cjs" - - ".es" - - ".es6" - - ".frag" - - ".gs" - - ".jake" - - ".javascript" - - ".jsb" - - ".jscad" - - ".jsfl" - - ".jslib" - - ".jsm" - - ".jspre" - - ".jss" - - ".jsx" - - ".mjs" - - ".njs" - - ".pac" - - ".sjs" - - ".ssjs" - - ".xsjs" - - ".xsjslib" - filenames: - - Jakefile - interpreters: - - chakra - - d8 - - gjs - - js - - node - - nodejs - - qjs - - rhino - - v8 - - v8-shell - language_id: 183 -JavaScript+ERB: - type: programming - color: "#f1e05a" - tm_scope: source.js - group: JavaScript - extensions: - - ".js.erb" - ace_mode: javascript - codemirror_mode: javascript - codemirror_mime_type: application/javascript - language_id: 914318960 -Jest Snapshot: - type: data - color: "#15c213" - tm_scope: source.jest.snap - extensions: - - ".snap" - ace_mode: javascript - codemirror_mode: javascript - codemirror_mime_type: application/javascript - language_id: 774635084 -JetBrains MPS: - type: programming - aliases: - - mps - color: "#21D789" - extensions: - - ".mps" - - ".mpl" - - ".msd" - ace_mode: xml - codemirror_mode: xml - codemirror_mime_type: text/xml - tm_scope: none - language_id: 465165328 -Jinja: - type: markup - color: "#a52a22" - aliases: - - django - - html+django - - html+jinja - - htmldjango - extensions: - - ".jinja" - - ".j2" - - ".jinja2" - tm_scope: text.html.django - ace_mode: django - codemirror_mode: django - codemirror_mime_type: text/x-django - language_id: 147 -Jison: - type: programming - color: "#56b3cb" - group: Yacc - extensions: - - ".jison" - tm_scope: source.jison - ace_mode: text - language_id: 284531423 -Jison Lex: - type: programming - color: "#56b3cb" - group: Lex - extensions: - - ".jisonlex" - tm_scope: source.jisonlex - ace_mode: text - language_id: 406395330 -Jolie: - type: programming - extensions: - - ".ol" - - ".iol" - interpreters: - - jolie - color: "#843179" - ace_mode: text - tm_scope: source.jolie - language_id: 998078858 -Jsonnet: - color: "#0064bd" - type: programming - ace_mode: text - extensions: - - ".jsonnet" - - ".libsonnet" - tm_scope: source.jsonnet - language_id: 664885656 -Julia: - type: programming - extensions: - - ".jl" - interpreters: - - julia - color: "#a270ba" - tm_scope: source.julia - ace_mode: julia - codemirror_mode: julia - codemirror_mime_type: text/x-julia - language_id: 184 -Jupyter Notebook: - type: markup - ace_mode: json - codemirror_mode: javascript - codemirror_mime_type: application/json - tm_scope: source.json - color: "#DA5B0B" - extensions: - - ".ipynb" - filenames: - - Notebook - aliases: - - IPython Notebook - language_id: 185 -KRL: - type: programming - color: "#28430A" - extensions: - - ".krl" - tm_scope: none - ace_mode: text - language_id: 186 -Kaitai Struct: - type: programming - aliases: - - ksy - ace_mode: yaml - codemirror_mode: yaml - codemirror_mime_type: text/x-yaml - color: "#773b37" - extensions: - - ".ksy" - tm_scope: source.yaml - language_id: 818804755 -KakouneScript: - type: programming - color: "#6f8042" - tm_scope: source.kakscript - aliases: - - kak - - kakscript - extensions: - - ".kak" - filenames: - - kakrc - ace_mode: text - language_id: 603336474 -KiCad Layout: - type: data - color: "#2f4aab" - aliases: - - pcbnew - extensions: - - ".kicad_pcb" - - ".kicad_mod" - - ".kicad_wks" - filenames: - - fp-lib-table - tm_scope: source.pcb.sexp - ace_mode: lisp - codemirror_mode: commonlisp - codemirror_mime_type: text/x-common-lisp - language_id: 187 -KiCad Legacy Layout: - type: data - color: "#2f4aab" - extensions: - - ".brd" - tm_scope: source.pcb.board - ace_mode: text - language_id: 140848857 -KiCad Schematic: - type: data - color: "#2f4aab" - aliases: - - eeschema schematic - extensions: - - ".kicad_sch" - - ".sch" - tm_scope: source.pcb.schematic - ace_mode: text - language_id: 622447435 -Kit: - type: markup - ace_mode: html - codemirror_mode: htmlmixed - codemirror_mime_type: text/html - extensions: - - ".kit" - tm_scope: text.html.basic - language_id: 188 -Kotlin: - type: programming - color: "#A97BFF" - extensions: - - ".kt" - - ".ktm" - - ".kts" - tm_scope: source.kotlin - ace_mode: text - codemirror_mode: clike - codemirror_mime_type: text/x-kotlin - language_id: 189 -Kusto: - type: data - extensions: - - ".csl" - - ".kql" - tm_scope: source.kusto - ace_mode: text - language_id: 225697190 -LFE: - type: programming - color: "#4C3023" - extensions: - - ".lfe" - tm_scope: source.lisp - ace_mode: lisp - codemirror_mode: commonlisp - codemirror_mime_type: text/x-common-lisp - language_id: 190 -LLVM: - type: programming - extensions: - - ".ll" - tm_scope: source.llvm - ace_mode: text - color: "#185619" - language_id: 191 -LOLCODE: - type: programming - extensions: - - ".lol" - color: "#cc9900" - tm_scope: none - ace_mode: text - language_id: 192 -LSL: - type: programming - tm_scope: source.lsl - ace_mode: lsl - extensions: - - ".lsl" - - ".lslp" - interpreters: - - lsl - color: "#3d9970" - language_id: 193 -LTspice Symbol: - type: data - extensions: - - ".asy" - tm_scope: source.ltspice.symbol - ace_mode: text - codemirror_mode: spreadsheet - codemirror_mime_type: text/x-spreadsheet - language_id: 1013566805 -LabVIEW: - type: programming - color: "#fede06" - extensions: - - ".lvproj" - - ".lvclass" - - ".lvlib" - tm_scope: text.xml - ace_mode: xml - codemirror_mode: xml - codemirror_mime_type: text/xml - language_id: 194 -Lark: - type: data - color: "#2980B9" - extensions: - - ".lark" - tm_scope: source.lark - ace_mode: text - codemirror_mode: ebnf - codemirror_mime_type: text/x-ebnf - language_id: 758480799 -Lasso: - type: programming - color: "#999999" - extensions: - - ".lasso" - - ".las" - - ".lasso8" - - ".lasso9" - tm_scope: file.lasso - aliases: - - lassoscript - ace_mode: text - language_id: 195 -Latte: - type: markup - color: "#f2a542" - extensions: - - ".latte" - tm_scope: text.html.smarty - ace_mode: smarty - codemirror_mode: smarty - codemirror_mime_type: text/x-smarty - language_id: 196 -Lean: - type: programming - extensions: - - ".lean" - - ".hlean" - tm_scope: source.lean - ace_mode: text - language_id: 197 -Less: - type: markup - color: "#1d365d" - aliases: - - less-css - extensions: - - ".less" - tm_scope: source.css.less - ace_mode: less - codemirror_mode: css - codemirror_mime_type: text/css - language_id: 198 -Lex: - type: programming - color: "#DBCA00" - aliases: - - flex - extensions: - - ".l" - - ".lex" - filenames: - - Lexer.x - - lexer.x - tm_scope: source.lex - ace_mode: text - language_id: 199 -LigoLANG: - type: programming - color: "#0e74ff" - extensions: - - ".ligo" - tm_scope: source.ligo - ace_mode: pascal - codemirror_mode: pascal - codemirror_mime_type: text/x-pascal - group: LigoLANG - language_id: 1040646257 -LilyPond: - type: programming - color: "#9ccc7c" - extensions: - - ".ly" - - ".ily" - tm_scope: source.lilypond - ace_mode: text - language_id: 200 -Limbo: - type: programming - extensions: - - ".b" - - ".m" - tm_scope: none - ace_mode: text - language_id: 201 -Linker Script: - type: data - extensions: - - ".ld" - - ".lds" - - ".x" - filenames: - - ld.script - tm_scope: none - ace_mode: text - language_id: 202 -Linux Kernel Module: - type: data - extensions: - - ".mod" - tm_scope: none - ace_mode: text - language_id: 203 -Liquid: - type: markup - color: "#67b8de" - extensions: - - ".liquid" - tm_scope: text.html.liquid - ace_mode: liquid - language_id: 204 -Literate Agda: - type: programming - color: "#315665" - group: Agda - extensions: - - ".lagda" - tm_scope: none - ace_mode: text - language_id: 205 -Literate CoffeeScript: - type: programming - color: "#244776" - tm_scope: source.litcoffee - group: CoffeeScript - ace_mode: text - wrap: true - aliases: - - litcoffee - extensions: - - ".litcoffee" - - ".coffee.md" - language_id: 206 -Literate Haskell: - type: programming - color: "#5e5086" - group: Haskell - aliases: - - lhaskell - - lhs - extensions: - - ".lhs" - tm_scope: text.tex.latex.haskell - ace_mode: text - codemirror_mode: haskell-literate - codemirror_mime_type: text/x-literate-haskell - language_id: 207 -LiveScript: - type: programming - color: "#499886" - aliases: - - live-script - - ls - extensions: - - ".ls" - - "._ls" - filenames: - - Slakefile - tm_scope: source.livescript - ace_mode: livescript - codemirror_mode: livescript - codemirror_mime_type: text/x-livescript - language_id: 208 -Logos: - type: programming - extensions: - - ".xm" - - ".x" - - ".xi" - ace_mode: text - tm_scope: source.logos - language_id: 209 -Logtalk: - type: programming - color: "#295b9a" - extensions: - - ".lgt" - - ".logtalk" - tm_scope: source.logtalk - ace_mode: text - language_id: 210 -LookML: - type: programming - ace_mode: yaml - codemirror_mode: yaml - codemirror_mime_type: text/x-yaml - color: "#652B81" - extensions: - - ".lookml" - - ".model.lkml" - - ".view.lkml" - tm_scope: source.yaml - language_id: 211 -LoomScript: - type: programming - extensions: - - ".ls" - tm_scope: source.loomscript - ace_mode: text - language_id: 212 -Lua: - type: programming - tm_scope: source.lua - ace_mode: lua - codemirror_mode: lua - codemirror_mime_type: text/x-lua - color: "#000080" - extensions: - - ".lua" - - ".fcgi" - - ".nse" - - ".p8" - - ".pd_lua" - - ".rbxs" - - ".rockspec" - - ".wlua" - filenames: - - ".luacheckrc" - interpreters: - - lua - language_id: 213 -M: - type: programming - aliases: - - mumps - extensions: - - ".mumps" - - ".m" - ace_mode: text - codemirror_mode: mumps - codemirror_mime_type: text/x-mumps - language_id: 214 - tm_scope: none -M4: - type: programming - extensions: - - ".m4" - - ".mc" - tm_scope: source.m4 - ace_mode: text - language_id: 215 -M4Sugar: - type: programming - group: M4 - aliases: - - autoconf - extensions: - - ".m4" - filenames: - - configure.ac - tm_scope: source.m4 - ace_mode: text - language_id: 216 -MATLAB: - type: programming - color: "#e16737" - aliases: - - octave - extensions: - - ".matlab" - - ".m" - tm_scope: source.matlab - ace_mode: matlab - codemirror_mode: octave - codemirror_mime_type: text/x-octave - language_id: 225 -MAXScript: - type: programming - color: "#00a6a6" - extensions: - - ".ms" - - ".mcr" - tm_scope: source.maxscript - ace_mode: text - language_id: 217 -MLIR: - type: programming - color: "#5EC8DB" - extensions: - - ".mlir" - tm_scope: source.mlir - ace_mode: text - language_id: 448253929 -MQL4: - type: programming - color: "#62A8D6" - extensions: - - ".mq4" - - ".mqh" - tm_scope: source.mql5 - ace_mode: c_cpp - language_id: 426 -MQL5: - type: programming - color: "#4A76B8" - extensions: - - ".mq5" - - ".mqh" - tm_scope: source.mql5 - ace_mode: c_cpp - language_id: 427 -MTML: - type: markup - color: "#b7e1f4" - extensions: - - ".mtml" - tm_scope: text.html.basic - ace_mode: html - codemirror_mode: htmlmixed - codemirror_mime_type: text/html - language_id: 218 -MUF: - type: programming - group: Forth - extensions: - - ".muf" - - ".m" - tm_scope: none - ace_mode: forth - codemirror_mode: forth - codemirror_mime_type: text/x-forth - language_id: 219 -Macaulay2: - type: programming - extensions: - - ".m2" - aliases: - - m2 - interpreters: - - M2 - ace_mode: text - tm_scope: source.m2 - color: "#d8ffff" - language_id: 34167825 -Makefile: - type: programming - color: "#427819" - aliases: - - bsdmake - - make - - mf - extensions: - - ".mak" - - ".d" - - ".make" - - ".makefile" - - ".mk" - - ".mkfile" - filenames: - - BSDmakefile - - GNUmakefile - - Kbuild - - Makefile - - Makefile.am - - Makefile.boot - - Makefile.frag - - Makefile.in - - Makefile.inc - - Makefile.wat - - makefile - - makefile.sco - - mkfile - interpreters: - - make - tm_scope: source.makefile - ace_mode: makefile - codemirror_mode: cmake - codemirror_mime_type: text/x-cmake - language_id: 220 -Mako: - type: programming - color: "#7e858d" - extensions: - - ".mako" - - ".mao" - tm_scope: text.html.mako - ace_mode: text - language_id: 221 -Markdown: - type: prose - color: "#083fa1" - aliases: - - pandoc - ace_mode: markdown - codemirror_mode: gfm - codemirror_mime_type: text/x-gfm - wrap: true - extensions: - - ".md" - - ".livemd" - - ".markdown" - - ".mdown" - - ".mdwn" - - ".mdx" - - ".mkd" - - ".mkdn" - - ".mkdown" - - ".ronn" - - ".scd" - - ".workbook" - filenames: - - contents.lr - tm_scope: source.gfm - language_id: 222 -Marko: - type: markup - color: "#42bff2" - tm_scope: text.marko - extensions: - - ".marko" - aliases: - - markojs - ace_mode: text - codemirror_mode: htmlmixed - codemirror_mime_type: text/html - language_id: 932782397 -Mask: - type: markup - color: "#f97732" - ace_mode: mask - extensions: - - ".mask" - tm_scope: source.mask - language_id: 223 -Mathematica: - type: programming - color: "#dd1100" - extensions: - - ".mathematica" - - ".cdf" - - ".m" - - ".ma" - - ".mt" - - ".nb" - - ".nbp" - - ".wl" - - ".wlt" - aliases: - - mma - - wolfram - - wolfram language - - wolfram lang - - wl - tm_scope: source.mathematica - ace_mode: text - codemirror_mode: mathematica - codemirror_mime_type: text/x-mathematica - language_id: 224 -Maven POM: - type: data - group: XML - tm_scope: text.xml.pom - filenames: - - pom.xml - ace_mode: xml - codemirror_mode: xml - codemirror_mime_type: text/xml - language_id: 226 -Max: - type: programming - color: "#c4a79c" - aliases: - - max/msp - - maxmsp - extensions: - - ".maxpat" - - ".maxhelp" - - ".maxproj" - - ".mxt" - - ".pat" - tm_scope: source.json - ace_mode: json - codemirror_mode: javascript - codemirror_mime_type: application/json - language_id: 227 -Mercury: - type: programming - color: "#ff2b2b" - ace_mode: prolog - interpreters: - - mmi - extensions: - - ".m" - - ".moo" - tm_scope: source.mercury - language_id: 229 -Mermaid: - type: markup - color: "#ff3670" - aliases: - - mermaid example - extensions: - - ".mmd" - - ".mermaid" - tm_scope: source.mermaid - ace_mode: text - language_id: 385992043 -Meson: - type: programming - color: "#007800" - filenames: - - meson.build - - meson_options.txt - tm_scope: source.meson - ace_mode: text - language_id: 799141244 -Metal: - type: programming - color: "#8f14e9" - extensions: - - ".metal" - tm_scope: source.c++ - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-c++src - language_id: 230 -Microsoft Developer Studio Project: - type: data - extensions: - - ".dsp" - tm_scope: none - ace_mode: text - language_id: 800983837 -Microsoft Visual Studio Solution: - type: data - extensions: - - ".sln" - tm_scope: source.solution - ace_mode: text - language_id: 849523096 -MiniD: - type: programming - extensions: - - ".minid" - tm_scope: none - ace_mode: text - language_id: 231 -MiniYAML: - type: data - color: "#ff1111" - tm_scope: source.miniyaml - extensions: - - ".yaml" - - ".yml" - ace_mode: yaml - codemirror_mode: yaml - codemirror_mime_type: text/x-yaml - language_id: 4896465 -Mint: - type: programming - extensions: - - ".mint" - ace_mode: text - color: "#02b046" - tm_scope: source.mint - language_id: 968740319 -Mirah: - type: programming - color: "#c7a938" - extensions: - - ".druby" - - ".duby" - - ".mirah" - tm_scope: source.ruby - ace_mode: ruby - codemirror_mode: ruby - codemirror_mime_type: text/x-ruby - language_id: 232 -Modelica: - type: programming - color: "#de1d31" - extensions: - - ".mo" - tm_scope: source.modelica - ace_mode: text - codemirror_mode: modelica - codemirror_mime_type: text/x-modelica - language_id: 233 -Modula-2: - type: programming - color: "#10253f" - extensions: - - ".mod" - tm_scope: source.modula2 - ace_mode: text - language_id: 234 -Modula-3: - type: programming - extensions: - - ".i3" - - ".ig" - - ".m3" - - ".mg" - color: "#223388" - ace_mode: text - tm_scope: source.modula-3 - language_id: 564743864 -Module Management System: - type: programming - extensions: - - ".mms" - - ".mmk" - filenames: - - descrip.mmk - - descrip.mms - tm_scope: none - ace_mode: text - language_id: 235 -Monkey: - type: programming - extensions: - - ".monkey" - - ".monkey2" - ace_mode: text - tm_scope: source.monkey - language_id: 236 -Monkey C: - type: programming - color: "#8D6747" - extensions: - - ".mc" - tm_scope: source.mc - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-csrc - language_id: 231751931 -Moocode: - type: programming - extensions: - - ".moo" - tm_scope: none - ace_mode: text - language_id: 237 -MoonScript: - type: programming - color: "#ff4585" - extensions: - - ".moon" - interpreters: - - moon - tm_scope: source.moonscript - ace_mode: text - language_id: 238 -Motoko: - type: programming - color: "#fbb03b" - extensions: - - ".mo" - tm_scope: source.mo - ace_mode: text - language_id: 202937027 -Motorola 68K Assembly: - type: programming - color: "#005daa" - group: Assembly - aliases: - - m68k - extensions: - - ".asm" - - ".i" - - ".inc" - - ".s" - - ".x68" - tm_scope: source.m68k - ace_mode: assembly_x86 - language_id: 477582706 -Move: - type: programming - color: "#4a137a" - extensions: - - ".move" - tm_scope: source.move - ace_mode: text - language_id: 638334599 -Muse: - type: prose - extensions: - - ".muse" - tm_scope: text.muse - ace_mode: text - wrap: true - language_id: 474864066 - aliases: - - amusewiki - - emacs muse -Mustache: - type: markup - color: "#724b3b" - extensions: - - ".mustache" - tm_scope: text.html.smarty - ace_mode: smarty - codemirror_mode: smarty - codemirror_mime_type: text/x-smarty - language_id: 638334590 -Myghty: - type: programming - extensions: - - ".myt" - tm_scope: none - ace_mode: text - language_id: 239 -NASL: - type: programming - extensions: - - ".nasl" - - ".inc" - tm_scope: source.nasl - ace_mode: text - language_id: 171666519 -NCL: - type: programming - color: "#28431f" - extensions: - - ".ncl" - tm_scope: source.ncl - ace_mode: text - language_id: 240 -NEON: - type: data - extensions: - - ".neon" - tm_scope: source.neon - ace_mode: text - aliases: - - nette object notation - - ne-on - language_id: 481192983 -NL: - type: data - extensions: - - ".nl" - tm_scope: none - ace_mode: text - language_id: 241 -NPM Config: - type: data - color: "#cb3837" - group: INI - aliases: - - npmrc - filenames: - - ".npmrc" - tm_scope: source.ini.npmrc - ace_mode: text - language_id: 685022663 -NSIS: - type: programming - extensions: - - ".nsi" - - ".nsh" - tm_scope: source.nsis - ace_mode: text - codemirror_mode: nsis - codemirror_mime_type: text/x-nsis - language_id: 242 -NWScript: - type: programming - color: "#111522" - extensions: - - ".nss" - tm_scope: source.c.nwscript - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-csrc - language_id: 731233819 -Nasal: - type: programming - color: "#1d2c4e" - extensions: - - ".nas" - tm_scope: none - ace_mode: text - language_id: 178322513 -Nearley: - type: programming - ace_mode: text - color: "#990000" - extensions: - - ".ne" - - ".nearley" - tm_scope: source.ne - language_id: 521429430 -Nemerle: - type: programming - color: "#3d3c6e" - extensions: - - ".n" - tm_scope: source.nemerle - ace_mode: text - language_id: 243 -NetLinx: - type: programming - color: "#0aa0ff" - extensions: - - ".axs" - - ".axi" - tm_scope: source.netlinx - ace_mode: text - language_id: 244 -NetLinx+ERB: - type: programming - color: "#747faa" - extensions: - - ".axs.erb" - - ".axi.erb" - tm_scope: source.netlinx.erb - ace_mode: text - language_id: 245 -NetLogo: - type: programming - color: "#ff6375" - extensions: - - ".nlogo" - tm_scope: source.lisp - ace_mode: lisp - codemirror_mode: commonlisp - codemirror_mime_type: text/x-common-lisp - language_id: 246 -NewLisp: - type: programming - color: "#87AED7" - extensions: - - ".nl" - - ".lisp" - - ".lsp" - interpreters: - - newlisp - tm_scope: source.lisp - ace_mode: lisp - codemirror_mode: commonlisp - codemirror_mime_type: text/x-common-lisp - language_id: 247 -Nextflow: - type: programming - ace_mode: groovy - tm_scope: source.nextflow - color: "#3ac486" - extensions: - - ".nf" - filenames: - - nextflow.config - interpreters: - - nextflow - language_id: 506780613 -Nginx: - type: data - color: "#009639" - extensions: - - ".nginx" - - ".nginxconf" - - ".vhost" - filenames: - - nginx.conf - tm_scope: source.nginx - aliases: - - nginx configuration file - ace_mode: text - codemirror_mode: nginx - codemirror_mime_type: text/x-nginx-conf - language_id: 248 -Nim: - type: programming - color: "#ffc200" - extensions: - - ".nim" - - ".nim.cfg" - - ".nimble" - - ".nimrod" - - ".nims" - filenames: - - nim.cfg - ace_mode: text - tm_scope: source.nim - language_id: 249 -Ninja: - type: data - tm_scope: source.ninja - extensions: - - ".ninja" - ace_mode: text - language_id: 250 -Nit: - type: programming - color: "#009917" - extensions: - - ".nit" - tm_scope: source.nit - ace_mode: text - language_id: 251 -Nix: - type: programming - color: "#7e7eff" - extensions: - - ".nix" - aliases: - - nixos - tm_scope: source.nix - ace_mode: nix - language_id: 252 -Nu: - type: programming - color: "#c9df40" - aliases: - - nush - extensions: - - ".nu" - filenames: - - Nukefile - tm_scope: source.nu - ace_mode: scheme - codemirror_mode: scheme - codemirror_mime_type: text/x-scheme - interpreters: - - nush - language_id: 253 -NumPy: - type: programming - color: "#9C8AF9" - group: Python - extensions: - - ".numpy" - - ".numpyw" - - ".numsc" - tm_scope: none - ace_mode: text - codemirror_mode: python - codemirror_mime_type: text/x-python - language_id: 254 -Nunjucks: - type: markup - color: "#3d8137" - extensions: - - ".njk" - aliases: - - njk - tm_scope: text.html.nunjucks - ace_mode: nunjucks - language_id: 461856962 -OASv2-json: - type: data - color: "#85ea2d" - extensions: - - ".json" - group: OpenAPI Specification v2 - tm_scope: source.json - ace_mode: json - codemirror_mode: javascript - codemirror_mime_type: application/json - language_id: 834374816 -OASv2-yaml: - type: data - color: "#85ea2d" - extensions: - - ".yaml" - - ".yml" - group: OpenAPI Specification v2 - tm_scope: source.yaml - ace_mode: yaml - codemirror_mode: yaml - codemirror_mime_type: text/x-yaml - language_id: 105187618 -OASv3-json: - type: data - color: "#85ea2d" - extensions: - - ".json" - group: OpenAPI Specification v3 - tm_scope: source.json - ace_mode: json - codemirror_mode: javascript - codemirror_mime_type: application/json - language_id: 980062566 -OASv3-yaml: - type: data - color: "#85ea2d" - extensions: - - ".yaml" - - ".yml" - group: OpenAPI Specification v3 - tm_scope: source.yaml - ace_mode: yaml - codemirror_mode: yaml - codemirror_mime_type: text/x-yaml - language_id: 51239111 -OCaml: - type: programming - ace_mode: ocaml - codemirror_mode: mllike - codemirror_mime_type: text/x-ocaml - color: "#3be133" - extensions: - - ".ml" - - ".eliom" - - ".eliomi" - - ".ml4" - - ".mli" - - ".mll" - - ".mly" - interpreters: - - ocaml - - ocamlrun - - ocamlscript - tm_scope: source.ocaml - language_id: 255 -ObjDump: - type: data - extensions: - - ".objdump" - tm_scope: objdump.x86asm - ace_mode: assembly_x86 - language_id: 256 -Object Data Instance Notation: - type: data - extensions: - - ".odin" - tm_scope: source.odin-ehr - ace_mode: text - language_id: 985227236 -ObjectScript: - type: programming - extensions: - - ".cls" - language_id: 202735509 - tm_scope: source.objectscript - color: "#424893" - ace_mode: text -Objective-C: - type: programming - tm_scope: source.objc - color: "#438eff" - aliases: - - obj-c - - objc - - objectivec - extensions: - - ".m" - - ".h" - ace_mode: objectivec - codemirror_mode: clike - codemirror_mime_type: text/x-objectivec - language_id: 257 -Objective-C++: - type: programming - tm_scope: source.objc++ - color: "#6866fb" - aliases: - - obj-c++ - - objc++ - - objectivec++ - extensions: - - ".mm" - ace_mode: objectivec - codemirror_mode: clike - codemirror_mime_type: text/x-objectivec - language_id: 258 -Objective-J: - type: programming - color: "#ff0c5a" - aliases: - - obj-j - - objectivej - - objj - extensions: - - ".j" - - ".sj" - tm_scope: source.js.objj - ace_mode: text - language_id: 259 -Odin: - type: programming - color: "#60AFFE" - aliases: - - odinlang - - odin-lang - extensions: - - ".odin" - tm_scope: source.odin - ace_mode: text - language_id: 889244082 -Omgrofl: - type: programming - extensions: - - ".omgrofl" - color: "#cabbff" - tm_scope: none - ace_mode: text - language_id: 260 -Opa: - type: programming - extensions: - - ".opa" - tm_scope: source.opa - ace_mode: text - language_id: 261 -Opal: - type: programming - color: "#f7ede0" - extensions: - - ".opal" - tm_scope: source.opal - ace_mode: text - language_id: 262 -Open Policy Agent: - type: programming - color: "#7d9199" - ace_mode: text - extensions: - - ".rego" - language_id: 840483232 - tm_scope: source.rego -OpenAPI Specification v2: - aliases: - - oasv2 - type: data - color: "#85ea2d" - tm_scope: none - ace_mode: text - language_id: 848295328 -OpenAPI Specification v3: - aliases: - - oasv3 - type: data - color: "#85ea2d" - tm_scope: none - ace_mode: text - language_id: 557959099 -OpenCL: - type: programming - color: "#ed2e2d" - group: C - extensions: - - ".cl" - - ".opencl" - tm_scope: source.c - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-csrc - language_id: 263 -OpenEdge ABL: - type: programming - color: "#5ce600" - aliases: - - progress - - openedge - - abl - extensions: - - ".p" - - ".cls" - - ".w" - tm_scope: source.abl - ace_mode: text - language_id: 264 -OpenQASM: - type: programming - extensions: - - ".qasm" - color: "#AA70FF" - tm_scope: source.qasm - ace_mode: text - language_id: 153739399 -OpenRC runscript: - type: programming - group: Shell - aliases: - - openrc - interpreters: - - openrc-run - tm_scope: source.shell - ace_mode: sh - codemirror_mode: shell - codemirror_mime_type: text/x-sh - language_id: 265 -OpenSCAD: - type: programming - color: "#e5cd45" - extensions: - - ".scad" - tm_scope: source.scad - ace_mode: scad - language_id: 266 -OpenStep Property List: - type: data - extensions: - - ".plist" - - ".glyphs" - tm_scope: source.plist - ace_mode: text - language_id: 598917541 -OpenType Feature File: - type: data - aliases: - - AFDKO - extensions: - - ".fea" - tm_scope: source.opentype - ace_mode: text - language_id: 374317347 -Option List: - type: data - color: "#476732" - aliases: - - opts - - ackrc - filenames: - - ".ackrc" - - ackrc - - mocha.opts - tm_scope: source.opts - ace_mode: sh - codemirror_mode: shell - codemirror_mime_type: text/x-sh - language_id: 723589315 -Org: - type: prose - color: "#77aa99" - wrap: true - extensions: - - ".org" - tm_scope: none - ace_mode: text - language_id: 267 -Ox: - type: programming - extensions: - - ".ox" - - ".oxh" - - ".oxo" - tm_scope: source.ox - ace_mode: text - language_id: 268 -Oxygene: - type: programming - color: "#cdd0e3" - extensions: - - ".oxygene" - tm_scope: none - ace_mode: text - language_id: 269 -Oz: - type: programming - color: "#fab738" - extensions: - - ".oz" - tm_scope: source.oz - ace_mode: text - codemirror_mode: oz - codemirror_mime_type: text/x-oz - language_id: 270 -P4: - type: programming - color: "#7055b5" - extensions: - - ".p4" - tm_scope: source.p4 - ace_mode: text - language_id: 348895984 -PDDL: - type: programming - color: "#0d00ff" - extensions: - - ".pddl" - tm_scope: source.pddl - ace_mode: text - language_id: 736235603 -PEG.js: - type: programming - color: "#234d6b" - extensions: - - ".pegjs" - tm_scope: source.pegjs - ace_mode: javascript - codemirror_mode: javascript - codemirror_mime_type: text/javascript - language_id: 81442128 -PHP: - type: programming - tm_scope: text.html.php - ace_mode: php - codemirror_mode: php - codemirror_mime_type: application/x-httpd-php - color: "#4F5D95" - extensions: - - ".php" - - ".aw" - - ".ctp" - - ".fcgi" - - ".inc" - - ".php3" - - ".php4" - - ".php5" - - ".phps" - - ".phpt" - filenames: - - ".php" - - ".php_cs" - - ".php_cs.dist" - - Phakefile - interpreters: - - php - aliases: - - inc - language_id: 272 -PLSQL: - type: programming - ace_mode: sql - codemirror_mode: sql - codemirror_mime_type: text/x-plsql - tm_scope: none - color: "#dad8d8" - extensions: - - ".pls" - - ".bdy" - - ".ddl" - - ".fnc" - - ".pck" - - ".pkb" - - ".pks" - - ".plb" - - ".plsql" - - ".prc" - - ".spc" - - ".sql" - - ".tpb" - - ".tps" - - ".trg" - - ".vw" - language_id: 273 -PLpgSQL: - type: programming - color: "#336790" - ace_mode: pgsql - codemirror_mode: sql - codemirror_mime_type: text/x-sql - tm_scope: source.sql - extensions: - - ".pgsql" - - ".sql" - language_id: 274 -POV-Ray SDL: - type: programming - color: "#6bac65" - aliases: - - pov-ray - - povray - extensions: - - ".pov" - - ".inc" - tm_scope: source.pov-ray sdl - ace_mode: text - language_id: 275 -Pan: - type: programming - color: "#cc0000" - extensions: - - ".pan" - tm_scope: source.pan - ace_mode: text - language_id: 276 -Papyrus: - type: programming - color: "#6600cc" - extensions: - - ".psc" - tm_scope: source.papyrus.skyrim - ace_mode: text - language_id: 277 -Parrot: - type: programming - color: "#f3ca0a" - extensions: - - ".parrot" - tm_scope: none - ace_mode: text - language_id: 278 -Parrot Assembly: - group: Parrot - type: programming - aliases: - - pasm - extensions: - - ".pasm" - interpreters: - - parrot - tm_scope: none - ace_mode: text - language_id: 279 -Parrot Internal Representation: - group: Parrot - tm_scope: source.parrot.pir - type: programming - aliases: - - pir - extensions: - - ".pir" - interpreters: - - parrot - ace_mode: text - language_id: 280 -Pascal: - type: programming - color: "#E3F171" - aliases: - - delphi - - objectpascal - extensions: - - ".pas" - - ".dfm" - - ".dpr" - - ".inc" - - ".lpr" - - ".pascal" - - ".pp" - interpreters: - - instantfpc - tm_scope: source.pascal - ace_mode: pascal - codemirror_mode: pascal - codemirror_mime_type: text/x-pascal - language_id: 281 -Pawn: - type: programming - color: "#dbb284" - extensions: - - ".pwn" - - ".inc" - - ".sma" - tm_scope: source.pawn - ace_mode: text - language_id: 271 -Pep8: - type: programming - color: "#C76F5B" - extensions: - - ".pep" - ace_mode: text - tm_scope: source.pep8 - language_id: 840372442 -Perl: - type: programming - tm_scope: source.perl - ace_mode: perl - codemirror_mode: perl - codemirror_mime_type: text/x-perl - color: "#0298c3" - extensions: - - ".pl" - - ".al" - - ".cgi" - - ".fcgi" - - ".perl" - - ".ph" - - ".plx" - - ".pm" - - ".psgi" - - ".t" - filenames: - - ".latexmkrc" - - Makefile.PL - - Rexfile - - ack - - cpanfile - - latexmkrc - interpreters: - - cperl - - perl - aliases: - - cperl - language_id: 282 -Pic: - type: markup - group: Roff - tm_scope: source.pic - extensions: - - ".pic" - - ".chem" - ace_mode: text - codemirror_mode: troff - codemirror_mime_type: text/troff - language_id: 425 -Pickle: - type: data - extensions: - - ".pkl" - tm_scope: none - ace_mode: text - language_id: 284 -PicoLisp: - type: programming - color: "#6067af" - extensions: - - ".l" - interpreters: - - picolisp - - pil - tm_scope: source.lisp - ace_mode: lisp - language_id: 285 -PigLatin: - type: programming - color: "#fcd7de" - extensions: - - ".pig" - tm_scope: source.pig_latin - ace_mode: text - language_id: 286 -Pike: - type: programming - color: "#005390" - extensions: - - ".pike" - - ".pmod" - interpreters: - - pike - tm_scope: source.pike - ace_mode: text - language_id: 287 -PlantUML: - type: data - extensions: - - ".puml" - - ".iuml" - - ".plantuml" - tm_scope: source.wsd - ace_mode: text - language_id: 833504686 -Pod: - type: prose - ace_mode: perl - codemirror_mode: perl - codemirror_mime_type: text/x-perl - wrap: true - extensions: - - ".pod" - interpreters: - - perl - tm_scope: none - language_id: 288 -Pod 6: - type: prose - ace_mode: perl - tm_scope: source.raku - wrap: true - extensions: - - ".pod" - - ".pod6" - interpreters: - - perl6 - language_id: 155357471 -PogoScript: - type: programming - color: "#d80074" - extensions: - - ".pogo" - tm_scope: source.pogoscript - ace_mode: text - language_id: 289 -Polar: - type: programming - color: "#ae81ff" - extensions: - - ".polar" - tm_scope: source.polar - ace_mode: text - language_id: 839112914 -Pony: - type: programming - extensions: - - ".pony" - tm_scope: source.pony - ace_mode: text - language_id: 290 -Portugol: - type: programming - color: "#f8bd00" - extensions: - - ".por" - tm_scope: source.portugol - ace_mode: text - language_id: 832391833 -PostCSS: - type: markup - color: "#dc3a0c" - tm_scope: source.postcss - group: CSS - extensions: - - ".pcss" - - ".postcss" - ace_mode: text - language_id: 262764437 -PostScript: - type: markup - color: "#da291c" - extensions: - - ".ps" - - ".eps" - - ".epsi" - - ".pfa" - tm_scope: source.postscript - aliases: - - postscr - ace_mode: text - language_id: 291 -PowerBuilder: - type: programming - color: "#8f0f8d" - extensions: - - ".pbt" - - ".sra" - - ".sru" - - ".srw" - tm_scope: none - ace_mode: text - language_id: 292 -PowerShell: - type: programming - color: "#012456" - tm_scope: source.powershell - ace_mode: powershell - codemirror_mode: powershell - codemirror_mime_type: application/x-powershell - aliases: - - posh - - pwsh - extensions: - - ".ps1" - - ".psd1" - - ".psm1" - interpreters: - - pwsh - language_id: 293 -Prisma: - type: data - color: "#0c344b" - extensions: - - ".prisma" - tm_scope: source.prisma - ace_mode: text - language_id: 499933428 -Processing: - type: programming - color: "#0096D8" - extensions: - - ".pde" - tm_scope: source.processing - ace_mode: text - language_id: 294 -Procfile: - type: programming - color: "#3B2F63" - filenames: - - Procfile - tm_scope: source.procfile - ace_mode: batchfile - language_id: 305313959 -Proguard: - type: data - extensions: - - ".pro" - tm_scope: none - ace_mode: text - language_id: 716513858 -Prolog: - type: programming - color: "#74283c" - extensions: - - ".pl" - - ".pro" - - ".prolog" - - ".yap" - interpreters: - - swipl - - yap - tm_scope: source.prolog - ace_mode: prolog - language_id: 295 -Promela: - type: programming - color: "#de0000" - tm_scope: source.promela - ace_mode: text - extensions: - - ".pml" - language_id: 441858312 -Propeller Spin: - type: programming - color: "#7fa2a7" - extensions: - - ".spin" - tm_scope: source.spin - ace_mode: text - language_id: 296 -Protocol Buffer: - type: data - aliases: - - protobuf - - Protocol Buffers - extensions: - - ".proto" - tm_scope: source.proto - ace_mode: protobuf - codemirror_mode: protobuf - codemirror_mime_type: text/x-protobuf - language_id: 297 -Protocol Buffer Text Format: - type: data - aliases: - - text proto - - protobuf text format - extensions: - - ".textproto" - - ".pbt" - - ".pbtxt" - tm_scope: source.textproto - ace_mode: text - language_id: 436568854 -Public Key: - type: data - extensions: - - ".asc" - - ".pub" - tm_scope: none - ace_mode: text - codemirror_mode: asciiarmor - codemirror_mime_type: application/pgp - language_id: 298 -Pug: - type: markup - color: "#a86454" - extensions: - - ".jade" - - ".pug" - tm_scope: text.jade - ace_mode: jade - codemirror_mode: pug - codemirror_mime_type: text/x-pug - language_id: 179 -Puppet: - type: programming - color: "#302B6D" - extensions: - - ".pp" - filenames: - - Modulefile - ace_mode: text - codemirror_mode: puppet - codemirror_mime_type: text/x-puppet - tm_scope: source.puppet - language_id: 299 -Pure Data: - type: data - extensions: - - ".pd" - tm_scope: none - ace_mode: text - language_id: 300 -PureBasic: - type: programming - color: "#5a6986" - extensions: - - ".pb" - - ".pbi" - tm_scope: none - ace_mode: text - language_id: 301 -PureScript: - type: programming - color: "#1D222D" - extensions: - - ".purs" - tm_scope: source.purescript - ace_mode: haskell - codemirror_mode: haskell - codemirror_mime_type: text/x-haskell - language_id: 302 -Python: - type: programming - tm_scope: source.python - ace_mode: python - codemirror_mode: python - codemirror_mime_type: text/x-python - color: "#3572A5" - extensions: - - ".py" - - ".cgi" - - ".fcgi" - - ".gyp" - - ".gypi" - - ".lmi" - - ".py3" - - ".pyde" - - ".pyi" - - ".pyp" - - ".pyt" - - ".pyw" - - ".rpy" - - ".smk" - - ".spec" - - ".tac" - - ".wsgi" - - ".xpy" - filenames: - - ".gclient" - - DEPS - - SConscript - - SConstruct - - Snakefile - - wscript - interpreters: - - python - - python2 - - python3 - aliases: - - python3 - - rusthon - language_id: 303 -Python console: - type: programming - color: "#3572A5" - group: Python - aliases: - - pycon - tm_scope: text.python.console - ace_mode: text - language_id: 428 -Python traceback: - type: data - color: "#3572A5" - group: Python - extensions: - - ".pytb" - tm_scope: text.python.traceback - ace_mode: text - language_id: 304 -Q#: - type: programming - extensions: - - ".qs" - aliases: - - qsharp - color: "#fed659" - ace_mode: text - tm_scope: source.qsharp - language_id: 697448245 -QML: - type: programming - color: "#44a51c" - extensions: - - ".qml" - - ".qbs" - tm_scope: source.qml - ace_mode: text - language_id: 305 -QMake: - type: programming - extensions: - - ".pro" - - ".pri" - interpreters: - - qmake - tm_scope: source.qmake - ace_mode: text - language_id: 306 -Qt Script: - type: programming - ace_mode: javascript - codemirror_mode: javascript - codemirror_mime_type: text/javascript - extensions: - - ".qs" - filenames: - - installscript.qs - - toolchain_installscript.qs - color: "#00b841" - tm_scope: source.js - language_id: 558193693 -Quake: - type: programming - filenames: - - m3makefile - - m3overrides - color: "#882233" - ace_mode: text - tm_scope: source.quake - language_id: 375265331 -R: - type: programming - color: "#198CE7" - aliases: - - R - - Rscript - - splus - extensions: - - ".r" - - ".rd" - - ".rsx" - filenames: - - ".Rprofile" - - expr-dist - interpreters: - - Rscript - tm_scope: source.r - ace_mode: r - codemirror_mode: r - codemirror_mime_type: text/x-rsrc - language_id: 307 -RAML: - type: markup - ace_mode: yaml - codemirror_mode: yaml - codemirror_mime_type: text/x-yaml - tm_scope: source.yaml - color: "#77d9fb" - extensions: - - ".raml" - language_id: 308 -RDoc: - type: prose - color: "#701516" - ace_mode: rdoc - wrap: true - extensions: - - ".rdoc" - tm_scope: text.rdoc - language_id: 309 -REALbasic: - type: programming - extensions: - - ".rbbas" - - ".rbfrm" - - ".rbmnu" - - ".rbres" - - ".rbtbar" - - ".rbuistate" - tm_scope: source.vbnet - ace_mode: text - language_id: 310 -REXX: - type: programming - color: "#d90e09" - aliases: - - arexx - extensions: - - ".rexx" - - ".pprx" - - ".rex" - interpreters: - - regina - - rexx - tm_scope: source.rexx - ace_mode: text - language_id: 311 -RMarkdown: - type: prose - color: "#198ce7" - wrap: true - ace_mode: markdown - codemirror_mode: gfm - codemirror_mime_type: text/x-gfm - extensions: - - ".qmd" - - ".rmd" - tm_scope: source.gfm - language_id: 313 -RPC: - type: programming - aliases: - - rpcgen - - oncrpc - - xdr - ace_mode: c_cpp - extensions: - - ".x" - tm_scope: source.c - language_id: 1031374237 -RPGLE: - type: programming - ace_mode: text - color: "#2BDE21" - aliases: - - ile rpg - - sqlrpgle - extensions: - - ".rpgle" - - ".sqlrpgle" - tm_scope: source.rpgle - language_id: 609977990 -RPM Spec: - type: data - tm_scope: source.rpm-spec - extensions: - - ".spec" - aliases: - - specfile - ace_mode: text - codemirror_mode: rpm - codemirror_mime_type: text/x-rpm-spec - language_id: 314 -RUNOFF: - type: markup - color: "#665a4e" - extensions: - - ".rnh" - - ".rno" - wrap: true - tm_scope: text.runoff - ace_mode: text - language_id: 315 -Racket: - type: programming - color: "#3c5caa" - extensions: - - ".rkt" - - ".rktd" - - ".rktl" - - ".scrbl" - interpreters: - - racket - tm_scope: source.racket - ace_mode: lisp - language_id: 316 -Ragel: - type: programming - color: "#9d5200" - extensions: - - ".rl" - aliases: - - ragel-rb - - ragel-ruby - tm_scope: none - ace_mode: text - language_id: 317 -Raku: - type: programming - color: "#0000fb" - extensions: - - ".6pl" - - ".6pm" - - ".nqp" - - ".p6" - - ".p6l" - - ".p6m" - - ".pl" - - ".pl6" - - ".pm" - - ".pm6" - - ".raku" - - ".rakumod" - - ".t" - interpreters: - - perl6 - - raku - - rakudo - aliases: - - perl6 - - perl-6 - tm_scope: source.raku - ace_mode: perl - codemirror_mode: perl - codemirror_mime_type: text/x-perl - language_id: 283 -Rascal: - type: programming - color: "#fffaa0" - extensions: - - ".rsc" - tm_scope: source.rascal - ace_mode: text - language_id: 173616037 -Raw token data: - type: data - aliases: - - raw - extensions: - - ".raw" - tm_scope: none - ace_mode: text - language_id: 318 -ReScript: - type: programming - color: "#ed5051" - ace_mode: rust - codemirror_mode: rust - codemirror_mime_type: text/x-rustsrc - extensions: - - ".res" - interpreters: - - ocaml - tm_scope: source.rescript - language_id: 501875647 -Readline Config: - type: data - group: INI - aliases: - - inputrc - - readline - filenames: - - ".inputrc" - - inputrc - tm_scope: source.inputrc - ace_mode: text - language_id: 538732839 -Reason: - type: programming - color: "#ff5847" - ace_mode: rust - codemirror_mode: rust - codemirror_mime_type: text/x-rustsrc - extensions: - - ".re" - - ".rei" - tm_scope: source.reason - language_id: 869538413 -ReasonLIGO: - type: programming - color: "#ff5847" - ace_mode: rust - codemirror_mode: rust - codemirror_mime_type: text/x-rustsrc - group: LigoLANG - extensions: - - ".religo" - tm_scope: source.religo - language_id: 319002153 -Rebol: - type: programming - color: "#358a5b" - extensions: - - ".reb" - - ".r" - - ".r2" - - ".r3" - - ".rebol" - ace_mode: text - tm_scope: source.rebol - language_id: 319 -Record Jar: - type: data - filenames: - - language-subtag-registry.txt - tm_scope: source.record-jar - codemirror_mode: properties - codemirror_mime_type: text/x-properties - ace_mode: text - color: "#0673ba" - language_id: 865765202 -Red: - type: programming - color: "#f50000" - extensions: - - ".red" - - ".reds" - aliases: - - red/system - tm_scope: source.red - ace_mode: text - language_id: 320 -Redcode: - type: programming - extensions: - - ".cw" - tm_scope: none - ace_mode: text - language_id: 321 -Redirect Rules: - type: data - aliases: - - redirects - filenames: - - _redirects - tm_scope: source.redirects - ace_mode: text - language_id: 1020148948 -Regular Expression: - type: data - color: "#009a00" - extensions: - - ".regexp" - - ".regex" - aliases: - - regexp - - regex - ace_mode: text - tm_scope: source.regexp - language_id: 363378884 -Ren'Py: - type: programming - aliases: - - renpy - color: "#ff7f7f" - extensions: - - ".rpy" - tm_scope: source.renpy - ace_mode: python - language_id: 322 -RenderScript: - type: programming - extensions: - - ".rs" - - ".rsh" - tm_scope: none - ace_mode: text - language_id: 323 -Rich Text Format: - type: markup - extensions: - - ".rtf" - tm_scope: text.rtf - ace_mode: text - language_id: 51601661 -Ring: - type: programming - color: "#2D54CB" - extensions: - - ".ring" - tm_scope: source.ring - ace_mode: text - language_id: 431 -Riot: - type: markup - color: "#A71E49" - ace_mode: html - extensions: - - ".riot" - tm_scope: text.html.riot - language_id: 878396783 -RobotFramework: - type: programming - color: "#00c0b5" - extensions: - - ".robot" - tm_scope: text.robot - ace_mode: text - language_id: 324 -Roff: - type: markup - color: "#ecdebe" - extensions: - - ".roff" - - ".1" - - ".1in" - - ".1m" - - ".1x" - - ".2" - - ".3" - - ".3in" - - ".3m" - - ".3p" - - ".3pm" - - ".3qt" - - ".3x" - - ".4" - - ".5" - - ".6" - - ".7" - - ".8" - - ".9" - - ".l" - - ".man" - - ".mdoc" - - ".me" - - ".ms" - - ".n" - - ".nr" - - ".rno" - - ".tmac" - filenames: - - eqnrc - - mmn - - mmt - - troffrc - - troffrc-end - tm_scope: text.roff - aliases: - - groff - - man - - manpage - - man page - - man-page - - mdoc - - nroff - - troff - wrap: true - ace_mode: text - codemirror_mode: troff - codemirror_mime_type: text/troff - language_id: 141 -Roff Manpage: - type: markup - color: "#ecdebe" - group: Roff - extensions: - - ".1" - - ".1in" - - ".1m" - - ".1x" - - ".2" - - ".3" - - ".3in" - - ".3m" - - ".3p" - - ".3pm" - - ".3qt" - - ".3x" - - ".4" - - ".5" - - ".6" - - ".7" - - ".8" - - ".9" - - ".man" - - ".mdoc" - wrap: true - tm_scope: text.roff - ace_mode: text - codemirror_mode: troff - codemirror_mime_type: text/troff - language_id: 612669833 -Rouge: - type: programming - ace_mode: clojure - codemirror_mode: clojure - codemirror_mime_type: text/x-clojure - color: "#cc0088" - extensions: - - ".rg" - tm_scope: source.clojure - language_id: 325 -RouterOS Script: - type: programming - ace_mode: text - extensions: - - ".rsc" - interpreters: - - RouterOS - color: "#DE3941" - tm_scope: none - language_id: 592853203 -Ruby: - type: programming - tm_scope: source.ruby - ace_mode: ruby - codemirror_mode: ruby - codemirror_mime_type: text/x-ruby - color: "#701516" - aliases: - - jruby - - macruby - - rake - - rb - - rbx - extensions: - - ".rb" - - ".builder" - - ".eye" - - ".fcgi" - - ".gemspec" - - ".god" - - ".jbuilder" - - ".mspec" - - ".pluginspec" - - ".podspec" - - ".prawn" - - ".rabl" - - ".rake" - - ".rbi" - - ".rbuild" - - ".rbw" - - ".rbx" - - ".ru" - - ".ruby" - - ".spec" - - ".thor" - - ".watchr" - interpreters: - - ruby - - macruby - - rake - - jruby - - rbx - filenames: - - ".irbrc" - - ".pryrc" - - ".simplecov" - - Appraisals - - Berksfile - - Brewfile - - Buildfile - - Capfile - - Dangerfile - - Deliverfile - - Fastfile - - Gemfile - - Guardfile - - Jarfile - - Mavenfile - - Podfile - - Puppetfile - - Rakefile - - Snapfile - - Steepfile - - Thorfile - - Vagrantfile - - buildfile - language_id: 326 -Rust: - type: programming - aliases: - - rs - color: "#dea584" - extensions: - - ".rs" - - ".rs.in" - tm_scope: source.rust - ace_mode: rust - codemirror_mode: rust - codemirror_mime_type: text/x-rustsrc - language_id: 327 -SAS: - type: programming - color: "#B34936" - extensions: - - ".sas" - tm_scope: source.sas - ace_mode: text - codemirror_mode: sas - codemirror_mime_type: text/x-sas - language_id: 328 -SCSS: - type: markup - color: "#c6538c" - tm_scope: source.css.scss - ace_mode: scss - codemirror_mode: css - codemirror_mime_type: text/x-scss - extensions: - - ".scss" - language_id: 329 -SELinux Policy: - aliases: - - SELinux Kernel Policy Language - - sepolicy - type: data - tm_scope: source.sepolicy - extensions: - - ".te" - filenames: - - file_contexts - - genfs_contexts - - initial_sids - - port_contexts - - security_classes - ace_mode: text - language_id: 880010326 -SMT: - type: programming - extensions: - - ".smt2" - - ".smt" - interpreters: - - boolector - - cvc4 - - mathsat5 - - opensmt - - smtinterpol - - smt-rat - - stp - - verit - - yices2 - - z3 - tm_scope: source.smt - ace_mode: text - language_id: 330 -SPARQL: - type: data - color: "#0C4597" - tm_scope: source.sparql - ace_mode: text - codemirror_mode: sparql - codemirror_mime_type: application/sparql-query - extensions: - - ".sparql" - - ".rq" - language_id: 331 -SQF: - type: programming - color: "#3F3F3F" - extensions: - - ".sqf" - - ".hqf" - tm_scope: source.sqf - ace_mode: text - language_id: 332 -SQL: - type: data - color: "#e38c00" - tm_scope: source.sql - ace_mode: sql - codemirror_mode: sql - codemirror_mime_type: text/x-sql - extensions: - - ".sql" - - ".cql" - - ".ddl" - - ".inc" - - ".mysql" - - ".prc" - - ".tab" - - ".udf" - - ".viw" - language_id: 333 -SQLPL: - type: programming - color: "#e38c00" - ace_mode: sql - codemirror_mode: sql - codemirror_mime_type: text/x-sql - tm_scope: source.sql - extensions: - - ".sql" - - ".db2" - language_id: 334 -SRecode Template: - type: markup - color: "#348a34" - tm_scope: source.lisp - ace_mode: lisp - codemirror_mode: commonlisp - codemirror_mime_type: text/x-common-lisp - extensions: - - ".srt" - language_id: 335 -SSH Config: - type: data - group: INI - filenames: - - ssh-config - - ssh_config - - sshconfig - - sshconfig.snip - - sshd-config - - sshd_config - ace_mode: text - tm_scope: source.ssh-config - language_id: 554920715 -STAR: - type: data - extensions: - - ".star" - tm_scope: source.star - ace_mode: text - language_id: 424510560 -STL: - type: data - color: "#373b5e" - aliases: - - ascii stl - - stla - extensions: - - ".stl" - tm_scope: source.stl - ace_mode: text - language_id: 455361735 -STON: - type: data - group: Smalltalk - extensions: - - ".ston" - tm_scope: source.smalltalk - ace_mode: text - language_id: 336 -SVG: - type: data - color: "#ff9900" - extensions: - - ".svg" - tm_scope: text.xml.svg - ace_mode: xml - codemirror_mode: xml - codemirror_mime_type: text/xml - language_id: 337 -SWIG: - type: programming - extensions: - - ".i" - tm_scope: source.c++ - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-c++src - language_id: 1066250075 -Sage: - type: programming - extensions: - - ".sage" - - ".sagews" - tm_scope: source.python - ace_mode: python - codemirror_mode: python - codemirror_mime_type: text/x-python - language_id: 338 -SaltStack: - type: programming - color: "#646464" - aliases: - - saltstate - - salt - extensions: - - ".sls" - tm_scope: source.yaml.salt - ace_mode: yaml - codemirror_mode: yaml - codemirror_mime_type: text/x-yaml - language_id: 339 -Sass: - type: markup - color: "#a53b70" - tm_scope: source.sass - extensions: - - ".sass" - ace_mode: sass - codemirror_mode: sass - codemirror_mime_type: text/x-sass - language_id: 340 -Scala: - type: programming - tm_scope: source.scala - ace_mode: scala - codemirror_mode: clike - codemirror_mime_type: text/x-scala - color: "#c22d40" - extensions: - - ".scala" - - ".kojo" - - ".sbt" - - ".sc" - interpreters: - - scala - language_id: 341 -Scaml: - type: markup - color: "#bd181a" - extensions: - - ".scaml" - tm_scope: source.scaml - ace_mode: text - language_id: 342 -Scenic: - type: programming - color: "#fdc700" - extensions: - - ".scenic" - tm_scope: source.scenic - ace_mode: text - interpreters: - - scenic - language_id: 619814037 -Scheme: - type: programming - color: "#1e4aec" - extensions: - - ".scm" - - ".sch" - - ".sld" - - ".sls" - - ".sps" - - ".ss" - interpreters: - - scheme - - guile - - bigloo - - chicken - - csi - - gosh - - r6rs - tm_scope: source.scheme - ace_mode: scheme - codemirror_mode: scheme - codemirror_mime_type: text/x-scheme - language_id: 343 -Scilab: - type: programming - color: "#ca0f21" - extensions: - - ".sci" - - ".sce" - - ".tst" - tm_scope: source.scilab - ace_mode: text - language_id: 344 -Self: - type: programming - color: "#0579aa" - extensions: - - ".self" - tm_scope: none - ace_mode: text - language_id: 345 -ShaderLab: - type: programming - color: "#222c37" - extensions: - - ".shader" - ace_mode: text - tm_scope: source.shaderlab - language_id: 664257356 -Shell: - type: programming - color: "#89e051" - aliases: - - sh - - shell-script - - bash - - zsh - extensions: - - ".sh" - - ".bash" - - ".bats" - - ".cgi" - - ".command" - - ".env" - - ".fcgi" - - ".ksh" - - ".sh.in" - - ".tmux" - - ".tool" - - ".zsh" - - ".zsh-theme" - filenames: - - ".bash_aliases" - - ".bash_history" - - ".bash_logout" - - ".bash_profile" - - ".bashrc" - - ".cshrc" - - ".env" - - ".env.example" - - ".flaskenv" - - ".kshrc" - - ".login" - - ".profile" - - ".zlogin" - - ".zlogout" - - ".zprofile" - - ".zshenv" - - ".zshrc" - - 9fs - - PKGBUILD - - bash_aliases - - bash_logout - - bash_profile - - bashrc - - cshrc - - gradlew - - kshrc - - login - - man - - profile - - zlogin - - zlogout - - zprofile - - zshenv - - zshrc - interpreters: - - ash - - bash - - dash - - ksh - - mksh - - pdksh - - rc - - sh - - zsh - tm_scope: source.shell - ace_mode: sh - codemirror_mode: shell - codemirror_mime_type: text/x-sh - language_id: 346 -ShellCheck Config: - type: data - color: "#cecfcb" - filenames: - - ".shellcheckrc" - aliases: - - shellcheckrc - tm_scope: source.shellcheckrc - ace_mode: ini - codemirror_mode: properties - codemirror_mime_type: text/x-properties - language_id: 687511714 -ShellSession: - type: programming - extensions: - - ".sh-session" - aliases: - - bash session - - console - tm_scope: text.shell-session - ace_mode: sh - codemirror_mode: shell - codemirror_mime_type: text/x-sh - language_id: 347 -Shen: - type: programming - color: "#120F14" - extensions: - - ".shen" - tm_scope: source.shen - ace_mode: text - language_id: 348 -Sieve: - type: programming - tm_scope: source.sieve - ace_mode: text - extensions: - - ".sieve" - codemirror_mode: sieve - codemirror_mime_type: application/sieve - language_id: 208976687 -Simple File Verification: - type: data - group: Checksums - color: "#C9BFED" - extensions: - - ".sfv" - aliases: - - sfv - tm_scope: source.sfv - ace_mode: ini - codemirror_mode: properties - codemirror_mime_type: text/x-properties - language_id: 735623761 -Singularity: - type: programming - color: "#64E6AD" - tm_scope: source.singularity - filenames: - - Singularity - ace_mode: text - language_id: 987024632 -Slash: - type: programming - color: "#007eff" - extensions: - - ".sl" - tm_scope: text.html.slash - ace_mode: text - language_id: 349 -Slice: - type: programming - color: "#003fa2" - tm_scope: source.slice - ace_mode: text - extensions: - - ".ice" - language_id: 894641667 -Slim: - type: markup - color: "#2b2b2b" - extensions: - - ".slim" - tm_scope: text.slim - ace_mode: text - codemirror_mode: slim - codemirror_mime_type: text/x-slim - language_id: 350 -SmPL: - type: programming - extensions: - - ".cocci" - aliases: - - coccinelle - ace_mode: text - tm_scope: source.smpl - color: "#c94949" - language_id: 164123055 -Smali: - type: programming - extensions: - - ".smali" - ace_mode: text - tm_scope: source.smali - language_id: 351 -Smalltalk: - type: programming - color: "#596706" - extensions: - - ".st" - - ".cs" - aliases: - - squeak - tm_scope: source.smalltalk - ace_mode: text - codemirror_mode: smalltalk - codemirror_mime_type: text/x-stsrc - language_id: 352 -Smarty: - type: programming - color: "#f0c040" - extensions: - - ".tpl" - ace_mode: smarty - codemirror_mode: smarty - codemirror_mime_type: text/x-smarty - tm_scope: text.html.smarty - language_id: 353 -Smithy: - type: programming - ace_mode: text - codemirror_mode: clike - codemirror_mime_type: text/x-csrc - tm_scope: source.smithy - color: "#c44536" - extensions: - - ".smithy" - language_id: 1027892786 -Solidity: - type: programming - color: "#AA6746" - ace_mode: text - tm_scope: source.solidity - extensions: - - ".sol" - language_id: 237469032 -Soong: - type: data - tm_scope: source.bp - ace_mode: text - filenames: - - Android.bp - language_id: 222900098 -SourcePawn: - type: programming - color: "#f69e1d" - aliases: - - sourcemod - extensions: - - ".sp" - - ".inc" - tm_scope: source.sourcepawn - ace_mode: text - language_id: 354 -Spline Font Database: - type: data - extensions: - - ".sfd" - tm_scope: text.sfd - ace_mode: yaml - language_id: 767169629 -Squirrel: - type: programming - color: "#800000" - extensions: - - ".nut" - tm_scope: source.nut - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-c++src - language_id: 355 -Stan: - type: programming - color: "#b2011d" - extensions: - - ".stan" - ace_mode: text - tm_scope: source.stan - language_id: 356 -Standard ML: - type: programming - color: "#dc566d" - aliases: - - sml - extensions: - - ".ml" - - ".fun" - - ".sig" - - ".sml" - tm_scope: source.ml - ace_mode: text - codemirror_mode: mllike - codemirror_mime_type: text/x-ocaml - language_id: 357 -Starlark: - type: programming - tm_scope: source.python - ace_mode: python - codemirror_mode: python - codemirror_mime_type: text/x-python - color: "#76d275" - extensions: - - ".bzl" - - ".star" - filenames: - - BUCK - - BUILD - - BUILD.bazel - - Tiltfile - - WORKSPACE - - WORKSPACE.bazel - aliases: - - bazel - - bzl - language_id: 960266174 -Stata: - type: programming - color: "#1a5f91" - extensions: - - ".do" - - ".ado" - - ".doh" - - ".ihlp" - - ".mata" - - ".matah" - - ".sthlp" - tm_scope: source.stata - ace_mode: text - language_id: 358 -StringTemplate: - type: markup - color: "#3fb34f" - extensions: - - ".st" - tm_scope: source.string-template - ace_mode: html - codemirror_mode: htmlmixed - codemirror_mime_type: text/html - language_id: 89855901 -Stylus: - type: markup - color: "#ff6347" - extensions: - - ".styl" - tm_scope: source.stylus - ace_mode: stylus - language_id: 359 -SubRip Text: - type: data - color: "#9e0101" - extensions: - - ".srt" - ace_mode: text - tm_scope: text.srt - language_id: 360 -SugarSS: - type: markup - color: "#2fcc9f" - tm_scope: source.css.postcss.sugarss - extensions: - - ".sss" - ace_mode: text - language_id: 826404698 -SuperCollider: - type: programming - color: "#46390b" - extensions: - - ".sc" - - ".scd" - interpreters: - - sclang - - scsynth - tm_scope: source.supercollider - ace_mode: text - language_id: 361 -Svelte: - type: markup - color: "#ff3e00" - tm_scope: source.svelte - ace_mode: html - codemirror_mode: htmlmixed - codemirror_mime_type: text/html - extensions: - - ".svelte" - language_id: 928734530 -Swift: - type: programming - color: "#F05138" - extensions: - - ".swift" - tm_scope: source.swift - ace_mode: text - codemirror_mode: swift - codemirror_mime_type: text/x-swift - language_id: 362 -SystemVerilog: - type: programming - color: "#DAE1C2" - extensions: - - ".sv" - - ".svh" - - ".vh" - tm_scope: source.systemverilog - ace_mode: verilog - codemirror_mode: verilog - codemirror_mime_type: text/x-systemverilog - language_id: 363 -TI Program: - type: programming - ace_mode: text - color: "#A0AA87" - extensions: - - ".8xp" - - ".8xk" - - ".8xk.txt" - - ".8xp.txt" - language_id: 422 - tm_scope: none -TLA: - type: programming - color: "#4b0079" - extensions: - - ".tla" - tm_scope: source.tla - ace_mode: text - language_id: 364 -TOML: - type: data - color: "#9c4221" - extensions: - - ".toml" - filenames: - - Cargo.lock - - Gopkg.lock - - Pipfile - - pdm.lock - - poetry.lock - tm_scope: source.toml - ace_mode: toml - codemirror_mode: toml - codemirror_mime_type: text/x-toml - language_id: 365 -TSQL: - type: programming - color: "#e38c00" - extensions: - - ".sql" - ace_mode: sql - tm_scope: source.tsql - language_id: 918334941 -TSV: - type: data - color: "#237346" - ace_mode: text - tm_scope: source.generic-db - extensions: - - ".tsv" - language_id: 1035892117 -TSX: - type: programming - color: "#3178c6" - group: TypeScript - extensions: - - ".tsx" - tm_scope: source.tsx - ace_mode: javascript - codemirror_mode: jsx - codemirror_mime_type: text/jsx - language_id: 94901924 -TXL: - type: programming - color: "#0178b8" - extensions: - - ".txl" - tm_scope: source.txl - ace_mode: text - language_id: 366 -Talon: - type: programming - ace_mode: text - color: "#333333" - extensions: - - ".talon" - tm_scope: source.talon - language_id: 959889508 -Tcl: - type: programming - color: "#e4cc98" - extensions: - - ".tcl" - - ".adp" - - ".sdc" - - ".tcl.in" - - ".tm" - - ".xdc" - aliases: - - sdc - - xdc - filenames: - - owh - - starfield - interpreters: - - tclsh - - wish - tm_scope: source.tcl - ace_mode: tcl - codemirror_mode: tcl - codemirror_mime_type: text/x-tcl - language_id: 367 -Tcsh: - type: programming - group: Shell - extensions: - - ".tcsh" - - ".csh" - interpreters: - - tcsh - - csh - tm_scope: source.shell - ace_mode: sh - codemirror_mode: shell - codemirror_mime_type: text/x-sh - language_id: 368 -TeX: - type: markup - color: "#3D6117" - ace_mode: tex - codemirror_mode: stex - codemirror_mime_type: text/x-stex - tm_scope: text.tex.latex - wrap: true - aliases: - - latex - extensions: - - ".tex" - - ".aux" - - ".bbx" - - ".cbx" - - ".cls" - - ".dtx" - - ".ins" - - ".lbx" - - ".ltx" - - ".mkii" - - ".mkiv" - - ".mkvi" - - ".sty" - - ".toc" - language_id: 369 -Tea: - type: markup - extensions: - - ".tea" - tm_scope: source.tea - ace_mode: text - language_id: 370 -Terra: - type: programming - extensions: - - ".t" - color: "#00004c" - tm_scope: source.terra - ace_mode: lua - codemirror_mode: lua - codemirror_mime_type: text/x-lua - interpreters: - - lua - language_id: 371 -Texinfo: - type: prose - wrap: true - extensions: - - ".texinfo" - - ".texi" - - ".txi" - ace_mode: text - tm_scope: text.texinfo - interpreters: - - makeinfo - language_id: 988020015 -Text: - type: prose - wrap: true - aliases: - - fundamental - - plain text - extensions: - - ".txt" - - ".fr" - - ".nb" - - ".ncl" - - ".no" - filenames: - - CITATION - - CITATIONS - - COPYING - - COPYING.regex - - COPYRIGHT.regex - - FONTLOG - - INSTALL - - INSTALL.mysql - - LICENSE - - LICENSE.mysql - - NEWS - - README.me - - README.mysql - - README.nss - - click.me - - delete.me - - keep.me - - package.mask - - package.use.mask - - package.use.stable.mask - - read.me - - readme.1st - - test.me - - use.mask - - use.stable.mask - tm_scope: none - ace_mode: text - language_id: 372 -TextMate Properties: - type: data - color: "#df66e4" - aliases: - - tm-properties - filenames: - - ".tm_properties" - ace_mode: properties - codemirror_mode: properties - codemirror_mime_type: text/x-properties - tm_scope: source.tm-properties - language_id: 981795023 -Textile: - type: prose - color: "#ffe7ac" - ace_mode: textile - codemirror_mode: textile - codemirror_mime_type: text/x-textile - wrap: true - extensions: - - ".textile" - tm_scope: none - language_id: 373 -Thrift: - type: programming - color: "#D12127" - tm_scope: source.thrift - extensions: - - ".thrift" - ace_mode: text - language_id: 374 -Turing: - type: programming - color: "#cf142b" - extensions: - - ".t" - - ".tu" - tm_scope: source.turing - ace_mode: text - language_id: 375 -Turtle: - type: data - extensions: - - ".ttl" - tm_scope: source.turtle - ace_mode: text - codemirror_mode: turtle - codemirror_mime_type: text/turtle - language_id: 376 -Twig: - type: markup - color: "#c1d026" - extensions: - - ".twig" - tm_scope: text.html.twig - ace_mode: twig - codemirror_mode: twig - codemirror_mime_type: text/x-twig - language_id: 377 -Type Language: - type: data - aliases: - - tl - extensions: - - ".tl" - tm_scope: source.tl - ace_mode: text - language_id: 632765617 -TypeScript: - type: programming - color: "#3178c6" - aliases: - - ts - interpreters: - - deno - - ts-node - extensions: - - ".ts" - - ".cts" - - ".mts" - tm_scope: source.ts - ace_mode: typescript - codemirror_mode: javascript - codemirror_mime_type: application/typescript - language_id: 378 -Unified Parallel C: - type: programming - color: "#4e3617" - group: C - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-csrc - extensions: - - ".upc" - tm_scope: source.c - language_id: 379 -Unity3D Asset: - type: data - color: "#222c37" - ace_mode: yaml - codemirror_mode: yaml - codemirror_mime_type: text/x-yaml - extensions: - - ".anim" - - ".asset" - - ".mask" - - ".mat" - - ".meta" - - ".prefab" - - ".unity" - tm_scope: source.yaml - language_id: 380 -Unix Assembly: - type: programming - group: Assembly - extensions: - - ".s" - - ".ms" - aliases: - - gas - - gnu asm - - unix asm - tm_scope: source.x86 - ace_mode: assembly_x86 - language_id: 120 -Uno: - type: programming - color: "#9933cc" - extensions: - - ".uno" - ace_mode: csharp - codemirror_mode: clike - codemirror_mime_type: text/x-csharp - tm_scope: source.cs - language_id: 381 -UnrealScript: - type: programming - color: "#a54c4d" - extensions: - - ".uc" - tm_scope: source.java - ace_mode: java - codemirror_mode: clike - codemirror_mime_type: text/x-java - language_id: 382 -UrWeb: - type: programming - color: "#ccccee" - aliases: - - Ur/Web - - Ur - extensions: - - ".ur" - - ".urs" - tm_scope: source.ur - ace_mode: text - language_id: 383 -V: - type: programming - color: "#4f87c4" - aliases: - - vlang - extensions: - - ".v" - tm_scope: source.v - ace_mode: golang - codemirror_mode: go - codemirror_mime_type: text/x-go - language_id: 603371597 -VBA: - type: programming - color: "#867db1" - extensions: - - ".bas" - - ".cls" - - ".frm" - - ".vba" - tm_scope: source.vbnet - aliases: - - visual basic for applications - ace_mode: text - codemirror_mode: vb - codemirror_mime_type: text/x-vb - language_id: 399230729 -VBScript: - type: programming - color: "#15dcdc" - extensions: - - ".vbs" - tm_scope: source.vbnet - ace_mode: text - codemirror_mode: vbscript - codemirror_mime_type: text/vbscript - language_id: 408016005 -VCL: - type: programming - color: "#148AA8" - extensions: - - ".vcl" - tm_scope: source.varnish.vcl - ace_mode: text - language_id: 384 -VHDL: - type: programming - color: "#adb2cb" - extensions: - - ".vhdl" - - ".vhd" - - ".vhf" - - ".vhi" - - ".vho" - - ".vhs" - - ".vht" - - ".vhw" - tm_scope: source.vhdl - ace_mode: vhdl - codemirror_mode: vhdl - codemirror_mime_type: text/x-vhdl - language_id: 385 -Vala: - type: programming - color: "#a56de2" - extensions: - - ".vala" - - ".vapi" - tm_scope: source.vala - ace_mode: vala - language_id: 386 -Valve Data Format: - type: data - color: "#f26025" - aliases: - - keyvalues - - vdf - extensions: - - ".vdf" - ace_mode: text - tm_scope: source.keyvalues - language_id: 544060961 -Velocity Template Language: - type: markup - color: "#507cff" - aliases: - - vtl - - velocity - extensions: - - ".vtl" - ace_mode: velocity - tm_scope: source.velocity - codemirror_mode: velocity - codemirror_mime_type: text/velocity - language_id: 292377326 -Verilog: - type: programming - color: "#b2b7f8" - extensions: - - ".v" - - ".veo" - tm_scope: source.verilog - ace_mode: verilog - codemirror_mode: verilog - codemirror_mime_type: text/x-verilog - language_id: 387 -Vim Help File: - type: prose - color: "#199f4b" - aliases: - - help - - vimhelp - extensions: - - ".txt" - tm_scope: text.vim-help - ace_mode: text - language_id: 508563686 -Vim Script: - type: programming - color: "#199f4b" - tm_scope: source.viml - aliases: - - vim - - viml - - nvim - extensions: - - ".vim" - - ".vba" - - ".vimrc" - - ".vmb" - filenames: - - ".exrc" - - ".gvimrc" - - ".nvimrc" - - ".vimrc" - - _vimrc - - gvimrc - - nvimrc - - vimrc - ace_mode: text - language_id: 388 -Vim Snippet: - type: markup - color: "#199f4b" - aliases: - - SnipMate - - UltiSnip - - UltiSnips - - NeoSnippet - extensions: - - ".snip" - - ".snippet" - - ".snippets" - tm_scope: source.vim-snippet - ace_mode: text - language_id: 81265970 -Visual Basic .NET: - type: programming - color: "#945db7" - extensions: - - ".vb" - - ".vbhtml" - aliases: - - visual basic - - vbnet - - vb .net - - vb.net - tm_scope: source.vbnet - ace_mode: text - codemirror_mode: vb - codemirror_mime_type: text/x-vb - language_id: 389 -Visual Basic 6.0: - type: programming - color: "#2c6353" - extensions: - - ".cls" - - ".ctl" - - ".Dsr" - - ".frm" - tm_scope: source.vbnet - aliases: - - vb6 - - vb 6 - - visual basic 6 - - visual basic classic - - classic visual basic - ace_mode: text - codemirror_mode: vb - codemirror_mime_type: text/x-vb - language_id: 679594952 -Volt: - type: programming - color: "#1F1F1F" - extensions: - - ".volt" - tm_scope: source.d - ace_mode: d - codemirror_mode: d - codemirror_mime_type: text/x-d - language_id: 390 -Vue: - type: markup - color: "#41b883" - extensions: - - ".vue" - tm_scope: text.html.vue - ace_mode: html - language_id: 391 -Vyper: - type: programming - extensions: - - ".vy" - color: "#2980b9" - ace_mode: text - tm_scope: source.vyper - language_id: 1055641948 -Wavefront Material: - type: data - extensions: - - ".mtl" - tm_scope: source.wavefront.mtl - ace_mode: text - language_id: 392 -Wavefront Object: - type: data - extensions: - - ".obj" - tm_scope: source.wavefront.obj - ace_mode: text - language_id: 393 -Web Ontology Language: - type: data - color: "#5b70bd" - extensions: - - ".owl" - tm_scope: text.xml - ace_mode: xml - language_id: 394 -WebAssembly: - type: programming - color: "#04133b" - extensions: - - ".wast" - - ".wat" - aliases: - - wast - - wasm - tm_scope: source.webassembly - ace_mode: lisp - codemirror_mode: commonlisp - codemirror_mime_type: text/x-common-lisp - language_id: 956556503 -WebIDL: - type: programming - extensions: - - ".webidl" - tm_scope: source.webidl - ace_mode: text - codemirror_mode: webidl - codemirror_mime_type: text/x-webidl - language_id: 395 -WebVTT: - type: data - wrap: true - aliases: - - vtt - extensions: - - ".vtt" - tm_scope: text.vtt - ace_mode: text - language_id: 658679714 -Wget Config: - type: data - group: INI - aliases: - - wgetrc - filenames: - - ".wgetrc" - tm_scope: source.wgetrc - ace_mode: text - language_id: 668457123 -Whiley: - type: programming - color: "#d5c397" - extensions: - - ".whiley" - tm_scope: source.whiley - ace_mode: text - language_id: 888779559 -Wikitext: - type: prose - color: "#fc5757" - wrap: true - aliases: - - mediawiki - - wiki - extensions: - - ".mediawiki" - - ".wiki" - - ".wikitext" - tm_scope: text.html.mediawiki - ace_mode: text - language_id: 228 -Win32 Message File: - type: data - extensions: - - ".mc" - tm_scope: source.win32-messages - ace_mode: ini - codemirror_mode: properties - codemirror_mime_type: text/x-properties - language_id: 950967261 -Windows Registry Entries: - type: data - color: "#52d5ff" - extensions: - - ".reg" - tm_scope: source.reg - ace_mode: ini - codemirror_mode: properties - codemirror_mime_type: text/x-properties - language_id: 969674868 -Witcher Script: - type: programming - color: "#ff0000" - extensions: - - ".ws" - ace_mode: text - tm_scope: source.witcherscript - language_id: 686821385 -Wollok: - type: programming - color: "#a23738" - extensions: - - ".wlk" - ace_mode: text - tm_scope: source.wollok - language_id: 632745969 -World of Warcraft Addon Data: - type: data - color: "#f7e43f" - extensions: - - ".toc" - tm_scope: source.toc - ace_mode: text - language_id: 396 -Wren: - type: programming - color: "#383838" - aliases: - - wrenlang - extensions: - - ".wren" - tm_scope: source.wren - ace_mode: text - language_id: 713580619 -X BitMap: - type: data - group: C - aliases: - - xbm - extensions: - - ".xbm" - ace_mode: c_cpp - tm_scope: source.c - codemirror_mode: clike - codemirror_mime_type: text/x-csrc - language_id: 782911107 -X Font Directory Index: - type: data - filenames: - - encodings.dir - - fonts.alias - - fonts.dir - - fonts.scale - tm_scope: source.fontdir - ace_mode: text - language_id: 208700028 -X PixMap: - type: data - group: C - aliases: - - xpm - extensions: - - ".xpm" - - ".pm" - ace_mode: c_cpp - tm_scope: source.c - codemirror_mode: clike - codemirror_mime_type: text/x-csrc - language_id: 781846279 -X10: - type: programming - aliases: - - xten - ace_mode: text - extensions: - - ".x10" - color: "#4B6BEF" - tm_scope: source.x10 - language_id: 397 -XC: - type: programming - color: "#99DA07" - extensions: - - ".xc" - tm_scope: source.xc - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-csrc - language_id: 398 -XCompose: - type: data - filenames: - - ".XCompose" - - XCompose - - xcompose - tm_scope: config.xcompose - ace_mode: text - language_id: 225167241 -XML: - type: data - color: "#0060ac" - tm_scope: text.xml - ace_mode: xml - codemirror_mode: xml - codemirror_mime_type: text/xml - aliases: - - rss - - xsd - - wsdl - extensions: - - ".xml" - - ".adml" - - ".admx" - - ".ant" - - ".axaml" - - ".axml" - - ".builds" - - ".ccproj" - - ".ccxml" - - ".clixml" - - ".cproject" - - ".cscfg" - - ".csdef" - - ".csl" - - ".csproj" - - ".ct" - - ".depproj" - - ".dita" - - ".ditamap" - - ".ditaval" - - ".dll.config" - - ".dotsettings" - - ".filters" - - ".fsproj" - - ".fxml" - - ".glade" - - ".gml" - - ".gmx" - - ".grxml" - - ".gst" - - ".hzp" - - ".iml" - - ".ivy" - - ".jelly" - - ".jsproj" - - ".kml" - - ".launch" - - ".mdpolicy" - - ".mjml" - - ".mm" - - ".mod" - - ".mxml" - - ".natvis" - - ".ncl" - - ".ndproj" - - ".nproj" - - ".nuspec" - - ".odd" - - ".osm" - - ".pkgproj" - - ".pluginspec" - - ".proj" - - ".props" - - ".ps1xml" - - ".psc1" - - ".pt" - - ".qhelp" - - ".rdf" - - ".res" - - ".resx" - - ".rs" - - ".rss" - - ".sch" - - ".scxml" - - ".sfproj" - - ".shproj" - - ".srdf" - - ".storyboard" - - ".sublime-snippet" - - ".targets" - - ".tml" - - ".ts" - - ".tsx" - - ".ui" - - ".urdf" - - ".ux" - - ".vbproj" - - ".vcxproj" - - ".vsixmanifest" - - ".vssettings" - - ".vstemplate" - - ".vxml" - - ".wixproj" - - ".workflow" - - ".wsdl" - - ".wsf" - - ".wxi" - - ".wxl" - - ".wxs" - - ".x3d" - - ".xacro" - - ".xaml" - - ".xib" - - ".xlf" - - ".xliff" - - ".xmi" - - ".xml.dist" - - ".xmp" - - ".xproj" - - ".xsd" - - ".xspec" - - ".xul" - - ".zcml" - filenames: - - ".classpath" - - ".cproject" - - ".project" - - App.config - - NuGet.config - - Settings.StyleCop - - Web.Debug.config - - Web.Release.config - - Web.config - - packages.config - language_id: 399 -XML Property List: - type: data - color: "#0060ac" - group: XML - extensions: - - ".plist" - - ".stTheme" - - ".tmCommand" - - ".tmLanguage" - - ".tmPreferences" - - ".tmSnippet" - - ".tmTheme" - tm_scope: text.xml.plist - ace_mode: xml - codemirror_mode: xml - codemirror_mime_type: text/xml - language_id: 75622871 -XPages: - type: data - extensions: - - ".xsp-config" - - ".xsp.metadata" - tm_scope: text.xml - ace_mode: xml - codemirror_mode: xml - codemirror_mime_type: text/xml - language_id: 400 -XProc: - type: programming - extensions: - - ".xpl" - - ".xproc" - tm_scope: text.xml - ace_mode: xml - codemirror_mode: xml - codemirror_mime_type: text/xml - language_id: 401 -XQuery: - type: programming - color: "#5232e7" - extensions: - - ".xquery" - - ".xq" - - ".xql" - - ".xqm" - - ".xqy" - ace_mode: xquery - codemirror_mode: xquery - codemirror_mime_type: application/xquery - tm_scope: source.xq - language_id: 402 -XS: - type: programming - extensions: - - ".xs" - tm_scope: source.c - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-csrc - language_id: 403 -XSLT: - type: programming - aliases: - - xsl - extensions: - - ".xslt" - - ".xsl" - tm_scope: text.xml.xsl - ace_mode: xml - codemirror_mode: xml - codemirror_mime_type: text/xml - color: "#EB8CEB" - language_id: 404 -Xojo: - type: programming - color: "#81bd41" - extensions: - - ".xojo_code" - - ".xojo_menu" - - ".xojo_report" - - ".xojo_script" - - ".xojo_toolbar" - - ".xojo_window" - tm_scope: source.xojo - ace_mode: text - language_id: 405 -Xonsh: - type: programming - color: "#285EEF" - extensions: - - ".xsh" - tm_scope: source.python - ace_mode: text - codemirror_mode: python - codemirror_mime_type: text/x-python - language_id: 614078284 -Xtend: - type: programming - color: "#24255d" - extensions: - - ".xtend" - tm_scope: source.xtend - ace_mode: text - language_id: 406 -YAML: - type: data - color: "#cb171e" - tm_scope: source.yaml - aliases: - - yml - extensions: - - ".yml" - - ".mir" - - ".reek" - - ".rviz" - - ".sublime-syntax" - - ".syntax" - - ".yaml" - - ".yaml-tmlanguage" - - ".yaml.sed" - - ".yml.mysql" - filenames: - - ".clang-format" - - ".clang-tidy" - - ".gemrc" - - CITATION.cff - - glide.lock - - yarn.lock - ace_mode: yaml - codemirror_mode: yaml - codemirror_mime_type: text/x-yaml - language_id: 407 -YANG: - type: data - extensions: - - ".yang" - tm_scope: source.yang - ace_mode: text - language_id: 408 -YARA: - type: programming - color: "#220000" - ace_mode: text - extensions: - - ".yar" - - ".yara" - tm_scope: source.yara - language_id: 805122868 -YASnippet: - type: markup - aliases: - - snippet - - yas - color: "#32AB90" - extensions: - - ".yasnippet" - tm_scope: source.yasnippet - ace_mode: text - language_id: 378760102 -Yacc: - type: programming - extensions: - - ".y" - - ".yacc" - - ".yy" - tm_scope: source.yacc - ace_mode: text - color: "#4B6C4B" - language_id: 409 -Yul: - type: programming - color: "#794932" - ace_mode: text - tm_scope: source.yul - extensions: - - ".yul" - language_id: 237469033 -ZAP: - type: programming - color: "#0d665e" - extensions: - - ".zap" - - ".xzap" - tm_scope: source.zap - ace_mode: text - language_id: 952972794 -ZIL: - type: programming - color: "#dc75e5" - extensions: - - ".zil" - - ".mud" - tm_scope: source.zil - ace_mode: text - language_id: 973483626 -Zeek: - type: programming - aliases: - - bro - extensions: - - ".zeek" - - ".bro" - tm_scope: source.zeek - ace_mode: text - language_id: 40 -ZenScript: - type: programming - color: "#00BCD1" - extensions: - - ".zs" - tm_scope: source.zenscript - ace_mode: text - language_id: 494938890 -Zephir: - type: programming - color: "#118f9e" - extensions: - - ".zep" - tm_scope: source.php.zephir - ace_mode: php - language_id: 410 -Zig: - type: programming - color: "#ec915c" - extensions: - - ".zig" - tm_scope: source.zig - ace_mode: text - language_id: 646424281 -Zimpl: - type: programming - color: "#d67711" - extensions: - - ".zimpl" - - ".zmpl" - - ".zpl" - tm_scope: none - ace_mode: text - language_id: 411 -cURL Config: - type: data - group: INI - aliases: - - curlrc - filenames: - - ".curlrc" - - _curlrc - tm_scope: source.curlrc - ace_mode: text - language_id: 992375436 -desktop: - type: data - extensions: - - ".desktop" - - ".desktop.in" - - ".service" - tm_scope: source.desktop - ace_mode: text - language_id: 412 -dircolors: - type: data - extensions: - - ".dircolors" - filenames: - - ".dir_colors" - - ".dircolors" - - DIR_COLORS - - _dir_colors - - _dircolors - - dir_colors - tm_scope: source.dircolors - ace_mode: text - language_id: 691605112 -eC: - type: programming - color: "#913960" - extensions: - - ".ec" - - ".eh" - tm_scope: source.c.ec - ace_mode: text - language_id: 413 -edn: - type: data - ace_mode: clojure - codemirror_mode: clojure - codemirror_mime_type: text/x-clojure - extensions: - - ".edn" - tm_scope: source.clojure - language_id: 414 -fish: - type: programming - color: "#4aae47" - group: Shell - interpreters: - - fish - extensions: - - ".fish" - tm_scope: source.fish - ace_mode: text - language_id: 415 -hoon: - type: programming - color: "#00b171" - tm_scope: source.hoon - ace_mode: text - extensions: - - ".hoon" - language_id: 560883276 -jq: - color: "#c7254e" - ace_mode: text - type: programming - extensions: - - ".jq" - tm_scope: source.jq - language_id: 905371884 -just: - type: programming - aliases: - - Justfile - color: "#384d54" - tm_scope: source.just - filenames: - - Justfile - ace_mode: text - language_id: 128447695 -kvlang: - type: markup - ace_mode: text - extensions: - - ".kv" - color: "#1da6e0" - tm_scope: source.python.kivy - language_id: 970675279 -mIRC Script: - type: programming - color: "#3d57c3" - extensions: - - ".mrc" - tm_scope: source.msl - ace_mode: text - language_id: 517654727 -mcfunction: - type: programming - color: "#E22837" - extensions: - - ".mcfunction" - tm_scope: source.mcfunction - ace_mode: text - language_id: 462488745 -mupad: - type: programming - color: "#244963" - extensions: - - ".mu" - tm_scope: source.mupad - ace_mode: text - language_id: 416 -nanorc: - type: data - color: "#2d004d" - group: INI - extensions: - - ".nanorc" - filenames: - - ".nanorc" - - nanorc - tm_scope: source.nanorc - ace_mode: text - language_id: 775996197 -nesC: - type: programming - color: "#94B0C7" - extensions: - - ".nc" - ace_mode: text - tm_scope: source.nesc - language_id: 417 -ooc: - type: programming - color: "#b0b77e" - extensions: - - ".ooc" - tm_scope: source.ooc - ace_mode: text - language_id: 418 -q: - type: programming - extensions: - - ".q" - tm_scope: source.q - ace_mode: text - color: "#0040cd" - language_id: 970539067 -reStructuredText: - type: prose - color: "#141414" - wrap: true - aliases: - - rst - extensions: - - ".rst" - - ".rest" - - ".rest.txt" - - ".rst.txt" - tm_scope: text.restructuredtext - ace_mode: text - codemirror_mode: rst - codemirror_mime_type: text/x-rst - language_id: 419 -robots.txt: - type: data - aliases: - - robots - - robots txt - filenames: - - robots.txt - ace_mode: text - tm_scope: text.robots-txt - language_id: 674736065 -sed: - type: programming - color: "#64b970" - extensions: - - ".sed" - interpreters: - - gsed - - minised - - sed - - ssed - ace_mode: text - tm_scope: source.sed - language_id: 847830017 -wdl: - type: programming - color: "#42f1f4" - extensions: - - ".wdl" - tm_scope: source.wdl - ace_mode: text - language_id: 374521672 -wisp: - type: programming - ace_mode: clojure - codemirror_mode: clojure - codemirror_mime_type: text/x-clojure - color: "#7582D1" - extensions: - - ".wisp" - tm_scope: source.clojure - language_id: 420 -xBase: - type: programming - color: "#403a40" - aliases: - - advpl - - clipper - - foxpro - extensions: - - ".prg" - - ".ch" - - ".prw" - tm_scope: source.harbour - ace_mode: text - language_id: 421 diff --git a/AoCTiles/requirements.txt b/AoCTiles/requirements.txt deleted file mode 100644 index 5ca9f4c..0000000 --- a/AoCTiles/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -pillow -requests -pyyaml -pre-commit \ No newline at end of file diff --git a/README.md b/README.md index 1a63765..c20af10 100644 --- a/README.md +++ b/README.md @@ -250,7 +250,7 @@ --- -The graphic above has been created with [AoCTiles/create_aoc_tiles.py](AoCTiles/create_aoc_tiles.py) script. Feel free to use it in your own repositories. See the [AoCTiles/README.md](AoCTiles/README.md) for instructions on how to use it. +The graphic above has been created using [aoc_tiles](https://github.com/LiquidFun/aoc_tiles). Feel free to use it, it's easy to set up! --- From 2f6b6077c0c94ec8749e94ce7fe977cb2c91f3ca Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Mon, 25 Dec 2023 14:22:54 +0200 Subject: [PATCH 100/225] Add day 25 --- .pre-commit-config.yaml | 2 +- 2023/25/25.py | 17 +++++++++++++++++ README.md | 5 ++++- 3 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 2023/25/25.py diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d1de176..35c107c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ repos: - repo: https://github.com/LiquidFun/aoc_tiles - rev: 0.5.1 + rev: 0.5.4 hooks: - id: aoc-tiles args: diff --git a/2023/25/25.py b/2023/25/25.py new file mode 100644 index 0000000..5a7de1c --- /dev/null +++ b/2023/25/25.py @@ -0,0 +1,17 @@ +from collections import defaultdict +import random +import networkx as nx + +g = nx.Graph() +for line in open(0): + at, tos = line.split(":") + for to in tos.strip().split(' '): + g.add_edge(at, to, capacity=1) + +while True: + start = random.choice(list(g.nodes)) + end = random.choice(list(g.nodes)) + cut, part = nx.minimum_cut(g, start, end) + if cut == 3: + print(len(part[0])*len(part[1])) + break diff --git a/README.md b/README.md index c20af10..c72fd7c 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- 2023 - 48 ⭐ + 2023 - 50 ⭐

@@ -78,6 +78,9 @@ + + +

2022 - 50 ⭐

From 78ed92d0df4d6a0eb468a37e167df0bf2705777d Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Mon, 25 Dec 2023 14:34:37 +0200 Subject: [PATCH 101/225] Update gitignore --- .aoc_tiles/tiles/2023/25.png | Bin 0 -> 9236 bytes .gitignore | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2023/25.png diff --git a/.aoc_tiles/tiles/2023/25.png b/.aoc_tiles/tiles/2023/25.png new file mode 100644 index 0000000000000000000000000000000000000000..dc263df2ada4196df795b57ff94db44b3884545f GIT binary patch literal 9236 zcmV+vBu&~Sa@5d#}W&19j`21pL=gzZd=3!>;lyfj+KRO4xg2UnH{4AA9eZ@PB zd9ee+`d_Q%{~)i9!WyF1zT)jSUR{JWbgg~G+i$#hbn5=qfs@><&?$VOxUrQ}T-$Od zwKV!gg+L@8($>D>?KfV$ihKY-#AB_D=vGGb$?n#LHO*U&J}lIgcraMoL*C5aS9`8I zCjB_y^Xa!?CuJVt2?;G7v|^^^%X+uld6O$!%;k%}<=<@7k4OaM5SKKthr|i z3WKDcl?qENmhglk5*~-eVvrO^OM_D%&snnTT6I%f4_URs(5ht;USLLVHlsIBu*-SJ z|DQ`QLVkJrhER+HfHBtDql_vi+NB5By}*E^cX<&Eo_ba)tfYe44Sz&qv6um`6(vXHEet!1Jy|glU_90ix*>$!wlE9MDNW=-G ziPJ`=1UV)?D4fuDyfDaA1!{$butp^pe!YB(bW99zwazYYv^Up3xjEcazq4F-Ta#bc z1z(EI(S%hK48>Yrd+i&(h+sfwe-r%M1lt$V^e~qvYK5gauPLp?-zI;eeb#KZq%+Th z4#d7DW3QJ*!4mI#qb>3%1YT}~!{KL(v+71^&O6$wXodd+Pm59mN?U1@#l`e#S6@y> zXZU0Bfr<86=#>0MyX6;mp;Ocd3t<%q#SJYS^M5-SD`Pqa1N+y^l&T5<#1aV>gIO}w zO`3wiU{n{bmRC0n_z2kC!8nq%2rVo-gBk$%?B0j%e9AY$hivrgdcqszoVw6E4gd%^ zA;{S~$2E3);E6l=6Zgfhz+%LUz3v}bu=A};-<333%NHfjJKi?;$l?RnUQXKgcp(NO z2^^L2P3UPoGUrrsh%}ELxjnYn`*K!TS2=vLOgXBAg=QrayK)Le;_)t4PS!@!lpii9 zo{!0Pv@|@lK18ZNoiU_Ug#d>Up+DlWLI6mr@B{#Xh|ojc3u)6Yq)i8aq>UdC2(qQU ztaaLcXJdS+FY+7|=-iG?MgVO;ejQN>w=(%s(Gy3Ps}FO6HN;US3A_F8;;@}k zrjup=)nMqW>g?S8fjthZkVr331YFNzJ+7< z?`&*_w@p!PbNJYi3<^;u=TKJ_0N5K=%O{>q3x8TRy0<70Xl`$qOS~Sr?QZ@=X$oSm zSb{n8JSf8R>E9XCFmmTzD9q`K8u%8S8>VoUrA8ttBzjTVaWlkHPi zj)}B0tp5Do2j~)%3M;_XI{Cm#5}|8>6abprd7u9o3jnEwwV7oNo_3vm=GKMdKYnc- zR>^EVKD+w007vBSHM6{yPj{mbyYUKyLvp8xNR<8GkU=}2ax`h-`HV2t*|de`_F6EQ zTc(^ommXf+)H%YS?fp4!!Ow9E6h0VJ=>6uoPc0Ztp{~jQtorivJFD*HjX`)tV%*kS zA4zlOHrR{AxOEdQ9Z6bL(QF}2?>5Im&#SOl426V8tE#YuwQ65f&A-d;A0K;!UV=wd zl~!CY|0_@2&unSuNk3AEcn(kayr}EVsDah0&^%2r*j6-nLSil3II-M&U;JAO&g>sR zRT)xRf1S5GtIqMrvqeaX=JvMnDH+ux@8I(plMiuD9 zuAW07t3W8OZ)q>8X}*=Ju4`*TeS&=LP4#KDtoBRsdDTtrz9Y?K z3aM}5tUh@E!#O_wj^+TE%(BK`qS8KjZLBmyVNJ7!2FqZuscQ1!Q+&CXJ{gF`N?S;0 zUU}$~+YUwS<_gH$?`%XilytT?x^VRWjl1J$T>iYuUGc9XbN~RGuV}9jVO@Xdu2z)I z?YtkaJUevzB|353$LHm9mesdzIT4G+V8jv$iGYh3Kg!F_1o3z*BgMm`jFLS=t zBXevFy1n_&bx#~;oA;!|L)mmkhL=XQ(BX!c_9Eav>Vp783TZge%--{ z-4Y4xjeFbKqzsFZ@OT{nP|UQfZ!?erA)`2!kgd)>{74@Gosp3HWMpY0M40H;&u z9ZGl|06v&_0a>*|X9Iv8ciu+t%qV*++^D$W| z1-1RaE5$Gv0h22|#vM|1|7F|lO&anldn=603W&@KP-d?LFjuo?Ud@`RqGS$-qoc5N ztL2>+6Jc1i?kirkyt)XhFRZ<@^YsxX44sQrhM+Glw{rL@cr}4Cd!urvM&(Xb{VbYy z^1=PR!m9}eT+Ql*MJE%y9LzjyO&lx?Y)lxY1~da2iA2ERao7&Nu$?DlwsOnrTMKHM zpXJr$SF==X4yv#gy%*VA;0wilrz%bGU*=URtdSN5!M+aDylgz}O_eRFQ%M9WiD0Tn zaUEea3*durpN3ZM^~9p92?dR{PpEZG4i8lUdav-pwurZ8c=lXXQdk?)PizPo=V+ofXJ1UP0HC3zKW?fa%Q;eT zI2;y-@!sW)|7BGHy2pxnQNCn~tIh-pK_cMxt(m$0(A~sb1?Nem(5DU}VQE{-b6g)s z=5($xN^3c%sy6A|ChC>X{36Ua42!%ze~jsbEwFty%|6NhMWO_u{QZr4($VgWxmmVBMR&c>mL_+2iRrri(Qmj=@{mkym)kM zhmcUrwA>rBSX*8h^t!5ys4b@!eNogj;_CVfBydU|7F%WO7pCraPbYF zTffB3&#Si$bWA_A@Yjzb-+hqpC(Y0$tmg%_4J{n>{fORzK8^JCTT|8@RJz06S3_a5 zb~UbT>*h7s@3_DI!m@3j-q|Q^-H#&Q1AxnKeLtT ze}DP8PsI|3$5bFGj$(e4}_G!se*0$VrXlN{{cuc$+7medo$oNCqQn z%NstozPHjHB{K^YFhfT)(L(7 z=VHbzFN*@{<)Z0!kNG0P&7ARF8PWqCjB35Dy7bd+x#4z7@te~pQf4uP2(jQxR1{e%{dS`fL-*gWm(>pn4G+8iC;pQ;QRb^fr*|NKAQu3oNU3lJfQJRX300GN z$g3MPu{XBF?}x`L*NnURe!xYJfSgb^`jgw6&n)?@xxI7#Bobo@I1vD3*4j;PGbn1b z1^_HpEEM6Sg>(}Zl}f#rR)!XqL;@M54QWO786^!BjqK)j9+xjPq?1QGm@J**>TR!n zjS3BSTN8!CGGeHjXGkQf2DQPqelt9HFJ}f{&J5Nkx3PINu>|97kq-b>EuEV&b!~=Y zMicA?uBLBmR>cc6F!Y%{(JI(#~HZV}VQl2-QagqsyDrsq;;NHer{Q2$7ry=}%t5}u!3XBX_8 z8tR(7;oAG?LhwDbw!A@$D}g+I*X=PWFP%)lVO5=NsQI_YaqL*aX*{z=xIm)=k z#-QPDp8xS@p$3$;FGJ4Mu?@YgD{5LzzPR62`=&J3j+sYxK3Xfir=Se|tmfoO&-3YF zAx;VQV=q^?8eh+vcrZSKFX}cO|06NHxr6?iSNwYcH?!*O)?MD1P}c38PxmwLh_zB* z44Oc?)_}HF?JHqjb98U*U0B3JGs+NE_#DxhmMZmeqdzZpPp7xk4p# zvcBju-Whl2!)xzz1)Wy>l{USJ!@y!B=a=vLGbIQB+{`NW#;;)|>is_dJ0ogK6GtEZ zRn>RVYX+OD06-|lolc$id%PNd6PMDbT}oGQJs;uKQCL!IovaL1=R~8ju@&U3RXxE1 zfOmqu4CxxJpjsHxK3h6*`3#S3Ct@HhVIDQQ$O$1ylhqEltET`qrA2H z>V&1Cs-&r?s%qtlkc0E+f?R!r z_=C{N9!eZ#$)UKmW$BMM<ppgli=J~15Cx_wDx&z3ok+9@hzkFkoR)-+YKh9Hj)}ZftECe&W zZ9MI?+tVC2tvi6c>V+lG`sQ?xFn^_f!{t%SYCjX5t?b*r78U?3o9d!@=Hb-31IVk9 zpLa9@T&+J@G+tq5g^);K&*fw;U#V|kt(I7I!whd*1|?aO<5^nOa^~-=d+?)%A<(YT zH1+e2z|qoh|Js>aN#R0l?o*Xlbhe(14e_yCKHW`zVO@&s^2U3qCE4YTOg7itfEMOI zYR))E&F{G4u$YOimUk6JRY61B|6TMO;vnoZ29{T;u;f`S3~5I`45h2wFqT15e(kSO zvYy{%AQXvjJukWSykxwKSI zkXKe%@~jLB@#uyyt+sBm%9)#v#h_hqtAz}2osz?SXfRv3g*7a6@D&xHk_b2~M!x&( zNi8q&OW85=h)g0+NNnZNN?BIvH7+s{Rt+hwGee7COSJlS%o>MLW=O3<1F2sCK1M?LzPPk0ReqD0S}%uO{fvKC_;f-)?M{OEh7@?w>-n(0$de>_L?5wNA5_tEi~-*07zwTbuDLu)nP2Na1V99~y% z(MPqM+hAYTY$-#gtqI=okfkSIeufe5E47YE+hQ2VZjR*=*z< z)%uAy)=!F*=9%P>_0!`;n(&%XoBgbF#@oCMaZ32>MJVEh8x5HVs|Oy>eaUeE?Li}U zTwS%(TCaY>Z)ecQ&H&(b@4MlyaU=BW@*3>Uq|KF&LWPyDWtR~~XSdGNP*rR$f7jnh z8~%vyiK>*jqErT?mfsCk6^Ky=*%eLlynO^D!YVq&&Y*_F;XEnv`1;;k(%X4AvbzQI zHKR8xD^Nzw(?=z*@Vnt+T1vnvcw@VAS|zMZEokWxqJzL5rg7rX`s1|rARMn$gil^_9-beZ(U^(RxhOo%H(u3sb1jK ztt#&3`RmLp5A=VLhk2Py71VY8j5GHy`)`SRnCyke>RN(N<=Q=;D zRqHB@uzD(amW&%kB2Kt#_HjJ6Yq%_8THVR*c0RkeR5iyvQJ>O|_GN`YSu7nYmAZQD zWeY~*M>n@9EZm&d)Wp>XfDZ!xTIl)U+ed37bEY+O8Rm2*npgLGg}n$9J>8v;sYOCg zReV;ZZqN4cc554-^4pWSf2IV>q<ysCGCQAEC*!R4SE0;(QZ)D89^x#np2%DF*<=1Dmr+8Am`a zZ?*)0`Zgn9t2_XR%$bIG^(EkhdgL~=s~H#!!ZOyQ^w9_`k-%rCA6GT%;_Y3x)de^+ZrGvI5@?G@h^xjgH0j2HOl6@QjX>;T{bYG|p2(O=2js=5h!C+2v z=r(!ybIIrVjdsf~?gD^{W{U+LkEnzWB*Z2FIOyd-cULno7=+bFx+cN$YaC900|BA4zz@f%(5l-xkFZ42{S=F#mUHhT1ms?RPe+rBE1QwWEVqkJGPZ z8v%f=Vg1p?`v5SzA1-w@E5~9wb*wDH>JpzPQekNVHjj4ldBo<)XGnN{dWEGzS2Hje zgk{{@JysQyz2(@Wm!-PgQ|(<}G-%+kViLY0l^=OGU0ulj_ZD?b{P<`^amern=Uz?Cy6Q5JX zYU%G-Ur2;i4O^GPCwcyOv{!gL3mn9%0<^G7YMYV!Oap6eT{9;#sVFk32mlB;teu&j zwK1JRA=1bMDhZDqt7_v4s+!tL>sqB(1qXR8{|9+xd#piatw1C$tZ7#3KX>rg@_&%G z+v%-gZ|y7Ie&g*D)_=j;{^2#GvZL2;K`$=!53g$UGp_C*HXmk_6f1s;z&gv3&o)z44VpBV0cdpAuw8#prM+xyFk8m-*S%RilY z!GO~CWAqYfh9KuugQcI3`JGR^XAmsZoj$u+N!URsHzAQMp%7PK7N#O z#qs3%lkC%L+f0^@zO(wuS7Hffd*BHltGx7TRqng`-(D<667Cwe=i%!Q3w!~flx0pO zc6>bTGFn&{(xxMU&5|~Lppdtxe%^J!@KBZJ;ED}-LSkzNohKv`aeRBjDm_yBmopC| z--^YmR)7b}UK~b5CUosxa`cH9{A_2GlP`6Of!%tNlK1oG{RU(nd>vmxW z3L9+!;M?dm0ui2w6R3!SIZ*btwR8VW3I1Tx^>UV3e2FI>D_T4{_F~2~%~b`O4}}a0 z@xs>dXL&V0U43S%M}2R$@A<9sW`B8!ClHCm;%;vH{F5woFJnk2PxG?fdZOFy z-r=Vz08kNORUvO9$KYVX(jyCYHgWV+L|7eIdw-5wU_xs>yy)lLdK)&6+R&!|Q_Nzm zc(oV`4@9QkNazdky`Br05Qe>F~zcXaZ_$C(U`aaQc{D*mVUZy|}K4&2_cubU@I?fhoEl&3)%@=@5TO{iH)auEh!1qk zQ1~o?pkOH1NLW0c?BPZn7HerlFRkyoBwod2-%l@H7U&KD5fhx!it0*gn_&>Q?kiqp zyv&Y(4;xZ~{C|#O5iYP;x%Ao3J*_^}YAa!rA`aJd;RS(N~aPo9Ij;;1YAY z^^Jc%csb3}*4mg6>ObnrlROv}wfrCCJ^MV!(YShl#Nja`3as^+<7{&eE4u3;+5cu^7yviB4o9e*XATw^B;vS&w`edgf7P zPC0Y*NVCN$l=tJENrjMQQz>Re=;D{%&gV@Tg_gKu1{pC1FKwgTtC}S4J9E zS?kw7C>;N1>Rf$t+oyrY>)VXn&5Kn;SRGXMX4ly+JNLhLC*0f}e%zSaTE{kgR_?kz z>YXM|rvoBS%Tn}#dg;0Q)2Z{MK9#zJC6-A3ipvWhJMwBmp+eS=jy`;AhUcna@5UC+ zk=tp1+*UB+o_>(If9=e_<8v`MtvxKLwpK&*znYNTmhMg6PVMPY#yzu#Y{zn)gfoE zhP;X=?+RHl8eF5Ktn(8YB9>vz)YVud+aDbM~in4s_E5~VJNB!kMCB24Q+-k9rW)) zer@3~+W1QSqaqPj3u@{9mZ|eR66D=esl^~y705?eRmd9b>#%?A%&;AokdaOv->#TC z%Wq_1P4mH<>1oBfc%m8-s*;JYI`~_60C~F!YuH=+inrf*Rrz`EJ61Ga@eWH~rGDP~ qlvRpXyu+0jJ0PqGUhxiN-v0;eW%lhj;hskT0000 Date: Tue, 26 Dec 2023 02:42:20 +0200 Subject: [PATCH 102/225] Remove puzzle inputs --- 2020/01/input.in | 200 -- 2020/02/input.in | 1000 ---------- 2021/01/input.in | 2000 ------------------- 2021/02/input.in | 1000 ---------- 2021/03/input.in | 1000 ---------- 2021/04/input.in | 601 ------ 2021/05/input.in | 500 ----- 2021/06/input.in | 1 - 2021/07/input.in | 1 - 2021/08/input.in | 200 -- 2021/09/input.in | 100 - 2021/10/input.in | 90 - 2021/11/input.in | 10 - 2021/12/input.in | 25 - 2021/13/input.in | 929 --------- 2021/14/input.in | 102 - 2021/15/input.in | 100 - 2021/16/input.in | 1 - 2021/17/input.in | 1 - 2021/18/input.in | 100 - 2021/19/input.in | 777 ------- 2021/20/input.in | 102 - 2021/21/input.in | 2 - 2021/22/input.in | 420 ---- 2021/23/input.in | 5 - 2021/24/input.in | 252 --- 2021/25/input.in | 137 -- 2022/01/input.in | 2235 --------------------- 2022/02/input.in | 2500 ----------------------- 2022/03/input.in | 300 --- 2022/04/input.in | 1000 ---------- 2022/05/input.in | 514 ----- 2022/06/input.in | 1 - 2022/07/input.in | 956 --------- 2022/08/input.in | 99 - 2022/09/input.in | 2000 ------------------- 2022/10/input.in | 142 -- 2022/11/input.in | 55 - 2022/12/input.in | 41 - 2022/13/input.in | 449 ----- 2022/14/input.in | 149 -- 2022/15/input.in | 32 - 2022/16/input.in | 59 - 2022/17/input.in | 1 - 2022/18/input.in | 2150 -------------------- 2022/19/input.in | 30 - 2022/20/input.in | 5000 ---------------------------------------------- 2022/21/input.in | 1901 ------------------ 2022/22/input.in | 202 -- 2022/23/input.in | 74 - 2022/24/input.in | 37 - 2022/25/input.in | 127 -- 2023/01/input.in | 1000 ---------- 2023/02/input.in | 100 - 54 files changed, 30810 deletions(-) delete mode 100644 2020/01/input.in delete mode 100644 2020/02/input.in delete mode 100644 2021/01/input.in delete mode 100644 2021/02/input.in delete mode 100644 2021/03/input.in delete mode 100644 2021/04/input.in delete mode 100644 2021/05/input.in delete mode 100644 2021/06/input.in delete mode 100644 2021/07/input.in delete mode 100644 2021/08/input.in delete mode 100644 2021/09/input.in delete mode 100644 2021/10/input.in delete mode 100644 2021/11/input.in delete mode 100644 2021/12/input.in delete mode 100644 2021/13/input.in delete mode 100644 2021/14/input.in delete mode 100644 2021/15/input.in delete mode 100644 2021/16/input.in delete mode 100644 2021/17/input.in delete mode 100644 2021/18/input.in delete mode 100644 2021/19/input.in delete mode 100644 2021/20/input.in delete mode 100644 2021/21/input.in delete mode 100644 2021/22/input.in delete mode 100644 2021/23/input.in delete mode 100644 2021/24/input.in delete mode 100644 2021/25/input.in delete mode 100644 2022/01/input.in delete mode 100644 2022/02/input.in delete mode 100644 2022/03/input.in delete mode 100644 2022/04/input.in delete mode 100644 2022/05/input.in delete mode 100644 2022/06/input.in delete mode 100644 2022/07/input.in delete mode 100644 2022/08/input.in delete mode 100644 2022/09/input.in delete mode 100644 2022/10/input.in delete mode 100644 2022/11/input.in delete mode 100644 2022/12/input.in delete mode 100644 2022/13/input.in delete mode 100644 2022/14/input.in delete mode 100644 2022/15/input.in delete mode 100644 2022/16/input.in delete mode 100644 2022/17/input.in delete mode 100644 2022/18/input.in delete mode 100644 2022/19/input.in delete mode 100644 2022/20/input.in delete mode 100644 2022/21/input.in delete mode 100644 2022/22/input.in delete mode 100644 2022/23/input.in delete mode 100644 2022/24/input.in delete mode 100644 2022/25/input.in delete mode 100644 2023/01/input.in delete mode 100644 2023/02/input.in diff --git a/2020/01/input.in b/2020/01/input.in deleted file mode 100644 index a9175b8..0000000 --- a/2020/01/input.in +++ /dev/null @@ -1,200 +0,0 @@ -1822 -1917 -1642 -1617 -1941 -1740 -1529 -1896 -1880 -568 -1897 -1521 -1832 -1936 -611 -1475 -1950 -1895 -1532 -1721 -1498 -1905 -1770 -1845 -2003 -1854 -1705 -1916 -1913 -1956 -1798 -1823 -1955 -1713 -1942 -1710 -1696 -1590 -1966 -1476 -1800 -1672 -1533 -1524 -1957 -1923 -1545 -534 -1707 -1760 -1104 -1471 -1947 -1802 -1525 -1931 -1653 -1608 -1937 -1977 -1598 -1470 -1794 -1488 -1786 -1652 -1482 -1603 -1667 -1245 -1478 -667 -1948 -1885 -547 -1971 -1795 -1910 -1571 -1711 -1727 -1987 -1597 -1586 -1661 -1893 -1873 -1827 -1561 -2006 -1782 -1813 -2000 -1592 -1714 -1849 -1501 -1809 -1751 -1935 -1692 -1697 -1878 -1502 -1738 -1731 -1682 -1690 -1499 -1641 -1925 -1996 -1972 -1886 -1836 -1747 -1841 -1668 -715 -1698 -1859 -1637 -1477 -1785 -1695 -1702 -1944 -1631 -1771 -1623 -1892 -1466 -1834 -1899 -201 -1801 -1978 -1830 -1591 -1673 -1949 -1846 -1677 -1657 -1576 -1817 -1851 -1894 -1754 -1604 -1568 -1730 -1985 -1614 -1980 -1554 -1997 -1960 -1983 -1848 -1883 -1968 -1729 -1716 -628 -1472 -1676 -1943 -1821 -1681 -1619 -1644 -842 -1492 -1633 -1921 -775 -1861 -1584 -1974 -585 -1898 -1560 -1708 -1927 -1563 -1872 -1876 -1865 -1535 -1994 -1756 -1662 -1621 -1993 -1825 -1679 -1959 -1691 -1875 \ No newline at end of file diff --git a/2020/02/input.in b/2020/02/input.in deleted file mode 100644 index 4951f8d..0000000 --- a/2020/02/input.in +++ /dev/null @@ -1,1000 +0,0 @@ -2-8 t: pncmjxlvckfbtrjh -8-9 l: lzllllldsl -3-11 c: ccchcccccclxnkcmc -3-10 h: xcvxkdqshh -4-5 s: gssss -7-14 m: mmcmqmmxmmmnmmrmcxc -3-12 n: grnxnbsmzttnzbnnn -5-9 j: ddqwznjhjcjn -8-9 d: fddddddmd -6-8 t: qtlwttsqg -7-15 m: lxzxrdbmmtvwhgm -6-10 h: hhnhhhhxhkh -6-8 z: zhgztgjzzfzqzzvnbmv -5-6 j: jjjjgt -2-3 m: mmmfxzm -6-7 n: nnnqgdnn -8-13 b: bbbbbbbbqjbbb -7-8 k: kkgkkbskkk -1-3 g: gdmvgb -5-15 g: gggzgpsgsgglxgqdfggg -12-16 s: snhsmxszbsszzclp -2-3 n: vhnnn -5-7 l: slllclllkc -2-4 g: rnggggdkhjm -1-3 x: wxcxhxx -7-12 c: cxzcwcjqgcmpccchc -4-5 x: lnfsxjxwxx -9-10 n: nnnnnngnzxnnn -3-4 h: rhhk -3-11 r: xrrcnrjrrzsvrrplr -6-11 r: rrrwrrrrrrrrrrrr -3-4 x: xmxz -1-2 l: lllllk -5-11 h: cmxhhhhhrhd -2-11 h: mhzlzshjvtcrrcf -6-15 g: ggggfgwggkcggqz -3-4 q: qqsc -2-8 m: wmwxvmsmfqlkgzwhxqdv -3-9 b: pnrdsgbbbrbgb -1-7 w: ddqtjwwxgwkqsgswvwkl -3-4 t: lxtt -4-6 g: ggxngg -12-13 d: dddddddddddjjd -10-20 n: nnnnnnnnnnnnnnnnnnnp -15-20 j: kjjjljjjjjjjjjjhjjjn -5-11 r: rwrrrrvrbrrrrr -2-4 w: wwww -6-10 v: vvvbvsvvvv -3-6 d: tkbcdddzddd -10-13 r: rrrrrrrrrlrrhrr -3-6 w: ggsxkwjzfpnmkw -2-6 b: bbqbbq -7-8 t: tztttwtttvt -1-3 t: twrttzbfdhrkvdzgn -4-10 c: jxcxvcpnfccvc -8-17 r: rrrrrrlvrrrrrrcsrrrh -1-3 g: gsggjsn -6-8 l: lllclmjllf -11-15 b: bbbzbbbhbbbbbnbb -7-9 l: lflblhzllml -9-12 v: pvtvrvvvrvvhgmvnv -1-3 t: zbrtjt -5-6 f: ffffcf -3-4 q: cqtz -13-14 n: wnnnnnnnngnnnhpnnsn -1-12 d: bdddmdqcsdhd -9-11 h: hhhhhxhhhjqh -7-11 w: wwwwwwswtkww -12-14 m: mmmmbmdmmmmmmmzmjmv -1-7 x: qdtjxmxhw -3-5 n: nnnnn -10-13 d: ldcrdvcvvxdpd -4-8 m: mrfmwmzgmrp -3-8 s: ssssssssss -1-7 h: qhhhhhhhhh -9-10 q: kqqqqqqmhqqqqhqr -5-6 c: cmcccl -3-4 q: qqqw -2-8 v: vtvvvvvvv -1-5 z: zzzzqz -7-8 k: kkkrkqmkkkkk -14-16 j: jjjjjjjjjjjjjjjs -6-7 t: tttttpc -3-5 s: xsxsss -4-5 v: gvvpjv -3-5 t: vqgft -3-4 c: ccwcc -3-7 s: sslwsss -2-5 t: tnbgprqgzm -16-20 b: bbbbbbbsjbbbbbbbbgbd -6-8 p: ppqppwph -12-13 m: mmmmmmmmmmmml -10-13 r: rrrntrrrrhrrr -9-11 f: fffhffffhfcfmf -4-8 l: lmsrlllllzmlll -4-11 p: sxpnpbzpjppgbn -3-8 c: fcccqmfcccxrhmccw -6-7 s: sqsjdbssbsrssd -3-4 g: gggt -1-3 t: tstnsnksfsbgt -3-4 v: vvvcv -13-18 g: tggggppggggggwgggpg -4-8 m: mmmlmfdm -1-3 z: fzzz -1-12 f: ffzfffffmffrnff -10-11 f: ffkffffffff -11-12 m: mmpmdmmrmmmtmmm -9-11 k: zkkkfkkkkkzkkh -16-19 b: bbbbbbbbbbbbbbbvbbjb -3-4 v: vvvhvz -1-6 l: xllllll -8-15 c: cccccccccccccccccc -10-12 m: mmvmlzrmrnmmmm -1-3 c: whcc -2-3 q: kqgq -2-13 s: sbssscrslnssldsxtssg -2-4 v: bfdr -7-19 c: ccccccccckfgpgcmccf -7-9 f: fxvfffffsf -1-5 n: nnnns -13-15 g: gggggggggggghggg -9-10 w: hdwcwqswpwwwwww -14-17 j: jjjjjmjjjjjjfqjjjjj -2-5 k: pkrfrdtfbvkkrkk -2-3 s: ssss -1-8 d: vsxtlvdqpltcj -3-7 b: nlqhbbb -6-10 x: xfxxxrmxxxdx -5-6 n: nnnnnm -5-6 r: rrrprr -6-7 t: dfttttqtwktttgrkkj -1-2 p: npnf -6-8 p: ppppptppp -4-8 k: bkkkkqkkq -11-12 l: kmlnhhmkdlhl -14-16 b: bmbbbbbbbbbbbcbbb -3-5 r: rrfrrrr -5-10 v: glglvvmvkvvvgvrv -2-3 h: whhcsqjhtx -7-8 d: ddddbpddddhdhdddddd -2-3 k: kkkkkkksgkkkkg -2-6 n: cnrpdmtgwncklll -3-14 s: sssckrswlqxshdts -3-4 w: wwgww -15-19 q: qqpqxqqqqqqwqsqqqqz -1-5 t: vrtkttttj -2-7 z: lmpzjbh -11-15 g: gkghtgpwrgngggggvng -4-17 b: bbbbbbbbbbbbbbbbbb -4-6 c: bswcml -3-4 v: vvxg -2-4 m: mmmmm -2-4 w: kwqwjwt -7-14 x: ghflqcwxcrxzrxm -6-7 f: fffjffsff -11-12 s: sssssssssssr -3-13 v: vvzcvrvjgxvkcvh -3-8 k: jkhgbzgkkfwvt -6-7 l: llltllljl -8-10 p: pppppppkvp -1-12 l: lbhxdplkxdstmllwncnl -2-6 c: cqcwrwnbjc -2-5 v: vvkvvvbbv -3-4 g: ggnkg -3-4 z: rczzhbwmszgzhfszd -8-10 t: fvrttqnwjtft -11-17 l: cllqltnlldcllnwnllll -2-9 r: jrrwrrcjrr -3-5 s: skmsssh -5-6 q: qqqqtq -7-16 k: ktzxwrxcdrmkqfpk -7-12 s: hfsssssssssmsk -3-11 s: gssjsdxdxsqgpns -9-11 s: sssssssssss -5-9 t: xtwthrdtvj -5-7 q: qjqxqjq -2-10 r: zlrrrrrtrr -2-18 w: trwqhcfwrmqwwwqfgwww -2-5 k: kkkkwkp -1-4 s: fqss -1-4 l: xtflz -10-12 q: qqqqqqqqqnssq -3-4 s: sssd -10-20 m: mnmmmmqwmjnpbmmmmbmn -3-5 l: clpln -2-11 v: mhrvdkgsxvvvdxvhgv -15-16 j: jjjjjjjjjjsjjjkj -2-5 f: gzvzffsnxdcf -8-10 m: jmmmmmmrmmmmm -1-2 k: fmhkpmssvdkh -4-7 l: vgtldqpbmmj -2-3 v: kdvcgvnw -15-17 g: ggggggggnggggglgj -4-5 w: kjwnw -6-16 j: fjjrjkbjsjjvljzjjdj -2-4 g: bgvgqs -9-12 k: lkkgkkkkzfkqkcj -6-13 b: bbbbbmbbbcbbqb -7-8 m: mmcmmmmp -4-5 v: vvvvg -11-15 n: nnqxnnnnnqmnnnnfnpn -1-5 z: gkvwtv -4-5 l: llllk -3-4 d: ddss -1-4 v: vvvl -2-3 v: vjcvvvvq -9-13 v: vvvvbvvvvgppv -11-14 d: ldhdddddddwpdddddddd -2-12 p: rrpppwppxjplprpp -5-11 p: spfcjpmplbpzpppgpp -3-6 q: lkqfqcq -2-4 x: xvxwxv -2-12 x: bxxxxjxxxtxhktkx -1-14 c: cccccccccccccpc -5-16 t: qstttfxttmtvvgtzt -7-8 q: kqqqqqwq -5-6 c: cccccdcccccc -7-9 v: dvnbvvjmh -5-7 s: sdssswvr -1-2 t: vtsttt -6-8 d: dgdwdcdd -5-18 j: qjjjjjjtjjjjjjjljlj -2-16 r: ksrtrrrrrlchrljrz -5-7 m: mmmkmmvmxbflctjhhfxc -4-10 f: mfftfrfffff -6-12 x: xxxxxxxxxxxbx -9-12 s: ssssssssdsshs -12-14 v: vvvhvvvvvzvvvrzvlvg -14-17 d: ddhdddddddddddpdd -1-5 c: rcchc -1-9 n: npnnnrxnh -1-4 n: mnnn -2-3 q: qklxpwr -7-8 j: djjjjfjnjjv -4-5 h: hhrcbhc -6-8 t: txtfclvtz -8-11 w: grhwwqwhwwww -1-5 r: rrkrxl -3-6 v: jgtdsvlpgx -14-18 r: rrrrrrrrrsrrrhrrrr -5-13 g: xggsggggggggggn -18-19 x: xxxxxxxxxxxxxxxxxfx -4-5 n: dpnnnwnntpwgntqnj -4-12 c: ccccmcccczrspfrcpx -15-16 h: hwhzhnhhhhshhhhhhhhh -3-4 v: vvvg -3-4 j: jpjs -10-13 h: bhhhhhrhhhhhsdh -2-4 v: svvclvv -12-13 k: zkkkkkdskkkpkwwkk -8-9 b: bxbhjbbjb -1-10 k: kpkmkstkhtkl -5-6 d: qddddx -1-3 m: mmmm -1-5 r: trrrrrr -2-5 l: llvlnlllm -9-18 d: dddjhddddvdddtddddd -9-20 j: nxfjfjjbjjljjjjcjjjj -5-7 v: zkvvzpxvtctvmcvvvvv -1-6 d: lmcmvwdwq -1-5 v: dbdvv -6-11 n: snnzlnnnwnd -11-17 l: lwlltvlplldlllllsll -6-8 k: kkkkktkkp -9-14 q: nclswjgmqwvhjrs -7-10 c: cgccfccccl -2-3 z: zqkzzj -14-15 v: vvvvvvvvvvvvvvg -7-9 z: zzzztzzqtz -11-17 n: vnnnnnnnrnnnnnnnqn -15-16 l: lllllqlllllllllz -1-14 t: pgskddftttttxtflt -2-3 d: bdpqd -3-18 k: dkkpkkkkkjjtjgkkkxs -6-10 p: qlptppdjppllppp -8-9 s: sssssssss -11-16 q: qqjqqqhqqqqqdqqmq -7-8 p: pprqppvhpqp -5-12 q: qqqqbqqqqqqqqqqqqq -1-5 b: wbbbjbb -9-17 m: fdhmxtmmccxpmmfbmtbm -2-5 b: tbbptwkghzvsbvcb -12-16 w: wwwwwfwwwwvwfwwww -4-5 h: hfhggh -11-16 z: zlzzdrzzxtxzzzzqz -3-6 x: xxwxxm -3-9 w: vmpsthqww -5-9 q: qqqqpqqqq -17-18 g: gggggggggggggggggw -3-8 s: sscmsssssf -7-15 v: vvvvzvttvvvvvvgvvvv -14-19 h: mdpmhtmhsdsxxhthhhd -1-3 h: hbhcbvhxfmjqdgt -15-17 p: xmnhkrgcxxrdtpprzhfh -2-5 w: dqqrwwbvq -16-17 c: ccccccccccccccccc -1-4 p: plcvxpp -10-15 b: bbbnbbbbbvlzbvgb -9-10 g: gggwggggcp -3-4 d: dtdcd -1-5 v: vjslbjjtxldvvknn -2-4 n: fhgnl -2-3 x: xnjm -3-8 j: tzvjbjvxchjk -1-10 g: wgggggghghggq -5-7 q: dqlwqqqkqqhq -6-7 d: dddrddhdld -2-4 x: kxbxxmchtx -1-2 w: wwjg -19-20 r: hfjrqwdxppgzppwchrjr -10-16 r: rrrrrzrrrrrvrrrt -1-3 m: cmmlm -14-17 h: hhhhhhhhhhhhzhlbphh -2-4 f: bfhf -3-6 j: mkdmmmpjjbqmk -6-7 x: flxxxqxxx -12-15 q: qqqqnqqqqqqnqqs -9-10 w: wgwdwxrlwgwwwmwwcgd -6-7 k: kdnrppkkkkkkrj -2-3 n: pntsmsnb -1-5 c: cqcctccqcccccn -9-10 f: txffffffffcff -2-6 b: smtckkcqrsbkzjbtpbtb -10-14 k: kkckkkkkkhkkkd -9-11 m: jnwmbmjmmqsfz -9-10 h: hhhhhhhhhh -5-6 h: hhhhhvh -3-6 c: cccccr -10-11 l: llllllgplll -6-11 r: prprnrrrqrr -13-14 p: pppppppppppphp -5-8 j: pkjjqjjjjh -7-9 f: zfjfcfhcfkffffxv -9-10 w: wwwwwwwwwhw -2-3 z: tzszz -2-3 t: ntdt -7-10 l: llllllqllkl -4-10 j: bmsjjtjjjlbp -1-3 t: kbrxpnstztz -2-3 h: chbwpmvdh -2-11 p: qwqzlpdbpvpxp -8-11 c: tzcbpcccgfj -4-5 g: rgcdg -1-8 t: pwtkzttdlrd -2-3 l: ldlrvsl -4-5 j: jjjrj -2-4 k: vkfk -18-20 v: vvvvvvvfvvvvvvvvvvvj -5-11 w: gbjwwwwzxsl -10-12 d: ddddddddddqd -1-4 r: rrqr -7-8 p: pppppzpp -7-8 c: cccscmcfch -6-7 c: crncccvtc -6-8 z: zkzlxzcb -3-4 h: hhfs -12-13 t: ttttttttttthmt -2-12 x: xdxxxxxxxxxxxxx -2-5 n: cnnnknnn -10-11 x: xxxxxxxxxsx -3-9 q: fgfqjqxzqtlqqmgk -1-4 g: gzsk -11-14 h: hhhrhwhhsqhchxclhhh -5-15 q: nqzqqqqnqkqfqqqqqq -10-14 b: bbbbbbbbbhbbbqbb -5-6 v: rpfvdvjvvvvvdxjgwc -6-7 r: rrrrzwrhrdv -3-4 f: fffb -9-12 q: qqqqqqqqqqqqqqqqq -15-19 c: cccclcccxcccctccccs -2-3 b: jbwqq -5-6 h: hhchpm -11-12 f: fffffffffffl -5-9 s: fsggxprbsssklhhbsl -12-15 f: ffffcfzfffkrfffnh -1-2 s: fstz -1-6 b: nbfbhb -2-11 k: xfdjrwptgrkk -18-20 k: kkkwkkkkkkkpkkkkkkkr -4-8 r: rgcsrgkdrrrrtwr -3-5 k: kkkkvgkkkkn -9-13 b: bjgbkxqzbbbjtbx -1-2 n: rmbgdnjt -3-6 k: kqnkkk -3-6 c: gzggcpxszscccccc -15-17 r: rrjnrrrrtrrrrhrrxrr -11-12 d: dddddddddddx -4-8 s: sxztltlssksqwthss -12-13 l: llxllllskllqvdlll -4-6 j: cjxdvjjlx -1-4 t: mwttttttttttttt -7-8 p: pbpdpbdpmppjpp -11-13 l: lkjlgdllkllvnl -9-10 b: sbbbbbbbrb -9-13 l: lzlllllllljlllll -6-7 r: tnkpjrhkxzdzwwxv -1-4 x: hdnxxlx -4-5 b: kvhwb -1-2 p: pxmhbcp -2-5 s: csgfssjssstcq -3-7 k: htnkkhprxkc -14-20 c: rlkhpgccjsjchccjmkbg -2-3 t: ttxt -13-18 p: pppppppppppwvppppq -9-10 j: jjqjjjjjdbj -10-12 m: mmmmmmgmmlmm -5-11 l: qrwgblsqjxtll -1-5 m: mqwnn -7-12 p: pppppppppppppppppp -4-8 d: bdrntdzdd -14-15 g: gggggggggggzggc -3-4 m: mmmc -2-9 d: hsqjddjfdcqzsjr -5-9 h: hhhhsffhk -5-7 f: ffffcff -6-8 z: wzkzzzzjzzczg -2-9 q: dqqqgbqdnlfqqws -6-11 m: mhmmpmxmxtxmp -7-11 n: nvjtglngnzmbnnqjnjgp -11-12 v: vvvvvvvvvvdg -2-3 z: vmzz -6-8 z: zzzzzzzbzzzzzzzzzzz -6-13 k: hkvkhpkqkkkkwsdkmk -1-9 k: gkkkkkkkkk -2-5 g: gngggxg -12-14 m: mmmmmmmjmmmrmhm -1-6 f: cqffffsb -10-11 p: xppxpqbplpp -3-17 j: wdjldqqbxqxbcrbkjfth -5-8 w: wlhwvkwwwzkww -4-6 t: vtthtt -6-9 m: rkmtgbzrfmg -10-11 g: gggrgggsggbgmg -5-7 x: xxxxrxdxx -9-12 k: kbgkkgpkkrkkqv -10-14 z: nzzwjznbpzztzm -7-16 t: ttttttwbtltttcltt -13-18 l: lllllltllllltllllll -5-18 v: mvvvzjvvvvvmvvsnjzv -12-19 b: bbsbbbbbbmbbbwbbbbdb -15-16 n: nndgcnnnnnnnnnnpnnnf -4-11 j: gqdkjblvkgbwjjmtfjg -12-13 s: ssssssstssmpbsss -5-7 j: jmgxjjw -4-9 p: pptlvpppp -13-17 q: fqqqqqqqrqqqhqqqqngq -4-6 j: xzjcxjjpcrl -4-10 w: swwwspwwql -10-13 s: sssssssssjsss -2-4 k: nktjkkkm -2-6 z: vzqzfzncz -4-10 l: llplslghlwvlh -5-6 d: ddhdvqd -5-10 r: rrrrrbrrrjrd -1-5 d: ddddn -2-4 t: tttr -4-7 d: dsddpdkfsdd -3-8 r: klrclrkzbrrscrpd -16-18 j: jjjjjjjjwjjjjjjzjj -18-20 p: tppjpppppppppppppcpp -9-11 m: mmmmmmmmmmt -8-12 d: dtxdvddpddmq -4-8 d: qdcddddcd -16-17 w: wwwwwwwwwwwwwwwzwww -3-4 v: hpvhvvpvxnd -3-5 x: dpxxj -18-19 d: ddddddddddddddddddbd -13-16 z: pzzzzhzzqzzzmzzzzzg -2-6 b: bglglbnbdb -9-10 t: ttttttttxmttt -1-7 g: fgggvgm -8-11 t: ttmrwtttttp -7-8 d: ddxddddrddddgdddddd -1-4 p: mpdbdkghzqpkpxbp -8-10 d: dddjdddzdxd -3-4 l: lllwl -6-9 m: mmmmmfmmm -2-6 d: dvjddj -5-19 n: ctnnnnnnvngnnqndwnn -4-7 z: zzwdzdpzzd -9-12 w: wwwwwwwwkpwww -13-14 t: tttttttttttwztt -2-3 z: zzwp -4-12 q: hqtqshlcjsmqjrt -6-13 s: bssqsssstflsw -15-16 l: llllllllllllllllll -9-10 c: ccccccccgq -14-15 m: mrmmrmmmmmbmmmcmm -1-6 r: rrrrrcrrrrr -4-6 s: zqrdvshjbgpssj -3-6 h: mmhxthhbshhb -17-19 q: qqqqqqqqqqqqqqqqrqqq -4-12 x: fqvxcghgqxkwx -2-5 q: qqxqdrjrqxkfmq -3-8 z: wfzzzzzz -6-7 c: ccccqmc -1-5 h: hhhhh -3-4 f: svsf -7-8 x: xxxxxxxsx -4-8 g: gggggggngggg -4-5 w: lwwwx -2-3 g: ggsqg -4-6 q: qqqqqq -3-7 j: jtjdjncjq -7-9 k: kkkkkkkcf -4-11 z: pvdzfbzxzfhbf -6-17 n: nnvnnxnnnnnnnnnnnnn -2-5 c: ccrlttnnccdlcmjvx -3-9 l: llllllllpl -1-2 c: vccc -2-6 c: qfcncx -1-3 k: kkvkkkk -1-5 q: qqjkhq -3-8 p: pvpppzpgpp -4-7 b: bbbbbbhbb -8-15 x: xxxvxlvxxdknxxxxx -5-6 n: nnnnnv -4-7 h: hhhbhhth -9-16 h: hxhhhhhhqhhhpbhlh -8-10 k: kkkkkghkkkwnk -4-12 w: bwwwwmwwwwwmwwwwswww -1-5 q: mzhmqtzlbzvtlwqzpxf -11-12 x: xxxxxxxxxxds -16-17 s: sssssrssssssssspwsw -1-4 q: qwqcq -1-12 w: wwwwrpwwwwwqwwmwlw -5-6 m: tlgzvmqcjt -12-18 c: ccccccccccccccccccc -6-10 g: jpgggdgbddgg -11-14 w: hwwkxwhhkfwcjfdkkwfn -3-4 n: nmdnlnbjxcjsp -3-4 w: bwvj -12-14 f: cmqznmfzlsbpfd -1-3 t: txsttsttzqls -3-4 w: sdsw -6-12 b: sbfbqvbbbstb -17-19 g: nggggggggggggggxngtg -15-17 h: hhhhhhhhhhhhhhrhh -2-3 p: ppcpp -5-9 n: nvnnncqnnhnn -1-4 r: rzrrrr -2-10 b: zbbbkbbctkbbwngbbbsl -1-3 r: rrpn -3-6 q: mmlqxqqq -12-13 x: xxxxxxxxjqxkxtxx -3-5 l: nlllhpcc -3-11 x: jxxgcxxbfxpxxfml -3-6 l: nllqlln -9-14 j: jjjjjjjjhjjjjj -11-13 j: jjjjjjjbsjjjj -19-20 k: kkkkkkkkkkkkkkkkkkkv -7-11 n: ndnnnnxfnbnnnn -5-6 g: gggtgh -1-9 f: nfffbnffffc -4-6 d: sdxlgtrmd -18-20 n: nnnnwnnnnnnnnnnnnhnn -9-11 j: jjjdjljjjljtj -3-4 z: bwcsnqzzz -1-4 j: jzjj -9-13 k: cdvwnnwqklwplbzk -5-9 q: hvqpqqtqh -2-7 f: vdkrwpz -12-13 z: zzhzzpwmzzzzq -7-13 s: nsssssfssssss -4-6 s: kgmksst -17-19 p: pfbcgcnxkbpptcbxpsp -12-13 s: ssssssssssspm -11-12 g: gggggggvggsg -6-8 g: gggggzgz -1-3 j: jjjj -5-7 d: ddddgdd -6-7 r: kmrjsbpkrrnpr -6-9 m: mmmmmmmmmm -5-6 b: bxbbvbb -5-10 h: thxgvlhchhzhnfhhhhh -11-13 l: vcllllnhlllvvllll -1-9 j: wjjjjjjjnjjjj -4-8 n: xnlbndngnn -4-5 f: fffmfz -7-8 c: pwmzcxvc -15-17 z: zzzzfzzzzzzzzzzzx -4-8 d: krddfddxddd -1-2 w: wpzxcbxmcktpjmspw -4-14 t: ptcdtvtttbpwtttt -8-13 f: fmfkffdffqfff -6-7 j: jwnxpjlnrlxdjxvzhsll -2-5 m: mmmmmm -3-4 c: cccc -3-11 f: fffrvfzqnmffd -3-5 k: kkxrkkk -5-8 k: kkkvskvkkkhsk -12-14 k: jkkkkdkkkmfzkknkpkk -1-2 h: vhspjh -3-4 p: pppn -5-6 v: vrvdvg -7-8 j: jxrjjjtdjjj -3-12 z: fzzxzgzzzzzhzz -10-12 v: vvvvvvvvgvxxv -12-13 k: kkkplnlpvwkkkkkt -4-8 t: dvjtltttptt -15-16 z: zzzzlzzzzzlwzzzhzz -15-17 n: nnnnnnnnnnnnnnlnn -12-15 z: zjzzzzzzzzzzzzs -7-8 x: hzxnxlxlfxxxxvxxxnx -9-10 r: rrrrrwrrrp -1-7 r: vrfslcr -6-15 t: tttttsttttttttt -3-6 j: wjjdnjznwfclpskvdq -2-4 v: vzlvls -9-10 j: jjjjjjjjwj -8-9 r: kxrrrtqnr -14-16 h: hhhhhhhhhhhfhlhjhhh -14-15 x: xxxxxxxxxxxxxmx -8-10 h: hhhhhhhhhhh -10-11 m: mmmmmmmmmnnmm -3-17 r: fwmqrcjkgrkhzcnfrb -1-15 q: qqqmqzqgcnrqqlkrq -2-13 w: wdwwwwwwwtwww -1-8 l: lllbllln -4-7 n: nnnnnnbnnn -11-18 l: lkllnllqktnllzllll -4-5 d: gddbrlb -12-13 l: llllllnllllztl -2-6 m: lbhptlvgcsmksqspmtk -1-2 t: wtctt -3-4 w: wwbw -9-12 g: gcggvzggqzgggggsgnt -2-6 b: bbrcbc -9-12 m: mmgmkmmmbmmm -14-17 m: mgpjmmqmmmmmmmmmt -6-8 p: dpvzpskp -12-18 x: xxxxxxxxxxxtxxxxxf -7-12 r: xvjvrrrprrrvrrrcbr -3-5 q: rqqxhqq -6-16 s: ssssskssssssssssss -6-9 c: cccqccccxc -8-16 r: rrrrrrrrrrcrrrhr -5-9 t: ctwttthtjl -16-18 t: ttttttttmttttttttgtt -13-16 t: zrtttgttttttmttttt -6-10 k: kntkplgkkkkkmh -2-4 c: vhsccfcc -1-4 v: vvvqvvgpvvvvvzzv -3-4 g: grgvgd -5-9 p: pppbppppdv -3-4 x: lxxxx -8-9 q: qqqqqqzqqqqq -14-15 c: cpcccccccmcccdcc -7-10 p: ppfppppppppg -1-2 h: thrk -1-3 m: mzlzmtmqrm -3-5 x: xxxxp -4-6 t: gtstvvjzqtxdtsrfc -6-15 p: pppwppwspppcppn -4-5 g: tkhgj -10-14 m: mmmmmmmmmnrmmmm -2-3 b: pnbxfzxxbbrt -5-16 b: tfvlbmbzbvxbtdjl -16-19 w: wwwwwwwwjwwlbwwvwwwr -14-15 w: wwwwwwwwwwwwwgwww -3-6 n: npvzfntbfvngns -8-10 s: sgsssssssz -2-5 n: nnnkcnkn -12-15 n: nnnnnnnnnnqnnnq -1-4 p: qppk -5-10 h: ghdhhcsxtzsdphwh -5-7 k: kkkkkkb -10-11 f: ffhlfffcnffmfrffcnff -6-7 f: fffjfxf -11-17 j: jjjjjjjjnjjjjjjjj -2-4 z: wgrdp -5-6 d: dpmdddfmxzgwd -8-12 h: qhhhxhnhhhsmhlhh -7-19 w: wwwwwwwwwwwwwwwwwwmw -1-4 x: mmlxlc -1-9 g: mgggggggggggg -1-12 z: mtkfgpzmjrgs -7-8 v: vvvgvvzvd -10-12 j: djjjjjjjjbjj -3-4 r: srjsfjbrp -1-4 r: trrr -3-8 j: jjjjjjjpj -6-7 l: lltllwl -13-14 g: gggggggggggggg -1-4 w: wwrxww -1-10 l: xfllllldll -5-7 s: xmwsqpsr -6-17 p: pkpnpppznppppplpl -11-12 s: sssssssssdsf -14-19 c: bsxlpshjmwcflcdhlhcr -8-12 b: xbnbbbbbmbbkbbbb -14-16 w: wwwcwwwwwwtwwswww -13-14 f: zfsfbbffffffsf -13-15 s: swssssssjsssxss -1-3 v: vvnvxrwbrbgdc -8-10 t: mkstnqtttt -14-15 g: gggptgggggggggtg -12-15 r: rrrrrrrrrrrrrrkr -2-5 w: cjwpg -13-14 w: wwwwwwwwwwwwqw -5-12 s: bkrrcczsgsfshpwjr -4-9 w: wwwwwwwwwsnw -3-4 x: xxxzv -3-6 g: rggghqvgfk -9-12 h: hhhdhshwhhkrqhh -8-11 q: zqqqqqqmqqhq -5-7 j: ngxjlbhjjjj -8-9 p: rpxpdqcpkp -11-13 d: htbdddddddjdddd -2-3 p: hpbp -3-4 x: xxxq -4-7 m: mmmlmmm -7-8 r: rrrrrrqr -9-11 x: xxxxxxxxxxx -5-8 h: hhhhflbv -1-2 k: vkrkzjpwtbk -8-10 p: pppppppxpg -9-10 h: lhbhhhhhnqhh -3-9 x: xxmqxxxxgx -17-18 p: ppppppppppppppzpqwp -8-9 x: xxxxxxxxx -1-6 l: lrblvjllhll -1-4 k: klkk -6-8 m: mmmmmbmmmm -1-6 h: hhvhqkh -5-7 n: nnnnwnss -6-7 k: kkkkkzkksl -6-9 b: bbbbbbbbm -9-14 k: kbkkfkkkkkchtklkg -3-4 f: fcjpff -6-12 f: fzfxfrqlvhwflfglftpb -7-8 j: djjjjjjsj -13-15 v: vvvvvvvrvvvvvbvvvvv -2-11 p: qpnpfmppphxpp -3-4 g: ggwgg -1-4 q: nqqq -4-9 t: thpqpkxntg -1-16 l: dllllllljlllllllll -3-8 w: dbwwhxwzqwph -13-15 p: ppppppppppppqpm -4-5 b: bbmbqbthmbn -2-4 d: zddq -2-7 x: vpmchtzdbxxxxnxd -11-13 x: xxxxxxxxxxjxxx -7-9 m: mmdjmmmnm -10-12 j: jjjjjjjjjjjx -12-14 j: wfcvflhjvblzdf -2-12 j: lqfjjjzncbgjhj -2-7 j: jtlfjqjbjgqrxgjm -4-5 t: ttttc -5-8 v: vvvvvbvpvv -4-10 b: qghbgkcbbs -12-14 n: nnnnnnnnnnnnnhnn -13-19 v: vvvvvvvvvvvrvvvvvvv -4-16 z: znzvzzzwgzzzzzzzzdz -4-13 q: qqqlqqqqqnqqlqqm -9-10 q: qqqqqqqqrs -2-12 q: qpqszqxqqqqkq -10-16 v: vvfvvvvvsxvznfvv -1-3 f: fvjpkglwfjbcgnbc -2-7 v: vfvqvvv -6-8 l: llllcllllll -9-14 v: vvvvvvvvzvvvvwb -10-11 s: ssmsssssssxsls -9-10 b: bxbbfbbxbzbzjbbm -3-15 x: xcxxxxpxxxxxdgxg -10-13 k: kkkpkjmkscgxkhkbkgd -2-4 j: djqhc -9-10 c: cccccrccds -7-10 v: vvbvvvvjjpvkv -13-16 n: nnnnnnndnnnnqnnsnnnc -2-4 g: qfgg -3-13 v: hvvvvvzrvqvcpvvhj -5-12 n: rnsnnpnnnnntnnn -7-8 p: pppptpppp -1-6 d: cdddqdddddd -3-5 h: cwzhhhbwlhtd -8-17 j: jnjdscnljmhrljrjjmjj -3-4 j: jccj -4-14 m: mmjkmmhwqbkjqmg -2-4 b: bbbd -4-7 v: vhlvvvq -1-4 p: jppm -9-12 g: vggzgppggggnggcdfp -5-6 r: rrrrrp -6-13 t: bxztttrtbttrm -17-19 d: ddddddrddddwddddpdk -1-3 w: jwjwwc -5-6 k: kkkkkk -5-6 f: ffffjxff -8-10 x: xxxxxxxwxl -6-8 q: qqqqqqqq -5-8 d: fddtdbfdkddddddjd -7-15 k: kkkkklnfkqkkxqkkvkk -2-5 x: cqzxxx -3-4 j: jjjb -7-8 w: wwwwwwlw -18-20 g: gggggggggggggggggggg -10-11 w: hwwwwwwwnwmwws -2-10 d: xsdjqqrqzdnhgmvlhkgm -2-3 s: rsxhms -7-8 n: tdnnznwpnnn -10-12 g: gggggggggggg -7-13 z: zfxzqzzmzzzrndzkvz -11-12 k: kkkkkkkkkkkk -6-7 t: ttjxxtc -4-6 n: nwzlfxnnn -4-6 j: jjjdmj -8-14 p: xgspprprpppppppp -6-7 k: kkkjkkzktn -5-8 d: dddddmdt -4-6 j: jfhjjb -3-4 k: jrkckdwqjbcctpklm -6-9 w: wwwqwxqwzkwgwwwvqbs -1-4 t: gthttttttt -3-4 h: bhhb -4-6 t: ttqltktv -11-17 v: vvvvdvvvvvpvvvvvvvv -13-14 d: ddndddwddkcdvkddddkn -3-4 b: xhdb -3-7 w: zwcptvwlkswv -8-11 p: pptpppppppm -5-14 p: wpmpnplrppppppptp -1-3 q: stqdkc -10-11 c: ccccccccccv -1-7 s: msszslsps -12-14 h: hhghhnhhhhhhhmh -14-16 g: gscwmsggggdgggmg -7-12 z: htztzwzzkzzkrzzzlz -3-6 n: dcnnvn -3-7 k: kkkkkkj -2-3 m: vmlkkjn -12-13 r: rrrrlrrrrrrrrr -6-7 z: zzzzhxxczzsd -2-7 g: htjgfggbllbgxggq -13-17 m: xhhnpmdxfpvsmjzwb -7-9 h: hhhhhhhhjh -3-4 z: zrzzz -1-5 l: llgwlszllvxxmflglldt -7-9 v: vvvvvvmvcq -5-7 r: rrzcwsmrrgrwxnrg -14-16 t: twttpttntttttttlt -7-14 j: qjsmcdzdqjgjpjjcjj -2-3 s: sshscbks -3-10 p: vppkpwpplpvp -2-5 t: ftrrt -3-7 c: cgrsczccpcpcc -9-10 v: vvvvvvvvvxvvvvv -2-3 v: vvsvw -9-11 d: dddddxdjddbd -3-4 p: pdpgrpj -9-10 p: pwppppwpvpp -4-18 r: hmrdmwvrnggrcgrsrrwg -3-4 n: nnnnnf -1-8 x: tblrxhhxwjb -10-19 f: ffbffffpfffhfksflfkf -5-12 s: sssjtsssssss -5-6 z: zzzzfz -7-8 n: nfnnnnrn -8-9 x: xxxcxxxxx -4-8 x: tcdxxxxdx -3-4 x: xxwc -6-8 h: whnhrvdlhhhhhhhxkd -14-15 q: qqqjqmrnnqktdtq -5-9 f: fhffkhfxhc -6-8 c: cccccccwc -17-19 s: ssssssssssmssssszss -10-12 f: hffffffffzff -6-7 k: nkmkkdkk -4-9 v: bvvvvvxvwnvcv -19-20 v: vvvvvvvvvvvvvvvvvvvv -4-8 h: nhnhhhhvtvfh -12-13 l: lltllllllllqll -13-17 s: ssssssssssssnsssgs -6-9 g: gdvctgcgzgrgf -13-15 w: wwwwwwwwwwwwswb -4-8 l: lllfllcglllljl -8-9 q: flqqqqqrrqq -4-5 w: wwwmww -2-5 v: dqkgvhlmqvv -6-8 g: gvtggvgg -3-11 t: ntvttnqtgltttttt -3-7 m: mmqmjmmm -9-13 d: dddzddddddddndd -3-7 j: jjqjhjt -13-14 q: qqqqqqqqqqqqbq -5-11 x: lxxxhxxxckxx -5-6 q: qnqqqwqqq -2-5 z: hzzskzzckj -2-3 j: jjzm -3-4 g: wggs -1-3 v: vzsbsvv -2-4 z: mrnz -16-19 x: fxxxxbxxxxxxxxjxxxf -6-7 x: xxxxxtx -1-6 v: qvrvvvv -4-5 w: hwwdww -3-4 d: tljd -6-13 v: nvcdjvjrvvvmqj -6-10 v: gfqjlnxfvhw -6-8 f: kzvffvffff -5-6 r: rvrctrrwcrvr -6-11 s: csfcvsxhgcsvh -8-11 b: bbbwwmdbbbjjbtb -5-13 x: lvxxbvtxbhvdx -3-6 h: dhhhvmscwwbhbrbk -4-5 s: gmpqsw -2-12 z: pzncbwqpfbhsfzzz -5-6 w: dwwbwqhgb -2-13 l: llllllllllllcllllll -1-9 v: vjjvvvvnvvvtvvd -12-14 f: ffjffzftfcfrffbf -2-5 b: brwzbs -6-10 s: tnfszsnjvbwzzhtwqg -5-6 p: pfkppppppppp -3-5 n: vstnnnprjn -9-18 s: sssssssssssssssssr -1-6 d: wdldddnvdndfqvd -3-5 t: kttjlcpttzt -5-7 z: zzzzhlzz -2-9 p: ppppppppjp -7-9 v: vvzvvvvvvvvcv -3-6 r: zrrtrrfpwgzbrtskt -9-12 s: mptshmsssssslssss -5-10 c: nccmccchjjthdtlcj -18-20 r: rrrrrrrrrmrrrrrrrxrr -2-14 f: frplctstcgdfff -9-15 h: hfhzhhhhhvmfjhhfjhhh -1-6 w: wwwwrpm -4-6 f: hfffhcfjfszdzbbg -7-10 w: xwwwwzhwrpwkw -9-10 r: rrrrrrrrzr -14-16 n: pngnnnnnnvnnnnnsnn -14-15 p: gppppdpppjppzptpppp -1-4 n: wnnnnnn -12-13 t: tttttttttttgt -4-5 n: nnwsd -9-10 l: vlllllllln -5-16 p: pppfxpxpspppmpkgppp -1-10 v: vlvvtvlkvmgcdwvvtrv -14-15 s: ssssssssjssskrg -4-5 n: gxnnnn -4-10 b: lvbqbjbbbbw -5-6 k: xkrkfldcs -5-6 n: nnsnnznfjnf -6-9 v: gqvvmvvvpb -14-18 f: sdffffwffflffsfffn -2-4 m: mmdm -11-12 g: ggnmgdmfhrpgzgr -14-15 z: zzzzzzhzzzzzmzcz -7-13 s: ssssssstssssj -4-6 g: zgtbcg -2-7 t: rttskmdpmvk -6-20 n: nnkpnnnlnfnnbnpnnnnm -9-10 w: zfpwwhwjwdwwwpwwjww -3-9 d: ddldddddwdddd -4-5 f: hfftmfcq -1-2 w: zwbjt -7-11 g: cggggkxggvgggtbmm -5-9 d: dwgfdltddgndwd -3-4 b: rbrbb -6-10 z: fzzzzxzzkzxz -4-5 z: zzhzjzffcz -8-10 x: wwsxdbkxgd -9-10 t: lttttfttdtttc -13-17 d: dddddddtdnddddddrdd -13-15 w: wwcwwwwwwwwwlwdwq -4-18 r: rvrrrkwtrmrbrrrzfwlj -11-14 j: jxjjjjjjtjjjjjv -8-15 m: mkmmlmmmmmmmmrqmmm -1-3 g: gsng -3-11 n: ttdplnfpkmnrwcrqwbvr -5-10 n: wgnqrlcnnnnnnn -7-9 c: jgwbrcclt -1-4 l: flml -8-13 s: sjssqssrgssrz -6-7 x: xlxbclxxxzxbwqx -12-19 g: qlzcctgmgfmrvxgwvgzj -4-5 w: wwwrr -11-18 m: kmgxmjskmmmmmmmmmz -12-16 f: ffqlfhzflqffffkfz -1-6 k: kzkhrfxkkk -10-11 x: vxfxxxbxxxxx -4-6 d: gvqdwrclzsdmhglrz -5-9 d: dwjddjddd -1-3 n: ndcqcn -4-5 r: rrrrh -5-10 g: pkbxgvczgn -4-6 w: wggwpfww -2-4 g: glgggg -7-8 h: hhhhhhhh -12-16 h: nkvzdqlbsptvnrzh -8-14 w: bwlwbwghwwwwtwwl -4-11 q: vqsllpqnqdcbbtvqrqxb -2-5 x: xkxxx -4-10 c: cccjncjsccr -10-18 h: xkswshrhghxlnmhqzr -5-18 k: kkkkkkkhkkkklkkkknk -9-10 t: ttttttttnt -10-11 x: xxxxxxxxxcv \ No newline at end of file diff --git a/2021/01/input.in b/2021/01/input.in deleted file mode 100644 index 7e216a8..0000000 --- a/2021/01/input.in +++ /dev/null @@ -1,2000 +0,0 @@ -191 -185 -188 -189 -204 -213 -215 -227 -222 -221 -236 -235 -236 -232 -224 -228 -234 -226 -227 -228 -230 -232 -234 -213 -197 -198 -210 -238 -248 -261 -263 -265 -262 -295 -296 -311 -330 -333 -337 -344 -345 -356 -359 -360 -364 -367 -383 -386 -387 -391 -424 -426 -428 -440 -442 -446 -450 -423 -428 -423 -425 -445 -429 -436 -465 -456 -463 -461 -463 -483 -484 -500 -517 -525 -529 -527 -530 -535 -566 -578 -582 -587 -604 -613 -614 -609 -611 -619 -623 -627 -621 -622 -626 -644 -646 -655 -657 -659 -661 -671 -673 -668 -673 -676 -682 -683 -678 -679 -682 -681 -684 -686 -690 -693 -698 -700 -702 -707 -708 -732 -733 -734 -743 -745 -776 -794 -804 -784 -790 -813 -856 -855 -859 -850 -851 -886 -885 -888 -889 -883 -885 -920 -919 -917 -915 -918 -909 -910 -924 -925 -932 -933 -935 -966 -970 -971 -974 -958 -959 -961 -959 -964 -969 -970 -973 -972 -976 -998 -1009 -1010 -1011 -1046 -1047 -1040 -1041 -1056 -1062 -1061 -1062 -1077 -1078 -1080 -1082 -1094 -1096 -1097 -1103 -1128 -1125 -1167 -1176 -1175 -1173 -1183 -1182 -1183 -1188 -1202 -1204 -1205 -1206 -1207 -1212 -1235 -1236 -1256 -1268 -1270 -1276 -1281 -1283 -1276 -1287 -1292 -1295 -1291 -1297 -1298 -1301 -1312 -1316 -1333 -1327 -1340 -1338 -1348 -1364 -1381 -1382 -1383 -1394 -1385 -1388 -1387 -1388 -1394 -1398 -1400 -1397 -1399 -1401 -1408 -1410 -1420 -1421 -1434 -1433 -1436 -1456 -1455 -1479 -1482 -1483 -1522 -1526 -1527 -1542 -1543 -1544 -1548 -1557 -1571 -1574 -1580 -1579 -1602 -1618 -1605 -1608 -1612 -1622 -1625 -1626 -1633 -1648 -1641 -1643 -1650 -1652 -1659 -1678 -1681 -1688 -1692 -1702 -1686 -1688 -1685 -1684 -1674 -1694 -1696 -1695 -1720 -1729 -1736 -1762 -1763 -1767 -1780 -1789 -1796 -1798 -1799 -1800 -1808 -1800 -1805 -1848 -1849 -1867 -1888 -1902 -1903 -1920 -1923 -1926 -1930 -1933 -1925 -1906 -1878 -1898 -1899 -1930 -1936 -1948 -1974 -1983 -1984 -1986 -1983 -1984 -1987 -1985 -1988 -1992 -2005 -2009 -2013 -2025 -2033 -2043 -2046 -2030 -2014 -2009 -2011 -2013 -2043 -2049 -2053 -2065 -2070 -2079 -2080 -2090 -2092 -2102 -2116 -2138 -2140 -2141 -2143 -2149 -2152 -2153 -2154 -2170 -2194 -2192 -2216 -2231 -2246 -2261 -2268 -2269 -2252 -2260 -2264 -2274 -2289 -2293 -2296 -2297 -2300 -2305 -2334 -2329 -2353 -2357 -2359 -2364 -2374 -2377 -2364 -2365 -2366 -2360 -2362 -2360 -2361 -2367 -2357 -2362 -2376 -2379 -2380 -2381 -2401 -2436 -2435 -2439 -2446 -2454 -2456 -2459 -2492 -2493 -2514 -2519 -2524 -2529 -2530 -2535 -2548 -2549 -2551 -2548 -2553 -2552 -2556 -2563 -2570 -2603 -2616 -2617 -2623 -2630 -2631 -2641 -2645 -2660 -2662 -2663 -2664 -2662 -2668 -2673 -2677 -2687 -2688 -2699 -2698 -2691 -2695 -2696 -2710 -2711 -2717 -2722 -2723 -2747 -2746 -2754 -2753 -2752 -2771 -2773 -2774 -2777 -2789 -2790 -2805 -2807 -2818 -2817 -2825 -2818 -2828 -2833 -2834 -2837 -2839 -2854 -2856 -2858 -2859 -2863 -2880 -2882 -2884 -2887 -2888 -2889 -2902 -2911 -2917 -2936 -2938 -2940 -2943 -2944 -2943 -2947 -2954 -2956 -2957 -2959 -2957 -2958 -2959 -2956 -2959 -2960 -2969 -2974 -2979 -2983 -2985 -2986 -2992 -2993 -2995 -3025 -3037 -3036 -3037 -3038 -3040 -3043 -3049 -3058 -3071 -3072 -3080 -3083 -3081 -3090 -3091 -3070 -3076 -3079 -3083 -3084 -3086 -3101 -3114 -3106 -3107 -3137 -3138 -3139 -3137 -3133 -3137 -3102 -3108 -3109 -3124 -3130 -3138 -3149 -3150 -3160 -3171 -3191 -3190 -3200 -3205 -3229 -3235 -3237 -3238 -3239 -3243 -3244 -3245 -3246 -3250 -3265 -3268 -3269 -3271 -3279 -3278 -3279 -3280 -3281 -3290 -3295 -3296 -3300 -3303 -3304 -3305 -3308 -3325 -3313 -3326 -3327 -3335 -3336 -3337 -3335 -3361 -3378 -3374 -3378 -3387 -3406 -3416 -3418 -3438 -3454 -3460 -3475 -3476 -3477 -3471 -3476 -3477 -3486 -3487 -3500 -3502 -3503 -3530 -3531 -3530 -3556 -3563 -3564 -3565 -3566 -3580 -3587 -3591 -3598 -3599 -3612 -3613 -3624 -3623 -3631 -3660 -3661 -3662 -3668 -3671 -3672 -3674 -3683 -3684 -3693 -3694 -3700 -3696 -3699 -3705 -3706 -3710 -3717 -3731 -3734 -3729 -3735 -3736 -3739 -3749 -3734 -3739 -3742 -3753 -3756 -3757 -3775 -3777 -3774 -3780 -3785 -3786 -3790 -3792 -3796 -3798 -3802 -3817 -3818 -3815 -3822 -3824 -3849 -3856 -3871 -3845 -3847 -3849 -3851 -3853 -3884 -3885 -3887 -3889 -3891 -3894 -3895 -3900 -3918 -3935 -3936 -3941 -3945 -3936 -3942 -3945 -3942 -3943 -3965 -3974 -3976 -3979 -3975 -3976 -3980 -3993 -3992 -3991 -3999 -4000 -3996 -4019 -4028 -4029 -4031 -4053 -4054 -4080 -4087 -4089 -4088 -4098 -4100 -4103 -4104 -4112 -4125 -4145 -4148 -4152 -4153 -4158 -4162 -4165 -4177 -4184 -4203 -4205 -4206 -4207 -4211 -4215 -4221 -4240 -4247 -4253 -4261 -4262 -4265 -4269 -4273 -4274 -4258 -4260 -4264 -4282 -4299 -4313 -4284 -4287 -4289 -4290 -4293 -4295 -4297 -4296 -4310 -4314 -4313 -4327 -4329 -4330 -4328 -4338 -4347 -4368 -4371 -4373 -4379 -4388 -4392 -4396 -4393 -4394 -4393 -4397 -4406 -4409 -4410 -4414 -4437 -4436 -4428 -4429 -4434 -4426 -4427 -4428 -4445 -4447 -4467 -4471 -4470 -4472 -4485 -4487 -4493 -4495 -4491 -4497 -4500 -4506 -4507 -4508 -4511 -4518 -4519 -4523 -4520 -4523 -4540 -4541 -4548 -4549 -4550 -4551 -4560 -4570 -4586 -4575 -4581 -4585 -4586 -4591 -4601 -4595 -4597 -4601 -4613 -4615 -4617 -4619 -4604 -4609 -4610 -4616 -4640 -4666 -4676 -4677 -4678 -4709 -4704 -4719 -4727 -4729 -4730 -4747 -4753 -4755 -4768 -4770 -4772 -4777 -4781 -4811 -4814 -4843 -4844 -4846 -4850 -4862 -4863 -4868 -4869 -4870 -4871 -4874 -4881 -4882 -4878 -4887 -4895 -4898 -4910 -4920 -4908 -4910 -4909 -4914 -4916 -4922 -4914 -4918 -4926 -4949 -4952 -4953 -4955 -4956 -4959 -4985 -4986 -4990 -4992 -5028 -5029 -5032 -5030 -5037 -5038 -5047 -5053 -5054 -5059 -5057 -5059 -5062 -5067 -5085 -5086 -5090 -5084 -5077 -5078 -5081 -5091 -5094 -5096 -5095 -5097 -5103 -5118 -5144 -5146 -5153 -5160 -5169 -5173 -5174 -5175 -5184 -5187 -5195 -5196 -5216 -5225 -5238 -5239 -5232 -5235 -5237 -5242 -5244 -5247 -5254 -5262 -5271 -5281 -5287 -5288 -5260 -5264 -5282 -5295 -5301 -5304 -5310 -5295 -5296 -5297 -5298 -5303 -5304 -5305 -5277 -5278 -5289 -5295 -5290 -5297 -5299 -5320 -5328 -5341 -5347 -5356 -5361 -5364 -5365 -5378 -5379 -5377 -5378 -5367 -5380 -5381 -5387 -5385 -5390 -5391 -5392 -5415 -5422 -5423 -5425 -5439 -5441 -5448 -5455 -5470 -5477 -5482 -5488 -5489 -5492 -5501 -5499 -5496 -5499 -5533 -5552 -5562 -5563 -5565 -5566 -5572 -5571 -5581 -5583 -5589 -5594 -5593 -5596 -5602 -5606 -5629 -5643 -5644 -5652 -5673 -5676 -5680 -5676 -5681 -5696 -5703 -5698 -5718 -5720 -5733 -5736 -5741 -5766 -5771 -5786 -5787 -5793 -5790 -5786 -5804 -5805 -5808 -5809 -5816 -5810 -5811 -5818 -5829 -5836 -5839 -5824 -5839 -5843 -5845 -5849 -5853 -5856 -5861 -5873 -5894 -5895 -5896 -5897 -5898 -5899 -5900 -5913 -5917 -5918 -5923 -5924 -5934 -5935 -5952 -5965 -5963 -5958 -5961 -5975 -5988 -5989 -5996 -5997 -6008 -6011 -6023 -6024 -6033 -6048 -6050 -6051 -6049 -6048 -6043 -6048 -6051 -6055 -6081 -6084 -6087 -6093 -6092 -6090 -6078 -6079 -6103 -6092 -6094 -6099 -6100 -6116 -6123 -6129 -6127 -6138 -6139 -6141 -6143 -6146 -6147 -6159 -6162 -6163 -6177 -6179 -6183 -6187 -6188 -6194 -6198 -6213 -6237 -6267 -6282 -6288 -6292 -6297 -6310 -6323 -6325 -6324 -6347 -6349 -6350 -6353 -6363 -6376 -6384 -6394 -6397 -6401 -6402 -6399 -6415 -6416 -6421 -6422 -6423 -6420 -6445 -6446 -6449 -6451 -6457 -6460 -6461 -6467 -6468 -6473 -6474 -6517 -6522 -6519 -6515 -6532 -6533 -6535 -6530 -6532 -6522 -6548 -6549 -6565 -6568 -6579 -6556 -6563 -6565 -6572 -6576 -6578 -6601 -6608 -6611 -6612 -6626 -6619 -6651 -6657 -6658 -6666 -6665 -6660 -6682 -6704 -6705 -6711 -6708 -6716 -6720 -6725 -6727 -6729 -6733 -6734 -6737 -6736 -6741 -6742 -6743 -6750 -6756 -6757 -6758 -6755 -6774 -6773 -6774 -6780 -6781 -6790 -6791 -6800 -6812 -6815 -6817 -6827 -6826 -6832 -6833 -6834 -6833 -6822 -6825 -6829 -6836 -6840 -6846 -6850 -6861 -6868 -6869 -6872 -6879 -6882 -6884 -6907 -6917 -6930 -6924 -6934 -6931 -6918 -6924 -6928 -6934 -6935 -6936 -6953 -6955 -6964 -6987 -6999 -7009 -7042 -7048 -7027 -7054 -7053 -7072 -7073 -7055 -7056 -7057 -7079 -7080 -7084 -7095 -7108 -7107 -7109 -7111 -7134 -7135 -7137 -7138 -7145 -7151 -7161 -7172 -7179 -7183 -7189 -7188 -7189 -7195 -7202 -7236 -7241 -7250 -7277 -7295 -7297 -7294 -7298 -7297 -7301 -7289 -7291 -7276 -7293 -7295 -7311 -7318 -7341 -7378 -7398 -7408 -7409 -7412 -7409 -7413 -7397 -7399 -7423 -7424 -7423 -7426 -7418 -7414 -7409 -7412 -7425 -7426 -7433 -7439 -7448 -7462 -7466 -7467 -7468 -7477 -7480 -7481 -7498 -7499 -7501 -7507 -7527 -7535 -7548 -7551 -7552 -7555 -7561 -7554 -7559 -7560 -7587 -7590 -7596 -7620 -7628 -7645 -7646 -7652 -7653 -7654 -7663 -7670 -7678 -7683 -7686 -7687 -7683 -7692 -7691 -7687 -7688 -7691 -7699 -7698 -7725 -7733 -7734 -7736 -7740 -7751 -7744 -7724 -7719 -7729 -7731 -7746 -7747 -7749 -7722 -7725 -7730 -7735 -7737 -7738 -7739 -7724 -7721 -7724 -7736 -7727 -7730 -7731 -7732 -7736 -7737 -7768 -7787 -7797 -7807 -7815 -7819 -7825 -7852 -7856 -7862 -7869 -7881 -7882 -7885 -7888 -7892 -7889 -7893 -7895 -7896 -7901 -7919 -7921 -7932 -7933 -7964 -7979 -7990 -7991 -7994 -7997 -8011 -8005 -8006 -8014 -8047 -8049 -8064 -8065 -8046 -8047 -8079 -8081 -8082 -8083 -8055 -8052 -8056 -8063 -8064 -8066 -8053 -8067 -8072 -8073 -8077 -8079 -8081 -8076 -8083 -8086 -8098 -8100 -8109 -8107 -8124 -8125 -8126 -8127 -8145 -8146 -8152 -8175 -8176 -8177 -8182 -8193 -8195 -8197 -8199 -8203 -8204 -8213 -8217 -8237 -8240 -8239 -8230 -8237 -8245 -8259 -8264 -8272 -8288 -8285 -8286 -8300 -8301 -8304 -8305 -8327 -8326 -8327 -8341 -8343 -8356 -8357 -8358 -8367 -8374 -8375 -8391 -8392 -8393 -8394 -8399 -8405 -8402 -8404 -8435 -8444 -8484 -8481 -8490 -8492 -8493 -8494 -8503 -8506 -8516 -8515 -8516 -8504 -8508 -8513 -8529 -8542 -8545 -8541 -8546 -8549 -8570 -8552 -8553 -8581 -8578 -8585 -8593 -8596 -8605 -8606 -8608 -8616 -8627 -8628 -8627 -8639 -8644 -8645 -8626 -8633 -8635 -8636 -8640 -8645 -8655 -8673 -8693 -8694 -8695 -8696 -8695 -8714 -8716 -8742 -8739 -8735 -8740 -8763 -8762 -8771 -8772 -8777 -8776 -8787 -8788 -8795 -8796 -8777 -8782 -8783 -8794 -8800 -8810 -8827 -8828 -8833 -8829 -8841 -8862 -8865 -8867 -8869 -8895 -8899 -8901 -8904 -8908 -8909 -8927 -8928 -8930 -8931 -8935 -8945 -8946 -8950 -8954 -8957 -8959 -8949 -8961 -8976 -8980 -8986 -8988 -8992 -9003 -9008 -9009 -9029 -9050 -9051 -9054 -9055 -9068 -9054 -9071 -9082 -9087 -9089 -9112 -9113 -9127 -9126 -9125 -9129 -9138 -9140 -9145 -9149 -9151 -9179 -9185 -9187 -9188 -9189 -9186 -9190 -9207 -9208 -9209 -9221 -9228 -9252 -9254 -9264 -9267 -9276 -9287 -9293 -9292 -9260 -9261 -9260 -9265 -9266 -9285 -9287 -9289 -9290 -9291 -9292 -9293 -9295 -9313 -9314 -9291 -9282 -9304 -9315 -9316 -9317 -9327 -9345 -9350 -9352 -9356 -9366 -9367 -9400 -9407 -9408 -9415 -9418 -9419 -9432 -9441 -9442 -9439 -9440 -9451 -9455 -9464 -9472 -9479 -9481 -9490 -9514 -9527 -9546 -9552 -9556 -9570 -9582 -9584 -9592 -9597 -9602 -9618 -9619 -9622 -9639 -9645 -9648 -9643 -9647 -9648 -9650 -9641 -9665 -9678 -9681 -9682 -9683 -9692 -9703 -9704 -9702 -9704 -9712 -9726 -9731 -9732 -9733 -9744 -9745 -9757 -9755 -9763 -9764 -9766 -9768 -9782 -9780 -9781 -9783 -9786 -9803 -9804 -9821 -9822 -9840 -9841 -9843 -9839 -9840 -9846 -9856 -9859 -9863 -9862 -9864 -9865 -9866 -9870 -9878 -9877 -9894 -9896 -9937 -9938 -9943 -9944 -9943 -9952 -9962 -9983 -9985 -9984 -9992 -10002 -10003 -10041 -10040 -10041 -10040 -10042 -10029 -10034 -10033 -10034 -10052 -10053 -10062 -10055 -10056 -10057 -10069 -10073 -10067 -10070 -10065 -10064 -10069 -10071 -10092 -10069 -10070 -10080 -10095 -10099 -10100 -10101 -10099 -10115 -10116 -10117 -10122 -10124 -10129 -10096 -10101 -10106 -10099 -10102 -10143 -10144 -10145 -10146 -10148 -10149 -10150 -10160 -10132 -10137 -10177 -10181 -10178 -10183 -10189 -10191 -10192 -10194 -10203 -10199 -10207 -10218 -10223 -10224 -10225 -10245 -10239 -10247 -10252 -10250 -10254 -10255 -10256 -10279 -10280 -10292 -10293 -10300 -10310 -10312 -10321 -10324 -10326 -10330 -10329 -10328 -10329 -10333 -10355 -10354 -10349 -10352 -10357 -10369 -10386 -10387 -10402 -10406 -10407 -10404 -10405 -10407 -10408 -10412 -10413 -10417 -10420 -10412 -10426 -10427 -10424 -10433 -10434 -10435 -10456 -10472 -10492 -10494 -10508 -10510 -10511 -10512 -10513 -10514 -10507 -10510 -10511 -10515 -10525 -10526 diff --git a/2021/02/input.in b/2021/02/input.in deleted file mode 100644 index b3a0ece..0000000 --- a/2021/02/input.in +++ /dev/null @@ -1,1000 +0,0 @@ -forward 9 -down 3 -down 8 -forward 2 -up 3 -forward 5 -up 8 -down 2 -down 5 -up 7 -down 9 -forward 4 -up 5 -down 9 -forward 2 -forward 2 -forward 8 -down 6 -forward 2 -up 9 -up 5 -down 2 -forward 5 -down 8 -forward 3 -up 4 -forward 5 -forward 7 -down 8 -down 6 -up 7 -down 3 -forward 4 -up 8 -down 5 -down 3 -down 6 -down 8 -forward 1 -forward 9 -forward 4 -up 7 -down 4 -forward 7 -forward 3 -forward 9 -down 1 -down 3 -up 9 -down 3 -forward 9 -up 6 -up 9 -down 8 -up 3 -down 1 -up 8 -down 8 -down 2 -down 4 -down 4 -up 3 -down 6 -down 1 -down 3 -forward 1 -up 5 -forward 5 -forward 8 -down 2 -forward 6 -forward 2 -up 7 -forward 6 -down 8 -forward 6 -forward 5 -up 9 -forward 5 -up 5 -forward 9 -down 2 -down 4 -down 3 -down 8 -forward 9 -forward 6 -forward 2 -up 7 -down 7 -up 3 -forward 4 -forward 5 -down 7 -forward 5 -up 9 -forward 6 -forward 6 -forward 1 -down 6 -forward 9 -up 2 -down 7 -down 8 -down 6 -up 5 -down 8 -down 8 -forward 7 -down 6 -up 5 -down 9 -down 3 -forward 2 -down 4 -forward 8 -down 5 -up 5 -forward 7 -up 2 -up 2 -down 4 -forward 4 -down 5 -up 8 -down 2 -forward 4 -down 9 -forward 8 -down 5 -down 6 -down 7 -up 7 -up 5 -up 7 -forward 7 -forward 8 -down 2 -forward 3 -down 2 -down 7 -down 4 -down 2 -forward 3 -forward 5 -down 3 -down 7 -up 7 -down 7 -up 5 -forward 1 -down 8 -down 2 -up 4 -up 5 -down 8 -forward 9 -down 3 -down 9 -forward 8 -forward 1 -forward 1 -down 2 -up 9 -down 2 -up 8 -down 6 -up 8 -forward 7 -down 5 -forward 7 -down 8 -forward 8 -down 7 -up 9 -up 2 -up 6 -down 5 -down 9 -forward 2 -up 3 -down 4 -up 5 -up 4 -down 9 -forward 7 -forward 7 -down 3 -forward 4 -forward 9 -up 8 -forward 3 -down 1 -forward 2 -down 7 -down 3 -down 7 -down 7 -forward 8 -forward 4 -forward 7 -up 1 -down 4 -up 9 -down 2 -down 1 -forward 6 -down 3 -forward 7 -forward 8 -up 9 -up 2 -up 2 -forward 7 -up 2 -up 5 -forward 5 -down 3 -forward 8 -forward 1 -up 4 -down 6 -down 5 -forward 4 -up 9 -forward 8 -up 4 -down 8 -down 3 -down 3 -down 7 -forward 2 -forward 4 -down 9 -down 7 -down 2 -up 3 -up 3 -forward 8 -forward 7 -forward 8 -down 5 -up 5 -forward 3 -forward 6 -up 7 -up 1 -forward 2 -forward 5 -down 5 -forward 8 -down 2 -down 4 -forward 2 -down 7 -down 3 -down 5 -forward 9 -down 7 -down 8 -up 1 -up 2 -down 8 -forward 7 -forward 8 -down 8 -forward 5 -up 7 -forward 3 -up 2 -down 7 -forward 1 -down 2 -up 7 -up 4 -down 2 -forward 1 -up 5 -forward 2 -up 2 -forward 3 -forward 9 -forward 2 -forward 8 -forward 2 -up 7 -down 8 -down 7 -forward 2 -forward 7 -down 1 -forward 2 -up 1 -up 6 -down 3 -down 6 -forward 7 -down 4 -forward 5 -forward 6 -up 3 -forward 3 -down 6 -forward 8 -up 8 -forward 4 -down 3 -forward 3 -down 4 -down 7 -forward 9 -forward 2 -up 2 -forward 8 -down 6 -forward 6 -down 9 -down 9 -forward 8 -down 1 -forward 9 -down 1 -down 6 -down 8 -down 5 -down 5 -forward 3 -forward 3 -down 2 -down 5 -forward 9 -down 2 -down 8 -down 3 -forward 9 -up 2 -down 4 -down 9 -forward 9 -forward 1 -forward 5 -up 9 -down 1 -down 6 -forward 6 -forward 5 -forward 8 -down 2 -forward 8 -down 4 -down 2 -down 6 -down 6 -up 3 -up 8 -forward 1 -down 1 -up 8 -down 3 -down 4 -up 9 -up 1 -down 7 -down 7 -up 1 -up 2 -forward 5 -up 8 -forward 2 -down 3 -forward 1 -up 5 -forward 6 -forward 2 -down 6 -up 2 -forward 2 -forward 1 -down 3 -forward 4 -up 8 -forward 5 -down 4 -forward 2 -down 8 -down 7 -up 7 -down 8 -forward 1 -down 4 -up 9 -down 6 -up 6 -up 6 -down 2 -forward 1 -forward 8 -down 6 -up 3 -down 7 -forward 9 -up 1 -up 4 -forward 7 -down 7 -forward 1 -down 6 -down 4 -down 7 -down 8 -down 8 -forward 4 -down 6 -down 6 -down 5 -forward 6 -up 9 -up 3 -down 4 -forward 8 -down 7 -forward 6 -up 3 -forward 1 -forward 1 -down 8 -forward 7 -forward 4 -forward 6 -up 1 -forward 7 -up 8 -forward 2 -forward 6 -forward 8 -down 9 -down 8 -up 9 -up 4 -up 2 -forward 2 -forward 8 -up 2 -forward 3 -forward 2 -up 2 -up 5 -up 8 -forward 4 -forward 8 -forward 3 -up 5 -down 1 -forward 2 -down 7 -down 8 -forward 3 -up 1 -forward 5 -forward 7 -forward 9 -up 7 -forward 4 -down 4 -up 2 -forward 4 -forward 5 -forward 3 -up 9 -forward 6 -forward 8 -down 9 -down 1 -forward 1 -down 5 -down 2 -forward 9 -down 2 -up 9 -down 1 -forward 5 -forward 8 -up 2 -forward 6 -down 4 -down 9 -forward 4 -forward 1 -down 3 -down 3 -up 5 -forward 5 -down 6 -forward 3 -down 2 -forward 8 -down 7 -down 2 -down 1 -forward 2 -up 5 -forward 9 -forward 3 -forward 5 -down 4 -up 7 -forward 6 -down 3 -forward 1 -forward 7 -forward 1 -up 4 -down 2 -down 7 -up 9 -forward 9 -down 8 -down 1 -up 2 -down 3 -forward 7 -down 8 -down 5 -down 5 -up 8 -forward 1 -down 5 -forward 8 -up 7 -down 1 -forward 9 -down 4 -forward 8 -forward 5 -forward 7 -forward 8 -forward 3 -up 9 -forward 3 -down 7 -down 5 -up 8 -forward 3 -up 6 -forward 8 -up 3 -down 5 -forward 5 -forward 6 -forward 4 -forward 3 -forward 8 -up 9 -forward 2 -down 6 -down 4 -down 5 -forward 7 -down 2 -up 5 -forward 2 -forward 5 -down 9 -forward 8 -down 8 -forward 6 -down 9 -down 7 -up 9 -forward 3 -forward 3 -up 5 -down 2 -forward 5 -down 6 -down 6 -down 2 -down 3 -down 4 -forward 7 -up 1 -down 7 -forward 7 -up 1 -forward 3 -up 6 -down 7 -down 5 -forward 9 -forward 2 -down 5 -forward 9 -down 5 -forward 9 -forward 1 -down 4 -forward 9 -down 5 -forward 8 -down 6 -down 4 -down 5 -forward 9 -down 1 -forward 6 -forward 9 -down 1 -down 1 -up 2 -forward 5 -forward 3 -down 4 -up 8 -forward 8 -down 2 -forward 3 -forward 1 -down 7 -forward 6 -forward 5 -up 7 -up 8 -down 5 -up 3 -down 8 -forward 6 -forward 5 -forward 6 -up 1 -up 8 -up 7 -down 5 -forward 3 -forward 9 -up 9 -up 4 -up 7 -up 8 -forward 7 -forward 3 -forward 9 -down 7 -forward 3 -down 6 -forward 9 -down 1 -forward 3 -down 1 -forward 8 -forward 7 -down 2 -forward 1 -forward 6 -forward 7 -down 3 -down 2 -down 1 -forward 7 -forward 4 -down 6 -up 4 -forward 4 -forward 9 -forward 3 -down 1 -up 2 -down 3 -down 5 -forward 7 -forward 5 -up 1 -down 2 -down 3 -down 8 -forward 1 -down 4 -forward 5 -down 5 -up 6 -down 6 -down 8 -forward 1 -forward 9 -up 5 -forward 2 -down 9 -down 5 -down 1 -down 4 -down 9 -down 8 -forward 2 -forward 4 -up 2 -forward 3 -down 8 -down 5 -up 5 -forward 8 -up 2 -down 8 -up 3 -forward 7 -down 7 -forward 8 -down 7 -down 3 -up 6 -forward 5 -up 4 -up 5 -forward 9 -forward 6 -down 9 -forward 5 -down 5 -down 3 -forward 2 -down 1 -up 9 -up 8 -down 6 -down 1 -forward 9 -forward 4 -forward 2 -up 1 -forward 5 -forward 9 -up 5 -forward 8 -forward 4 -down 4 -down 4 -down 2 -forward 1 -forward 7 -down 9 -forward 4 -down 5 -down 4 -down 7 -down 2 -forward 9 -down 3 -forward 6 -forward 3 -down 9 -down 3 -down 4 -down 9 -down 9 -up 6 -down 5 -up 4 -down 1 -down 1 -forward 9 -forward 7 -down 9 -forward 4 -down 8 -down 7 -forward 7 -forward 4 -up 2 -up 5 -forward 2 -forward 7 -down 1 -forward 6 -forward 6 -forward 3 -forward 8 -down 2 -up 2 -forward 7 -up 5 -down 1 -down 5 -forward 8 -down 6 -forward 8 -down 5 -down 4 -down 6 -forward 5 -down 1 -forward 9 -forward 8 -up 5 -down 6 -forward 5 -up 5 -down 4 -forward 1 -down 2 -down 5 -down 3 -forward 2 -down 9 -forward 1 -forward 1 -forward 1 -forward 8 -forward 2 -down 8 -down 6 -up 1 -forward 6 -down 3 -down 4 -up 9 -down 3 -down 3 -up 7 -down 4 -forward 4 -forward 9 -down 3 -down 8 -forward 5 -down 3 -down 6 -down 7 -forward 1 -up 2 -forward 8 -down 1 -down 4 -up 9 -forward 9 -up 4 -up 2 -forward 3 -forward 4 -down 2 -down 2 -down 6 -forward 6 -forward 8 -down 6 -up 6 -down 5 -forward 1 -down 4 -up 9 -forward 1 -forward 3 -down 1 -down 4 -up 6 -forward 5 -forward 6 -up 9 -up 9 -down 2 -up 6 -forward 1 -forward 2 -forward 3 -forward 3 -forward 6 -up 2 -down 8 -down 9 -forward 7 -up 1 -up 3 -down 2 -forward 3 -down 8 -forward 9 -down 3 -forward 6 -up 2 -forward 7 -down 2 -forward 5 -down 4 -down 2 -up 8 -forward 3 -forward 5 -forward 9 -forward 5 -forward 3 -up 9 -down 7 -forward 4 -forward 2 -forward 7 -down 5 -up 6 -up 6 -forward 8 -down 2 -forward 1 -up 1 -up 9 -up 8 -up 3 -up 4 -down 2 -up 7 -down 4 -up 5 -down 1 -up 9 -down 5 -down 9 -down 4 -up 2 -down 8 -up 2 -up 7 -up 9 -forward 4 -forward 2 -forward 1 -forward 6 -forward 8 -up 5 -forward 5 -forward 5 -down 4 -up 6 -forward 3 -down 9 -down 7 -forward 4 -down 3 -up 1 -forward 4 -down 2 -down 6 -up 3 -up 1 -down 9 -down 7 -down 9 -forward 3 -forward 8 -down 8 -up 7 -up 6 -down 2 -down 9 -down 1 -down 9 -forward 6 -up 4 -down 3 -forward 5 -up 3 -up 9 -up 8 -forward 6 -down 8 -forward 6 -forward 6 -forward 5 -up 4 -down 4 -up 6 -up 4 -forward 2 -down 5 -forward 9 -up 7 -up 6 -down 4 -forward 7 -forward 6 -up 2 -down 8 -down 6 -forward 5 -up 2 -forward 5 -forward 1 -up 9 -down 8 -forward 7 -up 4 -forward 8 -down 4 -forward 3 -forward 3 -down 9 -forward 4 -forward 9 -up 8 -forward 7 -forward 3 -forward 9 -forward 4 -up 3 -forward 2 -forward 7 diff --git a/2021/03/input.in b/2021/03/input.in deleted file mode 100644 index 7ab3dcf..0000000 --- a/2021/03/input.in +++ /dev/null @@ -1,1000 +0,0 @@ -111110110111 -110011001101 -110100000011 -100011000101 -110010010000 -100110100101 -111000010101 -011110011001 -111001110111 -101001101001 -110001011001 -110110110100 -101010101100 -011010010010 -101101110000 -011101000111 -100100100100 -100101001111 -010101101011 -101101000001 -111111000100 -010110001000 -001111010010 -100010000100 -000110011001 -001111001000 -011101101111 -011001100101 -001001011111 -100011110001 -110010111000 -000101000010 -000011010100 -010011111000 -010101101100 -111110110101 -100011100100 -000100010010 -000111110111 -010110000111 -110110010101 -000011001011 -001100000101 -100010101100 -101000111001 -000010100100 -000011000001 -010100011101 -101110111001 -110001101101 -100000101111 -010000100101 -110001110110 -111101011101 -100100000101 -110011101110 -100001011001 -101011111000 -011101110000 -100100011101 -101010110011 -010010101100 -100010010101 -010000001001 -011100001000 -111011000000 -000101111001 -111001101001 -111111101111 -010000110001 -000011011101 -001010011001 -010010100110 -100011100011 -101010000010 -100111001011 -010000010011 -110111110110 -010111011110 -101101000010 -011011011010 -101000100000 -011001110011 -011001010010 -100101110010 -011011001010 -001010101101 -011101010011 -111101101011 -100011101010 -101101010110 -000010100011 -010100101000 -001000100101 -101111011010 -011110011011 -101000010001 -110001011100 -001010001010 -011010001100 -100000100100 -010110110111 -111010000001 -111111010010 -010111001010 -111000010110 -111110010011 -110001100000 -000111010101 -010001000101 -001100100011 -110010000011 -101100001011 -100100011110 -101110010001 -101001100010 -011001111001 -011000000101 -111100101011 -000101011011 -111110001000 -010111110101 -101010101110 -001110110111 -110000110110 -110001000011 -000010000110 -100100100011 -010101110111 -110000101001 -101100001110 -101101001001 -100011001101 -111010101100 -011100111001 -011001111010 -000010111101 -110010000010 -001111111100 -001011001000 -001110110001 -101100011100 -101011000110 -101010010110 -011000101011 -111101000110 -110011010011 -110000011001 -011000101110 -000001111001 -111011011001 -010111111010 -010011000110 -000101111100 -111101101001 -101001111001 -010000011001 -111111100111 -010101101000 -000100110010 -000101100010 -011001000010 -100010000000 -111100001100 -101110110011 -001100101001 -111001000001 -110101111111 -000100110001 -101000001011 -100110001000 -101001000111 -011010100001 -011001101111 -000111111011 -001111000100 -001001000101 -110010001011 -010110010110 -111000101110 -100100001001 -100101011010 -111111110101 -111100010010 -101110111101 -010100011011 -001101111001 -010010100111 -101111010000 -000011111101 -101110011101 -111000011111 -001000000100 -100011001010 -101111101000 -001110010001 -100110111011 -101011110000 -110111001111 -001000010010 -101011111111 -100111111111 -001011010100 -110100111111 -111001010110 -101001110001 -101010111110 -010100011010 -100000000001 -000010010101 -010010101010 -011101001011 -110101010110 -001110000000 -010111111101 -011101110101 -001010110010 -001111101111 -100011110110 -101100110100 -111010111010 -001110000011 -111101111110 -001111100110 -000010010110 -111110011011 -111110011000 -001001111101 -000011110110 -001000101010 -000110101111 -010010111100 -100010101000 -000111010000 -110000001001 -000101111011 -100100101000 -101001110000 -110001001010 -110011000001 -111010100110 -000000100011 -111000111010 -100100111000 -100010010100 -111011110100 -001001001011 -000010110001 -000000101110 -010010101011 -000100101000 -011000000100 -110111110111 -111100001011 -001000000011 -101010011010 -110110011010 -000011000101 -110110110001 -000111010011 -011010111101 -000101011110 -110111111111 -111010101110 -001101000011 -101100000101 -010001111001 -101001010100 -010111100010 -011100101100 -001100110111 -000101010000 -000001110100 -100101001010 -000010110000 -011101110110 -000000110000 -001001000110 -100000111000 -011101111101 -111011001010 -100010001100 -001100000001 -101100111011 -100010011110 -011011111010 -001000000110 -010001001111 -010101010110 -000100000000 -000110111000 -001010011111 -010000001111 -111001000111 -010001100101 -100011011000 -111111000001 -111010111110 -000011010101 -001000101100 -001000110101 -111101101100 -000011100100 -010110111111 -101010001000 -010001111011 -101110000111 -000111010111 -011011111100 -010100000011 -100010111001 -110100110001 -100001100111 -110000101011 -001000101011 -101100101000 -001001010100 -011000111111 -111000001010 -111100101000 -010100110100 -000011010001 -110001100110 -110101111101 -101010100000 -101110111110 -110101011001 -111101111001 -100111101110 -010011101000 -100000001010 -000100100101 -010000000000 -100000010110 -110100011000 -101100101010 -011000001111 -001111110111 -011010011010 -001100010001 -110000101111 -011101111010 -110010010110 -001110101010 -000100111010 -011100000001 -011011110010 -001000001101 -111110111011 -110100110100 -010111011000 -110111101111 -010110000010 -111011011010 -000001001100 -010010111101 -001110111010 -010100000010 -111000110110 -110001111101 -100110000001 -100001011111 -010110110100 -011000111000 -110101001101 -100010000010 -010010000110 -111111011111 -101111000011 -101010010101 -000000010001 -000010001010 -101111000010 -010001000001 -100110011011 -010111100000 -101111000101 -101111001110 -011010110010 -000101101110 -111000011010 -011101101001 -001010101110 -111101101110 -000001110111 -001111001001 -110010101111 -010111001110 -101001001010 -011110001000 -110111011010 -010001010010 -001101001000 -001110100001 -010011110110 -110010110101 -110000011101 -111011101111 -000000001100 -101010111111 -011110010011 -001101011111 -100000100101 -011010100111 -011010110000 -000100010001 -011111001101 -111110010111 -110001001101 -101111011000 -111010100000 -111001111001 -110000010111 -010010110110 -110110010000 -100101101010 -101010000000 -100010010001 -010110000110 -000000011000 -001011111110 -010000010111 -001001011110 -010100000100 -011011010110 -110010100000 -110001010101 -000110010111 -101001100000 -101111001000 -010100110110 -100101011110 -111010010001 -110101101011 -111111011101 -010000101111 -011100000000 -010011111110 -110000111111 -001110001101 -101001001011 -111011010001 -011101101100 -110010001111 -100100100110 -100011000011 -000010111000 -111101001000 -100001101111 -001011011001 -111101011011 -111110010100 -100000011110 -100110001011 -111100011001 -111111110000 -100100111001 -010001111110 -100110110010 -000000001101 -011110110100 -111011000101 -101001000101 -110010101001 -110011110111 -000010010011 -010011010010 -110101100000 -111000000010 -010100100000 -110000111010 -011101110111 -010011010100 -000110101001 -000110011100 -101000000101 -101101110111 -010101100110 -000001111000 -110100111100 -001101010010 -110111111011 -010010001101 -001111000011 -101111011110 -010110101011 -110011100011 -101000000000 -011000001000 -101101100111 -000100111011 -101101000111 -110001000111 -001010100011 -001011101101 -000110011010 -101011100000 -111110100001 -111110000010 -001111100101 -011011011101 -000111100001 -101001100101 -110000100100 -111000111011 -101011001110 -100111100011 -000100100000 -000111001110 -001000011001 -001101100101 -111000001110 -011011110101 -010001011100 -000000110100 -011010001111 -000011100111 -001100111101 -110010110011 -000100010111 -100000010001 -000001100000 -111101000100 -110100101010 -011010110011 -010101000010 -101100111100 -100001101001 -001011101111 -110100010001 -011001001001 -110010100010 -001000110001 -100111011110 -100111110011 -100101111010 -100000110011 -111000111110 -111111011010 -011010111011 -001101001011 -001110101100 -010110111101 -001101110111 -000010101101 -110110101001 -101001000010 -001101100111 -100111011000 -001101101110 -110001111001 -101111100000 -000110001110 -111001111100 -110101011110 -000001010010 -100001011101 -001110000101 -011000110110 -000000111100 -010100100110 -000110001001 -010011111101 -101010000111 -001001111011 -101101010111 -111101100011 -111001111110 -000010111100 -110000101000 -011100100010 -101100111010 -010001010101 -001010011100 -011001011000 -001111001011 -100100110111 -001001111100 -110010001110 -101010000110 -011000111011 -010001011110 -100011000010 -110100101111 -101111110110 -111000110000 -100100110011 -110110001111 -100000111100 -011001000000 -110000000110 -100011101011 -000000110011 -111101101000 -111010000110 -101111011001 -011011010011 -111001010011 -100111010001 -011000010110 -111110110011 -100010101111 -101111100100 -010000111000 -000011111011 -011111001001 -000001110001 -000001001111 -110000110111 -100110100000 -101100011110 -000110111101 -011000001010 -010011100011 -111111011000 -000000000001 -011110000101 -011001001000 -001010111010 -111011000111 -010111010110 -011011110111 -000011111001 -001101110001 -100110010000 -010100011111 -101100111110 -110100011001 -101011100001 -110101011111 -111111001110 -010011110101 -010101000011 -010011110000 -101110110001 -000100001111 -110011011000 -111100110000 -111110110110 -110111010100 -110011110001 -100100101011 -000101001010 -111110001001 -001100110010 -101011100101 -101110101101 -001000101110 -100110001001 -011001111000 -111111000010 -011001110111 -110100001000 -101101101000 -110010011011 -111111010001 -101001110010 -101010001110 -100101000000 -100001011100 -011011000101 -001001001001 -010110000011 -010111110111 -000000111011 -110110011100 -110000110011 -011110101000 -110110110110 -001101000100 -101110101011 -101101001110 -000110100110 -001100101110 -011010011001 -011111001111 -010010000001 -111110101001 -111000000101 -001010000110 -000100111110 -000001101101 -111010100001 -010110111010 -110000010001 -010001101011 -110000010010 -000001011011 -111001011000 -011000001101 -101101110001 -100000101110 -000010110100 -100001111001 -100010110110 -101011111001 -111101011010 -110100000100 -101111000100 -101101110011 -000011110011 -110000010101 -011000110011 -001100010110 -100101011101 -000100101011 -101011111101 -111000111100 -001000011011 -101000001010 -010001001000 -110111110001 -101010010111 -101100100010 -010001000100 -000110100010 -011111010000 -000110100001 -010010001001 -001001010001 -111010111100 -101110001101 -101011111011 -011101010101 -110010100001 -110101110110 -111000111000 -110111010010 -110101010111 -010101101010 -110101010010 -000000101011 -111101000001 -100011001110 -111110000011 -100111000100 -010010011101 -010100000111 -001111111110 -011001100001 -101000101000 -001111111010 -110001101011 -110110010111 -010110111100 -110100010111 -110101110001 -010011100111 -100101011011 -110111111100 -010011111100 -010000100111 -010111101110 -101010010100 -111001011101 -101111110101 -001101110011 -110111101110 -110100001010 -000111101001 -011111001010 -110110000000 -100110010111 -000101001111 -011001010011 -000000110001 -110110101000 -101001010000 -000010010010 -000011001111 -011010100110 -010101011011 -100100111011 -011110010110 -100001010001 -111010111101 -110100011011 -011101010001 -110011111011 -101100110101 -100001001101 -011111111111 -111111100100 -111100111101 -111011010110 -100101101100 -001011111101 -100101110111 -001100100010 -001011100010 -101010100111 -010111110011 -011111011011 -100011110100 -011011001111 -000101101111 -010011010111 -011001111101 -101101101101 -000010100101 -110101100110 -100101001000 -111110101000 -100101101011 -010101101101 -010001101000 -010111100110 -010111010100 -101110010000 -010010011100 -011001110000 -111010110001 -100000000000 -101111101100 -000100011100 -011010100011 -101111010010 -010000111010 -100100100000 -000111101100 -001000010110 -010011011000 -001101000010 -001000001110 -011011011000 -111110000000 -010100101010 -111111101100 -001101001110 -011001001101 -100100110100 -000010011001 -010000111110 -101111110100 -001100101100 -011111010111 -100010010010 -011001010001 -111011001000 -011011010100 -000101011101 -010001110000 -001000011000 -100111010111 -000001010101 -010100111010 -001000000010 -001100011011 -101110001011 -010000001110 -001011011101 -000100100001 -001010010001 -110100101001 -000011110101 -010110111011 -011010101100 -101110011110 -100001001010 -111100101111 -011010001101 -001111111000 -000011000111 -001100010011 -101001111101 -111000011000 -110111110011 -110110100011 -011110001010 -001111011110 -000101000001 -101101011110 -110000111101 -101011100011 -111011111100 -010011111010 -010101011000 -111110111101 -111011000110 -111011010000 -110001111110 -011110101101 -010010010000 -011011100011 -001100111110 -100101010100 -010010100001 -111100011010 -000010110011 -100000011100 -011111111010 -111111111010 -000110000011 -011001111100 -100100010001 -110111001011 -100101010010 -010110100110 -111011100000 -100100100010 -110111000010 -100001011010 -000110010010 -010000011111 -010001110100 -011001010111 -110111100100 -001011100100 -110001111011 -011011001000 -101110010101 -101001010101 -111100000000 -100110010010 -110010111100 -101110111100 -111001100110 -100111101100 -111011111010 -111000100011 -001001100011 -011110111000 -000111101010 -011011110001 -011111101100 -110111001010 -101111111010 -001010010011 -100101111110 -011011100010 -100111101101 -000010110111 -101010000011 -001100111001 -001101011001 -110010011000 -101100101100 -111000000111 -111110011111 -101010110010 -010011001110 -111101001001 -001011001001 -100111011111 -110100001111 -001111001100 -110101100001 -011001100000 -001100101000 -111111111111 -100110000000 -000100000011 -110001001111 -101000111110 -101111100101 -101000110100 -110100111000 -100010011000 -110011100010 -101010110100 -110000100010 -010100000000 -111011111011 -001110000111 -000110110010 -010010001000 -110110011110 -001111111101 -100100001111 -100110110100 -011110000111 -111101010011 -011000100000 -001011010010 -011001111111 -110010011101 -000001000110 -101011010001 -101101011111 -011101001111 -011010000011 -011010001010 -000010011101 -010010110011 -111100111010 -111011010101 -111110101010 -010000100011 -011000100101 -010010110000 -010100110001 -111110110000 -100010001000 -000011100011 -100000111101 -111001010101 -100000100001 -001011111000 -111100000001 -110001111010 diff --git a/2021/04/input.in b/2021/04/input.in deleted file mode 100644 index 5c0109d..0000000 --- a/2021/04/input.in +++ /dev/null @@ -1,601 +0,0 @@ -23,91,18,32,73,14,20,4,10,55,40,29,13,25,48,65,2,80,22,16,93,85,66,21,9,36,47,72,88,58,5,42,53,69,52,8,54,63,76,12,6,99,35,95,82,49,41,17,62,34,51,77,94,7,28,71,92,74,46,79,26,19,97,86,87,37,57,64,1,30,11,96,70,44,83,0,56,90,59,78,61,98,89,43,3,84,67,38,68,27,81,39,15,50,60,24,45,75,33,31 - -67 97 50 51 1 -47 15 77 31 66 -24 14 55 70 52 -76 46 19 32 73 -34 22 54 75 17 - -44 11 97 50 71 -66 7 24 9 67 -88 39 82 93 57 -77 5 6 58 51 -85 61 65 70 23 - -72 74 58 71 41 - 4 57 45 89 67 -78 55 66 28 48 -82 61 87 85 84 -96 8 94 76 97 - -25 33 45 16 68 -60 27 22 13 29 -92 95 93 50 36 -43 1 66 51 99 -85 14 20 52 58 - -65 47 18 50 90 -44 25 11 70 81 -86 36 45 10 85 -43 89 74 0 14 -97 59 32 91 5 - -64 19 39 69 90 -41 5 59 37 42 -75 95 58 89 92 -20 3 85 48 71 -31 94 11 18 70 - -30 17 56 54 79 -63 12 51 57 5 -95 16 98 75 69 -80 87 71 39 48 -66 14 99 42 31 - -27 35 46 69 50 - 3 16 84 39 42 -19 22 34 80 72 -40 54 66 30 10 -12 67 36 9 74 - -39 47 61 3 35 -15 33 45 79 58 -96 53 20 80 19 -75 85 73 6 64 -43 88 72 69 37 - -52 68 12 23 59 -79 32 37 87 69 -48 31 4 36 51 -77 2 92 67 8 -13 88 93 98 20 - -12 54 34 13 27 -79 85 62 76 71 -52 84 65 93 66 -40 89 73 95 74 -29 70 32 11 41 - -54 56 53 55 78 -21 85 43 75 79 -62 66 14 84 2 -32 13 83 38 7 -15 71 81 63 49 - -83 7 51 49 50 -89 59 9 72 80 -99 41 65 13 64 -74 95 75 54 90 -53 79 58 40 5 - -36 16 46 71 87 -73 13 84 3 38 -69 88 85 28 68 -63 94 0 86 1 -49 44 65 39 15 - -55 27 91 44 39 - 6 75 14 22 99 -38 89 92 42 11 -20 60 3 70 15 - 5 19 78 88 81 - -16 90 29 52 86 -60 61 96 47 91 -19 59 10 14 4 -18 35 50 20 25 -56 2 99 63 72 - -66 54 87 7 98 -55 45 62 38 99 -13 23 76 30 3 -75 68 5 51 46 - 0 60 71 70 41 - -22 77 65 72 27 -88 9 25 44 0 -61 6 46 41 26 -74 78 20 86 87 -70 81 4 5 48 - -41 51 8 64 50 -96 40 45 85 53 -18 86 24 29 27 -90 11 39 82 88 -12 56 54 87 59 - -90 79 64 77 78 -97 12 72 27 86 -32 56 33 18 46 -95 5 51 6 80 -34 38 42 35 52 - -66 10 82 90 19 -38 69 71 77 72 -61 9 98 86 93 -56 7 88 28 47 -22 96 21 52 64 - -91 82 25 93 69 -95 79 84 35 90 -48 0 28 41 83 -23 55 88 71 65 -97 19 67 31 59 - -47 60 65 11 85 -97 36 64 96 70 -82 84 76 89 44 -67 26 28 21 41 -63 54 94 10 34 - -24 19 78 4 69 -52 38 7 58 21 -20 23 10 91 42 -44 36 25 45 49 -94 51 98 99 27 - -67 25 54 28 71 - 9 14 89 91 46 -65 1 55 88 19 -59 45 26 84 73 -83 62 50 42 97 - -58 51 29 60 94 -34 79 39 19 91 - 9 81 93 35 70 - 4 23 80 33 75 -73 69 7 49 59 - -44 83 20 24 56 -41 50 77 55 10 -79 49 67 99 16 -36 57 33 15 98 -40 76 4 53 39 - -59 92 67 6 80 -64 90 15 40 7 -36 96 62 25 32 -44 91 52 43 19 - 5 2 51 88 87 - - 4 97 70 78 59 -90 43 62 50 41 -61 64 2 91 49 -19 82 85 30 73 -15 51 36 11 34 - -97 7 86 64 40 -15 46 84 0 58 -54 87 73 93 20 -48 94 32 4 77 -13 85 72 50 36 - -68 54 94 71 83 -81 53 33 12 58 -22 67 52 21 25 -79 90 59 92 41 -29 11 76 98 85 - -10 25 64 3 83 -21 87 97 78 7 -44 71 48 22 74 -80 72 90 29 63 - 1 24 32 84 13 - -25 28 19 65 24 -98 32 4 6 99 - 7 0 27 37 35 -72 11 1 76 73 -49 85 83 93 14 - -78 91 50 45 29 -35 27 18 48 87 - 3 56 60 99 64 -84 61 15 77 40 -58 39 19 0 92 - -98 38 88 43 39 -48 93 4 52 66 -57 99 83 55 25 -91 35 42 12 23 -40 15 81 94 77 - -85 28 95 76 78 -39 66 18 47 49 -32 77 34 12 58 -69 15 45 6 41 - 3 51 25 40 63 - -58 97 10 5 57 -47 86 24 78 98 -89 25 39 73 83 -11 15 99 68 66 -84 70 61 76 30 - -67 40 29 75 90 -71 31 41 37 52 -61 0 86 84 94 -25 96 9 21 6 -39 62 14 1 81 - -15 65 47 63 94 -82 21 32 38 67 -12 20 30 91 68 -16 79 4 28 45 - 1 70 84 49 78 - -80 21 39 92 71 -48 8 87 0 38 -74 4 52 23 98 -53 89 61 30 46 -29 10 64 49 5 - -40 2 62 39 51 - 4 24 19 73 75 -86 14 97 91 11 -43 7 77 71 28 -32 63 6 20 8 - -90 57 28 47 23 -10 41 77 52 31 -45 18 55 80 49 -76 50 16 96 81 -91 75 93 68 58 - -63 87 12 16 60 -36 52 94 39 91 -67 56 24 18 26 -73 80 46 1 84 -30 74 6 61 75 - -98 32 56 51 44 -58 78 71 74 26 -55 45 83 10 30 -54 47 93 62 23 -15 67 53 21 49 - -59 93 49 65 42 - 9 74 58 52 18 - 1 47 71 25 68 -45 92 67 60 73 -97 63 61 34 36 - -73 74 6 68 40 -76 85 1 26 91 -90 94 39 92 17 -80 51 20 77 67 -54 88 21 57 83 - -14 52 70 30 32 -60 69 75 10 24 -65 40 72 71 58 -80 73 84 96 4 -62 9 28 41 36 - -56 2 83 9 50 -75 42 5 3 72 -73 28 34 76 38 -49 33 30 80 46 -37 77 55 45 74 - -40 69 31 88 8 -58 27 78 26 95 -73 86 1 34 79 -12 83 2 75 92 - 0 48 63 17 65 - - 3 87 59 76 24 -90 10 44 28 21 -83 19 77 86 51 -81 88 42 94 15 -27 78 92 34 30 - -44 23 83 22 87 -75 53 91 93 89 -88 40 56 46 37 - 0 4 80 24 7 -97 72 96 12 68 - -40 45 61 84 31 -85 12 27 82 50 - 4 49 33 6 44 -51 36 15 0 14 -68 77 64 11 79 - -31 79 50 63 59 -13 4 6 54 7 -86 30 41 68 34 -16 35 48 11 70 -84 8 81 65 74 - -75 33 21 60 57 - 7 86 82 18 68 -40 91 0 28 38 -90 36 92 94 55 -95 88 85 62 25 - - 7 5 75 36 74 -40 37 58 92 93 -46 68 24 98 34 -32 88 67 62 53 -83 84 90 31 63 - -17 24 25 93 37 -16 36 59 81 41 -99 51 12 77 98 -80 32 28 18 39 -44 85 38 64 73 - -83 18 86 33 61 -21 88 94 62 67 -40 25 97 27 73 -71 90 63 87 6 -16 7 36 92 69 - -69 67 35 24 84 -79 44 66 37 75 - 0 73 53 80 15 -74 20 32 12 60 -36 22 29 85 82 - -49 72 69 33 10 -45 81 43 0 22 -12 76 5 29 52 -82 40 42 63 85 - 1 34 32 66 15 - -82 41 16 67 23 -30 84 25 88 48 -75 71 43 0 2 -35 3 68 26 50 -64 24 8 89 98 - -61 23 63 51 46 -21 59 99 97 91 -60 34 42 26 31 -12 64 38 96 24 - 5 13 90 37 94 - -97 0 20 61 96 -92 39 43 57 64 -87 52 16 85 45 -60 41 86 6 53 -75 10 24 21 37 - -37 92 1 46 51 -33 5 88 47 19 - 0 35 2 69 72 -67 56 49 20 63 -25 7 41 65 91 - -17 69 67 77 23 -16 79 81 51 57 -12 59 49 76 91 - 1 55 41 87 38 -85 98 37 71 5 - -90 11 18 59 31 -61 1 28 2 27 -98 56 95 63 93 -24 83 36 85 72 -64 97 69 20 10 - -80 58 95 5 74 - 6 20 13 59 63 - 8 62 55 53 41 -48 70 28 10 47 -18 4 76 45 34 - -39 30 64 24 14 -42 6 0 33 57 -35 7 68 62 32 -70 65 44 82 31 -98 93 50 53 61 - -14 9 98 70 45 -27 86 6 21 76 -56 19 26 28 43 -78 87 58 89 97 -72 49 54 67 8 - -21 22 51 62 59 -38 64 30 40 94 -56 57 28 19 17 -50 32 83 97 48 -41 54 75 66 5 - - 4 21 16 91 75 -17 87 68 38 66 -92 11 39 31 45 -58 41 96 85 98 -99 44 86 15 26 - -76 61 82 96 49 -98 10 93 22 56 -66 78 21 73 67 - 3 39 15 85 87 -48 91 45 70 53 - -17 6 8 46 30 -81 53 76 21 63 -20 47 75 67 59 -69 58 5 62 92 - 7 9 93 43 70 - -17 50 24 71 28 -30 31 37 48 80 -34 62 19 57 41 -88 49 51 93 98 -87 78 55 94 46 - -93 87 54 64 29 -81 66 35 43 25 -74 86 95 2 92 -42 94 45 51 17 -23 28 16 37 80 - -68 15 25 10 32 -60 51 45 38 4 -64 47 50 12 14 -86 61 31 67 2 -18 28 55 59 87 - -95 84 19 48 0 -12 22 97 6 89 -93 70 71 35 88 -49 18 37 58 36 -43 63 23 68 17 - -29 15 91 37 45 - 3 98 33 73 39 -31 13 94 90 96 -81 87 78 93 42 -69 75 14 2 27 - -80 30 69 34 1 -59 23 20 85 31 -48 71 16 96 92 -66 99 39 53 52 -91 67 70 77 19 - -90 16 52 74 2 -41 39 95 59 1 -46 84 64 93 14 -92 48 25 28 98 -94 81 20 27 32 - -22 89 48 77 37 -54 59 30 71 38 -80 53 3 27 32 -25 23 35 79 91 -15 29 7 93 9 - -60 38 37 5 96 -51 77 28 63 80 -45 67 87 20 34 -56 26 61 85 82 -19 71 27 41 54 - -27 71 18 16 40 -88 3 61 74 52 -80 44 34 10 36 -15 2 1 4 11 -84 50 72 39 89 - -42 74 45 1 35 - 0 63 38 12 85 -18 2 13 87 30 -44 67 68 41 70 -47 82 98 48 69 - -34 78 38 27 9 -91 47 69 51 73 -67 59 45 15 21 -30 24 89 5 2 -36 22 87 68 76 - -18 68 58 95 29 -72 24 70 47 79 -35 63 20 71 93 -60 59 34 49 81 -22 98 57 53 76 - -46 40 82 45 0 - 2 22 28 38 97 -11 16 78 95 86 -80 85 83 17 67 -63 1 26 25 64 - -49 81 31 9 60 -33 15 29 38 66 -90 43 2 39 89 -24 40 63 36 91 -45 68 62 87 12 - -36 54 76 33 9 -60 7 25 96 61 -17 4 1 62 31 -93 83 79 30 73 -88 75 13 6 24 - -47 96 5 82 34 -76 67 30 15 2 -52 43 16 92 77 -58 13 18 78 84 -39 41 74 46 91 - -15 45 99 42 5 -41 61 58 14 55 -24 76 46 91 78 -52 56 81 92 59 - 4 0 63 95 29 - -75 53 8 76 33 -82 60 7 32 97 -90 40 56 51 1 -15 48 4 41 71 -13 69 46 65 52 - -77 93 27 42 20 - 0 68 31 51 52 - 3 83 56 4 38 -54 65 86 72 16 -35 34 2 99 64 - - 0 47 54 49 73 -11 61 18 69 16 -75 90 3 65 93 -22 57 84 96 8 -92 4 5 2 35 - -91 23 41 85 88 -68 28 9 70 74 -51 71 42 79 7 -61 77 57 82 18 -16 4 32 80 38 - -99 87 92 63 24 -51 64 22 9 94 -48 5 7 83 19 -11 27 46 2 17 -33 60 36 30 32 - -91 20 80 10 81 -55 78 8 67 7 -37 76 31 16 49 -30 33 63 68 28 -50 35 40 74 77 - -27 39 23 34 94 -51 18 60 8 98 -28 75 4 85 12 -96 2 15 29 88 -46 35 32 79 50 - -91 62 4 40 11 -92 47 56 5 3 -85 75 55 8 12 -25 48 13 31 21 -46 54 95 26 80 - - 5 54 87 34 3 -96 12 67 6 14 - 1 43 92 35 49 -31 72 65 85 2 -75 81 26 28 4 - -81 38 3 64 71 -69 53 19 1 67 -17 63 73 10 85 -37 15 91 20 62 - 0 35 47 8 43 diff --git a/2021/05/input.in b/2021/05/input.in deleted file mode 100644 index d7b445a..0000000 --- a/2021/05/input.in +++ /dev/null @@ -1,500 +0,0 @@ -593,10 -> 593,98 -777,236 -> 964,236 -650,575 -> 476,575 -120,612 -> 715,17 -508,707 -> 508,89 -98,834 -> 751,834 -623,554 -> 623,701 -929,976 -> 62,109 -368,893 -> 330,931 -495,335 -> 40,335 -44,704 -> 423,704 -683,711 -> 683,487 -26,940 -> 833,133 -961,183 -> 454,183 -301,306 -> 301,935 -973,822 -> 398,822 -639,911 -> 515,911 -861,180 -> 184,857 -31,97 -> 857,923 -966,376 -> 966,114 -881,485 -> 881,377 -930,98 -> 110,918 -841,889 -> 841,35 -512,261 -> 880,261 -48,533 -> 48,674 -207,226 -> 52,226 -823,952 -> 177,306 -331,566 -> 423,566 -422,418 -> 422,130 -699,517 -> 699,567 -757,784 -> 241,784 -508,445 -> 560,393 -866,275 -> 435,706 -74,41 -> 74,258 -386,369 -> 334,317 -240,94 -> 240,969 -851,197 -> 577,197 -28,906 -> 741,193 -286,227 -> 286,293 -849,800 -> 849,665 -736,307 -> 336,307 -69,701 -> 494,276 -421,823 -> 96,823 -121,626 -> 121,393 -318,351 -> 194,351 -670,671 -> 439,671 -603,914 -> 603,272 -61,507 -> 61,889 -266,39 -> 157,39 -543,664 -> 869,664 -382,709 -> 884,709 -499,80 -> 548,80 -489,79 -> 878,79 -695,86 -> 644,86 -987,585 -> 987,557 -287,67 -> 551,67 -975,983 -> 35,43 -707,351 -> 232,351 -529,175 -> 852,175 -32,811 -> 604,811 -106,153 -> 815,153 -195,268 -> 509,582 -50,922 -> 312,922 -220,500 -> 872,500 -473,33 -> 569,33 -858,847 -> 162,151 -937,947 -> 26,36 -726,435 -> 402,435 -686,601 -> 474,813 -764,880 -> 84,200 -850,950 -> 850,464 -413,620 -> 413,285 -893,560 -> 229,560 -149,100 -> 149,901 -358,613 -> 243,613 -202,445 -> 202,411 -127,153 -> 513,539 -147,846 -> 53,940 -139,920 -> 679,380 -913,953 -> 913,735 -339,466 -> 339,177 -113,882 -> 647,882 -18,880 -> 134,880 -897,152 -> 897,428 -473,511 -> 636,511 -880,370 -> 358,370 -400,244 -> 721,244 -419,987 -> 120,688 -872,224 -> 481,224 -335,302 -> 730,302 -961,324 -> 961,157 -769,301 -> 959,301 -829,124 -> 144,124 -523,372 -> 985,372 -520,33 -> 520,685 -554,644 -> 808,898 -82,676 -> 870,676 -303,612 -> 303,705 -338,40 -> 338,939 -836,47 -> 72,811 -371,751 -> 575,955 -929,505 -> 929,324 -273,181 -> 275,183 -347,595 -> 347,463 -95,629 -> 95,606 -809,188 -> 126,871 -857,924 -> 145,212 -668,277 -> 668,63 -700,904 -> 700,45 -814,899 -> 22,899 -205,98 -> 714,607 -943,28 -> 40,931 -282,620 -> 773,129 -424,803 -> 285,803 -688,329 -> 299,329 -146,628 -> 34,628 -573,417 -> 164,826 -292,232 -> 412,112 -412,508 -> 145,508 -632,648 -> 632,92 -885,904 -> 885,513 -295,981 -> 132,818 -134,681 -> 41,681 -810,531 -> 959,531 -188,590 -> 188,215 -960,795 -> 189,24 -729,211 -> 729,833 -214,817 -> 845,817 -196,609 -> 584,609 -384,908 -> 384,101 -770,907 -> 770,530 -451,469 -> 451,812 -571,261 -> 834,261 -799,436 -> 799,983 -248,105 -> 248,879 -783,906 -> 783,903 -955,670 -> 790,670 -723,750 -> 723,429 -572,427 -> 546,427 -610,341 -> 527,341 -925,426 -> 816,317 -151,403 -> 151,684 -408,969 -> 408,369 -276,425 -> 276,75 -186,86 -> 186,758 -412,420 -> 412,531 -361,60 -> 976,60 -787,649 -> 667,769 -45,866 -> 91,866 -319,963 -> 51,963 -112,866 -> 112,747 -291,475 -> 504,475 -175,116 -> 357,116 -968,961 -> 968,213 -13,12 -> 987,986 -640,728 -> 767,728 -981,505 -> 246,505 -864,981 -> 128,981 -91,66 -> 931,906 -798,116 -> 91,823 -552,74 -> 88,538 -620,872 -> 232,872 -45,229 -> 658,229 -413,75 -> 413,436 -815,257 -> 815,686 -989,22 -> 36,975 -178,904 -> 233,849 -635,128 -> 635,96 -640,820 -> 640,313 -890,787 -> 167,64 -221,22 -> 826,22 -914,132 -> 60,986 -848,31 -> 392,487 -105,969 -> 858,969 -903,868 -> 143,108 -38,941 -> 621,358 -171,340 -> 14,497 -286,460 -> 81,255 -726,688 -> 857,819 -494,689 -> 510,689 -517,913 -> 598,913 -932,66 -> 932,431 -977,982 -> 18,23 -95,101 -> 95,278 -574,467 -> 349,467 -63,803 -> 63,882 -838,874 -> 255,874 -900,752 -> 181,33 -102,897 -> 989,10 -374,439 -> 374,277 -513,504 -> 513,885 -814,932 -> 814,407 -824,656 -> 959,521 -415,570 -> 616,570 -577,880 -> 577,181 -287,524 -> 986,524 -955,665 -> 323,665 -556,365 -> 263,658 -154,226 -> 886,226 -803,750 -> 866,750 -558,725 -> 558,395 -941,115 -> 941,150 -180,410 -> 180,874 -458,753 -> 112,753 -199,253 -> 363,253 -423,650 -> 22,650 -892,851 -> 279,238 -611,109 -> 611,198 -983,344 -> 339,988 -299,47 -> 299,934 -435,652 -> 700,387 -186,775 -> 677,284 -136,576 -> 136,368 -818,744 -> 305,744 -767,171 -> 767,431 -930,842 -> 259,171 -342,831 -> 342,601 -193,672 -> 46,525 -925,164 -> 528,164 -725,92 -> 617,200 -67,729 -> 67,739 -547,153 -> 547,245 -763,434 -> 763,509 -314,888 -> 357,888 -72,645 -> 491,645 -92,67 -> 240,67 -827,936 -> 788,897 -852,378 -> 77,378 -448,337 -> 668,337 -846,739 -> 499,739 -465,691 -> 315,541 -716,163 -> 18,861 -78,965 -> 983,60 -114,952 -> 820,246 -950,351 -> 419,882 -266,36 -> 266,482 -773,841 -> 773,66 -742,198 -> 742,46 -417,512 -> 304,625 -900,277 -> 900,338 -983,431 -> 473,941 -986,282 -> 734,30 -742,19 -> 769,19 -952,320 -> 948,324 -92,590 -> 548,590 -107,39 -> 107,696 -603,749 -> 603,26 -55,282 -> 888,282 -670,848 -> 985,533 -981,982 -> 92,93 -147,428 -> 649,930 -773,737 -> 821,785 -791,576 -> 791,852 -327,672 -> 530,469 -847,122 -> 381,122 -419,493 -> 498,572 -879,842 -> 879,239 -267,717 -> 267,869 -142,449 -> 174,417 -342,718 -> 342,397 -603,207 -> 314,207 -612,648 -> 735,771 -37,10 -> 971,944 -891,716 -> 891,86 -252,217 -> 662,627 -185,165 -> 941,921 -854,717 -> 676,717 -158,791 -> 336,791 -762,226 -> 98,890 -73,189 -> 92,189 -649,511 -> 253,115 -719,456 -> 514,251 -605,286 -> 325,286 -454,609 -> 454,489 -374,541 -> 783,541 -599,177 -> 94,682 -600,384 -> 32,384 -810,933 -> 39,162 -780,871 -> 409,871 -24,639 -> 24,316 -454,80 -> 454,95 -556,541 -> 907,541 -627,295 -> 750,295 -245,71 -> 214,102 -725,445 -> 614,445 -779,538 -> 779,390 -746,667 -> 351,272 -117,776 -> 117,660 -498,495 -> 88,905 -697,721 -> 697,919 -580,314 -> 580,166 -22,656 -> 641,37 -413,433 -> 44,802 -182,305 -> 805,928 -739,277 -> 739,499 -172,210 -> 172,259 -894,576 -> 894,322 -265,263 -> 265,437 -430,228 -> 780,578 -464,531 -> 798,531 -713,63 -> 668,63 -918,831 -> 256,169 -414,375 -> 467,375 -440,32 -> 391,32 -439,806 -> 955,806 -335,820 -> 335,279 -727,458 -> 422,458 -312,274 -> 619,581 -136,724 -> 538,322 -589,680 -> 589,850 -335,648 -> 232,545 -499,216 -> 405,216 -942,710 -> 942,455 -969,556 -> 721,556 -756,552 -> 756,902 -98,870 -> 445,870 -476,833 -> 476,269 -820,127 -> 407,127 -337,519 -> 714,519 -756,95 -> 11,840 -317,339 -> 317,286 -353,86 -> 43,86 -93,950 -> 938,105 -705,509 -> 705,319 -244,879 -> 721,402 -434,794 -> 711,517 -272,381 -> 431,381 -652,104 -> 652,587 -850,866 -> 34,50 -645,902 -> 79,336 -701,39 -> 701,295 -492,793 -> 95,396 -352,554 -> 395,554 -123,405 -> 322,206 -941,745 -> 716,520 -450,512 -> 569,631 -42,25 -> 817,800 -909,387 -> 909,863 -919,934 -> 919,546 -439,881 -> 569,881 -167,866 -> 167,669 -242,264 -> 242,694 -981,786 -> 228,33 -452,434 -> 452,660 -22,26 -> 22,29 -26,155 -> 677,806 -801,627 -> 313,627 -657,135 -> 657,270 -872,875 -> 440,443 -636,248 -> 636,338 -776,51 -> 93,51 -498,600 -> 894,600 -263,984 -> 263,807 -416,390 -> 899,873 -269,137 -> 976,137 -752,12 -> 752,617 -55,925 -> 548,925 -856,551 -> 771,551 -653,93 -> 653,587 -403,286 -> 403,417 -895,706 -> 221,32 -139,822 -> 139,928 -696,194 -> 696,143 -270,678 -> 710,678 -879,353 -> 879,360 -949,712 -> 752,712 -665,661 -> 817,661 -462,952 -> 980,434 -692,766 -> 692,478 -157,117 -> 144,117 -438,701 -> 408,701 -401,703 -> 401,724 -876,831 -> 108,63 -749,892 -> 832,892 -455,124 -> 455,776 -551,222 -> 551,372 -533,80 -> 726,80 -342,740 -> 56,740 -793,370 -> 34,370 -949,614 -> 949,623 -610,287 -> 610,760 -978,834 -> 85,834 -644,894 -> 644,341 -35,887 -> 176,887 -168,958 -> 964,162 -341,886 -> 341,470 -417,845 -> 417,702 -338,347 -> 304,313 -651,10 -> 72,10 -853,160 -> 853,85 -381,568 -> 436,623 -794,437 -> 250,437 -861,72 -> 206,72 -807,813 -> 807,827 -820,502 -> 820,329 -547,508 -> 547,773 -160,129 -> 160,175 -756,468 -> 756,80 -442,661 -> 405,661 -304,817 -> 304,765 -99,42 -> 957,900 -212,110 -> 854,752 -44,620 -> 661,620 -212,311 -> 784,883 -329,671 -> 329,908 -86,359 -> 553,826 -257,799 -> 934,122 -409,663 -> 409,367 -528,623 -> 593,688 -957,525 -> 544,938 -846,766 -> 113,33 -176,680 -> 176,102 -167,287 -> 167,929 -932,870 -> 834,968 -86,774 -> 49,774 -745,231 -> 70,906 -435,760 -> 138,463 -776,810 -> 625,810 -928,930 -> 76,78 -602,24 -> 602,688 -394,424 -> 65,424 -946,966 -> 93,113 -494,39 -> 951,39 -607,699 -> 832,699 -13,403 -> 391,403 -726,475 -> 726,29 -828,625 -> 836,617 -396,770 -> 167,770 -28,546 -> 374,200 -56,113 -> 837,894 -290,589 -> 740,139 -930,805 -> 296,171 -646,895 -> 49,895 -111,15 -> 111,497 -11,274 -> 570,833 -257,624 -> 603,624 -63,844 -> 666,844 -846,661 -> 846,464 -431,72 -> 431,674 -726,674 -> 726,40 -286,660 -> 286,909 -847,222 -> 847,861 -325,896 -> 325,416 -793,953 -> 365,953 -987,956 -> 62,31 -845,853 -> 363,371 -79,782 -> 506,782 -424,21 -> 424,369 -938,162 -> 177,923 -86,193 -> 799,906 -320,164 -> 320,654 -840,306 -> 840,711 -852,736 -> 852,690 -876,966 -> 143,233 -787,926 -> 38,177 -374,112 -> 340,112 -132,541 -> 740,541 -29,28 -> 968,967 -916,212 -> 170,958 -371,553 -> 521,403 -88,796 -> 870,796 -656,367 -> 71,367 -785,166 -> 785,427 -320,30 -> 320,549 -909,527 -> 816,620 -832,965 -> 302,965 -672,259 -> 80,259 -578,513 -> 578,243 -975,561 -> 537,123 -135,330 -> 188,330 -501,695 -> 501,573 -717,230 -> 878,230 -854,501 -> 27,501 -705,885 -> 950,885 -704,338 -> 704,630 -477,485 -> 864,485 -901,42 -> 305,638 -660,540 -> 660,546 -555,79 -> 190,79 -226,126 -> 800,700 -575,908 -> 944,908 -94,478 -> 94,746 -461,425 -> 929,893 -861,429 -> 451,19 -832,825 -> 179,172 -186,133 -> 298,133 -684,270 -> 558,270 -786,872 -> 125,872 -649,178 -> 649,595 -893,738 -> 412,257 -760,854 -> 901,713 -16,914 -> 866,64 -935,928 -> 266,259 -323,229 -> 32,229 -608,828 -> 608,49 -715,892 -> 74,251 -787,187 -> 787,903 -405,793 -> 405,183 -232,704 -> 232,389 -130,706 -> 130,657 diff --git a/2021/06/input.in b/2021/06/input.in deleted file mode 100644 index 403b184..0000000 --- a/2021/06/input.in +++ /dev/null @@ -1 +0,0 @@ -3,4,1,1,5,1,3,1,1,3,5,1,1,5,3,2,4,2,2,2,1,1,1,1,5,1,1,1,1,1,3,1,1,5,4,1,1,1,4,1,1,1,1,2,3,2,5,1,5,1,2,1,1,1,4,1,1,1,1,3,1,1,3,1,1,1,1,1,1,2,3,4,2,1,3,1,1,2,1,1,2,1,5,2,1,1,1,1,1,1,4,1,1,1,1,5,1,4,1,1,1,3,3,1,3,1,3,1,4,1,1,1,1,1,4,5,1,1,3,2,2,5,5,4,3,1,2,1,1,1,4,1,3,4,1,1,1,1,2,1,1,3,2,1,1,1,1,1,4,1,1,1,4,4,5,2,1,1,1,1,1,2,4,2,1,1,1,2,1,1,2,1,5,1,5,2,5,5,1,1,3,1,4,1,1,1,1,1,1,1,4,1,1,4,1,1,1,1,1,2,1,2,1,1,1,5,1,1,3,5,1,1,5,5,3,5,3,4,1,1,1,3,1,1,3,1,1,1,1,1,1,5,1,3,1,5,1,1,4,1,3,1,1,1,2,1,1,1,2,1,5,1,1,1,1,4,1,3,2,3,4,1,3,5,3,4,1,4,4,4,1,3,2,4,1,4,1,1,2,1,3,1,5,5,1,5,1,1,1,5,2,1,2,3,1,4,3,3,4,3 diff --git a/2021/07/input.in b/2021/07/input.in deleted file mode 100644 index 84d7622..0000000 --- a/2021/07/input.in +++ /dev/null @@ -1 +0,0 @@ -1101,1,29,67,1102,0,1,65,1008,65,35,66,1005,66,28,1,67,65,20,4,0,1001,65,1,65,1106,0,8,99,35,67,101,99,105,32,110,39,101,115,116,32,112,97,115,32,117,110,101,32,105,110,116,99,111,100,101,32,112,114,111,103,114,97,109,10,1304,510,261,432,1,767,525,1663,1598,125,84,924,216,1049,365,4,21,226,131,178,666,1134,58,839,1065,670,419,11,297,28,80,258,811,659,1288,21,17,436,1184,823,667,7,499,249,406,157,112,715,220,93,710,148,152,1192,15,493,1551,473,760,503,177,124,123,236,848,221,658,771,347,23,264,739,1583,747,17,336,998,159,679,119,2,160,412,873,1480,337,92,369,136,3,188,683,496,214,131,330,493,649,136,503,249,342,240,728,494,150,25,146,95,1328,401,580,743,385,85,1011,466,36,228,1394,77,1009,46,751,782,1501,464,1046,4,317,1566,1661,822,107,487,208,727,53,55,355,370,1319,16,18,965,1582,190,38,386,169,766,111,262,229,248,318,368,70,18,302,87,218,404,265,2,109,62,557,714,1174,429,1082,786,37,470,195,408,598,935,1224,11,83,318,475,354,342,699,209,372,942,801,30,1065,4,110,969,449,266,50,314,771,890,314,394,316,211,1238,84,574,120,698,1382,1039,670,121,281,241,491,742,802,194,41,573,473,824,1283,59,371,1167,32,1645,115,58,845,11,408,1284,414,1618,240,364,991,111,517,146,256,616,968,130,98,414,13,152,332,96,816,366,214,69,1072,1225,98,122,554,236,14,499,89,793,119,945,511,476,112,1201,501,9,23,517,277,283,1600,581,290,248,472,38,144,178,645,477,1016,139,123,4,671,370,1025,290,20,1680,856,212,44,93,656,1163,384,852,461,1248,79,341,1125,812,746,511,1461,420,1070,22,126,274,1698,526,949,20,865,66,1244,157,275,670,384,1142,696,43,74,344,893,237,327,135,272,690,1032,395,1,16,521,1573,304,512,466,243,171,913,323,325,82,16,462,457,1609,24,98,22,528,158,79,1012,60,146,58,504,503,1,42,78,164,3,439,653,217,251,94,584,333,435,254,170,1213,671,548,799,332,434,487,61,710,136,551,556,722,316,365,1403,115,104,597,137,881,577,1334,41,649,177,196,434,191,101,248,14,71,1053,44,1074,51,607,65,161,922,235,132,247,1412,500,1409,15,86,72,327,878,507,1379,454,109,1250,184,19,284,1057,353,476,807,577,305,466,40,136,16,883,516,253,150,125,49,102,404,1606,518,94,1042,204,443,444,22,1197,168,766,1466,1053,695,565,77,406,694,102,84,414,686,800,157,7,516,440,139,1538,144,1327,851,1526,69,315,1078,678,247,1579,100,254,947,758,603,44,535,1242,1117,1119,645,203,97,88,437,886,408,566,351,36,0,461,1098,415,1381,1217,1763,202,1106,466,30,237,757,313,390,38,344,1254,1275,343,278,1064,1116,70,279,276,214,1153,306,67,488,683,432,53,128,91,1082,403,117,1169,568,60,578,475,657,43,509,434,128,1115,872,333,73,954,789,590,185,1305,352,574,266,1634,731,156,562,247,356,743,689,298,637,1125,590,761,123,1508,33,0,558,146,888,236,668,53,94,619,591,422,44,1114,1284,806,39,816,47,59,76,1090,1102,7,1307,676,1161,473,376,175,224,431,284,875,86,28,99,700,459,204,673,1001,31,302,291,386,259,4,181,1048,274,1661,347,614,760,187,1118,196,1076,219,1194,226,909,189,208,265,601,503,693,213,16,63,25,108,133,979,56,195,250,294,920,231,435,1004,352,469,55,1374,605,72,714,534,504,1411,128,724,1216,7,317,948,285,668,320,97,316,298,145,605,40,486,324,399,336,612,386,328,631,44,366,103,109,219,530,39,654,341,132,1090,50,15,654,801,791,169,746,1512,660,383,67,762,46,236,184,51,1051,1161,347,673,554,523,3,463,31,132,258,413,18,293,986,699,608,289,175,70,217,136,857,473,585,14,636,189,119,128,129,358,560,580,425,236,1194,1182,213,79,36,162,200,179,170,892,1398,336,1073,76,798,231,58,216,1134,175,392,688,342,28,300,672,1160,501,44,79,357,1411,856,27,471,600,303,35,546,1466,74,359,234,1200,657,224,431,802,0,584,784,1245,15,776,28,1464,191,275,639,569,179,908,173,1041,630,907,1520,248,1,34,596,53,44,9,782,777,295,818,1295,1115,468,34,530,349,271,99,344,923,733,124,170,208,20,744,530,582,35,58,938,721,253,934,326,528,722,123,0,623,382,889,929,454,457,1024,43,293,521,548,291,654,506,307,1031,1,390,321,727,937,1000,57,52,136,69,920,19,269,950,578,119,207,14,244,274,171,971,548,335,748,553,196,531 diff --git a/2021/08/input.in b/2021/08/input.in deleted file mode 100644 index a5bf9d9..0000000 --- a/2021/08/input.in +++ /dev/null @@ -1,200 +0,0 @@ -badc bd dbeaf cfdbge dfb cfbdea efbag edcfgab dcafe degfca | eacfd acdfbe cbdegf fcbaedg -cd fdbac egcfab gbadcfe cfgdeb cbadfe deca cdf dfabg abefc | dcf cfbad gbafced fcd -cg agecfb cbg eabgfdc egdc fdgba bafecd cbdfe bfcdeg cfgdb | efdcb adcfeb fbdcg gbc -bfceg gfadb dbcfgea bgaef efad abe bcdgfa ea fbdgea agecbd | eadf ceadbg abfge fecdbga -gdcafe eacb adc gbfda afdceb edgbcf badfc ecgbafd ac fdbce | ebfcd cefdab bdfgeca egbdacf -aefbgd fbdc fbecg egdcb edcbag bf gcefa fbedcg bagfced fbg | afgce cfbd bdcf geafdbc -ebgacd edacg gcdeaf cabfg dbc bd cdbgaef ebad fecgbd acbgd | dgbac db caegbdf gcbfa -defbga gead ge efagcb gdafbc cegbdfa egf bfdce bgdef dgabf | gef eg bfcdag ge -bae adcgfbe cdfeag ab dcgeb bfdage agecb cagfe abcf bfcaeg | bae aeb agfceb afceg -ae adefcb gaceb gadceb edag efadcgb badgc cfgbe cadbfg cea | ceabgd fbeacdg aged aged -aegbdc dbegfac gcbaf df febd egdafc deabg gdf gdfeab adfbg | bcdegaf dfeb bcegad df -aegcdfb becdaf gdecf ag fag dcfgba badg fcbad cdgaf acefgb | abcdf cefdab ga ga -gbcfad cefadg cegad aefdb gedacb gcfe fc cfbgead cfade caf | degac egcf geacfbd afc -bcfad afcdbe fd ecfba cfd afde cfeabg gcbfed dacbg fdgabec | cafbged edfa fcd dabgc -afdc adbfe bgecfad ecagdb dbcafe dfe fd agbfe bdace gdbfec | fadbe efbdgc fadbe edcba -bdface geba ecbdag acegd afcdg ge eadbc bfecgda edg fgbdce | eg abge fadgceb abge -fagbde fcegbd gec efcdg fdgbe ebfcag gc adcfe cgdb cagbdfe | defcg cbgdfea gcbd ecfgd -acfbg debgf gfcdba edcbfa fbdag fgbeca cfbagde gadc da bda | dacg acbgf cedfgab caefdgb -ca dfegca edcbgf gfcde aedbg gfdeacb dcbfea facg dgcea ace | fedcg fdagec cea ac -acdf gcfde debcga ecbgaf cf ebgdf bagfdce cedag cef gedafc | dgcbea fc dcgeaf cdaeg -ebagf cabgfed ed cbgad afcbge afdbge edg eagbd cedgfb aefd | fcgdbe de cgbeaf ed -fbcdeag cafbd fgcbea fdgacb daecfb cg gca defga gbdc fdcga | abfcged agc acfgd cbfaeg -dacfe ed ebdcag gcadfe dfbcaeg dce dfeg fbcadg bfeca acdfg | fcbdga gcbade aegdcf fbcgda -cfdegb cbef fgdec gdfbca gdecbfa egfdca bc gbc cbegd aedgb | befc bc abegd ebcdfga -agcefdb fdbg bf bdafe gdebaf eafdg acdbe gcebaf bef edcfga | bf fdbg efdab gefda -gcb bdcgef dcbfg bg edbg facegb cbedf edgafbc dfgca edacbf | gb cdebfa deagfcb bg -eafbg gfad afegbd caefbg befdgc ebagd gd bdg cfbdage acdeb | gd geafb cabed dbg -bcedfg dc dgc aedfbcg acgbed bgfead gedbf bfdcg cedf facbg | gabfed cdebag dafegb cd -fa adbceg afecd cafdbge eacgfb daegcf aef bcdfe fdga daceg | acedf afe fae afdg -cdfaeg agcfb bcdgea dcafeb cef fabec ef dfgcbae defb eabcd | gdabce fdeb ebdf ecf -cdefg ceafg gebfd cdg dc efbcdg cdgbea cfedbga cbfd fdagbe | fbcd afdgbe fabedg dcfb -cdafgb egdb fecgabd cbfdg fcbedg feb acefg begcf be dacebf | be be ebfdca abgfcd -eafgcd facegb acb cdbfaeg fagec dgcabe baefd cgbf cb afecb | bcafeg fcgb gfdeac eagcf -ecgdfb deb edfgab eb faedcg agfed bfaed dbacf gbae efgdcba | fabde eb ecdgfb eabg -aefbg bdegfa gacdb gefc fbc fc bfdcae gefbac cbfag dbgefac | ecfg fc cfge efgcdab -gcfbed gcbae dcaef cbegad bdag bgeacf adefgcb deg adgec gd | agcbde bgad gdbfec gcfabe -dfacb egbcda dac agdcfb fecab adecfgb bgadf cd fgeabd cgfd | gabfdec acd dc dc -bfecg dcgeab af gadf aedbg caefdbg bgfade bafeg abf eabdcf | ebcfg gafd ebacfd fgbdace -ge fdeab gcebfda fadcg fgead abcdef eag ebdgfa acgbef dgeb | cdagf cfdgbae fdeab eag -dba dgfceb fbcegad bagde bcdeag bcedg bdafce agfbe ad cgad | bdcafe agdc ebdcg cdga -edfg fedac fbegcad acgfe fabcd ead bgefac de daecgf bcaged | bafcd ade bacefg fdbac -gdecbf edabc ef fcgead fcadg bdcfga fec ceadf dgaefbc agfe | faedgc ef gabfcd fe -deafg eb egbaf cadegf fcdeab degb bcgaf bfe bfcdega gefdba | abgfe eb gfdaeb efdcga -fabcd beadf efabgc fc cafdgb gcfd adfcgeb abgdce cfb dgcba | dcgf bdcgaef gdcf cfdg -ebac acedf ceadfb cfe dbcgaf ec efcgdab degaf abfcd edgbcf | ce edgaf dgbceaf fce -ecbag fg gacdfe edafgcb cgefa eacdfb deafc bdagcf gcf dgef | fged gedf cefdga cabge -dgebc bcg cg gdeabf cgfeba gdfc gefbdc adbec bdefg fgcdbae | begdf cfgd eadbc gbfde -aefdb ecgb dgaeb agdbce ega fgdacb bcadg cbdeafg ge edacfg | age fcbdaeg gea bcfegda -cdeabg fcgda bdagc acfb dfa af cdeabfg efdgab fbcgda decgf | bcagd cfba gedfc af -ceadb caebgfd bdfaeg cbgaf ge ega gadcbf gfce ebgcfa gebca | aecdb febgcad bgcaf fadcgbe -daegb gfdae ceagfd bgfade feagcb fbgd bg cbagdfe ebdac ebg | gefbacd dbgf geb adgbfe -ecadfg acdfb aefgc ecbfdag dce cfbega fcdae edga gbecdf ed | fcdba ced egfcba dega -defgbc cgdea efag fdbcgae acbdf gcdaeb fe dfcega efc defca | fage fec dcafeg ecagfdb -bg dbcafg gdafecb dgfcae defcg gebd cefgb bgfecd fbaec fbg | gbf dfgec bedg cfdgae -ebgda ebd adce cdgaeb edfcgb bcagd agdcebf ed agbef gcbfda | efagb gbefa dbcfgae eadc -ebcfdg dbe de cdabgf fgdab dgae aecbf abfgced edbaf eagdfb | bface cdafebg gadcefb fedab -agc dabcge agbcd cabe dbagf cfgeadb gecafd gbcdfe ac gbced | cbegd beac dgbce ac -fdagb bdeacf fga eagd gcfdb gecafb ga feabd abfgde dcbfega | bdafe abgcfe gbecfad abdgefc -fbecd dbaef bdgc debafgc daecgf ebfcgd ebc abegfc bc gfced | fadecbg cb cdgeaf bfade -fagbe aebfgcd gef bgadf cbagfd deafbg cfdeag ge begd beafc | bcfadeg edbgaf fcgaed ge -gabfc gabde fbdga bfegca agfbcd df cdfagbe dcfg caefbd dbf | decfagb bdf gfcd fd -bdafeg gf gbadf gefb cgefda daecbfg bacfed cdagb fdg fdaeb | daegcf eagdfb adgcb bagfed -dafegb efdac bda fgedbac egfcdb bgfa fbaed bgdef debagc ba | ba bgcead bad ab -cfged cbegdf cb ecgdb adefbcg fdcabg cdb cdagef efbc gedab | bc gdebcf gecdb bagdcf -fbegcd gcedba eba acegf dbfa efbgd ebfadg ab fgceadb bgfea | fgbae gbedcf degfb agdebc -ceadf fdacbe ef edgafb dfe bgaedc cadfg bcef cfebgad ecabd | cafde fabedc debac eacfd -cd dgafe cbgfae decfg cfebg cfd gdbc febgdc fbegacd fceadb | dc beagfc aebcfg gcfeabd -adcefbg caefgb bafd dface bdcfe cegbd fbe gdfcae dceabf fb | efb ebcgd gbdcaef fb -fbdg gebac degbfc gd dfeagbc decfb gcd dafgce faecbd bdgec | gfdcae gfdb dg afgdce -fb fgedca fbe gfcde gcbfde dbceaf bgeca eafbdcg dgfb fbegc | fbe cbdegf bfe gedfc -acfbe fcbaged bgdcf cabgfd ag cagd fcbga bcfegd gfa eadbfg | afgcb gbdecf efdbcg fag -fbegc dgca dfc fagbedc bfadcg dc ebdfca fadbg cgbfd gfdbae | dabefg egdbaf gaebdf dc -cdbgf bdfaeg ca fgcab dgacfbe feac facgbe ebgcad bca gfbea | dafbeg cab cdagbe debfga -gfbe ebcfag bcedaf be egfac fegdca gebca eab cbgad gfacdbe | dabcgef bcagfed gcfea bea -bdefacg fbgedc efdagb beg geabf eg dafbce dage gfabc eabdf | gead gcafb ecfdab egfbdac -gd gfecbd dacefb dgbf cdegf acfge agbfced becdf aedbgc gdc | gdcef cgbead gd gefacbd -cgbfea cafed dbgefac gacb bc afbge fdabge efbac bcfgde cbe | gbac fcdbge agcb aecgdfb -abgefc cfeba gcdba fgdcea gf fcbgaed eadfcb gbfe fga bacgf | efcba fabecd dgcbfae eagcfd -gcdbfe fdec gcfdb bdfeg de efgba cbgdafe afgcbd cgdbea ged | cedgbf fced agfcdeb cgfbed -dbacfge cafdb gbcfea aegc afbec ea bae bgcedf befgc edgafb | dfgeabc bfgcde faceb fbecag -bfcgad bfegd fg dcgeb egaf bfedcag efabdc dfegba gfb abefd | gf abdgcf dcbfag fgb -degab dgebac bfdeacg cadeb fbdeac bag debgf cgda abgecf ga | dceba fdbeg edbac dbacfge -abdef gcbead bgce cgdab deg dgcbfa aedbg fbacdge eadcfg ge | cgfdba gcafde agfcedb fdacbge -defabg cabdg gcfed cabe gbeacd fgadbc eb geb aedcfgb bdgce | eb dbegc dfecg dbecag -egdabcf edcgb bcedgf cgb bgfe fcgabd bg acgfed cbaed dfegc | cgb gbc egcfad degbc -fe agebdc gfbead fcdea abecgfd bafcde beacd cbef def cgfad | dabgfe fde adfcg bfgead -ba fcabed bad dgacf dfgecab dcgba gdecb bdgcfa abgf caegfd | gdecb dgcfba gcdafe afbedgc -bdgef cdbgfa acbed gedcfb efdgba cg abcgedf cgb cgdbe cfeg | edabc ebdca edbcg ecgf -edfba bcfgead cbged defbcg ag gfadce gcaebd edabg cabg dga | fedagc bcag bdegc gaebfdc -edab fed egcfb ecgbfad fegbd fagdcb degcaf afgebd gabdf ed | def gdefb fgedb edcagf -fc ebfgda ebcfd cabed gcadbf baecfdg cgfe fdc egdfb gdecbf | defbg aecbfdg cadbegf adgfbe -bgdfc fgc fdegb dgecfb fcabd egbafdc gc dgce gabefc gedbfa | fbdgce gc dbfegca cg -bgedc ged gdfcea dcefb cdabg bgfe defbgc bdecaf dcgbfae ge | badefc gbfe cbegd fdagbce -cdefga cgdafeb cbe becdg gdefc cfbg cfdbeg cb febdac edgba | edbgcf abecfd ebgfcd fgbc -de aegcf agedcb afegbdc edbf fbdga facgdb gdaef dbaegf dea | cdabgf ead afgbcd edbf -cfagde eagfbc cbegf cg fcaegdb ebgfd gcf dafebc efabc acbg | bacfe fgc gcf cg -gadfce fbcaeg bdag eba bedcgfa dcfbe ab ebdgca ceagd ecabd | eabdc badec cdaeg dagb -aedb ebcagf fdeac be bdgfc eafbdc abcfegd aefgcd feb ecdfb | fecbd adeb be bfe -dg fgdecb dfecb fdcgeba gedcb gceab fdge cgd cgdbfa baedcf | ecbgd cagfdeb dcbfeg gd -fgcead bfdcag gecdf dfeacb dce aged gcbfe dcfgeab ed fgcda | cfegd de gcafd gefdc -dbec eafbdg dafegc eac gbacf decagb bcgae bdgea gbcefad ce | becag edgab cbadgfe edbc -gefcab agbdc febd bcegd de ecbfg afgdce ebafgdc dfebgc egd | de gdecfba edbf cdegb -abdcefg fbdega dcfag bd fegba badgec fgadb edbf fgaceb bdg | acdfg fagbce adcfg abgfd -ag agdb bfeag fbgdace bcfeda dgafeb egafdc begfc dfeba eag | ecbfg agbd dabg bfeacd -dagc dae fdaec edcafg fbadeg cgefa abcgef ad dfecb fdgcbae | eda eagcbf agfec debfc -ead beafd dfagb faceb bfedca facegd aefcbg cbed ed gfcbaed | abgdf eda agbfce ead -afdgb eabcgf dfgbe fecdgba dagceb gfa cafgdb af cdfa abdcg | abdfg dceagb decfagb fagcedb -dbcfga cb acb gcbafde fcbg egbfda dceaf gbfda dcfba cdbgae | fcadgb cdefgba agbfd cgfb -gceb fcgba cefdba caebfdg egfadb eagfcb cb beafg acb gfacd | abcedf bca gfcda bcge -eabdc caebf ad dgabcef fcaedg cfegba deacbf dabf dca begdc | dbgce dbfa fgebadc acedb -fbgce ec gcea dafcgeb fgbed fec adgbcf abcfeg fcbga cfbade | cbdfag ebgfc fgcbe agbfdc -afcg afebcg becgf fgadeb bdgaefc fa afe acedb abecf gdfebc | fgecb eacdfgb ceabf cgfa -fb gadeb aegdfb abgfe fab dfgb adfecbg bcaegd ebdafc cafeg | becdfga bf fbadec bgfd -ab dgafe fdaeb adb agcedf ecbfd agfb caedgb bdfage egfabdc | fedbc dfecag afdcge becfd -bgedf dgecfb fae gbaec fa cedafg dcabfge gedfab gafbe fbda | fcgdea geadcfb efbdg fa -cgfaed fdebg fcgabd fcegb bd dfaeg gfbeda fgdceba edba dgb | db ebcgf fgcbe edgfa -fgc egcafb dcgb fagdb bedafgc cdbgaf fedac cg gacfd dfbage | febgad cgfaeb fadbg gc -fdaebcg deabgc bfdeg dfcaeg efcgd cdaf cfbeag fcg cf cgeda | bgefcad bgdfe dafc ebagfc -egcfad dbecf cbgf fbe aecbd bcfdge dfbgea aebgdcf ecfdg fb | cgfb gecfd gefacdb fbcg -cdb adcf gbcdae bdceaf dfaeb cdfeb febgc fgedba cd cgdafeb | eadfb fcgeb cbedga bdacge -gd dacg gbdafc gfbdc bdegaf fbgca cbgdefa cbafge edfcb dfg | gbcafd dgac dgcafb cbfgae -cbf dafeb fbceag bc egbdfc edbgafc fbced ecdfg cdgb gdafec | bcf dbfea ebagcf gadfcbe -dcebgf eagfc aebfcd edcbg baefgdc fd cdefg dgaebc fde bfgd | ebagfcd acgefdb fagec gbdaec -afgdc bagec bdfg fb ecgdbfa fab dfecga bcgadf dcafbe bgafc | afgced fb dcafg feabcd -gef febag ebagc egcfbd fg cafg abfde abcfge afcgebd ebcgda | egf gaebf dfeba gadbce -ag cdeafg gdbfce daceb acgf efgbda adg cegda gaedbfc efcgd | debac eadbc bgaecdf cgbaedf -acefdbg debgac ecdgf ead facebg eafgb ad fedbga bfda eafgd | adbf eagfd eabcfgd ecagfb -cd bafegc fgcaed fcaeg dgc fdcag agdbf fedc gbadce egdabcf | fedbcga bgafd fcde cfed -decg egf ecgbfa degfa edbagfc dgcabf cdfag eg fcaedg faebd | gcadef efadg egf eg -feacbg cgfadbe efb efbga dfagb eb aefgc bgec cgedaf dcebfa | eb be be fbe -begc eacfdb dfacg agcfe ce eagbf eac eafdgb aefbcg dfgaecb | ce ce ce gbce -dfeagb dgaeb dbagefc gbcfae degf decba cbgdfa bgfda eg gae | ge agfdcbe bdace fdeg -cgdab cegdbf cfbad bg aegb caedfg eacgbfd dgb dgaec gdbaec | gbea eacgd gb cgaebd -ag ecdgbaf edcba eagcd aeg gcfa dfcgae egcdf gfdeba fcgbde | fgeadb dacge fdagceb egafbd -fdbgec bge fdacbe bfdga edfgb cbgaed gefc cefdb ge baegdfc | ebfgd gbe begdf eg -cedafb gdab fgced cabdf fgbaecd dcbgf gb bgc gabfdc ebfgca | bcadgf cbfda cdgfab agdb -fdcbg bgface ecdabf ad fgcbaed gcefad dac efgac cfagd daeg | dcfabge edga ad gcfea -bce gaecdb aefc bedfgca acbfge aebgf fbceg defgba dgfcb ce | ceaf ce bfgce ce -gefadc gefadb agd ebfcdag dbeg dfagb abfed gafcb dg adbcef | fbgad bged gd cfebda -dcfge egdbf adcgf bafecgd ecd gdfeac bdecaf ec cfgdab cage | acge dacgf facdg cgea -bagdec gecdfba gdabe deb eabc be acdgfe afgdb deagc gdecfb | aebgd cgdea adbge eabc -gebca bedgaf ac gcbeaf bcagedf bafge egcfda bedgc cabf cea | ecbdg efcgab ebagc bgadfec -edacbg gcfad efdabg bc cgfdbae bdc cfedab efbc beadf fadbc | dbc fcbe fbedacg cabfd -adfgce acgfb bgfadc dgbca fc gfc fgacdbe fagbe bcdf ebagcd | cbagdfe gfc fgbac cgbaed -gdbfec bea acdb ba bcged edabgc gcfaebd afebcg gedba gdeaf | ba fgcebd efgda gadfecb -gd gcda bgd gafbcde bdcfag bcgdf cedfb bgefda eacfbg cfbga | fgcab fdgcba bgacf bfedga -fgcadeb abdgc gce bagec fcbea ge aebcgd gead cedfgb bagdfc | gbdace baefc fdcagb cdgab -fbca aedfcg eagcbd fadbec bdgef fec cf bgcfade dbcef cbade | fgedb bgefadc fc cf -dbgfa feca gfbced cf abfgce fcb cafbg eabgc acdbge edafcbg | abgdf dbcgef geabfc fcb -dbaf fag bdfgea ecbgfa dgbfe fa edacg agcfdbe cefdbg fdgea | fgbaed cdegbf dacfbge gdcfbe -abc acefbd gacedbf gbcde dgabf ca fgcedb cega dgbca cgeadb | ca bcged abgfd bca -ceabgd cgfeb ea aedf gcbdfa cadbf acdfeb abfec eac dgcefba | cgdbafe cea adfe aec -dbcfgae agebc ebgd cebdfa ebacdg deagc be fdecga gbacf bce | deagcb agecdf caefdg cegad -dcaeg gea gdaf befgac cefgd facbdeg dcgbfe ga dagfec adecb | gadf gaedc age cabedgf -bead dagfbe gda bagfec ad egfba ecgfad fdcgb ecfabdg dfgab | agefdc dga bgfea dafcgbe -abcgd gecbfda cegd badfge bcaed fcaeb ed adcgfb gcabed edb | acefb acbgde deb ed -cgefdab dgbcfe gbe beca be fdecga bgcafe bfgda abgfe fgace | bfgda eb gbe bdgaf -age cefbadg bcfea cdagbe begca ag gedfca cbfdeg ebcgd dbga | efbac ega fecab dgba -cgedf fc defbgc cdf fceb dgebf bafgdce eadbgf ecgad gcfadb | cf deabgfc efgdbc fgbcda -bdgeacf bagdef gb becg bcfage cafbg bga fdbac caefdg eafcg | bcedafg cbeg bg gb -dfceb gcdab ecbad gfbdea eab gcbeda bgcdeaf ea abfgdc cgea | baedc egca dgacbe cedfb -gdaeb dgfbc cefg fe cfbgaed gdfeb fadcbg defgcb abcdfe dfe | gdcfba eagdb fe cfeg -abfcedg afgcde acgfd ae bdecga efbcd dea fdgabc feacd gfae | afdcge gaef aefgcd geacfd -beadfg cfdgb fdb agfcbde db abcgfd ecdgf cbagf bafgce bdca | efgcd dcefg cdgfe bd -fagbe fedbcag afbgcd agdfbe age adgcbe ea fead egbcf abgdf | gae cbegf afgdb ea -badfcg fagdc gaf fedcgba dagb acefd dbgcf cgfdbe ag gbecfa | ag bagd bdfgca fbadgc -cfebg gc fcbea dcbafe gbc gcedafb cegdba cagf fbgde baecgf | cg agcf befgc bgc -fegb ecdaf ecb gacefdb eb gdacbf cdegba abgfc afceb acegfb | ebafgcd afdgceb ebc be -adgb cgbae bg abecdg gcefa ecbad dbgfec gbe cbfdega baecfd | badg badg dbag aegbc -ab bfa gbedcaf adbgfe bfecg acefb fgdcae bcad fceda ebafdc | gebdaf edcfag ab ba -ceadbg cd gfdeca ebgfd gdfec dce fegbca ecfag fadc gdeabfc | gfaec gface fdac ecadgf -fbagd egdafb bdg adcefg gbfac daegbcf eadgf bd bfde dgceab | dbfe bd agfde agdef -ebg bgdfe acebdg dcfage abfdge agefd dgbcf eb bdfegac afbe | cdfbg aefb dcagef edfga -bfcd efc bfdcge gbdec bagfe agdceb cf dacgbef bfgec eadgfc | cfe dcbf cgebdf dbecag -cda cefdbg fgeca fdgbeca acgdf bdcgf da deafcb fbgcad bdga | afgbcd cfega gbfcda gdebcf -dcaf cagfb gdacb bgdfca fgaecb ebdag cd fdgcbae dbc bcfegd | cfdegb dc abcgd cbfedag -gabedc dgfab ecdfbg adegf afbc dbagc bacedgf bf fdb fdcbag | cfedgb dgcfab gbfcead dcbga -bcagde efd bgfcd fdecb aefb fe dcfbae gacfebd caebd afecgd | ebcdf afeb ef befa -abfc gcdaef agecdfb cb gacedb cgb gcbdf bdgfac gedfb gcdaf | gfceda bc bdfgaec bdgef -geabc gcebad cgbeaf begdcf gfabe fe bfgda gfe afce ebcfagd | febgac fcea fbcged baecgd -aedfb gbfe acbgde fe fcedgba aef fcadge bacdf fegdab ebdga | fcgdeba afdeb ef fae -gbcfd adfgcb gba dgcbafe agbfde ag cfag fecdbg gbdac edcab | fgcbd bgcad agb bdefga -agfde efgcba gaefc bdcfeg cfe bafc bgcedaf egbac agcedb cf | gebacf ecgafb gfceab cefag -febdc begcd ecgbdf dbacfe bdfagc adgec gbd gb afbdceg gefb | dbg gacbfd egcdfb gfebcd -decfbg dagfb afcgbd gdcfb cbaedf caefgdb da gdca gafeb abd | adbgcef dgafb abd cfbgeda -begcfd bgeaf dcfaeb cadfeg gcdb cadbgfe cg ecfbd cfbge cgf | cg gfc gdcb gcf -ecagdf dfcebg fgbea bg cbeadgf egb ebcafg edfab gbca fegac | bafeg aebfd gcab fbecdag -dgacf abfecg fcgadeb cgd gdbace cgbfa egfda dbfc cdbfga dc | cfbd gabdce dbgcaf egfda -afedcgb afge bfead gf gdfbe fgabed dgcbe dfceab dgf fabgdc | feag cdabef bgdacf gfea -adebgc de bfgacde beafdg egabc egcabf deg cead cbdeg dcgfb | ed eabdgf eadc dbafge -fcdbgae gbacf ebgdfc bcadeg bdgea fagdbe gce aecgb acde ce | cge ecg cabeg efdcgba -aefgcb fedagcb cefbdg ef dcbeg bacdge fegd edbfc fabdc cef | ecbgfd gdef bacdeg bcdeg -geadc gecfad gfcadb eg agdcf bgafce gdef acdbe gea dabegcf | ecfbag gebcaf baecd dfeg -cdeba bd aegcd bfadec ecfab bafd agbfce bfdcge bdc cgebdfa | abcfe agdce db adecg -fbadg faedgc bgdac bcegd bcadge agc gdefcb cbae gdfbace ca | defgcb ceagbd bdgca afedcg -acgfd cbdage agcbd dfa edcfg fa dbcfeag fabc dbaefg gdbcfa | af gedabfc af ebgdfac -dafgbc dfegc dc cgfae cgeafd cdf cagefb ceda bfged fdegcba | aecd cade deac fbged -cbegda dgfeb gefcb aefbgc fdgceb agdfe dgb bd fdbc bdgfaec | dcgbeaf db gfbed efdag -aefbd cdbeagf gd fdgc fgcdab afbcg bdg egfabc bfgad aebgcd | gdfc gadcfeb cfgd fgacb -eb gcbaed aeb fgdecba begd eagdc cadfb eabdc cfgade gacfeb | egdca dcbea bdfcgea be diff --git a/2021/09/input.in b/2021/09/input.in deleted file mode 100644 index 2858d84..0000000 --- a/2021/09/input.in +++ /dev/null @@ -1,100 +0,0 @@ -9987653234589654549865432101235789979765459832101234567943986543101239874321012932397319985214896543 -9898541015678943239876973876545699868954398765212345678932399654592345965432129891985498764323789432 -9765432126789654123998765987897789759893219894333656789543498986989957898543498789976579895454678943 -9879656737899797434589986798998897646789398989454789898959987899876899987654989678899699976565789656 -8998767945678996545678997999569965435678987678967897947898765698765678998799878466798989988676898777 -7679898998799987676789398998439876323999876567898976736569894329954569789987964345987878999788999888 -5569959349898799787892139987321987549898765456789765623478989497542345699876543239876567898999998999 -4398943245999659898993045996210499698759876345678954212349876989321234589876455123954453567899987897 -6997832134678945959889159895432349999898763234567894303456965878943445678954321019843212456789976995 -9876543265789434345678999789943498899987654126898985424579854567894578789986532129654325677899854789 -9987654378894321256789987687894997789976543245789876539798768978965989897898763298767534798998765699 -9998867459943210167899976576789876678898674689894988798999899989876999976987654349879545899999876789 -8989978967894345234989895434598985568789788799933299987988989999987899895498765767989656987899987890 -7679989878965976349876789323987654345699899899321012976567678998998998789329876878998767896789899951 -6567895999876765498765678912396543236899956978932129854323567897899989698934998989679878945698789543 -4367896989989896989824567893459874345789543569549299765434579945799877567895789997543989432397678954 -6456789678998989873213678994598765456795432678998989879765678936998765456789896789732394321234589899 -7867894569987678965302759789679876567894321799997878998976789029876744348978945699901298636346698778 -8998923459876567973212345698789997678965433899876768987897899998765432124567934989893397545458975667 -9769212598765459895463456789894398789877549998765656346789998769876545635688949879799498656867894356 -9854324987654346789654577899943239899988698999854341247898987653987678986799198765678999987978965457 -9985459876532235678968688987652124989998796598763210123567897632598789987891019654569998798989976768 -9876598754321014567999799999873015678999987679874331234898998543469893498989198543456989659497899879 -4987999865432323456789899998754123789687798798765765345789239754567912989678976432345678943236910989 -3999998978543476567896978899875234896545679969896889656890198765678909876549876321234567894345899894 -9899987987654587678965356789986346789639889345987992987999349989999999995434965430999698995456789763 -8789995398765698789643235894398956998798999239899893998978969999898989984329876999878989976568997654 -7679876219876789896542129901239899889897778998765789879569998998787878965510999876567678987879998795 -6569997901989891987843458913498788778976667897654678965456987997676567894323987955476567898989989989 -5498789892399932398954567894987654567895456789642567894235695987543478999499876545313456789899876567 -6987678789999543459987678959876543679932378996543456965123984399864569998989985432101239898798765456 -9876546679898954567999789546987621767891567789654587893239973298765678987879876543212345995697654367 -9965434569767895978999893234598832348932345698765698954398764569976789656568987654323476789987743256 -8954323698956789899998942195679953567893478999876799965499865678989896543459999866455678999976551045 -6561012987545698788987893989998769878987567896987899896989987889298985432198754986566789678985432136 -7432123498699987667896789878899989989987679975699989689678998994367965321096563497678994567986544357 -6543434679987893459945698766789994597899789654599876575569899765459876432985432398989323456987655456 -7654545689876789967897987655679913456789898765989975433456789876767989949874321019998910127898767667 -8965656798765667898998986543489894768998999899879874321387899989898998899865432125987891238989898798 -9878969899874356789999997432356789899567899999867965434458989999999987678976743434976989349876999899 -4989878998543235678989854321247895912456789998759876545789678949899998789987854589865878998785679978 -3497989987654146789679765432346954323457991987643987856894589439789769893498767679764567987654598767 -2356799998763259895434996566459899496567890987732298997893499998698954902999898798943458976543987656 -1345998759998768999323987878698798989698999896521019498902578896587893219899999987654569998651098945 -2349887646789878998909998989789657478989298765432329399312456789476789399789999898765878979732129857 -3498765434899989987898999999896545365679109876543498989423969893345995987678989769876989569843598767 -4599894323987899876667899899987621234568914997656987878944878932239894598547568978989895479955679878 -5689989210196998765456789789876210145679323498979766567895989210198795987832456899998794398766789989 -6799878923965449887567895698765421234789459989898753456789994345989689976541368954989689239877899999 -7899769999874335998789989899876532365678998876789866567899985459878599987430267893976578999988998989 -8998958989910126999895678916998645466989897665789877689939876598766469898521256799865456789799987879 -9987847768921237899934689105679656567898786544598999994324987987654349765432345987674347889659876567 -9876426457892357998925693223998769779987654323987887889212998998743234978545469876544235678998765458 -8765212346895468987998789339899878989876543105986455678929899999832123987676569998432123789989896345 -9893101287896778956789895498799989294987654219875334599998798987654016898987978987654234599868987456 -7654242398969889545678976987689990123499864329883223678998657998762145679398989398766345678956897678 -8765357899954995434569989876578921934987986598761019999999736799763234789239799219875458789345999789 -9876459987899894323678998875467899895976797987652128789989945689654756894345678998986567891239899899 -9987699896798789434789897654323456789985698976543234567968896798765897895656799997897678910198776999 -8998988765667678945896789876212345699996789987654345678959789989878998976767899976798989321987665678 -7999876554354588996945679877103456789869899898765458789345678969989329987878999865659796499895434789 -6789987432143456789439998765213467899953998769896569994234569658991012998989998764546679987654323890 -5679896541012345799598789874327878969892987654987678996545678967989129879099876543234567899795434891 -4598765432123569898987678985456789459789898743498789989756789879878998765146998732125698901989545789 -3759986543234678987656589876769898698657789992109899978997894998767899943237984321016989992978956897 -2349898757655989898743456989899999998745678989234998868789923499656798895349875432234678989867897896 -3498769898767995679754687894999899899987789878976987654689934987543236789767976543345689876546789965 -5957656999898994889898798943499789789998898769897998743476899876432125698978989954496898765435789954 -9843545989919989998989899954987679678969987658789876532545899976521034567899999795987999876323567893 -8732135678909878967879999899995564599357897645679987621236798765432145678978988689999899943213679954 -7643014789998765456568998788994323788969919876798768730345679896543267989569876578998798654323789875 -8654123898999654345457897656789515677896323987898654321656789987655358993459875467987698765434892996 -8766234567898743212345789534994323456965434598989765442767895698767467892398764345696549876545993989 -9874345678999832101234679423989434699799565989679877653458954349878878921987653234986539987656789878 -9965657899298743212345894212878945987678976976547989765669765689989989439876543123497698998767899764 -9876798921019654323456982104567899866567899867435699878878998799997699545998653234598987899889998943 -3989899892198767434569877323456998753467997654526789989989219989876578976789854447679996867995387891 -1298956789299878565678965434567897542346789643214567999894329878964347897899965557798765456894216789 -0987645898989989678789876545878965321578998759323456999765498767894256798949876678987654345892105899 -2698766987678997989898987856989954320789869898937599878978987856943145789432988989998743236789324678 -3499989898598965397997698967898765434899754997999987567899876645894235699921299096999984345679434567 -9988998765467893236789579989999887545678975986878976458998765434689346789890932125789965456796545678 -8976899754359992125679456799999999698789876795467891367999986323478956896799843234699878767899696899 -7895789973298989014568967898989439899994987984356910179898797212667897975689754348789989878998789999 -6434890989987878923699878987678921999893499878268899298789598601457898954579765678895699989349899678 -5423921298756867895789999896569890198789989862156788965678987542356789343467999789934989993210998569 -8737893989943458976799998765476789987679876545034567894589999753478993212979878992129878994921987678 -9656794979899569987999899654345679876543987632123478943499898764589432109898769994939769789892998989 -8767999868767989799898698765476789999432499843234569654986789878997643498789356989898654698789899194 -9879898657657895698795439876987899987654678954545678999875688989019759569653239876789543987698789012 -6998775432348894239679921997898978998767989876789789789654567899998967898764699865678952986567678929 -5987654321256789197598799998929867899898999987899897698973456789787978979978989976789769878454567898 -4598763210368898986487678999213456789949989998921954567892567998656899754989978987899879764323678986 -3459875391239897697396568789428589890129878999530123678943688974545799843499867898963989875214567895 -2345965485446797543212345678937678932398767985432654789764569763234899754998756789642199932108678914 -1459879876568999852101267899548789654987659876543465999875678954356999879877645678921019853219989103 -2345989987879998763254345678959898767899536987754576789986789765456895998763234599934329764324598912 -3589996598989899854395456789967999878998745699865679896597897987587894309854123578896449895434567893 -4678965409599798765986577899878986999899656789986789965498986987698963219767012456789567976545998954 -5789654312345679876897689910989754346798787891099899876899765698999654397654323767897689987656899865 diff --git a/2021/10/input.in b/2021/10/input.in deleted file mode 100644 index 6b75869..0000000 --- a/2021/10/input.in +++ /dev/null @@ -1,90 +0,0 @@ -({[[{{({<<<<(<{}()><()[]>)[([]{}){<>[]}]><[{<>()}{<><>}]<(()[])([]<>)>>>){<([(())<()<>>][{{}{}}[(){ -({{<{<<(([({<[[]()]<()<>>>{(()())(<>())}}[{[(){}]}(<{}[]>[<>])])<[[[{}()](<>{})]]<<{{}()}[<>]>[({})[{}()]]>> -<[<{{<<{[{{([(())<{}{}>][{<><>}(<><>)])}}]((<(<{[]<>}>(<()()>[[]()]))>))}([(<<({[]()})>(({[][]}([]{})){(()() -({<{{{{<<{([{[<>()][<>()]}[((){})([]())]])[[<[()()]<()<>>>[{<>()}{(){}}]][[{<>{}}[{}[]]][([]())[{}() -[((<[[{<[<{[<[<>[]]<(){}>><(()[])(()())>]((<<>{}>[<><>]){[()<>]{{}<>}})}>]<<[<[<()()>](({}{})( -[{{([([[<([[<[()()][()<>]>][<<{}{}>[<>{}]>(((){}){[][]})]][<[<()()><{}()>](<<><>><[]{}>)><<<<>()><{}<>>>(([]( -<{[{(<{<[[{{{[[]{}]<{}<>>>{{{}()}<[]<>>}}([(()[])]{[{}<>][<>()]})}((<(<>{})<<>[]>>[[{}[]][{}{}]]) -[<[<(<{[<([({(<>())[{}()]}[[<><>]])]){<{(((){})[{}<>])<<<>[]>(()[])>}(<([]{})<<>[]>><[{}<>][{}()]>)><<({( -(([{[<[{{[<[{{{}{}}<[]{}>}[[{}{}]{(){}}]][(<{}()>([][])){<<><>>({}[])}]>[(<(<>{})<<>{}>><{(){}}[ -<<[{[{[(<(<({{[]{}}[<>]])[{{[]{}}{[]()}}(<<>{}>[<>{}])]>{{(<{}[]>[{}[]])<{[]{}}<[]<>>>}{<{{}[]}([]( -({<<<[[({(<{{<{}()><()<>>}[{[]{}}<[]<>>]}>[<({<>{}}[[]<>])(<(){}>{[]<>})>[[(()()}(<>[])][(<><>)<{} -[(<[{[[(<{({<[[]<>]><<()[]>[{}()]>}([{<>}<[]<>>]({{}()}<{}{}>])){({(()[])([][])}<<{}{}>({}{}) -{(<<<(([[((<(<()<>>{(){}}){{{}[]}{{}()}}><(({}){<>()})<((){})({}())>>))][[{[<[<>[]]{(){}}>]( -{[<((<[[[<<[[<{}<>>{[]()}]<[{}<>][[]{}]>]{<<{}>[()[]]>{[<><>][<>]}}>{{{{{}()}}[{[]<>}<<><>>]}}>]< -([(<[[<({{[([{[]()}{<>()}]{[()<>]<<>{}>})({{()()]([]<>)})]{<((<>())[[][]])[[()<>][<>[]]]>}}}{{[[(<<><>> -<({{({<([[({<{[][]}[{}[]]>}([(<>[])((){})]([[]<>]([]{}))))}({{<<[][]>[()()]>[<()[]>{<>{}}]}[{[{}{}] -<<<[<<(<(<{{[[()()]{[][]>]<<[]()><[]<>>>}[{(<>()){<><>}}[<()<>>[[]<>]]]}>{(<(<<>>[<><>])([ -[[{({[<{(([<<[<>()](<><>)>{({}<>)(()[])}>{(({}<>){{}<>})}]([<[()[]]>><[(<>[])[<>()]]>)))[{{(({ -[<[<[{{[{{(([{()[]}{<><>}]<[{}()]({}{})>)([{()<>}{[][]}]({<><>}([]<>))))<<{<{}{}]}<(<>())([] -([(<{<{([<[((<()<>>{[][]}))([<<><>><[]{}>]({()[]}(<>())))]([<[[]<>](())><[(){}]{()[]}>]{[[[] -[{[{({{[[(([[<{}()]{{}{}}]]){([([][])([]<>)]<[()<>](<>())>){[<(){}>[<>()]]{[{}<>][{}<>]}}})(<[<{()()}([]<>) -(({<[<[<{({[(<[]<>>{(){}})[<[][]>([]{})]]{<<<>{}>(()<>)>[[()[]]}}})}{<<<((()<>)[{}{}]){<<>{}>[<>()]}><< -<[{[<[([[{{<{(<><>)[{}[]]}<<<>{}><{}()>>>}}{<<(({}[])([]{})}{(<>{}){[]<>}}>((([]<>)<{}()>){{{}<>}})><<<< -[<[([[{({(<<<(<>())>(([]())[<>{}])><<<[]()>[()<>]><(<>){<>{}>>>><({[[]{}]<{}[]>}([<>{}][{}<> -{(<[<<(<[({(({[]()}<[]{}>)({[]<>}{<><>})){<(()[]){[][]}>([()]<<>()>)}}{{((<>())[()]){[{}<>]<<> -(<{{<(({{{<[[([]()>]<{<>()}[{}{}]>]>[([[()<>](<>())][{<>{}}<[][]>])<[<()[]>]({()[]}[[]()])>]}}}))>[[< -((({{<[{[((<(<[][]>([]())){[()<>][{}{}]}>){<{{<><>}<<><>>}<([]<>)>>{([{}()][()[]])}})<[<{{<>}[[][]]}[[()[]] -([<((<(<{<{{[<[]<>>{(){}}](<{}[]>(()[]))}}>}>)<{([{<<{()()}{()[]}>[{{}()}({}[])]><[[{}[]](<>())]{[()( -<<[<<(({({((([[][]]<[]{}>)<({}<>){()()}>)[<[{}<>][[]()]>{<[]()><<>>}])})}{(([[[<[][]><[]{}>](<{}[]>{ -<<[(<<(((<([[{()()}<(){}>]({()<>}[()<>])][{((){})(<><>)}{<<>[]>({}{})}]){(<{()[]}[<>()]>)<({<><>}){[ -{(<[{([<(<[(({<>()})<[{}<>]{()<>}>)(([<>()]{[][]}))]{[<{[]{}}>[(()<>)])(<({}{})><[{}<>]{<><>}>) -{((<{[<{{[[{(<<>[]>{{}[]})}{[({}<>)[<>[]]]}]]<[[[[()]{{}<>)]{({}()){[][]}}]<[{<><>}<[][]>]((<> -{(<({[<<<(<<{[{}{}]}([[]()]({}[]))>(({<>()}<[]>)<{{}()}{{}{}}>}>)(<{{[()[]]{()}}(<<>()>{[]<>})}>)>[([[<{< -(<<[<<[(([[{({()}[<>[]])}][<(<[][]>{(){}})>(<<{}{}>{{}[]}>[({}<>)<<>[]>])]]))]((({[{{<[]{}>{{}()}}[([][])({}< -(({{<({<{{(<<{<>{}}{()[]}><[(){}][()[]]>><[<<>[]>{{}}](<()[]>{[]{}})>)}<{<([()<>]{<>{}})[([ -(<<[<{<{{<(({({}())([]{})}<({}())>)[[({}{})[<>()]]]>{{<{{}{}}<{}()>>(({}{})[{}{}])}}>({({<< -[[{([{<<<{<({[()[]][{}()]})>[{[({}{})[()()]](<<>()><<>[]>)}<(<<><>><[]{}>)<(<><>)<[]()>>>]}>>>}])}({(<<[[ -(<{(<<({[[{({{{}{}}[<>()>}[[<><>]])}]<{(<{()<>}{[]()}>[([][])[{}[]]])<[[<>][(){}]]{<[][]>([]{})}>}[((<<><> -<(({[(<<[<[[{{()()}(<>())}(<[][]><<><>>)]][[(<[]>[<>[]])([[]{}]{<>()})]{{[[]{}](<>[])}({()()}([]()))}]>]({({ -<<([<(((<{{[(<<>()>(()[])){{[]<>}<[]{}>}]<{[<>()][(){}]}>}<<[<{}<>>]>{([<><>]{<><>}){{{}[] -(([{[[[<{[{[[[()()]<()>]<[{}{}][(){}]>]}]}{[<{{[()<>][()[]]}}[{{()()}}[[<>[]][{}()]]])<<({<>()}<{}()>)>({([ -{[(<{{({[{{[{([]>({}<>)}<<{}[]>>][[{(){}}[<><>]]{<(){}>({}())}]}}[{([({}()){()[]}]{({})<[]<>>})[[[[]<>]]([<> -(([{[({{<([[([[]{}]<()[]>)(<<>>[<>[]])]{[{()()}<{}{}>](<{}()>([]{})>}])<[<{{<>{}}}<[<>[]]>>{[{[] -{({<<({<<<<{(([]()))(<<>()>)}({<()<>>{{}{}}})>[{[(<>)]{<[][]>[{}()]}}]>({[[[{}[]]({}[])]]})>>{{ -[(<[<((<[(([((<><>)([]{})){([][])[()()]}]<{{{}{}}{(){}}}>)<{{({}{})<()>}({()()}[[]{}])}<[[<>()]{()<>}>({<>} -<{{[(({{<((<({[]{}}(()()))[[{}{}]{{}<>}]>[([<>[]>(()<>))]))[[([{<><>}<<>[]>][[()<>]([][])]){<((){}){{}[ -((<[({<<({{[<[(){}](<><>)>[{[][]}[{}[]]]]}<([(<><>){[]{}}])([[()()]<()[]>])>}(([[[[]()]{{}{}}]{[{}<>]{() -(({{[<<<[[{<<[<><>]<{}<>>>[<<>()>(<>{})]>}<{(<()()><{}()>)<([]())[<>{}]>}>]]<<{([(<>{})[<>()]]{{[]()}{()( -<[{{{<<<[{[{<[()[]]({}[])>}[{({}{}){<>[]}}{<<>[]>[{}[]]}]]<[<({}{})>(([]())<{}{}>)]{([{}[]]([]<>) -{<<<[[(([{{[[(()<>)<()()>]][[{{}[]}[()()]]]}<<{[{}()]<{}[]>}[{()[]}<[]<>>]>>}]))][{(<[(<[<<><>>(()())]<({}{ -(<<<{{(<{[[[[(()())<<>[]>]<[[][]]>]((<{}<>><[][]>)[([]())[()()]])]([(<{}>(()[]))<([]()){[]{}}>]))}>)}({ -({<(({{{<{{[{<()<>>[<>[]]}([[]()][()()])]{([()<>]({}())){{{}()>{[]<>}}}}}>}<[{[<[<{}()>[{}{}]]<<()()><()( -<[{<<<([{<[{{<[][]><[]{}>}{[{}]{{}}}}<<{()[]}([]{})>([{}[])(()()))>][<[{[][]}{(){}}]{[()[] -{<[{{[<([[[[<{()[]}[<>()]>{<<>[]>{{}()}}]<({[]{}}{()<>}){{()[]}(<>{})}>]({[<()[]]([]{})][<<>()>(<><>)]}<< -({{[(([<[<[[{(()[])}{(()[])[()()]}]{[(<><>){<>{}}]<<[]<>><<><>>>}]>]<[(([<<>[]>]))]<((<{{}{}}{(){}}> -({[[(({[[<(<({<>{}})[([]<>)([]{})]>[<([][])<{}{}>>(<()()>)]){<[[<>()]{[]{}}]({{}{}}([]()))>}>]]}<{<{ -[[{([<({[[[<<<[]{}>({}())>([{}<>][<><>])>{<(()<>)<<><>>>{[<>{}]{[]{}}}}]{{((()[]))[({}[])<[]{}>]}[({<>{} -([[(([<[<([(<(<>()){{}{}>><<<>[]>[{}<>]>)<(<[]()>[()[]])>])>(<{([{[][]}<<>()>]<[<>[]]>)(<<{ -([{({<<<<[[({[[]<>]({}<>)}[({}[])(<>{})])][<{((){}){[]()}}<[{}[]]<[]{}>>>(<<()[]><{}<>>]{[<><>][{}<>]} -<<<<{{({<{{[([<>()][[][]]){{[]{}}<{}()>}][(<[]{}>[{}<>]>[{<>[]}((){})]]}}(<<<{[]{}}{{}}><([]{})({}<>)>>({(( -[[<<{<{<(<{({{{}[]}}((<>)(<>[]))){{{[]()}<()()>}[{<>()}<[]{}>]}}{[{({}{})<{}[]>}({<>[]}{[]<>})]{([{} -{{{[{[([[{{[{<{}>({}<>)}[([][]){<><>}]]([{{}[]}])}[<[[[]()]]{[[]{}]}>{<{<>()}>}]}]{[{[[[<>{}]{[]}](( -(<[[<<<({[[{{[<>[]]<(){}>}}<({<><>}{<>{}}){((){})([]<>)}>](<[[{}[]][[]]][{{}<>}[{}{}}]>((([][])[()()]){<() -{([((<{{{[[<<{()()}<[])>[{<>()}<()()>]>]((<[{}<>]<{}()>>{{{}<>}(()())}){{<()[]>(<><>)}{[[]()](<>())}})]} -{{<<<<({[<{<([{}<>]([][]))<<{}[]>([]{})>><[{<>()}{[]()}](<(){}><[]()>)>}<[<<[][]>({}())>(<[] -{[<[[((<({<<[<{}<>><{}()>]><<<{}<>>{<>}>{{{}[]){()<>}}>>([[{[][]}(()[])](({}[]){{}{}})])}<<({(<> -[[[<([[([<[{[{()[]}{{}[]}][(()()){[]{}}]}{{{<><>}{[][]}}{<{}<>]({}())}}]>[[<[{()<>}<{}{}>]<{[]()}({}<>)>>{<< -({[{<[[[([[((({}<>)((){})){({}{}){{}()}})[[(()())<{}[]>]]>[[[<{}()>]<[[]]<()[]>>][<(()<>){[]()} -[[<[{[<<<<{{({[]<>}({}[]))[<<><>>([]{})]}[<{<><>}<[]{}>><([]())[()<>]>]}<([{<><>}<()()>]<[(){}]({})> -[{(<<{{((({[<{<>[]}>](<[[]]({}[])>(<{}{}>{()()}))}<([({}<>)<{}()>]({[][]}({}())))>)<{{((<><> -{{((<(<[[<<(<([]()){()<>}><[()()]{[]{}}>)[[({}{})({}{})]<<{}{}><[][]>>]>[(<(())[<>[]]>)<<[<>() -[{([({<<{<<[{<[]>({}{})}((<>[])<<><>>)][<([])><{[]<>}<[]{}>>]><{({<>()}<<>[]>)}>>(([[({}{})[()[]]] -<{([({{{{(([{<[]()>(<>())}{{{}{}}{{}()}}]<{<{}()>[()<>]}({()[]}{<><>})>)<((<<>()>{<>{}}))({([]<>)[{}{}]}<([] -<{<[(<<({<(([(<><>)([]())]){{<<>()>}(<{}{}>{<>[]})})[{[{()<>}[<>[]]]([()()]{{}})}{([<>()]<[]()>)<[<>[]]{{}() -<{<{[[({<[[([[{}<>][{}<>]][(<>[]){()[]}])<([()[]])[<()<>>[{}()]]>}{[{[{}[]]<[]<>>}[(<>[])<()()>]]([< -[<{(<{<(([{[<<()()><()[]>>{({}{})<[][]>}]<(<(){}>)>}[<<<[]()>>[({}<>)([]())>><<((){}){<><> -[[[(((<({[([[<<>()>]{(<><>)<[]<>>}]([<[]()>{()()}]{[{}()]{<>}}))[[([<><>](<>[]))({<>()})]]](<(([[] -<{({(([{<[(<{{[]()}}>({[{}{}]{[]{}}}[{()}(<>{})>))]<(([[()][[][]]])<<<{}<>><(){}>>>)({<(<>{})>(([]())({}<>)) -<([([[[<([(<(([]<>)){[[]()][()]}>{[{<>()}([]{})]{([]<>)({}[])>})]<[<({(){}}(()<>)){{{}()}<[]{}>}><[[<>{}] -([(<[({<<(<{{(()<>)<(){}>}{<{}{}>}}>[<<(<>())<{}[]>><[<>()][<><>]>><<([]{}){[]()}>>])<[<{<[]()>[[]{}]}{([])<( -(<<{[<[(<(<<[<(){}>[[]{}]][({}())<[]{}>]>>{[<(<>())<{}()>>][<{{}<>}<[][]>><[<>()](()())>]}]>{({[<<[]() -[([<<<([<<[{{<()()><{}()>}{<[]{}>}}]{[{[[]()]}]({<(){}>(()[])})}>(<{{<<>{}>{()()}}<(()[])[[]()]>}(<<(){}>{ -<(<([((<((({(((){})]{{{}}<{}>}}<<(()())({}())>((<>[])([]()))>)){{[<((){})<<><>>>]}})><<[<[({[]{}}(<><>)){(< -<{[<[[({<[<<{(<>[])[()[]]}{<<>>(()[])}><[{(){}}[<>()]][{[][]}(()<>)]>>{<<(<>[])[[]()]>{{<>()}<{} -<<({[({{[([{[<[]><<>[]>]}<{{{}[]][()<>]}{{()[]}[{}<>]}>])]}<<{([{(<>[]){{}<>}}]([[<>()][()<>]]))({(<{ -(<{{{[[([<[{{{[]<>}[()<>]}<<<>()>>}[((()[]){()[]})]]>{{([([][])])<([<><>]{()<>})(<<>{}><<>{}>)>}{<<<[] -[[([<([[<[<{({()<>}{[]{}}){[{}[]][<>[]]}}>]>]{{({(([{}[]]({}{})){[<>{}]{{}<>}})<((<>()))[{[]{}}]>}(((( -({[<<[[[{{{[<<[]>([]<>)>(([]<>)<[]{}>)][<<{}[]>({}{})>]}([[<{}{}>[()[]]]((()<>)[<>[]])]{([()<>]{[][]}){{<>< -{<[{({[<({({[{{}[]}[[]{}]]({{}{}}([]()))}[(<()<>>{[]{}}){<[]{}>[()]}])}<({<{[]()}({}[])>[(()){<>()}]} -[([{{(([[{<[{(()())[{}[]]}<<<>><{}[]>>]{[{[]()}[[]<>]](<{}{}>[()()})}>}[([(<{}<>><{}<>>)(<<>{}>([]{}))]({([]{ diff --git a/2021/11/input.in b/2021/11/input.in deleted file mode 100644 index b6997c3..0000000 --- a/2021/11/input.in +++ /dev/null @@ -1,10 +0,0 @@ -2682551651 -3223134263 -5848471412 -7438334862 -8731321573 -6415233574 -5564726843 -6683456445 -8582346112 -4617588236 diff --git a/2021/12/input.in b/2021/12/input.in deleted file mode 100644 index 98d5a8e..0000000 --- a/2021/12/input.in +++ /dev/null @@ -1,25 +0,0 @@ -DA-xn -KD-ut -gx-ll -dj-PW -xn-dj -ll-ut -xn-gx -dg-ak -DA-start -ut-gx -YM-ll -dj-DA -ll-xn -dj-YM -start-PW -dj-start -PW-gx -YM-gx -xn-ak -PW-ak -xn-PW -YM-end -end-ll -ak-end -ak-DA diff --git a/2021/13/input.in b/2021/13/input.in deleted file mode 100644 index b56a02e..0000000 --- a/2021/13/input.in +++ /dev/null @@ -1,929 +0,0 @@ -1236,308 -296,291 -26,378 -391,705 -1272,434 -1221,595 -653,476 -1274,52 -97,54 -1295,690 -716,396 -522,739 -783,485 -1227,171 -159,463 -152,241 -611,892 -373,459 -912,10 -601,614 -1091,148 -391,637 -326,649 -561,436 -309,413 -1268,610 -237,411 -348,668 -745,259 -1255,350 -484,287 -402,306 -234,110 -430,60 -566,854 -830,689 -353,637 -156,516 -1200,254 -237,259 -574,438 -565,859 -1064,579 -248,350 -1076,802 -773,683 -1141,578 -1057,371 -1250,892 -764,619 -1160,345 -883,254 -1242,401 -1129,287 -1186,136 -1190,162 -932,52 -961,175 -157,540 -229,502 -1014,298 -326,425 -1298,57 -745,812 -987,207 -296,674 -94,834 -338,548 -856,842 -1250,722 -534,150 -1139,444 -78,96 -604,52 -485,764 -875,604 -1096,78 -1063,507 -1136,379 -452,588 -348,317 -1082,219 -1088,733 -619,306 -745,859 -1195,351 -912,894 -120,162 -1034,52 -1119,283 -694,534 -246,803 -316,570 -214,856 -150,113 -714,77 -744,40 -1110,842 -594,396 -912,690 -810,159 -440,822 -321,54 -432,861 -1190,380 -132,58 -323,207 -1123,595 -340,340 -1288,49 -127,485 -110,254 -1279,518 -657,448 -701,723 -109,619 -1155,114 -576,126 -170,327 -1010,250 -624,627 -1087,665 -1058,26 -888,549 -1258,701 -724,661 -865,204 -442,117 -703,95 -197,256 -750,711 -954,855 -1302,607 -1113,227 -150,666 -537,409 -524,605 -1136,827 -338,346 -1096,596 -574,787 -545,278 -1131,159 -1002,432 -353,298 -1134,228 -1091,66 -716,172 -1191,836 -1091,336 -642,101 -1072,292 -1047,189 -132,715 -853,3 -35,812 -898,666 -1250,577 -202,728 -16,175 -853,891 -117,623 -119,388 -537,623 -673,562 -952,855 -266,172 -966,495 -393,764 -812,791 -272,602 -545,275 -673,145 -745,595 -1009,639 -176,890 -1001,413 -852,345 -320,471 -422,661 -547,77 -1290,577 -246,315 -164,95 -219,596 -1042,77 -1258,641 -537,211 -534,723 -1289,735 -490,52 -104,189 -1295,103 -1091,784 -1186,318 -288,491 -136,121 -590,283 -1123,483 -676,317 -110,192 -653,782 -156,513 -574,14 -6,471 -1062,350 -1217,458 -1235,539 -293,567 -1283,59 -686,155 -202,754 -827,733 -323,655 -1072,723 -305,425 -768,368 -1277,32 -52,701 -1086,813 -875,290 -1052,493 -12,389 -811,285 -358,338 -273,843 -169,316 -113,49 -413,551 -706,233 -637,775 -176,4 -430,50 -880,50 -201,590 -1096,410 -619,540 -1274,842 -472,375 -780,318 -929,51 -422,549 -38,460 -818,315 -775,254 -227,618 -977,802 -1211,640 -530,12 -919,705 -209,836 -855,540 -929,359 -1096,298 -425,189 -878,861 -985,670 -750,101 -1156,735 -1275,812 -830,343 -94,263 -1193,354 -729,147 -296,596 -537,683 -191,283 -989,502 -228,891 -586,849 -952,338 -1108,883 -1280,556 -1210,462 -775,640 -416,238 -17,593 -1119,723 -1226,218 -907,763 -1099,679 -780,128 -308,407 -381,107 -1134,890 -708,192 -1310,350 -982,320 -1297,684 -580,28 -576,574 -274,416 -535,506 -682,826 -691,540 -1044,717 -773,409 -719,282 -517,830 -766,702 -932,842 -344,838 -825,130 -1134,605 -82,1 -480,689 -522,491 -214,618 -929,56 -902,91 -917,278 -818,799 -1257,723 -483,385 -937,843 -758,172 -80,803 -146,507 -176,325 -467,287 -852,793 -1195,543 -246,539 -80,8 -780,459 -686,892 -1298,289 -185,175 -400,882 -247,507 -976,607 -206,408 -669,460 -171,444 -1084,189 -1113,172 -537,872 -972,548 -252,26 -1290,541 -301,333 -276,374 -348,765 -1101,46 -1201,171 -370,527 -908,868 -910,12 -1014,556 -1252,817 -525,274 -1082,667 -1277,215 -528,276 -219,593 -329,446 -21,649 -656,544 -1175,499 -222,733 -353,703 -586,45 -586,717 -1093,171 -852,605 -535,388 -565,35 -1017,567 -1064,315 -242,255 -773,719 -196,112 -1198,374 -460,291 -579,539 -23,707 -118,52 -994,353 -673,640 -510,823 -1026,367 -621,414 -1233,707 -460,332 -638,728 -381,278 -574,456 -616,534 -985,446 -984,68 -565,812 -840,129 -196,101 -995,800 -701,171 -1086,492 -338,93 -320,404 -524,289 -273,555 -12,241 -1203,784 -1114,782 -580,866 -33,455 -498,381 -320,490 -1165,108 -112,618 -875,817 -929,339 -564,263 -541,49 -214,148 -1046,369 -816,768 -1097,14 -1,866 -30,892 -301,639 -1093,392 -306,765 -1037,51 -864,842 -305,175 -52,80 -1139,161 -765,54 -22,49 -181,607 -281,718 -724,401 -704,446 -1125,271 -13,145 -224,728 -749,234 -10,570 -1272,82 -328,425 -478,737 -1125,175 -115,7 -490,767 -1134,569 -689,563 -944,491 -1159,16 -1288,497 -686,267 -775,836 -25,596 -1073,635 -689,396 -999,56 -1118,179 -12,57 -115,543 -1275,588 -1280,2 -47,95 -530,459 -820,127 -1258,640 -956,644 -224,492 -1134,442 -1042,817 -709,168 -1125,63 -1272,883 -909,147 -720,283 -202,588 -170,119 -296,855 -35,588 -1277,563 -107,817 -909,523 -93,10 -976,791 -1274,500 -454,842 -505,434 -724,717 -535,640 -994,93 -400,12 -194,114 -432,33 -373,51 -883,724 -176,228 -884,675 -768,72 -349,229 -271,46 -884,168 -425,502 -12,605 -1252,77 -662,551 -1036,192 -1141,764 -594,562 -805,434 -110,631 -393,278 -982,126 -893,259 -171,733 -1233,259 -537,37 -957,74 -119,836 -408,803 -430,620 -776,171 -132,603 -544,702 -1304,471 -750,681 -820,763 -937,754 -164,842 -803,588 -977,502 -1098,565 -248,544 -562,110 -328,387 -252,588 -1226,676 -1275,540 -724,493 -793,606 -1183,228 -1297,145 -894,866 -1206,637 -537,354 -117,872 -254,12 -673,705 -1250,844 -642,228 -1076,784 -639,782 -1272,31 -996,549 -1029,802 -734,280 -604,681 -406,320 -1034,842 -1017,327 -785,256 -1195,343 -572,1 -1047,364 -1299,128 -743,19 -305,873 -867,663 -555,254 -1171,635 -997,749 -1280,450 -691,843 -309,705 -1174,773 -1101,847 -400,487 -202,870 -529,528 -668,57 -353,820 -214,298 -927,360 -1110,724 -0,203 -745,299 -1292,407 -1158,653 -457,891 -962,317 -546,51 -1298,228 -426,3 -435,66 -478,829 -381,499 -214,822 -300,250 -219,828 -82,768 -485,130 -209,204 -1134,793 -763,393 -1092,661 -545,54 -624,338 -624,556 -156,791 -850,506 -326,835 -1277,414 -2,14 -187,483 -214,746 -1257,168 -864,394 -1193,495 -825,764 -152,653 -469,271 -146,418 -763,77 -858,360 -1113,443 -1228,673 -276,38 -273,275 -637,145 -313,749 -308,487 -197,119 -296,603 -137,64 -63,282 -1263,760 -714,817 -484,42 -422,345 -137,736 -127,676 -1064,803 -880,85 -972,324 -776,408 -720,611 -435,784 -1190,648 -1110,170 -1160,666 -0,691 -984,516 -1221,35 -462,267 -124,318 -431,217 -720,163 -484,159 -736,787 -1310,691 -1037,555 -42,610 -155,733 -1310,842 -1218,784 -1014,220 -440,78 -135,499 -1155,733 -100,462 -1114,549 -536,500 -328,506 -1193,200 -957,298 -200,170 -764,51 -607,95 -537,175 -579,355 -83,723 -371,30 -773,211 -1193,683 -100,432 -219,53 -273,56 -283,30 -264,525 -580,199 -976,9 -567,19 -1250,317 -753,54 -150,381 -957,257 -219,148 -1293,189 -200,724 -438,799 -930,192 -1037,840 -869,880 -994,772 -1265,170 -82,344 -478,65 -328,350 -33,480 -806,333 -349,5 -883,52 -417,35 -251,131 -373,802 -704,222 -1283,835 -880,620 -244,712 -557,54 -1158,515 -1129,254 -58,77 -191,723 -805,460 -885,502 -33,32 -987,655 -669,434 -1298,101 -1161,434 -957,596 -80,886 -156,378 -1140,42 -430,834 -310,495 -1083,618 -136,773 -185,623 -560,681 -917,166 -263,82 -109,616 -89,595 -1086,81 -545,59 -929,395 -654,282 -637,254 -601,107 -522,263 -972,346 -989,54 -1158,689 -33,414 -552,315 -1005,425 -1014,596 -366,491 -1009,561 -1022,491 -258,849 -865,652 -641,658 -949,327 -55,350 -1154,791 -1027,30 -1220,631 -1292,487 -38,11 -1001,271 -435,817 -542,72 -691,218 -353,561 -966,56 -229,189 -402,866 -1102,500 -832,228 -1308,14 -305,623 -738,1 -214,484 -118,842 -224,50 -560,162 -716,780 -580,308 -1101,200 -229,392 -27,835 -570,415 -301,298 -281,802 -1221,588 -706,681 -338,570 -430,477 -783,857 -21,735 -249,828 -609,619 -15,690 -21,383 -197,227 -1250,765 -90,631 -937,170 -1114,112 -536,394 -599,544 -897,551 -793,64 -570,218 -1108,870 -422,213 -1173,606 -775,388 -185,271 -324,574 -552,579 -1192,394 -117,271 -768,36 -252,28 -0,842 -1110,52 -381,838 -1293,705 -373,473 -1289,159 -1198,618 -654,724 -1136,515 -30,450 -755,640 -45,312 -455,794 -619,843 -977,652 -1258,39 -176,569 -691,306 -152,827 -291,218 -473,80 -152,379 -90,263 -109,278 -435,290 -1113,256 -868,117 -176,793 -734,574 -120,380 -52,640 -730,308 -1186,103 -197,891 -427,254 -686,556 -1295,593 -1014,674 -266,450 -1014,338 -940,395 -932,394 -127,228 -937,473 -1309,28 -460,780 -1288,845 -504,289 -1222,656 -345,189 -293,327 -668,228 -1309,418 -746,711 -820,767 -1064,539 -601,168 -104,705 -127,857 -1129,786 -857,590 -607,799 -1054,204 -929,726 -1116,603 -782,276 -989,840 -1141,316 -214,276 -929,278 -855,794 -470,129 -1156,607 -1027,864 -252,238 -1193,623 -1072,171 -540,117 -202,166 -641,460 -17,327 -1,28 -1111,442 -499,733 -581,147 -1195,7 -47,134 -1221,147 -1088,861 -745,306 -18,487 - -fold along x=655 -fold along y=447 -fold along x=327 -fold along y=223 -fold along x=163 -fold along y=111 -fold along x=81 -fold along y=55 -fold along x=40 -fold along y=27 -fold along y=13 -fold along y=6 diff --git a/2021/14/input.in b/2021/14/input.in deleted file mode 100644 index 9131169..0000000 --- a/2021/14/input.in +++ /dev/null @@ -1,102 +0,0 @@ -OKSBBKHFBPVNOBKHBPCO - -CB -> P -VH -> S -CF -> P -OV -> B -CH -> N -PB -> F -KF -> O -BC -> K -FB -> F -SN -> F -FV -> B -PN -> K -SF -> V -FN -> F -SS -> K -VP -> F -VB -> B -OS -> N -HP -> O -NF -> S -SK -> H -OO -> S -PF -> C -CC -> P -BP -> F -OB -> C -CS -> N -BV -> F -VV -> B -HO -> F -KN -> P -VC -> K -KK -> N -BO -> V -NH -> O -HC -> S -SB -> F -NN -> V -OF -> V -FK -> S -OP -> S -NS -> C -HV -> O -PC -> C -FO -> H -OH -> F -BF -> S -SO -> O -HB -> P -NK -> H -NV -> C -NB -> B -FF -> B -BH -> C -SV -> B -BK -> K -NO -> C -VN -> P -FC -> B -PH -> V -HH -> C -VO -> O -SP -> P -VK -> N -CP -> H -SC -> C -KV -> H -CO -> C -OK -> V -ON -> C -KS -> S -NP -> O -CK -> C -BS -> F -VS -> B -KH -> O -KC -> C -KB -> N -OC -> F -PP -> S -HK -> H -BN -> S -KO -> K -NC -> B -PK -> K -CV -> H -PO -> O -BB -> C -HS -> F -SH -> K -CN -> S -HN -> S -KP -> O -FP -> H -HF -> F -PS -> B -FH -> K -PV -> O -FS -> N -VF -> V diff --git a/2021/15/input.in b/2021/15/input.in deleted file mode 100644 index 623713d..0000000 --- a/2021/15/input.in +++ /dev/null @@ -1,100 +0,0 @@ -1762397661132951281872118191829951912248172478339632549455181981251788927258534119468168714528621114 -8319319112748383315492426133271137584941117782129986515332716159745294224193293175158161499293222148 -8266728412139799931643116912557929947663988821211944399124893291926199243572783776173611922147331181 -9768991115438161618229664911612111659721489122113919117417168282889149141331521139589972137335416965 -3171539222181482245864217884221793163933341199835974591512912153611719383822886874252812189119211692 -9813861882122513794416142966122147931711931986114712961595314549632318377591159215157316813144934355 -7249291646824518193378853916825167931368827832213362177131511326161252924118148113122117239516894281 -7619265123128119111958978123298112151893112118796447627993349181166826971622479558261738365928333993 -2172119611123667198988912581135762996771929293568381611622194474422232946596921716259957372123899698 -4352214875122283151191299159125268139125394182223812438129936119129887731491391363987958285611735124 -9392311228738188112389181962964441553298875142992639762857989199385199119362214956984889116161512973 -2892785495413127483914947156452441111911711971248471862338463181961152891293748296521551886171944432 -9771371132754482976691473392179769191511659123186661481992184193199162717851182183975513821945725321 -9218767829493884196118831313927579911256192463613676192213864258491926157791112198274214181147959154 -2792193899714181173347298221195589991167789114137161959778141371252115777986241795181919174317949829 -7619548189922581181859166518531891927419411953133381591936168586775311272448519147149659321171116141 -3711326392171499975162459323581728293983795119922197923141493849921729498132819921129641917259118864 -9662821131571632544219456989289467698811981163262144283931368698226797383923219731421621671825257671 -8926251431913827251411827421261859513843589241938313879248752781892119516839862167961428927931111162 -9696892328613843521773991428165191277894129912138571399131152313611391251983614926952746144321251911 -9335234624983873138234757195373269431811641469169819336189911147917583295479638741437112278149159862 -2111192894139376481161215281139285422974424132138831311924793514959279281114124319742841958641419391 -7621315589183391171215115441519488669384175731591179229641387112121194738813559138294251112341297538 -8831271268391495711587992124119994691138611111165198323212973519468749437821131791997859117239181924 -4811735832189511994318149332378111193361165795554681993992221559549144569162156939979819678945272974 -1524179911227897316229296744618768288496498312432216265311939361711974311645192215436812821129213365 -9411237933162299161925557884812745439884925962585979813832329174935225424534918864159991415748622183 -1969119121165124863159769267319535155153661143981392621984891612819937929929952945517261771543768827 -8117376273619779538922341789922174281183223161181712439119861966423951811953421121216521561271992999 -5911336591183894763911894167932995172998223111199119111393119784189332442198132136931181614895719112 -9144417911989291113272235811667566164454718852785519276832453415115489939413487813914189189111722296 -3172782697359615397137825146724135259786191794785523156861711576611169978989562291681822797597411471 -3691317861982226551781149914227481161871796979945154831871894629422677185511681333724141515124763312 -6152916321893165355934593689222281456739634897387348419961128898831955884712128911284192198313767992 -2123565322186129768844952156135549396186911811173898116782215672225918152219221191893512531731418343 -9148448789413415121188812348651634491941741358988162111713948362231472972523456143118935167366114159 -7215951236798967714143299289482837632184226282821596493275119221115719283519213866698847919639581299 -1211423833873117249111527243314291155181115773173149818592743169151611135262551161178646584474226217 -3141441922169621422636811311228221519329196814132217999729948137477929641724452113233326511319525111 -6353774379142258441594111831969139261677193112616941375776199819687827849195111119561812988217263123 -5155468118892524167244234498923983312939713497637191178858211851911621151598115952188939151571911411 -3264971191887918252178185125131132812346323233298941194625423463868531137179151242921171128214116421 -2192146511349122811114487199149628158792934427223174998915226911885299861741222982117327896189138141 -3817555391414595191215996912159952814172651289927691484296328451126227654144279475752877198439541351 -3272311727962111147114985241973956466428912929211888379341615218161714914831994199497611398384573714 -3276111123319119118182112283823812169388217113736878913512112173157558173223311372394341828193146797 -9581993771117231862931291845155311586313219171988916823938586755181161698523359212217997922756426139 -1918622894641131169621888219818617193839128714861122522312135898994175928269569112793476895471213998 -2271546578513428929848359713361369484681371894466191911128727429149832611914911886812791255753623169 -2686121559311382749993357595341117532442113911695512432717391181456663681541622198894564758175943318 -1337167193589499119223489928689264347326914997916799169553341539117192116458582999194574691292429739 -2987468387842898434761167929526166691242921787821721976164921525555727921546368194597227292929935193 -9856191999892314431796119592565346416369117282381924278686522198989115828829229499191199899942269826 -4159119835291241279424919921752929162954245885262298833199324979522119268319649232728271944228715139 -5247461775789923151611677854751726991193131793119286262144188718119121417814487573868915314322549329 -7661813574189395262215217212114966839939986162219999286758293567396393524675861592534961528693615891 -2965317131929913122722181933419595373832972818598892124999196577426993846517981678984881831197982191 -1972199933158221981388146184292133116193126181146474235137663523168143244565531372633122489398489914 -7423919964326886514368971251639349937192526679938781331813691661562111363176487262313547792297131577 -2917722861145329977821111173291529851591981941395919845218123923234989734132462271549997693877195215 -9221435231914979351891461911284473643411525579889886721158974241328216297819784913121119921737224263 -3566219395561214162477611543497922131799998149212573699224587793287919966791587986252836637192119133 -3812171216111466869119115211112153642718392182973562614919722152728182773759846982213314428821264758 -8991197268386247539851968187713485151115713151193351148119651589416293595167932129989241479124143627 -9211499872118751526793162988158249348518412163571792637591529327473131996812716991116188843973119581 -8614137211759975531382622998957411166491897152241192418281984823628591952239215482182387842813361871 -8251589811136243659161191211583731979325411956771731128239861413269235561218411879942978841232992111 -3111499818132173935199311225353892127596636149897991831955933243981952575199928241632548277891793291 -4431785818236512111396943889611445371331396615433746415529736682113689425795525643888133986439531335 -9995925821921378382129271715156919237821269326578692118275314885169372111849848564112395779671157318 -1987539366619221915184994848732376216442112332812932859164799863358117281128445782941219181486597613 -9734932112213977129169618132588418748257997619225111991282361982189931392696335623148599438162964993 -1268542894811891811752185845917126686731111729151141185841237681314145379626272561327153116697253893 -7961582572112147851139341243998815131115871353869821241569111211311173743737429841517967133645346968 -8131131195643613581916973416327251713377286522581727261974749238538719916249467375251549742638713962 -7977612542191913784424123691995545989898244266289211136997219895141819231944297116814818111569149281 -8761673393124368197342592244518993981872433593118269136396188269295546121117191592992417627132133951 -1651978712438629147262911948236819593481188191673533419875699391719179399418159484312979829643125878 -2848189151727256129221118261999751718212112458891842251928813719141689361121238411237423697529991811 -8528124345999713421922279887245218255633572311333279811971192723411129973962191825312936729635111535 -3126599598725196396213972376977781128199369299181973179226838421144294851141754733382394814127389931 -8323175518498898731893963895816749112329321499182744141129978131811161949947793693914585912629991286 -9231819122963995515633969921861191116511778131324189152432598462571732129799113218113199629285919395 -6356352514912132331995294112175921815291563324826718912431311119817931161152817991628441799761119371 -2968217271711154911627567222991829619422231818535238861182483981925818211613351748667121283417219121 -2986392289931997914122281314222947267925911961565211934849281836413651936112923131496213298332143158 -6587271799388817315278422618122269129966213812991115388711725198517419351365461989269599121323694713 -1116591631891928799281817941339947924114147515129989638958495287291947819549271893749651112813219981 -1143157968584776191444994384614838194823133446488624243151928321519127891988989917891777379611798118 -8399291892169518714793192128111192235991541914834914922688165329289884129349482229926121144924115514 -5668119329997863259888245715692793776372918952839318591392981291144699832866692374222595323233168486 -1216172119823141749353314274825582984999984484435979229912935228419361471926794973175917614844595886 -7499725626525512271213984958599416332619526213119268641699133726257851179181134147793412718614975614 -4288111112156922267983399793396113699811611291414346541972227217218118113671472672112213192111581181 -9411112131817256595664146121293142298999399429821453921188512943862327573213912219625131825813291399 -5429441953242814421419835169719152828451133936519178139114667488425944842768762393235891219691624813 -7199274849564917958467522334719119915121692718981981522289815567155928198869311911982725834726235516 -4851719158713681489832158231939414111984561313913178292865317239795299169256621724995929214446597981 -2895141151816231324862721919961491572329591628247151846125129115212222764271248124311117311343989181 -8573312112116444197131192178856685531315797232771662865695122611599151931945191918296911647973257553 diff --git a/2021/16/input.in b/2021/16/input.in deleted file mode 100644 index 59fd24b..0000000 --- a/2021/16/input.in +++ /dev/null @@ -1 +0,0 @@ -620D79802F60098803B10E20C3C1007A2EC4C84136F0600BCB8AD0066E200CC7D89D0C4401F87104E094FEA82B0726613C6B692400E14A305802D112239802125FB69FF0015095B9D4ADCEE5B6782005301762200628012E006B80162007B01060A0051801E200528014002A118016802003801E2006100460400C1A001AB3DED1A00063D0E25771189394253A6B2671908020394359B6799529E69600A6A6EB5C2D4C4D764F7F8263805531AA5FE8D3AE33BEC6AB148968D7BFEF2FBD204CA3980250A3C01591EF94E5FF6A2698027A0094599AA471F299EA4FBC9E47277149C35C88E4E3B30043B315B675B6B9FBCCEC0017991D690A5A412E011CA8BC08979FD665298B6445402F97089792D48CF589E00A56FFFDA3EF12CBD24FA200C9002190AE3AC293007A0A41784A600C42485F0E6089805D0CE517E3C493DC900180213D1C5F1988D6802D346F33C840A0804CB9FE1CE006E6000844528570A40010E86B09A32200107321A20164F66BAB5244929AD0FCBC65AF3B4893C9D7C46401A64BA4E00437232D6774D6DEA51CE4DA88041DF0042467DCD28B133BE73C733D8CD703EE005CADF7D15200F32C0129EC4E7EB4605D28A52F2C762BEA010C8B94239AAF3C5523CB271802F3CB12EAC0002FC6B8F2600ACBD15780337939531EAD32B5272A63D5A657880353B005A73744F97D3F4AE277A7DA8803C4989DDBA802459D82BCF7E5CC5ED6242013427A167FC00D500010F8F119A1A8803F0C62DC7D200CAA7E1BC40C7401794C766BB3C58A00845691ADEF875894400C0CFA7CD86CF8F98027600ACA12495BF6FFEF20691ADE96692013E27A3DE197802E00085C6E8F30600010882B18A25880352D6D5712AE97E194E4F71D279803000084C688A71F440188FB0FA2A8803D0AE31C1D200DE25F3AAC7F1BA35802B3BE6D9DF369802F1CB401393F2249F918800829A1B40088A54F25330B134950E0 diff --git a/2021/17/input.in b/2021/17/input.in deleted file mode 100644 index 1dbc999..0000000 --- a/2021/17/input.in +++ /dev/null @@ -1 +0,0 @@ -target area: x=96..125, y=-144..-98 diff --git a/2021/18/input.in b/2021/18/input.in deleted file mode 100644 index 2638d04..0000000 --- a/2021/18/input.in +++ /dev/null @@ -1,100 +0,0 @@ -[[[[3,9],[0,5]],[4,6]],3] -[[[8,[3,0]],[[8,4],[9,4]]],[[[0,9],4],[[3,8],2]]] -[3,[3,[[2,8],[1,4]]]] -[8,[[3,6],[[8,9],[4,1]]]] -[[3,[[5,8],[3,3]]],[[[9,3],[6,3]],[[7,0],[8,8]]]] -[[6,[[5,8],7]],[8,[[1,6],7]]] -[[[[8,6],[9,3]],[3,[2,7]]],[[[6,7],[2,8]],[6,7]]] -[[[9,[1,6]],0],[[7,3],[2,4]]] -[[[[4,9],3],6],[[7,5],8]] -[[[[8,3],8],[2,[6,5]]],[[6,[1,9]],[0,2]]] -[[[9,9],[[9,8],1]],[[[7,4],[1,4]],[[1,1],4]]] -[[5,[[8,2],[8,6]]],[9,[7,[8,9]]]] -[[4,6],[8,[3,[1,2]]]] -[[[2,[7,9]],7],[[2,0],[9,2]]] -[[4,9],[[[3,4],[2,9]],5]] -[[[[0,0],[3,7]],[[6,1],8]],[[[4,0],4],8]] -[[4,[[8,9],[2,2]]],[[[1,8],[2,7]],[[6,8],0]]] -[[7,5],[[7,0],1]] -[[[5,[1,0]],1],[[[7,7],[2,2]],[[4,2],8]]] -[[[7,1],[7,3]],[2,0]] -[[[[6,2],3],[3,[5,2]]],[[7,2],[[9,5],[0,1]]]] -[[[[0,3],2],6],9] -[[[9,8],[[7,8],[5,9]]],[[[4,8],[0,2]],[[6,8],[2,3]]]] -[2,[[3,7],9]] -[[[9,9],1],[7,[7,[5,8]]]] -[[8,[1,1]],[8,8]] -[[[[3,3],[1,4]],[[5,3],4]],[5,2]] -[[[[0,9],1],[[3,8],8]],[9,[[8,8],[0,7]]]] -[[[9,4],1],[[9,7],[[6,1],[9,5]]]] -[[[1,[4,0]],9],[[3,7],2]] -[[[5,[0,5]],[5,[9,2]]],[[[2,2],[8,0]],[3,[7,8]]]] -[[[[8,2],3],3],[[[5,4],[0,5]],9]] -[[[3,[6,2]],0],[[[7,3],[6,3]],[[6,3],2]]] -[[6,1],[[[1,2],2],[9,4]]] -[[[1,[9,0]],[[8,2],[4,9]]],[[0,[9,6]],[[0,4],[4,0]]]] -[9,[4,[7,0]]] -[[7,2],[[9,5],8]] -[[6,[[0,6],0]],[[[2,0],[4,1]],[[9,5],4]]] -[[[6,[0,0]],5],[[[5,2],[7,3]],[[2,8],[3,2]]]] -[[[2,7],[[8,2],2]],[[5,[0,6]],[[9,8],[0,4]]]] -[[[8,9],[[4,1],2]],[[[3,4],[4,5]],[[7,4],0]]] -[[5,[2,[2,1]]],[[5,6],[[6,2],[3,0]]]] -[[8,[0,0]],[[6,1],[9,[1,3]]]] -[[[9,[5,8]],5],[[8,[6,6]],[7,5]]] -[3,2] -[[8,[[6,3],[8,4]]],[[2,7],[8,[9,5]]]] -[[[4,[9,1]],[[3,6],[8,8]]],[[[9,0],6],[[3,7],6]]] -[[9,[[4,9],6]],[[8,2],[1,3]]] -[[[2,[4,3]],[[5,6],[7,3]]],7] -[[[[0,1],7],[[9,1],9]],[[[0,1],[6,5]],1]] -[[[7,[5,3]],[[6,6],6]],[[2,7],3]] -[[1,[[5,8],[1,7]]],[[[5,0],[4,7]],[[3,3],[3,7]]]] -[[[[8,8],[2,6]],[1,2]],[[[2,6],4],[1,[1,8]]]] -[5,[[8,[8,2]],0]] -[[6,[[5,9],[8,4]]],[7,[5,9]]] -[[7,3],[[[2,5],4],[[1,1],8]]] -[[[0,1],7],[0,8]] -[[7,[6,6]],[2,9]] -[[[[1,9],1],[[4,8],5]],[[0,[8,3]],[[0,9],[1,5]]]] -[[[0,9],[[6,7],5]],[4,[[1,1],[0,6]]]] -[[[6,1],7],[[[1,4],8],[[9,0],4]]] -[5,[3,[[0,7],[4,9]]]] -[[[[6,0],[1,5]],[[1,5],1]],[[1,[7,1]],[[6,2],7]]] -[[[9,0],8],[[[4,1],[5,4]],[4,[5,1]]]] -[3,[5,9]] -[6,[6,5]] -[[1,[8,0]],[9,0]] -[[[[1,8],3],0],[7,[[0,8],6]]] -[[[[4,2],2],3],[[2,5],[[9,2],4]]] -[[1,[[1,1],[8,4]]],[[[8,1],0],[0,2]]] -[[[[0,7],[8,7]],[9,6]],0] -[[3,7],[[1,[0,9]],[1,[7,6]]]] -[[[[3,5],[4,6]],[[7,1],[8,0]]],6] -[[7,[5,[7,7]]],[4,[5,3]]] -[1,[[[0,0],[4,6]],[7,[1,9]]]] -[[[3,7],[7,[0,6]]],[7,[5,3]]] -[[[[5,3],0],2],[[[2,7],[7,9]],[[1,4],3]]] -[[[[8,3],9],[[8,3],[7,4]]],[[4,[6,0]],[7,[3,7]]]] -[[[6,[5,0]],8],[[[4,5],3],[1,[5,9]]]] -[[7,8],[[6,8],[[8,4],[3,1]]]] -[[[2,7],[6,3]],[[0,0],4]] -[[1,[[6,5],[4,8]]],[[8,[2,7]],[[7,8],[6,8]]]] -[[[2,3],[7,7]],[0,[3,3]]] -[5,[[2,8],[2,[6,9]]]] -[[[[6,3],2],[[2,8],9]],[[[5,6],[8,0]],[[9,3],[5,0]]]] -[[[[6,2],7],[6,1]],[[[5,9],4],4]] -[[[[7,2],[0,4]],[[6,7],7]],[6,[[8,5],[9,0]]]] -[[[[9,6],8],[2,[3,7]]],6] -[[0,[[1,0],4]],[5,[[7,4],[2,4]]]] -[[[[4,4],[4,7]],[[7,4],3]],5] -[[[[8,2],[0,3]],[[7,2],1]],[[7,[1,2]],6]] -[[[3,8],[3,1]],[7,7]] -[[[6,5],[[8,7],4]],3] -[[7,[2,[2,5]]],[9,1]] -[9,2] -[[4,[2,9]],[[4,[2,9]],0]] -[[[0,2],[[2,1],[9,2]]],[[6,[8,2]],[4,[3,8]]]] -[1,[[[2,2],6],[[3,5],6]]] -[[[9,[4,8]],[1,4]],[4,[1,[9,1]]]] -[[[8,0],[[8,4],3]],9] diff --git a/2021/19/input.in b/2021/19/input.in deleted file mode 100644 index b2a1974..0000000 --- a/2021/19/input.in +++ /dev/null @@ -1,777 +0,0 @@ ---- scanner 0 --- -806,301,-633 --501,-417,319 -699,-593,593 -599,-948,-962 -666,506,480 -657,-639,635 --363,523,-711 --689,-409,-863 -523,-841,-961 --466,-444,389 --551,-478,293 -682,294,-783 -637,-604,531 -628,429,346 --557,720,459 -698,394,-619 --727,-433,-850 --299,531,-672 --405,725,448 --418,610,-699 -544,505,321 -12,-5,-66 -534,-850,-930 --659,-479,-863 --481,563,432 - ---- scanner 1 --- --567,723,271 -396,736,775 --333,391,-925 -879,-437,-483 -435,619,-826 -391,674,792 --362,-472,-516 -818,-588,563 --675,800,276 -841,-447,-497 --392,-344,-501 --699,-555,431 -558,488,-853 -97,11,24 -883,-354,-438 --369,353,-837 --400,-372,-455 -777,-696,687 -537,540,-764 -390,680,786 --305,394,-763 -745,-688,659 --52,18,-125 --754,-476,397 --652,-554,484 --503,789,349 - ---- scanner 2 --- -715,-612,-331 -545,344,802 --544,-764,-423 -605,551,-225 --484,815,-437 --501,-701,621 --547,683,-535 -646,-699,-245 -461,319,726 -615,-621,837 -592,631,-352 -674,-712,-435 -12,16,66 --488,446,506 --595,701,-474 --446,-713,708 --514,-703,-390 -583,478,725 -723,-635,930 --382,-674,700 --522,-922,-413 --564,430,668 --640,457,511 --74,-142,125 -599,-785,937 -468,608,-260 - ---- scanner 3 --- -711,-748,-788 --428,630,-632 -590,-772,-913 -605,-418,728 --514,718,-615 --815,-855,649 --541,714,303 -441,331,-954 -109,-112,-17 -846,546,409 --13,1,-175 --481,598,-593 --416,646,368 -860,485,221 --793,-799,727 -592,-779,-647 --648,-558,-530 -414,368,-881 --391,664,243 -645,-341,704 --680,-765,-573 -403,509,-949 --840,-850,672 -466,-343,676 -934,609,281 --674,-569,-489 - ---- scanner 4 --- -428,-524,476 -466,-579,-849 --769,-857,-356 -406,-703,-775 -553,-542,501 -812,511,472 --447,-558,513 --430,-470,599 -705,539,591 --755,469,-592 --696,-820,-329 -865,811,-327 -79,-43,-21 -594,-642,-761 --712,564,-682 -978,793,-405 --693,607,426 --764,-679,-318 -950,755,-407 --740,539,490 -488,-474,626 --408,-590,566 -844,420,607 --770,435,-728 --668,460,484 - ---- scanner 5 --- --770,670,763 -812,733,-782 --382,460,-566 -864,-289,801 -380,-691,-662 --709,738,832 -553,686,617 --386,599,-494 -528,604,507 --495,-654,-628 --352,-408,571 --478,-568,-716 --393,-434,560 -126,151,86 -804,591,-833 -809,-242,852 --748,662,687 -786,-267,857 -413,640,643 -56,-22,-18 --456,-601,-596 --404,652,-635 --436,-402,767 -773,636,-858 -505,-666,-644 -440,-541,-712 - ---- scanner 6 --- -415,738,-730 --509,-231,-485 --566,-398,-446 -895,-614,-866 --673,871,-512 --478,-737,417 -329,617,-773 --435,-703,499 -425,-435,792 -835,-555,-763 -381,-366,613 --2,82,-131 -488,849,633 --547,-310,-637 --436,812,529 --304,875,431 -814,-461,-928 --662,719,-517 -639,762,677 --689,795,-674 -495,666,-823 -421,-468,663 --477,-650,423 -538,758,741 --418,764,468 - ---- scanner 7 --- -816,594,927 -764,-673,507 --700,-812,470 --509,776,-400 --775,-530,-277 --651,-775,612 -474,893,-700 -535,-581,-321 --739,-564,-332 --602,-628,-266 --698,-780,644 -137,144,40 -826,-635,367 --779,893,786 -947,459,955 -562,-418,-377 --572,882,-393 --617,891,703 -462,890,-494 --608,806,812 -898,456,894 --638,796,-428 -856,-752,466 -510,-495,-311 -413,960,-544 -26,4,-20 - ---- scanner 8 --- --2,-27,-81 -279,771,385 --722,552,475 --883,-705,621 -418,-693,422 -673,-491,-462 -527,810,-417 -339,-785,381 --572,-771,-592 --730,327,449 -311,769,559 --538,-703,-736 --860,-496,609 --649,732,-830 --652,793,-712 -510,-464,-406 -561,846,-362 --869,-653,584 -596,-439,-396 -463,673,-351 -456,-755,282 --596,761,-615 -316,722,527 --785,447,522 --561,-867,-645 - ---- scanner 9 --- -534,387,316 -609,-822,763 --598,-439,-626 -478,-699,790 --779,659,516 --722,660,680 --837,742,607 --457,-416,434 -726,-861,-838 --425,588,-715 -41,-108,-42 --447,-378,420 --488,580,-642 -670,-867,-849 -791,664,-548 -796,474,-521 -664,-866,-855 --364,-374,375 --359,597,-749 --698,-512,-722 -564,438,294 -779,574,-496 -530,-720,701 -536,308,410 --706,-480,-750 --74,50,-5 - ---- scanner 10 --- --406,581,-714 -722,-721,317 -802,778,364 --564,849,465 --667,-365,-438 -880,877,-395 --703,-353,-411 -663,-772,352 --459,913,488 -365,-811,-472 --585,-455,-439 --46,127,15 -640,835,-400 -733,886,-350 --476,497,-778 -71,-69,-135 -722,-803,507 -421,-731,-387 --376,-800,384 --365,-867,526 --494,-863,468 -383,-733,-359 -741,836,476 -782,684,432 --479,605,-874 --582,767,515 - ---- scanner 11 --- -402,-784,-886 -783,741,-556 --533,-704,643 -839,727,-764 --821,-388,-547 --465,784,451 -792,715,595 -664,690,666 -316,-559,712 --683,-423,-526 --440,637,393 -431,-649,-791 --363,809,-761 --378,775,-625 -740,735,-794 --75,-30,-32 --745,-486,-533 --525,-622,485 --421,680,-715 -406,-540,884 --491,-643,554 --393,705,457 -452,-813,-891 -65,119,-66 -456,-575,672 -567,766,593 - ---- scanner 12 --- -784,-492,511 --295,-330,781 -884,816,628 --346,698,653 -448,382,-760 --344,-362,747 -933,886,678 --350,-348,824 -872,819,834 -490,-826,-332 -399,385,-821 -811,-655,455 -582,-747,-373 -530,520,-793 --308,-480,-589 --547,403,-234 -520,-709,-233 --587,379,-311 --379,-467,-617 -85,84,166 -836,-569,445 --332,886,592 -69,-48,4 --258,826,716 --330,-440,-596 --726,431,-236 - ---- scanner 13 --- -411,707,-621 --565,830,590 --692,445,-432 --739,-815,-383 -772,-378,-261 -801,-428,-256 -10,48,94 --787,402,-522 -376,845,-600 -474,769,-614 -353,804,492 --747,-716,-353 --584,754,611 --423,-607,800 --508,703,701 -578,-458,360 --753,-759,-591 --821,387,-386 -323,770,583 --649,-602,747 --125,151,-15 -288,802,574 -618,-419,428 --585,-660,787 -637,-407,-356 -496,-530,367 - ---- scanner 14 --- -608,-336,293 -752,444,-774 --502,766,474 --625,793,605 --902,528,-904 -641,-374,-719 --800,421,-990 -714,-534,-743 --890,385,-949 -436,-409,304 --89,60,-6 -644,-470,-827 --641,-686,-497 --457,-846,413 --714,-625,-568 -717,476,-765 --79,-90,-191 -238,703,699 -266,865,702 -687,442,-856 --463,-835,357 -302,777,740 --724,-581,-518 -500,-331,370 --458,-852,419 --604,704,553 - ---- scanner 15 --- -787,-650,573 --404,-560,-455 -336,-785,-518 -797,-689,790 --582,-698,615 --67,-11,29 -785,770,-779 --804,818,-693 --792,863,-836 -520,834,444 -364,-788,-356 -642,895,555 --673,-793,518 -850,688,-777 -775,-644,672 --608,-826,595 --711,854,745 --527,-691,-428 -400,-826,-444 -560,902,483 --861,886,833 --506,-639,-517 -815,679,-745 -78,64,-58 --702,904,-800 --740,856,837 - ---- scanner 16 --- -768,605,-805 --608,844,666 -347,571,569 -848,559,-637 --611,783,784 --475,498,-568 -563,-497,-533 --538,603,-521 -798,-408,758 -810,-356,747 -545,610,547 --699,-816,599 -678,-525,-466 --722,-652,690 -502,545,513 -667,-496,-603 --664,812,569 --688,-720,546 -787,478,-779 -73,9,-106 --400,-445,-655 --79,60,53 --530,378,-495 --391,-602,-630 --377,-654,-667 -742,-408,707 - ---- scanner 17 --- --860,464,581 -404,733,736 -399,-669,688 --865,422,341 -869,842,-527 -747,844,-651 --882,-419,796 -564,-247,-439 -756,692,-561 --513,-525,-716 -69,2,35 -350,-664,708 -601,-364,-349 --896,-492,758 -480,712,717 --493,-654,-688 --84,119,78 --407,-588,-723 --765,-350,735 -531,622,793 --396,458,-416 --329,397,-572 --399,446,-622 --910,413,488 -389,-725,818 -661,-310,-316 - ---- scanner 18 --- --544,-725,396 -699,-488,503 --607,-772,501 -264,447,-773 -310,575,521 --572,460,285 --7,-109,20 --460,-663,-704 --469,-638,-547 -290,458,-950 -598,-690,-598 --599,-798,276 -437,572,427 --393,543,-957 -718,-514,376 --187,20,-25 -779,-656,457 --446,-626,-756 -326,596,469 -363,558,-826 --736,444,385 --722,336,292 -609,-827,-627 -494,-760,-599 --425,608,-859 --394,619,-850 - ---- scanner 19 --- --792,-483,-620 -341,393,-874 --563,907,-919 --868,-534,-710 --931,785,778 -700,-776,776 --913,898,700 -547,396,-886 --195,30,-19 --811,-407,-599 -497,326,-935 --589,-835,513 -486,-759,-640 -559,-844,787 --40,53,-150 -522,514,344 -459,386,256 -452,-872,-490 --656,857,-868 --875,870,698 --555,-850,377 -576,-750,-488 --416,862,-910 -737,-849,749 -583,326,330 --684,-792,423 - ---- scanner 20 --- --407,576,646 -486,697,-523 -544,808,502 --929,-530,-560 -542,-407,-580 --821,-480,-469 --656,426,-554 -585,-321,-701 -405,-675,559 -635,-487,-652 -620,783,586 --661,-416,528 -543,649,624 --442,519,509 --534,496,633 --865,-631,-556 --741,-344,531 -329,670,-599 --183,57,-25 -359,-719,448 --717,444,-506 -320,-770,452 --30,-75,-63 --813,-345,599 -324,681,-447 --619,312,-443 - ---- scanner 21 --- -429,874,443 -614,-831,729 -349,789,387 -807,850,-681 --654,-676,-750 --619,513,-843 --565,-718,-689 --468,-816,659 -427,902,405 --450,736,687 -750,-846,763 --585,768,778 --633,426,-839 --404,-769,591 -536,-388,-434 -704,-788,634 -35,16,-73 --462,-744,738 --555,442,-822 --569,629,659 -705,822,-563 -795,823,-645 --496,-684,-668 --107,41,71 -522,-464,-532 -515,-526,-469 - ---- scanner 22 --- -365,-635,386 -581,917,409 --8,123,57 --370,-536,-733 -528,809,-505 --334,618,-845 -787,-549,-660 --614,794,504 -499,852,407 -590,882,441 --648,-567,444 --322,582,-872 --642,-441,306 -837,-559,-616 --424,700,-844 -406,-725,350 --654,-331,419 --607,731,442 --593,829,366 -78,-10,-96 --377,-454,-889 -636,806,-409 --418,-429,-807 -451,-737,493 -612,879,-569 -858,-476,-721 - ---- scanner 23 --- --851,915,696 -389,-697,-376 -281,-653,-479 -397,601,-595 --534,868,-330 --413,-663,-631 --867,756,662 -376,684,-490 -630,-676,673 -709,-513,622 --540,867,-324 -829,822,386 --8,16,1 -447,611,-551 -814,731,514 -386,-751,-431 -740,-619,672 --807,869,591 --389,-373,604 -714,821,524 --408,-473,-658 --425,-573,-683 --478,862,-341 --397,-581,557 --383,-375,578 - ---- scanner 24 --- -553,-531,-484 -515,901,443 --488,-330,-877 --395,-640,803 --489,-468,-762 -719,-689,477 -666,-610,341 --699,607,-495 --554,-606,819 -676,-504,-338 -628,-731,322 -656,858,-646 -623,896,366 -451,823,377 --579,-458,-862 --626,546,-424 --118,-62,-103 --448,397,430 -729,698,-670 --709,651,-445 --443,380,492 --441,-535,759 --5,84,74 -659,762,-754 -571,-481,-402 --442,386,486 - ---- scanner 25 --- -576,805,-368 --522,908,464 -630,-324,-503 -735,983,767 -601,-613,565 --656,770,-584 --604,-268,-754 -452,655,-375 -659,984,874 -724,952,776 -621,-509,530 -559,-571,519 -560,641,-468 -20,5,45 --746,-231,-803 --510,931,673 --849,-408,723 -592,-458,-580 -7,178,-115 --609,833,-479 --750,-291,753 --682,778,-359 --572,-263,-801 --547,917,621 --709,-370,661 -714,-299,-579 - ---- scanner 26 --- -843,-791,297 -921,-678,279 -755,637,-577 -520,957,655 --471,-436,-492 --449,574,-489 --440,542,-454 -475,-712,-753 --477,590,418 -748,575,-640 -149,105,-164 -566,899,526 -734,499,-542 --767,-755,794 --387,-372,-562 --725,-750,554 --567,641,342 --456,514,399 -463,-739,-789 --358,540,-519 -656,942,621 --495,-276,-565 -841,-763,335 --776,-800,647 -18,47,10 -565,-711,-671 - ---- scanner 27 --- -310,-373,899 --770,469,775 --603,-909,924 -408,454,706 --534,339,-353 -550,-378,857 --826,632,802 --447,-842,863 -527,374,-750 -468,339,-699 -457,-328,908 -769,-365,-709 --500,307,-304 -62,-61,94 -468,529,-781 --689,-909,-341 -807,-337,-711 --836,546,827 -449,498,858 --653,-839,875 --628,-721,-355 --565,-849,-267 -825,-450,-789 -388,386,800 --457,325,-359 diff --git a/2021/20/input.in b/2021/20/input.in deleted file mode 100644 index 574baec..0000000 --- a/2021/20/input.in +++ /dev/null @@ -1,102 +0,0 @@ -##.......#.####..#..#...##.##...#.####.#.##.######...###...#..#####...###...##.###..#...#....#.#....###.#....##..####...##....###....##.#.###..###.#...####.#....#.#.#.####...#...#.#..#....#######......#..#.###.....#.#...#.....##.##.##..#....##.##.####.#..#..#.#...#..########.##.########....##.#...#...#..#..#.#..#..###..#..##.##.#.#.#.##.##..##....#.##.#.#.##.#..#..####..#...####.##..#.....###...##..##..####..#..#...####.##.##.#.##.#....####..####...#.#.#..#.#.##.##.##.###.#......##.#...#.#.##..##.##..###... - -##.##.#.#####..###.######.#.######..##...#.#.##....#..#...#...##.##.#######...###...#..#.##..#.##.## -.###..####..#..#....##..#.#.#.####.##.#.#####.####.#.....#.##.#####.#.....#...##.#.###.......#.##### -..###.#..##.....#.###.#.##..##...##.##..##.###.##.#..#..#....###.##..#...#.#.##...###..##.......#### -.##...#.###...##..#.##..##....#.#.#####.#.#.###..##...#.##.#.....#..#.........#.#.##.#...##.#....### -##..##..#..#.####.#...##....#.......#...#.#.#..##..#.###..#.#.####.#..##..###...####..###...#.....#. -...#..#....##.#..#.#..#...###..#...#.##.##...#...####.#.#.#.###.##.###.####..##.##....#..#.###....## -..#.####.....###......###......##.##.###...##.....#.#..##...###..##..###....##..#.###.####...##.###. -#...##..##.#.#..#.##.##.#.##.....#...##.#...#....#......######.#...###....#....####.#.###.###...#.#. -#..##..###...#.#..##..###..#....##.#.#####.#.##.##.#....###.####.##..#...####..###..###.#...#.#.###. -#.##.#######.###.###..###.......##.##...#...####.##...##..##.###.#..#####.#..###..#......#..#####..# -.#####....#####..#..###.##....##.#....#.#..#...##...#.#.#..####.#.#..##.#....####...#...##..##.#.### -#.##.#..#.#.###.##..#.##.#......###..##.###.#...############.##...##.##..#.#.#.#..#.##..##..#.#..##. -##.#.##.#..##.#....#..#..#.#.##.####....#......###.##.#.##.#.##.#.#..#.#.#...#...##....##.####...#.. -#..##.##.##......##...##..#.######.#.#.##...####.#.....#...#.#..#....#...#.#####.....##.#....##.#.#. -#.#...##.#.#..#.##.##.....###..#.##.#...##.#.......#.######..###########.###.#.#.##...#...#.#.#..### -.##.#..#...#...#.##..###...##########.##.####....##.#.##########.#..#.#.##########....##......#.#.## -#..##.###.#..####....#.###..#.#.###.##.#######.##.#####.#......###.#..#####....##.#...#.#######..... -#.....####........#......#.#.#.##..#.#..#.#.#.#.##..#######...#...###.##..#.#..#...#.#.....##.#.#... -#.#.#.####..##...###.#####.########......#.#.##.##...##.#...#.#.#...#..#..#.....##.....##.#..#.#...# -...#.##.#..###..###.#..##...##.##..#####....###...###.#.#########.#..#...#....##..#.##.#.###.####... -##.#...#..#..#.#..##..#.#######.#.#..###....#....####..##.##..#.##.#.####.##..#####.##.#...#.##..#.# -......#.#.#....#.###....########....##....####..###.##.####.......#.#..###...####..###.####.##..#.#. -#...##.#.###.#.###...#.#..#..#....#....####.###.#.####.#####.#.#...#.#.#.####..#.####.....##.#..#.## -....###..#.##########......##.####..##.####....##.#.####.##..##......##.##..##.####..#####..#.#.##.# -#.#.###.###........#..#.#.##.#..#.###.#.#.##..#.#.#.##.#########..#..#....##..#....#.##...#.##.#..#. -#...#..###.######..#.###.#####....###..#..#...#...###.#.#####.#..##..####..##...#.#.##..###.#....### -###.#..#.##.#.#...#.#.#..#..#...#....#.......###.......#.#.##...#.#.....#...#.....#.#....#####...#.# -..#.......#.#.#.##.....##.####.####...#..##.#.##....#.##.#.#.####..#.#.###.....###..####...##.#.#... -###.####.#####.....#...#.###.#...#.#...###.#....#..#.#######...#####..#....###.....#######..#####.#. -.#####.#.#.#.##..#####.####.#.#.#.#.#...##..##......##..#.###.#..#...#...####...#.#.##....#.####..#. -...#.#.##..#...######.##.#.###..####.....#..##..#.####..#.#.##.##..#.###.###..##...##.#.#.#.#.##.##. -...#...##.#.####.#.#..#..#..#.#.#.#.###.####.#....###...#.....##.###..#..##..##.##.......##.##.##.## -###.##...##.#####.#.#..#.#..#.#..######.#....#..##.######...#..##.#####....#.##..###.##..#.#...#.... -##.....##.#..#####..#...#.#.#####.....#..###.##..#..#..#.#.....#.#..##.#####..##...#.###...##.#.###. -#..#..##..#..#.###.#..#..#.##..#.#####.##.....#.##......#.##.######.##.###.##...#..####...#...##.### -.#.###...####...#....#..##.#.#..##.#.##.###..#..#.##.#########...#.#..#..##...####.#.#.#.##......### -#...#...#.###.##..#..#...#####.#######......##.#.....#.#......#..####..#..##..#.#..#######...#.#..#. -.#####..#..#...#.###...###....#...#..##.###...#.#.#...###.##....#...##...#.#..#..##.###.#.###....##. -#.#.#.#.......##..#.#.#.###..###...##..##..#.####....##.####...#...##..#.#..#.####.######..######... -.#......#.##..#.####.#..#.#.#######.#..###.#..##...#...#..##.###.#..######...#..###########..###.### -...##...#...##.#.##.###..##.####.#.#..#.##.##..##.#.#.....#.##.#...#....#.##.#....#....##.#.#.####.# -.#.#....#.#..#....#..##....#......##.##...###.....#...#.#...#..#..##..##...##.#..#.####..####...#.#. -..##.#...###....#.#.######.#.#....######.......#..#...###.###.##.##.#..#.###.##..#.#.#..###########. -.##.#..#.#.#....#..###.######.#....#########....#...#..##..##...#.#####.###.##.####...#..#..#.#.##.. -####.#..#....##...#...#.#.##.#.#.##.#.#...#...##.....#..##..###.#.#.#.#####......#..#....##..##.##.. -#.#..##.#..##.##.###.###...#....#####.##....#.#..#.#..#####..#.#..###.#..#..#......##.#.##..#.#.#..# -###....#.........#.##.#.##.#.#.###.####.###..#.####.#####.####.....#....#..#...##.##..##.####...#.## -##..###.##.########.#.##.##...#.#..###.##.###.####.###..#..#...#.#.#..##..###.#.#.##...#####.#.#..## -.#####..###..#.#..#....##..###.#.....#...###....#....##..###.##..####.#..#.#......###..#....#...#..# -.......#.##....##..#...##....#..##...#.##.#..##..#..#######..##..#.#....#....#..####.#.#..#.#.#.##.. -....###.#..#..#....#..#..#.##.....#..##..###.#.#.###.##.#..#....####.##.......##.#..#..#....###....# -...####.##.#.########.#.##.##...####.#.###.##..###..##.....##.#...#.........#....##.....#.####.#.##. -#..##....#.##....##..#...#.#.##.####....#......##..##.##.#.#.#.#....#.####..##.#.#..########..#...## -.####.....#..##...#.##..##...#.#..#.#...#####.#...#..##....###.###.#.##.####..#.#.#..#...#..#.#.#... -#.###..#...#.#.##.######....#..#...##..##.###.....##..#.#.#..#.##.#.####..######........##..#.##.... -.###..##....##..#.###.##..#..##.#.#.....#..##.#####.#.#.#....###...###......#.#..#####...##....###.. -.#.........#..##...##.##.##..#...###.#####.#####.#..#....##....##..##...##.#..##.###..##..##........ -.#.##...#..#..#.#####...#..###.###.#.#....######.##....#.####.####...#######.....#.#.#.#.#..#..#...# -..###.##..#....#######.#..##.#.##.###.##.#.#..##..###.#.###.....#..##.##..##.#..##.....#.##.#.#####. -###.....#...###.#....##..##....#..#..###...###..#....###.##.#####.#...#....#.####.###......##..####. -####....###..##.#.#.#..########..####..##.#...........#######.###.#..#.###.##.##.....##.....###.#.#. -#.###.###..#.#.###.....##..###......#....#.#...##.###...###..#..####..#.....#...##..##......#...#.## -.....#.........#...###.####.#...###.###..#.#.##..#.###..##..##..#......#.#######...##.###.#.#.##...# -##.######...#...##......#..#.######.###.#####.....#.#.#...####.#.#...#.###..#.##....#######...#...## -.#..#.........########.##..####.#########..##.....###.##.#.#..#######..#..######..##.#.###.######..# -#.#.#.#.##.#.....##.#.....###...#..##.#.#.###....#.#...##..##.###....###....#.####..###....##.####.. -..#.#...##.#######..#.#...#.##...##.#.###.###.#.#.##.#.##.##..#.##..#.#....#.#.#.####......###...##. -#.#....##.#....#.#.###..##.#.#.#######...#.###.#.#.#....##...##.#.#..#...########.##.###.#.#.#....#. -#.....#....######...###.#.##...#.#..##..#.#.#....###..#......#..#........##.##.#..####.#.#.##.#.#### -#.#..#..#..#.##.#..#.###...##.##....#....###.##.#####..#..##.#.#.#..#.###..##..#####......###.###.## -#.#......#.#.###.#..#...#......#.....#..#..#..#.#.....##.#.##..##.###.#.#..#.#.#....#....#.#....##.. -######.#.##.##.#.#...#.##..#..########.#.####....##.######....##.##.....#.###....####...#.#.##..##.# -..##.###..##.#.##..#..#.######.#.#.#.####.#....##..##..#.#.#....##...###.##..####...#....#######..#. -##.##.#.....###..#####.#.###..#.#.#...##..#.######.#######..#.##.##.##..##...#####...##.##.#.###..## -#.#..##.##....#...##.#..#.#####..##..#..##.#.##.#.##...##.##...##.###........#.############.....#... -...#.####..##.#.#..#.#.#..##...####.#..#.#....##..##..#####.#..#...##.##..###..###..##...##...##...# -#.###..#.....#.#.#######.#..#..##.###..#..#.##.#..####.#...#.####.##.#....##...##..##..##..#..###..# -###..##.###.#...##..##....###..#.#..#.#.##.....#..##.#..##..#.##......#..##..#.#..##..#.####...##.#. -...##...#.#.##.#...###.##....#.#.#.##..#####.#.##.#.##.###..#..#.##.#..###.####.#...#....#.#.#.#.#.# -...#.#...####...#####.....#.#.##.#.#..##.###..#.#..##.###.#.#....#.##..####..#....#.##.###....####.. -...##....##..#.#..#####..#...###..##..#.#..#..###.....##..#..###.#.###....#..#.##.#..###.#....##..## -.#..####.#.#..###.##.#.###.#.###.######.####.#.##....#.#...#.#####..#.##..##......#..#.#.##.##.####. -....##.#.#.....###..##.#..#..#####.####.#.#.##.####..##.##.#.##..#.###.....####.###..#.##..#...#.#.. -#.##.#..#.###.#.###..#.##.##.##.#...#...#.#....#..#.##.#.....#....###.#.###..######......#.###.##.## -#..##.#.#........##.#.###.#.#.#.#..##.##.###.#.###.#....#.##.#####.##..###..###..##.#.....#.#####... -#####.##..#.#.##..#...#...#.#.####.#.#.##.#....#.#..##...#.#.#.#.#..#....##.....#.#..#####..##.##... -.#.##...##.####...#..###.##.#.#....##...#.##.##.#.#..#.#..##..##.###.#.#..#.#..##.#...#..#....#.#..# -######......###.#..#....##.#######...##.####.#....#..####.#..##.#..#..#.######.#.#.######..#.#..##.# -###...#.####.#...#.##.####...#....##.#..#.#..###..#..#....#.###.#.#.#.#...##....#..#..##.#.###....## -.#.##......##..#...##....###...#..###.#.#......##.###.#.###.#..#####..#...###.####.######.###.###..# -###.#.#..##...#..#.#.#....###...##..##.###.#.###.##..####.#.##.####.##..##...#......#######.#..##.## -....##..#.#...##......##.#.#.#.####.#.#......#.#..........#....##...#.##.#.#.###..##.###.####..####. -#......####.#.#####.##.###.##...######..#.#..###.##......###..#..#.#...#.####.#.##...###..#.###..### -.#....###.##.####.##..####..##.##..######.#..#.###.#...##..#####...#..###.#.#.#######.##.####.###.#. -###.#.#.#.###.#.#.###....##.....###.#..##.####..#.##..##.##########.#.#..#..###..##..#.####......### -...##..##..#####.#..#.###..#...####....#..#.####..#...###.##.###.###...#.#..#...#..#.#..###..#....#. -.###.#.#####.#....#..######.####.###..##..###...##...####..#.....##.##.#.....#..###.####.....#.##.## -.#....##.#..##.....###....##.#.#####...#..#..###..#......#.#....#...#.#.#....###...#..####..#.#...#. -#....#..##..##..#.###..#..#.#.....#.#.##.#####..#.#.##...##..##..#.##.##.#..#...#.##.#...#.#.#....## -#.#...#.###..##.##.#########......#.##..###.###...##...#..##...#.#...#..###.#######.#####..#.##.#.#. diff --git a/2021/21/input.in b/2021/21/input.in deleted file mode 100644 index 8fc0831..0000000 --- a/2021/21/input.in +++ /dev/null @@ -1,2 +0,0 @@ -Player 1 starting position: 7 -Player 2 starting position: 4 diff --git a/2021/22/input.in b/2021/22/input.in deleted file mode 100644 index 3ca7e56..0000000 --- a/2021/22/input.in +++ /dev/null @@ -1,420 +0,0 @@ -on x=-45..7,y=-17..27,z=5..49 -on x=-47..6,y=-17..30,z=-24..26 -on x=-41..3,y=-7..39,z=-40..13 -on x=-7..37,y=-13..39,z=-8..42 -on x=-28..25,y=1..47,z=-30..16 -on x=-17..35,y=-41..8,z=-24..28 -on x=-12..40,y=-16..36,z=-9..38 -on x=-42..5,y=-43..5,z=-41..5 -on x=-41..8,y=-19..32,z=-5..48 -on x=-7..45,y=-48..-4,z=-36..18 -off x=-30..-17,y=-18..-5,z=14..31 -on x=-34..11,y=-2..43,z=-40..12 -off x=15..31,y=8..23,z=-25..-14 -on x=1..49,y=-7..39,z=-21..27 -off x=-10..0,y=24..33,z=-25..-8 -on x=-45..1,y=-5..45,z=-20..31 -off x=-45..-28,y=-3..15,z=29..43 -on x=-28..22,y=-13..33,z=-17..31 -off x=40..49,y=9..24,z=-38..-21 -on x=-31..20,y=-21..31,z=-10..40 -on x=58139..70015,y=-49609..-18906,z=19361..36256 -on x=-39287..-12309,y=66131..82072,z=13276..35310 -on x=-38949..-17453,y=-49529..-24823,z=55665..59650 -on x=61392..82266,y=-12404..6500,z=4950..31263 -on x=70741..83016,y=-1541..20873,z=-21674..7357 -on x=-34218..162,y=-70012..-44525,z=42760..66985 -on x=-47728..-21420,y=-1708..17042,z=-84807..-57400 -on x=-69820..-59219,y=43821..69305,z=2296..22054 -on x=46547..61145,y=-50265..-36252,z=19460..47328 -on x=10220..47534,y=56556..93325,z=-2705..20946 -on x=-66580..-44842,y=-59481..-31671,z=18352..40065 -on x=-67971..-41858,y=-15159..3388,z=39731..56500 -on x=-7464..2686,y=69347..76538,z=13667..39722 -on x=-44072..-16433,y=-43849..-30853,z=56335..69595 -on x=-83105..-72178,y=5307..31541,z=-3936..16810 -on x=25464..39638,y=-120..31814,z=-69618..-52103 -on x=-82616..-57987,y=15114..25223,z=-28861..-23141 -on x=-49633..-29006,y=41204..52341,z=-65156..-47964 -on x=41031..61766,y=-76189..-58486,z=9912..27403 -on x=57437..69980,y=12769..38313,z=-43090..-17897 -on x=17604..33962,y=-75729..-58412,z=-48962..-35687 -on x=63409..77341,y=-21036..12184,z=29223..43584 -on x=-5980..19717,y=41947..72255,z=38283..56970 -on x=9718..12557,y=67771..85749,z=17773..34267 -on x=8015..28022,y=-18543..-3527,z=-89441..-59883 -on x=-64308..-56323,y=21361..38767,z=12257..42684 -on x=-11882..16043,y=30052..57566,z=57092..81130 -on x=-13820..53,y=-74086..-63407,z=37807..48599 -on x=40956..59336,y=58187..69842,z=25877..39207 -on x=-4691..23405,y=-79041..-70404,z=-14086..5935 -on x=66930..81266,y=-37722..-4197,z=27732..37351 -on x=-19848..-2104,y=61123..83113,z=11320..30475 -on x=-66891..-46977,y=-588..33596,z=33866..52493 -on x=-13090..15764,y=63984..75318,z=23277..60045 -on x=-14119..15900,y=-13901..1426,z=60017..94903 -on x=12498..29184,y=58541..70777,z=-50866..-38397 -on x=-67009..-43569,y=-69320..-39097,z=24026..51765 -on x=17594..36756,y=25770..47449,z=47460..61914 -on x=43517..53046,y=-56173..-37227,z=20953..36522 -on x=39963..42250,y=57583..75800,z=-1394..6811 -on x=19518..48960,y=52233..66739,z=-48141..-30882 -on x=52411..62263,y=-70027..-49483,z=516..15609 -on x=-27930..-5097,y=-74677..-52111,z=-59808..-41624 -on x=56383..62339,y=-62443..-42931,z=7509..24599 -on x=43191..61390,y=36457..58193,z=-16838..1525 -on x=32499..55237,y=-69168..-42561,z=-10459..-1917 -on x=-58208..-37739,y=-28039..-4075,z=40414..61838 -on x=879..22641,y=74295..88511,z=-19483..9324 -on x=-5492..8717,y=-85892..-60796,z=-41420..-29271 -on x=-61450..-39696,y=-49010..-38395,z=21478..40987 -on x=32490..45756,y=-8722..-4698,z=-76184..-56133 -on x=-90953..-70436,y=-29377..-3902,z=-40397..-23576 -on x=20598..38603,y=66163..85567,z=9851..28068 -on x=27571..32595,y=-59796..-30762,z=-63579..-38559 -on x=12086..41959,y=50402..75453,z=-54908..-21406 -on x=-14331..1008,y=71841..90790,z=-2133..19891 -on x=3915..28155,y=-5795..4405,z=75839..94136 -on x=-55589..-36558,y=47040..66883,z=-30804..-10538 -on x=-82372..-51132,y=-47601..-21545,z=-40952..-21789 -on x=-231..19231,y=-59449..-29763,z=56397..73100 -on x=-85290..-58709,y=-16609..-8329,z=-29163..4167 -on x=-63346..-48051,y=52873..69585,z=-30842..3080 -on x=-25328..-4496,y=12591..44061,z=-84403..-55728 -on x=-21682..13927,y=-80747..-59930,z=-5486..20947 -on x=8693..18060,y=4143..13917,z=72062..87750 -on x=-58360..-31194,y=47907..73246,z=8480..21809 -on x=2105..34277,y=52967..69971,z=-50821..-20714 -on x=22406..39629,y=50181..61542,z=43485..55870 -on x=-39074..-13502,y=50579..72036,z=-60260..-46008 -on x=-16311..-6287,y=16984..36635,z=68924..86294 -on x=-48550..-15024,y=-61029..-31290,z=54895..67840 -on x=-50877..-30410,y=-1926..13529,z=53814..85287 -on x=-36471..-13748,y=36383..48289,z=-83446..-48216 -on x=26766..48259,y=-43762..-25681,z=56822..77314 -on x=-17837..10480,y=-63530..-38447,z=-59572..-41895 -on x=20337..49911,y=55663..87453,z=5287..22885 -on x=-55628..-21884,y=37700..65006,z=38798..55418 -on x=-67405..-42145,y=-7082..13919,z=-63850..-39429 -on x=-62190..-49213,y=49865..67498,z=3390..13755 -on x=-51622..-18963,y=51212..74783,z=-28793..-8944 -on x=66722..82965,y=5925..20106,z=28397..44234 -on x=-66827..-51821,y=2821..11144,z=30591..50432 -on x=35642..66682,y=-74513..-45994,z=-15026..5100 -on x=27277..36975,y=-73319..-45025,z=-54816..-32826 -on x=17935..54757,y=-61336..-35653,z=55321..68784 -on x=-53245..-32593,y=-8830..8348,z=-76698..-59749 -on x=-43668..-18711,y=49769..78016,z=-50596..-28488 -on x=-72259..-40599,y=40207..59440,z=21612..41506 -on x=50424..74664,y=24414..39823,z=-38827..-9157 -on x=-58443..-41638,y=19203..40243,z=-54425..-48848 -on x=-55245..-32288,y=56063..70391,z=-61296..-37638 -on x=-49262..-36162,y=40765..56914,z=39896..58492 -on x=71936..78823,y=21562..36332,z=-6530..9437 -on x=21183..33209,y=-63451..-35210,z=43680..67677 -on x=35315..59459,y=-79781..-55078,z=-5718..9678 -on x=5598..19316,y=62740..70153,z=-38729..-30069 -on x=59043..77670,y=-53992..-36698,z=-18798..1018 -on x=32561..52959,y=54567..76299,z=-6363..11619 -on x=64072..83686,y=19684..46937,z=-26206..-226 -on x=66407..80678,y=-6031..15815,z=-50231..-28853 -on x=-62433..-51106,y=-50185..-42513,z=-59329..-34248 -on x=69442..84353,y=-37609..-18888,z=15039..22599 -on x=-75863..-45632,y=-67797..-44088,z=13448..35319 -on x=-57525..-34978,y=49512..61488,z=-34514..-10529 -on x=-78241..-45455,y=-41939..-25787,z=-37581..-12052 -on x=26231..48086,y=55721..87000,z=-26989..-2861 -on x=-4820..16896,y=-89410..-59766,z=-12799..17397 -on x=-65173..-53273,y=33923..60231,z=22787..35885 -on x=-25789..-12467,y=-20692..-1528,z=-90659..-77680 -on x=-13681..4235,y=-72843..-65344,z=37936..54871 -on x=-11..15471,y=-77300..-67134,z=30860..37972 -on x=-28323..2329,y=43128..57045,z=40410..68197 -on x=-77368..-60587,y=-40892..-36302,z=-4933..14472 -on x=-71440..-43438,y=29241..61084,z=-45200..-17748 -on x=-46541..-29430,y=-30481..-20386,z=-77000..-48239 -on x=-7222..17417,y=-82920..-65369,z=-24777..-2228 -on x=2428..23021,y=49309..71893,z=33651..47624 -on x=-79286..-73434,y=-4555..3976,z=-30692..-15990 -on x=-57833..-36691,y=50060..70993,z=-49705..-40886 -on x=-13633..-3901,y=70191..89145,z=-9546..8579 -on x=30203..51142,y=41221..64139,z=-49984..-36750 -on x=25779..40661,y=62196..84217,z=3820..31889 -on x=-58668..-46042,y=46561..68990,z=-29470..-12201 -on x=8943..46059,y=-61596..-28191,z=45500..78129 -on x=28768..53964,y=-39042..-2958,z=61006..67475 -on x=-10473..2243,y=-57135..-35805,z=50664..61840 -on x=63395..88485,y=-28148..-8518,z=-20034..6196 -on x=6817..17829,y=-22295..-6626,z=60702..92502 -on x=-54667..-43405,y=-35771..-14244,z=-62194..-47623 -on x=18751..34299,y=44719..66964,z=-65540..-32700 -on x=-24683..-8536,y=-57872..-22245,z=57265..75481 -on x=-62653..-47058,y=-71546..-56371,z=4383..22163 -on x=47349..60320,y=54753..74576,z=-21348..2434 -on x=-38274..-12869,y=-7578..3906,z=-87883..-58190 -on x=-33826..4521,y=-11790..8404,z=-86733..-67748 -on x=-52661..-35931,y=26091..49288,z=-66021..-48412 -on x=44264..57460,y=58198..70004,z=2720..15895 -on x=17474..36290,y=67465..77999,z=1861..17546 -on x=-38975..-10327,y=-27672..4843,z=-83570..-68390 -on x=-33746..-20547,y=-74631..-45171,z=39800..51056 -on x=-24599..-21768,y=-46393..-24475,z=55208..71397 -on x=3164..19967,y=-65190..-44643,z=50418..72570 -on x=53619..66155,y=-51057..-29658,z=-55773..-20405 -on x=2427..22904,y=-95956..-66495,z=-36877..-18825 -on x=2944..9603,y=-86498..-58478,z=-47818..-30617 -on x=-10384..6884,y=38548..65953,z=48033..75190 -on x=41974..68250,y=34200..53098,z=30209..46591 -on x=-90428..-64064,y=-9949..-7541,z=-23619..-456 -on x=-66305..-49896,y=12749..28681,z=57529..59079 -on x=-93786..-65183,y=13210..20464,z=22646..36054 -on x=-71583..-55593,y=-18075..-7073,z=17505..49567 -on x=-63215..-45228,y=-11391..7580,z=58194..80874 -on x=-24085..-13987,y=-74188..-54667,z=40270..59993 -on x=41063..66463,y=-60593..-28582,z=-57706..-22356 -on x=-56785..-44700,y=-53712..-30970,z=27312..36091 -on x=-14349..6107,y=-5236..15914,z=-89681..-61552 -on x=-2414..15438,y=69685..96612,z=-17622..9238 -on x=58420..63800,y=5990..23102,z=34891..71606 -on x=6179..27982,y=-74431..-54768,z=14204..36485 -on x=61894..69769,y=34173..44733,z=8902..19407 -on x=-78362..-63040,y=19103..50632,z=-32334..-17303 -on x=62182..90308,y=-18030..8929,z=-2180..13388 -on x=30390..48405,y=-72383..-48673,z=36144..57755 -on x=-45454..-20423,y=-70458..-62117,z=-21023..1613 -on x=36175..58944,y=-81657..-52999,z=2448..22806 -on x=54470..71193,y=41067..44776,z=25090..44500 -on x=-91961..-67717,y=3964..29558,z=-28094..6750 -on x=-31391..-9169,y=-18878..6593,z=-78341..-75988 -on x=47896..79657,y=-67744..-30097,z=-24880..-16 -on x=-64300..-45475,y=7409..21358,z=-57363..-47213 -on x=-73942..-56617,y=-35835..-23791,z=-67498..-46695 -on x=2869..23028,y=36519..60117,z=-54212..-41508 -on x=2029..20149,y=52897..82718,z=28679..40476 -on x=-36196..-4590,y=-63991..-45779,z=42563..79330 -on x=14025..39832,y=49218..57689,z=-59867..-36377 -on x=48031..55950,y=52029..77629,z=-8043..15625 -on x=20246..41538,y=-11202..9933,z=72656..87842 -on x=-67616..-40170,y=12132..31220,z=-74768..-55643 -on x=-5329..848,y=13794..51295,z=-77787..-65482 -on x=-75861..-64089,y=-21592..-3946,z=-39892..-8479 -on x=-77211..-65745,y=27088..38134,z=-13374..-8928 -on x=37830..58943,y=47065..77746,z=298..18874 -on x=-75469..-41239,y=-60573..-47270,z=-8955..16006 -on x=-56176..-39724,y=-61947..-41061,z=-68714..-31253 -on x=-86282..-64173,y=12949..39281,z=24182..46117 -on x=-41914..-22656,y=-79945..-51310,z=15689..35920 -on x=21347..36914,y=56858..86289,z=19672..35772 -on x=12201..29696,y=59898..74244,z=31480..58564 -on x=23451..53913,y=5070..36118,z=-71964..-55710 -on x=52084..63506,y=2554..22599,z=-55360..-32465 -on x=13753..23490,y=63510..88732,z=4051..12664 -on x=-69866..-44325,y=36781..64233,z=29840..36459 -on x=-8139..-4203,y=19157..40182,z=-93960..-65960 -on x=42305..64756,y=22258..36563,z=41947..60736 -on x=-23146..10560,y=-99141..-74322,z=30..10375 -on x=-67502..-44911,y=-58624..-54469,z=-20071..40 -on x=-1816..30980,y=-93210..-68893,z=17460..29017 -on x=-66971..-39649,y=46207..60551,z=-2186..20048 -on x=57315..58674,y=33730..47187,z=-32958..-18355 -on x=55047..84474,y=24699..40492,z=-46207..-20341 -off x=-33063..-21256,y=-57696..-30224,z=-58827..-49473 -on x=15782..43013,y=-31004..-22072,z=65339..89647 -on x=-46864..-38602,y=-59421..-34651,z=-42145..-38505 -on x=338..19140,y=67761..75432,z=28552..32028 -on x=1165..3108,y=-84103..-65417,z=-7021..18773 -off x=61765..73452,y=-45659..-31483,z=6273..20553 -on x=-5904..9216,y=-95279..-75566,z=-15436..-7219 -off x=32482..50315,y=18574..37548,z=55762..79297 -off x=28578..60666,y=-57164..-47836,z=-37456..-18580 -off x=-3114..3055,y=-95936..-75112,z=16370..29867 -on x=-10868..13285,y=-23894..-5902,z=-93321..-72263 -on x=-41991..-24954,y=31908..51061,z=-70741..-48428 -on x=72292..78583,y=13091..46604,z=-16520..-8162 -on x=-80845..-74837,y=15441..28048,z=-5348..4713 -off x=51932..73538,y=-55178..-32685,z=-46650..-27464 -on x=46484..64440,y=22782..44759,z=-50796..-20460 -off x=-34434..-14835,y=27486..46328,z=56348..82832 -on x=-44176..-28566,y=-11705..15875,z=56902..81288 -on x=-33731..-11689,y=73052..83023,z=16583..38825 -on x=6312..27150,y=-793..26604,z=-92489..-61569 -off x=14092..28444,y=66009..93462,z=-21640..4954 -on x=16209..38551,y=-13562..-1358,z=-88722..-74583 -on x=-59972..-25520,y=41806..72865,z=-54134..-33465 -on x=-61623..-33367,y=-896..19881,z=51101..71993 -on x=-9583..14577,y=-86565..-55523,z=-51532..-34350 -off x=-33213..-7919,y=-90889..-66554,z=-39490..-10974 -on x=4294..20106,y=62156..76620,z=32450..55005 -off x=-40471..-12398,y=71892..92866,z=-19239..3156 -on x=61770..76100,y=31826..33819,z=-9830..20872 -on x=-25575..-23040,y=41833..59675,z=44548..55450 -off x=68252..71314,y=-21177..2051,z=31408..54792 -off x=-8045..11292,y=-72391..-63911,z=33543..45802 -on x=-8743..10578,y=-32006..-6402,z=-93482..-68214 -off x=73561..91272,y=5808..21229,z=-9935..2763 -on x=-30457..-8215,y=68079..79651,z=-10259..-6593 -on x=47517..81726,y=-2770..15448,z=25263..47900 -on x=54080..68182,y=-23598..5989,z=-59609..-46354 -off x=-75813..-65614,y=-15792..17698,z=22522..37787 -on x=-87006..-65845,y=-33396..-12386,z=5059..13493 -off x=-7171..8455,y=-92708..-74085,z=13156..24440 -on x=-10212..9937,y=59394..87542,z=-40866..-18151 -off x=6150..43593,y=-40711..-23001,z=55695..76253 -on x=-35948..-15354,y=-62908..-59402,z=-45479..-22686 -on x=805..9285,y=59136..71915,z=-59038..-37416 -on x=38933..59498,y=49011..71006,z=-8794..14206 -on x=-60069..-28629,y=21605..46948,z=41655..66447 -off x=-11597..14682,y=-89638..-61313,z=11985..34734 -on x=49754..60626,y=-10194..4245,z=-57384..-56173 -on x=-76993..-49823,y=1985..21722,z=27195..40273 -on x=3697..32693,y=39006..59117,z=47166..67641 -on x=-46344..-31390,y=26350..43919,z=-59943..-51289 -off x=-61186..-23421,y=3628..26108,z=-75248..-54653 -on x=-32256..3212,y=65884..75652,z=26282..48080 -on x=24335..60592,y=26877..56269,z=-59010..-35566 -on x=-47929..-11220,y=61537..80705,z=-951..12658 -off x=-34766..-24336,y=-88672..-68491,z=-22764..-2566 -off x=53419..59301,y=43238..55188,z=2622..33800 -off x=-10211..14650,y=-84660..-49473,z=-60698..-24956 -on x=-79252..-61788,y=12398..35394,z=1279..18242 -on x=-7059..9529,y=47864..69006,z=49118..58161 -off x=71189..88378,y=30685..51825,z=-9146..-3034 -off x=-81189..-65062,y=-10666..93,z=-49110..-27410 -on x=-32473..3746,y=-64466..-43485,z=32647..60505 -off x=13789..47745,y=25232..46055,z=58850..67334 -on x=36081..58769,y=6844..15343,z=53742..79111 -on x=69079..94470,y=-15594..4678,z=3766..24355 -off x=-67105..-49557,y=-38660..-26297,z=43118..59948 -off x=50681..80664,y=-19761..-8580,z=-42615..-37383 -off x=-47909..-18354,y=49435..68877,z=-43529..-15345 -on x=-88967..-59205,y=-13016..3451,z=-54832..-19130 -off x=10643..25625,y=10545..27433,z=64296..89575 -off x=4907..32957,y=-83127..-55966,z=-39854..-32569 -on x=22784..48884,y=-57836..-21249,z=-65327..-56473 -off x=10992..29981,y=66267..77315,z=-41222..-18950 -off x=-52091..-37868,y=-20232..-474,z=47891..72527 -on x=60481..75081,y=24637..41188,z=-46716..-40883 -off x=-23632..5610,y=1514..22656,z=74313..88576 -off x=31575..38873,y=40494..57318,z=32877..56552 -off x=24103..51366,y=-54507..-36072,z=-65355..-36367 -off x=-25237..-3440,y=-72086..-51759,z=-59419..-40897 -off x=-18141..16100,y=11832..33275,z=-87594..-71462 -off x=12042..37177,y=-86189..-74493,z=-19781..-3966 -on x=-12444..12639,y=-85487..-65396,z=-35640..-9225 -off x=-61040..-36584,y=-81216..-48830,z=-14964..12506 -off x=-23554..-6117,y=-72205..-47980,z=31059..61897 -off x=65088..79105,y=-37874..-16691,z=3979..35678 -off x=-53117..-33574,y=-13523..-5076,z=51420..78156 -on x=-25476..-9172,y=-82861..-63199,z=-43771..-26786 -on x=-86034..-56752,y=6474..32237,z=18690..35512 -off x=21171..53995,y=-36024..-8618,z=-85718..-54617 -on x=24027..48916,y=30554..49211,z=56592..63360 -off x=-31460..-8363,y=-91538..-67279,z=-20883..11877 -off x=50868..72728,y=-43133..-20868,z=30586..59496 -on x=60180..77450,y=-28264..-4028,z=27566..46058 -off x=25248..40253,y=52738..82118,z=-10027..10323 -off x=-53149..-35544,y=26124..57599,z=41182..47863 -on x=6893..26612,y=-56766..-18582,z=-76077..-64415 -off x=29251..43365,y=-56034..-33329,z=-74917..-58876 -off x=55417..84034,y=13218..36893,z=29426..38841 -off x=15245..41851,y=-51152..-25375,z=51072..78544 -off x=-19619..360,y=49798..63770,z=-68779..-57126 -off x=48875..73188,y=36354..65964,z=20137..55472 -on x=-50376..-23916,y=-84993..-56907,z=15202..30720 -on x=-63177..-46387,y=30846..55077,z=19244..38186 -on x=40274..55030,y=-71784..-45007,z=-4208..20470 -on x=28347..49207,y=63036..73385,z=-17068..13520 -off x=-26968..-3637,y=-9695..16790,z=66767..90772 -on x=68705..98416,y=-8622..10759,z=3213..26868 -off x=-3059..12360,y=66783..80670,z=-28986..7977 -on x=-58388..-40646,y=-33991..-31773,z=44197..59752 -on x=2865..11833,y=-67250..-57894,z=-62792..-24337 -off x=-57030..-37005,y=51218..75936,z=7769..32000 -on x=47527..74301,y=-58273..-36741,z=10584..15071 -on x=-60184..-39571,y=-30740..-20737,z=-68300..-39656 -off x=-86850..-65643,y=-5574..16927,z=3990..27771 -off x=13811..46354,y=-31173..3401,z=-79763..-64407 -off x=-13279..4029,y=74369..84704,z=-9402..6592 -off x=-38919..-37515,y=42906..53285,z=33500..63457 -off x=-3774..27927,y=-52395..-36924,z=50341..76959 -off x=-86316..-65121,y=-11814..7408,z=-13538..17834 -off x=39060..65192,y=-49523..-12954,z=44981..65013 -on x=44289..52572,y=5584..40317,z=-73249..-41724 -on x=41428..64314,y=-52679..-24605,z=-44071..-26710 -on x=-46798..-20610,y=-70188..-56150,z=-53205..-16499 -on x=-40671..-20938,y=69319..88891,z=5610..16726 -off x=13893..35132,y=-15329..7573,z=-95287..-72786 -on x=-31073..-26913,y=-77563..-57760,z=1928..22949 -on x=-53823..-47132,y=7432..14072,z=-65922..-42630 -off x=-92914..-60621,y=-25654..5949,z=12601..22146 -off x=24459..62772,y=61174..75406,z=24143..41263 -on x=-73652..-36824,y=23996..28076,z=-68072..-50254 -off x=5695..26986,y=-27324..-3742,z=58054..83456 -on x=30188..51914,y=53458..67994,z=5460..30526 -off x=67145..80765,y=-3482..25880,z=29419..47511 -off x=-89026..-70655,y=-42051..-13350,z=15265..35268 -off x=-28593..-19842,y=27064..45165,z=57782..73792 -on x=-46554..-23972,y=33019..60152,z=46108..61039 -on x=-51229..-27692,y=62079..81900,z=-25204..-10313 -off x=75830..79640,y=-8232..15863,z=12397..27598 -off x=47654..68376,y=351..18328,z=-61385..-30558 -off x=-49195..-23856,y=57499..72955,z=-5783..32067 -off x=-4065..13165,y=-53869..-18692,z=-77892..-68369 -on x=21771..41037,y=33685..63960,z=35189..54429 -on x=-62848..-42784,y=-53293..-32454,z=-42889..-23060 -on x=16633..41662,y=-77505..-49183,z=34223..52408 -on x=41423..65193,y=-74897..-45854,z=-16083..15691 -off x=5197..23912,y=-2192..30686,z=58695..84997 -on x=51540..52711,y=-68340..-53654,z=-20777..-19220 -on x=-48130..-28617,y=-9415..-1637,z=69241..89576 -on x=2500..18895,y=-56133..-49184,z=52561..81563 -off x=55700..81258,y=14145..34650,z=25325..46304 -off x=-24233..-94,y=-4089..20455,z=75592..93976 -off x=-73100..-65288,y=-8770..2793,z=-46595..-28483 -off x=20475..36233,y=65981..81822,z=10098..30519 -on x=-47992..-30588,y=-64098..-33920,z=48972..77171 -on x=-13261..8398,y=48870..70645,z=54671..71340 -on x=-70105..-48865,y=35572..63927,z=-16566..-3809 -off x=-90578..-69121,y=7582..45468,z=-7064..10904 -off x=-31215..-10949,y=72290..79639,z=-6286..6345 -on x=74052..84728,y=16884..29952,z=-19273..9356 -off x=35204..64806,y=55000..69546,z=-3598..9749 -off x=-49474..-24068,y=53139..55822,z=-57619..-47785 -off x=32313..52383,y=-26381..-13630,z=58768..73790 -off x=13580..35467,y=61719..88895,z=8669..29467 -on x=-54515..-49805,y=-4119..23034,z=-69401..-56491 -on x=-73961..-54235,y=25557..37602,z=-59903..-33239 -off x=-10313..2971,y=-56537..-21479,z=-73118..-56758 -on x=-74109..-68245,y=-14640..6255,z=-32056..-9919 -on x=-8704..1766,y=35410..57231,z=64345..76443 -off x=73047..81163,y=-5773..17096,z=24433..32163 -off x=-91886..-62451,y=-482..26130,z=8006..26319 -off x=17921..36441,y=-67251..-44885,z=34231..42934 -on x=49934..68358,y=-53246..-19769,z=39469..43842 -on x=56532..66012,y=-63433..-34360,z=-5761..16747 -off x=50888..66910,y=-73766..-45524,z=-34269..-15791 -off x=-53699..-35241,y=-53482..-17862,z=-72515..-42474 -off x=-48183..-29326,y=46638..54456,z=-54302..-33975 -off x=53493..67034,y=45776..48825,z=2583..8620 -on x=-6073..10138,y=62545..85278,z=23621..57001 -on x=-38508..-4523,y=54082..70881,z=50826..67962 -off x=37169..76620,y=47581..59105,z=-10872..8763 -on x=-28636..-16986,y=33405..60075,z=44952..63962 -on x=-8687..15348,y=-83584..-62431,z=-17101..-2245 -off x=36300..56740,y=46976..69120,z=-8811..2238 -off x=-5004..12191,y=-40112..-21492,z=-79188..-55268 -on x=23083..34899,y=2757..27461,z=-80465..-53265 -off x=36563..47394,y=34869..51935,z=-60753..-41403 -off x=-65592..-49393,y=-38929..-37743,z=-52793..-22052 -off x=-56455..-27816,y=-57252..-39373,z=-64915..-35370 -off x=-55271..-22482,y=36129..49610,z=34155..56011 -on x=-16603..-11223,y=6299..34093,z=-82645..-58961 -on x=41076..70147,y=7237..29376,z=-49485..-30152 -on x=535..30263,y=-52689..-37336,z=46273..84327 -on x=-21910..3792,y=22950..52814,z=63693..76400 -off x=-81116..-50991,y=276..6719,z=-61422..-30155 -on x=70070..94722,y=3705..21041,z=-36356..-6622 -on x=-58964..-32366,y=-64952..-47587,z=-392..17097 -off x=10390..21102,y=64923..80569,z=34182..56673 -on x=-45522..-28586,y=-67635..-47968,z=-6313..27037 -on x=-18210..17089,y=71004..89678,z=-15469..10434 diff --git a/2021/23/input.in b/2021/23/input.in deleted file mode 100644 index a8bbe18..0000000 --- a/2021/23/input.in +++ /dev/null @@ -1,5 +0,0 @@ -############# -#...........# -###D#D#B#A### - #C#A#B#C# - ######### diff --git a/2021/24/input.in b/2021/24/input.in deleted file mode 100644 index 6a65df2..0000000 --- a/2021/24/input.in +++ /dev/null @@ -1,252 +0,0 @@ -inp w -mul x 0 -add x z -mod x 26 -div z 1 -add x 14 -eql x w -eql x 0 -mul y 0 -add y 25 -mul y x -add y 1 -mul z y -mul y 0 -add y w -add y 8 -mul y x -add z y -inp w -mul x 0 -add x z -mod x 26 -div z 1 -add x 13 -eql x w -eql x 0 -mul y 0 -add y 25 -mul y x -add y 1 -mul z y -mul y 0 -add y w -add y 8 -mul y x -add z y -inp w -mul x 0 -add x z -mod x 26 -div z 1 -add x 13 -eql x w -eql x 0 -mul y 0 -add y 25 -mul y x -add y 1 -mul z y -mul y 0 -add y w -add y 3 -mul y x -add z y -inp w -mul x 0 -add x z -mod x 26 -div z 1 -add x 12 -eql x w -eql x 0 -mul y 0 -add y 25 -mul y x -add y 1 -mul z y -mul y 0 -add y w -add y 10 -mul y x -add z y -inp w -mul x 0 -add x z -mod x 26 -div z 26 -add x -12 -eql x w -eql x 0 -mul y 0 -add y 25 -mul y x -add y 1 -mul z y -mul y 0 -add y w -add y 8 -mul y x -add z y -inp w -mul x 0 -add x z -mod x 26 -div z 1 -add x 12 -eql x w -eql x 0 -mul y 0 -add y 25 -mul y x -add y 1 -mul z y -mul y 0 -add y w -add y 8 -mul y x -add z y -inp w -mul x 0 -add x z -mod x 26 -div z 26 -add x -2 -eql x w -eql x 0 -mul y 0 -add y 25 -mul y x -add y 1 -mul z y -mul y 0 -add y w -add y 8 -mul y x -add z y -inp w -mul x 0 -add x z -mod x 26 -div z 26 -add x -11 -eql x w -eql x 0 -mul y 0 -add y 25 -mul y x -add y 1 -mul z y -mul y 0 -add y w -add y 5 -mul y x -add z y -inp w -mul x 0 -add x z -mod x 26 -div z 1 -add x 13 -eql x w -eql x 0 -mul y 0 -add y 25 -mul y x -add y 1 -mul z y -mul y 0 -add y w -add y 9 -mul y x -add z y -inp w -mul x 0 -add x z -mod x 26 -div z 1 -add x 14 -eql x w -eql x 0 -mul y 0 -add y 25 -mul y x -add y 1 -mul z y -mul y 0 -add y w -add y 3 -mul y x -add z y -inp w -mul x 0 -add x z -mod x 26 -div z 26 -add x 0 -eql x w -eql x 0 -mul y 0 -add y 25 -mul y x -add y 1 -mul z y -mul y 0 -add y w -add y 4 -mul y x -add z y -inp w -mul x 0 -add x z -mod x 26 -div z 26 -add x -12 -eql x w -eql x 0 -mul y 0 -add y 25 -mul y x -add y 1 -mul z y -mul y 0 -add y w -add y 9 -mul y x -add z y -inp w -mul x 0 -add x z -mod x 26 -div z 26 -add x -13 -eql x w -eql x 0 -mul y 0 -add y 25 -mul y x -add y 1 -mul z y -mul y 0 -add y w -add y 2 -mul y x -add z y -inp w -mul x 0 -add x z -mod x 26 -div z 26 -add x -6 -eql x w -eql x 0 -mul y 0 -add y 25 -mul y x -add y 1 -mul z y -mul y 0 -add y w -add y 7 -mul y x -add z y diff --git a/2021/25/input.in b/2021/25/input.in deleted file mode 100644 index 7b300b0..0000000 --- a/2021/25/input.in +++ /dev/null @@ -1,137 +0,0 @@ -v.....>..v...vv>v>.v>v.....>v.v>.>..v>>>.>>..vvv>.vvvvvvvv..vv....>..>>vv..........>>...v>.>...v>vvvv>>..v>vv..v>.v..>>...>v>....>>>......v ->>>>.v....v>.....>.v..>.v>v.v..>..>>>.v....v.v>.>>.v>..v>>v...v>..v..>.>v>>.>vv.>..v..vv.>v>v.>v..v.v>v>>vv..>..>.v.vv.>v.v..vvv..>...>>... -.>>>...v.>.vv.>.vv.v>v>.v..v>>.>..v>.>....>>...>v.....v..v>..v>...v>v.>.v..>vvv..>v..vvvvvv......>>v.v.v.>..>.v...>v..vv.v.v>.v...>vv.>.... ->>>vv.v.>...v.....>>v..>>vv..vvv.v..>v>.>.>>..vv>..>.v>v.v.v>.v.vv>>v....>.>.v>>.>vvv.>>..vvvv>v.....>.v...>.>vv.v.>>.>...v.vv.>.vvv.v>>... -.>>v.v>....>vv.>v>.v>...>>>.v>>.>vv.>>....vv....>v...>..>..>.v..>.>.>>vv>>..v>...v>>v.v>.v.vvv..>..v.>v.>>>>...v...vv>.>vv...>>.>..>>>vv>.v ->....>>>>v>.>>v>.>>..v..v....v...>>v.vvv..>..>vvv.v.v.>....vv.v>v..v.vv.v..vv>..>>..>v.>.....v.>>v.>>.>......v.>.v>>>>>...vv...v.......v.>v -.>..>>>.>>>v...vvv.>..>.>v..v.v>..>.>v.>......v>vvv.>v>..>v.vv.v...v.v.vv...vv.>.>....>.vv...vvv>..v>vv>v.>...>..>.vv.....v........>v..v>.v -.>v>...>v.>..>v.>.>..>.>>.>.v...>.v.vv>....v.v..v...v>v.>vv>>.>>...>>vv>>v>v>...v.>...>>.v>>v>>....>>v.v..v.v..v...>....>..>>.vv..v>.v>v>.. -.v....>v>.....>v.v>v.>...>.vv....v..>....>..>.>v..v.>.>>>.>v>>v...>..>....>>v.vv.v>.v.>.vv>..>...>v.v>.>.>..v.v.v>vv....>...v.v.v.v...>.>.. -v>>..v>>...vvv..vv..>.>>>...>.v.>v>>...v.v>>vvv>>>....v...>v>.>...vv>>v..>.vvv..>.>.v.>v>v....v.v>>.v.>v.v.....>vv>.......v..v.v>.v..>v>.>. -....v.>.v..v.>>v.vv.>.v>vv.v.>>v.vv>v...>>>v>.>vvv>..v.>.v..>v..>>vv...vvvv..>>....v.vv>>>vv.>.v..>...>>v...>..>..v..v>vv.vv..v>vvv>v.v...> -.v>>v..>>v.>.v.>v.vv>...>...v>..v>vvv.vvv...v..>..>v>.>...v.>>.v>>vv.v...v..v.>v.v>.v>v.>.v..vvvv.>.>v>.......>>.>v>>>....>>v.>.v>vv..>>>.v -.v.>.>>v.>v>vv...>.....v>.vv.>>.v>v.vv...v>.>v..vvvvv......>v.v..>.......>v.>.....>v.v>.>v>.v>..v.>vv.v....>.vvv.>vv..vv.v>v>.......>>..vvv -vvvv>..>v.v......>vv.vv..>v.>...>.v.v.>.>>>..v>.>.vvv...v..v>.>v.>v>...>..>.>>.v.>v...>v>..>.v.>.>>>>>.v>.v.>v...v.>.vv>..v...vv.......>.>v ->>.>.>.v.>.vv>v.v>>v>>v.>>.>..v...>.>>..vv>.>>v>.>v..>.......v.....v....v.>>...>.vv.>>...vv>.>>.>v.>>vv>.v>v.>>.vvv>>>v>.>>..>>..v....v>>.> -v..>>.v...>..>....>v>.>>.......>..>v>..>..>vv.>vv.v......>v.v>v.......vv.>...v..v>>v..>.>>v...v>>.vv.>>..v.>>.......>.v...>....>>>..>v..... -...>.v..>>.>>>>>..vvv.v>vv>.>....v>vv>..vv.vv...>v>v...>>v..>...v..>vv.v.vv...v.>.>...>>....>.v...>vvvvv..v>.vv.>..v.>...v.>.v...v.>>.v.v>v ->>>..>.>v.vv>>...>>..>v>.>v>v.v..>...>>vv>..>v.>vv.>>.>.....v>>vv.>.>.............>>.vv..vv.>.>v>vv>...>...>.v>v.v>.>v.....>.>>>.>v>.>..vv. -.vv>....v.v.v...>v>.vv>v.....v.v>...>>>>>v>...v..>>v.>>>v.......>vv...v>..v..v.....v...>v....v.v>v>>.....v...v.>.>...>v..>>..>>.>.v...v>>>. -.v.vv..v>v>v>.v....>..v>>..>.v....v>vv.vv..>...v>..v....>..>>v........>.>...v..>....>vv..>.v..>>.>..v>.vv..v>.>.>.v.v.....v.>..>v..v>>.vv>v ->>v>.>>....v.v>.>>>.v...>>v.>.>.v.>...vv.>.......>>.v..>.>>>..v.v.v.......v.>.>>..vv.>...>>......v....v..v>...>v...>.v>.v..>.vv.....>>.vv>v -.vv.>.>>...v.v.vv>..>v>..>vvv>>>.vv...>>.vv.v.v>>.>>v.v.v..>..>v...vv..vv....>v>v..>vvv.....>v>v..>...>>v.>.>>>>..>.>>.v>...>...>..v..>..>. -.>>.v.v...>..>..>vv.v>v.>v>v.v.v>>..vvvvv...v.vvvvvv>>v........v.v..v>v.>>>.>v...v.>..>>v...v...>>.v....v...>.>....>v.v>>>.....>...v.v.vv.. ->.vvv>v.v>..v>.>vv.........>.......>>.vv>v.>...v>>.v>.v.v.>.>......>........v.v..>.v>>>.v......>>.>..v>v..>.vv.....v>..v>vv>..>..v..>vv>>.. -.v>..v..>.v....v>....>.vvv>.>.>v>vv>v>>..........vvvv>vvvv..v>vv......>>v..>>>v>>.>..>vvv..>..>>v>v.vv>>..>.>v.>>.vv>.>....vv.v...>....>v.v ->vvvv>>v.v..v.>>..v>...v.v.v>..>>..>..>.>>vv.v.v...vv>...v.v>v...v.>.>vv...v.>.v>..v>..v>>>.v>.vv>..v>>....>....>...v>.v......vv.v.>.>>>>v. -v..>......v.v>>.>>..v.v>v...>>.v...>....vv>....>.>.>>..v.vvv>>vvv.v>......v>>...vv>...v.>>vv...>v.>>vv.vv......>.v.>.v>>..>v.>>>..>v.v>.vv. ->..>v..v>vv>.v>>..vv.v>.>>..v.>vv.>v..>v>..>...>...v........v...>vv....>.>...>.>..v....v.v>.v.v....v.v>..v>>.>>.>..v>..>>vvv.>>..v..v.>v... ->.>.v>>....v>>v>.vv..v>.v>....vv>.......>v>..>v>>v.>vv.>v.v>>v.vv..>.v.>.>..v.>...>.v..>.v..>.>.>v.vv>..>.>>..v...>>...v..v>>>.>>.v>.>.>.v> -....v.v.>.>>.>.....v...v>>>.>v..v..v....>>>..vv>.>>>>>.......>...>...>..........>.v>...>...v.v....>.v>>>v.>..vv.....vv>v..>v.>v>>.v......v. -.>.v>>v>>v>>...>v..v.v>.>>.>v.>v.>.vv.v>>>>vvvv>.>>v..vv>>.vv.>>v..v.>>...>v>>>....v.v>v>v>>>........v.v>v>>>v....>...vv>>>>v>v.>>v>>vv.... ->.>>..v..vv.>....>.v.>.v.v>>.>..vv..>.v...>.>vv...>...>....v.v...v>>.v.v>>..>...v...vv>>.>vvvv....>.....>......>.vv.>..>vv>>v>v....v......v -v..>v.vv.v.v>>v>..v..v>>...>>.vvv>.v..vv>.v>>.>..>v.v>.>.vv.v.>....v.>>.>>.v>v>.v..vv.v>.v...>...vv>v>v..>>.>.v..>.>v>...>...>vv.>..v..v>vv ->>.>.....>v..>vvvvv.>>..v..v>..>v...>.v..vv>>>......>...v..>v>..vvvvvv...vv>.>...vv>v..v..>.......>.>v.>...v.>>.v...>...>...>v...v.>vv..v.v -.>>v>...vv.>.v>.v.>v..>v..>v.>v>v.v.>.........v.>v..v.v.>..v>....v....>v.>>>..>>v>.v...vvv.>.....v.>>>>v>v>..>..v.vv>>..>>.....>v...v>..... ->.>.>v>>>vv>>...>...>>>vv......v...>.>vv.>>v>.v.vv...v.>.>..v....v.v.>v>.>....>>.v...>>.v..>.v...v.v>vv...v.vv...vv.........>....v.....v... -..>>.v...>..vvv.>....v>.>v.>>.>..>>.>.....vvv..>......>>>.>.....>.>>v...v..>.v.v.>.v>>..>>>....>...v>>vv>v..>vv>..vv>.>>>>.vv.v.>>>v...>>vv -.>vv>.v>.>.>.v>......>.v>v......>......>>v..>v..v.v...vvv>>....v...v>v.v>>v.>v.v.>>>>vv.vv....>.>.v>.vv.v..>.>v>>.vv.v>..>v>.....>..v.>.>v. ->v.v..>.>.vv>.v>v>....>..v....>.vvv..>>>>..>v..>>..v>...v>....>>.v..>v...>.>..v>..v.v.v>>.vv...>v.>...v.v..>v....v.v..vvv.>.v>v..>vv>...... -...v.v.v..>..vv>v>v>>v..>>>>v.....v>v.>>...v..v..>vvv>v>v.>vv>..>vv...>.....>..vv..>>.....>.v.....>.v.>>..>..>.v..>v.v>>..>.>v>v>.v>.>>v.>v -vv>..>v.vv>>>v.....vv>...v>v>.>..>.v..v>v......>.>v.....v>.>.v.v..>>....vv>......>>v.>v.v..v..>v.v.>>.>vv....>.>>>.vv.v.vv>..>..v...>.vvv.v -vv>>>v..v.v..vv.>>>.>..v>vv..>v>..>vvv.v.v..v.>.>v.v.v.>.>v..v..>.>v..v.v.v>.v...>v.>.>..v..>..v..v.>vvv>>.v..v..>v..>.v...v.v.v.v>.>.v>.>. -.>>.>.v....>..v.v..>.v>.>>>.>v.>>v...v...>v>v.>..>.......>>..v..v>.>...vv.>...>>.>....>...>>..v....v>..>v.v>vv>.>.v>v.>.>......v..v.v>.vv>. -...>v.v>v.vv.>.>...v..v....>v.v>.v.>.>v>v>>.v..vv.>>.vvv.>>.vv>>>..>v.v.v..>.>>.....>>...>v.>vv.>>...>...>.....>.>>.>.....vv>.>v>v..>..>vv. -.....>..v...v.vv.....vv..>>vvv>.>..vv...>..>>..>..>.>..>......v.>.v.>.>.v>.>>v.....v.v...v..>.......>>v>>>...vv>v.....v..>v..>.>...>v...>>v -..v.vv...>.>>..>...>..>>>..v.vv.v>>vv>v.>.v...v....>>.>.>vv.v.vv>v..>..vv.>>>.........>..>.>v..v>.v>.v..>>v..vvv.vv...v>>vv..v.>..>v..v.v.. ->.v>.>.>v.v..v>>.v.v..v>v>>v.v.>v>..>..>vv.vvv..v>>....v..v>>vv>......>...>>.v..v..>..v...>..>v..>v...v.v.v.>vv.vv.>>...>>..>....v>v>>>v..v -.>.>..v.>v.>....>....>>v...v>..>.>v.v>>>.>.>........>v.>v.>..>>...>.>..>..v>.>..v>..v>.vv.v...v.>v..>v.vv>..v>>v.v.>>v...v>v...>.v...vvv>.. -..>>>.vvv.vv..vvvvvv.v.>v.v.>...vv....>v.v>>..v.>>.......>.v.>vvv..>v..>.v....>vv.>...>>...v....>.....>.v.>>>>>...>..>..>>v.vv.>vvv>vvv.... -.v>v>>v.v.....>..>>..>>>>..v>...v..v>..>v.vv...v>...>...v>..v..>..v>.>v>....>>vv>vv.v..v>v...vv>v>v>>.v..>v.>>..>.v>>>v.v>v>..v....v...>>.. -v>......v..v.>vv.vv>..vv...v...>v..v.>>vvv.v>...>.>...>>..v....v..v.>.>>v......v.v.vv.>...v.>>.>>......v..>v>>v>>...v>>......>..>..v..>...> -vv.>..>.v.>...>>>..>.v..vv>......>>..vvv..v.>.>.>.........>>....v....>v>>.....v.v.v.v..>v.....>......vv.v..>>>>>>..>..v..v>v>...>v>>.>....v -.>v.v>v>>v..v..v.v...v.v....v..vv>.v>.>.v.>>>>.v.>.vvvvvv>v>>......>vv.>>.........>.v.>.....>>..>.>.vv.v.>.>.....v.>>v.....v.v..>v>..v.vv.. ->....>>>>v.v>.>..v>..v>vv.>>..>v>.>>..v>v.>..vvvvv....v>>..>.v>>.>.v.>v>...>.>.v>...v.....v...v.vv>v>..v.......>.>.v>>>...>........vv...>vv -v>v.vv.>>>v>.....v....>....>.......>..>...v.>v.v.v.....>v>>>...v.......>v...>>v.>v.v.v..v.>..>.>v..vv.v.v.>v..v...v..v>.vv>>..v...v.>.v..v. -v..v....>v.>.>...>..v.>v.vv.....>.v>....>..>>vv..v...>>..>.vv>v>.>v..>vv...v>vvv>v>.>v>v>>>.vv.v>>v.vv.>.v.>........>v......>.>.v..v>vv.... ->vvv>..>..>.v>>v..........v>.>.>>.>.v>.....vv>...>...v..>v>.>v>>.vvvv.>>.v......v....v....vv..v..vvv.>...>...v>vv....>>>v>vv.v>>>.>.v.>>v.v -v..>vv>>vv.v.v..v.>>..vv.>>v.>v>v...v.>..>.>v......v....vvv.>..>....v..>..v>.>v..>.>v.>.......>.>v...vv>>.v....>.>v.>>>v.>v...>..v>v>..>>>v -vv.vv.v.vvvvv>...vv..........v>vv.v.v...>v.>>..>>vv>..vv>v.v.>.v..vv>>...vv.v.v.>.vv.>vv>.v>>.....v...>>.>v.....>..>>..>>..v...>vv>.v...v>> -.v.v..>v..>...v.>.v.....>>..>.>>vv>>>v>.......>.>>...>..>.>>..v...vvv.>..vv..>v>v..>>..>.....>..v..v....v>>v.v.>>>.v>.vv.v..v..>v.>.>>...>> -.>..v>>v....v.>v..>vv.v.>..>..>>v.v>>.....v.>>..>>.>..>>>>.v>vv..>.v.>.>...>>>.>......vv...v.v.v...v>.>.>.v..vv..v...>v.....>.v>...>..>..v. -.....vv>..v.vv>.>>>.....>.>v.......v>vvv..v.>>.v....v..v.>v.>v>.v>vvv...>>>>>>.vv.>.v.>...>v..v....>..>v.>>>vv.v>.>.>.vv>...>>v.>>.vv.>.>v. -..>>v...>..vvv>>.>v>vv....v..>v..v..>v>...>.v...>>.>>.vv...v>v.v..>.>>.v...>v....>>>>.v.v.vv.v.>>.vv...vv>.>.vv..>>.>.>vv.>..v>..>.>.v...v> -vv>>v>v.v>v>>v>v>>v>v..v....>..>.>.....v>>.>>v.v.>>>v>.vv.>vvvv>..>>>...>....v>..>vvv.>.vvv>>v.v>..>.v.v.>.v.v...vvvv.>>......>..>v.....>>v ->.v>.v>v..>.>..>.....>.>>.>.>..v.v..v.vvv>.>>.v..>.v.>.>v>v>.v>>>v.v...v>v..>..>>.v.v>.>.>..>.>v...>.v..v>v>v...v..>>...v.>>....v.>v.vvvv>. -..v..v>.v.>v..>..>.vv.v....v.v..v..>>.>>.v..v.vv>v.>.vv..v.>.v....v......vv....>>>v..v...v..v>>>.>...>>v.v>vv>vvvv>.vvvv.>v>..v.>>....>.vv> -v..vv.vv.v.>...>.v..>v.v.......>...>>.>.>..>>.>.>>.....v..vv>.v.>v..>...v>.v>.v>>v...vv>v..v...v.>.>...v...vv..v>v....>.>v>>>v..v>.>v>.>... -..>..vv..v..vvv>v>v..>>.>....vv>...v...v..>.v.v>......>>..v...vv>>...v>v.v...v....v>v>..>v>.......>>.>v..v.....vv.v..>.>..>v>.>.>.v>..>vv>. -v>>v.......>.vv....>>.....v>>v.....vv...>vv>vv>...v...v>>.>.v...v.v.....v>....v>.>.vv.vv...vv>>v..>v...>.v....v>v>..vv>..>....v>v>.v.v.>... -v.v.v>.>>.v>>vvv..v>>.>...>.....v.>.vv>v.vvv.>>>v.v...>..vv..>..>.>v.....>...>..v.....>....>.>>.>>v.v>...vv.....>.>.>v..v.>vv...v>>>>.>.v.. -.vvv>>>>.v.v.vv.v.v.v.>....>v>....>.v>.v>...v.>.v.>..>.v..>>..v>.vv.v......v...v>>..vv>>.>.vvv>.>>..v.>>>..>.>>>.>>v...v.>.>..>>v>>>v>>.vv> ->.>v...v.>>v.>v..vv.>.>.vvv....>.v>v..>v.>..vv>.>v....>>.>>....v.v>>>.>vv>>.vv......>v...v.>.....>..>..>.>.v...>v...v...v...>v.v.vv.....>v. -...>.vvv>.v.v.v.>..>...>..>>>.>..>.>..>..v..>vv.v.v.>.....>.v>....>.>.>....>v.v>.>.>.v..>...>..>>..>>...>.v.v.>..>.>vv....>>>..>>.>.>..>... ->>......>vv....v.....>..>>.>...vvvvv>......vvv.v>.v>.>....>>v.>>vvv...vv.>...>>.v>..>........>>vv>v....>.>..v.>v.>..>......vvv>>......>>.v> -v.>....>.v.v>>..>.v.>>v>vv>>>>.v..>v>v>.>..>>.v>>.v.v..v>v.>v.v>vvvvv...>.v..v.v.....>.......v..vv...vv.........>..v....vvv...>..vv>.v.>>.v -....>v.>.....>....>v.>...v.>v.v>.v>.v.>.>v>>v>>>v..>>v..>v.>....v.>>>...vvv.>....v..>.>...>.v>...v>v.vvv.>v.v.v>>>>..>..vv.>..v.vv.v..v.v.> -v...v...vvv.>>>v.>....vv>..v..v.>v.>v..>.>v.v.....v>...>...vv>..>.v.v>>vvvv>.v>>>...v>.v>>...v>vv..vvv>.v........>v>.vvv.vvv...v>.v.....v.> ->....>v>>..v.v..vv>.v>.v...vvvvvv..v.>.>...vv..>>.vv.>..>v>v..>>...>....v>v.>.>>vv.vvv>v.v>>..vv.>..>...vvv....>..vvv..>v>v..>.v.>>vv.>vv>v -vvv>...vvvvv>>v....>..>.v>v.>.>..v.>v.v>...>>..>v>.>v>..vvv.....v>..>.>>vv.>>>>>....vv.>>v.v.v...v>>.v....v.>v...>..>..>.>.v.v>.>.>.>v..vvv -..>>>>>.v>v..>v.v>v>>>v..v>>.>vv...>.....v>>v....vvv..>...>.>.>>..>.v....v..v>v....>>vv..>v>>..>...>>..>.v.v.v>.v.>.vv>v.v.>......>>.v....v -.>v..>..v.v.>v.>.....>vv>..v>v.>.........v>.>v....>..>>..>>..>>.....>v>vv..>.....v.>...>.>>.>v....>>>.>....vv>.>>>>.>..>>.>v>>vv.vvvv>v.v.> -.v.>.>>.>.>v>v>v>vv>.vv>.>>v.vvv>v..>.>v>v.v..>..>.>>>>>..v..v.>.vv...>.vv..>>v>>v..>v>....>>....v>v.vv>>v.v.v..>..>v..vv.v.v>v>.>...>..>.. -vv>...v>>.....>>>v..>..v.>v.>v.v>vv...>........v..vv.>..>>>>..>>v..>...>v.>>>>vv.>vv>....>.vv.>>.v....v.vv.v>.v>>.v...v.v>.>.....v>....v.>. -v..>>.v....v..>.v.v..vv..vv>>vvv.v..>>.>.v>.>v>...>.>>>>>vv>>...>v>.>>>v..vv>>vv.>v.v>.v...v.....v>>v..v..v.v>v>>....>.vvvv.>vv>>v>>>>>v... -v.>v.v..>v>..vv>....v.vvv.vv.v>.vvv.vv.v>..v.v.>>>>..>.>v...v.....>>..v..>..>vv.>..>v>.v>......>...v.vvv.....v..>.>v>.....>.>>..>>..>>.>vv. -.vv.>v....v>>v.>...>v..v>vv>.>.....>v>......v>..v.v>.vv>.v>.v.>.v..v.>...vv..v.v.>>v>vv>v..v.>.v.>>>>..>.>>..>......v.>...>v>.vv.>>.>..v>v> -vv>>>v..v..v..>.v.v>.>vv>v..v>>>>.>.v..>vv.>.....>v>vv.>vv.....vv.>.v...v.>>...>.v>v>..v...>v.v>>.>>.>v.v>>v..>.>>.>v.v>.>.>vv.>..v>>v>..>. -v.vvv>......v...>..>vv...>.>.>..>>....v>>..>.vv..>..v.v.v.>>.vv...>..v>.v....>v.v>.vv>v.>.>.v.>.>v.v.....v.v.v>.>..vvvv..>v.>v>.>...v>>>... -........>>v..v.v..>.>>.vv.>...>.v.>v...v....v.vv.>v>>.>.v...>>>>.>...v.>>...>>v.v.v>.v..>>vv...v.....>..v....>vv>.v>....v.>..v>...>..vvv>.v -vv.v...>......>.....vv>..vv...>.v>>>>.>v.v>..v.v..v>.>vv.>>.v.>..>>.......v..>>...v>>.>.>...v>>>.vv>..>.>.>v>..v>...v.v..v>.>......v>v..>vv -..v.>..>vvv........v..v.....v...>.v..>.v>>>.v...v..>v...>>>>...>....>v..>.>..v.v..>.v..>..>>.>>..v..>>v.>v..v.....vv.>>>.>....vv>.v.>v..... -v..v..v.>.>..>..vv>.>>.>>.v>...v...v>vv>>.vv.>....>.v.....v..>.vv.v..vvv.v>>v..v.vv..v....v.v..v>..vvvvv.v..>v>.v>v.>>v>..>v.vv.>>..>>..... -.>....>..v..v.v.>.>..v>.>>vv>vv...v>>...>v..v..vv.v>v>.>>>.v.>.>v>.vv.v...>>.vv.>..>.....v.>v>v...vv.....vvv>vvv>vvv..vv...v...>v.v.vvv..>v ->.vvv..>.>.>..v>v.>....>v.>>.>....>v>...v.>..>...>.v...>v..>....vv....vv..v.>..>.v.>..>v>...>>..v.>..>>..>v..vv>>>..v..v>......>>>v..v...>. -v>>..>>v..>....>vv.....v>.v>..>v>..>v..>...>..>v..v>.v>...>v.>.v.>.>..>v...v>vv>v..>>.>v...v>>v>v.v.>vv...>>v..v>.vv...v..v>.vvv>.vvv..v.v> -..>.....v>.v........v>....v.>>...>>.v>>>>>vvv......>>..v.>v>v.vv..>..>>.>.v>.vv.>...>v....v.....>>..v..v>.>v..>>......v.....>..v.v......>v. ->.>.>vv....v>....>....>v.v.>..>>........v.v...vv..v.>..vv.>......>.v.v.vv...>>>..v>v..v.v>.vv>>...>....v..v.>v.v>v..>>..vvv.vv...>.>.v..v.> -..>.>.>v.v.>vv.v>.v.>v.>>..>..>v>vv.v.vv>.>>>...>v......vvv.vv..v.v.v.v...>.>>v..v.v.v>.v.v....>>.v.v.>>v.v.>..>..>..v.>....>>v>..v.v.vv..v -..vvv..v>..vv>..>vv..>.>...v>.......v.>>..v.>>.>..v.>>>..>v..>.vv.>vv.v>v......v.v.....>..>.v....>.v....>v.v>..>>.>>>vv.>v.vv.>vv.v.>..>... -.>>vv>.........>.v>..>.>....vvvvv.v....v...v....>..>.v.v...vvv...v>v>.v.>v..>v>v..>.v..vv>...>vvv...v>..v....>vv.>.v.>.>v..>..vvv..vv...>.> ->.v>.v..vv>>.>...v>.>...vv.>.v.vvv>..>...>v..>.>>v.vv..v.v...>>...>.>v..v.>v.>.vv.>>v.v.vv.>v>.>>.....>.....>>>.>..>.>..>..>.>.>..v...v...> -vv..v.>>>..>>...>vv>.>>.>v>v...>.v>..>..>v.>.>.v>>..v>...v>..v>v....vv>....v>v.>.v.>..v....>v.>>v.......v.>>>..>..v.vv>>.>>>..>v>>v.v..v.>v ->.>..>...v.v>v.v..>.......>..>.vv>...>>vv..vv....>.....>....v.vv.>>>>v>>>.>vv...>>....>v...vv.v>.>.....vv...>>v.>v>>..v.vvv.vv.v...>.>>..v. ->>....v.v.v...v.v>.>v>...>.v>v.>..>v>>v.vv...>....>......>..>vv....v.v.>....v>>...v.v.v.>>..v...>....v>..>.v>v..vv.v.>..>>vvv....>>..>.>>>. -......v..>>>>>.>..v..>>>.....v.v..>..>v>...v.>..vv>>>>...v..v>...>.v>..>.vv....>>.>v....>...>.....v....vv...v..>.>v>.>>.>>.>>...v.>.>.v..>. -v>vv.v.v.v>.>v>v.>...v.>>..v.v>.>.>vv>>.v>.vv.v..vv..v.v.v>vvvv.>v>v..>v>vv>.>.v.>.>>.>v.>.v.>>>.>.v.......v>>v...>.v..vvvv.vvv>.v.v>>>>.v. ->v>....>>>.>v.>..>.v.>>..v....>....>...>..>>vv....vvv>v...vv>>.....>..vvv>.vv.....vv.v>>.v...>v.>v>.>..v.v.v>v>>.v>....>>v..v..vvvv..>>v..v ->v....vv.v.>.>..>v.vv....v>v...>v...>.v.>>....>.v>.>.v.>.v...>.>..vv.vv>...v.v>.....>...>>..>vvv>.v..>>vv>.>.>v.v>>vvv.>v.>.>>>>vv....vv>.> -.v>vv..>vv>vv.>.>..v..>...>.v>>v..v>>v..>......>..>..>>v>>.>.....v..vvv.....v...>>.....>>>>.>>...>>>..v.v....v.vv>>...>.>.>vv.>...>.>.>>v.> -..v.v>v..v>..>..v...v..v......>.>.>...>>.>v..v>..>v...v...>>v........>.v>..v.v.....>v....vv>>....vv..v>>.>.>.>>vv...>.v>.v....v..vv........ -.v>>...>v..>v...>>.>....>>v>vv>v..v..v..>...>>vv...>..v>v..v>v.>v..>....>.v.>v..v>>>v.v.>>>v.v>v.v>..>>v>v....>v..>>.....v.v....v>v..>...>. -v.>.>.....v.v.>>v>>...vv.v.vvvv.>>....v..v.v>.>.v>.vv.>>v..>..>...vv>.>v>..v>.v.>v>v..v.v>v>vvv.>>.>.vv.vvv.v...v....v..v..>>....>vv...v.v. -.>..>>>..>..>>..v..vv>.>.v>.>v..>>>..v...>..v.v..>...v...v....>>.v......v..v..>>v.>vvv>..v.>..v...v..v..v..>>>.....>...v.v.>>....v.>v.>.>>v -v..v.>..vv....>v...vv..>..>>..vv>>v.v.vv>.>.v.v.v>.v.v>>v.v>..vv.v..v>>>>v.v>..vv....>>v....>.v..v.>>.>vv>.>v>...>>>vv.v..>v.v>.>........>. -v.>>>....v...v>..v.v.>.v...>.>.v>v.v.vvv.>v.>>.v>vv....v.v.v.>..vv>...>>..v...>.v>.>.>v.>>>>..>>>>>>v.v.v..>v.>>.v>.....>..v...v..>>...v>>. -.vvvv..v.>.>.>v>v.v>.>.v.vv>.>v.v.....>...>>vv.v..vv..>...>v...>vv.vv.v...v..vv>>..v>.>.>.v.>..>..>.>.>.....v..vv..>.....vvv>>....>v.....v. -v.>>.>..>.>v>>>vvv>.>.vvv>...v........>...vv..v..>>.v>.>.vv..>>vv>....>>vvvv..v.....>vv.v.>>v>>.>>v..>.>...v>...>.>v.v..>.v....>>....>>v..v -..vv.v.>v>v...>.vv.vvvv>....vv....>.>.vv>...>..>..>.>.>.....>v>.....>...>v..>v>>..>>>.....>......>.>v>>..v..v.vv.>>..>..>>vvv>>vvv>...>...v ->..v..>>>.>>v.>.v>>>>..>....vv>>...v>....>.v>v..>>.>..>v>.>>.v..vvv.>v...vvv>..>>v.v>>v.>v.>...>vv>..v.v>..>.>......>......>>..>>..>>...>v> -..>>....v.>>....v...>.v.v.>v..v....>.>.>.>>...v>..>.v.>.v>.vv>>>v.>.>>>vv..>>v>.vv.v>......vvv.....vv>.vv...>..v...>>.>>..v>.>>v>.v>>.vv>.. -.v......vv.>.v..v..>........v>.>.v...v>vvv>.vv...>..>....v>.v..>v>.>>.>v...vv.>>......>vv..vv>.vvv>>>..>..>v.v..v.....>.....vv>.>vv....>>.v -..>>v>.vv>v.>....v>>>vvv>>vv.v.>..vv.>.v....v>>...v....>.>vv...>...v.v>..>.vv.>.v...>....v.v>>......vv.vv..>>vv>.....>v...>>...>..v.v.v.vv. -v..v.>.v.vv.>v.>...v>.........>>v.v.>>..........>vv.>>......>v.vv..>..v.v>v.>.v...>v.v...>.>...>>vv>.v..>vv.v>>..v.v...v...v.>.v.vvv>>..... -....>....v>.>.>v.>v..v.v>>v>>v..vvv...>.>..>vv>>>..v.v..v..v....>>.>........>.>>vvv..v>>..>.v>>v.>.v>>v.vv...>.>v....>v>..v.>vvv..v..>vv>.v -..>v.>..........v.>.v.>.>.>..v..v.>...>.v........vv.>vv..v>.>..>..>v...vv..>v>>...v>..v..v..>vvvv.>v....vv...>.>....v.>.>.>...>.v.>>.v.vv.. -..v>vv..>.v.>.>vv>v..vv.>.vvvv..v>v..v>.v>v.....vvvv.v>.>.>v.>.>....>.>.v.>.v.v>>..v>v.>vvv..>>..>..>>..vv.v...>.v...>v..>.>>.v..v>...v>..> ->v.v.......v..>>v>v.>v.....>v.>.vv....>.v>>v...>v.v>>>.>v>>...>v.vv.vv.v>.vv>..v.vv>v.>..>.v.>........>.>....>.>.v...>...v>....v.v>>v>..>v. -v>vv.v>.v...>..>..>..v.>v>..>v.>..v>>v.>>.v.vvv...>.v>.....>.>>..v>v..>>v>.>..>..>...>vvv....>.>.vv>>>.v...v.v>.>>v>...>...>.>vv.vv>.v.>v.v -..>v..v>v.>>.vvv..v>>v..vv..v>vvv.>..>>>.v>.......>..vvv.>v...vvvv.v...>v>>>..>.v...>.>>v..v..>v.>......v....v>v>>>..v.v.......>.vv.v.v..>. -v...>>......v>>......>>v.....>....v.>v.>>v>>>>v>v..v>.v....>...vv..>>.v>v>..vv>.vvvv.>>.>>>v>.vv.>>.v.v......v>>v.v>.>...>.>..>.>>.vv...... ->..v..>>>v>>.v.vv.....>>>..vv..>vv..v.v>..>v.>v..>v..v....>..>>>vv>>.v>>..>v...v....>>>vv.v.vvv.vv..>vv.>.vvv..>>>>.>>.>v.v>>>..>v..vv....v -.v..>v.>v..vvv.>.>v..>..>vv...v..>vvv...>v.v...>.v....>vv.v.v>v...v>>v.v.vvv..>.v>v>>.>..>>....>>.>..vvv.vv...v...v.v..v....v...v.vv>>vvv>> -..>.>.v.v.>v>.vv..v.v.>.vv..vv.v...>..>.....v.>.......>vv>>>....v...>.....>.v..vvv>.>>v..>.>.......>.>v>.v....>v>>.v>>.v...>.v>.v>..v>>.v>. -..>.v.>.>>.>v>.v..v>...v>.v.>>.v>.>.>>..v....vvv>>...v>v.v>...v....>..>v.....>>.>vv.>>>..>..>.v.>>..>v>>>.vv>..vv.v..>.>...........v>.v.... -..v>v..>......v>v..>.vv.vv>....>...vv.v>>.>.....>>..>>>v.vv.v....vvv>v..v..v>vv.>....>v.v...>v.v>v.>..>>..>>....>...v..>.v>.vvv>.>>.vv.v>v. -v.v>..>.vv.>>>..vv.>.>>>v...>v>v.>.>>..>>...v.v>v>>>vv.>>.>v.v.>.>vv>..v.v..>.v..v......>v>v.v..>...>.......>v>.>.>.>..v.v..v>.>>....>.>>>. -.....>....>v...v....>...>..>v..v.vv>v>....>...v>v.>.v>>..v>>v>vv.....v.>..>>v>>....v.>.>..>.v...>.>vv>...vv>>.vv>v>.v.>v..>>vv>v..>...>..v. diff --git a/2022/01/input.in b/2022/01/input.in deleted file mode 100644 index 9edd9dc..0000000 --- a/2022/01/input.in +++ /dev/null @@ -1,2235 +0,0 @@ -2000 -12013 -5489 -11485 -2430 -7722 -5456 - -6693 -3867 -1645 -3924 -1545 -1910 -5443 -6276 -4574 -4147 -3942 -6322 -2904 - -3455 -4347 -3569 -1871 -2198 -4525 -1367 -4290 -3608 -1105 -3788 -2669 -4095 -4539 -5643 - -2604 -2317 - -14469 -11148 -21992 - -10429 -10440 -1343 -4878 -2948 -9949 -11600 - -5441 -9456 -6912 -5164 -8648 -1303 -6552 -2352 -3902 - -8892 - -5874 -5476 -5816 -6062 -4749 -7295 -5274 -3757 -4919 -1381 -2456 - -5666 -5732 -2628 -3367 -1078 -4688 -9294 -2707 -7664 - -5401 -5514 -2397 -2682 -4270 -4617 -4239 -3388 -3777 -4618 -3126 -3569 -2170 -2255 -2016 - -5280 -3530 -4338 - -5903 -3387 -4212 -4947 -6546 -2273 -3289 -1591 -3206 - -8124 -13697 -5396 -4215 - -10125 -3806 -1106 -3350 -3431 -5926 -7847 - -5469 -5422 -2685 -5531 -4385 -4847 -2398 -3642 -2325 -1926 -3775 -3297 -5138 -1024 -2836 - -25034 -3503 -5769 - -1671 -8174 -11469 -9030 -7977 -3121 - -2292 -2384 -2367 -2859 -5515 -1402 -3983 -2785 -4189 -3664 -2638 - -8501 -5749 -4371 -7714 -3618 -8797 -7521 -4810 -5952 - -11970 -3818 -8416 -2058 -3409 -5663 -2814 - -69727 - -17674 -13729 -3317 -9347 - -3510 -2853 -1174 -8648 -3013 -3180 -5821 -8659 -2097 -1476 - -6002 -5173 -7120 -7164 -7458 -1809 -3670 -7347 -5794 - -4942 -1785 -4233 -2135 -1376 -2520 -1378 -2773 -3397 -2282 -1569 -6008 -5744 -1410 -1262 - -6555 -21542 - -5022 -2557 -2845 -3449 -4442 -1529 -3932 -3888 -5702 -5524 -1829 -2792 -4951 -4197 -5339 - -4528 -7367 -7203 -3805 -3022 -2283 -5165 -4720 - -2529 -7119 -5022 -4026 -6782 -7010 -2746 -4621 -6460 -6438 -3916 -6198 - -8188 -7839 -1230 -7053 -5874 -1743 -6466 -3943 -4229 -3021 - -1633 -5005 -3953 -4288 -5359 -7236 -6473 -7179 -4113 -2967 -1069 -5298 - -9328 -8969 -1533 -7921 -3957 -7449 -9265 - -7288 -13654 - -13363 -10444 -7624 -5247 -4751 -13837 - -3745 -3728 -5915 -4513 -3818 -1513 -4459 -3653 -5544 -1338 -1238 -3669 -5828 -1106 -5085 - -6206 -1598 -4359 -2383 -2149 -6053 -3484 -3172 -1510 -2699 -5494 -5774 -2974 -3283 - -4445 -3583 -6550 -9320 -6905 -9518 - -1672 -6088 -1641 -4253 -5059 -1842 -5265 -5001 -2769 -3991 -4020 -5489 -2967 -4002 - -3001 -4264 -6668 -6710 -5047 -8208 -2616 -8105 -8447 - -18600 -8322 - -6235 -7323 -7792 -8248 -4100 -7035 -8449 -1210 -1192 -8322 - -7343 - -2856 -5366 -4283 -3323 -6541 -4019 -2086 -7435 -4204 -6713 -7217 -3566 - -6811 -11637 -15098 -12874 -5395 - -2458 -1446 -9495 -4442 -4083 -10324 -8491 -5798 - -4799 -7993 -9479 -9826 -4574 -5683 -7240 -3448 - -6258 -8840 -7347 -3031 - -2579 -5140 -4185 -2888 -1014 -1179 -1638 -7703 -2204 -2228 -3762 - -6131 -4685 -3479 -5372 -1684 -5034 -5408 -1289 -1485 -3238 - -5495 -4133 -7093 -1907 -1426 -6798 -1580 -4938 -5403 -6920 -6581 -2688 - -10432 -6345 -1313 -9521 -2652 - -11713 - -14255 -13867 -15482 -7519 - -5819 -4070 -7290 -12708 -10815 -3499 - -4093 -5266 -4175 -3484 -1079 -7116 -5720 -2947 -1490 -5802 -5832 -4027 - -5302 -4837 -4475 -6506 -2261 -5930 -4607 -4285 -2439 -1585 -5288 -4918 -4018 -4777 - -3993 -5624 -11935 -7174 -5086 - -20487 -32607 - -1000 -4167 -1648 -4736 -4700 -4988 -5027 -2712 -4757 -3660 -5855 -4279 -5947 - -16263 - -5100 -2601 -4242 -4474 -2536 -4038 -2529 -3851 -2317 -5986 -1252 -5888 -6087 -1136 -2814 - -6120 -5103 -4874 -5071 -2853 -3825 -1176 -6443 -5622 -4532 -6640 -5708 -4638 - -5743 -7765 -7447 -5287 -5795 -10093 -3239 -6527 - -1428 -3994 -1836 -4892 -1438 -1435 -5189 -6019 -4158 -5205 -5136 -1204 -2092 -4873 -1218 - -17476 -3121 -18812 -17122 - -9187 -14591 -13655 -7065 -15792 - -2341 -1577 -2445 -4855 -2657 -5445 -4048 -4569 -5963 -5044 -2136 -1759 -4685 -2679 -4660 - -9542 -9113 -7941 -13631 -11441 - -6754 -4063 -2779 -1508 -1170 -4159 -8253 -2180 -4129 -7077 - -4446 -4590 -1493 -1078 -5821 -4667 -3183 -4552 -4455 -5375 -1928 -5735 -4996 -5378 -2824 - -1548 -1205 -6097 -3363 -1700 -3600 -3328 -2977 -6557 -4861 -5367 -4588 - -3697 -5237 -3158 -2554 -3247 -4739 -4681 -1545 -5120 -5068 -4503 -5976 -6310 -2543 - -6680 -10760 -6051 -10641 -3566 - -8220 -7876 -9232 -7095 -2648 -5501 -6612 -3274 -2457 - -2712 -4371 -5504 -5360 -2857 -2830 -4816 -1280 -1656 -1684 -1486 -4828 -6423 -1417 - -1045 -9577 -3208 -4431 -4123 -9169 -2461 -10148 - -3064 -5159 -4043 -8403 -5156 -3064 -3536 -3217 -3155 -4971 - -10095 -1648 -3386 -7769 -8939 -12452 - -4251 -3782 -6474 -7009 -7544 -7002 -7021 -7772 -3741 -6936 -6434 - -5581 -2307 -5266 -2754 -6806 -6256 -2913 -4808 -4584 -4004 -5546 -4708 -5767 - -4983 -2055 -3830 -6590 -6740 -3801 -2573 -5583 -2100 -5639 -7335 -7202 - -4832 -2801 -2596 -2966 -2341 -1578 -5677 -1669 -2803 -3575 -1217 -1076 -1420 -1083 -3243 - -16734 -16781 -12618 -19292 - -15489 -4607 - -7462 -1425 -7387 -1314 -1882 -7505 -5348 -7688 -2949 -7299 - -14078 -9935 -11384 -5818 -5623 - -6522 -19523 -15630 -13173 - -3537 -6139 -1118 -1589 -4968 -5038 -5280 -4373 -7962 -4267 -1323 - -2307 -5224 -4833 -4980 -5326 -1991 -1244 -4500 -4363 -2821 -4733 -4762 -2921 -3086 -1901 - -2103 -13127 -11788 -13781 -8246 - -4062 -19254 -19281 - -3726 -3172 -3545 -2096 -5260 -4609 -6360 -3044 -3542 -3442 -2884 -6213 -3982 -4176 - -5618 -7100 -4100 -4484 -10523 - -4578 -21767 -18797 - -5804 -2039 -4951 -6614 -6712 -6601 -6723 -3273 -4967 -4251 -2717 -6879 -1130 - -3748 -1778 -2441 -2167 -6478 -6513 -1402 -5897 -5320 -1759 -3821 -1165 -2703 - -7785 -5718 -7591 -7405 -5215 -4948 -5360 -3833 -6676 -5336 -2322 - -9384 -5082 -8330 -3388 -7562 -9846 -6428 -2567 - -9425 -7189 -8053 -6364 -6519 -6651 -2533 -7207 -5083 - -9249 -3223 -13585 -5668 -1615 -4607 - -2413 -6755 -7232 -8941 -8094 -7381 -5055 -4533 -5926 - -5443 -3258 -2216 -1140 -1564 -3022 -4633 -6005 -3551 -2090 -4581 -3599 -5918 -2745 -2474 - -7269 -29961 - -24014 -1656 -15112 - -7256 -5880 -7761 -6115 -6998 -9817 -3909 -10327 - -7111 -7151 -14411 -7103 -4379 - -5629 -6790 -3207 -8582 -5495 -5001 -5746 -6514 -3874 -3418 - -48033 - -55352 - -17712 - -26192 - -4502 -2348 -5398 -1460 -3537 -1146 -5091 -5345 -4306 -5842 -2507 -1451 -2670 -5451 -3388 - -11840 -12162 -12739 -10712 -3310 -5666 - -1451 -3213 -3751 -11454 -1752 -3636 -1806 - -7334 -4388 -5412 -6933 -2190 -4459 -3381 -6348 -6496 -7301 -5371 -6646 - -3921 -5752 -4586 -1587 -5277 -4372 -2656 -5566 -5056 -3704 -4211 -1753 -3995 -2165 -5532 - -1727 -6476 -2534 -2477 -1148 -5239 -5307 -7327 -4054 -7851 -6930 - -4697 -2696 -2428 -5596 -2876 -1746 -4079 -7306 -2440 -4911 -1710 - -10476 -3062 -5844 -5147 -1883 -3752 -9934 -6027 - -8015 -6689 -3160 -2887 -1665 -2601 -8194 -4085 -1697 -2469 - -1753 -2578 -4683 -2644 -3087 -2515 -6491 -5682 -3961 -3249 -5121 -1165 -1473 -4068 - -5397 -5486 -5855 -5154 -8269 -1508 -1032 -7519 - -7692 -5792 -4375 -1173 -3946 -5005 -8464 -2453 -1922 -1893 - -1927 -1188 -6132 -1822 -8085 -6417 -6684 - -5178 -2048 -8063 -3690 -4662 -1628 -6887 -5722 -7857 -8631 - -8993 - -2860 -6116 -6941 -2070 -7288 -5318 -2652 -4299 -6755 -1441 -3203 -1748 - -5917 -2853 -4440 -3392 -3644 -2393 -1085 -6051 -2565 -2631 -4641 -2518 -1824 -5642 -5924 - -4764 -1055 -2484 -1925 -2232 -5127 -3225 -2121 -2186 -5038 -2716 - -24479 -8643 - -2867 -3981 -3058 -4040 -6531 -5535 -1039 -3116 -5489 -5158 -5460 -3323 -3215 - -10545 -6549 -4412 -6210 -8343 -10374 -5154 - -4381 -3278 -3891 -2751 -5091 -4845 -4298 -6630 -2909 -7551 -3107 - -4872 -4965 -4496 -3070 -1645 -4932 -5065 -2171 -2624 -5784 -4419 -5578 -4642 -2713 - -4642 -2714 -10705 -9640 -1399 -6387 -5252 -7016 - -9541 -1249 -5048 -9289 -9480 -8837 -4909 -7487 -8353 - -3978 -5490 -2898 -5709 -3938 -1814 -3809 -4040 -2176 -5688 -1884 -6412 -6864 - -9996 -32317 - -7417 -7170 -7507 -3805 -7964 -7075 -3843 -3455 -2809 -2909 -7161 - -4252 -1443 -5292 -3287 -5288 -5457 -3209 -3415 -1072 -5708 -4588 -1235 -2811 -3625 -5214 - -6408 -30501 - -5289 -7718 -6475 -2989 -2558 -4973 -7907 -4475 -8002 -4285 -7517 - -1989 -2992 -6113 -5009 -5438 -5115 -5923 -1605 -5285 -3161 -6176 -4008 -3803 -2853 - -6837 -13946 -6830 -2191 -5305 -6818 - -4630 -5907 -8041 -6326 -6155 -2804 -4927 -1890 -4410 -2479 - -8616 -12042 -7557 -9302 -3550 -5145 -9512 - -7975 -8541 -8278 -1930 -10634 -7828 -9461 -7555 - -4903 -4483 -6828 -7556 -5002 -5388 -7594 -3786 -5510 -1435 -2937 - -1652 -13742 -12057 -2081 -1835 -10753 - -9583 -7784 -10572 -5049 - -1825 -1844 -6445 -4803 -6480 -1823 -5178 -1785 -1964 -3261 -3736 -6179 -1474 - -2338 -7208 -4272 -3162 -8804 -1105 -3199 -8775 -9596 - -55557 - -1794 -6972 -9252 -7528 -9889 -8781 -6211 -5404 - -16416 -1570 -12987 -4782 - -4131 -1557 -5866 -5478 -2687 -6055 -2566 -2679 -3358 -4278 -3811 -2651 -3102 -5967 -5162 - -6250 -9703 -5470 -11096 -10740 -9661 -3837 - -4924 -4366 -5433 -2194 -5479 -4948 -4856 -2106 -5388 -3078 -2212 -5433 -2587 -4454 -5515 - -11890 -9537 -7022 - -6178 -4820 -4718 -1506 -3796 -4091 -2414 -2632 -2549 -5416 -2436 -4825 -2468 -4289 - -7074 -5761 -14281 -3437 -2925 - -2075 -4353 -4461 -9670 -8279 -8520 -4298 -6878 -8073 - -6162 -6378 -2835 -1313 -1321 -10490 -2249 -8191 - -6256 -3604 -2093 -3574 -5930 -2602 -1803 -8513 -6114 -3344 - -1430 -13233 -1690 -3032 -5910 -2246 - -6165 -2502 -5932 -6907 -7367 -6034 -1371 -2079 -5468 -4296 -6170 -1078 - -23178 -3808 - -27854 -19375 - -5861 -5506 -4757 -6075 -5432 -1111 -5629 -3145 -3755 -5346 -5442 -4707 -5765 -4569 -2783 - -2961 -3499 -6107 -2519 -1666 -1039 -4124 -1691 -6572 -3737 -1100 -5706 -3136 - -2962 - -15411 -6154 -8790 -12518 -7791 - -2242 -6736 -4039 -8306 -4600 -5255 -3039 -3580 -7944 -4855 - -3937 -2432 -2846 -2014 -3969 -4660 -2019 -2586 -3541 -5566 -5674 -4183 -2974 -5856 -1958 - -7021 -11044 -3687 - -6217 -2789 -6810 -4867 -7357 -5889 -6412 -7377 -3079 -1662 -5227 -6301 - -4362 -5552 -4927 -8808 -3339 -5795 -7918 -7131 -9104 - -11573 -21000 - -20018 -11773 -4418 -4415 - -4464 -3642 -5289 -4341 -3270 -3263 -3555 -1005 -5012 -4993 -6055 -7101 - -9336 -1496 -8827 -6642 -5093 -4205 -6397 -4493 -6916 - -6773 -4955 -5473 -4893 -3357 -7459 -3591 -7272 -3718 -6528 -6807 -2867 - -59816 - -6075 -1639 -15157 - -1665 -1561 -6003 -5483 -1795 -6164 -3933 -6998 -5216 -5136 -5143 -7065 - -4855 -5076 -2777 -1203 -6902 -2405 -3796 -8673 -6574 -6254 - -16039 -6855 -11922 - -18026 -8052 -16434 -14954 - -11381 -2762 -5314 -13850 -5874 -4704 - -2628 -1783 -2991 -7589 -7261 -8961 -8368 -4071 -3959 - -4984 -3604 -5401 -6458 -4894 -1871 -2268 -6735 -4139 -5772 -6534 -6199 - -2613 -4511 -14053 -15595 - -25475 -11850 -12168 - -34501 - -14232 -10228 -15816 -9481 -6643 - -5029 -7410 -3023 -2000 -7915 -5569 -1379 -2946 -7013 -4292 - -5447 -5243 -6352 -1660 -2347 -4029 -5794 -6723 -2073 -7518 - -7190 -1021 -1045 -5807 -4104 -4188 -5510 -3145 -2473 -3279 -1489 -2850 - -12531 -5773 -2373 -5971 -2821 -11792 - -6616 -1617 -6994 -2194 -7213 -5263 -4764 -2029 -6976 -6955 -1018 -3830 - -6011 -6522 -2785 -6336 -1221 -5433 -1998 -2990 -5341 -2213 - -15845 -16017 -6817 -2350 -9955 - -18485 -10512 -18191 - -10963 -18879 -1288 -12514 - -7206 -11431 -5079 -1767 -1478 -1173 - -1653 -1462 -5197 -3378 -3011 -6671 -5170 -2654 -6005 -7759 -5265 - -4457 -4696 -5685 -5934 -2295 -2864 -3115 -3941 -3921 -4557 -4973 -2993 -2151 -2311 - -6867 -7819 -4407 -2792 -1571 -3345 -1642 -7461 -5816 -6697 - -3291 -3084 -4832 -1195 -8411 -7009 -3863 - -6455 -5008 -7351 -5320 -3745 -3554 -4741 -1938 -6275 -6867 -6466 - -48508 - -6790 -4190 -1003 -5524 -5145 -3348 -1088 -5249 -6326 -3637 -5766 -4961 -3031 - -24120 -1811 -6650 - -3129 -4133 -3814 -2893 -3749 -6315 -2418 -2726 -3483 -3877 -2043 -5079 -4440 -1787 - -8110 -5553 -6158 -4811 -3133 -3737 -2611 -2075 -4188 -5086 - -19318 - -5872 -6372 -5416 -1309 -6321 -7020 -3273 -4175 -3717 -5140 -7438 -5079 - -1336 -9155 -6709 -2722 -4065 -1618 -1492 -6562 - -5440 -4334 -4617 -3830 -2468 -2110 -1474 -2171 -4903 -5984 -3652 -3808 -4988 -3253 -5376 - -9374 -3614 -1620 -1340 -9642 -4596 -2325 -3680 -6480 - -6328 -1140 -4212 -4673 -6003 -3907 -1897 -5136 -5398 -5164 -1340 -6152 -5189 -5705 - -4086 -4307 -4252 -3336 -2311 -1017 -5877 -2410 -2087 -2151 -2581 -3720 -4578 -3279 -2417 - -14837 -8046 -6307 -12835 - -6737 -5747 -5476 -3975 -8761 -1607 -3930 -5819 -6597 - -2404 -4632 -9393 -2482 -7537 -10334 -6698 -1194 - -7778 -11298 -6485 -1039 -11800 -4406 -4824 - -1317 -7026 -8237 -6529 -5450 -8785 -4565 -5485 -2066 -5517 - -15025 -18252 -18684 -11672 - -4554 -1621 -2494 -4759 -7009 -2702 -6973 -1681 -7204 -2369 -5719 -5105 - -7942 -3730 -9426 -12559 -11015 -2978 - -1535 -9079 -1988 -7192 -7933 -1625 -7926 -1389 -3112 - -3316 -1145 -4696 -7752 -8697 -3344 -11835 - -1354 -1589 -7545 -6150 -6746 -2918 -6788 -4965 -5385 -6289 - -16280 -7614 -19318 -10871 - -1389 -5027 -2440 -10135 -13799 - -1323 -5820 -5780 -4612 -3452 -4654 -2567 -1202 -1445 -1458 -3210 -4807 -2684 -1996 -1384 - -4093 -8449 -1615 -5801 -4196 -6076 -7989 -5862 -6156 -4328 - -18948 - -3089 -7778 -7239 -5381 -2587 -1405 -4676 -6439 -7005 -2918 diff --git a/2022/02/input.in b/2022/02/input.in deleted file mode 100644 index 787ae71..0000000 --- a/2022/02/input.in +++ /dev/null @@ -1,2500 +0,0 @@ -B Y -A Z -A Z -C Z -B Y -B Y -B X -B Z -C Z -B X -B Y -A Z -B Y -B Z -B Y -C Z -B Z -B Y -B Z -C Y -B Y -A Z -B Y -B Y -B Y -C Y -A Z -B Y -B X -A Z -B X -A Z -A Z -B Y -B Y -B X -A Z -B Y -B Z -C X -C X -B Y -B Y -B X -B X -C X -B X -A Z -B Y -B Y -C X -A Z -B Y -B Z -B X -B X -A Z -A X -B Y -B Y -B Z -C Z -B Z -B Z -B Z -A Z -A Z -B X -B X -B Y -B X -B X -C Z -C Z -A Z -A Y -A Z -B Z -A Z -B Y -C X -B X -C X -B Z -B Z -C Z -B Z -B X -C X -A Z -C X -B Z -A Y -C Z -B Y -C Y -B X -A X -B Y -B X -B X -B Z -B Y -A Z -B Z -B Y -B Y -A X -A Z -B X -B X -B X -B X -B Z -B Z -B Y -C X -A Z -A Z -B Y -B Z -B Y -A Z -B Z -A Z -A Z -C X -B Z -A Z -A Z -B Y -B Z -A Z -B Y -B Y -A Z -B Y -C X -B Z -B Y -B X -C X -B X -B X -B X -A Z -A Z -C Y -A Z -B Y -A Z -C X -B Z -B Z -C X -B Y -C X -B X -B X -C X -A Z -B Y -C X -B X -B Y -A Z -B Y -B Y -C X -B Y -C X -A Z -A Z -A Z -B Y -B Y -A X -A Z -A Z -B Y -C X -C Y -B Y -C X -A Z -B X -A Z -A Z -C X -B Y -A Z -B Y -C X -A Z -B X -B Y -A Z -B Y -B X -B X -C X -B Y -C Y -A Z -B Y -B Y -C Y -B Y -C Y -C X -A Y -A Y -B Z -B Y -A Z -B Z -B X -B X -B Y -A Z -B Y -B X -B Y -B Y -C Z -B Y -B Y -A Z -A Z -B Z -A Y -C X -B Y -B Y -B Z -B Z -B Y -C X -B Y -B X -B Z -B Y -B X -B Y -C Z -B Y -B X -A Z -B Z -B Z -A Z -C X -B Y -C Z -A Z -B Y -C Z -B Y -B X -B Y -B X -C Z -B Z -A Z -A Z -A Z -A X -B Z -B Y -B X -B Y -A Z -B Z -C Z -B X -B Z -B Z -A Z -B Y -B X -A Z -A Z -B Y -B X -A Z -A Z -C Z -A Z -C Z -B Y -B Y -B Z -C X -A Z -B X -B Y -B X -B Y -B Y -B X -B Z -B X -C Z -C X -C X -A Z -A Z -B X -B X -A Y -C X -B Y -A Y -B Z -B X -A Z -B X -B Y -B Y -B Y -B Y -A Z -A Z -B Y -B X -C Z -B Z -C X -B Z -B Y -C X -A Z -B Y -A Z -A Z -B Z -B Y -B X -A Z -B X -B Y -A Z -B Z -B X -B X -A Z -C Y -B X -A Z -B X -B Y -C X -B Y -C Z -C X -B Y -B Y -B Y -B X -B Y -B X -A Y -A Z -B Z -B Y -B X -B Z -B Y -C Z -B Y -A Z -B X -A Z -C X -A X -B Z -B Z -C X -A Z -B X -A Z -A Z -B Z -A Z -B Y -B Z -C Z -A Y -A Z -A Z -A Z -C X -B Z -B Z -B Y -B X -B Y -B Y -B Y -B Z -B Y -B Y -A Z -B Z -A Z -C X -B Y -B X -B Y -B X -B Y -B Y -C X -B Y -B Y -B Z -B Y -C X -B Y -B X -B Y -C X -A X -A Z -C Z -B Y -C Z -B X -C Z -C X -C Z -B Y -B Y -C X -C X -B Y -C X -A Y -B Y -B X -B X -B Z -B Y -C Y -C X -B X -B Y -B Z -B X -B Z -B Z -C X -B X -B Y -B Z -B X -C Z -A Y -B Y -B Y -B Y -A Y -C Y -B Y -B Z -B Z -B Y -B Y -B Z -B X -B X -B Y -A Z -C Y -C Z -B Y -B X -B Y -B Y -C X -B Y -C X -A Z -B X -C X -C Z -A Z -A Z -B Y -C X -A Z -A Z -B Y -A Y -B Y -A Z -A Z -B X -C X -A Z -B X -B Z -A Z -A Z -B X -B Y -B X -B Z -B Y -B Y -B Z -C X -C X -B Y -A Z -B X -B X -B Y -B Z -B Y -B X -B Z -B X -B Y -C X -B Y -B Y -C Y -A Z -B Y -B X -B Y -A Z -C X -A Z -A X -B Z -B X -A Z -B Y -B X -B X -A Z -B Y -A Z -B Z -B Y -A Z -B Y -B Y -A Z -B Z -C Z -B Y -B Y -C Y -A Z -B Y -B Y -B Y -B Y -B Z -B Y -B Y -B Y -C X -B Z -B X -A Z -B Z -C X -B Y -B Y -A Z -B Y -B X -A Z -A Z -C Z -B X -B X -B Y -B Z -B Z -B Z -B Y -B Y -B Y -B Y -B Z -B Y -A Z -A Y -A Z -B Y -B Y -A Z -B X -B Y -A Z -C Z -B Z -B Z -B Y -A Z -A Z -B Y -B X -B Z -B X -B Y -B Y -B X -C X -B Z -B X -A Z -B Y -C Z -B X -A Z -C Z -C Z -A Z -B Y -B Y -A Y -B Y -C Z -B X -C X -B Y -B X -B Z -B Y -B Z -B Y -B Y -A Z -B X -B X -A Y -B Z -B X -B Z -A Y -B Z -C X -B X -B X -B Z -B X -C Y -B Y -C X -C X -B Z -B X -C Z -B Z -A Z -C Y -B Y -B Y -B X -B Z -B Y -B Y -B X -C X -B Y -B Y -C Y -B Z -C X -A Z -B X -B X -B Z -B X -B Y -A Z -B Z -B X -A Z -B Y -C X -A Y -A Z -C X -B X -B Z -B X -C X -A Z -B X -B Y -B Y -A Z -B Z -C X -A Z -B Z -C X -B X -A Z -C X -C Z -B Y -B Z -B Y -B X -C Z -B Z -B Z -B Y -A Z -C Z -A Y -B Y -C X -B Y -B Z -A Z -B Z -A Z -B X -C X -B Y -A Z -B Y -B X -C Z -B Z -C X -B Y -B X -C Y -B Y -C X -B Y -B Y -B Y -B Z -B Y -B X -B Y -B Y -A Z -A Z -C X -B Z -B Y -A Z -B X -C X -B Y -B X -A Z -C Z -A Z -B Z -B Y -B X -B Z -B Y -A Z -C X -C Z -A Y -A Z -C X -C Y -C Z -B Y -B X -B Z -B Y -B X -B Y -A Z -B Y -C X -B X -B Y -C Z -B Y -B Y -B Y -B X -B Y -C Z -B X -B Y -B Y -B Z -B X -B X -B Z -B Z -A Z -A Z -C X -B Y -B Y -C X -B Y -B X -A Y -C Z -B Y -B Z -B Y -B Y -A Z -B Y -B Z -B Y -B Z -B X -B Z -B Y -A Z -B X -B Z -B Y -B Y -B Z -B Y -A Z -B X -B Y -B Z -B X -B Y -B X -B X -B Y -B X -C Y -B Z -B Y -B Z -C Y -A Z -B Y -A Z -B X -A Z -A Z -C Z -B X -C Y -A Z -B Z -B Z -B X -B Z -B Y -A Z -B Z -C Z -A Z -C Y -A Z -B Y -A Z -B Y -A Z -B X -A Z -B Z -C X -B Y -B Y -B Y -C X -B Z -C X -A Z -A Z -C X -B Y -B Z -B X -B Y -B X -A Z -B Y -B Y -A Z -B Y -B Z -B Z -B X -B Z -B Y -B X -B Y -B Y -C X -C Z -B Y -B Y -B Y -B Z -B Y -B Y -B Y -A Z -B Y -B X -B Y -B X -B Z -B Y -B X -B X -A Y -B Y -B X -B Y -B Y -B Y -B Z -B X -A Z -B Y -B Y -B Y -A Z -B X -B X -C Z -B Y -B Y -A Z -B Y -B Z -B X -C X -B Y -B Y -C X -C Z -B X -A Z -B Y -B Y -B X -B X -B X -B Y -B Y -A Z -A Z -B Y -B Y -A Z -B Z -A Z -C X -C X -B Y -B Y -A Z -A Z -C Z -B Z -B X -A Z -B X -B Y -B Y -B X -B Y -B Y -C Z -B Y -B X -C Z -C Z -B X -B Y -B Y -B Z -A Z -B Y -B Y -B Y -B X -B X -A Z -A Z -B X -B Y -B Z -B Y -B Z -B Y -B Z -C X -B Y -C X -B Y -B Y -C Y -A Z -B X -C Z -B Y -B Z -B Y -B Y -B Y -C X -B X -B Y -A Z -C Y -B Y -A Z -B Y -B Z -B Z -B Y -B Y -B Y -C X -B Y -A Y -C Y -B X -B X -B X -B X -B Z -B X -B Z -B Y -B Y -A Z -B X -B X -A Z -A Y -B Y -B Z -B Y -C X -B Y -B X -B Z -C X -B Z -B Y -B X -B X -A Z -B Y -B Y -B Y -C X -A X -B X -C X -B X -C X -B X -A X -B Y -B Y -B Y -B Y -B Z -C Y -C X -A Z -B Z -B Z -B Y -B Z -B Y -B Y -B X -B Z -A Z -A Z -B Z -B X -B Z -A Z -B Y -B Y -B Y -B Z -A Y -B X -B Z -B Y -B Y -B Y -B Y -C X -B Z -C X -A Z -A Z -B Z -A Y -C X -B X -B X -C X -A Z -A Z -A Z -B Y -B Z -A X -A X -B Y -C X -A Z -B Z -A Z -B Y -B Y -B X -B X -B Y -C X -B Z -B Y -B X -B X -B Y -B Z -B Y -B Y -B X -B X -B X -B Y -C X -B Y -B Y -B X -B Y -B Y -B X -B X -A Z -C X -B X -A Z -B Y -B Y -B Z -B Y -B X -A Z -C Y -B X -B Z -B Y -C X -A Z -B X -A Z -A Z -B Y -B Z -B Y -A Z -B Y -B Z -A Z -C Z -B Y -B Y -B X -B Z -B Y -B X -B X -B Y -B Z -B X -B Y -C Z -A X -B Y -C X -A X -B X -B X -B Z -A X -B X -B Y -B X -A Z -B Z -C Z -B X -B X -A Z -B X -B X -B Z -B Y -B Y -A Z -B Y -B Y -B X -B X -B X -B Y -A Y -C X -B X -A Z -B X -B Y -C Z -B Y -B Y -A Z -B Y -A Z -B Y -A Z -B Y -B Y -A Z -B X -B X -B Y -B Y -B Y -A Z -B Y -B Y -A Z -B X -A X -A Z -B Y -B X -B Z -B Z -B Y -B Y -C Y -B Y -B Y -B X -B Y -A Z -C X -B Z -B X -B Z -A Z -B Y -B Z -B X -A Z -A Z -C X -B X -A Y -C X -B Z -B Z -C Z -B Z -B Z -C Y -A Z -C Z -A Z -C Z -B Z -B Y -C X -B Y -B X -A Z -C Y -B X -B Y -B Y -B X -B Y -A Z -A Z -B Y -B Z -B Y -C X -B X -B Y -B X -A Z -C X -B Y -B Y -B Y -B Y -C Z -B Y -C Z -A X -C Z -B X -B Y -B Y -B X -B Y -C X -C X -A Z -B Y -B Y -C X -B Z -C Y -B Z -B Z -B Z -B X -B X -B X -B Z -B X -C X -B Y -C X -B X -C Z -B Y -B X -B Z -B Y -B Y -B Y -B Y -B Y -B X -B X -A Z -B Y -B X -B Y -B Y -A Y -B Y -B Y -A Z -A Z -C Z -B X -B Y -B Y -B Z -C Z -C X -A Z -C X -A X -B X -B Z -B Y -A Z -C Z -B Y -C Z -B X -A Z -B X -A Z -B Y -A Y -B Y -B Y -A Z -C X -B X -B Y -A Z -B Z -B Y -B X -B X -C Y -B X -A Z -B Z -A Z -C X -C Y -B Z -B Z -A Z -B X -B Y -B X -C X -B Y -B Y -B X -C X -B X -B Y -B X -B Y -B Z -B Y -B X -B X -A Z -B Y -B Y -C X -C Y -C X -A Z -A Z -B X -B X -B Z -A Z -A Z -C Z -B Z -A X -B X -B Y -B Y -A Z -B Y -B X -B X -B X -B Y -B X -B Y -B Y -B Y -B Y -B Y -B Y -B Z -A Z -B Y -B X -C X -A Y -B Y -B Y -B Z -C Z -B X -C X -B Z -B Y -B Y -B X -B X -B X -A Z -B X -A Y -B Y -B Y -C X -A Z -B Y -C X -B Y -B X -B X -B X -C Z -B X -A Z -B Y -B Y -B Y -A Z -A Z -B X -A Y -B Y -B Y -B Y -B X -B X -B Z -B X -B Z -B X -B Y -A Y -A Z -C Y -B Z -C X -B Z -B Y -B X -A Y -B Y -B X -B Y -B X -C Z -B X -C Z -B Y -B X -B Z -A Y -A Y -C Z -B X -B X -B Y -A Z -B Y -B Z -A Z -B X -B X -B X -B X -B X -B Z -A Z -A Z -C Y -C X -A Z -A Z -C X -B X -B X -B Z -B X -A Z -B Y -B X -B Y -C X -A Z -B Z -C X -B Y -B Y -A Z -B Y -B Y -B X -B Y -C Y -B X -B Z -B Y -A Z -B Z -A Y -B Y -A Z -B X -B Y -A Z -B Y -C Z -B Z -B Y -C X -C X -B X -B Z -B Y -B Z -B Z -B Z -B Z -A Z -B Y -B X -B Z -B Y -B X -A Z -A Z -A Z -B Y -C Y -C Z -B Z -B X -B Y -B Z -B Y -A Z -A Z -C Z -B X -B Y -B Z -B X -A Y -A Y -B Y -A Y -B Z -B Y -A Z -B Y -B Y -B Y -C Z -B X -B Z -B X -B Y -B Y -B Y -C X -B X -B Y -B Z -B X -B Y -B Y -B Y -B X -B X -B X -A Z -B Y -B Y -C X -C X -C X -C X -B Z -A Z -A Z -B Z -B Y -B X -A Z -C Z -B Y -B X -C Z -C X -B X -B Y -B Y -B X -B X -B Y -A Z -B X -B X -B X -B Y -A Y -B X -A Z -B Y -B Y -B Y -C Y -B Z -B X -B Z -C X -B Y -B Z -C X -B X -B X -B Y -B Y -B Y -A Z -A Z -A Z -B Y -B X -C Z -B Z -B Y -B Y -B Y -B Y -B Z -C X -A Z -C Z -B Z -B X -B X -A Z -B X -B Z -A Z -B Y -B Y -A Z -B Y -B Y -C Y -C Z -B X -A Z -B Z -B Y -C Z -C X -B X -A Z -B Y -B Z -B X -A Z -A Z -A Z -B Y -B X -C X -B Z -B Z -B X -B X -B Y -A Z -B X -B X -B Z -A Z -C X -B X -B Y -B Z -A Z -B Y -B Y -B Y -C X -B Z -A Y -A Z -B Z -C X -A Z -A Z -B Y -C X -B Y -B Z -C X -B Y -B Y -A Z -B Z -A Z -C Z -A Z -B X -B Z -A Z -B X -B Y -C Z -A Y -B Y -B Y -B Y -A Z -B Z -A Y -A Z -B Z -B Y -B Y -A Y -B Y -C X -B Z -B Z -A Z -B X -B X -A Z -B Z -C Y -A Z -A Z -B Y -B Z -B X -C Y -B Y -B Y -B Z -B Y -B Z -B X -B X -B Y -B Y -C X -C X -B X -B X -C X -A Z -B Y -C Z -A Z -B X -B Y -B Z -A Z -C Y -A Z -B Z -A Z -C X -C X -B X -B X -B Y -B Y -B Y -B Y -B Z -B X -B Z -C Y -B Y -A Z -B Y -B X -A Y -B Y -B Z -C X -B X -A Z -A Z -B Y -B Y -A Z -C X -B X -B Y -B Y -B Z -A Z -A Z -C Z -A Z -B Y -B Y -B Y -A Z -B Z -B Y -A Z -A Y -B Y -B Y -B Z -A X -A Z -B Z -B X -A Z -B Z -B Y -B Y -B X -A Y -C Y -B Y -B Y -B X -B Z -A Z -B X -B X -B Y -B Y -A Z -B X -C X -B X -B X -A Z -B Y -C X -A Z -B X -C Z -A Z -B Y -B Y -B X -B X -A Z -C Z -B X -B X -B Y -A Z -B Y -B Y -B X -B Y -B X -A Z -B Y -B Z -B X -A Z -B Y -C Z -C X -A Z -A Y -B X -B Z -B Y -B Y -B Y -B Z -B Z -A Y -C X -B X -C X -B Y -B Y -B Z -B Y -C Y -C X -B Z -C X -B Y -B X -B Y -B Y -A Z -B Y -A Z -A Z -A Z -A Z -B Y -A Z -B X -B X -B X -C Z -B Z -C Y -B Y -A Z -B Z -B Y -B Y -B Y -A Z -B Z -C Y -C X -B Y -B Y -B Y -B X -B Y -B Z -A Z -B Y -B Y -C Y -B Z -B X -B Y -B X -B Z -B Y -C Y -C Y -A Z -B X -B X -A Y -B Z -A Z -B Y -B X -B X -B Z -B X -A Z -B Y -C X -C X -B Z -A Z -B Y -B Y -B Y -B Y -B Y -B X -B Y -B Y -B Z -B Z -A X -A Z -A Z -A Z -A Y -C X -B Y -B Z -B X -A Z -B Y -B Y -B X -B Y -B Y -C Y -C Y -B X -A Z -B Y -C X -B Y -A Y -B X -B X -B Y -C X -A Z -B Y -B X -C X -C Z -B Y -B Y -B Y -A Z -B X -A Z -C Z -B Z -B Y -B Y -B X -B Y -B Y -B X -A Z -C X -C Z -B X -B Y -C Y -B X -A Z -B Y -A Z -B Y -A Y -A Z -A Z -B Y -B Y -B Z -C Z -C X -B Y -B Z -B Y -A Z -B Y -B Z -B Y -B X -B Y -B Z -B Y -B Z -C X -B Y -B Y -C Z -A Z -B Y -C X -B X -A Y -B Y -A Z -B Y -B X -B Y -B Y -B X -B X -B X -B Y -B Y -C Z -B Z -C X -C Z -B Y -C X -B X -A Z -B Y -C Z -A Y -B Y -B Y -B Y -C X -B X -B Y -B Y -B Z -C X -B X -B Z -A Z -B X -B Z -B X -A Z -B Y -B Z -C X -B X -C X -B X -B Y -B Z -B Z -B Z -A Z -B Y -B X -B Y -B Y -B X -B Z -B Y -C X -A Z -B Z -B X -A Z -B Y -B Y -B Y -A Z -A Z -C X -B X -A Y -B Y -B Y -B Y -A Z -A Z -A Z -C Y -B Z -A Y -B Y -B X -B X -B Y -C X -B Y -C Z -B Y -A X -B Y -B X -B Y -B X -C Z -B Y -B Z -B X -B Z -A Z -B Y -B X -B Y -A Z -B X -C Y -B X -B Y -B Y -B Y -C X -B Y -B Y -B Y -A Z -B Z -C X -A Z -B Y -C Y -B X -A Z -C Z -B X -B Y -B X -C Z -B X -B Z -C Y -B X -B Y -B X -B Z -B X -B Z -B Y -B Z -B X -A Z -B X -A X -B X -B Y -B Y -B Y -A Z -B Y -B Y -B Z -C X -B Y -B Y -B Y -B X -B X -B X -C Z -B Z -B X -A Z -B Y -B Z -B Y -B Y -B Y -B Y -C X -A Z -B Z -B Y -B Y -B Z -A Z -B Y -B Z -B Y -B Y -C Y -A Z -B Z -C X -B X -C Z -B X -B X -B Y -B Y -A X -B Y -C Z -A Z -B X -C Z -C Z -B X -A Z -B X -C Z -B Z -B Y -B Y -C X -A Z -B X -B Y -B X -B X -B X -B Y -C X -B Z -B Y -B Y -B Y -B X -A Z -A Z -B Y -B Z -B Y -A Z -B Y -B X -A Z -B Z -B Y -B X -B Y -A Y -B Y -B Y -B Y -B Z -B X -B Y -C Z -C X -B Y -C Y -B Z -A Z -A Z -B Y -B Y -A Z -B Z -B Y -B X -A Z -A Z -C X -A Z -C X -A Z -B Y -C X -B X -B X -B Y -A Y -B Y -B Z -B X -B Y -B Y -A Z -B X -B Y -A Z -A Y -A Z -C X -A Z -C X -A X -B Y -B Y -A Z -B X -B Z -B Y -B Y -B Z -B Y -B Y -B X -B Y -C X -C X -B Y -B Y -B X -C Z -C Z -C Z -C X -B Y -C Z -A Z -C Z -B Y -A Z -B Z -B X -A Y -B Y -B Y -B X -B Y -B Y -C X -B Y -A Z -B Y -A Z -C Z -A Z -B Y -B Z -A Z -B X -B X -B Z -B X -B Y -A Z -B Y -C X -A Z -C Z -B X -A Z -B Y -B Y -C Z -B Z -A Z -B Y -B X -B Y -B Z -C Z -A Y -A Z -B X -B X -A Z -C Y -B Y -A X -A Z -B X -B Y -B X -A Z -C X -B Y -B Y -C X -A X -B Y -A Z -A Z -B Y -B Z -B Y -B Y -B Y -B X -B Y -B X -B X -B X -B Y -A Z -C X -A Z -A Z -A X -A Z -B X -B Z -B Y -A Z diff --git a/2022/03/input.in b/2022/03/input.in deleted file mode 100644 index 253c811..0000000 --- a/2022/03/input.in +++ /dev/null @@ -1,300 +0,0 @@ -PPZTzDhJPLqPhqDTqrwQZZWbmCBMJMcsNmCBFWmMcsNb -vplSlfdfGvfRRGsgNcMglsFWMWMC -jtjvFHdjjwqrwqwL -NSffhsNSjfLjfstsjtjNNjjqMqnpggHngqgHGHCgClGbCzCC -dDPZZDZFdwFWwFZFWZRTFDwGzCMlgnpgCpnzglClHMbg -DTPFZQRcdTVNhbjVbcLc -JZLDcSZSpHHrrLrJcpzBRrhlzgRTmTmvBRmm -qQsQMCbMQWqCVVvmTRhTTRhCRhTg -svbGWPqGPNLJSpZnZpnN -wLtPGCLwfWLflCPtPfLLTSbHMbSgMdtvDHghhHvdgZ -nNsFznJcJqzFFszFqrNnRzdbZDDbRMbMdRHbMdgHvZSd -VczNnjsrFrjcNprqVwTPfjGllWPQBBWlgB -nnGtjFFjFTTTGtBGmWBTWffLcMJMQlzjQPCPcChCQDJzDJJd -SSggbHVbZRgZsHZRHdVhzCcJhzhMzJhQPQ -rHsNSsSZqqrNgpLLWmCfFGqGCBWm -ZnCtCCVZmVBCQBWQnWQNCQMcLrMMgMLqLSwMSSDwjcBD -hTbGJGfTbrSfScmjwj -bbGGlTdlJTdGlFpdFvJdsbmdZWPWtnVCHQvtVHzvtHWtCtVN -pNpCNFMNFhhwDgRVdSVqwgrdmJ -nvHbPZtTHWbntTmdTRrqVRrdmz -vHWPBWvntbWnHLHZLqWtBCjjhBNhCjGjjNjDNChlFC -CnFbFzpzJbsCRpbRpbnPCnJLTtwQtjdtcttHHHDtDPjQwTHB -qGrflmrNgvvmGqcdwrtWQHwTBHQWtj -mVMvSclGqvNVMMNVsZsnJJRJsbzpSJpJ -cJTcRllRldjZlFcbcFJrrvqCCVTNNVWSPpQNmpQqCPVC -wGLBfLzgBfzHGGGnLDGDGgwHqqHmVSWqpQpCpQRWVWVNpS -DRshRBLMhZlFZMJvlJ -SdGbmRGddMcfbWWSptssDHssGDNsjCCC -glPLTzczrCpNNsHTst -gqcZJPrBlhJgPndMVJbWMVfnWV -qNbmLmndBQqjsCPLZsLPZz -pwfhfCvJvvTMGzSjzPSPjcZp -VvvJVMCrvTRwgvwWvqNmqblNHtBWqQWlql -WNJmddmpFmMMrnlFddlWTHCHBRcnCBTRzTDRTwTz -qffLvLLvbqhqPbjbqRGPSqVtPDTTwTwTDzCBCccQczssCwcc -tfhGLhqthZVhbfpFRJMMMrJrZpmZ -VVgSmdqFpMddqSfpfVVWQvzTPvTWPrpsQPQQJv -ZCnRCDwRWCPrTrsW -HwRNLLsnHRNjtRSqNqMmfqVVMbqg -slqwzGvWqMsvbmTzTCBhhBhgcgjbCPCchc -tJVJSZStQdMQSdntJHjFNFPCNpjFCPcFFdhB -QDrRVZSnrQDVVRRtRHHWGmzTDDqMqMfzwswWsl -rFBrJFcrWHzCLFHqSg -PdVjfjlGPRzRGtGLRC -TQPMpMVPDDPfPTMMPpTWWrhbcbTcWbzzcsmTmb -ZDQDZDJNqqNbwQPgtlGntHlVGlPPrf -vhmChcgvMCdvzCvvHfdntBHGBldrHBVG -cCpTCLvmjhpjzSTTLSpwbDqjJQFZgNDwJssFDw -LfMFLwMwdrFmWBJD -tVlHqqVTHRtmQggrjQqDJg -VDntHnDGRntHPbLPPLLZhcsLPLww -FBLddLctDQcbCLltbdCRdLQVNVDjnPHVnsjnPqVSHNNVTP -vGmwrZZWJpfWfmvZgZJjSTPqsTrVPTrHTssNPP -wNZJffhNWmhvMhgwMZpvNJtbQRtQQLdFhbQFClLBCBlc -npvSWJBCDDBBDSvCZSpJdsTZsRhTdgMgPdhqHHqR -bjtwqLrtmfmtLVjVLQHHHdgwTTHMssMTGHhH -VtmVVNtqlllpJvnnnS -nCqrnLSSGnpjBjBGbcbPbB -vfdVdtdgMMrFgHfHPcBcPBjwQDjFbwDB -zgHWMmgHmWfWvVvRRzLCSCJsZNpJZSsrnssW -bBjWlfrrnClSssMMFmVVhMjgMpLM -dRDqDdzQrDdhqMMPtVLgFL -THDRwHDNDdQdcDvTcZbBGBGrZZnZcrlb -jgSVPVsVmshhsCQm -vmFtcDBfDFLrvTFZvLFvWzWhHwCWHnwHnCQCcwnq -FmDpFBmZZFrDbDfDtmLNgMPNGdPjRdPlPPpMVN -VVJGdSHZnnHdgFntcschhccvvPvtstPq -mLNjNQFBpPlPvNqs -LMTMMRDwwMMSGZzRnnGbzF -JFFfVrvVmHfGmHFvmrSQBQlSJLlShLlgBqwJ -DMCdpCbtgbcCCNpbCCPgRqdldBRQRBRwLsBSLhQs -cgbcPbpcWDWjNCZDWWZttDDGrHzznHzjGzmHnVjVvvVnrz -rtGTmSTGNtvvgfNGSbfwWWvJqwcDwwJPWcwWqD -lZhdHzFhLZhdBcWsWsWmwPcFqW -BhhjLzhZCCdhgCTtCSMmMrbt -FrzSRNrWNFdNhcRDDdrFWCVVZZZmjJbJSPlllgllVbgT -nQGGHqvHMVVpMLGffqtwLMtwlmPbTbjZPJmllLJBmZmZlZbP -VMvvpvQttHqnsvhhzhdrcdWNchsW -BzRTBbWVQNdngtDFVprDFrpF -vhfhSJvbhwSpDDFZHfMpHp -JhmvJsLLJLJqmsJLbsGGjvNRzzBcTBNlRNmnRTQdzzzn -vpCLrTcpRmncrncLcnccvLLNWVsRbhbtsQbJbVQWtWlWbW -PfFfdjdSjPffMFsQbNhlFssFNQ -zBDsjgfZHczLHTHC -BnvpJnVgPWJzczpnvnWVWRGTrRTGmmBhRmBmThrmrf -dNlwjLNLlbLSjLQVdLdjjSTRHmRmTTNmmRRtfTTfhThs -FSSSqbVDQZzzPPPFZc -fTTrrBqwfDTWfTDrRNrnRjgPSpJPnnmp -PvHPbsvZlMtbbvbCLLMHtHZZjtgJRjSnJSpSpjRgRjggSRmn -VLHbCbVPLZvlvMhHCHlPHbLCqQQfdQTBddTWhDTBchQzQwBW -ZBHHfHWLfLqjfLjHZBSDwHDWhvpFCQqNpvVNVNQCFPJvPQCF -zMrtclbdvFPSpdFp -rGMMnnGgsbzblRnlSrzSgRRDwLWjLjTTDBZmfLwZmDBf -rfJVfnztTfZFMfZq -cRGcdddPRbHvHCRHRmShqFrPSTmTPjSjZT -NvRHGGdNLrNJsDtL -dgggppRqnlnjbbjRwzmtHb -ZTPhrVvMZhrVQPZNCMZQjjbFtjmswwFtzVmLGbmL -rZhPCPPcNPNTMfvZPCvhMPSBpgSqSqfpDgJJggdwWJgg -TsgFbTQSZZsSJFThhggQFshpMSzRRRDPwwzPwDftRDrczLww -GCmnjCNjmlVdHNfdGNjMwPrrLwLcMcrcRHzMHM -nmmBnmlWlVWvjnNlpfFQbZsFpQhgJFpB -jfpdTTqqJpDfQrscgsDh -mNFmHHtVsVQrsllG -CmFtZPHNzzpBspzpLBqw -RsgJsjsZbTjmZZMMJPtCSPPDhCSrDhrjhC -lBwzHLQddZlLQnChGdtDhrnqhq -fLHpNQQpwvHllQVQHNNfHpzZMFWbccmTcbJMcFsWTRVbsTWF -DhHFMRDDmLmshTmSCpSWZVNHtCCNnW -fJJPBvlvlBflQQfQtNWtQzpSWZNtCZpN -vPJbdvBfqhqhShTFMs -lttWShphLtWWGppCQLlwZTHZHmfjjvwvHFmw -MFNssMMDVzrrnTmvJTHwJmZmZr -MsBznNznRgzzncFBLQQGGBBtdhdGpWPp -JFmvMWBmBlbBCZrZrH -DjRRjgffgjqwsDqrcHNNbCZbCbbN -sSffwRVjjDVzfjSjswDSQLdPrvGvFMmMJMMJmnWzGL -RbvwgbTVgzGTrhvWDmNDGJfCDffMmNBD -PjSlqldccqFLSqQLCpJfpWDCcCJZBpMD -jlHdPlqqSnjHggWgwrhzRz -WsJnWnmCJpTnLWmJLCSDVVmhNjRbrDRgrgZRhrjrhhgdZN -QlFfQBqlBwBqBffMFPsbgdgwsrZjrPNrNs -MvvvlHBcfBtvffGBcMqqqLpmLsJtpSLSCWCVCnnTzJ -QSRRwSWPhWhwwHbtsNGZNRNZTgRcmc -nfvDCrnnDvJJDDVMLNgtsZmZsVtZGgqmGp -nCngDlFfvvJLnCJJLMFMClHBBzQzwzbhlQHHPllbBhdb -qNFzGFFFnGGDJnzSdFdzjdvmCvzPzzRmgCmMmtgvcmtV -sQlhpLpWQQZpQZpQrBlLsLLCRggtMgVbbtggBmVVmbmBVm -ppQHRflRSGTdHSGN -BgTnWbbwPgPWgPGfGlWfdFFFlsSF -QvDNDZRMjCNZcHZZDQFShGFpBhdRsGpLsFRd -rrqvNcHjBcJgrTzbPVVz -pCjdsSdCljdBlpJpdmjHFHmDfTDTwgfgcw -WQrWnGzhNZzWfcnHfBwnvwHc -RLGNGQhWZhMrZNtBpsLPsVJbPLVb -TRDDSzNhHNHfSppCCMZsMMssdgZvfZ -GbGlctGqrBqVtrtLGtmqTtssPdMZcCZMnMvCZgdddgsP -BQqbVVVqLtBqWbTlmLBhQjFhJDRpHhzpJSJDNF -FTHTnPSmFqSPCTVDhZRCZDhjDRsV -blbLcBgMgMlrcLMbzrlBLZjRVsZZfNVfVfJsbNqDDh -tLtLQgzWMzSnHmPSWdqW -DnwmFcpmpGqFwCwmfCDMZsNVVMdlVrsNsczrrl -ghtBPJbHtWPbJPdBSPMzsrTTzZMTTMSNzrVZ -bPdjjhtPPJjjBQJJdbhRgJhLCnfLGGmLnGLpLfDRGGfpqG -HzzZZjCLjjZCmVQppssbGpmcTGgp -nMnJPqJlMPqBJllSJvlMSDGGBcgBcsfBhTpsFhgTTfFQ -drSRqnSqJDcSJrMJnRvCHtWZtjZZrHtVjrwZLj -mDJjmQggstPvDWJgQWJgPPmNFFLZpphZNlNpZLhSLvLZNf -rzzfTczCzCdBwddcCCHFpHFMNHZSHMFrHNFp -bcfzdGnCtVsVtsWn -CMfCfGfwbMMLdTMH -lqzDgLWqQWhQNWnlQqHTFFFFchbddTRbSddd -WnzDNZmPZmgglNCrvjrtrLffrJZJ -BllCMzjjlBHCCllHvljCMhbrQbTVTrvprTqrFWFFvF -ZNwfNLRnfwtRtNwqThVFpwWVJrbh -LnRnpNRSLcpZZNtmZmjgGgGMPBHCmMzsmsHM -MRMPpwWTLMMMMLLRMPbvfQZCnqQnqvWZWGqGDQ -gJslgmlmSZqssGGbnV -mJFSmmjcdmgJhdgrdjcdjwbRwpMwpHBRHrztwtRMRL -CccctqnQVvQcrsFwznmnrBrs -LLPThTSjPdJjLTtMBrsDmbbsBwbswGMF -jLSLWPLlTlgSlgSghdvtQZvqvWRcCpHVCqWp -DmggMZCDbdNrttnbPn -cclqSqGjSBwLqswNrFNzffFfNPsCsd -jGpLBcwlQBSpLjSQLvjRTZHTCRRDggRTHhmvmV -LWzrnwZFnzQlWQZndWFNvHBNDVBBNjplNjjVvV -RCSmPSCgsgTmCRqnsTCHvjJJpvBBSVSMpVjVMJ -sfgsRGnRTghQWWbLwfhF -JnJlTnDnwtWHMdJt -phNPDPVvPcPPvMRqVZRWMqRRWM -fGGScQDfssQzLbgT -rLVVdSSvVzQSRnzSRRnBQMJqDTjMsMsMqqPPhP -wmbWWFGVlGfptbhshsTmhqDPJJMm -CbWtWlCNpglgbtCWtFHdvNHVZnZZVnNVHHcc -qtRszqSZVnTCVwwLJpcgppLHqp -MPvBGNnDWMGMPDvGBPvMBFvpppjHwHpJJJJJFjjwLcjLJg -hBfPNvGvhDnvMPdslCZCtVsRRCSZff -HgvgvLNDcCcNBPDDvNNBzLNBnnhQqwRnRLQhWRhhWssqsnZZ -FlfprJzttrrTlGpbJVQhRwwbnbsRWVnZss -FGmdJrFdJddmjFfTttpfftlDvHSDgCDHgvSgHPcBzMHSzj -dgHhCJbBbwgNcVzlvzvzQVzH -RZPjRRRDPnjrjSnfFrDsnvzWVlzLfGzvBVWccclcGl -nDDZPjjRnZmFstnZBrsZgtCgbtMdqbJdNqMdgdwg -LvdrGnDBGBGrvrGLJtdrmmcfClqllsqlmjsLmcQC -VpbwbwTSVVwpzZMRSVmsjDqCclclNZCjNjQq -PpzWwRMwTwFpwtJBHnhtdnDvvP -GCJSClmwzmSgrpPpSpgcrS -bjLpsspHMHvBTsDLjTDtbTBFRFrQQQPcgQgcFcFPcFcnPs -pBTBvqBHbDjHfJqlGlzWJGllWC -GgbGNjQGzzQvFcFfRFmFJbff -pHDSLLCqpqppPZVSCSDdncRFwfmZcRWRJfncmRJn -LDTTLSSDSMQgvNTmzz -bLjgLVlJnjSJjgLgLjqqMcMfddftcCCnCccfQfsC -FRRmphNRmmdwPHpBPswDftDzMCfMcfWMMC -FrvdvrPPFHhNRPvFRmFZVbggqbGjJglJbjjTrVjJ -cSpdczpfRQQGNGGqvGHv -wPwFPhCFWbbmChwWmhFPsWrsDVwqVqZqvVVVvzGHDZqHqtZz -gbPznCbPmmWrWbWhJRpLnLRnTcScRSSLBd -pfwbrjTbDczbzbPcwTQbvWdWWTdddSldVHWSgHgn -mQmFQRFssJJJJthtJmBJmCHMdlWdnlltnHSVlSlgtnvM -BJBhRhRqRLRJNhJhBDwjzPPPcNQZrZrzDr -HTHwQJzwLZNcTwJtFRFHDtFvRFRFdr -jlMnMlbqqpMBvsWBVGRRGdSVgrDthFDddh -qvMjjMMpbPWqmMjnlpplpnWscNwLCQPzQLfzTzcZJfLQLPJz -gCTHTVdPdPvFfdCCSScZSZncMMCGGM -LNqLlssmWlLqzBRzWBwWBRRZdmJZcSSQDncnJtQcGDDDMd -jszNLwNWRRrzNbhbvHpdTjdvfH -NgDWhQmhfFlWFWlzDfhpBwfPBBdwwBJRBPqJJB -HHMCcHtGcMMbSGjScMGLSsRnqdJJlqqpCPJBRpBRdp -trMtLVtjjVtjttGctrLLTlZmgFzZTZzZNQmzZDNFhgFD -MBMtFzBnzSJJttSZBNNZfTsPqTqqqNZNPc -LlQDQLVCwCDbfRCmRGVjCwLLcqslNcNPgqgTPTsqNNsvqHqs -RfffRmdjnnzpndtr -nzpnDRDVwRRjVTSlTtlSSCQLDC -vgZHFBbbfCbvFbrFSSTqqcGtGTtBGQqS -HggMfPfbFZbPvNvgZZdHsnJjCzphzVwJjsmpmjMw -FgvgrgDpRDGTTWVDVd -zmbnNhHHQHshhhcbnHnnbBTMBMLLWLLGMqWLfzLLTV -mnnQHjcHHJmnNcHnnhmvZpRrCVZVZFrRJZVPFr -ZhpVhCSHbsCPbnmF -GBWGGrftTJlrfttQqsVPbPnGjDszFVncsG -qfMlQJWBrNWQfftqrQqBhRvdVVSNVSpZdvSZwZRS -mfzRQqMrtCwLMMZM -sbVbWgFdJCldtNRPNZ -FpggcgsjJccJVJJJcbbWWGrHnfmBnrHzfnfzvqrQmpfR -rWvbrfLnHHnzlFrFWWzJfRQQTwbwRQmQQCgQTwQBwg -MPsqcZpZdpjGMptpqCSsSwRNjQTBhgwhmgwgmmwgBm -SZqqqCDGMtpMFFDvFHfJlvDJ -RZnrZLZbLjRZwdlrnbLClCHMNCTlMMWBPPTHlT -SDgDzQDcfzJBNPssWCwSMN -fpQJwmmQmjhjGRbr -jQzqvLzvMTTQMMSS -VJlSrnBRZbbJbVnWWBlVWRCSNTMppMBMmmNPHMcNBmTMGmHp -CtDZJllRClbFzLtszhqFqS -VwcwzBdmMzJSdMBzzGndGSmlbqbgZgfblTJrTbrqZbTlTb -tRDvCvCRDCDWtPjCHjvDWTgZLfNqclZTTrNfZtLbLc -DDvPhhRRvjFjHPRjvVdMwhnpwBSGcwSGcc -LRtLJSNLdNLjNLRRNdRzVmVrggWmmmpVmpVvBBWFvm -wqfZnsMnhCnlfGPCCqwphJpWrFHBWHrvTrTHTH -ZsbGsflwGtjJbzLLjt -MjdFCjzsQFJQjzbmWHHLPPTfvsLfPZ -cNgpBgplzVvPTvmLPTVm -qNlqpcNtBzjQQCQqJjwJ -cczNGcgNhztlGPCCLDpBSpfVDpCJpSpBWs -nFqnwrRQrHnFHTMnZqQwMnmFsVsfbSSSJBSsfVVDfWVBWbVm -RRFZFMHjrQMjrHZqRjLdchdGtGjzDLgtzN -tzFmNfFNmFclrffhNtNlDWRSdFWnJCnRvRjvJvjD -LMgZgpZLMpPPPVPMMPbjbndWJSnWbWHWSCRbJD -BLwMpgMPgwQpTgTTpMVZMTftcGhhhtrhhcGGzQhsllCN -DWtHFWDHtwsWFHWDWwQblVgnllRBnjvBlVjRVbll -TzChCMGfNhZSLhLhzRRVvvjmczRgvRmv -pZSGpNJhCNGLSNLfMGJfJJQFrDDQDqHHgHpsWPFDttQW -qqccVQZWBVfjzzPVDMJtDtNccCgmtCCm -lvBRHBRGRDDCRmnmbD -SLFpGTSsTSsLFsHGvLvdGvdVwZBzZqqzjdQdZjVfrqwW -dLLwHLTWwjMLRZHCHZglDvjgvvNNDssSsmmN -nPfJPFbnhMJQfnpJGQJfQBBVssglsmsVVmBDsSqDgvNlgv -FbMrPPhrtGbJpnhJpJFFbbpJcwtdZzHZZwHCZdwctzTLcHTw -hCfzfLVbShRwRlBjdzmz -JZhrMMhZgvHFHJnHGgWdpmpnmlpRwBndRBwcBj -rMHFhgHZqtGvrWsbPfPNSbstTffN -dSwQQdSlHtlVQtqqrMZbFBRnBfZRMbDwMw -GTpcgLcvWvGvJzGpZGJpWpfmMWPBmDPRFPMFMmBfbFFW -hpcGhTCsGspLchGGzcpvZNStQHSSlNjjtlttlQsq -nJlhHlLlJGlRnMSsMLsnsSMwFHgwrTBFFwjBjppgpqfwqf -QmzzmbzNcZQQzDVZDcZQNDtzRqRBFTqTjjwpjBBNRrpBwfww -mvQPbQtttVVDzvzmRWCWLhSSslvWLGlW -nSpdSDPpRdrNBhMBMSJJ -bzCTcwzbczCZswMssczmCCgcqBmrQrrmBmqJBVBVNtrVttrq -cvzscgZzwTCsWsZvwTfzljDHnflMGMMndHFDdRPp -sDDnzLVnsMtjnDgfSSbfBjggbqBC -rlrlcppWcGdPrZNccJrSBSmCHqbSqCbSCgCHPq -NWcZgpFFgFpDFnDvtMDFzz -ZpczTjpZcnncHFDn -hSqqJWWWRRhlnFDVSFnQCB -qhNMWfqfMhJJRLRvppDzNZTpPTvwwD -rbSDCwPWwPVcSHcwHspNpNsddszmwGtswN -vBBfgQvBMvMvjLLlllqtBTNNTPPzTztTsRNPTt -vvQnjlMjjjqJqQLSrcDcPWbcHbDrDn -BphwqbwNsjsNsBdDjjhGpsGWzMMTWRTCflfDWSSzfzSlWf -cFnrrHrnZVZQQvFFVvZhRzTCWlSRMSWhZMWt -HvJVvggHvVrmQLqmNqLBbhsssw -NcBqSjGGBjNbZcHwhRVHPwPwPlZR -TvdtdtvFgHwWgdhn -tMJFTvtvFtrLJMHBqNNBzjrQcjqNmB -RrQfLfQvMFdQvLLQVfFcnbSbnwVSnbDslsbSDzDD -PHLjmHqqZCjPglsbwJbqnDbbJl -LNHLhjBHHGRfphphrtfh -FcdMchqcgdchqcfcNWWghNrRrVRjGHFjDJmGFDrRVGJD -zQtvBvtbQzpSzBptzbBznnwZJRDRVmVnGRGrDrHjZGrr -HLspTpQLBqWqLqcNgM -rnqbSSQhsshFqQQnsPSnhbnrzHzzHLNvLHCLFCvVJTlNLJTz -fcffljGBwgmwwftzNdCCdvLvtHNLTH -BjWgMGjjWZMwjjgwgMWpwPlnnqSnqQhnrbPMRDsqQs -hRJhFdNJcrbqbbMF -qZlTTgTvlHnqvllPssQrgQcQwscrQMsf -CClpSnTllZnZCDLHnlNzGSRmRthVmmzqJzhd -DLzSMtDLtzmmlDlMlMDbcrcTDqFvVvVqqTbD -dnZshHpZRChgnszRwRZCpTqqTcwVqFcrVqcBVPqVTr -snRRRdJsZgphCWlWtmJSjWWzjt diff --git a/2022/04/input.in b/2022/04/input.in deleted file mode 100644 index d7f89bf..0000000 --- a/2022/04/input.in +++ /dev/null @@ -1,1000 +0,0 @@ -98-99,3-97 -23-72,23-72 -53-62,8-87 -21-52,36-51 -36-38,37-96 -92-96,4-92 -7-30,8-60 -31-44,43-88 -67-73,45-73 -37-48,49-62 -32-50,1-33 -39-98,38-47 -11-17,18-88 -35-99,36-97 -9-82,2-3 -27-50,4-10 -1-92,5-92 -6-40,4-40 -4-7,2-3 -98-99,46-96 -24-38,23-39 -5-88,5-87 -12-97,12-96 -19-37,18-37 -14-39,14-85 -25-55,24-45 -30-92,31-92 -49-61,50-79 -4-69,4-70 -29-37,29-42 -12-77,11-79 -2-2,4-86 -55-55,54-54 -55-80,81-86 -8-10,7-8 -52-92,42-54 -32-63,32-55 -3-83,2-83 -97-97,8-97 -13-87,86-90 -43-95,42-43 -39-96,39-84 -81-96,36-80 -80-84,51-79 -37-43,14-43 -46-69,45-57 -14-85,5-13 -69-77,70-78 -18-77,14-14 -45-92,22-44 -53-68,53-77 -5-98,5-7 -45-68,45-68 -7-89,25-88 -24-89,24-25 -50-68,49-67 -57-57,58-79 -21-98,97-99 -29-60,14-23 -74-97,2-98 -56-69,69-85 -33-48,6-94 -99-99,22-97 -7-97,6-95 -14-20,14-35 -10-75,10-50 -2-3,4-15 -51-77,55-77 -81-94,82-95 -39-40,39-58 -20-70,19-69 -40-73,39-39 -90-90,21-90 -12-75,10-76 -4-25,1-24 -1-72,3-71 -31-84,85-85 -61-71,27-61 -25-90,24-89 -73-86,73-93 -37-84,25-35 -96-97,82-97 -2-3,5-87 -58-59,37-59 -97-99,31-97 -40-50,39-41 -5-98,6-99 -1-93,93-95 -44-87,43-86 -26-26,27-74 -19-87,1-18 -18-49,16-16 -36-56,56-82 -54-56,55-60 -56-67,66-68 -70-98,27-39 -55-56,2-55 -29-29,30-42 -44-83,46-83 -43-98,73-97 -59-63,59-92 -47-47,24-47 -64-84,64-70 -60-72,61-72 -8-26,9-67 -12-41,41-41 -9-50,51-51 -81-87,86-92 -75-98,97-98 -66-80,7-80 -7-91,8-82 -97-97,2-96 -20-62,21-97 -19-20,20-90 -85-97,85-99 -6-87,2-33 -23-59,23-48 -49-82,48-64 -55-69,54-77 -43-44,43-92 -90-98,10-89 -96-96,10-96 -5-93,2-93 -49-83,48-49 -66-93,58-58 -11-71,10-10 -49-95,73-95 -43-81,43-80 -15-50,15-50 -24-52,51-53 -57-87,57-86 -16-73,73-82 -51-98,52-88 -3-39,39-50 -23-23,24-80 -88-88,44-87 -9-97,95-97 -7-52,51-53 -6-7,6-98 -42-96,41-95 -91-94,4-92 -30-31,31-96 -76-86,75-77 -7-98,6-99 -15-97,14-82 -65-76,66-70 -14-15,15-62 -2-88,2-98 -6-89,5-88 -7-79,79-79 -25-50,25-59 -90-95,56-95 -10-13,14-49 -18-29,30-90 -32-64,64-64 -10-41,11-28 -34-88,35-35 -1-54,6-53 -23-97,97-97 -6-20,3-5 -17-82,16-17 -35-52,71-92 -34-47,25-35 -30-84,31-83 -11-87,11-60 -3-20,3-19 -21-25,26-99 -8-12,10-10 -4-91,93-97 -16-96,10-16 -5-24,4-6 -8-49,8-87 -9-94,8-93 -1-3,2-66 -5-19,6-25 -8-25,7-25 -2-2,4-92 -30-62,61-87 -37-61,38-61 -62-96,50-96 -16-41,15-41 -78-79,80-95 -4-94,5-94 -52-99,9-51 -32-59,81-83 -81-86,82-86 -21-23,21-24 -88-88,18-88 -75-88,35-76 -20-68,18-18 -4-46,5-46 -54-82,53-92 -13-64,65-65 -5-7,8-67 -1-4,4-88 -51-63,18-52 -19-94,36-94 -56-77,56-57 -3-25,55-92 -58-68,57-67 -35-89,35-99 -84-92,83-84 -18-18,19-96 -85-89,87-89 -19-81,18-95 -7-98,6-99 -9-11,10-69 -4-89,4-5 -25-93,58-74 -35-67,67-99 -17-62,17-62 -10-18,19-90 -66-86,84-85 -2-46,46-46 -16-41,41-73 -22-92,11-21 -9-60,6-61 -71-71,56-71 -57-58,27-58 -4-92,2-91 -85-85,85-85 -44-66,23-26 -2-18,3-92 -1-96,30-96 -61-80,60-78 -37-87,36-38 -32-77,27-31 -1-67,68-79 -98-99,7-65 -29-49,30-77 -56-73,57-72 -63-65,64-94 -34-86,81-87 -7-92,7-8 -3-98,3-97 -66-81,60-65 -85-85,1-85 -16-98,17-40 -13-95,12-95 -18-27,7-28 -26-35,34-77 -27-52,27-51 -23-71,22-72 -12-41,37-40 -69-87,69-92 -29-31,30-41 -62-73,61-74 -23-77,23-27 -52-57,51-52 -12-20,11-18 -61-61,4-60 -1-98,2-45 -6-98,6-90 -11-14,11-17 -28-53,22-52 -43-59,67-75 -45-47,46-63 -75-75,44-75 -48-50,51-52 -19-82,7-18 -8-41,14-49 -53-54,53-55 -11-97,97-97 -56-87,30-30 -14-96,15-46 -38-41,20-42 -17-23,23-62 -2-85,4-86 -8-69,6-6 -14-73,13-72 -21-62,8-69 -87-98,88-96 -17-60,61-61 -10-65,65-65 -2-11,13-93 -10-13,14-99 -10-66,79-83 -51-87,2-50 -7-86,8-73 -53-53,54-72 -1-95,2-96 -52-73,52-74 -59-72,72-74 -43-73,74-88 -8-90,8-9 -11-81,80-94 -59-84,85-85 -90-94,4-89 -36-82,36-83 -7-87,96-97 -30-99,36-99 -57-57,30-57 -16-98,4-98 -45-53,44-81 -83-83,69-83 -8-89,90-90 -14-46,4-47 -80-82,15-81 -50-57,58-94 -18-98,1-18 -17-36,35-79 -4-5,6-95 -14-95,15-98 -59-59,60-75 -5-82,6-37 -10-11,10-74 -19-70,19-69 -78-95,77-85 -59-86,58-58 -72-73,72-80 -53-81,82-91 -79-97,80-95 -9-83,10-88 -67-76,67-68 -19-43,30-32 -84-97,7-83 -8-10,9-77 -73-74,49-74 -2-59,6-60 -1-6,6-98 -20-92,12-20 -68-69,68-74 -98-99,99-99 -14-15,15-80 -23-60,23-98 -5-6,5-14 -38-42,37-55 -4-13,5-14 -2-5,3-5 -4-35,3-88 -20-94,94-94 -11-89,10-32 -11-47,22-47 -95-99,26-85 -7-58,6-6 -4-6,5-99 -4-95,4-96 -96-97,1-95 -1-4,1-84 -35-95,34-91 -9-15,18-34 -46-65,66-87 -38-81,38-71 -9-10,9-90 -66-99,1-99 -4-71,60-69 -20-43,20-42 -5-59,1-4 -91-99,22-75 -87-96,62-87 -22-37,21-36 -16-55,85-99 -33-99,33-55 -57-98,58-79 -39-97,96-96 -73-99,72-89 -14-74,15-15 -10-33,10-11 -8-13,12-23 -1-99,2-99 -83-83,12-83 -3-19,19-29 -33-50,34-78 -14-16,16-68 -65-84,64-98 -43-75,75-98 -26-77,8-25 -5-14,15-97 -15-15,16-16 -15-61,14-15 -5-19,18-23 -7-88,8-99 -37-37,33-37 -71-84,18-74 -5-91,95-96 -92-96,9-90 -75-92,3-92 -3-95,3-96 -75-76,68-76 -78-91,16-90 -28-65,27-72 -40-98,34-98 -18-42,19-43 -32-83,83-96 -20-93,20-92 -32-34,31-33 -72-95,43-72 -15-91,14-92 -15-82,15-89 -6-94,6-96 -4-76,76-93 -3-91,4-90 -47-72,71-72 -7-52,8-45 -97-98,14-98 -3-98,6-99 -2-91,3-49 -11-75,13-74 -35-79,36-70 -24-79,23-79 -64-99,63-63 -21-25,27-94 -3-83,2-99 -8-64,33-65 -44-44,23-44 -87-98,64-86 -76-76,9-75 -8-64,7-40 -76-82,75-98 -1-98,6-69 -67-79,66-79 -59-61,13-59 -12-93,43-94 -7-87,82-88 -8-68,8-85 -16-53,7-16 -30-97,30-97 -21-85,22-86 -51-93,44-95 -4-68,2-86 -5-19,9-19 -65-97,99-99 -8-63,27-62 -46-53,45-50 -7-19,20-40 -37-77,9-36 -99-99,54-97 -1-99,1-99 -28-57,28-58 -1-11,3-11 -27-33,28-38 -9-99,10-97 -41-41,41-46 -5-83,14-70 -16-91,90-99 -15-96,96-96 -2-77,1-98 -18-47,17-94 -7-26,7-27 -14-41,15-41 -5-26,6-79 -44-56,45-81 -79-93,80-99 -17-66,35-65 -87-97,39-82 -10-71,6-71 -68-95,51-62 -23-96,26-74 -70-82,69-71 -41-99,41-71 -23-72,22-71 -52-82,48-52 -81-86,86-86 -18-75,74-76 -26-37,32-37 -5-95,1-97 -43-43,42-64 -20-91,21-60 -35-50,35-66 -76-93,13-76 -32-70,32-71 -12-85,13-82 -1-74,5-73 -17-69,16-17 -51-83,51-82 -9-97,7-9 -1-98,1-2 -42-77,28-99 -20-67,20-22 -33-45,33-44 -24-24,25-90 -97-99,6-93 -12-98,11-72 -4-17,5-96 -96-97,1-95 -7-7,7-83 -71-72,71-91 -24-47,1-23 -29-35,30-46 -36-74,7-36 -37-63,61-63 -57-86,19-87 -20-40,40-74 -5-35,36-72 -18-84,17-98 -9-19,20-67 -29-43,29-42 -52-82,77-81 -57-78,9-84 -7-89,9-90 -6-98,27-99 -1-90,40-90 -1-99,3-98 -18-72,31-72 -99-99,86-96 -50-90,9-89 -30-70,29-69 -87-98,37-62 -32-69,11-31 -2-20,3-64 -1-43,1-47 -16-93,17-93 -28-50,49-51 -48-97,17-47 -64-80,65-66 -7-98,85-99 -7-39,8-92 -26-82,26-27 -43-93,43-52 -26-79,27-94 -14-31,13-31 -22-72,21-23 -31-77,12-77 -18-77,78-94 -1-99,2-99 -13-22,14-53 -12-79,11-40 -61-84,26-60 -6-40,17-41 -34-79,35-80 -79-82,78-79 -8-19,20-93 -6-77,7-56 -30-95,26-26 -29-70,30-92 -1-8,7-55 -42-59,43-79 -25-89,24-26 -57-67,56-67 -16-39,50-51 -46-73,20-71 -33-56,57-71 -59-60,61-66 -7-20,8-20 -70-94,16-34 -6-8,3-6 -4-99,3-94 -3-60,3-51 -96-96,65-98 -3-81,3-80 -60-73,89-90 -29-77,28-30 -5-25,22-63 -6-43,1-42 -86-90,1-61 -3-74,6-75 -36-84,37-83 -27-64,69-73 -80-84,1-83 -22-68,68-69 -52-53,52-76 -85-92,9-84 -6-48,7-48 -42-74,41-42 -4-77,5-90 -23-63,11-18 -26-27,26-26 -24-93,24-92 -13-56,13-56 -2-3,2-2 -35-95,99-99 -19-21,20-22 -34-98,34-96 -4-88,3-5 -9-75,8-74 -70-98,71-83 -62-69,61-61 -3-5,5-7 -4-62,13-61 -17-23,33-72 -95-95,9-95 -31-52,31-32 -62-98,98-99 -67-88,19-67 -23-30,36-76 -91-95,95-95 -25-86,24-60 -24-24,25-40 -44-91,44-45 -47-83,20-46 -81-92,40-80 -10-60,9-83 -81-99,38-80 -86-86,85-85 -17-92,44-92 -14-16,13-73 -13-38,12-14 -5-42,6-46 -29-79,28-78 -29-68,58-76 -33-54,50-54 -50-70,70-70 -5-95,3-4 -20-38,21-37 -2-31,3-21 -37-54,33-53 -61-93,74-94 -16-81,6-81 -6-42,41-42 -45-61,45-60 -36-86,37-89 -12-53,12-52 -8-70,71-74 -20-99,19-84 -4-82,83-87 -74-74,75-98 -11-99,11-94 -59-79,45-59 -13-92,14-93 -13-25,12-93 -7-76,6-8 -16-70,16-17 -7-7,60-76 -56-94,14-95 -98-98,23-70 -1-2,5-70 -30-34,31-31 -20-71,70-72 -36-38,16-37 -7-62,7-63 -2-94,3-95 -44-61,43-60 -49-49,49-83 -14-98,5-13 -6-95,6-95 -41-67,68-72 -40-99,39-98 -58-58,58-70 -64-98,63-98 -24-56,25-62 -32-81,31-32 -26-60,91-92 -31-37,3-38 -33-37,19-33 -98-98,97-99 -74-76,62-72 -4-52,1-51 -39-81,38-81 -55-75,28-76 -45-45,46-98 -4-61,3-11 -57-98,67-95 -1-99,1-99 -52-75,75-93 -19-19,20-50 -59-72,62-63 -8-14,7-15 -70-89,90-98 -4-14,14-94 -58-59,51-58 -2-98,1-97 -4-36,13-36 -45-99,64-98 -26-89,35-69 -34-35,34-34 -40-51,39-45 -5-92,4-5 -1-90,5-89 -17-39,34-38 -37-85,37-85 -39-99,39-39 -9-98,11-98 -13-72,4-8 -6-94,7-80 -12-55,13-54 -5-8,7-96 -32-96,95-97 -44-62,44-61 -2-4,10-42 -41-97,91-97 -8-35,7-7 -64-90,91-91 -55-92,55-91 -2-5,5-54 -53-95,54-98 -63-91,63-94 -19-67,5-93 -13-84,83-84 -18-78,78-83 -4-4,7-27 -1-99,2-98 -51-78,51-77 -4-96,5-98 -9-33,14-35 -13-89,12-84 -44-57,23-44 -2-78,7-78 -40-49,39-41 -90-96,18-39 -35-65,41-62 -5-77,24-76 -72-77,77-84 -53-89,85-89 -30-63,30-64 -21-93,21-94 -7-63,5-63 -63-80,63-93 -97-98,14-98 -19-62,64-74 -72-92,71-91 -29-31,30-76 -47-82,83-83 -38-39,39-76 -4-87,11-88 -7-96,6-80 -36-61,33-37 -50-96,95-97 -11-81,12-92 -14-74,74-74 -79-92,7-80 -24-25,25-90 -12-78,12-79 -47-99,7-98 -51-60,51-85 -49-70,50-70 -8-17,20-92 -1-11,12-65 -41-72,72-72 -41-56,40-64 -10-63,11-11 -70-84,36-85 -2-4,3-99 -84-84,85-88 -19-86,21-85 -7-55,55-55 -6-71,1-70 -15-15,15-87 -24-82,10-14 -65-80,54-64 -50-89,49-98 -4-4,10-11 -56-99,56-99 -32-78,2-31 -6-78,7-89 -8-71,90-95 -3-94,38-93 -25-77,85-92 -83-88,82-89 -34-91,33-90 -51-93,2-93 -2-63,2-80 -4-96,24-96 -37-62,37-62 -24-38,39-55 -11-98,11-99 -5-58,4-47 -71-96,33-98 -22-35,33-35 -40-63,39-46 -18-18,19-69 -12-95,12-44 -47-69,68-70 -72-74,5-72 -2-48,31-47 -4-40,41-79 -13-83,13-32 -47-50,6-46 -20-52,20-49 -49-76,23-37 -9-92,9-92 -9-69,10-88 -16-68,15-67 -2-64,9-57 -85-85,16-81 -60-60,61-89 -9-69,69-87 -30-86,31-96 -21-50,50-96 -96-96,31-77 -91-98,20-91 -18-84,9-85 -11-27,18-18 -35-44,35-66 -2-85,84-90 -58-95,99-99 -22-22,21-91 -30-90,30-91 -15-15,17-94 -7-97,97-99 -4-42,3-43 -26-96,7-24 -11-84,8-99 -94-95,15-94 -66-71,70-71 -29-54,54-54 -89-89,3-89 -74-76,75-77 -14-32,33-86 -35-78,79-79 -17-88,87-98 -20-52,19-59 -1-1,19-94 -44-89,43-94 -43-43,26-42 -7-45,6-32 -5-46,5-48 -98-98,10-57 -27-86,22-28 -34-92,33-33 -38-74,2-73 -59-89,9-59 -13-14,15-38 -17-59,18-93 -8-91,7-8 -62-79,62-89 -21-45,45-83 -77-85,16-72 -62-83,65-84 -1-99,1-99 -14-75,15-75 -28-99,27-28 -14-83,4-83 -1-2,5-60 -40-79,79-79 -83-89,84-87 -3-3,4-46 -3-38,1-49 -13-76,12-12 -4-7,6-14 -43-71,6-72 -28-61,12-27 -27-32,28-32 -17-82,17-83 -13-45,14-74 -38-99,70-98 -18-78,16-18 -41-55,40-42 -36-76,1-71 -12-24,25-77 -36-36,37-98 -2-2,3-75 -2-97,59-98 -26-95,27-37 -44-46,18-45 -58-65,58-74 -42-92,25-92 -7-86,85-86 -73-76,69-78 -1-2,3-86 -24-97,20-99 -62-92,13-92 -25-86,24-86 -31-89,8-89 -13-38,13-37 -13-83,24-84 -96-96,4-96 -26-43,25-26 -88-90,75-89 -54-59,2-60 -13-79,3-78 -43-58,42-90 -49-53,11-55 -89-91,11-90 -18-78,79-91 -35-99,36-98 -36-82,96-97 -32-68,36-69 -12-98,12-96 -23-49,41-49 -1-83,2-89 -30-36,30-37 -14-85,13-84 -38-40,9-39 -8-86,7-87 -2-80,36-54 -2-68,69-69 -23-49,23-57 -13-77,78-91 -71-99,99-99 -2-33,44-80 -48-50,4-49 -17-88,17-87 -62-83,61-94 -35-73,34-72 -15-93,93-93 -8-40,8-77 -21-21,22-84 -7-52,6-8 -6-97,7-99 -38-46,38-38 -85-86,4-86 -40-69,69-94 -1-99,41-98 -3-31,2-93 -44-47,29-65 -42-42,41-65 -48-74,74-82 -62-83,1-61 -9-17,10-18 -36-43,44-66 -8-95,37-95 -5-33,13-32 -19-95,94-95 -64-65,65-69 -16-66,67-67 -52-61,45-61 -50-73,51-74 -3-80,5-80 -90-99,68-89 -3-97,2-99 -18-27,18-27 -45-46,28-46 -15-54,16-54 -14-76,13-75 -97-99,1-97 -36-78,35-78 -40-67,65-67 -18-76,6-99 -94-96,95-95 -95-96,22-84 -2-20,19-82 -34-83,33-82 -56-61,56-57 -79-87,78-81 -8-57,7-56 -83-86,83-85 -6-91,90-97 -76-86,28-87 -95-96,9-94 -19-32,33-42 -23-30,28-32 -17-81,17-81 -53-71,72-82 -70-72,71-86 -34-65,35-64 -12-87,86-87 -63-68,62-67 -10-38,9-39 -18-70,18-71 -5-6,7-83 -59-96,59-95 -33-73,21-32 -16-65,17-65 -24-62,16-16 -4-86,3-85 -5-95,6-94 -15-46,16-94 -3-87,9-86 -17-56,7-55 -22-23,22-62 -48-89,47-90 -25-26,26-86 -64-71,63-64 -91-98,7-91 -10-10,11-16 -25-58,25-59 -8-64,46-64 -24-71,25-72 -65-65,14-65 -19-59,19-19 -42-74,42-43 -7-79,8-90 -47-70,16-71 -43-57,42-56 -40-41,41-82 -15-59,15-58 -15-84,5-16 -1-31,18-30 -4-59,5-86 -78-83,74-82 -55-56,55-96 -69-88,8-68 -23-32,43-83 -2-75,5-96 -52-97,53-96 -5-80,19-68 -6-99,5-5 -16-86,2-17 -15-34,11-33 -15-69,15-69 -5-57,6-56 -4-95,5-96 -41-54,24-54 -27-27,28-39 -4-28,3-5 -50-80,58-79 -80-90,80-96 -5-98,1-5 -71-84,71-83 -95-96,63-94 -21-96,20-97 -75-76,62-76 -30-59,53-99 -53-93,53-66 -21-97,15-99 -12-80,8-86 -5-21,22-40 -4-76,4-75 -17-19,22-91 -1-8,7-54 -9-57,5-9 -5-84,84-87 -56-56,55-85 -55-57,56-72 -25-32,36-58 -58-95,59-96 -7-35,49-54 -3-95,96-97 -40-43,40-70 -14-90,13-89 diff --git a/2022/05/input.in b/2022/05/input.in deleted file mode 100644 index 7cb8cf9..0000000 --- a/2022/05/input.in +++ /dev/null @@ -1,514 +0,0 @@ - [B] [B] [S] - [M] [P] [L] [B] [J] - [D] [R] [V] [D] [Q] [D] - [T] [R] [Z] [H] [H] [G] [C] - [P] [W] [J] [B] [J] [F] [J] [S] -[N] [S] [Z] [V] [M] [N] [Z] [F] [M] -[W] [Z] [H] [D] [H] [G] [Q] [S] [W] -[B] [L] [Q] [W] [S] [L] [J] [W] [Z] - 1 2 3 4 5 6 7 8 9 - -move 3 from 5 to 2 -move 5 from 3 to 1 -move 4 from 4 to 9 -move 6 from 1 to 4 -move 6 from 8 to 7 -move 5 from 2 to 7 -move 1 from 5 to 4 -move 11 from 9 to 7 -move 1 from 1 to 9 -move 6 from 4 to 6 -move 12 from 6 to 7 -move 1 from 9 to 2 -move 2 from 4 to 6 -move 1 from 8 to 9 -move 1 from 9 to 4 -move 1 from 6 to 1 -move 2 from 7 to 5 -move 2 from 6 to 7 -move 2 from 1 to 6 -move 2 from 4 to 7 -move 1 from 5 to 4 -move 1 from 5 to 6 -move 1 from 6 to 1 -move 1 from 1 to 3 -move 1 from 4 to 1 -move 1 from 1 to 4 -move 1 from 4 to 5 -move 1 from 3 to 9 -move 1 from 5 to 1 -move 4 from 2 to 1 -move 20 from 7 to 8 -move 24 from 7 to 3 -move 3 from 6 to 4 -move 1 from 1 to 9 -move 1 from 9 to 3 -move 2 from 1 to 2 -move 2 from 4 to 1 -move 2 from 2 to 1 -move 14 from 3 to 6 -move 6 from 1 to 6 -move 10 from 3 to 2 -move 1 from 2 to 3 -move 6 from 6 to 5 -move 2 from 3 to 4 -move 13 from 8 to 4 -move 1 from 9 to 7 -move 1 from 6 to 3 -move 10 from 4 to 2 -move 1 from 3 to 6 -move 2 from 8 to 7 -move 1 from 7 to 2 -move 11 from 6 to 8 -move 2 from 6 to 1 -move 2 from 1 to 3 -move 1 from 8 to 6 -move 1 from 3 to 9 -move 3 from 8 to 2 -move 1 from 3 to 6 -move 2 from 6 to 4 -move 1 from 6 to 5 -move 11 from 2 to 9 -move 2 from 4 to 6 -move 1 from 6 to 1 -move 1 from 1 to 5 -move 11 from 2 to 7 -move 12 from 7 to 5 -move 1 from 6 to 2 -move 10 from 8 to 7 -move 6 from 5 to 3 -move 4 from 5 to 4 -move 11 from 9 to 7 -move 7 from 4 to 9 -move 4 from 9 to 6 -move 12 from 7 to 3 -move 1 from 8 to 9 -move 1 from 5 to 1 -move 1 from 1 to 2 -move 1 from 6 to 9 -move 3 from 4 to 1 -move 1 from 9 to 7 -move 8 from 7 to 2 -move 3 from 6 to 1 -move 8 from 2 to 3 -move 1 from 7 to 4 -move 2 from 7 to 2 -move 1 from 5 to 2 -move 8 from 5 to 1 -move 3 from 9 to 6 -move 1 from 6 to 2 -move 1 from 4 to 5 -move 1 from 5 to 4 -move 2 from 9 to 3 -move 1 from 8 to 6 -move 1 from 4 to 5 -move 1 from 5 to 1 -move 1 from 6 to 8 -move 1 from 8 to 1 -move 7 from 1 to 5 -move 11 from 3 to 7 -move 1 from 1 to 9 -move 4 from 2 to 1 -move 5 from 1 to 3 -move 1 from 5 to 9 -move 1 from 6 to 3 -move 6 from 2 to 1 -move 5 from 7 to 3 -move 1 from 6 to 8 -move 1 from 8 to 4 -move 6 from 7 to 9 -move 4 from 9 to 8 -move 2 from 8 to 9 -move 2 from 5 to 8 -move 13 from 3 to 7 -move 1 from 3 to 8 -move 2 from 1 to 9 -move 3 from 1 to 5 -move 1 from 4 to 1 -move 6 from 5 to 9 -move 8 from 9 to 8 -move 2 from 7 to 3 -move 1 from 9 to 7 -move 1 from 5 to 2 -move 5 from 9 to 8 -move 1 from 8 to 7 -move 1 from 2 to 9 -move 7 from 1 to 2 -move 4 from 7 to 5 -move 6 from 2 to 3 -move 1 from 2 to 1 -move 10 from 8 to 9 -move 3 from 8 to 9 -move 4 from 5 to 1 -move 2 from 8 to 6 -move 9 from 9 to 8 -move 1 from 9 to 6 -move 8 from 8 to 4 -move 12 from 3 to 5 -move 1 from 4 to 2 -move 3 from 8 to 1 -move 3 from 9 to 7 -move 1 from 3 to 2 -move 1 from 6 to 9 -move 8 from 3 to 8 -move 6 from 4 to 5 -move 1 from 7 to 6 -move 1 from 8 to 1 -move 6 from 8 to 7 -move 1 from 3 to 6 -move 7 from 1 to 5 -move 1 from 4 to 9 -move 4 from 6 to 5 -move 13 from 7 to 5 -move 1 from 8 to 2 -move 2 from 9 to 3 -move 4 from 7 to 2 -move 1 from 3 to 8 -move 1 from 3 to 4 -move 4 from 1 to 2 -move 1 from 5 to 7 -move 23 from 5 to 6 -move 1 from 8 to 6 -move 1 from 9 to 4 -move 5 from 2 to 6 -move 1 from 4 to 9 -move 1 from 9 to 3 -move 1 from 7 to 8 -move 1 from 4 to 3 -move 1 from 3 to 7 -move 1 from 7 to 5 -move 1 from 8 to 7 -move 12 from 6 to 1 -move 1 from 2 to 5 -move 1 from 3 to 1 -move 20 from 5 to 2 -move 14 from 2 to 4 -move 11 from 2 to 6 -move 1 from 7 to 8 -move 13 from 1 to 8 -move 9 from 8 to 4 -move 3 from 8 to 6 -move 10 from 6 to 8 -move 6 from 6 to 4 -move 4 from 8 to 5 -move 26 from 4 to 2 -move 2 from 5 to 2 -move 5 from 8 to 1 -move 1 from 8 to 3 -move 2 from 1 to 3 -move 2 from 3 to 7 -move 27 from 2 to 7 -move 2 from 8 to 1 -move 1 from 3 to 7 -move 6 from 6 to 2 -move 4 from 6 to 1 -move 4 from 6 to 4 -move 2 from 5 to 4 -move 4 from 2 to 1 -move 3 from 1 to 8 -move 1 from 2 to 8 -move 8 from 4 to 3 -move 1 from 2 to 8 -move 5 from 8 to 6 -move 1 from 4 to 2 -move 1 from 2 to 1 -move 6 from 3 to 1 -move 13 from 7 to 1 -move 1 from 2 to 8 -move 1 from 8 to 2 -move 1 from 6 to 2 -move 1 from 2 to 8 -move 1 from 8 to 2 -move 14 from 7 to 1 -move 5 from 6 to 3 -move 2 from 3 to 1 -move 3 from 3 to 2 -move 3 from 7 to 4 -move 1 from 4 to 9 -move 1 from 9 to 7 -move 2 from 3 to 6 -move 5 from 2 to 7 -move 1 from 7 to 6 -move 5 from 7 to 6 -move 2 from 6 to 7 -move 1 from 6 to 8 -move 1 from 4 to 7 -move 4 from 6 to 9 -move 35 from 1 to 8 -move 3 from 7 to 2 -move 1 from 2 to 5 -move 24 from 8 to 3 -move 1 from 5 to 8 -move 13 from 3 to 6 -move 2 from 2 to 6 -move 6 from 6 to 4 -move 11 from 1 to 6 -move 12 from 6 to 1 -move 1 from 8 to 1 -move 2 from 1 to 3 -move 5 from 4 to 1 -move 1 from 6 to 4 -move 1 from 8 to 3 -move 13 from 3 to 9 -move 3 from 8 to 2 -move 3 from 2 to 7 -move 1 from 3 to 6 -move 3 from 7 to 8 -move 14 from 1 to 3 -move 1 from 1 to 9 -move 6 from 3 to 8 -move 17 from 8 to 6 -move 1 from 3 to 7 -move 1 from 7 to 8 -move 26 from 6 to 7 -move 1 from 1 to 9 -move 3 from 4 to 1 -move 2 from 3 to 8 -move 1 from 8 to 4 -move 14 from 9 to 7 -move 12 from 7 to 3 -move 2 from 1 to 4 -move 2 from 7 to 8 -move 2 from 8 to 3 -move 4 from 9 to 8 -move 1 from 4 to 7 -move 1 from 1 to 3 -move 2 from 4 to 2 -move 24 from 7 to 6 -move 1 from 8 to 1 -move 1 from 7 to 2 -move 1 from 7 to 9 -move 3 from 2 to 9 -move 1 from 1 to 6 -move 5 from 8 to 2 -move 5 from 3 to 4 -move 1 from 2 to 5 -move 3 from 9 to 8 -move 2 from 4 to 9 -move 16 from 6 to 3 -move 14 from 3 to 8 -move 1 from 7 to 9 -move 8 from 6 to 9 -move 4 from 8 to 5 -move 8 from 8 to 3 -move 1 from 5 to 8 -move 1 from 2 to 4 -move 4 from 8 to 7 -move 1 from 5 to 6 -move 12 from 9 to 5 -move 15 from 5 to 8 -move 1 from 6 to 1 -move 2 from 2 to 6 -move 3 from 4 to 2 -move 4 from 2 to 7 -move 8 from 7 to 3 -move 1 from 1 to 4 -move 3 from 6 to 9 -move 16 from 8 to 3 -move 3 from 9 to 4 -move 1 from 8 to 9 -move 2 from 9 to 4 -move 24 from 3 to 8 -move 19 from 8 to 7 -move 2 from 8 to 7 -move 7 from 4 to 5 -move 13 from 7 to 5 -move 4 from 7 to 8 -move 7 from 8 to 1 -move 3 from 5 to 3 -move 3 from 7 to 2 -move 1 from 1 to 4 -move 1 from 7 to 2 -move 3 from 2 to 4 -move 8 from 3 to 1 -move 11 from 1 to 3 -move 12 from 3 to 4 -move 1 from 2 to 5 -move 18 from 3 to 8 -move 3 from 1 to 9 -move 1 from 3 to 5 -move 15 from 5 to 4 -move 4 from 5 to 1 -move 23 from 4 to 6 -move 3 from 1 to 6 -move 13 from 8 to 3 -move 25 from 6 to 2 -move 1 from 9 to 5 -move 5 from 3 to 8 -move 17 from 2 to 8 -move 4 from 4 to 1 -move 1 from 9 to 7 -move 5 from 2 to 6 -move 2 from 2 to 4 -move 1 from 9 to 4 -move 6 from 3 to 9 -move 16 from 8 to 3 -move 2 from 1 to 8 -move 1 from 7 to 4 -move 5 from 4 to 7 -move 1 from 5 to 3 -move 2 from 7 to 1 -move 9 from 8 to 4 -move 3 from 7 to 2 -move 2 from 8 to 3 -move 10 from 4 to 1 -move 1 from 2 to 3 -move 5 from 3 to 7 -move 2 from 8 to 9 -move 2 from 9 to 8 -move 1 from 2 to 1 -move 3 from 9 to 6 -move 2 from 2 to 8 -move 4 from 7 to 3 -move 4 from 8 to 6 -move 1 from 7 to 1 -move 1 from 4 to 8 -move 4 from 3 to 4 -move 4 from 4 to 2 -move 6 from 1 to 2 -move 1 from 4 to 3 -move 5 from 3 to 8 -move 6 from 3 to 8 -move 2 from 2 to 8 -move 3 from 2 to 9 -move 8 from 1 to 6 -move 3 from 2 to 7 -move 2 from 7 to 2 -move 13 from 6 to 5 -move 7 from 5 to 9 -move 3 from 2 to 7 -move 1 from 2 to 9 -move 2 from 5 to 2 -move 3 from 8 to 5 -move 5 from 3 to 4 -move 2 from 2 to 1 -move 9 from 8 to 7 -move 1 from 1 to 8 -move 6 from 5 to 2 -move 4 from 2 to 8 -move 4 from 7 to 1 -move 1 from 2 to 6 -move 5 from 1 to 6 -move 1 from 8 to 2 -move 1 from 2 to 9 -move 13 from 6 to 5 -move 2 from 7 to 2 -move 1 from 8 to 7 -move 4 from 4 to 7 -move 1 from 4 to 1 -move 4 from 8 to 4 -move 6 from 5 to 9 -move 2 from 1 to 4 -move 1 from 8 to 6 -move 11 from 9 to 5 -move 1 from 7 to 8 -move 1 from 8 to 1 -move 1 from 1 to 3 -move 6 from 4 to 8 -move 1 from 8 to 4 -move 1 from 1 to 6 -move 6 from 9 to 7 -move 1 from 4 to 5 -move 3 from 2 to 1 -move 1 from 8 to 2 -move 1 from 3 to 2 -move 20 from 5 to 6 -move 3 from 1 to 6 -move 2 from 2 to 9 -move 3 from 8 to 3 -move 5 from 3 to 8 -move 1 from 1 to 6 -move 2 from 8 to 9 -move 7 from 9 to 5 -move 3 from 5 to 4 -move 3 from 8 to 3 -move 9 from 7 to 9 -move 1 from 8 to 5 -move 7 from 7 to 9 -move 2 from 5 to 2 -move 9 from 9 to 2 -move 1 from 7 to 3 -move 2 from 9 to 1 -move 2 from 5 to 9 -move 2 from 1 to 4 -move 2 from 3 to 7 -move 18 from 6 to 7 -move 7 from 9 to 1 -move 7 from 6 to 8 -move 4 from 4 to 9 -move 4 from 8 to 3 -move 2 from 8 to 2 -move 1 from 8 to 5 -move 1 from 4 to 7 -move 1 from 5 to 1 -move 2 from 9 to 3 -move 12 from 2 to 5 -move 6 from 5 to 6 -move 5 from 7 to 2 -move 3 from 6 to 4 -move 1 from 4 to 7 -move 1 from 4 to 1 -move 2 from 5 to 8 -move 1 from 8 to 2 -move 2 from 9 to 7 -move 8 from 1 to 8 -move 11 from 7 to 1 -move 5 from 8 to 2 -move 7 from 7 to 5 -move 1 from 9 to 4 -move 1 from 7 to 5 -move 7 from 5 to 7 -move 2 from 6 to 1 -move 1 from 8 to 2 -move 12 from 1 to 7 -move 2 from 1 to 2 -move 3 from 8 to 5 -move 3 from 5 to 2 -move 8 from 7 to 3 -move 1 from 3 to 1 -move 3 from 6 to 4 -move 4 from 5 to 6 -move 14 from 2 to 9 -move 3 from 6 to 9 -move 3 from 4 to 2 -move 1 from 1 to 7 -move 1 from 7 to 1 -move 3 from 3 to 5 -move 8 from 7 to 4 -move 1 from 5 to 9 -move 3 from 2 to 4 -move 1 from 3 to 4 -move 4 from 2 to 6 -move 2 from 6 to 7 -move 3 from 5 to 4 -move 16 from 4 to 1 -move 7 from 9 to 8 -move 1 from 5 to 1 -move 3 from 7 to 9 -move 3 from 9 to 4 -move 7 from 1 to 7 -move 6 from 7 to 1 -move 5 from 3 to 1 -move 11 from 9 to 2 -move 3 from 4 to 6 -move 9 from 2 to 8 -move 6 from 3 to 5 -move 2 from 8 to 6 -move 5 from 5 to 3 -move 2 from 7 to 1 -move 3 from 3 to 9 -move 1 from 2 to 4 -move 1 from 5 to 1 -move 13 from 1 to 2 -move 5 from 8 to 6 -move 2 from 3 to 9 -move 2 from 4 to 7 -move 5 from 6 to 9 -move 7 from 9 to 1 -move 3 from 7 to 2 -move 6 from 8 to 6 -move 5 from 6 to 2 -move 2 from 8 to 3 -move 2 from 9 to 4 -move 6 from 2 to 5 -move 1 from 3 to 7 diff --git a/2022/06/input.in b/2022/06/input.in deleted file mode 100644 index 30c985a..0000000 --- a/2022/06/input.in +++ /dev/null @@ -1 +0,0 @@ -bgdbdsbsbsttldddzzwnzzmpzmmzmqqcgglrglgbbbtmtddrssjtjqqtrtqtqppcvcddswdwbwlblfljfljlhhpchcfcgfcfwfllfccjlcjllbvbgglccznzrnzzvfzvffvzvccnwnnrtrqtttzmmndnqnvvlwvvgcclplccbggcscqscqcnndwdlwlvlffdssrzrtttbvvqttfdfrddhthbblnlmlmqmhhpvpcpwpccmdddbcbcgctggsstwwbcwwqllchlcccfwccvjcjhhvggnvvcssjwjhhdvdhdcdhdqhhwrwcrwcrrjzjccqhhvnnrppsqqplqqcvczzlpprlrqqvpvwwstwwzqqsnqqsrqrlqlggzztzhhvbbcncwnwhwbbqpbqpqdqsqjqrjrddpjpwwvlwlnwwmpwwnmmzgzqqdcdnnqllghhzwhwwggljjwswgwffsbffbggzfzcfzczpptrrnwrrcqqcwqqdttzqzjzqqltlggwlglgwgrgfgnffgqffnlntlnlccjwjfjnfjnffqvfqfcfsslwswfwvfwfvflfhhntngnhggqbbsggchghfggcmgmsggshsmmqffjpjnngwwftwffgqqvmqqslqslqqdzqzhzbhhdzhhllnzzlmzzltlwwsmswwtswtssvqsqhssfdsdtdjdqqqrffqjffrzrppjpgjjpgpmmzbbrcbbprbpbnpbpcpsspqqfggclcpczzngznzvzlvvcwvwcwdwcddhdbdwdhwhllpjllrmmhbmbgmgmpmhpmpqmpprggvsgvsvbsbbqbmmjdjfddsnnqpnnphppsbpsbpsprpjjqhhvrhvvdhdjhdhwdhhdjjrlrbbzhbbjljhllttrccbdbffznnfmnfnvfvrvbblmltlmmlbmmdqmqnmqqmmhchvcvpccnrccqhccshchshzshschcffpwwbdbqbbjhbhmbhmmzzzcscddbsbnnpzpfzzrfrlrmmzzhshbbtjtbtzbbddrwwhchvhtvvmhvmmwssqqzrzdrdqqntnjnrjrbbgqgzgbzgbzgbzgbbqtbbbqjjgvglvlzlqlbbjwjddjtjbjffcsfsnsnpspgpnnglnngrgqgbqgqtgtfggczzmbbvqqrssdqssgrssdzzvjvccbbgcgppgwwtmwwrnwnfwwnnzmzvvvmnnvdddrmrbrtbrbrvrqqcbbgjgfjfcfttgrrjmrmrttbnnsrnsnzsnzztmtgtjgjljdjtjrtrddtbtjbtjbtthhtmmllngnhgnnhthssgffljlnjllfvlvslvsvwvcvfccgqqtsqtqggbjbtjjtjvjtvtvddttqzqczzcvvdtvthvvfrfmrrclrlflbbhhcllfbbcwwgmwmnmpmgpptnpnjpnjjbqjqjddfdfjjpzzjnnvzzwtwpwfppzhphbbmsbmsbmbqqfpfsscttfrtrzzrznrrrbgbdbtdbdjjsmjmttlbtthbttrprpjppsbsjbjcbclchlhhlttntznnzfnfgnncsncnmmdndnlnclnndqnqssbsjbbrzrtzztszzvnznqqpnpbpnpvnpnhpphvpvfvhhrvhrrpttctjcjvcvzcvcscttqptpffscfsccqhchhdcdczcnzcncnhccfrrbprpbpqppdccjhjvjmjpjmpjjvfvrrwppgjgjjdgdmgdggcpccbrrgssbsjbsjsfscfcvvcrvcrcttbtffpqphpchclccwhcwcbwccbzzlvzvffbrbrbjbwjjqvgtcfnhtjvrcwbfjdbvgtqbvmbtscwzrwdfmwtjvswgrvncmftgmppvlcwjpnpffggrmvgtfqgqmhbhpslfwdfvfmbfndrmgfhdbbtdgvnslzpdfvdttqjpcnbzsjcvrprgrhpglwfwtdcbgdsjhnqjntjnsjcgwccjnvvngfpvqwvnclcsvhmwsrccvbjnnrjspwqdvjpfnfvbsslngzpdgjrcsnqfvdlsqdhdllcndshglztgrrjnptqfvllshmhbgdszvmvqdntpgzdvhstgrppwpdtdqvzsfgqfrgmmjqcsjhvrlmnjvfjghlvwbnqcggpqtrjztfzshnqpzznvlqcmnzvrwqlcbnbpwmljpvdzhbvbgtdjlzflsvzlcqdnsgzfjlccvjclqlzdhqzzrscttjmrvjvcqzvtzqlmsssnfcfmvcgmqjjwdnhtvlqrgdvlbbrffmrpnfsmwwwbnwclrgbfnzlbqvjfqjlfvfnfrhdqstddwnwrmsdnvzwfjfgpwcrfqqzbdwwtzprvqtgvtzbttlhcdczlhvlgrbptztswftvnjmgrnbwpfwnztvqmqbznvnllgjmqrwprvwtnptlbfwbblzsblptwpdwgcvwsbmbrtqfvjsbzfvsfvpwfwbnnfcsddhsnwnvvqthjdgvzgjprtqmvhdqjqhgqppqqcpzfcwzcmrslftgrvbvdsdgfzfmvvcqzcszfwdvghdnlwwpddzdsqsdqvvrwhphbqvcbjbtnqgnqqdsqcmrllhmdvpffnqmrgfddjbrjwflshzswvjtmqgqmzvcnlctvdpjhzzlgpzgprjncrscnlmdhvdqpfllsqgstmssvlzmrtjmgwppfqjsrfmlnszdnhngzhtbbnsnvmtzpfsdcsvsvvjnfnzhrzmvlhrbslrsbgwwcvrzpgcnmjqnvgmzmlvpccrmggtzzhsdtbbcdnpdlnbztgjhttmqdhjphcrbgjtctqmgbfmflgqztztcjqvgsscrmwfbvnrnbgbjgqmwdzhwwnddwgrprhvlgftcbnwjqmcgczpbhfqcqzdbdwhmzfmgvcjdsfzdbrzjjvfrvftdblnlhpbqvdprnsjdpznbbgqpgnnjmcnsbszfwblthtwlwrdphjltclmqnbpcgngdnfpltttsrvdmhrcvlqfplqmqvslwgcbrwrmchscczrfgspwjtdqtlbddbsclrlbmhdzqdrgjfsgldfjmgcglbgjhmghntndqcbgqwmdvczbwgcctzvcrsqqctwwddfhhfhwlsrsljpnrlqtbdzprjbfrjgztwbpnfqnlftzcgrpmpcnljhscfbsqzbsgwqcgbvctnhswhrsmwjgcccdsnbscwllmpstpnrccjspnjqmtgcsgbjzpfvzjrhlvnfblqmcmgcrvnpchwhlsqsbhzhsgdvwmdcwphwccvzmmqqjrvqwphbnmddzcmggmbsqrhbcqmdlgvccbhhmhwdjhhhcwnffthmgfhpltqbhnvdqfrzjdvlppqhzfdgbzbrtfllsbvjjcgbwsbcmfrbjtvzqsntzdzprnpmfpfpgmfprlbcdqbdzjsfjbtczdpdnhlwdhmwsjtvmztbhdbbdgvrtbqsqbsnwjjhlslzcblrwlfpzqlvdvmgqhrpjmbjbntmjsjvgsmdsnctlgtnlqgfvhwqbjbrczpfzmzwgvrphfmnnhrlzwzgthzqnzzmptppzdszlcpjjvbpjbtjfrqtbnpnwsdglbbjftvngcghjlnsqwspmmfdpslsmqtpngbtvvrvbqqdsphfhvsnmhprfclnjmfrtqnlqcbmfrggbstwdbwsvtpvflvfgqltmqjpnfclbwtlwhmqrmzcrbztstgpjrdsnwpqrcnvvnnnszlrtpqjtsnbjrdcthrzrtccgcvnnlzfjlcdnzzqclvtncjbznrlpnzhvcwmrfrzpcldfmfzfpchlmddgvcfdqdhzzdtwhsfcvsthtmqgvhzdpjcgwsmrvwsnqmhdnfqdrrnmjwcpjjftfdhvwrwwtvptzfrmgffdcrhvcmccfqctswzzmlsjvdjzgjgndhmmrwvwmmtrnpgsnmtcqdbdpqjmcddcrbcfmmccnvsfhwtvfhsjfmlfttspfghpfggrffnrwjggqwggrmpzscprvdzmzhwjjcsmpsltzwgchttwpngrlptprqnjzzpbpbcvrclggtqwlcwdpjpnjrhtgqwsvhsswwqtlnglnqnvffrgmlbzthvnhrzvsvclgdmmjzrpfv diff --git a/2022/07/input.in b/2022/07/input.in deleted file mode 100644 index 7b779d3..0000000 --- a/2022/07/input.in +++ /dev/null @@ -1,956 +0,0 @@ -$ cd / -$ ls -dir gqlg -dir hchrwstr -dir lswlpt -189381 mzsnhlf -dir plmdrbn -dir rjwmjd -dir stqq -93174 zfn -dir zjhqnlrr -dir zssdlnc -$ cd gqlg -$ ls -187654 cfrdsjf -100589 ntvmgbw -46922 zcmfcjhf.tzw -$ cd .. -$ cd hchrwstr -$ ls -227766 cljjlcp.pjh -102770 rdbrcf.pjl -9887 rfnjn.lqn -dir rzsrp -dir shlhgj -dir slwwgc -$ cd rzsrp -$ ls -dir rzsrp -$ cd rzsrp -$ ls -dir dvzvmsjz -208001 tnflwcsn -dir zfn -$ cd dvzvmsjz -$ ls -149823 hvgbhm.zsc -$ cd .. -$ cd zfn -$ ls -292424 gqlg.tzc -$ cd .. -$ cd .. -$ cd .. -$ cd shlhgj -$ ls -61753 fzpzwjdt.jvl -195204 jjhc.tzr -288094 zcmfcjhf.tzw -$ cd .. -$ cd slwwgc -$ ls -118185 jjhc.tzr -291916 jwnw.wqv -116377 ptlz -300849 pzjpw.hwg -28679 zfn.grz -$ cd .. -$ cd .. -$ cd lswlpt -$ ls -124160 dbnlt.rqz -154412 sfd -$ cd .. -$ cd plmdrbn -$ ls -dir fmzjhrq -224144 rlc.qns -2985 zcmfcjhf.tzw -$ cd fmzjhrq -$ ls -9749 lqj.szc -dir rrjjsvm -$ cd rrjjsvm -$ ls -66652 zcmfcjhf.tzw -$ cd .. -$ cd .. -$ cd .. -$ cd rjwmjd -$ ls -dir twcrf -125294 zpfws.ctc -dir zwmmrqj -$ cd twcrf -$ ls -229364 tnflwcsn -262716 zcmfcjhf.tzw -$ cd .. -$ cd zwmmrqj -$ ls -11466 gqlg.ftg -220272 lflcgss.jrm -79574 tnflwcsn -$ cd .. -$ cd .. -$ cd stqq -$ ls -185160 cwjqldbf.cnm -266439 dpg.pwn -dir hpgbcvtb -139357 jvps -dir llbthqc -250148 mctn.dqw -dir rzsrp -22196 tnflwcsn -dir whmdbn -$ cd hpgbcvtb -$ ls -231579 fvjjtd.wdb -168118 gjdtscqs -113434 ldbqbg -dir mqjfvg -182214 nnnr -112389 pqqdt.wnn -$ cd mqjfvg -$ ls -170328 gqlg.jjc -$ cd .. -$ cd .. -$ cd llbthqc -$ ls -25611 bftwd.qrr -91550 tnflwcsn -$ cd .. -$ cd rzsrp -$ ls -272315 wrsfh.pzd -123877 zcmfcjhf.tzw -$ cd .. -$ cd whmdbn -$ ls -29628 jjhc.tzr -65193 mrhb -$ cd .. -$ cd .. -$ cd zjhqnlrr -$ ls -dir bzzvj -dir ddzmvh -dir dsjd -180806 fqz.dch -dir nnzvl -109161 rptmqt -6463 rzsrp.sjf -111549 rzsrp.wwz -241532 zfn -$ cd bzzvj -$ ls -278759 gqlg.nsn -174223 mvggzqrq -156518 tnflwcsn -dir wjtlg -dir zfn -$ cd wjtlg -$ ls -52198 fvqbtm.tch -44881 tnflwcsn -$ cd .. -$ cd zfn -$ ls -22926 tnflwcsn -$ cd .. -$ cd .. -$ cd ddzmvh -$ ls -dir cpvfln -180764 gqlg.bjq -dir hgrnmh -186254 hgrnmh.tpr -dir hjpgf -dir mghmb -dir pvdwhmcr -256578 rzsrp -269955 shlhgj -172163 vrr.nnm -$ cd cpvfln -$ ls -87025 hgrnmh.lvr -187453 rwmq.dph -dir sthhc -$ cd sthhc -$ ls -289580 fdzwmfnf -57504 hgrnmh.vqj -277639 mzcfchr.mch -dir slsj -dir vsvvprg -94836 zqglfrl -$ cd slsj -$ ls -178013 hdjgtqt -$ cd .. -$ cd vsvvprg -$ ls -102783 fvqbtm.tch -$ cd .. -$ cd .. -$ cd .. -$ cd hgrnmh -$ ls -dir mrnmbbt -240216 rzsrp.nfg -$ cd mrnmbbt -$ ls -245579 gqlg -$ cd .. -$ cd .. -$ cd hjpgf -$ ls -257544 cjfd.wdq -296077 jjhc.tzr -195752 zcmfcjhf.tzw -$ cd .. -$ cd mghmb -$ ls -dir bgrcsdc -dir btjq -dir gqlg -dir gtwdqw -dir hgrnmh -dir jts -dir jvp -dir jvrjcv -206272 pgf.rgj -130746 tnflwcsn -256698 zfn.dhl -$ cd bgrcsdc -$ ls -235762 lflcgss.jrm -$ cd .. -$ cd btjq -$ ls -dir bvrcqb -dir drslln -dir dwzpblb -dir gqlg -dir hgrnmh -dir hvb -dir rqtc -dir vsdz -dir wrnftqh -$ cd bvrcqb -$ ls -51508 gjjg.msw -dir gqlg -13206 pdwn -10427 vbw -6909 zfn.ztq -$ cd gqlg -$ ls -20816 cmgcvlh.mzs -10358 fvqbtm.tch -215142 rzsrp.dns -192153 wdjdppzm -$ cd .. -$ cd .. -$ cd drslln -$ ls -258102 tnflwcsn -$ cd .. -$ cd dwzpblb -$ ls -302466 fvqbtm.tch -$ cd .. -$ cd gqlg -$ ls -dir hnr -dir mdzdht -$ cd hnr -$ ls -dir fjd -159298 fvqbtm.tch -46324 gchdll.nrm -287907 lflcgss.jrm -dir mqp -140272 twdff -47399 zfn -$ cd fjd -$ ls -227109 fvqbtm.tch -223413 wdsfwwwm.rmd -$ cd .. -$ cd mqp -$ ls -dir rzsrp -$ cd rzsrp -$ ls -dir pgwng -$ cd pgwng -$ ls -218271 hgrnmh.gnf -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd mdzdht -$ ls -dir gqlg -dir tvd -$ cd gqlg -$ ls -dir gfjqbdp -108335 jjhc.tzr -$ cd gfjqbdp -$ ls -143536 fzvn.jtv -$ cd .. -$ cd .. -$ cd tvd -$ ls -238491 wsjmrlqv.bwb -$ cd .. -$ cd .. -$ cd .. -$ cd hgrnmh -$ ls -265289 lflcgss.jrm -111283 thb -$ cd .. -$ cd hvb -$ ls -dir hgrnmh -dir smmwg -$ cd hgrnmh -$ ls -dir wpvssts -84939 zcmfcjhf.tzw -$ cd wpvssts -$ ls -305634 whcmr -$ cd .. -$ cd .. -$ cd smmwg -$ ls -36722 cvdbwg.rll -16840 nnhbcbwz -dir rzsrp -9405 zfn.jzr -$ cd rzsrp -$ ls -dir fzsngr -$ cd fzsngr -$ ls -142687 zcmfcjhf.tzw -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd rqtc -$ ls -dir pbzhfsg -dir rzsrp -dir shlhgj -$ cd pbzhfsg -$ ls -41865 hpshz.sdf -$ cd .. -$ cd rzsrp -$ ls -dir gqlg -dir mbsjjzft -$ cd gqlg -$ ls -dir gqlg -dir nvjqp -$ cd gqlg -$ ls -21860 tnflwcsn -$ cd .. -$ cd nvjqp -$ ls -dir gcq -$ cd gcq -$ ls -dir mslhm -dir rzsrp -$ cd mslhm -$ ls -41304 rpgvllw.zfj -$ cd .. -$ cd rzsrp -$ ls -290199 ddsnt -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd mbsjjzft -$ ls -47727 ggpmg.pps -dir stgszvmj -275954 tnflwcsn -248613 vbgnwh.sjz -$ cd stgszvmj -$ ls -dir dthcrbmr -dir shlhgj -206580 zcmfcjhf.tzw -dir zfn -$ cd dthcrbmr -$ ls -dir lhp -dir npf -dir qbgrjr -$ cd lhp -$ ls -37925 hgrnmh.lvm -$ cd .. -$ cd npf -$ ls -77162 bqvd -$ cd .. -$ cd qbgrjr -$ ls -48767 fvqbtm.tch -$ cd .. -$ cd .. -$ cd shlhgj -$ ls -dir wtlngn -35422 zfn -$ cd wtlngn -$ ls -dir gqlg -$ cd gqlg -$ ls -64761 fwtqw -$ cd .. -$ cd .. -$ cd .. -$ cd zfn -$ ls -47247 dmlr.flv -259570 htvn.rbz -149238 qrdw -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd shlhgj -$ ls -dir cjmv -dir tns -$ cd cjmv -$ ls -140919 jjhc.tzr -$ cd .. -$ cd tns -$ ls -248127 fvqbtm.tch -216202 pwg -dir qhhtgsvz -$ cd qhhtgsvz -$ ls -68979 fvqbtm.tch -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd vsdz -$ ls -224491 hgrnmh -dir jsrqjjtc -dir shlhgj -123062 zfn.gss -$ cd jsrqjjtc -$ ls -245991 phc -$ cd .. -$ cd shlhgj -$ ls -284208 ctwmwlp.lnm -11067 vwsrmlf.dvz -$ cd .. -$ cd .. -$ cd wrnftqh -$ ls -237658 lldrh -14804 nszc.wdf -$ cd .. -$ cd .. -$ cd gqlg -$ ls -211474 jjhc.tzr -$ cd .. -$ cd gtwdqw -$ ls -92613 fvqbtm.tch -206813 ppzhmnb.grd -$ cd .. -$ cd hgrnmh -$ ls -249351 bftm -$ cd .. -$ cd jts -$ ls -132190 gqlg.vnn -208091 ldnq -202593 zcmfcjhf.tzw -$ cd .. -$ cd jvp -$ ls -258220 lflcgss.jrm -$ cd .. -$ cd jvrjcv -$ ls -20148 dzzlwp.bdj -289774 hgrnmh.bvc -296981 jwscd.cvj -16617 tbnwvcl.tlv -$ cd .. -$ cd .. -$ cd pvdwhmcr -$ ls -dir bhmmsbmb -dir bjwbvcq -dir hgrnmh -dir ltvtrtth -dir prtqcb -dir rmn -dir shlhgj -dir tmzcmb -dir vlbqvps -dir wmmfp -$ cd bhmmsbmb -$ ls -dir nccjwf -$ cd nccjwf -$ ls -dir drwhjfjn -206638 lflcgss.jrm -$ cd drwhjfjn -$ ls -291772 zcmfcjhf.tzw -$ cd .. -$ cd .. -$ cd .. -$ cd bjwbvcq -$ ls -dir zfn -$ cd zfn -$ ls -303808 wrbldbd -$ cd .. -$ cd .. -$ cd hgrnmh -$ ls -142765 fvqbtm.tch -159497 scqf.scf -270819 zcmfcjhf.tzw -$ cd .. -$ cd ltvtrtth -$ ls -dir fwtwqvn -156894 jnmqdq.zgp -297860 lflcgss.jrm -dir mcgcc -dir zfn -179328 zfn.vnn -dir zzsnz -$ cd fwtwqvn -$ ls -dir rqndc -dir rzsrp -124999 rzsrp.tvr -dir shlhgj -$ cd rqndc -$ ls -45124 zrcv -$ cd .. -$ cd rzsrp -$ ls -74041 rzsrp -$ cd .. -$ cd shlhgj -$ ls -117219 qptfpz.cgc -281188 shlhgj.bhd -121750 sptql -173637 vqp.dbs -$ cd .. -$ cd .. -$ cd mcgcc -$ ls -18295 gqlg -dir ngvwhnvf -177283 rjsrn.rlq -54239 rzsrp.tfq -$ cd ngvwhnvf -$ ls -207616 jjhc.tzr -$ cd .. -$ cd .. -$ cd zfn -$ ls -dir cwzbljh -$ cd cwzbljh -$ ls -134952 hmchpgn.nwf -$ cd .. -$ cd .. -$ cd zzsnz -$ ls -273014 shlhgj.pls -$ cd .. -$ cd .. -$ cd prtqcb -$ ls -dir dtr -dir rzsrp -199012 tnflwcsn -$ cd dtr -$ ls -dir gqlg -dir grwpbs -dir hgrnmh -115701 lflcgss.jrm -247838 tnflwcsn -268721 zcmfcjhf.tzw -15320 zwcd.dqb -$ cd gqlg -$ ls -285009 jjhc.tzr -125691 nhnlcjjt.zlj -54424 rzsrp.rll -$ cd .. -$ cd grwpbs -$ ls -59390 rzsrp.cms -$ cd .. -$ cd hgrnmh -$ ls -185747 lvtnqqdh.nzq -$ cd .. -$ cd .. -$ cd rzsrp -$ ls -268631 hvvpfd.smn -263890 tcrctpb.pcc -$ cd .. -$ cd .. -$ cd rmn -$ ls -dir gtnvc -205894 hqb.fwh -280887 lvvmjb.scj -dir rsnqlfsz -$ cd gtnvc -$ ls -28523 jjhc.tzr -$ cd .. -$ cd rsnqlfsz -$ ls -dir hgrnmh -dir nsfhtthc -$ cd hgrnmh -$ ls -183216 fvqbtm.tch -$ cd .. -$ cd nsfhtthc -$ ls -284747 jspmbh.rvh -$ cd .. -$ cd .. -$ cd .. -$ cd shlhgj -$ ls -144391 dzf -dir lrths -178083 nhlmsd.mnc -dir rwn -173833 shlhgj.qss -39183 tnflwcsn -125029 zfn.hjr -$ cd lrths -$ ls -dir hgrnmh -dir pfc -86563 rzsrp.gbc -280631 tmhnc.hmc -28181 ttsnjc.rhm -98060 vdmr.czg -dir vlshvmvj -dir wsn -210337 zfn.pqp -$ cd hgrnmh -$ ls -dir mvrlcvj -$ cd mvrlcvj -$ ls -121034 vssbr.qjm -$ cd .. -$ cd .. -$ cd pfc -$ ls -dir gqlg -$ cd gqlg -$ ls -305519 hdhn.wds -$ cd .. -$ cd .. -$ cd vlshvmvj -$ ls -56641 lflcgss.jrm -29190 rzsrp.vsh -36663 zcmfcjhf.tzw -$ cd .. -$ cd wsn -$ ls -137307 gmdfbfjf.crs -dir hgtqj -297924 lflcgss.jrm -dir shlhgj -$ cd hgtqj -$ ls -214202 qnlszftb.bzg -$ cd .. -$ cd shlhgj -$ ls -dir pmldlbbh -$ cd pmldlbbh -$ ls -263722 zwfptl.wsh -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd rwn -$ ls -279589 ttqg.qct -$ cd .. -$ cd .. -$ cd tmzcmb -$ ls -138557 jjhc.tzr -$ cd .. -$ cd vlbqvps -$ ls -dir nmfnf -123659 rzsrp -$ cd nmfnf -$ ls -dir jhpnd -50537 trzvzvgz.bqp -41828 vps -195245 wlwt.ftj -$ cd jhpnd -$ ls -257519 shlhgj.fwz -32963 wzmbdtz -$ cd .. -$ cd .. -$ cd .. -$ cd wmmfp -$ ls -94749 lflcgss.jrm -$ cd .. -$ cd .. -$ cd .. -$ cd dsjd -$ ls -284923 bjvwg.phz -dir bwjp -dir gqlg -dir hgrnmh -8771 jjhc.tzr -dir jntt -271995 qbtn.vps -299501 shlhgj.crl -dir vmph -dir zvg -$ cd bwjp -$ ls -117739 vtrg -$ cd .. -$ cd gqlg -$ ls -dir dwhr -159876 hgrnmh.jvw -dir rzsrp -$ cd dwhr -$ ls -193289 gqlg -171323 lflcgss.jrm -$ cd .. -$ cd rzsrp -$ ls -dir pmsgd -$ cd pmsgd -$ ls -12648 lflcgss.jrm -dir wbppspwq -$ cd wbppspwq -$ ls -38834 tnflwcsn -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd hgrnmh -$ ls -76649 cfdcbvdl.gfs -257249 gmmzf -83045 lhrtfcz -$ cd .. -$ cd jntt -$ ls -286866 lhqvt.lst -$ cd .. -$ cd vmph -$ ls -dir fnvpsr -dir gfnvsznj -19765 zcmfcjhf.tzw -204319 zzsnj.dcp -$ cd fnvpsr -$ ls -dir flz -173924 fvqbtm.tch -248297 mjrhs.scq -dir rzsrp -130580 zfn -$ cd flz -$ ls -106168 brsgg -$ cd .. -$ cd rzsrp -$ ls -221882 hgrnmh.nsl -dir smd -$ cd smd -$ ls -dir drsld -131686 fvqbtm.tch -dir gqlg -288283 hcw -$ cd drsld -$ ls -85885 zfn.wdf -$ cd .. -$ cd gqlg -$ ls -8466 dzjtj.zbc -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd gfnvsznj -$ ls -dir fqb -265075 gqlg -dir hdhmbtj -74385 hpz -dir lzdq -dir rlvqmwv -dir rzsrp -$ cd fqb -$ ls -55182 ccjgpg -245930 ppdgwcm.zfb -164364 sgtgqdn.tfp -$ cd .. -$ cd hdhmbtj -$ ls -dir gqlg -68609 jjhc.tzr -dir rzsrp -dir vrmrnt -66988 zcmfcjhf.tzw -$ cd gqlg -$ ls -156776 tnflwcsn -dir vdcbg -$ cd vdcbg -$ ls -261780 lflcgss.jrm -$ cd .. -$ cd .. -$ cd rzsrp -$ ls -27818 zfn -$ cd .. -$ cd vrmrnt -$ ls -273664 msmzfnj.llc -145156 svzmwnrq.chh -$ cd .. -$ cd .. -$ cd lzdq -$ ls -214363 fms -190021 lfzcgh.dsq -21357 qtvvmj.zqw -$ cd .. -$ cd rlvqmwv -$ ls -dir gqlg -198296 gqlg.sdz -842 gshcswc.dcb -dir shlhgj -199828 snng -$ cd gqlg -$ ls -183087 zfn.nsj -$ cd .. -$ cd shlhgj -$ ls -73040 tzgjrqmb -$ cd .. -$ cd .. -$ cd rzsrp -$ ls -229576 vtftgng.wfz -$ cd .. -$ cd .. -$ cd .. -$ cd zvg -$ ls -85701 shlhgj.dvf -$ cd .. -$ cd .. -$ cd nnzvl -$ ls -dir wwzsf -$ cd wwzsf -$ ls -105177 tvbdz -$ cd .. -$ cd .. -$ cd .. -$ cd zssdlnc -$ ls -dir nfgh -166004 twdcrh.zld -dir zfn -$ cd nfgh -$ ls -102281 fvqbtm.tch -$ cd .. -$ cd zfn -$ ls -dir fbmww -dir jsst -206602 shlhgj.cln -$ cd fbmww -$ ls -179734 fll -$ cd .. -$ cd jsst -$ ls -dir flp -$ cd flp -$ ls -32274 gctgt.stn -67650 ggvj.bwz diff --git a/2022/08/input.in b/2022/08/input.in deleted file mode 100644 index 67c19e5..0000000 --- a/2022/08/input.in +++ /dev/null @@ -1,99 +0,0 @@ -211212222022130201331244204031330314133103224443222153333314030424430144322333133111111001110111100 -011010002312022022213333124244332200012535311241312425233452234232332434002404314010213010300011020 -000122211022332331322030422114134234533543153332141433442315454242340242334121020031011333101002002 -212001231120020114443023323004341314244553111423553551151313122524454330124123430302021112131311210 -010023233323302131223113103422131413124511225231551512331151422122222242244011341133031332000123002 -010122332320232121222313343422344153542155353422554151444431132214155255442032200104444102212213121 -220311123023010212113012214434253241131125125144553514355135411412253214211034342023023233100210312 -012021233322101322014410134244343233151425141125355346552431312541441525552551132210132341231131213 -212022110210121130141215541523415532154426463253225335424345244125452453353521224302113344031023330 -001331301002442002234333243154523422345544442555654454522262236353114253113323520332302343300332303 -022221002233442142312112451142555566553525565662234553562446526522354241453541211024234444203213103 -121222311004442143452433443451433246356323333462224663645332426432564453315351524511430324331330313 -020033121433043013523451315525355225662246464433535443555244533263653654532332123344232243011131122 -331231332041133215352242534163532264356442645556436224536332662235525664241551351544514242443122020 -211224100401201134234315434244552434552354262423454635464345236222546422664131225224254043442021032 -231012303303415245123421452352524655622263645375354655347574553332462346426612522542555340213441312 -211043401112034321445551526323233226554374763356556636777355756535336234634241534141122200101402030 -112341023410451542221225654622622255353544565345645766565677556375252446634536424143355510132222200 -321013312335143545355422445454636567463677663737736766333543334747425233256224451325314525244413200 -134134112125343512236525526335246366357455663434636554535666675345375546365323352441311155004121134 -134103302234334422434623253335635454465444433673744644777565643336547576243523623215313211444123100 -121214332422533433642563564345446775634333677454565663433553464453353655453565463223325554140013211 -140340201515224355236356553354564345656637544677644666867363673577375377725566454643343552314401102 -242234123324245145352363463474556736655588548485584448876875743457645676744566665635145243345232034 -240002433255552223455653336765744666634687546687484788677745778643457356557523233245233345322203230 -203033145215334435435262347664466473474457867646854578857546674775433665576464664524234245315323221 -220240145522153253653343354334676665555545854865676474576864645785537443574743555546543552211424323 -203303223355443662564323675465776857766847558445856455464888855484856565473734263625333553514131204 -141343234343462623453376444565367475584744446846868687745447856768847544336577422435266221431351302 -011105311221546266246563346475574856785486544597695996967678786457746835375453766563243343232132222 -342153442535526543536765573565848468586567799675857888667865686547568643564577744364252242513532434 -303412514235522642433473653567558668878798557765777686957585688674776587434464373226246544543135343 -134313521546426353375756547586484656765785675686695796677998878746476587743677774454422656531211434 -330442321112644425464657363687688585599859586878658555897556995948874866676663357754662526513313351 -031152255535654264775364478686688678756896855798669886769655865898565686588637345474344563445412320 -033412231333255266746776747686577558998969786586588679955768678756678668685355457353433435511243215 -233232325556234436547474646776556656557756668998669967658757689688987578684577474336565246255532551 -232114313222322224464545378545768899675966969678976998999568556595885874447557776576555222565311333 -153554334255253356567537674646656569995678676788797887778695969889798866846683333743344642351554423 -345414252243643374353655675557769798967656689687786868687886675866575467874583577644342363531311344 -452213536622456254743557585655789799758988877898878787688797798767876666484675654443325664563135251 -151114452544554546436654876678799866898876787668968979699879995587987774468485375644536533255541211 -211514523322654673674356655476766668559777787767896697698867686989688685867584637757652452536532521 -325431245645266644556638674587856588976776679887879899868878797869579957766466547664576666553424155 -351353232222444754473488547447588977799698788797978898877869989965559967448746574666366225422555234 -413323553464546456467374574775588578597999986799989888988976899856686587855784743346666424425221545 -231444363436566774435677574767669997976869899777989877888676989766766555785667844345663255424355441 -131332342664544366547384447849957999767988788889999977889998688686776576587687545564772363266441344 -344323153255254475756447668487668876766786779788778999997667996768669658886648456344746335633653214 -432125224655454763335585885578768897889868679897777999877987996687598957855747536767467246264213342 -251123242522227743643744785665768788969768778798979798899976766779955656454747664477375562423352144 -335215134645536564436664555587969577787979887889798779897877686768869888764467653676646454662351122 -455541145534236474533477845547655956799686678788787897899877888979567875855484663636455423534225343 -443412355542265645777686678647889565778786879979978999977689898868965569867655855463733536555332123 -554333534644243647547485474889997578686899879987778777979796897956885659856478875353562443646414133 -523521346442456477365347646745578595568686668879987988977879897858556977787654645645753546466532354 -415551454256456643353367445455568986897777877789988897768879899869965985464454846544732365343211244 -045253325223423633465535668844665696698867976878987997697669698795567764745785435374775534356323555 -324424513464646646773334458686678768868668789699687898687769799596757997646887333456353525562532334 -333314122436424634656654458578885567975698998866676766687677986678988577887848647435423555654245141 -441323436226324474354554865578679696675896767799799699977678687576559874657778736635335633336333245 -325541255634234335777446557648487588986657787766698699877877978598595778688447674476666264664525524 -334224432254623447467743486544648996678656987989788868878788589778785746455873547654626326245514114 -413352531625243455733366467566645868987999997776889888868757777796558764784776476377665635553522333 -425235531356553325567457674875556778688685899689977798685876768589645658567837344646524442654525432 -103455532456342526657354677664785588679779979577568567955568596777454678585774353354436633221153331 -422433153464256665575466474547467484759655656769697755696555696797648476876754465655362463541153510 -200221512352422423435457444587878556556776655658757679865666957677874646877574343466422645122433143 -233312332322644356544567546775446655776887566656897679779679567464757846575634746754632245245312322 -440413534453435243635457637637844865678595957869877877556795746685484886655763473646525455242423424 -133015323213554533656353736775587775585487676857757689778864864846456683634546376645266241223134331 -341325554355154464532756673544377888566757758978576696758777847844684656374464563435536313553154410 -123231515424162465563463554775765668488574776875475754584748666766764547366777353655635341211544214 -411120434335113656445353437475335766655568765658746576454466786655883677746675446244525421121551010 -402433144311354446525322467654675484475575676777445476666764865885847756657433654652532114452353133 -432424042535244564355554365363676576876745584585766548666774675753564565547462524462425114452201003 -102313425251124435654356367537734654638566846546448757455657555476436573637522622235212353325544024 -220311435524234432323565463344475534664484764648754486454485567435377667774553343222531144155033034 -231020004114553111534454422257546737666353776748664584464344633646464475423245232221444424255211432 -032121221243151355266464525344734574375363364375343377346676563457354333464322642455152553422410413 -224424204312344155546224253423664743337765335743365463543544433363437353323264646443514252343204010 -001321143122112341544253536644545554446436763477746674374776466344577623333354536412412241240000301 -012121423241523355214265352225525345574443757474534637556673367573322622226565351432424315423431120 -002001243100554231422332533535466634675453664437575544663735566344653636536633315425145230310333331 -111131341421342553234223552634336262456343575734674633673656737332422423254544335452112104141212220 -312222012123233525325553364332226636325523744473366567533732646636556526353413122533352224001243232 -222104333230343332423213113445433536266452535452556675623325555336233552464241241531142132324111100 -120033123241410113453233151144554262266263655622523332323624264526223446642241422415122401000243333 -300110321321220332412453221523552552665236344464424652635635223664335443125224432335044114323031213 -022320323221440340524544434152545623533526235366642566655434622263663532553353311521231430123330113 -002023331000112411134112432323353142332443352524442462645622663225223434341133154204330110021211033 -001030002322324022304135433132453151564563345632626222566526534531324522534413523110111000231032001 -021300020130201201401332235525125513213453326526662453442553331541555225115331120431314320302111303 -021321020201323321211302324413125143432142143524266333524534451124153311112131123343411412020232121 -202310321020334220421002031152143124243343112321122253451541422112235155133111203114013232211133211 -210131010322112330120423222122351343151544412545222452312115521551124142440421412131234310031213311 -200022120033030133130312000240311254212234133155524431352242335344153414002444032121311102101011000 -022201303110101303411200001233415242353252421341231234412423235311314133130301320201102330230131001 -200002110210232130434243031312421313244134152512112542334551242213212344113244124232001302221200010 diff --git a/2022/09/input.in b/2022/09/input.in deleted file mode 100644 index de3f33c..0000000 --- a/2022/09/input.in +++ /dev/null @@ -1,2000 +0,0 @@ -U 2 -D 2 -R 2 -U 2 -D 1 -L 2 -R 2 -D 1 -R 2 -D 1 -R 2 -L 1 -U 1 -L 2 -R 2 -L 2 -U 2 -R 2 -L 1 -U 1 -R 2 -U 1 -D 2 -L 1 -U 2 -D 1 -L 1 -R 1 -L 1 -D 1 -R 1 -D 2 -L 1 -U 2 -L 1 -U 1 -D 2 -U 1 -R 2 -U 1 -R 2 -D 1 -U 1 -D 2 -L 2 -U 2 -L 2 -R 1 -L 1 -U 2 -D 2 -U 1 -R 2 -L 2 -U 1 -R 1 -L 2 -D 1 -L 1 -U 2 -D 1 -R 1 -U 2 -R 2 -U 2 -R 2 -D 1 -L 2 -R 2 -U 2 -D 2 -U 2 -L 1 -U 1 -L 2 -U 1 -D 1 -L 1 -D 1 -L 1 -R 1 -L 1 -R 2 -D 1 -L 1 -D 2 -R 2 -L 1 -U 2 -L 1 -U 2 -L 1 -U 1 -D 2 -U 1 -L 1 -R 1 -D 1 -L 2 -U 1 -L 1 -R 2 -D 1 -L 2 -U 1 -L 2 -D 2 -R 2 -D 2 -U 1 -D 2 -R 3 -U 2 -L 2 -R 3 -L 2 -U 3 -L 3 -D 1 -R 2 -L 1 -R 2 -U 3 -R 3 -L 1 -D 2 -R 3 -L 2 -D 3 -L 3 -U 1 -R 1 -D 2 -R 2 -D 3 -L 3 -U 3 -R 3 -D 2 -U 1 -D 3 -L 2 -R 1 -D 3 -L 3 -D 3 -L 2 -D 3 -L 1 -D 2 -R 2 -L 3 -U 2 -R 2 -L 1 -U 1 -D 3 -R 3 -U 2 -R 3 -D 1 -R 1 -U 3 -D 2 -L 2 -D 2 -L 3 -U 2 -R 3 -D 1 -L 3 -U 1 -R 3 -U 1 -D 1 -U 2 -D 1 -R 2 -L 2 -D 1 -R 1 -D 2 -L 1 -U 1 -D 1 -R 2 -D 1 -L 2 -R 1 -D 3 -U 1 -D 3 -U 2 -L 1 -U 3 -D 2 -L 3 -U 2 -D 3 -R 3 -D 3 -U 3 -R 1 -U 2 -L 3 -D 1 -R 3 -D 2 -U 2 -D 2 -L 3 -U 3 -D 3 -R 3 -L 2 -D 3 -U 3 -D 3 -U 2 -R 2 -L 3 -R 3 -U 1 -D 1 -U 2 -L 4 -D 1 -U 1 -L 2 -D 4 -U 3 -L 1 -U 1 -D 1 -L 4 -R 4 -L 4 -R 2 -U 4 -L 2 -R 1 -L 3 -U 3 -D 2 -L 3 -U 4 -R 3 -L 4 -D 2 -U 3 -D 2 -U 2 -L 4 -D 2 -L 1 -R 4 -U 4 -D 2 -U 4 -L 4 -D 2 -L 3 -U 3 -D 1 -R 1 -U 1 -D 4 -U 3 -L 4 -D 1 -L 4 -U 1 -L 2 -U 3 -D 2 -L 3 -U 4 -D 2 -U 1 -D 1 -U 1 -R 2 -L 2 -D 3 -U 2 -R 1 -U 1 -L 4 -U 1 -R 2 -D 3 -R 1 -D 1 -R 3 -D 3 -L 1 -U 3 -L 3 -D 4 -L 3 -D 4 -L 1 -D 1 -R 1 -D 1 -U 4 -L 2 -U 3 -D 4 -R 4 -D 1 -U 2 -D 4 -U 1 -R 4 -L 2 -D 3 -U 4 -R 3 -D 1 -L 3 -D 4 -R 4 -L 3 -D 2 -L 3 -U 3 -R 3 -D 1 -R 1 -L 2 -D 2 -U 4 -R 1 -L 1 -D 2 -U 3 -D 3 -L 3 -D 5 -L 1 -U 2 -L 5 -U 3 -R 3 -L 2 -U 2 -L 1 -U 5 -L 4 -D 1 -L 3 -D 5 -U 3 -R 5 -D 1 -L 5 -R 5 -L 5 -D 4 -U 4 -L 5 -U 5 -R 5 -U 2 -D 5 -L 5 -U 3 -L 3 -U 4 -L 5 -U 3 -D 4 -R 3 -U 1 -L 2 -U 5 -L 1 -U 2 -D 1 -U 1 -D 1 -R 4 -L 1 -R 2 -D 2 -R 3 -L 5 -R 2 -D 5 -U 4 -R 5 -D 3 -L 1 -D 3 -R 3 -L 1 -R 4 -D 3 -L 5 -D 1 -R 1 -U 4 -D 2 -R 3 -U 4 -D 3 -U 1 -D 1 -R 1 -D 4 -U 1 -L 5 -R 1 -U 5 -L 4 -R 1 -L 1 -R 4 -D 3 -U 3 -D 3 -U 4 -L 2 -U 1 -R 2 -U 1 -D 4 -U 4 -R 1 -U 4 -R 3 -L 4 -R 2 -L 4 -D 5 -R 3 -U 1 -D 1 -L 3 -R 2 -U 1 -D 3 -U 1 -D 1 -R 3 -U 2 -L 6 -R 1 -D 1 -R 5 -L 5 -U 4 -D 1 -L 6 -D 5 -L 3 -D 6 -R 1 -U 3 -D 3 -R 5 -U 1 -R 5 -D 1 -L 1 -D 4 -L 1 -D 4 -R 1 -D 5 -U 6 -L 5 -R 2 -U 2 -D 6 -R 3 -U 6 -L 2 -D 5 -U 3 -R 1 -D 3 -L 1 -D 3 -U 1 -D 3 -U 4 -R 2 -D 3 -R 2 -D 2 -L 3 -U 2 -R 6 -D 4 -R 4 -D 1 -U 3 -D 1 -L 3 -U 6 -R 4 -D 3 -R 3 -L 4 -R 2 -U 5 -D 6 -L 5 -U 3 -L 4 -D 2 -R 2 -D 3 -L 6 -D 1 -U 1 -R 4 -L 5 -D 3 -U 4 -L 2 -U 5 -L 2 -U 5 -D 1 -L 4 -U 1 -R 2 -L 3 -D 1 -U 4 -D 2 -U 2 -L 1 -D 4 -R 2 -L 3 -R 2 -D 6 -R 2 -D 3 -R 3 -D 2 -U 6 -D 4 -R 4 -U 4 -L 5 -R 3 -L 4 -D 3 -L 2 -R 2 -D 1 -L 6 -R 7 -L 3 -U 3 -D 6 -U 4 -R 4 -D 7 -L 4 -U 1 -L 5 -R 5 -L 5 -U 7 -R 1 -D 2 -R 6 -D 6 -U 2 -R 1 -U 2 -L 5 -D 7 -U 5 -L 3 -U 4 -L 5 -U 4 -L 2 -D 1 -U 3 -R 4 -L 5 -R 5 -L 4 -R 3 -L 7 -R 4 -U 1 -L 4 -R 4 -U 7 -D 3 -U 4 -L 7 -D 5 -L 1 -D 5 -L 7 -U 5 -L 5 -D 3 -U 5 -D 3 -U 7 -R 5 -D 1 -U 2 -L 1 -U 1 -D 1 -L 1 -U 6 -D 2 -L 7 -U 5 -R 4 -L 3 -U 2 -L 1 -R 1 -L 2 -D 3 -L 3 -U 4 -D 4 -U 7 -D 7 -U 6 -D 7 -R 5 -U 7 -D 4 -U 3 -R 3 -D 3 -U 6 -L 6 -U 1 -R 1 -U 7 -R 2 -U 1 -D 1 -R 1 -D 1 -L 6 -U 6 -D 7 -R 4 -D 1 -L 2 -U 6 -L 2 -D 2 -R 2 -D 3 -L 3 -R 5 -D 1 -R 4 -L 1 -U 1 -R 3 -L 8 -U 3 -L 3 -R 5 -L 8 -D 1 -R 1 -D 8 -L 4 -D 2 -L 4 -U 3 -D 6 -R 2 -U 4 -D 6 -R 8 -D 4 -L 7 -R 6 -U 2 -R 1 -U 3 -R 2 -L 1 -R 8 -L 2 -D 6 -R 6 -D 6 -U 2 -D 6 -R 7 -D 4 -U 6 -R 5 -D 8 -L 3 -R 6 -D 4 -R 4 -U 2 -D 8 -L 8 -U 6 -D 2 -R 3 -L 2 -D 6 -U 8 -R 3 -D 3 -L 5 -D 5 -L 4 -R 8 -D 3 -U 3 -D 2 -R 8 -U 4 -L 8 -U 2 -R 1 -L 4 -D 5 -L 5 -R 5 -D 3 -L 7 -D 4 -L 6 -D 2 -U 3 -D 2 -L 2 -D 6 -R 2 -U 6 -R 7 -L 8 -U 3 -D 8 -L 1 -U 8 -L 8 -D 2 -R 6 -U 4 -D 8 -U 3 -L 7 -D 7 -L 8 -U 8 -L 4 -U 6 -L 1 -U 4 -D 7 -U 3 -R 2 -D 4 -L 5 -U 8 -R 4 -U 1 -R 2 -U 4 -D 7 -U 7 -R 7 -D 7 -U 9 -L 4 -D 8 -U 6 -L 3 -D 1 -U 8 -L 9 -U 8 -D 8 -U 2 -L 1 -U 5 -L 9 -U 4 -D 7 -L 5 -U 4 -R 5 -D 2 -L 3 -D 5 -R 3 -L 2 -D 9 -U 5 -L 6 -U 7 -D 2 -R 2 -D 3 -R 5 -U 7 -L 1 -U 9 -R 3 -D 8 -R 6 -D 5 -U 9 -R 9 -D 3 -U 8 -D 3 -R 6 -D 4 -U 8 -L 4 -D 8 -R 2 -U 2 -R 3 -D 9 -L 9 -U 7 -R 4 -D 4 -L 5 -U 1 -D 3 -R 6 -L 4 -R 1 -D 6 -R 4 -L 4 -U 6 -D 2 -L 2 -D 3 -R 8 -D 3 -U 4 -L 4 -D 2 -U 2 -L 4 -D 9 -R 9 -D 6 -U 7 -L 8 -U 6 -D 5 -R 2 -D 5 -U 9 -R 5 -D 7 -U 2 -L 3 -R 2 -U 5 -L 4 -D 5 -U 2 -L 9 -U 3 -R 2 -D 9 -R 5 -D 9 -U 2 -R 2 -L 6 -U 3 -L 6 -R 8 -U 5 -D 8 -R 9 -L 2 -R 2 -U 1 -D 10 -R 8 -L 6 -D 9 -R 5 -L 10 -R 2 -L 3 -R 9 -D 7 -U 10 -D 9 -L 7 -U 8 -D 7 -U 2 -D 1 -U 5 -R 9 -U 9 -R 6 -D 4 -L 3 -D 6 -R 10 -D 2 -L 4 -U 8 -R 6 -L 3 -U 1 -D 8 -R 6 -D 4 -L 1 -R 3 -L 10 -U 4 -D 5 -U 1 -R 3 -U 5 -R 5 -D 9 -R 1 -L 4 -U 4 -R 4 -D 7 -L 1 -U 6 -R 6 -U 1 -D 4 -R 2 -L 3 -D 6 -L 3 -R 1 -L 10 -D 1 -L 1 -U 6 -R 7 -L 8 -U 2 -D 10 -R 4 -D 9 -R 2 -U 9 -L 2 -U 7 -D 4 -U 4 -R 9 -U 9 -R 6 -D 7 -L 8 -U 1 -D 6 -L 6 -U 8 -D 3 -R 4 -L 4 -D 1 -L 2 -D 3 -L 2 -U 1 -L 5 -D 2 -U 8 -L 1 -U 5 -L 3 -U 3 -R 3 -U 1 -L 7 -D 9 -R 3 -D 10 -R 8 -L 5 -D 3 -U 6 -R 4 -U 4 -D 2 -L 5 -U 11 -L 3 -U 1 -L 6 -D 1 -L 2 -U 8 -R 6 -L 4 -R 2 -U 3 -L 3 -D 4 -L 2 -R 5 -U 4 -D 5 -U 10 -R 1 -D 6 -L 4 -U 9 -D 3 -U 5 -D 9 -L 1 -U 8 -D 11 -L 4 -D 4 -L 5 -D 7 -L 7 -R 10 -U 5 -R 1 -D 10 -R 3 -D 11 -R 7 -L 6 -U 7 -D 4 -L 7 -U 8 -R 6 -L 4 -U 5 -L 7 -R 2 -D 10 -L 8 -R 4 -U 1 -R 5 -L 2 -R 4 -L 6 -R 4 -U 10 -R 6 -U 9 -R 9 -D 6 -L 7 -D 1 -U 1 -L 8 -U 1 -D 8 -L 10 -R 6 -D 4 -R 9 -D 4 -R 3 -D 4 -U 8 -L 3 -D 7 -L 2 -R 10 -U 5 -R 4 -L 3 -D 6 -U 7 -R 8 -D 5 -R 6 -L 7 -R 4 -U 6 -L 8 -D 8 -R 6 -L 6 -U 8 -R 10 -U 4 -R 2 -D 2 -L 11 -R 10 -L 5 -U 10 -L 5 -D 12 -L 7 -D 8 -L 2 -U 1 -L 11 -R 3 -D 8 -U 7 -L 6 -D 9 -L 12 -U 7 -L 11 -R 7 -U 8 -L 4 -D 9 -U 6 -D 9 -R 7 -L 4 -R 12 -U 8 -D 6 -U 8 -D 6 -U 5 -L 2 -U 2 -L 9 -D 10 -L 11 -U 10 -R 4 -L 12 -U 6 -L 11 -R 10 -U 9 -L 2 -D 11 -L 11 -D 10 -U 8 -R 10 -L 7 -R 6 -L 6 -U 5 -L 8 -D 5 -U 7 -L 5 -D 8 -R 5 -L 7 -D 10 -L 10 -D 12 -L 8 -R 11 -U 6 -L 12 -D 9 -U 5 -R 2 -U 6 -D 11 -U 5 -R 1 -L 2 -R 3 -U 8 -R 4 -L 10 -R 6 -D 9 -L 3 -U 11 -L 4 -U 1 -R 5 -L 8 -D 8 -U 2 -D 7 -U 5 -R 10 -L 4 -D 4 -U 2 -L 7 -D 12 -U 12 -D 5 -U 12 -R 3 -L 4 -U 10 -L 1 -R 2 -L 9 -R 9 -L 5 -U 5 -L 10 -U 12 -L 3 -D 5 -U 12 -L 10 -D 11 -U 12 -L 2 -U 11 -R 6 -D 10 -U 6 -L 5 -D 10 -U 10 -D 12 -U 3 -L 10 -U 9 -R 4 -U 4 -L 12 -R 12 -L 4 -D 5 -L 9 -U 5 -L 11 -R 12 -D 8 -L 6 -U 10 -D 2 -U 11 -D 6 -R 10 -D 1 -L 5 -U 1 -D 10 -U 1 -L 13 -U 11 -L 6 -R 1 -U 11 -D 10 -R 11 -L 3 -U 6 -R 13 -U 13 -L 6 -R 4 -D 3 -L 10 -U 2 -R 9 -D 6 -L 12 -U 11 -D 9 -R 2 -L 2 -D 4 -R 13 -L 7 -R 7 -L 9 -R 11 -U 4 -D 2 -L 4 -R 12 -L 3 -D 8 -U 9 -D 3 -R 11 -U 11 -D 13 -U 1 -D 6 -U 2 -R 13 -L 5 -U 6 -L 5 -U 13 -L 12 -D 7 -L 12 -R 4 -U 4 -D 3 -L 5 -D 10 -U 10 -L 2 -U 11 -L 9 -U 11 -R 7 -D 4 -U 9 -D 7 -R 6 -L 2 -D 2 -L 1 -U 10 -R 5 -U 5 -R 1 -L 10 -D 11 -U 5 -D 13 -R 9 -D 6 -R 2 -D 13 -R 12 -L 11 -D 6 -R 9 -U 12 -R 11 -U 6 -R 12 -D 4 -R 11 -L 5 -D 1 -U 5 -R 8 -D 1 -R 12 -L 9 -U 6 -L 9 -U 3 -L 6 -R 3 -U 2 -R 3 -U 14 -L 7 -R 7 -L 12 -U 7 -R 5 -D 7 -L 10 -U 14 -D 8 -L 5 -U 11 -D 4 -U 10 -R 9 -U 4 -R 1 -L 11 -U 13 -D 8 -R 10 -L 3 -U 11 -L 5 -U 2 -R 6 -U 3 -R 10 -L 4 -R 3 -D 8 -U 11 -L 11 -U 6 -R 6 -U 8 -R 4 -L 10 -R 2 -U 4 -L 2 -D 12 -R 12 -D 4 -U 14 -R 6 -U 1 -R 9 -L 5 -U 9 -D 5 -R 13 -U 11 -L 8 -R 11 -D 9 -L 8 -D 8 -U 5 -R 2 -L 3 -D 6 -U 9 -D 1 -L 8 -U 6 -L 6 -R 8 -D 13 -R 12 -L 5 -U 8 -R 11 -D 4 -U 13 -D 10 -U 4 -D 3 -L 14 -R 14 -D 5 -R 2 -D 7 -L 13 -U 1 -L 14 -U 15 -D 11 -R 2 -U 15 -R 11 -L 8 -U 11 -D 4 -R 2 -U 8 -L 8 -R 11 -U 9 -L 11 -D 4 -L 8 -U 9 -L 9 -D 15 -U 1 -L 8 -U 7 -L 12 -U 13 -R 7 -L 6 -D 13 -U 1 -L 9 -D 11 -R 8 -D 3 -R 11 -L 8 -R 9 -U 2 -L 1 -U 5 -D 14 -R 3 -U 12 -R 4 -U 15 -D 1 -R 11 -L 11 -U 11 -L 1 -D 12 -U 7 -L 13 -R 4 -U 5 -D 15 -L 14 -R 10 -U 9 -R 7 -D 13 -L 15 -R 10 -L 2 -R 5 -D 12 -U 13 -R 6 -L 15 -R 14 -D 1 -U 1 -L 2 -U 11 -R 15 -U 8 -R 9 -U 5 -L 9 -D 14 -R 9 -D 9 -U 8 -R 8 -U 3 -R 7 -D 11 -R 4 -U 9 -R 9 -U 11 -D 4 -U 12 -L 9 -R 3 -D 7 -L 6 -R 1 -D 9 -R 1 -D 4 -R 16 -U 12 -R 8 -D 7 -L 7 -R 9 -U 16 -R 15 -U 14 -L 14 -D 3 -R 4 -U 4 -D 1 -L 2 -D 11 -R 2 -U 2 -D 16 -U 4 -D 5 -R 14 -D 3 -R 5 -D 10 -R 2 -L 4 -U 6 -R 9 -D 16 -R 12 -U 2 -L 16 -R 7 -L 8 -R 5 -L 5 -U 14 -D 16 -U 7 -R 2 -U 15 -L 3 -R 7 -L 5 -U 8 -R 11 -D 3 -L 5 -U 7 -L 8 -R 3 -U 3 -D 5 -U 13 -L 8 -U 1 -D 13 -R 11 -L 2 -U 14 -R 15 -U 2 -D 7 -R 15 -L 5 -D 9 -U 8 -R 5 -L 15 -D 3 -R 10 -D 10 -U 7 -D 7 -U 14 -R 2 -U 8 -R 14 -L 11 -R 16 -U 11 -D 16 -U 2 -L 10 -U 5 -D 6 -L 7 -U 8 -D 10 -R 11 -L 7 -D 5 -U 6 -L 5 -D 5 -R 1 -L 7 -U 9 -L 5 -U 3 -D 7 -R 14 -U 9 -D 6 -L 13 -U 8 -L 5 -D 5 -R 3 -U 7 -D 6 -U 8 -R 16 -U 17 -L 5 -R 8 -L 8 -U 8 -L 10 -D 17 -R 5 -D 3 -L 17 -R 17 -D 4 -R 15 -D 6 -L 3 -R 17 -D 9 -L 13 -U 4 -D 2 -L 17 -R 1 -L 14 -D 17 -L 9 -R 12 -U 14 -D 12 -U 3 -R 7 -D 1 -L 13 -R 13 -U 16 -D 13 -U 15 -R 15 -U 4 -D 11 -L 7 -U 1 -D 14 -U 8 -L 11 -D 13 -L 12 -U 17 -L 13 -U 2 -R 10 -L 12 -R 12 -U 1 -R 8 -U 10 -D 15 -R 3 -U 4 -R 12 -L 9 -D 15 -L 13 -D 15 -L 7 -D 8 -L 7 -U 6 -L 17 -R 4 -D 10 -U 11 -L 8 -R 14 -U 9 -R 9 -L 6 -U 1 -L 5 -D 11 -R 10 -L 16 -U 15 -L 12 -R 13 -D 5 -L 4 -D 12 -L 6 -R 3 -D 12 -L 4 -U 2 -L 16 -D 6 -R 15 -U 7 -D 2 -L 14 -D 6 -R 14 -D 7 -U 11 -R 4 -D 3 -R 6 -L 3 -D 11 -U 2 -R 5 -U 3 -L 1 -U 7 -R 13 -U 12 -D 12 -R 13 -D 7 -L 12 -D 10 -U 14 -R 12 -D 4 -R 2 -U 16 -D 9 -L 14 -U 14 -D 8 -L 7 -R 7 -D 18 -U 18 -R 8 -L 15 -U 12 -D 11 -L 16 -D 18 -R 14 -L 5 -R 12 -D 11 -R 13 -L 17 -D 4 -L 10 -U 1 -L 8 -U 10 -R 13 -D 2 -L 14 -D 1 -R 5 -L 4 -R 11 -L 7 -D 2 -R 8 -L 13 -R 5 -L 5 -R 11 -U 15 -D 3 -U 2 -R 6 -U 1 -R 8 -L 5 -U 1 -R 9 -D 13 -R 8 -U 17 -L 16 -U 3 -L 9 -D 9 -U 6 -L 8 -R 13 -L 7 -R 16 -U 6 -L 13 -U 18 -L 17 -D 15 -R 5 -U 6 -D 11 -U 15 -L 4 -R 14 -U 9 -R 11 -U 9 -L 11 -D 7 -U 9 -L 10 -D 4 -R 7 -U 7 -D 8 -R 1 -D 12 -R 16 -U 7 -R 9 -D 10 -R 1 -L 1 -U 16 -L 4 -U 11 -D 1 -U 3 -R 17 -U 17 -L 12 -R 9 -U 14 -D 4 -L 6 -R 4 -L 15 -U 1 -D 2 -U 9 -R 16 -L 1 -R 2 -L 12 -U 12 -D 7 -R 13 -D 6 -L 2 -D 3 -U 8 -L 7 -U 16 -L 15 -D 18 -L 19 -U 7 -R 17 -D 7 -U 3 -R 12 -D 1 -L 17 -U 19 -D 15 -R 3 -D 5 -U 17 -D 16 -U 2 -R 13 -D 7 -U 19 -L 5 -R 3 -D 15 -L 12 -D 19 -L 19 -U 1 -R 10 -D 14 -U 3 -R 1 -L 6 -U 14 -L 11 -R 10 -L 7 -R 14 -D 9 -U 14 -R 5 -L 19 -U 10 -L 12 -U 10 -L 3 -D 13 -U 12 -R 12 -D 6 -L 2 -U 1 -D 16 -U 9 -L 7 -R 14 -L 15 -U 9 -L 19 -U 14 -D 9 -U 15 -L 13 -U 12 -L 1 -D 7 -U 7 -L 7 -R 2 -U 16 -R 6 -D 11 -U 7 -D 11 -U 19 -R 13 -D 7 -R 7 -L 6 -R 14 -L 18 -D 2 -L 5 -D 8 -L 7 -U 17 -D 15 -U 19 diff --git a/2022/10/input.in b/2022/10/input.in deleted file mode 100644 index 59c5e14..0000000 --- a/2022/10/input.in +++ /dev/null @@ -1,142 +0,0 @@ -noop -noop -noop -addx 3 -addx 20 -noop -addx -12 -noop -addx 4 -noop -noop -noop -addx 1 -addx 2 -addx 5 -addx 16 -addx -14 -addx -25 -addx 30 -addx 1 -noop -addx 5 -noop -addx -38 -noop -noop -noop -addx 3 -addx 2 -noop -noop -noop -addx 5 -addx 5 -addx 2 -addx 13 -addx 6 -addx -16 -addx 2 -addx 5 -addx -15 -addx 16 -addx 7 -noop -addx -2 -addx 2 -addx 5 -addx -39 -addx 4 -addx -2 -addx 2 -addx 7 -noop -addx -2 -addx 17 -addx -10 -noop -noop -addx 5 -addx -1 -addx 6 -noop -addx -2 -addx 5 -addx -8 -addx 12 -addx 3 -addx -2 -addx -19 -addx -16 -addx 2 -addx 5 -noop -addx 25 -addx 7 -addx -29 -addx 3 -addx 4 -addx -4 -addx 9 -noop -addx 2 -addx -20 -addx 23 -addx 1 -noop -addx 5 -addx -10 -addx 14 -addx 2 -addx -1 -addx -38 -noop -addx 20 -addx -15 -noop -addx 7 -noop -addx 26 -addx -25 -addx 2 -addx 7 -noop -noop -addx 2 -addx -5 -addx 6 -addx 5 -addx 2 -addx 8 -addx -3 -noop -addx 3 -addx -2 -addx -38 -addx 13 -addx -6 -noop -addx 1 -addx 5 -noop -noop -noop -noop -addx 2 -noop -noop -addx 7 -addx 3 -addx -2 -addx 2 -addx 5 -addx 2 -noop -addx 1 -addx 5 -noop -noop -noop -noop -noop -noop diff --git a/2022/11/input.in b/2022/11/input.in deleted file mode 100644 index f505c2e..0000000 --- a/2022/11/input.in +++ /dev/null @@ -1,55 +0,0 @@ -Monkey 0: - Starting items: 83, 97, 95, 67 - Operation: new = old * 19 - Test: divisible by 17 - If true: throw to monkey 2 - If false: throw to monkey 7 - -Monkey 1: - Starting items: 71, 70, 79, 88, 56, 70 - Operation: new = old + 2 - Test: divisible by 19 - If true: throw to monkey 7 - If false: throw to monkey 0 - -Monkey 2: - Starting items: 98, 51, 51, 63, 80, 85, 84, 95 - Operation: new = old + 7 - Test: divisible by 7 - If true: throw to monkey 4 - If false: throw to monkey 3 - -Monkey 3: - Starting items: 77, 90, 82, 80, 79 - Operation: new = old + 1 - Test: divisible by 11 - If true: throw to monkey 6 - If false: throw to monkey 4 - -Monkey 4: - Starting items: 68 - Operation: new = old * 5 - Test: divisible by 13 - If true: throw to monkey 6 - If false: throw to monkey 5 - -Monkey 5: - Starting items: 60, 94 - Operation: new = old + 5 - Test: divisible by 3 - If true: throw to monkey 1 - If false: throw to monkey 0 - -Monkey 6: - Starting items: 81, 51, 85 - Operation: new = old * old - Test: divisible by 5 - If true: throw to monkey 5 - If false: throw to monkey 1 - -Monkey 7: - Starting items: 98, 81, 63, 65, 84, 71, 84 - Operation: new = old + 3 - Test: divisible by 2 - If true: throw to monkey 2 - If false: throw to monkey 3 diff --git a/2022/12/input.in b/2022/12/input.in deleted file mode 100644 index ce89a91..0000000 --- a/2022/12/input.in +++ /dev/null @@ -1,41 +0,0 @@ -abaccccccccccccccaaaccccaaaaaaaaaaaaaccccccaacccccccccccccccccccccccccccccaaaaaa -abaaccaacccccccccaaaaaccccaaaaaaaaaaaaaccccaaacccccccccccccccccccccccccccccaaaaa -abaaccaaacccccccaaaaaacccaaaaaaaaaaaaaacaaaaaaaaccccccccaacccccccccccccccccccaaa -abcaaaaaaaacccccaaaaaacccaaaaaaaaaaaaaacaaaaaaaacccccccaaaacccccccccccccccccaaaa -abcaaaaaaaaccccccaaaaaccaaaaaaaaccaaaaaccaaaaaaccccccccaaaaccaaaccccccccccccaaac -abccaaaaaacccccccaaaaccaaaaaaaaaacaaaacccaaaaaacccccccccakkaaaaaacccccccccccaacc -abccaaaaaacccccccccccccaaaaaaaaaaccccccccaaaaaaccccccckkkkkkkaaacccccccccccccccc -abccaaaaaaccccccccccccccccaaaaaaaaaccccccaacaaacccccckkkkkkkkkaccccccaccaaaccccc -abccaacaaacccccaaccccccccaaacacaaaacaaccccccccccccccakkkoppkkkkicccccaaaaaaccccc -abccccccccccccaaaccccccccaacccccaaaaaaccccccccccccccjkkooppppkiicccccccaaaaccccc -abccccccccccaaaaaaaaccccccccccaaaaaaaccccccccccccccjjjooopppppiiiicccccccaaacccc -abaaacccccccaaaaaaaacccccccaacaaaaaaccccccccccccccjjjjooouuppppiiiiiicccccaacccc -abaaaccccccccaaaaaaccccccccaaaccaaaaacccccccccccjjjjjooouuuupppiiiiiiiiccccacccc -abaaaaaacccccaaaaaacccccaaaaaaaaaacaaaccccccccjjjjjjooouuuuuupppppiiiiiicccccccc -abaaaaaacccccaaaaaacccccaaaaaaaaaacccccccccccjjjjjooooouuxxuupppppqqqijjjccccccc -abaaaacccccaaaaccaaccccccaaaaaaccccccccccccciijjnooooouuuxxxuuupqqqqqqjjjdddcccc -abaaaaaccaaaaaaccacccccccaaaaaaccccccccccaaiiiinnootttuuxxxxuuvvvvvqqqjjjdddcccc -abaaaaaccaaaaaacaaaccaaccaaaaaaccccccccccaaiiinnnntttttuxxxxxvvvvvvqqqjjjdddcccc -abaaccacccaaaaacaaaaaaaccaaccaaccccccccccaaiiinnnttttxxxxxxxyyyyyvvqqqjjjdddcccc -abcccccccaaaaacccaaaaaaccccccaaaaacccccccaaiiinnntttxxxxxxxyyyyyvvvqqqjjjddccccc -SbcccccccaaaaacaaaaaaaaccccccaaaaaccccccccciiinnntttxxxEzzzzyyyyvvqqqjjjdddccccc -abcccccccccccccaaaaaaaaaccccaaaaaaccccccccciiinnnntttxxxxyyyyyvvvvqqjjjdddcccccc -abcccccccccccccaaaaaaaaaacccaaaaaacccccccccciiinnnttttxxxyyyyyvvvqqqjjjdddcccccc -abccccccccccccccccaaaaaaacccaaaaaaccccccccccciiinnnntttwyyywyyyvvrrrkkjdddcccccc -abcccccccccccccccaaaaaaaaccccaaaccccccccccccciiihnnnttwwwywwyyywvrrrkkkeeccccccc -abcccccccccccccccaaaaaaaaccccccccccccccccccccchhhmmmsswwwwwwwwwwwvrrkkkeeccccccc -abcccccccaacccccccacaaacccccccccccccccccccaacchhhhmmsswwwwwswwwwwrrrkkkeeccccccc -abcccccccaaaccacccccaaacccccccccccccccaaccaaccchhhmmssswwwssrrwwwrrrkkkeeccccccc -abcccccccaaaaaaacccccccccccaaaccccccccaaaaaaccchhhmmssssssssrrrrrrrrkkkeeaaacccc -abcccccaaaaaaaaccccccccccccaaaaccccccccaaaaaaachhhmmmssssssllrrrrrrkkkeeeaaacccc -abccccaaaaaaaaaccccccccccccaaaacccccccccaaaaacchhhmmmmsssllllllllkkkkkeeeaaacccc -abccccaaaaaaaaaccccccccccccaaacccccccccaaaaacccchhhmmmmmlllllllllkkkkeeeeaaccccc -abcccccccaaaaaaccccccccccaacccccccaaccaaacaacccchhhmmmmmlllgfflllkkffeeeaaaacccc -abccccccaaaaaaaccccccccccaaaaaaaaaaaaaccccaacccchhhggmmmggggffffffffffeaaaaacccc -abccaacccaacccaaaaccaccccaaaaaaaaaaaaacccccccccccgggggggggggffffffffffaacccccccc -abaaaaccaaaccccaaaaaaccccaaaaaacaaaaaaccccccccccccgggggggggaaaaccffccccccccccccc -abaaaacccccccccaaaaaaccaaaaaaaaaaaaaacccccccccccccccgggaaaaaaaacccccccccccccccca -abaaaaacccccccaaaaaaaccaaaaaaaaaaaaaacccccccccccccccccaaacccaaaaccccccccccccccaa -abaaaaacaaaaccaaaaaaaacaaaaaaaaaaaccccccccccccccccccccaaaccccaaaccccccccccaaacaa -abaaaaacaaaaccaaaaaaaaaaaaaaaaaaacccccccccccccccccccccccccccccccccccccccccaaaaaa -abaaacccaaaaccccaaaccccaaaaaaaaaaacccccccccccccccccccccccccccccccccccccccccaaaaa diff --git a/2022/13/input.in b/2022/13/input.in deleted file mode 100644 index 0bd78e3..0000000 --- a/2022/13/input.in +++ /dev/null @@ -1,449 +0,0 @@ -[[[5,[10,6],5,1,6],4],[[9,[7,4,7],6,[],7],[[9,6,0,10],7,[8,5,5,2,7],[7,10,5,6]]]] -[[[[10,8,4,6],7,2,[8],0],7,8],[[4,[0],[10,0,9],[1,10],4],[[6,6,1,10],4,6,[],[9,1]],[[4],[7,6,4,10,6],1,[2,2,5,3,2]],[[10,9,5],[1,1,1]],[[3,4,3],[3,10,0,8],[0,7,8,9],2,4]]] - -[[],[1,[[6,9,6,9,7],[9,2,3]],[[9],6,[2,9]],[2,6,2,4]],[[[10,3,1,4],[6,5,5,5,1]],[4,[9,3,6],7,2],7,8],[],[6,6,[8],2,1]] -[[9,[[1,9,9,4],6,9,[4,10,5],[0,9]],8],[],[10,[[2,10,3,10],[]],2,[10]],[3,[8,[],3,8]]] - -[[2,[[8,4,1,10,4],[0,8,3,6,4],[6,9,8,9],7,6],[6,[3,3,3,1]]]] -[[[6],8,[[1]]],[[[0,0],2,[0,9],[6,1],[7,1,4]],[7,[9,5],[10],[],2],8],[1,8],[],[1,[[7],[10,6],[],4,8],[10,[4,9,9,5],7,[8,10,3,0,2]],0]] - -[[[3,8,9],[],[[4]],[]],[],[[9],5,10,3,[3,[],3,[6,8,4],8]],[],[8,7,[],0]] -[[],[[[10],5,0,6],5,7,1,[[5,5]]],[8]] - -[[9,8,4,[2,4,6,[4,9]]]] -[[[9]],[9,[[4,7,8],[4,4],[5,10,0,7,9],2]]] - -[[[],[8],[[9,4,1,6],[4,10,9,5],[],[5,8,2,7,3]],6,4],[[[3,0]],5],[2],[0,[],[2]]] -[[[6],[1,[5,9,10,7,6],10],8,6],[[2],[[],[1,7],[10,2,0],[4,4]],[[8,4,10,10,9]],3,[5,[],5]],[]] - -[[[],5,9,2,8],[7,10,0],[2,0],[[9,[3],[],2,[0,2,0,9]],4,[]]] -[[[[],[7,0,0]],1,9,[[2]]]] - -[[[],[[]],4,4,[0]],[],[[[9]]]] -[[8,[],10],[[2],9,[2,3,[],[0],[0,3,0]],9]] - -[[6,6,[[],[0]],1],[9,5,8]] -[[3,0],[10,5,8,2,[0,6,[1,8,1]]],[9,10]] - -[[[2,[4,2,10,4]],4,10,1,[5]],[[[4,1,5],4],6],[7]] -[[3,[[1,2,5,7,7],[9,8,5,8,7],7],[10,9],0],[10,[],5,[6,[],[0,6,6,4,4],[6,1,1,6,0],[]],[4]],[[7,[4,10,0],9,[9]],[[0]]]] - -[[[6,1,[]]],[3],[]] -[[[8,[10,8,6],8],4,[4,7,10,1]],[0,[[],8,[9],5],[[9,8,8,1]]],[[[9,5,4],[7,8,10,7,10],[]],[[],[10,10],[],8,[8]],[],[5,[3,7,6,1]]],[[[5,5],[10,7]],1,[5],[],[[4,5],2,10,[]]],[[],8,10,9,[10,6,[6,3]]]] - -[[[[],[7,1],[7,0,10,0,6],8],[],7,[[],2,4,4],[]]] -[[],[4,1,[[3,5,8,3],10,0],[4,[],[0,8,4,1],[5,9],1],10],[[[2,5,4,10,6],[2,8],8],1,[[]],[0,[],2,2,2]],[],[]] - -[[[[],8,8,9]]] -[[10],[[[3,6],3],[[1,6,2],[6,10,2],7]],[],[]] - -[[[10,6,[3,3]],[[5],9,[10],10,6],[5,0,2,[10,8,10],[8]]],[4,6,6,[10,[0,9],8,6,[0,5,5]],5],[7,[[]],3,9],[[9,1,[8,0,7,3,2],[8,1,7,4],[6,9,4,7,5]],[[5],0],1,[1,7,[]],[5]]] -[[],[6,1],[[7,2],[5,[6,6,6],[9,1,2,5],[9,1,8],9],2,7,[[],[4,1,4,9,1],[4,4]]],[0]] - -[[],[10,7,1,4,2],[9,8,4,[[3,7,9,8],2,9,[6],[6,9,0]]],[[[6,5,7,7,0]],[7],4]] -[[3,[[7,10]],9]] - -[[0]] -[] - -[[4,2,6],[10,[],3],[2,[2,8,3,[],[9,10,5,2,7]],9,7,9],[[],[],10,[[5]]]] -[[3,[[1],4,4,[1,7,3,2,9]],9,7,[[]]],[[4,[5,5,1,0,7]]],[4],[8,[8,9,1],[[],[10],3]]] - -[[7,10,3],[[5]],[]] -[[[[6,0,6,1,6],5,[10,2,9,2,8]],[],[2,[3,5,5,0,6],10,2],1],[[]],[[[3,0],[],7,7,1],[[8,4,8,9,2],1,[10,3,5,5],5,2],5,6,[[0,8,0,2],[5]]],[3,10,[1],[[2,10,2,9,8],[6,10,4],[]],[9,[3,2],[8,8,5],9]]] - -[[[[2],[8,7,8,4,10]],8,1,8,10]] -[[[1],0,[[9,3,4,0]],9,[0,3,1,7,[4,2,7,3,10]]],[6,3,[[9],1,7],1],[],[[7,5,1,1,[2,5,2]],6,4,0,[[2,7,0,8,1],[7,4,7],[3,0,1,6],[7,9,0,1,1],[9]]],[[0,5],1,2,[4,2,7]]] - -[[4],[[1,2,[8,10],[2,8]],10,0]] -[[3,4],[2,[[1,8]],[10,[1,0,8],[1],[4]],[0,4,8]],[6,[[8,10,7],6,2]]] - -[[[1,[6,9,9],[8,6,0]],4,[6,[2,1,10],4],7,[2,[2,9],1]]] -[[],[5,3,[8,[],9]],[8]] - -[[[3,[8,2,1,4,0],[9,5,7,7,8]],[[5,5,2,2,9],[10],8],1,3]] -[[0,1,[],5],[[8,4],[10],6,7,0],[2],[[7,[3,2]],7,[],2,[0,[5,8,7,1,2],[0],1]],[[[4,4,4,10,8],0,2,10],[[9,8,6],3,[9,2,4,3,8],5,1]]] - -[[4,[[]]],[10,[[2,7],8]],[[[6,7],10,10,5],1,2,[[],2,10]],[[2,5,1,0,8],[[5,8,10]],6]] -[[8,[[4,5,6,2],5,[7],8,9]],[],[[],3,[],4],[[0],5,1]] - -[[3],[0,[],[3,1,4,10],2,[5]],[2,6,[],[[1,5],1]],[[],7,8,[]]] -[[[[],9,10],[[6,10,6,7]],7],[]] - -[[[4,[10]],9,[9,[9,8,5,9,1],[10],[3]]]] -[[3],[2,[10],[[4,2,7,2]],[[],[8],[7,5]]],[[[5,3]],3],[[7,[9,9,5,2,3],10,5],8,6],[4,[[3,1],[10,4,6,8],[8,0,8,2,5]],[[1,6,10,2],[2,10,5],6],1,[9,2]]] - -[[],[[[4,2,4],8,[8,9,3]],9,[]],[],[[[3]]]] -[[],[5,[[2,8,5,1],[0,10,6],[],2],[[1],[2,1,6],7,[1,5,1]],7],[0,9,7,5,0],[[[0,2,10,8],4,[6,6,5,4],[10,8,0]],0,4]] - -[[[]],[1,8,0,[[1,1,1,1],9,7,[],9]],[6],[6,[[0,4,9]],[[10,0],3,[0,10,4,6,1],[4,6,6,10,5],[]],[4,3],[8,3]],[2,5]] -[[[6,10,7,1]],[7,[[0,6,5]],[[10,8,9]],[[]]]] - -[[4,[[2,7,2,9,4],[8,8,3,2,1]]]] -[[[[],0,7,1],[[]],0,[6,[2,10,4,2]],[7,8]],[8,[[8,0],[10,0],10],1,4,[[10,9,3,8,0],7,[10,3,1,1],3]],[],[[1,10,[7],[4,8,1,2,10],4],[[],6]],[[1,[7,10,10,0],[],[],[2]],[[2,0],8,[7],[2,2,10],3]]] - -[[4,[[2,7],10,3,10,[1]]],[0,1,[[],[],1],[[8],2,6,[],4],[7]],[],[2,6,[[3],[1,1,4,9,0],0,[8,3,0,9],1],0],[2,8]] -[[9,1,9,[4,[8,4]]]] - -[[[0,[6],6,9,[2,2,3,2,5]],[9],[7,3,[1,7]],[[0,5,10,3],[],[5],0]]] -[[[[0],9,0,9],[[4,3,9,3],[],2,0,[3,9,5]],[3,10,5,[9,3]]],[9,[5,8,8,[]]],[[[6,5,8,5,8],[4,7,5,6,1]],9,6],[8,7]] - -[[5],[],[8,4,[],[[3,7,0]],3]] -[[[[1,6,9,6,4],8,[]],10,[10,[0,3,7,2,4]]],[[6],[7,10],[[],6,[7,8]],7],[4,[5,[2,6],5],3,5]] - -[[],[[]],[],[10,8],[[5,9,[5],[],[]],[[6],[5,8,3],[2,8,7,10,2]]]] -[[],[[]],[[[10,5,9]]],[8,6,[0,8],0,[4,[8],7]]] - -[[[],[],[],0],[5,[[],0,[10,3,6,1,8],[7]],0,[[],8,[],[9,9,6,1]],[[6,3],10]],[[[1,8,5,1],[4,1,10,2,9]]],[7],[[],[7,2,[3,1,8],10,[8,5]],2]] -[[],[[[2],1,10,6,[0,7,7,10]],7,0,[[0,8,9,6,9],[7,10,9,4,9],9,5],[[9,10,0],[],5,[10]]],[],[[[0,7,5,4],[10,7,7,4],9]],[2]] - -[7,6,8,6,7] -[7,6,8,6] - -[[[[]],[[],[7,5,3,9,4],[4,4,5],[5],[10,0,9,1]],[10]],[[],[[4],0,1,10,[]],[[],3,0,[2,7,8,10,3],10],0,7],[[],[5],[],[[],8,3,2],[[4,7]]],[]] -[[[[4,3,6,1]],3,[3,5,[6],8,3],[[4],[]]]] - -[[[],[8,[2,7],10,9,6],7],[[],[[2,4,1,4,3],[6,0,8,1],[7,3,8,1],[0,6,5],3],9,[[8,0,2,9,1]],2],[5,1,8,3,[[2,9,5,3],9]]] -[[0,[[10,6,0],10],[],4,5]] - -[[9,[9,[7,7,4]]]] -[[],[[]],[0,7,[[10],[3],[2,6,1,4]]]] - -[[[[4,6,1],8,4,3],7,[[10,5,0]],0],[7,[],10,[9,[3],[7,3,3],[8,10,9,6],2]],[1,5]] -[[[5,[9,2],[6],10,[5,8,6,8,3]],[[2,0,8]],6,[2,4,[10],1],[1,[6,9,10,2],0,[4,9],[9,6,2]]],[[[3,4,3,5],[4,3,7,8],[5,5,1,10],4],[6,[],[9,9],[8,2,5],1],[[],[2],[5,0,9],7,0],[7,9],7],[1,5]] - -[[7,[[3],[0,2,5,10],9,10,4],1,7,6]] -[[1,[8],[6,3,3,[6,3,1],[9,5]],10,[9,[3,3],3,0]],[[8,3],7,5,[9,4]],[10,[2,5,9],10,[4,3,[1],[8,8],0]],[],[]] - -[[[[1,1,3,9]],[[6,10],2],[[8,0,7,3],[0,8,4,8],0]]] -[[],[9,[[10,8],0,[1,5,5],10,4],[0,2,9,[0,4,6]]],[[[9,0],[10,0,9],[9],[10,9,10,4,2],[1]],3,[],[[],3,[0,5,6,1],[]]]] - -[[10,[[3,7],2,5,[0]],[4,[3,6,9]],3],[6,8]] -[[1],[8,10,3],[1],[1,3],[3,[6,[4,2],4,[2,9,0],[8,7,1,10]]]] - -[[[[],6,5,0,10],4,0]] -[[5,[[1],6,3],9]] - -[[7,[[],[],[2,6,10],[0,6,4,2]]]] -[[],[4,1,[[0,3,2,10]],[]],[[7,2,7],[[2,10,6,1],[10,6]],[4,3,8,[9,8,0,2,6]],7,[]]] - -[[4,0,[[3,6,1,2,1],[10,9,6,7,10]],[2,[6,9,3,10],[6,2,9,5,6]],[]],[[5,[9],10,[10,1,0,10,2]],2,[7,10]],[],[8,8],[1,8,[],[[7],9]]] -[[],[5,[9,2,[7,9],[9,3,3,0,3]],[[4,0],[1,7],[9,2,8]]],[[[1,8,10],[],[]]],[[[8,5,9,2,10]],[],[[0],2,[4],[5,1]],10,7],[3,7,[[8,3,1,6,9],1,[],6,[9,3]],5]] - -[[],[4,[2],6,8]] -[[[5,[7,3]],8],[[[4,3,1],4,2,2],[10,4,[3,0],[8,7,8]]],[],[[[7,0]],8,4,2,[5,0,4,[5,10,1,1],[0,9]]],[[[10,6,2],3,[2,6,4]],3]] - -[[8,[[8,1,0,0],9],5,7,[7,[8,6]]],[[[7,10,5,10,7],[8,8,1,10],7,[2,10,4]],5,7],[4,2,1,[[0,3,4,7],[9,0,1,8],6,9]]] -[[8,[3,[],[3,3,10]],[10,[4],[10,5,2,4,5],4,[]]],[[3,0,3,9,2]],[[[]]],[8,6]] - -[[[]],[[8,[1,0,0],[6],2,[8,4,3,3,10]],5,[[3,1,3],[2,6],[9,2]]],[[]]] -[[7],[[9,1],10,5,8,[7,[3,2],[7,0,2,1,1]]],[5,1,0,[1,[8,0,2,9],10,1],6]] - -[[5,2,[]]] -[[[[10,10,2,4],10],0,7,[2,[10,8,3,0,8],[8],[4]]],[],[2,[]]] - -[[[3],[],[]],[],[[[5],[9,2,4,8,10]],[[3,6]],5,[[],[4,6,1,4],1],0],[3,[7],[[],7,[],4]],[[],[[9,3,3,8],4,9,5]]] -[[[],[0,3],[1,6,7]],[[]],[],[8,6],[4,[[5]]]] - -[[],[[0,[8,0,5,6,2],[6,8,4],[8,2],2],[],[1,[6]],9],[1,[7]]] -[[[[0]],[[0,10,4,8,7]],8,0],[2,9,[[9,8,2],8,[7,10,7,5]],[[],[],3],7]] - -[[8,8,[6],6,[8,0]]] -[[4,5,[1,1],8,[]],[10,[[4],7]],[[[3],9],0,[3,8,8,[7,8],[]],0],[[],[5,[5,2,0]]]] - -[[[],8],[[],4,7,[],7],[5,[],[],[[6,7,0,5,4]]]] -[[[5,[2,1,3,0,3],[6,3],[6,5,4,1,4]],[[2],[]],7,10,1],[],[[[],[9,9,2,5],[1,9,7,10,5],4,[1,0,10,7]]]] - -[[7,8]] -[[6,[[9,5],[2,10],4],9,[[10,0,8,6],5,[4],8]],[],[[[3,3,1,2],7],6,8,[[]]],[]] - -[[2,[]],[4],[],[],[[2,8,7,[8,8,0]]]] -[[0,3,4,[2,3,2,0,[7,7,9]],[[2,0,9],[1,6,1,0,3]]],[3,[[3,2,5,3],6,[2,2,3,7],[10,7,4],3],10,[3,4]],[1,5,1,1,[[3,8,6],[0,1],[2],[]]],[9,4,8,7,10],[0,[3,[9,4,3]]]] - -[[[[0],9,[6,3,5,9]],[[1],8,[4,2,1,7,10],[1,6,3,7,8]],[[9,2,0,8,7],6]],[7,9,[[7,9],[],[5,9]],0,1]] -[[7,[[],[4,2,0,3]]],[[8,9,3,8],3,[[]]],[10,5,[8,[6,10],0,1,7],5,4]] - -[[[1,5],7,9]] -[[10,[[4,9]],[[5]],7],[[],[[1,4,7]],[[1,9,0,0],[2,10,5,2,1]]]] - -[[],[[6],[[6,6]],9,[[5,3],9,2,[8,1,6],8]],[],[[[3],[6],[0,3,0],[4,0],[1,8,8,3,1]],0,[[],[10]]],[2,[7,[6,10],5,0,8],[1,[5,1,1]],1]] -[[9]] - -[[6,3],[4,4,3,6,[4]]] -[[],[3,10,0,10]] - -[[8,[4],[[8]]],[6,[]],[],[2],[0,3,10]] -[[[0,[6,2,1,3],2,4,[3]]],[[],0,1,[7,[1,9,4,3]],1],[[[10],[7,10,2,8],6]]] - -[[7,[[3,8,1,7,10]],6,[9,0,[9]],8],[[9,7,4],[[2]]],[[[2,5,7,7],2]]] -[[[[8,0,8],0],[0],[[0,8,5],[8,10,6,2,2],7,[9,0]],0],[[[0,2,9,0],10,[0,3],[1,1,7],0],5]] - -[[],[[5],[],[]]] -[[],[[[6,2,4],10,[8]],1,2,6],[[[3,2,2],8],[]]] - -[[[[],[10],10,7]],[],[6,6]] -[[8,4]] - -[[7,4,[1,[3,5,3,0,7],4]],[4,[4,8,[]],[[2,6]]]] -[[],[4,1,0,4],[]] - -[[10,[6,[9,9]]]] -[[2,6,9,10]] - -[[9,8,[[7,2,8,6],[7],[5,1]],4,[5,1,[5,8,10],[7,5]]],[1,3,[[1,7],10,2,6]]] -[[9,2,[6,2]],[[[2,10,7,7,3],[7],[7,6,5,8,1],[2,0],[6]],[[0]],0]] - -[[],[],[9,[[6,4,0],[4,9,0,2],[0,8,5,0,0]]]] -[[1,[[0],10,6,2,[7,5,5,5,0]]],[7],[]] - -[[[6,6],6],[[3,[3],[]],[1],[3,2,2,6,[10]]]] -[[[[],4,4,10],[[9,4,6],4,[1,2,4,6,4],5,[]],2,[[6,1,9,1,7],9,8,[5,0],[8,3,7,6]],[[8,10,0,5],9,10,10,4]],[[[4,2,6],9,7],9,0,7,9]] - -[[9,10],[9,3],[],[9,[[2]]],[[[],1,[1,9,3,8],[7,2],10]]] -[[[[10,0],9,4],[6],[[5],8,[2,10,8,1,8]],[[10],0,[8,1]],[8,[10],[2,4,5,10,8],[1],[8,6]]],[3]] - -[[2],[[6],0,[8]]] -[[[[10,1,0],[4]],1,[[7,4],[10,7,5,5]]],[9,[[10,8],[1],6,7],3,[[4,8],[],10]],[[2]],[6],[0,3,2,[7,[3,9,8],6,4]]] - -[[[[10,4]],[6,[],1,5,5],[8,8,3],3,[0,[6],[],2]],[7,[9],2],[[[0,4,1]],3,[7,[3,5,2,7,5],3],9,4],[2,3,7,7,9],[2,5,[4,[8,2,4,4],[9],[2,3],[6,7,10,0]],[[9,8,6],[6,1,2,0,1],[7,1,5],[5,0,9,7],2],3]] -[[0,[[8,4,7,3,6],2,[8,10,8]],[3,2,1,[5,3,1,4,1],1],[[4,2,8,1],[10,0,3],[5,7],5]],[5,4,1,2],[[[10,0,2]],[[3,10],4],0]] - -[[[3],[[10,4]]],[0,[[4,2],6,6,10],[[9,6,4],[6,8,4],[10,7,10,4],2],2,5],[7]] -[[5,[[0,9,4]],7,5,[[0,10,3,8,10],[7,2,1]]],[9,[1,[9,2,10,1,1],[1,0]],2,[[9,4],3],2]] - -[[[],8,1,7],[[1]],[8,2],[5,[[],[4],[4,9,2,4],[10,3,0,9],[9,3]],[[4,3,4,1,6],[2]],[[6,6],10,5,[6,8,9]]]] -[[10,[],[[],[1,5,4,10,3],[2,4,5,6],[7,8],[]],[5,[6,1]]],[],[3,[7,[6,0,2,1]],8,[10,[8,9],4,9,7]],[[[],1],[[10,6,9,2],10,[6,1],1,1],9,0,[[9,10,4],9,0,[9],1]],[[[6,0,6],[6,9,0,1,2]]]] - -[[1],[3,9,6,[[5],[],0,5,10]],[[9,[],[3,1,8]],0,[[6,8],6],[[],10],[4]],[[4,[5,6,4,1,5],3,[1,6,5,7]],[[8],2,2],6]] -[[7,5,9,[4],[[],[8,1],5]],[7,3,1,8],[[8,3,0],9],[],[[[1],8,5]]] - -[[6,9,[2,[4,9,3],[7,6,10,7],2,7],8],[[4,10,8],2],[[[8,1,7],8],3],[[[6]],[3],[[],8]],[2,0,8,[8,5]]] -[[4,[9,9],2,[[],[1]]],[[],7,6,1,[]],[]] - -[[[[5,2,4,9],[9,10,8],[]],0],[[8]]] -[[],[9,[[10,4,10],[1,7,10,7],[]],[],7],[[9,5],[[2,2]],0,[[3,4]],[[10,9,1,9,6],[3,0,5,4]]]] - -[[[10,10,[5]],[10],7,[]],[3,5,3],[],[],[[],[7,[9,8,9],[4,2,9,9,2],[]],0,0,7]] -[[[[],1,6,9,[]],0,[0,[0,0],[10,0,0,1,2],0],[[1,7,7],3,[],[9,4],6]],[],[1,6,[5,2],[1,5,[7,2,8]],[[5,9,6,4],[0,10],[6,9,3],[3,8,0]]],[7]] - -[[0,[2],10],[2,10,7,[[9]]]] -[[2,0,2],[10,2,[9,8,9,2,4]]] - -[[2],[2,[10,[4,1,3],10],7,[[7,7,3],[7,8],[0,7,6,3,8],3]],[[[9,0,3],[],[1,3,10,0,8]]]] -[[[[1,3,8,5],10,[4],2],10],[0,9,7,[[0,4,10,0,6],[]],7],[[[0],1,9,[3],[6,9]],4,9],[[5],6],[1]] - -[[[3,[5,3,2,7,9]],10,[]]] -[[[5,7,5],[[9,1,6,7],9,[2,6,5],[6,6,1],[0,6]],[[]],[],9],[[1,[3],[3,10,0],4],2,[],[[2,1,1,5,9],6,8],[]],[],[[],6,[[5,2],2,[8]]],[]] - -[[],[],[1,[[2,0]]]] -[[7,2,2,[],[[8,7,3,6],4,2,2,[]]]] - -[[6,9,8],[[],3,8,[],2],[3,9],[[[],10],[[9,3,9,8]],2,7]] -[[2,[8,[]],[7,8,5,5,5],2,1],[],[[[6,1,9,2,9],7,4],[3,[3,8,1,6]],[[4,6,5],[3,10,8,5,6],[1],8,[5,0,4,0,6]],1]] - -[[],[],[2,1,[4,7,[1]],[9,[7],0,6]]] -[[3],[0,[[6,6,9,6],[4,7,10,1,8],[4,0,10],1,[10]]],[0,[6,5,[8,9,3,9,6],[],[4]]],[[],[[]],4]] - -[[1,8,10,[]],[9,[],[[8]],[[9,6,3,2],[3,8,10],[],3],[1,9,[0]]],[],[5,[1,[],[4,5,7,10,9]],[[10,6,0,1]],9,[0]]] -[[0,3,[9,9]]] - -[[4,0,3],[],[],[[[]],[[5,3,1],8,[],1,[1,8,3,7]],[6]]] -[[[]],[[[8,0,3,2,2],[3],[1,6,8],10,4],[6,4,7,[1,2]],[8,[3],[10,9],[4,0,10,8],[1]]],[[],[1,2,6,8],5],[3,9,7],[[6,6],0]] - -[[7,[],[0],5],[7,[7]]] -[[0,[8,[3,3,8],10,7],5,[[1,7],[0,0],[5,2,0],1],2],[7,8]] - -[[4,[2,2,2,9],[[6,6,1,10,4],[]],5,10],[],[6,[[5,3,7,9,2],[4,2,4,9,7],[1,4,9,7,1]],2,[],[]],[[[7,0],7,[9,4,0]],9,[1,[1,0,1],[9,3,3],[9,2,10,5,10],10],7,[[9,0,8,1,8],8,[7,7,10,2]]],[]] -[[[3,7,[]],[9,7],0],[[[9,9,3,5,2],1],7,[10],[[10],2,[6,1],[1,10,3,1]],8],[3,9],[7,7,2,[2,[8,7,6],10]],[1]] - -[[[7,[10,1],[2,9],[3,4,6,9]],2,[],3],[[],6,3,[],[[4,7]]]] -[[],[[6,[],[],[0,10,2,6],1],1,3,[3,[10,2,7,1,4],[6,3,0],[1,3,6,3],[4]],[0,[8,10,0,8,5],3,2,6]],[],[]] - -[[5,[[4,0],[1,3,4],7,2],0,8,[]]] -[[],[[[],10,[10,9,6,0,1],[]],[[8],4,6,4,[0,2,8]]],[4]] - -[[],[],[],[[[],[8,6],[],[2,7,7,4]],[],1,[9,9,[1,3,4],0,[5,2]],[[4,4,5,6,10],[5,1,3,3],0]]] -[[10,[[6,4],[3,1,1,8,4]],9,[[3]]],[9,2,6,8,1]] - -[[],[1],[[[4],[5,1,6]],[]]] -[[10,[[]],[[8,10],8],[1,[5,3,7,8,7]]],[],[],[[[7]],[[2],6],[[0,8,1,3,10],[],2,0]],[[7,8,[]],2,1,[[8,7,4],1,[4],[],2],7]] - -[[[[3,5],[]],[7,0,5],[[],1,[7,2,7,10,1],3],[[4,1,5,5,6],[3,4],[6,1,3,9,2],8],[8]]] -[[10,10,[6],[4]]] - -[[[]],[8,4],[4,7,8,3,[[8,4,2],6,0]],[[1,[4,6,4],[],1]]] -[[[5],[[4,4,9,2,0]]],[9,[[7]],[[6,2],[0,3,1,1,7],5,4],[0]]] - -[[[3,[1,0,10,7],[8,8,8,10]],[10,[0,3],8,[9,5]],6],[[10,[3],[9,10,0,2]],[7,4],[0,7,4,6,[3,5]],[],[10,[5,4,6,1],5,4]],[[[0],0],5],[4],[8,[[9,4,5],3],[9,[0,7,2]],[],[]]] -[[5,3,9,0],[7,[6,[8,1,0,1,8],3,[9,2],5],[[1,0,0,6,4]],[6,[2,4],5,[2,10]]],[],[3,9]] - -[[[1,[4,0,10,6,8]],1],[],[[[]]]] -[[],[],[[9,[9,7],7,[9,4,3],0],9,6],[2,[[6,8]],2,[9,7,[4,6,10,4,2],[]]]] - -[[2,10,[4,9,[],[7,10,0],1],[[1,8,5,4,6],5]],[[[]],[[10,2,1]],[[]]]] -[[9,9,[10,[1,5,1,2]],[9],3],[8,8],[4,[5,[6],10],[[0,5],[7,10],2],6,[[2,9,8],[5,4,7,5]]],[1],[[10,8,4,[1,7,8,9],8]]] - -[[3,[]]] -[[10],[[3,[7,10,7],[2,6,6,1,1],5],8],[1],[4,[9,1,[2]],7]] - -[[],[[[3,2,0],[3,4,5,10,8],[3,3,3,0,3],[8,3],9],[[5,0,7,8],[],[1,1]],[[10],[2,7,4,4],[],6],2],[[1,[3],[7,4],[8,1,9],3],0,7]] -[[0,8]] - -[[[],[]],[3],[1,9,10,[[4,3,2],[3,10,0,6,4],7,7,10],[6,[10],[9,8,0]]],[]] -[[[5,0,[0],[9,10,7],[1,0]],5],[],[5,3,0,3],[[[3,8,9],[],[2,2,6,6,10],[]]]] - -[[[[9,1,6]],3,[[2,0,8,1,0]]]] -[[3,[[2,1],[8],10,6]],[10,2,3,6,[]],[0,10,0,[[4,7,9],[],3],3],[[[4,2,5],[8]],9,6,[3,[],7,[0,4,8,0]]],[[[6],10,[10,9]],2,[7,[3],[2,0],[6,5,5,7,0]]]] - -[[1,5],[8,[5,1,10,[0,4,9,4,1]],6],[],[7,[3,3,5,10,4]]] -[[],[10,[7]]] - -[5,8,1,2] -[5,8,1,2,1] - -[[0,[],[],[[6,6,7,7],10,3],1],[[6,7,[8,1,4,4,7],[6,6],2]],[[[],7,[],4,2],[[5,5,5,0,7],6,[8,9,7]],[[6,3,3,8,9],1,[6,9,8,5],3],3,[[9,9],[],7,[8,2,8,10],8]]] -[[[9,[2],[],[4,6],[10,2]],5]] - -[[[9],3,[7,2,10]]] -[[2],[9,1,7,[9]]] - -[[],[]] -[[5,[],7],[[[6,0],[7,5,9,7],2]],[[],[[5,2,8],[]],[[5,4,1,10],[3,5,2,2,10],[0,6],10]],[[2],0,8],[]] - -[[[9,10,[4],7,0],1,1,[[],5]]] -[[[[9,8,8,3,1],[10,7,2,10,5]],4,3],[9,[5],[[],[5],10,[10],[10,3,4]]]] - -[[10,[[2],[7,7,3,3,3]],[1,[],[10,4,4]]]] -[[[[1],[1,2,5,7]],[6,3,[2,1,7]],8],[4,5]] - -[[[3,[1,6,1,4,4],[4,5,5,0]],8,8,9],[[],[],[6,[4,10],[],[4,9,2]],6]] -[[0,5,7,8],[]] - -[[2,[[0,5,9],[10,8],[2,1],[5,6,5],[7,9]]],[7,1,[10,3,[2,4],[9,10,1,9,10],0],0],[0,[[2,10,4,0],4],[6]]] -[[[[9,10,9],[8,7,5,7,8]],0,0,[[2,3],8,0,[2,5,10,9,8]],6]] - -[[2,[9,4,5,[2,0]],1,7],[9,[6,[9,5,1]]]] -[[],[[],4,[[4,10,5,8],10,[0,3,6],8],[6]],[[9]],[3,9,9,[],[9,[7,9,5],8]],[[2,1,9,[2,0,9,7,4],[9,10,10]],[8,[9,2,3],2,[6,9,3,8]],[10,7,[],10],2]] - -[[5],[],[],[9],[[[7,8,8],5],[1,[7,4,10],[9,1],2,[]],[],[4,5,1,10,10]]] -[[[10,[10,3,4,0,8],4,5,1],[10,7],[[9,6,6],[5,6,3,7],[5,9,2,0,8],3],[[]],[[1,10,7,1,3],8,4,3]],[[[]],[9],2]] - -[[6,[[1],[7],[]],5,6,8],[6,[2],[[]]]] -[[[7,[10],[7,8,8,7,1]]],[3,10,3,[[6],7,[0,9,7,7],1,[9,9,1,2,2]],3],[6,[6,[2,9]],[[],[2,1,3,2,9],[3,7,9,6],5],[[1]],[6,[9,6,1,3]]],[[2,[2],[5,0,2],5],0,4,5,1]] - -[[[9,0],4,[[7]],4],[9,7],[[1,[0],[1,0,7,1,3],[8],[4,2,0]],9,[[0,5],0,7],6,[[],10]],[]] -[[[[5,10],[4,4,5,3],[9,8,9],[],[5,2]],10,9],[],[[[],[]],5]] - -[[],[],[[],7,7,[2,[8,9]],[0,[7,3],[3,6,1,10,5]]],[3]] -[[[[0,9,7,10]],5],[[],[]],[[[0,2,10],[10,0,5,3,9],9,[],5]]] - -[[8]] -[[[2,[1,6]],[[9,6,6,4,10],[],9,6],[],[]],[],[[1,1,6],4,[[],[4,3,2,9,2]],3]] - -[[5,8,10,4,3],[0,9,[2,9,[4],[6,9,8,0],[9]],6,[]]] -[[],[7,5,[5,[6,5,1,1],4],[[4,10,0,4,10],[10,9],[0,9,1]],6],[[],[[0,9],2],[0,[2,7,9],[],10],[[7,1,9,5,0],[4,3,1,8,1],3,[8,8]],9],[[10,3,5,[5,4,9,10,6]],7],[[1,[],1],[[0,4],6,1,[10,10,8,6,9]],[],6]] - -[[],[1,[2,2,[2,9],4,[]],2],[],[4,10,[],7,[8,[],[]]],[6,8,10,3]] -[[[3,0],4],[[8,[1,10,5]],[[1,7,0,3],[7,3,5]],[10,8,[0],2,[9,2,1]]],[[],[10],[[9,0]],[8,0,4],[[8,0],3]]] - -[[10],[6],[[6,[5,2,7,10,1],[1,6,6],[9,6,10,8],10],2,9,[[0,3,7],0]],[[[3,2],2,9,[]],10,7],[3,1,[6],[9,10,[]]]] -[[[],[[]],6],[[],[],[7],[]],[3,0,8,5]] - -[[],[3,[10],8],[[[9]],[],[[4,5,0,9,2],[],[8],[0,6,9]]],[],[8]] -[[7],[[8,9,4,8],[]],[],[3,8,[[8],[],[6,4,4],3]],[[[10,6]],[[],[],9,[2,3,7,1],10]]] - -[[9,[9,3]],[[7,7,7,7,3],1],[7,[[],[6,10,1],[4,5,3,8]]]] -[[8,4],[[4,1,[1,3,3],0,[0,10]],[[0,6,8],0,[7,5,4],6,[7,2,5,7]],10,2,9]] - -[[],[6],[[[1,4,4,1],[]],2],[1,1,[[0],[6,6]],2]] -[[6,[[0,7],0,[6],3],9,[[8],3,[1,5,0,8,6],[]]],[0,8,2,2,10]] - -[[3,[[7],[10,6,9,3,0],[3],4,4],8],[[0,7,[7,8,8],1,[0,4]]]] -[[[10,9,[],[5,2,8,3]],[8,[8,1],9,[]],10],[6,8,[9,[7],9,[5,8,8,10,1]]],[4],[[[4,9,6],5,9],4,4]] - -[[],[],[[0,[5,5,5,1,3],1,[],0]],[[5,1,[2,10],[1]],9,2,[8,9,[10,10]]]] -[[[3,1]]] - -[[[8,3,[4,2,1,2]],[10],9],[[0,5],[2],3,1],[0,[[1,7,7,9]],1,[8,[7,6,8],5]],[[8,[8,8]],[10,3,[3],[10,9,1]],[]]] -[[[[2,0,2]],[0,2,9]],[8,5,[0],[8,6],10],[10,[[5,1,4],3],10],[[5,[],0,3,[2,4,7,8]]]] - -[[],[[],[6,[5,7,5,5],[8,4,3],6,8],10,[[8,5,6,1,7],[9,8,9,2],[5,2,4,10]],[[8]]],[[5,5,[2,4,4,4,9],9],2,6,[[7,5,7,4,4],3,[],[9]],[[3,9,5]]]] -[[9,6],[[[0]]],[0,8,[[9,7],4,[8,0,0]]],[]] - -[[1,1],[4,1,[5,[0,7,3,5,0],[7,8,9],[4,0,0,8],2],1,[9,[1,9],[],[3,4,8,4,1]]],[[5,0,[4,2,0,9,4],[]],0],[3]] -[[0,7,[[6,0,8],0,[]]]] - -[[],[[],[6],1],[7,[6,3,5],[]]] -[[],[[7,[6],[3,2,2],[10]],[[],[6],[7,9,9]],[[8],[2,10,5],[1,9,5,6,4],3],8],[[],[[9],[2],[0,8,10,6],[3,7]],[5,[1,3,9],2,10,7],[7]]] - -[[[[]],[[1,5,5,3,3]]],[],[1,[8,8,[3,9,6]]]] -[[[],7,2,6,[9,[5,10,0],[9,6,6,5,5],1]],[]] - -[[1,5,[4,0,[8]]],[[[5],8,[7,6,5],3,0],[],4,6],[2,[[2],[0,2,5,3,3],1],4,7,6]] -[[2,[[10,10,1,0,9]]],[[],9,1],[[3,4]],[[[10,2,3],[9,3,7],[10,1,6,1]],7]] - -[[0,[],[[],10,7,[7,8,8]]],[],[0,[[7,2,2,7],4,1,7,[7,8,0,6,6]],[[8,8,6]]]] -[[9],[[[4,7,5],[1,5,8,2],[3,2,8,6,0],[7,5]],[[7,9,6],[]],[0,3,8]],[[4]],[[],[2,5,[]],0]] - -[[8,[[2],0,[]],[5,9],[]],[[2,6],[]]] -[[[]],[0,3,9,4,0],[[[2,4],[6],[4,2,1],[]]],[[1,0,[0,0],7,6],1,5,7,[2]]] - -[[[[4,10,7],0],[[1,1,7,4,5],[1],8,5,9],[[9,9],3,[],[7,6,2]],[[3,0],[3],3],[2,[3,6,3,2],[10,2,6],[],4]]] -[[[10,9,3,0],8]] - -[[[[4,10,7],7,[4,8,5,2,4]],8,4],[[[],5],[],7,[2,3]]] -[[[9],[1,0,[],2,[0]],[[0,1],[10,8],[10]]]] - -[[[[10,1,3,6,3],[3,0],2],[],6],[9,9,[4,[10],4,5,[5,0,4]]],[9,9]] -[[10,10,8]] - -[[[[3,6]],8,[],6,[0,2,8,[1,0],8]]] -[[6,6,6,7,1],[],[],[],[[[6],[6,3]],[4,0],3,3,[[],[10,4,9,8]]]] - -[[1,[[2,1,2,10],5,[],[8,4,2],1],[7,9,[4,5]],[3,[6,6]],5],[]] -[[]] - -[[[3,10],[8,9,9],2,9],[8,[],10,10]] -[[[[],[0]],3,6]] - -[[3,4,[]],[4],[3,9,[5,[1],[],[10,7],[9,0,2,9]],[2,2,9],4],[[[2,2,6]]]] -[[],[4,6,[[],[],[3,7,5],9,7]],[],[[8,5,7],8,1,3,8]] - -[[],[[0,2],0,7,[],[[6]]],[[],[8],[3,[],3],[7,[5,0,4],7],5],[1,1,[[]]],[[[0,10,7,10],2,0,[3,7,1,1]],9]] -[[[8,[7,6,6]],9],[10,8,9,6],[[[],[1,7,3]],[[5,5,5,1],[],0,[7,7,9,8],7],[10,[],[3,9,7,4,3],10],[[8,7],10]],[[2],[5],4,[[2,6],[7,7,10,7,0],[3,8,3],3,6],10],[9,10,[[6,2]],5]] - -[[4,2],[[9,5,7,7,[]]]] -[[[1,[4,8,7,2,4],4,[4,6,5,6,4]],[8,[6]],8],[3]] - -[[3,2,1,8]] -[[[10,6,[2],2],10],[[],3,10,[[],[],[4],6,8],[[8,5,10],[],5]]] - -[[[6,[5,5,0]],5],[[],7,1,[],7]] -[[3,4,1,6,[[],[4],9]],[[[3,4,5]],[],4]] - -[[4,[5,4],[[0,10,9,1,5]],5,5]] -[[3]] - -[[0,[8],9],[3,[[5,7]],8],[[5,7,1,10,4]]] -[[6,[3,6,3,[9,2,9,2,9]],[[3,4,1,9,5],7,4,10,[5,0,4,4,2]]],[0],[[0,1,[7],[],0],[5,4,[9,3]],9,1,[[6,0],[7,4]]],[[5,8],2]] - -[[6,[],[[4],[3,5]],6],[8,[7,5,3]],[5,[[],2,[1,1]],[6,4],[],[[0],9,[0,8,10,4],0]]] -[[[[10,5,10,4],[9,1,7,6,10],[0]],9,[1,2,3,5],[0,[5,7,4,7],[9,10,7],1,7]],[[[],0],7,[8,[10,1,10,7,8]],[4,1,[4,3,10],[],1],5],[8,9],[[7,10,2,[4],2],[[3],[8,8,0,6],6,4]]] - -[[[[7,8,2,2],[8,2,3,0],[4,3,8,0,8]],5,[[9,7,1],[],[1,0],[1,2,6]],9,[[5,1,7],3,[],5]]] -[[[0,[8,3,5],[5],1],[8],[[4,10,10,8]],0],[[0]],[[[7,2],[8,9],[]],[[],[1,9,7],[9,4,6],[5]],[[5,8,7,2]]]] - -[[[],2,[1,[6,6,2,2,5]],8]] -[[0,[[2,7,6,0]]]] - -[[],[10,1],[6,[2,[],8,0,[5,1,7,9,4]],9,4,9],[[[8,5,9,4,1],6],3,[],9,3],[[2],[],[[9,3,7],8,[0,1],[1,2,1,9,1],[]],[[6,7],[5],2,9],[[]]]] -[[[8,6]],[0],[],[10]] - -[[],[9],[],[[[],[2],[9]]],[6,7,10,[8,[],[6,3],0]]] -[[7],[9,8,[[2,5],[6]],[[3,10,5,5,4],[1,8,3],0,9,[0,2,5]]]] - -[[6,[],[[6,6,0,3],[10,0,6,5,0],9]]] -[[],[[10,[7]],8],[7,7],[[5,1,[10],[8,1,6,0,10],3]],[4,[0,6]]] - -[[3],[[6,9]]] -[[[[5,10],8],10,[[9,1,10,4,4],[10,3],4,[9,9,9,9,5]]]] diff --git a/2022/14/input.in b/2022/14/input.in deleted file mode 100644 index 730e5ee..0000000 --- a/2022/14/input.in +++ /dev/null @@ -1,149 +0,0 @@ -475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 -410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 -410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 -494,23 -> 494,26 -> 486,26 -> 486,29 -> 502,29 -> 502,26 -> 496,26 -> 496,23 -456,66 -> 456,70 -> 455,70 -> 455,77 -> 466,77 -> 466,70 -> 462,70 -> 462,66 -446,83 -> 450,83 -419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 -497,13 -> 497,16 -> 496,16 -> 496,20 -> 508,20 -> 508,16 -> 503,16 -> 503,13 -419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 -429,138 -> 429,140 -> 428,140 -> 428,146 -> 436,146 -> 436,140 -> 433,140 -> 433,138 -466,59 -> 470,59 -420,134 -> 420,135 -> 429,135 -> 429,134 -449,79 -> 449,80 -> 463,80 -419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 -469,61 -> 473,61 -419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 -421,131 -> 421,127 -> 421,131 -> 423,131 -> 423,124 -> 423,131 -> 425,131 -> 425,130 -> 425,131 -> 427,131 -> 427,128 -> 427,131 -472,63 -> 476,63 -419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 -431,94 -> 435,94 -421,131 -> 421,127 -> 421,131 -> 423,131 -> 423,124 -> 423,131 -> 425,131 -> 425,130 -> 425,131 -> 427,131 -> 427,128 -> 427,131 -475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 -428,102 -> 432,102 -437,94 -> 441,94 -429,138 -> 429,140 -> 428,140 -> 428,146 -> 436,146 -> 436,140 -> 433,140 -> 433,138 -419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 -452,87 -> 456,87 -425,99 -> 429,99 -475,57 -> 479,57 -429,138 -> 429,140 -> 428,140 -> 428,146 -> 436,146 -> 436,140 -> 433,140 -> 433,138 -421,131 -> 421,127 -> 421,131 -> 423,131 -> 423,124 -> 423,131 -> 425,131 -> 425,130 -> 425,131 -> 427,131 -> 427,128 -> 427,131 -410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 -469,57 -> 473,57 -456,66 -> 456,70 -> 455,70 -> 455,77 -> 466,77 -> 466,70 -> 462,70 -> 462,66 -410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 -429,138 -> 429,140 -> 428,140 -> 428,146 -> 436,146 -> 436,140 -> 433,140 -> 433,138 -449,85 -> 453,85 -420,134 -> 420,135 -> 429,135 -> 429,134 -419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 -440,87 -> 444,87 -478,32 -> 478,33 -> 490,33 -> 490,32 -443,94 -> 447,94 -431,105 -> 435,105 -481,61 -> 485,61 -460,63 -> 464,63 -419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 -419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 -440,96 -> 444,96 -421,131 -> 421,127 -> 421,131 -> 423,131 -> 423,124 -> 423,131 -> 425,131 -> 425,130 -> 425,131 -> 427,131 -> 427,128 -> 427,131 -421,131 -> 421,127 -> 421,131 -> 423,131 -> 423,124 -> 423,131 -> 425,131 -> 425,130 -> 425,131 -> 427,131 -> 427,128 -> 427,131 -429,138 -> 429,140 -> 428,140 -> 428,146 -> 436,146 -> 436,140 -> 433,140 -> 433,138 -421,131 -> 421,127 -> 421,131 -> 423,131 -> 423,124 -> 423,131 -> 425,131 -> 425,130 -> 425,131 -> 427,131 -> 427,128 -> 427,131 -410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 -434,92 -> 438,92 -410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 -419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 -410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 -475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 -410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 -419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 -475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 -475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 -434,96 -> 438,96 -410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 -456,66 -> 456,70 -> 455,70 -> 455,77 -> 466,77 -> 466,70 -> 462,70 -> 462,66 -475,61 -> 479,61 -422,102 -> 426,102 -419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 -421,131 -> 421,127 -> 421,131 -> 423,131 -> 423,124 -> 423,131 -> 425,131 -> 425,130 -> 425,131 -> 427,131 -> 427,128 -> 427,131 -494,23 -> 494,26 -> 486,26 -> 486,29 -> 502,29 -> 502,26 -> 496,26 -> 496,23 -475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 -419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 -410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 -410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 -410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 -456,66 -> 456,70 -> 455,70 -> 455,77 -> 466,77 -> 466,70 -> 462,70 -> 462,66 -494,23 -> 494,26 -> 486,26 -> 486,29 -> 502,29 -> 502,26 -> 496,26 -> 496,23 -419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 -494,23 -> 494,26 -> 486,26 -> 486,29 -> 502,29 -> 502,26 -> 496,26 -> 496,23 -420,134 -> 420,135 -> 429,135 -> 429,134 -478,63 -> 482,63 -475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 -475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 -425,105 -> 429,105 -494,23 -> 494,26 -> 486,26 -> 486,29 -> 502,29 -> 502,26 -> 496,26 -> 496,23 -497,13 -> 497,16 -> 496,16 -> 496,20 -> 508,20 -> 508,16 -> 503,16 -> 503,13 -456,66 -> 456,70 -> 455,70 -> 455,77 -> 466,77 -> 466,70 -> 462,70 -> 462,66 -475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 -471,38 -> 471,39 -> 480,39 -475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 -456,66 -> 456,70 -> 455,70 -> 455,77 -> 466,77 -> 466,70 -> 462,70 -> 462,66 -497,13 -> 497,16 -> 496,16 -> 496,20 -> 508,20 -> 508,16 -> 503,16 -> 503,13 -410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 -446,87 -> 450,87 -410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 -429,138 -> 429,140 -> 428,140 -> 428,146 -> 436,146 -> 436,140 -> 433,140 -> 433,138 -475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 -440,92 -> 444,92 -449,79 -> 449,80 -> 463,80 -410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 -410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 -429,138 -> 429,140 -> 428,140 -> 428,146 -> 436,146 -> 436,140 -> 433,140 -> 433,138 -410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 -446,96 -> 450,96 -419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 -471,38 -> 471,39 -> 480,39 -410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 -410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 -410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 -456,66 -> 456,70 -> 455,70 -> 455,77 -> 466,77 -> 466,70 -> 462,70 -> 462,66 -419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 -419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 -466,63 -> 470,63 -494,23 -> 494,26 -> 486,26 -> 486,29 -> 502,29 -> 502,26 -> 496,26 -> 496,23 -475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 -497,13 -> 497,16 -> 496,16 -> 496,20 -> 508,20 -> 508,16 -> 503,16 -> 503,13 -497,13 -> 497,16 -> 496,16 -> 496,20 -> 508,20 -> 508,16 -> 503,16 -> 503,13 -419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 -475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 -443,85 -> 447,85 -410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 -421,131 -> 421,127 -> 421,131 -> 423,131 -> 423,124 -> 423,131 -> 425,131 -> 425,130 -> 425,131 -> 427,131 -> 427,128 -> 427,131 -478,32 -> 478,33 -> 490,33 -> 490,32 -421,131 -> 421,127 -> 421,131 -> 423,131 -> 423,124 -> 423,131 -> 425,131 -> 425,130 -> 425,131 -> 427,131 -> 427,128 -> 427,131 -410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 -472,55 -> 476,55 -475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 -419,105 -> 423,105 -419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 -437,90 -> 441,90 -419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 -478,32 -> 478,33 -> 490,33 -> 490,32 -472,59 -> 476,59 -463,61 -> 467,61 -497,13 -> 497,16 -> 496,16 -> 496,20 -> 508,20 -> 508,16 -> 503,16 -> 503,13 -428,96 -> 432,96 -475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 -421,131 -> 421,127 -> 421,131 -> 423,131 -> 423,124 -> 423,131 -> 425,131 -> 425,130 -> 425,131 -> 427,131 -> 427,128 -> 427,131 -421,131 -> 421,127 -> 421,131 -> 423,131 -> 423,124 -> 423,131 -> 425,131 -> 425,130 -> 425,131 -> 427,131 -> 427,128 -> 427,131 -475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 -419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 -478,59 -> 482,59 -410,118 -> 410,108 -> 410,118 -> 412,118 -> 412,114 -> 412,118 -> 414,118 -> 414,115 -> 414,118 -> 416,118 -> 416,108 -> 416,118 -> 418,118 -> 418,112 -> 418,118 -> 420,118 -> 420,116 -> 420,118 -> 422,118 -> 422,116 -> 422,118 -> 424,118 -> 424,108 -> 424,118 -419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 -494,23 -> 494,26 -> 486,26 -> 486,29 -> 502,29 -> 502,26 -> 496,26 -> 496,23 -419,159 -> 419,156 -> 419,159 -> 421,159 -> 421,158 -> 421,159 -> 423,159 -> 423,152 -> 423,159 -> 425,159 -> 425,155 -> 425,159 -> 427,159 -> 427,156 -> 427,159 -> 429,159 -> 429,153 -> 429,159 -> 431,159 -> 431,155 -> 431,159 -> 433,159 -> 433,153 -> 433,159 -475,52 -> 475,50 -> 475,52 -> 477,52 -> 477,46 -> 477,52 -> 479,52 -> 479,49 -> 479,52 -> 481,52 -> 481,49 -> 481,52 -> 483,52 -> 483,42 -> 483,52 -> 485,52 -> 485,47 -> 485,52 -484,63 -> 488,63 -497,13 -> 497,16 -> 496,16 -> 496,20 -> 508,20 -> 508,16 -> 503,16 -> 503,13 diff --git a/2022/15/input.in b/2022/15/input.in deleted file mode 100644 index 788c82d..0000000 --- a/2022/15/input.in +++ /dev/null @@ -1,32 +0,0 @@ -Sensor at x=2885528, y=2847539: closest beacon is at x=2966570, y=2470834 -Sensor at x=2224704, y=1992385: closest beacon is at x=2018927, y=2000000 -Sensor at x=3829144, y=1633329: closest beacon is at x=2966570, y=2470834 -Sensor at x=43913, y=426799: closest beacon is at x=152363, y=369618 -Sensor at x=2257417, y=2118161: closest beacon is at x=2386559, y=2090397 -Sensor at x=8318, y=3994839: closest beacon is at x=-266803, y=2440278 -Sensor at x=69961, y=586273: closest beacon is at x=152363, y=369618 -Sensor at x=3931562, y=3361721: closest beacon is at x=3580400, y=3200980 -Sensor at x=476279, y=3079924: closest beacon is at x=-266803, y=2440278 -Sensor at x=2719185, y=2361091: closest beacon is at x=2966570, y=2470834 -Sensor at x=2533382, y=3320911: closest beacon is at x=2260632, y=3415930 -Sensor at x=3112735, y=3334946: closest beacon is at x=3580400, y=3200980 -Sensor at x=1842258, y=3998928: closest beacon is at x=2260632, y=3415930 -Sensor at x=3712771, y=3760832: closest beacon is at x=3580400, y=3200980 -Sensor at x=1500246, y=2684955: closest beacon is at x=2018927, y=2000000 -Sensor at x=3589321, y=142859: closest beacon is at x=4547643, y=-589891 -Sensor at x=1754684, y=2330721: closest beacon is at x=2018927, y=2000000 -Sensor at x=2476631, y=3679883: closest beacon is at x=2260632, y=3415930 -Sensor at x=27333, y=274008: closest beacon is at x=152363, y=369618 -Sensor at x=158732, y=2405833: closest beacon is at x=-266803, y=2440278 -Sensor at x=2955669, y=3976939: closest beacon is at x=3035522, y=4959118 -Sensor at x=1744196, y=13645: closest beacon is at x=152363, y=369618 -Sensor at x=981165, y=1363480: closest beacon is at x=2018927, y=2000000 -Sensor at x=2612279, y=2151377: closest beacon is at x=2386559, y=2090397 -Sensor at x=3897, y=2076376: closest beacon is at x=-266803, y=2440278 -Sensor at x=2108479, y=1928318: closest beacon is at x=2018927, y=2000000 -Sensor at x=1913043, y=3017841: closest beacon is at x=2260632, y=3415930 -Sensor at x=2446778, y=785075: closest beacon is at x=2386559, y=2090397 -Sensor at x=2385258, y=2774943: closest beacon is at x=2386559, y=2090397 -Sensor at x=3337656, y=2916144: closest beacon is at x=3580400, y=3200980 -Sensor at x=380595, y=66906: closest beacon is at x=152363, y=369618 -Sensor at x=1593628, y=3408455: closest beacon is at x=2260632, y=3415930 diff --git a/2022/16/input.in b/2022/16/input.in deleted file mode 100644 index e8e35c3..0000000 --- a/2022/16/input.in +++ /dev/null @@ -1,59 +0,0 @@ -Valve AW has flow rate=0; tunnels lead to valves LG, TL -Valve OM has flow rate=0; tunnels lead to valves XK, IM -Valve BG has flow rate=0; tunnels lead to valves MP, SB -Valve XB has flow rate=0; tunnels lead to valves MA, TL -Valve CD has flow rate=0; tunnels lead to valves VL, OF -Valve VF has flow rate=0; tunnels lead to valves CS, XK -Valve HK has flow rate=0; tunnels lead to valves RL, QB -Valve QN has flow rate=0; tunnels lead to valves IV, QR -Valve OF has flow rate=4; tunnels lead to valves TQ, CD, IR, IM, JE -Valve QB has flow rate=14; tunnels lead to valves HK, XE, CS, VO -Valve ZE has flow rate=7; tunnels lead to valves JB, NC, SE, OI -Valve OW has flow rate=0; tunnels lead to valves MB, JB -Valve MA has flow rate=0; tunnels lead to valves XB, MB -Valve MP has flow rate=0; tunnels lead to valves VK, BG -Valve UE has flow rate=9; tunnels lead to valves ZM, RZ, WI, HO, FO -Valve QR has flow rate=24; tunnel leads to valve QN -Valve TQ has flow rate=0; tunnels lead to valves OF, AA -Valve SE has flow rate=0; tunnels lead to valves ZE, ZZ -Valve AQ has flow rate=20; tunnel leads to valve CX -Valve XE has flow rate=0; tunnels lead to valves JQ, QB -Valve DC has flow rate=8; tunnels lead to valves ZD, MJ, RZ -Valve ZM has flow rate=0; tunnels lead to valves YJ, UE -Valve VK has flow rate=21; tunnel leads to valve MP -Valve VR has flow rate=0; tunnels lead to valves WV, PS -Valve BH has flow rate=0; tunnels lead to valves AA, MB -Valve ZR has flow rate=0; tunnels lead to valves LG, AI -Valve JE has flow rate=0; tunnels lead to valves OF, HO -Valve IR has flow rate=0; tunnels lead to valves IV, OF -Valve FO has flow rate=0; tunnels lead to valves XQ, UE -Valve AA has flow rate=0; tunnels lead to valves NC, VY, BH, TQ, YJ -Valve ZZ has flow rate=0; tunnels lead to valves SE, TL -Valve XQ has flow rate=0; tunnels lead to valves IV, FO -Valve WI has flow rate=0; tunnels lead to valves UE, VO -Valve VY has flow rate=0; tunnels lead to valves AA, LG -Valve XK has flow rate=15; tunnels lead to valves VF, OM, ZD -Valve CX has flow rate=0; tunnels lead to valves AQ, MB -Valve JQ has flow rate=0; tunnels lead to valves XE, IV -Valve LG has flow rate=3; tunnels lead to valves VY, PS, ZR, AW, OI -Valve JB has flow rate=0; tunnels lead to valves ZE, OW -Valve OI has flow rate=0; tunnels lead to valves ZE, LG -Valve YJ has flow rate=0; tunnels lead to valves ZM, AA -Valve NC has flow rate=0; tunnels lead to valves AA, ZE -Valve KR has flow rate=0; tunnels lead to valves SB, MJ -Valve MB has flow rate=17; tunnels lead to valves CX, BH, AI, OW, MA -Valve AI has flow rate=0; tunnels lead to valves ZR, MB -Valve TL has flow rate=16; tunnels lead to valves ZZ, XB, AW -Valve RL has flow rate=0; tunnels lead to valves WV, HK -Valve CS has flow rate=0; tunnels lead to valves VF, QB -Valve WV has flow rate=25; tunnels lead to valves RL, VL, VR -Valve ZD has flow rate=0; tunnels lead to valves XK, DC -Valve IV has flow rate=23; tunnels lead to valves XQ, IR, JQ, QN -Valve PS has flow rate=0; tunnels lead to valves VR, LG -Valve RZ has flow rate=0; tunnels lead to valves DC, UE -Valve VO has flow rate=0; tunnels lead to valves WI, QB -Valve MJ has flow rate=0; tunnels lead to valves DC, KR -Valve IM has flow rate=0; tunnels lead to valves OM, OF -Valve VL has flow rate=0; tunnels lead to valves CD, WV -Valve SB has flow rate=18; tunnels lead to valves BG, KR -Valve HO has flow rate=0; tunnels lead to valves JE, UE diff --git a/2022/17/input.in b/2022/17/input.in deleted file mode 100644 index b2f8a7a..0000000 --- a/2022/17/input.in +++ /dev/null @@ -1 +0,0 @@ ->><<<>>>><<<><>>><><<<<>>>><>>>><<<<>><<<<>>>><<<<>>>><<<>>>><<<>><<<<>>><<<<><><<>>><>>>><<<>>><<><<<><<<>>><<>>><<<><<><<>><<>><<<>>>><<<<><<>>>><>><<<>><<>>><<<>>>><<<<>>><<>>><><<<>>><<>>>><>>><<<<>>>><<>><<<<><<<<>><<<<>>><<>>><<<<><>>>><<<><<<<>><>>><<<<><<>>><>><<><><<>>><<<>>><<<<><<>>><><<<>><><<<<>><><<<>><<<>><>><>><<><<<<>>>><<<<>>><><<<><<>>>><<><<>><<>><><<<>>><>><<<>><<<><<><><<>>><<>>>><<<<>>>><<><<>><<<><<>><<<<><>>><>><<>>>><<<<>>><<<>>><<<>>><>>><>>><<<<>>><<<<><<<<>>>><>><<><<>><<<><><>>>><>>>><<<><<<><<<><<>><<<>>><<<>>><<<>>>><<>>><<<>><<<>>><<<<><<<><<>><<<><<>>><<<<>><<<><<<>><<<>><<>>>><<>><>><<<><<<<>>>><><<>><<>>><<><<>>><<>>>><<>>><<><<<<>>><<<>>><><<<>><<><<<><>>>><<>>><<<<>>>><<>>><<<<><<<<>>><<<<>><<><<<<><<><<<><<<<><><<>>>><<>>>><>>><<>>>><<<<>><><<<>>>><<>>><<<>>>><<>><<>><<<<>>><<<>><<>><<<<>>><>>>><<<>>>><<<>><<<<>><<>>><<<>>><<>><<<><<<>>>><<>>><>><<>>>><<>>><>><>><<<<>><<<<>>>><<>><<<>><<<>>><<<>><<>>><<>>>><<>><<>><<><<<<><<<>>>><>><>><<<<>><>><<>>>><<<>><>>><<>><>><>>>><<<<>>><<<>>><>><<<<>>><<<<>>><><<<><<<><<<>>>><<<<><>>>><<><<<>>>><<>>>><>><>>><<<>>>><<<>>>><>>><<<<>>><<<><>>><>>>><<<>><><<<<>>><<<<>><<<><<<<><<<>>><<<<>>><<<<>><<<><>>><<<><<>><<<<>><<<<>>><<>>><<<>>><<<<>>><>><<<>>>><<<<>><<<>><>>><<<>>>><>>>><<><<<>>>><>>>><<<<>>><<<<><<<><<<>>>><<<>><<<<>>>><<<<>>>><<<<><<<>><>>><><<<<>><<<<>>>><<>><<>><<>><<<>>>><<>><<<<><<<<>><>><<<<>>><<<>>><<<>>><<<<><<>><<<<><<>>><<<>>><<<>><><>><<>><<<<>>><<<<>>>><<<>><>>>><<<<><>>>><>>><<<<>><<>>>><<<<>>><<<>>>><>>><<<><<><<<>><>>>><<<>><<<<>>><>>><<<>><>><<<>>>><<<<>>>><<>><<<>>><<<<>>><<<<><>><<<>><<<>><<<>>><>>><<<>><<<<>>><<<<>>><<<<>>><<<<>><<<<>><<<<>>><<<<>>>><<<>><<<>>><<>>>><<>><<<>>>><<<>><<>>>><<<>><<<<>>><<<<><<>>><>><>>>><<>>>><<<<><<<><<><<<><<<<>><><<<><<<>><<<><<>><<<<>>><<<>><<>>>><><<<><><>><>><<<<>><<><>><<<>>><<<>>>><<<><<<>><<>><<>>>><<<<><<>><>><<<>>>><<><<<>>><>>>><<<<>>>><<>>><<>>><<<>>>><<<>>>><<>><<<>>>><<<<>><<<>><<<<>><>><<>><<<>><<<>><<>>>><<<>><<<>><<<<>><<<<>><<<<>>><<<><<<><<<<>>>><<><<<<><<>><>>><<<<>>><<<<><<<<><<<>>><<<><<<>>>><>>><<>>>><>><><<><<<<>>><<<>>><>><<><<<>><<<<>>>><<>>><<<<>><<<><<<>>><<>>><>>>><<>>><<<<>><><<>><<><<>>>><<><<<<>>><<<>>>><>>><<>>><<>>><<>><<<><<<<>><>>>><>>><<<><<<<>>>><<<<>>><>>>><<<<>>><<<><>><><<<<>>><<>>>><<>>><<<>><<>>>><<<>>>><<>>><<>>>><>>><<<<>>>><<<<>>><><<<<>>>><><<<<>><<>>>><<><<>>>><<<><><>>>><><<<<>><<<<>>><<>><>><<<><<<<>>>><<<>>><<<<><<>>>><<<>>>><<<<>>><<<><<<>><<<>>>><<<<>><>>>><<<>><<<>><>>>><<>>>><><<<>>><<<>>>><><<>>><<<><<<><>>>><<>>><<<>>>><><>><><>>>><><<<<><<>><<<>>><>>><<<<>>>><<<<>>>><<<<>>><<><><<>>><<<<>><>>>><<>>><<<>>><<<<>>><<<<>><>><<<<>>>><<>><<>><<<<>><<<<>>>><>>><<<>>>><<<>><<<<>>>><>>>><<>><>>>><>>><<>>>><<<>>>><<<<>><<<<>>>><<<><<<<>>><>>><<<<>><<<<>><>>><>><<<<><<<>><<<><<>><>>>><<<<>><><<<><>>><<<><<>><<<<>>>><<><<<>>><<>><<<><<><<<<>>><<<<><<<><<<>>><>><<<><<<>>>><>>>><<<>>>><<<<>>>><<<>>><><<>>>><<>>>><><<>>><>>>><<<>>><>>>><<<><<<<>><<<>>><<><<><>>>><<<>>><><<<>>><>><>>><<<<>>><<><<<<>>><<<<>>><<>><<>>><<<><<<<>>><<><<<>>>><<<<>>><<<>><>>><<<>><<<>>><>>>><<>><<<<><<>>>><<>>>><<<><<>>>><><>><>>><>><<>><<<<><<><<>>>><>><<<>>><>>><>>>><<<>>>><<<>><<<>><<>><><<<<><<<<>>>><<>>>><<>><<<>><<>><<<<><<<>><>>>><<>>><<<<>><>>><<<<>><<<<>>><<<<><<<>><<<>>>><<<>>><<<>>>><<<<><<<<>>>><<>><<>>><<<><<<>>>><<>>><>><<>>>><<<>>>><<>>>><>>><>>><<>><<<<><<<<>><<<<>>><<<<>><>><<<>><>>>><><<<<>>>><>><<<>>>><<<><<>>><<><><<<>>><>><<><>>><<<<><<>><<<>><<<>>><<>>><<<>>><<<><<>><>>>><>><<<<>><><>>><>>>><>>><<<>>><<>><<<><>>><>>><<>>>><<<><<<<>>><<<<><<>><<<>>>><<<>>><<<><>>>><><<><<<<>>><<<<>><<<<>><<>>><<>>>><>>>><<<><<<><>>>><>><<>>><<>>>><<<<><>><><<<><<<>>><<<<>><<<><<<><>>><<<>>><>>><<<<>>><><>>>><<<<><<<<>>><<>>><<>>>><<<<>>>><>>><><<>>>><><<<>>><<<>>>><>><<>>><<<>>>><>>>><<<<>>>><>><<<>>>><>><>>>><<><>>><<>>><>>>><<<>>>><<<<><<<<>>><<<<>>>><><>><<><<><<<<>>>><<><<>><<>><<<>><<<<>>>><><><<>><>>>><>>><<>>><<>><<<<>><<>><<<<>>>><>>>><<>>>><<<>>>><<<<>>>><<>>><><<<<>>><<>><>>><<>>>><<<<>>><<<<>>><<>>><<><<<<>>><>>>><<<>>>><<<<><>>>><<<<>><<<<>>>><<>><<<>><<<<>>><<<<>><<<>><>>><<<>>>><>>>><<<><<<>>>><<<>>><<<<><<>>><<<>>><<>><><<<<>>>><<><<<>>><<<>>><<<>>><<<<>><<<<>><<<<>>>><<<><>><<><<<<>>>><<<<>><<<>>>><><<<>>><<<><>>>><<>>>><<<<>>>><<<<>>><<>><<<>>><<><<>>><<<>>>><<<<><<<<>>>><<<>>>><<<>>>><<><<<>>><<<>>><>><<>>><<<><<<>>>><<<>>>><<>>>><<<<>>>><<>>><>>><<<<>>><<<<><<<>>><<<><<<<>>>><><<>>><>>>><<>>>><<<>>><>><<<>>><<<>>><<>>>><<<<><<>><<>>>><<<<>><<>>>><>><<<<>>>><<><<<><>>>><<<<><<<>><<>>>><>><<>><<<<>>>><<<<>><<>>>><<>>><><<<<>><><<<<><<<<>>>><><>><<<<>><<<>>><>><<<><<<>><<<<>>>><>>><<<<>>><<<<><<>>><<<<>>><<<<><<<<>>>><>>>><<<>>>><>>><<>>>><<<<>><<><<<>>><<<>>>><<><<<<>>><>><<>>>><<<<>><><>><<><>><>>><<><<<>><<<<><>>><<<<>>><>>><>>>><>>><<>>>><<<<>>>><<<<>><>><<<<><<<<><<<<>><<<>>>><<<><<<>><>>><>>><<>>><<<<><<><<>>><<<>><<<>>><><<>>>><<<<>>><<<>>>><<>><<<>>>><<<<>>><<<<>>><>>><<<>>><<>><<<>>>><>>>><<>>><>><>><<>><<>>><<<<>>>><><><<>>>><<<>>>><<><<<>>>><>><>>><>>><<>><>>>><>><<>>><<<<>>><<<>>><<<>>>><<><<<>><><<>><>>>><<>>>><<<<>>>><>><><<<<>><<>>>><>><><>>><<<>>><>>>><>><<<<>><>><>><<<>>><><<>><>><<>><<<<>>>><><<>>><<<>>>><><<<><<<<>>>><>>><<>>><<<><<<<>><<<>>>><<<>>><<<>><>><<<<><<<<><<<>>>><<<>>><<><<<>>><<<<>>>><<<>>><><<<>><<<><<>>>><><>>><<<><<<>><<>>>><<<>><<<<><<><<<<>>><<>>><<<<>>>><<<>>>><<<<>>><<<<>><>><<>>><<><<<>>>><<<>><<<<><<>>>><<<<>><<<<>><<>>>><><<<<>><<<<>>><<<<>>>><<>>>><>>>><<>><<>>><<<>><<><<<>>>><<>>>><<<>><<<><<>><<><<<>><<<<><<>>>><>>><<>>>><<<><<>>>><<<>>>><<<>><<<<>>>><<<<>><<<<>><>>><>>>><<>>>><<><<>>><<<<><<>>>><>><<>><>>>><<<<>>><<<<>><<<<>>>><<<<><<<<><<><<><><<>>>><>><>>><<<<>><<>>><>>>><><<<><<>><<<>>>><<<<>><<<<><<>><<<><<>><<<>>><>><<<>><<>>>><<>><><><<<>>>><<<><<<>>>><>><<<>>><<<>>>><<>>>><<<<>>>><>><<<>><<<>>>><<<<>>>><>><<<<><<<>>><<<<>>><<>>><>>>><><>>>><<>>><<<>>>><>><<<<>>>><<>>><<><<><<<<>>>><<<><<<<>>>><<>>>><<<><<>>>><<<<>>>><<<<>>>><<<>>><<<<>>><<<><<<><<<>><<>><>>><<><<><<<<>><<<<>>>><<<<><<>>>><<<>><<<>>><<<>>><<<<><<<<>>><<<<>><<<>><>>><<>>><<<<>>><><<><<<>>><>><>>><<<>>>><<<>>><<<<>>>><<<>>><<<><<<><<<>>>><>>>><<<<>>><<>>><<>>>><<<><<<>>><<<>>>><<<<><<<<>>><<>><>>>><<<<><>><>><<>>><<><<<>>>><<<<>><<<<>><<>>>><<<<>>><<<<><>><<<>>>><<<<>>>><<<>>><<>>><<>>><><>>><><<<<><<<<>><<><><<><<<<>><<<>>>><<>>><<<<>><<<>>><<<<>>>><<<<>>>><<<>><<<><<>>><>>><<<<>><<>>><>><<<<>>><<<<>>>><<>><>>>><<<<>>><>><>><<<>>>><<<>>><<<>><<<<>>>><<<>>><<<>>>><<>><>>><<<<>>><<>><<<><<<>><<<>><<<>><<<<>><<<><<>>><><<<>>>><<<<>>><>>><<>>>><<<><<>>><>>>><><<>><<>><<<<>><<<<>>><<<>>>><>>>><<<><><<<<>><<>>>><<<<>>>><<<>>><<<<>>>><<<>>><<>>><<>>>><<>>><>>>><<<>><<<><>><<<><<><>>><>>>><<<>>><<>>>><<>><>><>>>><<<<>><<>>>><<><<>>><>><<<<><<><<<>>>><<<<>>><>>>><<<>>><<<<><<<>>>><<>>>><<<<>>>><<><<<<><><<>>><<<<>><>><<<>><<><>><<>>>><<<<><<<><<<>>><<<><<>>><<>>>><><<>>>><<>><>>>><<<<>>>><>><<><<<<>>>><<<<>>><<<>><<<>>><<>>><<<<><>>><<><>><<<<><>>>><<<>>><<<<><<><>><<<>>>><<><><><<>><<>>>><<<<>>><<<>>>><<<>><>>>><>>>><<<<>>>><<<<>>>><<<<>>>><<<<>>>><>>>><<>>>><<<>>><<<<>><<<>><<><<>><>>>><<<><<<>>>><<<>>><<<>>>><<<>>>><<<>>>><<<<>><<<<>>><<<>>>><<><<<<><<<<>>>><<<<>><<<<>>>><<<>>><<<<>><<<<>>>><><<<<><<<<><>><<<>><<<><<>><<><<<>><<>><<>>>><<>>><>>><<<<>>><<<<>><<<<>>>><<<>>>><>><>>>><>>>><<>>><<<>><<>>><<<<><<<<>>><<<>>>><<><<>><<<<>><<<><<<>>><><<<<>><<<<>><<<>>>><>>>><<>>><<<<>>><<<<>>><<>>>><<<>>><<<<>>>><<<<>>><<<><><<<>>>><<<>><>>>><<<<>><<><<><<<><<<><>><<>>>><<<><<<<>><>>>><<>>>><>>><<<<>>><<<<>><<>>><<<>>><<<<>><<<<>>>><<<><>>><<<<>><>><<<><<<>>>><>>><<<<>>><<<>><>><>><<<>>>><<>>>><<<><<>>><<<<>>>><<>>><<<>><<<<>>><<>>><<<<><<<<>>>><<>>>><<<<>>>><<<<>>>><<><<<>><<<<>><<<>><<<>><<<<>>><>>><<<><>>>><<<<>>>><<>>>><<<>><<<<><><<<<>>><<<<>>>><<>>><<>>><<<>><<<<>>>><<<<>>>><>><>><<<<>>>><<<>>>><<><<<><<>><<<<>><<<>><<<<>><>>>><<<<>>>><<<<>>>><<<>>>><<<<>>><<>>>><<>>>><><<<>><<<>>><<<><<>>><><<<><>>>><<<<>>><>><>><<>>>><<<<>>>><<<<>>><>><<<<><<>>><>>>><<>><<>>>><<>>><<<<>>><<<>>><>><<<>><<<>>>><<<>><<<>><<>>><>><<<<>>><<<<>><<<><<<>><<<<>>>><<><<<>>><<<<>>><<><<><>>>><<<>>><<<>>>><<<>><<<>><<<<>><<<<>>><<<<>>>><<<>>><<<>><<<<>><<<>>>><><<><<><>><<<>>><<>>><<<<>>>><<<<>>><<<><<>><<<><<<<>><<<<>>><<<<><>>><<<>><<><><<<>>>><<<<><<<>>><<<>>>><<<<>>>><<<>><<<<>>>><<<><<<<>><<>>>><<<>><<>>>><<><<<>>>><><>><<<<>>><><<<>>>><<<><<><<>>><<<<>>><<<>><>><<<><<<>><<<<><<<<>><<<<><<<<>><><><<<><>>><>>><>>>><<<<>>>><<<>>><><>>>><<<<>>><<<>>><<<<>><<<>><<<><<><<><<>>>><><<<>><<><>>><<<<>>><<<<>>><<><<<<>><<<<><<<><<<>>>><<<>><<<>><<<<>><<<<><<<>>>><<<<><<<<>><<<<><<<<>>><<<<>>><>>><<<<>><<>>>><<<>>>><<<<>>><<>><<<<>><>>><>>>><<><<>>>><<>><>>>><>>><>><<>>>><<<<>>>><<<<><<<<><<<>>><<<>><<<<>>><><<<<>><<<<>><><<<<>>><<<<><<><<><<>><<<><>>>><<<<>><>><<>>>><<<>>>><>><>><<>>>><>><><<<>><><>>><<>>><<>><>>><>>>><<<<>><<>>><<>>><>><<<>>>><<<>><<<>>>><<<<>><<<<>>><<<>>>><<<<>>><>>><><<<<>>><>><<<>><<<<><<><<<>><<>>><<><<<<>>><<<>>><<<><>><><<<<>>>><<<><<><>><<>>>><<<>>><<<>>><<<><>><><<>>><<><<>>><><<>>>><>>><<<<>>><<>>><<<<><>><<<><><<<<><<>>><<>>>><<<>>><<<>><<>>>><<<><<<>><<>>>><<>>><<<<>>><<<>>>><<>>>><<<<><<>><<>><<><>>><<><<<<>><<>><<<>><<<<><><<<<>>><>><<<<>>>><<<>>>><<<<>><>>>><>>>><<<<><<>>><<<<>><<<<>><<<>><<<>><><<<<><<><<<><>>>><<<<>>>><>><><>><<<<><<>>>><<><>><<>>><<<<>>>><<<<>>>><>>>><<>>><<<>>>><<>>><<<>>>><<<<>><<<><>>>><<>><<>>><><<>><<<>>>><><<>>>><<<>><<<<>>><><>>><<<><<>>><<<<>><<<>><>><<<>>><<<<>><<<<><<<<>>><<<<>>>><><<<<>><<<<>><<<><<>><<><<<>><<<>><<>>>><>><>><<>>><<><<>>>><>>><<><<<><<>><<>><<><>>>><<>>><<><<<>>>><<<<><<>>>><<><<><<<>>><<><<<>><<<<>><<<<><<>><<<>>><<>>><<<<>>><<>><<<>>>><<<<>>>><>>>><<<<>><<>><<<<>>><<><<<>>>><<<>><<<<>><<<>>>><>><<>>>><<<<>>><<<<>>>><>>>><<<<>><>>>><<<<><<<<>>><<>>><<<<>><<>>>><><<>><<>>><<<>><<<<>><>>><>>>><>>><<<<><>>>><<<>><>>><<<<>><<<>>><<<><<<>>><<<<>>>><<<>>>><>>><<>><<>><<>>><<<<>>>><<<<>>><<<>><<><<<>><>><<<>>>><<<>><<<>><<<>>>><<<><>><<<>>>><<>>>><<>>><<<>>><>>>><<<<><<<<>>>><<>><<<<><<<<>>><<>><<<>><>>><>>>><<<<>>>><<<>><<>>><>>>><<>><<>>><<><<><<>>><<>><<<>>>><<>>>><<<<>>> diff --git a/2022/18/input.in b/2022/18/input.in deleted file mode 100644 index ff3599f..0000000 --- a/2022/18/input.in +++ /dev/null @@ -1,2150 +0,0 @@ -13,2,10 -3,6,9 -11,17,9 -7,2,11 -14,6,5 -13,16,8 -9,7,2 -3,9,14 -8,3,5 -3,12,9 -7,3,7 -13,2,13 -4,6,5 -13,4,9 -4,8,10 -15,5,8 -17,14,11 -13,17,11 -13,7,2 -11,14,4 -8,9,17 -14,7,15 -4,10,4 -9,12,2 -8,5,13 -14,15,6 -15,14,11 -8,16,10 -2,13,10 -8,18,8 -14,14,5 -3,5,7 -18,8,10 -13,14,11 -6,8,17 -14,10,16 -15,6,6 -16,13,10 -14,4,7 -5,3,5 -10,14,2 -4,13,5 -12,10,1 -6,7,15 -5,10,3 -6,15,13 -14,13,3 -13,14,16 -9,6,16 -10,14,16 -13,16,10 -4,3,10 -2,11,6 -9,12,16 -8,1,8 -9,2,7 -16,10,16 -5,10,15 -16,5,12 -5,11,13 -7,15,8 -5,14,14 -3,8,8 -5,16,6 -5,12,16 -11,16,4 -3,6,10 -8,12,2 -9,10,2 -4,12,8 -9,13,17 -7,12,16 -5,16,13 -12,11,18 -4,10,17 -5,14,6 -5,13,13 -3,7,5 -6,16,11 -3,11,5 -15,11,15 -4,6,14 -5,2,8 -5,13,12 -14,6,16 -3,5,8 -15,15,14 -15,8,15 -16,7,4 -10,4,3 -17,12,7 -7,16,7 -6,10,17 -9,2,9 -10,18,9 -15,7,8 -16,16,12 -3,4,11 -16,15,11 -13,16,5 -13,4,6 -13,3,13 -15,12,11 -14,3,11 -9,16,11 -3,13,8 -13,6,15 -6,14,6 -12,2,11 -3,5,12 -7,17,8 -5,15,5 -8,11,2 -14,3,10 -11,16,8 -4,12,4 -10,11,3 -16,7,12 -5,5,14 -2,7,10 -13,7,17 -16,5,11 -15,6,13 -8,8,18 -3,10,5 -2,6,11 -10,4,5 -12,7,17 -3,9,6 -17,7,11 -10,5,16 -17,6,11 -10,2,12 -7,10,18 -8,16,11 -11,15,15 -16,10,5 -10,16,4 -4,16,6 -15,4,11 -2,9,9 -3,7,6 -5,3,6 -10,16,5 -13,15,11 -3,4,9 -3,8,12 -6,5,4 -2,9,8 -2,7,7 -16,14,14 -15,10,15 -16,10,13 -9,14,4 -2,7,6 -13,3,11 -17,13,10 -12,2,10 -8,16,13 -16,11,11 -12,10,17 -6,15,11 -10,17,13 -6,10,4 -8,12,4 -3,11,14 -9,5,4 -15,6,14 -6,6,4 -14,5,5 -17,10,9 -18,11,11 -5,4,5 -15,5,15 -12,5,13 -3,8,7 -13,3,14 -13,8,3 -3,5,10 -10,17,7 -15,15,13 -14,13,15 -5,14,12 -12,3,11 -14,13,5 -13,17,9 -5,8,17 -8,2,11 -10,11,2 -9,5,1 -11,3,9 -14,4,10 -11,12,2 -10,14,17 -17,11,11 -11,16,11 -9,11,1 -5,4,13 -17,9,10 -2,11,12 -10,9,17 -12,16,7 -16,12,8 -11,7,1 -12,8,17 -18,7,11 -10,4,17 -5,5,3 -2,10,13 -8,5,14 -3,9,10 -6,5,14 -7,7,2 -8,2,7 -15,9,16 -10,14,4 -5,15,7 -14,13,12 -17,14,8 -16,11,8 -15,6,15 -3,11,15 -10,6,2 -11,14,16 -10,5,14 -2,8,11 -12,4,16 -9,17,12 -4,4,11 -12,16,6 -2,9,6 -15,7,10 -7,8,2 -11,2,11 -5,6,3 -11,18,8 -4,10,10 -12,4,15 -2,14,10 -7,11,2 -13,11,16 -2,9,11 -4,14,6 -12,8,18 -4,7,15 -8,12,17 -3,15,7 -15,16,8 -3,7,15 -10,2,13 -12,16,11 -15,4,13 -14,10,2 -12,15,15 -5,12,15 -12,15,4 -9,10,18 -9,8,2 -14,15,12 -3,13,11 -13,17,10 -2,10,12 -6,17,7 -15,14,7 -8,2,6 -11,5,5 -7,8,3 -4,7,8 -9,3,11 -13,4,3 -14,3,8 -13,4,4 -14,15,5 -4,6,7 -6,14,7 -6,2,7 -6,5,5 -11,3,6 -10,15,5 -6,3,13 -13,14,6 -13,14,15 -3,9,7 -14,3,7 -8,9,18 -14,8,12 -13,3,8 -15,15,9 -7,16,4 -6,18,9 -10,15,3 -6,16,12 -9,14,2 -12,3,8 -9,11,15 -4,15,9 -8,2,9 -8,11,1 -14,11,15 -11,11,1 -1,11,9 -14,7,13 -6,10,16 -15,12,5 -12,3,7 -15,11,7 -12,13,14 -12,10,3 -5,4,7 -12,13,17 -6,9,17 -14,8,3 -2,9,10 -17,9,6 -4,15,5 -4,13,6 -10,12,16 -3,8,4 -11,1,9 -2,6,13 -2,12,4 -11,10,17 -13,15,16 -9,2,6 -6,11,3 -3,7,13 -8,15,13 -15,7,7 -3,12,12 -17,9,11 -13,13,15 -12,2,7 -5,9,15 -7,15,13 -9,4,16 -9,14,14 -11,10,2 -16,8,12 -10,3,5 -11,18,9 -11,13,15 -3,14,9 -8,18,13 -8,10,17 -6,13,3 -5,13,14 -7,4,5 -15,14,8 -8,18,10 -4,5,10 -16,6,11 -15,13,10 -12,16,9 -9,5,16 -4,14,10 -11,17,11 -12,17,10 -17,8,8 -15,3,12 -14,11,17 -16,5,9 -11,8,1 -5,12,3 -9,3,7 -14,7,3 -16,11,14 -15,9,7 -14,11,6 -11,1,7 -2,12,10 -6,3,8 -3,5,9 -10,10,2 -4,6,11 -4,10,8 -6,12,17 -13,3,10 -8,9,1 -4,5,12 -3,13,7 -14,5,4 -10,2,6 -3,14,10 -17,6,8 -15,13,7 -9,5,15 -10,5,4 -11,14,15 -16,5,8 -8,3,11 -4,15,6 -16,15,8 -16,8,6 -13,15,13 -2,6,12 -3,14,15 -16,7,14 -5,14,5 -10,16,14 -17,7,9 -14,15,7 -4,7,5 -14,14,4 -6,7,17 -0,10,7 -6,16,8 -17,15,9 -4,8,14 -14,14,6 -5,5,8 -13,13,4 -3,12,5 -7,17,11 -13,14,14 -15,8,3 -3,10,14 -8,6,1 -7,3,8 -6,12,16 -17,10,8 -11,8,17 -17,8,6 -14,5,6 -7,2,7 -12,16,15 -14,3,14 -17,9,7 -12,18,6 -3,14,12 -15,12,15 -14,5,13 -17,11,6 -7,13,2 -3,6,7 -17,8,5 -14,15,9 -13,11,3 -16,14,11 -8,17,11 -13,6,2 -10,17,14 -12,12,15 -5,7,16 -7,14,4 -7,2,9 -5,6,4 -15,14,5 -16,3,7 -14,4,4 -4,13,9 -9,16,15 -8,17,8 -15,6,11 -11,12,16 -14,17,7 -5,15,6 -16,11,12 -5,16,10 -12,4,6 -3,13,10 -1,8,9 -7,2,10 -7,13,17 -19,9,11 -6,11,16 -9,18,10 -16,11,4 -13,7,16 -10,3,7 -15,13,13 -8,11,4 -5,15,12 -17,10,6 -14,12,15 -17,13,8 -6,13,15 -7,7,16 -10,2,8 -4,13,13 -9,15,14 -9,4,3 -6,4,8 -5,10,16 -4,7,16 -13,10,16 -5,6,15 -8,10,16 -7,16,6 -7,7,17 -3,11,12 -12,7,1 -16,12,15 -6,16,6 -10,17,11 -7,5,13 -10,14,13 -16,7,5 -11,13,17 -7,7,4 -6,5,13 -9,16,6 -4,9,4 -13,16,13 -5,11,5 -5,3,8 -11,4,9 -17,9,9 -6,4,7 -15,9,6 -8,5,16 -3,12,14 -12,17,9 -3,8,9 -6,2,8 -15,9,14 -2,6,10 -18,11,7 -4,3,8 -12,11,16 -17,13,7 -2,10,6 -1,13,7 -16,6,6 -6,14,14 -12,10,2 -3,5,5 -15,9,15 -15,5,6 -3,6,14 -9,5,3 -11,3,11 -7,5,15 -13,11,4 -7,5,5 -13,8,16 -15,13,6 -2,7,8 -16,14,10 -6,6,15 -15,16,9 -10,17,10 -8,4,6 -6,16,13 -17,4,10 -5,9,3 -9,13,2 -6,17,9 -9,13,16 -7,9,18 -9,17,10 -11,2,9 -17,7,7 -7,2,12 -8,13,17 -16,11,5 -18,7,9 -12,13,2 -9,15,9 -9,2,11 -13,3,15 -1,10,12 -3,12,10 -14,4,8 -13,15,5 -7,13,16 -3,15,9 -15,12,16 -12,4,13 -10,6,17 -11,10,18 -6,17,10 -14,6,10 -12,5,15 -7,9,1 -7,5,17 -5,3,9 -13,15,7 -4,4,8 -7,8,17 -3,12,13 -17,8,13 -9,3,12 -1,14,9 -4,14,12 -9,16,16 -10,10,17 -5,8,16 -6,16,15 -11,15,3 -12,9,2 -2,8,6 -6,11,17 -7,8,16 -6,6,3 -3,6,6 -6,2,10 -7,15,12 -9,4,2 -11,3,14 -16,15,13 -13,14,13 -16,15,7 -14,9,7 -6,3,7 -15,16,11 -5,15,13 -2,10,4 -5,11,14 -15,14,14 -7,3,10 -12,15,14 -7,5,4 -14,11,3 -7,1,11 -13,2,12 -5,2,9 -10,4,16 -9,17,6 -6,8,4 -15,5,5 -12,2,6 -3,8,6 -7,12,17 -12,16,10 -16,13,8 -15,3,8 -17,9,8 -10,2,9 -12,8,5 -16,7,13 -14,16,8 -4,12,16 -8,3,6 -7,18,6 -12,5,5 -10,2,14 -17,6,12 -7,9,17 -5,3,10 -15,4,14 -14,2,10 -12,6,4 -7,16,12 -6,17,8 -15,9,4 -15,7,13 -7,9,4 -6,3,6 -2,13,7 -3,12,8 -3,8,15 -8,3,8 -7,16,5 -12,6,2 -3,12,4 -6,10,2 -17,8,10 -11,2,10 -6,16,9 -8,15,4 -9,9,18 -17,13,9 -3,9,13 -9,15,12 -12,11,3 -18,7,8 -12,4,5 -9,5,6 -10,7,2 -2,8,7 -2,8,13 -10,6,16 -9,3,15 -3,7,4 -1,9,9 -13,16,12 -11,5,15 -4,8,16 -14,4,9 -5,6,14 -11,7,18 -12,12,3 -17,6,7 -16,6,13 -14,15,14 -11,11,17 -15,5,11 -7,15,14 -10,3,16 -15,15,5 -2,11,7 -13,13,16 -5,5,4 -7,5,3 -12,3,15 -14,14,7 -8,16,14 -4,10,13 -5,8,13 -17,14,10 -16,12,5 -5,17,12 -2,10,11 -10,1,10 -16,11,6 -11,3,5 -18,9,12 -16,13,12 -15,10,3 -13,2,8 -2,12,7 -8,7,16 -6,15,14 -15,7,3 -16,6,10 -12,15,12 -9,15,4 -10,12,3 -3,13,9 -8,6,4 -8,5,15 -5,3,13 -16,14,5 -4,12,5 -18,12,9 -16,6,9 -16,14,8 -8,5,4 -10,7,3 -13,4,5 -6,14,4 -8,10,2 -12,16,13 -12,11,17 -10,6,5 -4,5,7 -18,8,9 -17,6,9 -9,16,9 -17,8,7 -6,9,2 -10,8,2 -4,16,8 -8,17,14 -8,15,15 -14,12,13 -16,10,9 -8,16,6 -2,9,13 -2,8,14 -5,10,14 -7,15,3 -10,4,15 -5,8,15 -4,10,15 -14,7,6 -15,6,12 -9,16,4 -13,16,11 -5,5,13 -12,3,14 -10,15,2 -8,2,13 -13,12,15 -3,3,9 -4,4,6 -14,7,4 -6,14,12 -14,7,17 -5,9,4 -13,4,13 -8,12,16 -8,2,14 -3,13,12 -10,18,6 -17,11,5 -13,9,3 -14,16,12 -2,13,12 -11,14,17 -8,17,12 -4,14,13 -14,8,2 -11,2,6 -8,13,3 -9,4,15 -10,2,15 -12,11,4 -2,14,9 -4,14,5 -15,4,9 -7,2,13 -9,16,10 -9,12,17 -13,5,4 -16,4,12 -11,16,13 -7,3,14 -7,13,3 -12,7,16 -14,12,16 -9,16,7 -11,12,4 -11,3,12 -13,18,7 -16,9,14 -16,14,6 -1,7,7 -16,12,10 -16,8,14 -14,10,4 -15,10,14 -14,14,15 -15,15,6 -12,14,4 -11,6,3 -16,9,6 -17,12,11 -5,6,5 -8,17,9 -17,8,4 -5,4,14 -17,12,10 -6,4,5 -4,4,10 -15,6,5 -18,6,9 -4,12,9 -12,7,3 -8,10,18 -16,12,13 -9,5,5 -5,13,15 -14,4,12 -4,7,6 -10,9,2 -1,12,10 -12,2,8 -7,14,3 -8,9,2 -3,6,11 -17,9,12 -6,3,9 -4,8,4 -16,7,6 -4,10,16 -5,14,13 -5,15,9 -12,16,4 -6,7,2 -12,2,13 -8,5,3 -9,9,2 -10,6,3 -12,4,11 -11,2,7 -9,10,4 -11,16,5 -13,12,3 -11,8,2 -1,10,8 -9,15,17 -7,11,16 -5,5,11 -11,14,3 -11,17,8 -12,16,8 -4,4,5 -10,3,15 -8,4,5 -1,7,8 -4,2,7 -3,7,14 -11,6,2 -13,17,7 -15,11,3 -13,15,12 -6,5,15 -1,6,10 -4,13,4 -6,2,13 -8,3,13 -5,4,6 -15,12,4 -9,7,17 -14,7,16 -8,11,18 -14,12,4 -7,16,10 -13,2,11 -12,9,18 -10,1,9 -18,9,11 -14,12,5 -9,17,7 -17,7,12 -5,14,9 -13,9,1 -10,5,15 -16,11,16 -4,3,11 -3,4,12 -4,5,5 -14,12,3 -10,6,4 -12,15,7 -2,9,12 -8,6,15 -3,14,11 -9,16,5 -17,11,9 -7,17,7 -3,7,3 -13,10,17 -2,12,13 -7,3,11 -13,7,3 -3,5,6 -11,17,6 -16,10,11 -13,4,14 -6,7,3 -11,7,16 -3,6,13 -9,16,12 -13,16,7 -9,2,10 -9,15,15 -6,12,2 -11,15,5 -5,11,6 -5,13,5 -16,4,9 -13,3,9 -16,8,15 -13,11,2 -9,3,5 -8,16,5 -14,3,12 -4,11,3 -9,2,12 -2,10,8 -3,8,14 -5,11,4 -6,14,11 -16,10,12 -9,17,8 -4,7,7 -7,16,11 -10,9,1 -6,5,12 -12,4,7 -15,14,9 -8,12,18 -14,6,14 -8,7,3 -8,8,17 -8,4,14 -2,8,9 -14,5,14 -4,4,14 -13,3,6 -2,12,11 -6,10,15 -14,8,15 -16,5,13 -11,13,4 -16,13,6 -1,10,6 -17,6,10 -5,7,2 -8,6,17 -11,4,4 -15,4,7 -13,3,5 -13,17,5 -13,4,8 -13,5,14 -8,3,4 -8,3,10 -10,13,2 -8,8,2 -17,11,10 -14,14,14 -11,4,5 -14,16,7 -3,14,8 -8,3,14 -9,3,16 -15,14,12 -12,11,2 -15,4,6 -7,10,17 -5,7,5 -5,5,5 -16,14,9 -11,12,17 -8,7,18 -9,10,1 -11,11,3 -11,2,13 -9,16,14 -6,15,15 -11,2,8 -9,12,18 -3,7,7 -14,15,8 -4,6,8 -4,11,4 -7,4,6 -13,9,15 -6,7,5 -7,15,16 -12,9,1 -10,12,2 -2,11,9 -13,3,12 -3,4,10 -3,8,3 -16,10,4 -10,13,3 -4,4,7 -3,10,12 -9,9,17 -7,14,16 -6,17,12 -6,8,3 -7,18,10 -2,12,9 -8,9,3 -2,5,10 -9,1,8 -17,6,13 -12,3,6 -2,11,8 -2,7,9 -8,4,15 -17,14,9 -16,8,4 -17,12,13 -12,3,5 -10,3,13 -2,10,14 -7,16,8 -5,10,2 -14,5,8 -9,14,16 -11,6,4 -17,5,11 -16,6,7 -16,11,9 -13,16,6 -7,4,14 -5,7,6 -10,5,3 -3,6,12 -14,5,15 -3,10,15 -12,4,3 -8,6,2 -9,8,17 -6,16,7 -12,11,1 -4,12,6 -7,6,3 -12,4,12 -8,14,4 -2,11,11 -14,17,13 -8,16,12 -13,15,4 -6,12,3 -9,16,8 -10,9,0 -7,10,2 -15,10,4 -16,5,6 -12,6,16 -16,9,5 -17,11,15 -5,15,10 -3,12,11 -15,6,9 -6,11,4 -13,10,4 -14,16,11 -12,18,8 -13,10,3 -15,12,7 -11,16,10 -4,7,4 -13,15,6 -10,5,2 -11,7,15 -7,2,8 -17,7,10 -10,17,8 -14,10,3 -15,9,17 -18,11,9 -6,6,16 -13,6,4 -6,4,13 -8,7,17 -7,3,4 -2,13,8 -12,1,6 -5,9,16 -13,5,6 -10,17,12 -13,11,17 -7,12,3 -14,9,15 -11,13,16 -14,9,14 -14,8,4 -12,14,3 -16,13,4 -11,9,2 -2,6,9 -4,9,7 -16,11,10 -17,11,8 -3,4,8 -5,14,11 -3,5,11 -4,14,11 -14,17,12 -3,7,9 -5,11,3 -11,11,2 -11,16,16 -9,16,13 -5,13,4 -15,11,4 -13,15,14 -14,11,14 -10,8,4 -11,7,3 -6,15,5 -11,5,3 -15,15,7 -11,16,15 -16,4,7 -7,16,13 -6,12,15 -3,9,15 -9,15,5 -9,1,10 -10,19,11 -14,4,6 -6,13,2 -18,12,11 -3,15,11 -12,13,16 -9,17,13 -16,10,14 -8,15,5 -6,3,15 -9,11,17 -14,9,17 -12,6,6 -4,9,15 -7,18,8 -9,1,12 -1,10,9 -11,5,17 -17,11,12 -12,18,11 -11,9,4 -14,9,16 -2,12,5 -5,4,9 -17,7,8 -3,10,3 -14,16,13 -6,7,4 -17,12,9 -8,17,5 -10,3,6 -13,3,7 -7,3,9 -8,9,16 -4,14,8 -10,11,16 -10,3,14 -5,17,11 -1,7,11 -0,9,10 -4,7,14 -4,13,14 -8,5,17 -17,13,12 -4,13,15 -17,7,5 -8,10,3 -6,6,6 -7,15,15 -6,12,18 -11,4,15 -4,2,6 -19,10,12 -11,1,12 -4,15,8 -13,10,14 -15,4,12 -15,13,4 -8,14,16 -11,15,6 -4,14,15 -16,6,4 -17,9,14 -12,2,5 -12,14,15 -11,10,16 -4,3,12 -12,16,12 -16,13,11 -10,7,18 -12,3,12 -5,6,13 -13,6,1 -13,4,10 -5,16,8 -15,12,14 -13,16,14 -10,16,13 -16,8,11 -7,14,17 -9,8,1 -15,14,15 -7,4,12 -15,8,4 -11,4,3 -11,18,7 -4,4,9 -5,4,12 -8,3,12 -6,16,10 -1,7,9 -4,11,15 -4,17,11 -4,12,14 -13,17,8 -2,10,10 -12,7,15 -18,9,9 -8,2,12 -14,6,2 -3,7,8 -9,8,3 -5,16,7 -13,9,2 -0,10,8 -13,7,4 -18,11,6 -5,11,17 -3,7,11 -8,17,10 -10,3,10 -1,10,7 -7,9,2 -12,13,4 -15,11,16 -9,18,13 -13,4,7 -11,9,17 -10,15,14 -16,10,15 -7,4,13 -12,9,17 -4,8,12 -10,10,1 -5,7,13 -14,17,9 -14,14,12 -15,12,13 -5,6,16 -18,9,7 -18,11,12 -12,8,3 -4,5,8 -6,7,16 -11,12,18 -16,12,14 -9,2,14 -12,8,16 -2,6,8 -6,5,16 -7,17,6 -8,1,10 -1,13,10 -10,16,15 -2,13,13 -9,3,13 -14,13,14 -14,5,9 -15,10,16 -14,9,4 -5,14,8 -6,6,17 -18,10,13 -15,15,12 -3,10,7 -11,16,9 -10,2,7 -8,18,7 -14,4,5 -8,13,4 -7,12,2 -7,4,7 -16,15,9 -10,9,18 -14,6,15 -11,7,17 -17,10,14 -14,11,4 -14,13,16 -10,8,19 -4,13,3 -11,13,14 -2,7,11 -13,17,13 -14,7,5 -10,1,8 -5,17,9 -3,9,5 -9,8,18 -7,18,9 -11,10,3 -2,8,12 -14,9,3 -10,18,8 -1,9,8 -15,8,5 -4,9,12 -4,6,4 -11,3,13 -15,10,5 -1,9,12 -3,11,7 -8,7,2 -17,9,13 -9,12,1 -3,11,11 -7,2,6 -4,11,16 -5,11,15 -12,6,3 -7,14,5 -15,13,14 -5,17,10 -12,12,17 -3,12,6 -13,11,1 -8,3,15 -10,7,16 -3,9,8 -3,7,10 -12,7,2 -5,12,5 -4,11,13 -11,9,16 -6,2,12 -11,6,6 -10,17,9 -6,12,4 -9,6,3 -3,13,13 -3,5,13 -7,17,12 -11,13,3 -3,10,11 -16,15,10 -2,9,7 -11,11,18 -2,15,9 -17,6,4 -3,6,5 -12,6,15 -14,8,14 -2,8,10 -10,8,1 -10,2,11 -5,3,7 -5,13,2 -12,10,15 -9,2,5 -4,12,15 -2,12,8 -16,13,14 -6,3,11 -16,8,8 -16,13,5 -4,12,3 -15,7,15 -5,5,15 -17,8,15 -10,13,16 -8,1,7 -7,9,3 -9,13,3 -13,13,3 -5,2,12 -13,14,4 -13,5,15 -9,10,17 -11,4,13 -9,3,14 -7,15,4 -13,6,16 -3,5,14 -11,17,13 -2,13,6 -7,6,17 -11,5,16 -2,12,12 -16,11,15 -16,10,10 -4,16,12 -16,9,4 -8,14,7 -7,13,15 -11,17,5 -10,2,5 -16,7,10 -13,5,9 -15,12,6 -12,2,12 -4,13,10 -6,14,16 -9,9,16 -12,15,13 -2,7,5 -10,1,7 -12,1,12 -7,3,5 -13,14,5 -7,14,15 -16,9,10 -16,12,7 -2,10,7 -4,7,12 -4,6,12 -3,15,13 -5,14,10 -7,7,1 -12,16,16 -18,10,8 -4,10,14 -2,12,6 -12,5,16 -5,12,4 -11,15,16 -17,10,13 -11,2,14 -3,13,5 -17,8,9 -13,8,15 -10,3,11 -1,8,11 -3,9,12 -4,8,13 -4,11,9 -4,15,10 -7,11,3 -15,7,6 -14,5,11 -8,11,17 -15,8,13 -10,12,1 -16,9,16 -10,2,4 -17,5,9 -14,11,16 -5,10,4 -17,10,7 -10,8,17 -15,5,7 -15,12,12 -11,17,12 -16,7,7 -14,6,3 -8,4,16 -8,14,3 -4,8,15 -10,15,4 -15,5,9 -18,9,8 -15,14,13 -7,4,11 -12,2,15 -6,9,4 -15,7,16 -10,6,1 -16,9,3 -14,15,10 -8,2,10 -6,4,11 -12,14,17 -10,5,6 -10,3,12 -16,15,6 -14,16,6 -5,3,11 -16,8,13 -9,15,16 -12,5,3 -10,15,17 -12,12,16 -9,6,2 -8,6,18 -12,7,4 -15,10,2 -1,6,11 -5,4,8 -15,14,6 -6,4,16 -10,9,3 -4,4,12 -16,8,10 -11,14,11 -8,4,4 -12,13,3 -15,10,13 -6,15,4 -17,11,7 -1,10,10 -14,4,13 -7,11,1 -11,5,13 -10,11,1 -1,9,10 -5,5,7 -2,8,5 -9,3,8 -10,1,11 -15,5,4 -11,16,6 -6,15,16 -12,5,14 -8,7,1 -9,1,11 -14,11,2 -8,4,3 -13,10,15 -14,2,11 -5,13,3 -5,8,4 -12,16,5 -6,8,2 -17,8,11 -6,2,9 -1,11,8 -13,14,12 -13,5,13 -8,11,3 -6,4,15 -4,10,5 -13,13,14 -7,12,14 -3,13,4 -8,5,8 -4,17,9 -10,16,6 -17,7,6 -7,4,4 -9,5,13 -6,8,14 -10,16,12 -15,3,11 -17,5,12 -4,15,13 -9,7,18 -11,9,15 -18,9,10 -4,5,11 -15,3,6 -15,5,12 -3,14,5 -13,6,3 -9,11,2 -6,11,15 -10,15,15 -14,16,10 -3,11,6 -4,12,13 -14,14,10 -7,16,9 -10,17,5 -8,6,3 -6,9,18 -1,9,11 -11,11,15 -16,8,5 -2,11,10 -13,8,17 -6,1,9 -5,2,11 -0,8,9 -11,1,11 -6,16,5 -17,11,13 -12,3,13 -4,12,17 -18,13,8 -6,15,6 -2,8,8 -14,5,7 -6,14,5 -13,13,5 -1,10,11 -12,1,9 -15,5,13 -11,2,12 -4,15,7 -10,15,16 -13,12,4 -16,8,7 -5,6,10 -14,8,16 -9,13,6 -10,4,14 -14,4,14 -9,8,16 -12,15,16 -14,2,9 -15,5,10 -10,4,4 -7,17,13 -8,17,4 -11,15,14 -7,3,13 -14,7,14 -10,2,10 -2,11,13 -15,14,10 -10,16,7 -9,8,4 -8,16,15 -4,5,4 -5,12,14 -14,6,13 -16,4,10 -16,12,9 -15,12,3 -6,13,16 -11,16,12 -13,13,2 -5,4,11 -18,11,10 -16,13,13 -6,3,10 -17,10,10 -14,13,6 -16,6,15 -15,4,10 -17,10,11 -6,10,3 -10,14,7 -12,9,16 -4,9,5 -11,15,7 -11,12,3 -11,4,7 -9,11,3 -11,9,3 -16,14,12 -13,6,13 -15,9,13 -9,17,9 -9,6,1 -1,8,10 -7,2,14 -6,16,14 -7,5,2 -5,13,6 -14,11,5 -7,2,15 -11,6,17 -4,9,14 -14,14,11 -8,6,16 -3,9,3 -8,13,16 -16,9,7 -6,14,3 -4,9,3 -3,8,13 -15,3,10 -11,9,18 -3,8,5 -17,6,6 -4,3,9 -6,8,16 -13,2,6 -17,15,11 -14,6,4 -4,8,3 -10,10,3 -2,5,9 -9,13,18 -12,4,14 -6,17,11 -2,13,9 -9,7,1 -5,14,7 -8,14,15 -10,10,18 -11,3,15 -3,15,8 -11,15,4 -13,7,15 -14,6,6 -6,9,3 -13,17,12 -8,8,1 -10,4,13 -6,11,18 -12,13,15 -3,11,13 -16,13,7 -10,4,6 -7,6,15 -10,16,16 -5,9,14 -1,6,9 -7,15,11 -7,9,5 -4,5,13 -6,9,6 -12,3,9 -7,7,3 -17,6,5 -14,15,13 -9,11,18 -4,12,7 -6,6,5 -14,3,13 -7,15,5 -6,4,12 -4,6,13 -6,11,5 -7,1,8 -11,18,12 -5,7,12 -16,15,12 -3,14,7 -9,4,14 -3,11,8 -5,17,7 -12,16,14 -9,18,9 -10,12,17 -14,16,9 -6,11,1 -17,5,8 -11,3,4 -10,0,12 -8,17,13 -9,4,12 -4,2,10 -7,13,4 -14,2,7 -18,12,10 -3,7,12 -14,17,11 -11,10,1 -6,6,14 -7,17,10 -13,2,7 -11,16,14 -10,7,1 -7,4,15 -12,4,2 -12,9,3 -3,11,10 -11,5,4 -5,7,14 -16,13,15 -13,9,17 -4,2,11 -7,16,14 -4,11,14 -15,6,4 -16,6,5 -15,7,14 -12,17,12 -5,17,8 -1,12,12 -14,13,8 -10,13,4 -7,18,7 -17,10,12 -5,15,14 -17,8,12 -10,14,3 -7,14,14 -9,1,9 -10,11,18 -5,12,17 -7,6,18 -16,6,8 -6,5,3 -16,5,7 -9,11,16 -11,14,2 -3,10,4 -3,12,7 -6,4,6 -7,17,9 -9,6,17 -5,8,3 -7,13,18 -4,11,5 -6,6,2 -17,12,12 -6,14,15 -11,7,2 -4,9,16 -17,12,8 -5,16,14 -12,4,4 -13,15,8 -9,9,15 -4,8,7 -10,3,3 -13,14,7 -11,15,8 -14,12,14 -13,13,17 -10,16,8 -1,12,9 -12,18,10 -15,10,17 -13,5,3 -7,11,18 -8,18,11 -12,10,16 -14,8,5 -4,6,15 -6,4,14 -6,9,16 -18,6,7 -6,7,6 -16,9,15 -16,5,10 -16,7,11 -9,14,3 -14,5,12 -13,4,15 -16,6,14 -15,9,2 -3,16,9 -17,13,11 -16,10,6 -4,6,9 -10,16,10 -14,15,11 -6,15,10 -7,10,16 -8,13,2 -8,2,8 -2,11,5 -4,11,12 -6,6,13 -6,1,10 -13,12,17 -8,3,7 -3,8,10 -16,3,9 -15,3,13 -5,13,16 -1,11,13 -15,13,15 -15,2,9 -13,2,9 -14,14,8 -13,9,4 -3,13,6 -13,8,2 -7,1,10 -11,13,2 -14,10,17 -3,9,11 -6,5,7 -4,14,14 -8,6,5 -14,4,11 -7,7,15 -12,1,13 -12,5,6 -16,7,15 -15,13,12 -8,15,6 -4,14,7 -9,3,9 -3,11,4 -10,18,10 -9,12,3 -13,5,10 -15,13,11 -12,5,4 -14,9,2 -15,15,11 -5,16,9 -4,7,11 -17,6,14 -12,14,16 -6,15,7 -2,4,12 -11,11,16 -4,14,9 -2,15,11 -4,15,15 -10,18,12 -7,7,5 -9,13,15 -18,8,13 -10,18,11 -11,2,5 -15,9,5 -5,5,6 -7,15,7 -1,8,8 -11,4,12 -16,13,9 -11,14,12 -11,14,5 -9,4,4 -16,9,13 -15,9,3 -15,11,12 -15,16,10 -4,5,6 -1,11,6 -8,18,9 -9,3,4 -4,5,9 -5,18,9 -4,5,14 -8,8,16 -15,13,5 -5,9,2 -10,8,16 -8,4,11 -4,6,3 -3,6,8 -13,6,17 -10,19,9 -14,3,4 -14,14,13 -9,17,14 -6,5,6 -0,10,10 -16,11,13 -11,17,7 -16,10,7 -4,6,6 -11,6,15 -8,12,3 -11,13,18 -12,8,1 -1,7,12 -15,4,8 -16,4,11 -14,3,9 -13,11,14 -11,4,14 -17,14,7 -12,1,11 -8,14,5 -18,10,10 -2,10,5 -4,9,13 -6,18,7 -16,7,9 -15,13,16 -17,4,9 -15,17,11 -8,11,16 -9,4,17 -12,3,10 -3,15,10 -11,3,8 -4,16,11 -8,17,7 -4,13,11 -13,9,18 -10,4,12 -16,11,7 -3,9,4 -15,8,14 -6,14,13 -13,6,14 -2,5,8 -6,4,4 -6,12,5 -5,16,11 -10,6,15 -11,4,10 -11,3,7 -18,8,8 -5,7,3 -3,9,9 -18,10,11 -14,13,4 -16,12,6 -4,2,9 -7,11,17 -11,18,11 -9,7,16 -7,6,5 -13,17,14 -6,4,3 -3,16,8 -7,16,15 -8,16,4 -7,8,18 -10,11,4 -7,9,16 -2,9,14 -9,4,7 -10,0,9 -15,6,7 -13,11,15 -12,12,2 -9,18,11 -8,5,2 -10,12,18 -4,10,2 -4,8,11 -13,12,5 -15,15,8 -13,8,4 -3,15,5 -5,8,5 -7,3,6 -5,10,13 -8,13,1 -17,10,15 -9,9,1 -9,15,3 -8,4,2 -7,17,5 -11,16,7 -10,15,7 -6,3,5 -11,5,2 -13,10,2 -6,18,11 -6,11,2 -4,10,3 -8,10,1 -13,14,3 -3,10,8 -10,6,18 -11,9,14 -5,9,5 -8,5,5 -14,3,6 -1,9,7 -5,13,7 -10,3,4 -8,8,3 -5,16,12 -4,14,4 -8,18,12 -6,3,12 -18,12,6 -9,4,11 -4,4,13 -3,3,12 -1,8,12 -15,11,13 -13,12,16 -5,6,8 -18,6,11 -6,9,5 -15,7,9 -2,6,6 -12,17,7 -4,15,11 -6,13,4 -12,14,5 -3,3,7 -9,1,14 -14,8,6 -7,10,4 -2,14,7 -14,17,8 -3,10,16 -12,14,14 -10,10,16 -4,7,9 -14,6,7 -8,4,13 -16,5,5 -12,8,2 -6,9,1 -11,1,8 -1,7,10 -5,5,16 -13,15,15 -3,7,16 -7,5,7 -7,3,12 -4,13,7 -9,4,5 -14,14,3 -8,14,6 -10,8,3 -5,8,6 -9,18,8 -13,8,5 -13,12,2 -5,10,17 -18,8,12 -9,4,9 -3,10,6 -10,9,16 -9,17,11 -12,13,5 -15,7,12 -8,15,7 -17,4,11 -3,3,8 -8,15,16 -5,7,4 -4,4,15 -13,5,5 -13,16,9 -16,12,12 -10,6,13 -7,12,5 -18,10,12 -9,3,10 -10,3,9 -5,14,15 -6,1,11 -17,7,13 -18,13,10 -12,17,6 -10,7,17 -17,13,13 -2,7,13 -6,18,12 -15,12,8 -12,6,17 -8,17,6 diff --git a/2022/19/input.in b/2022/19/input.in deleted file mode 100644 index 733ac59..0000000 --- a/2022/19/input.in +++ /dev/null @@ -1,30 +0,0 @@ -Blueprint 1: Each ore robot costs 2 ore. Each clay robot costs 2 ore. Each obsidian robot costs 2 ore and 17 clay. Each geode robot costs 2 ore and 10 obsidian. -Blueprint 2: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 15 clay. Each geode robot costs 3 ore and 8 obsidian. -Blueprint 3: Each ore robot costs 3 ore. Each clay robot costs 3 ore. Each obsidian robot costs 2 ore and 16 clay. Each geode robot costs 2 ore and 18 obsidian. -Blueprint 4: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 17 clay. Each geode robot costs 2 ore and 13 obsidian. -Blueprint 5: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 5 clay. Each geode robot costs 3 ore and 15 obsidian. -Blueprint 6: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 17 clay. Each geode robot costs 4 ore and 20 obsidian. -Blueprint 7: Each ore robot costs 3 ore. Each clay robot costs 3 ore. Each obsidian robot costs 2 ore and 9 clay. Each geode robot costs 2 ore and 9 obsidian. -Blueprint 8: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 12 clay. Each geode robot costs 3 ore and 8 obsidian. -Blueprint 9: Each ore robot costs 2 ore. Each clay robot costs 2 ore. Each obsidian robot costs 2 ore and 8 clay. Each geode robot costs 2 ore and 14 obsidian. -Blueprint 10: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 2 ore and 12 clay. Each geode robot costs 3 ore and 15 obsidian. -Blueprint 11: Each ore robot costs 2 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 19 clay. Each geode robot costs 2 ore and 18 obsidian. -Blueprint 12: Each ore robot costs 2 ore. Each clay robot costs 4 ore. Each obsidian robot costs 2 ore and 16 clay. Each geode robot costs 2 ore and 9 obsidian. -Blueprint 13: Each ore robot costs 2 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 18 clay. Each geode robot costs 2 ore and 11 obsidian. -Blueprint 14: Each ore robot costs 3 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 18 clay. Each geode robot costs 3 ore and 13 obsidian. -Blueprint 15: Each ore robot costs 3 ore. Each clay robot costs 3 ore. Each obsidian robot costs 3 ore and 9 clay. Each geode robot costs 3 ore and 7 obsidian. -Blueprint 16: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 2 ore and 7 clay. Each geode robot costs 3 ore and 10 obsidian. -Blueprint 17: Each ore robot costs 3 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 6 clay. Each geode robot costs 2 ore and 20 obsidian. -Blueprint 18: Each ore robot costs 4 ore. Each clay robot costs 3 ore. Each obsidian robot costs 2 ore and 19 clay. Each geode robot costs 3 ore and 13 obsidian. -Blueprint 19: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 2 ore and 14 clay. Each geode robot costs 4 ore and 15 obsidian. -Blueprint 20: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 2 ore and 9 clay. Each geode robot costs 3 ore and 15 obsidian. -Blueprint 21: Each ore robot costs 3 ore. Each clay robot costs 4 ore. Each obsidian robot costs 3 ore and 10 clay. Each geode robot costs 2 ore and 7 obsidian. -Blueprint 22: Each ore robot costs 3 ore. Each clay robot costs 3 ore. Each obsidian robot costs 2 ore and 16 clay. Each geode robot costs 3 ore and 14 obsidian. -Blueprint 23: Each ore robot costs 3 ore. Each clay robot costs 3 ore. Each obsidian robot costs 3 ore and 20 clay. Each geode robot costs 2 ore and 12 obsidian. -Blueprint 24: Each ore robot costs 3 ore. Each clay robot costs 3 ore. Each obsidian robot costs 3 ore and 6 clay. Each geode robot costs 2 ore and 16 obsidian. -Blueprint 25: Each ore robot costs 4 ore. Each clay robot costs 3 ore. Each obsidian robot costs 4 ore and 20 clay. Each geode robot costs 2 ore and 15 obsidian. -Blueprint 26: Each ore robot costs 4 ore. Each clay robot costs 3 ore. Each obsidian robot costs 2 ore and 20 clay. Each geode robot costs 3 ore and 9 obsidian. -Blueprint 27: Each ore robot costs 2 ore. Each clay robot costs 3 ore. Each obsidian robot costs 3 ore and 13 clay. Each geode robot costs 3 ore and 15 obsidian. -Blueprint 28: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 2 ore and 11 clay. Each geode robot costs 3 ore and 14 obsidian. -Blueprint 29: Each ore robot costs 4 ore. Each clay robot costs 3 ore. Each obsidian robot costs 4 ore and 15 clay. Each geode robot costs 4 ore and 9 obsidian. -Blueprint 30: Each ore robot costs 4 ore. Each clay robot costs 3 ore. Each obsidian robot costs 2 ore and 7 clay. Each geode robot costs 3 ore and 8 obsidian. diff --git a/2022/20/input.in b/2022/20/input.in deleted file mode 100644 index 919c8b1..0000000 --- a/2022/20/input.in +++ /dev/null @@ -1,5000 +0,0 @@ --8285 --8988 --6191 -97 --1542 -3649 -4182 -6875 -2538 --9637 --4521 --1075 -3744 -8849 -4852 -7482 --7094 --4691 --1844 --1513 --2296 -3207 -9542 --3649 --3238 -1302 -6080 -9124 -4535 --2599 --2921 -1325 --9734 -5070 -3662 --991 --3164 -1425 -4011 -9101 --9129 -7306 --2167 -1024 -9794 --1643 -505 --3345 -1672 --4751 --5221 -4406 --6718 --9735 -9368 --6357 --1416 --9738 --6845 -6752 --7418 -9725 -474 --7088 --4166 --1319 --5695 --667 -1322 -3044 --605 -4698 -5264 -1026 --8701 -8011 --9016 -3751 --1494 --4703 --3873 -1561 --1633 --4673 --633 --1442 --8661 -6961 -232 --5442 -2452 --4045 -4829 --1536 -9301 --7409 -3862 --8959 -45 --3132 --3590 -1080 --4038 --4147 --6579 --1340 --2052 --947 -1015 -1577 --8410 -9794 -8239 --1287 --2197 --3416 -8430 -4675 -8701 --6075 -8069 --3824 -1385 --4031 --2050 -3265 --948 -7822 --1637 --9989 --3325 -448 -7680 -1218 --1899 --6354 -4048 --9638 --3836 --6492 -2357 -875 --3291 -5397 --262 -6776 -5624 --4408 -9154 -4072 -5153 --3674 --9481 -464 -4512 -9633 -7758 -8850 --4455 --7199 -3904 --3778 -9460 --4474 --1694 --4118 --1432 -1506 --5296 --790 -1830 -8342 --424 -8131 -3242 -6392 --7795 --3009 -2373 -9210 --6422 --5295 -4775 -1502 -9223 --9586 --9383 -9150 --5217 --8874 -3392 -7163 --7915 --1919 -1530 --8430 --4690 -9046 --8215 -2196 --8801 --5971 --4061 -4475 -6689 --6354 -8229 -6879 --3793 -6897 -1800 --2170 --8632 --25 --1516 --7447 -3819 --4 --9826 -3782 -5437 -5265 --5557 -7076 --2742 --4950 -3357 -9715 -8254 -6284 -8854 -4799 -3133 -8754 --5361 --5134 -3452 -1931 -1562 -7349 -1512 --277 -7466 --2472 -7247 --131 -4921 -4880 -9898 --6579 --642 --7380 -7376 --7461 -8550 --8434 -530 -9076 --7230 -8107 --878 --6715 --4060 --8964 --3466 --9598 --265 --765 --3598 --5458 --973 --6163 --2158 --6918 -7268 -87 --4142 -4159 --4140 --6341 -6431 --3390 --1197 --7447 -3416 -5573 -7902 --1215 --2708 --5217 --3040 -2980 -4325 -1336 -7182 --8993 -2286 --4533 --7764 -9331 --2597 --3201 --5087 --7184 --4828 --4959 --707 -6964 -4828 -8688 --9074 --908 -6422 --7864 -6815 -8162 --2455 -209 -6424 --2233 --5971 -623 -2621 -4407 -8323 -1365 -7151 -2419 --9494 --370 --4313 -7873 --3699 --4543 -850 -4120 -8384 --3519 --7622 -5655 -5320 --2006 --1160 --4706 --4333 -3858 -8938 --7887 --3981 -9641 -5078 -3051 --7720 --5332 -7190 --1180 -8265 -3763 --8800 --3439 --9225 --5917 -4649 -4452 -6372 -8737 --4302 -6275 --1646 --3059 --4497 -5824 --1729 --6407 --4828 --2523 --7282 -2566 -8825 --307 --2767 --809 -920 -8384 -5734 --5975 --875 --3393 --8200 -2787 --4690 --3510 --1925 -5313 -8613 --5964 -7180 --3780 -211 -9865 -3825 --660 -3035 --2204 --8285 -5451 --8003 -6879 -6558 --6068 -5076 --6975 --9332 --9213 -5646 --9557 --7405 -4685 -3270 --5865 --5788 -2040 -4535 --91 --5982 -5889 --1543 --3392 --3868 -8658 -9793 --750 --9344 --1832 --2785 --1741 --6490 -397 --1060 --2503 --2816 --1140 -6793 -8983 -89 --4890 --7598 --216 --2563 --7740 -3002 -6083 -7581 --3421 -2730 --7971 -6634 --1712 --8284 --3325 --162 -227 --8707 -3416 --5984 -3682 --6645 -214 -2060 -8556 --7420 -9202 -9474 -7934 -4008 -999 -6998 --4907 --9833 -6960 --2695 --4562 -9843 -8963 -9057 -1269 --4068 -1601 --711 --6284 -6820 --4572 -9010 --8490 --9552 --774 -8049 -3934 --3981 --6891 --940 -4535 --6614 --2323 -7250 -3032 -8300 --2941 --1611 --456 --1113 --3984 --9080 --6707 -975 --8761 -8788 --6348 --6175 -4570 --2666 --476 -7748 --984 -8672 -2429 --2343 -3543 --1336 --9116 -961 -1231 -5781 -6559 --4346 --7293 -1050 --2554 --1194 -8334 --828 -585 -5195 --8389 --3062 --2580 --5419 --2958 -2044 --7274 --1215 --76 --5938 --2339 --7946 --2560 -9176 -718 --7296 --1543 --67 --4441 --7205 -8296 -742 --2795 -1227 --4936 -6538 --9020 --1799 -9209 --1377 --9415 --5682 -939 -3953 --4626 -3821 --4979 -6412 -2337 -5094 -1365 -3659 -4046 -4708 -5489 -1801 --7187 --762 --5855 -1083 -1311 -3390 --2259 --7749 --1197 --8661 -9542 --6112 -1801 --4263 -7250 -613 --5969 --3497 --548 --9788 -4044 -3607 --724 -3225 -3128 --5113 -1212 --621 --5876 -7208 --8761 --2840 -649 --5429 -6365 -5592 -1800 --5780 --3438 --5785 -555 --6800 -2416 --9815 -6316 --2787 --1533 --9637 --4455 -4565 --9560 -7262 --1042 --2742 -4654 --626 -4395 --7061 -6900 --5798 --3767 -4035 --1241 --2239 --4907 -731 -6214 --7635 -3803 --5234 --1759 -6785 -98 -6728 --5645 -8904 -1798 --2654 --8004 --9802 --6295 -8109 --647 -5397 --3858 -1106 --1080 --994 --706 -8992 --2616 -2538 -9385 --1710 -6962 --5821 --6849 -3089 -230 -6508 -517 --5332 -9277 --9621 -5333 --2782 --3390 --9920 -7502 -8000 --4715 --4104 --6837 --3598 --286 --9486 --1668 -2912 -1598 -5695 -3531 --6671 -1375 -1290 -67 -6814 --3129 -2566 -6864 -8194 -8728 -473 --1793 --4794 -3124 --6899 --2259 --8964 -8437 -2532 -2366 -6144 --4105 --1448 -3535 --2874 --7875 -1600 --163 --4317 -7904 --2350 -3415 --2175 -1139 --1719 -5827 --2644 -5741 --9869 --1394 --9323 -8643 --8054 --2130 --4504 --3873 --9657 -5462 -3806 --1435 --4704 --3858 --7387 --5313 -4671 -9296 --8337 --4127 --4355 -4743 -7563 --7971 -8153 --621 --5475 -2122 --25 --9474 -5280 --5221 --7590 --6755 -6733 -6790 --1241 -2286 -4364 --9309 --2007 --1508 --7173 -3133 --532 --6830 --4970 --3981 --6275 --9792 --6526 --2721 --7084 --6001 --6706 --388 --1787 -586 -7660 -9264 --2143 --3537 -7723 --8805 --3393 --2074 --5470 --3284 -8090 --1768 --9750 --9501 -3302 -7995 --189 -1658 -4072 -119 -840 --412 -9932 --4166 --2919 -5298 --6708 -4820 --8897 --4142 --8817 --5221 --8292 --3590 --6019 -7322 -1181 -2379 --9412 --3006 --2804 -2830 -4942 -2282 --9963 -8810 --5613 -8966 -8786 --9882 --6282 --8290 --1060 -5807 -9529 -729 -7106 --7367 --2737 --4933 -6936 -3958 --6331 -8239 -5864 -2119 --7447 -4934 -7402 -3159 --3145 -6803 --3926 --9513 -1119 --9790 -4685 --4298 -6274 --5839 --2902 --177 --7122 -3134 --2786 --3414 --189 -8668 --3505 -3491 --4525 -5596 -8033 --864 -8318 --715 -9633 --3379 --3157 --6046 -4995 -4233 --1504 --2838 --2965 --6170 --2025 -5329 --8701 --1582 --6418 -7932 --5981 --5209 --1964 -6284 -4647 -634 -9449 --7740 --6473 -2830 --2974 --9676 --2989 --6540 -8404 --7283 -6228 --2396 --5262 -7752 --7492 --4 -9353 -4933 -2724 --9184 -5274 --6061 --6364 --1278 --3983 -4922 --7556 --1773 --250 -3617 --4678 -6961 --3509 -7008 -5367 -2918 --1799 --4945 --3207 -3431 -5666 --5686 -3512 --7906 -1185 --7811 --5880 -712 --3496 -1562 -1926 --3608 --2357 -9793 --1924 -6163 --5234 -9343 --9552 -9898 -9080 -7969 --4147 --2615 --1914 -7164 --5603 -2539 --1117 -9988 -7483 --8424 -9376 -6452 -2832 --4905 -9176 --3107 -1405 --6112 -8405 -7062 -8821 --3494 --6667 --5455 --1340 -5217 -4191 --8869 --2924 --6275 --518 -5329 --4570 -8589 -6659 -6200 -1311 --6668 --9676 --2385 -7209 -3877 -9536 -1888 --8262 --1372 -5556 -7283 --4874 -5153 -1691 -8011 --3284 -9878 -6256 -5381 --244 -9268 -1745 --9692 -1049 --6775 --8861 -1385 -1177 -4393 --1336 --8507 -3818 --4552 -2259 --9090 -9449 --6594 -174 --3593 --6657 -2817 -6270 -367 -8866 --4282 -4187 --8944 --9240 --9126 -9036 -1785 --7531 --3477 --4691 --6840 --570 --2089 -9914 --5660 --670 -1685 --3959 --1442 --3497 --370 -482 -1110 -1094 --285 --9319 -3272 -845 --5029 --9826 --1180 -7079 -8928 --324 -5251 --4436 --9261 --607 -2421 --5595 --3763 --4864 -334 --4508 -3748 -8108 -9613 --2109 --7073 -5812 -6901 --2981 --3280 -3934 -3909 --3220 -4488 --2095 --5158 -2337 --6415 --5929 -2859 --4814 -6128 --3026 -5572 --3407 -4369 --4953 -9879 -5317 --2163 --6823 -6830 --1552 --4933 --7684 -4347 --6498 -8865 --4615 -4412 -2841 -1481 -2242 --5881 -5918 --7483 --7236 -1857 --6058 --3735 -4957 --184 -6996 -9565 -3649 -1502 --2583 -7824 -6231 --6449 --2219 -8153 -616 --3594 -4342 -9263 -1334 -7523 --8858 -7213 -4742 -1601 --8851 --5883 --9491 -4184 -6015 --849 -6183 --2096 -3552 -5677 --3416 --3199 -6722 -283 -3677 -3439 -1333 -6149 --4678 --1160 --5481 --9171 -6307 -8971 --8768 --437 --8513 --4882 -6359 -9866 -4852 --6350 --7754 -9991 --4119 -1672 --4405 --3674 --5203 --3387 -4543 --9744 --9 -5094 --5332 -5103 --4140 --4224 --6531 -9910 --771 -9077 -2019 --3438 --4878 --7684 -517 -3844 --4760 -3172 --1765 -6115 --1724 -3079 --2795 --59 -6225 -7518 --9225 --518 -4353 --8430 --646 --5139 -2227 -2447 -3833 --753 --103 -7687 -6103 --3725 -8467 -1918 --3802 -9809 --5259 -4828 -1764 -889 --9126 --8897 --5383 --9620 --9833 -7460 -9972 --8447 -3913 -1348 --8733 --9285 --6647 --8912 --1071 --3476 -326 -8658 -4066 --899 --9692 -9309 --6755 --3936 --9575 --2688 -7286 --1239 -2813 --9653 --7487 --4824 -6659 -4879 --177 --5470 -6144 --5046 --3062 -527 -2859 --5771 -3696 --1385 -117 --9698 --8587 -5051 -3291 -7451 --942 --3941 -9099 --3768 --7482 -731 -1573 -7631 --9730 -3039 -8397 -920 -6195 -7534 -8610 -2876 --8220 --2886 -3952 --1254 --7409 -9195 --9238 --4899 -4738 -4977 -2772 -3662 -4745 -490 --8368 --7697 -3803 --1925 --9458 -6761 --7674 -3546 -4689 --8492 --7401 -318 --8652 -1680 -5646 -2942 --8036 --4060 -5347 --506 --8215 -1583 -7986 --7182 -9707 -8210 --1578 --6441 --8080 --7112 -2166 --7628 -9644 --2787 -2144 --8519 --8298 -3516 -1998 -6923 --5879 --6800 --265 -762 -5985 --2096 -2060 -253 -2657 -1638 --9479 -3440 -8322 -9213 --6550 -1740 --7635 --2630 -8780 --2841 -263 --6707 --849 --3571 --6884 --849 -2617 -5495 --5663 -2538 --5649 --1614 -5273 --5192 -9600 --7562 --1452 -8285 -4963 -857 --3778 --2466 -5395 -5123 -3766 --3332 --2823 --124 -1298 --3189 --8634 -1745 -4125 --4830 -2218 -4067 -9660 --3249 -4684 -6730 --2204 -8666 -6431 -9814 -2473 -3264 --7754 -5648 --584 -3958 -8473 -3152 -6832 --6726 --8552 -2398 -9134 -5296 -3134 --9891 --246 -749 --7409 -6952 --4003 --1178 --5053 --863 --9215 -953 --5550 --4740 --8817 --2636 --3432 --4265 --6434 -3713 -5179 --9037 --7399 --8327 --7657 -7162 -725 --6385 -5590 --855 --5333 --4905 --3763 -7249 --2188 --6338 -8747 -9059 -1906 -7248 -4654 --4745 --1704 --9206 --7085 -7479 -6881 -9171 -7241 --2509 --7367 -2665 --9487 --5847 -37 --3622 --3382 --688 --2157 -814 -4745 -4305 --511 -9558 --2606 -2959 -5817 --214 --2482 --7836 --2789 --8038 -9171 -7308 -905 --8648 --5139 --4927 -6188 -4867 --5746 --4202 --8375 -9362 --8245 --9676 -4035 --4723 -6675 -6055 -6405 -5690 -6762 -1818 -3094 -3693 --2782 --4991 -920 -1292 -7646 --3376 --8939 --8638 -4879 -5175 --3844 --2350 -5672 --3972 --1906 -6848 --2594 --2756 --5323 -7028 --6461 -1137 -1048 --3233 --4455 --5997 --3117 -6683 --2884 -3822 -5982 --6770 --4572 --1675 --9542 -3076 --3220 --2399 --688 --7254 --6490 -5329 -3736 -132 --1094 --6395 --4992 --7922 --4874 --6227 --4815 --6476 --4945 --4258 -3114 --6170 -6726 -4675 -5114 -5358 -4766 --3306 --5279 -5892 -5051 -4949 --2556 -6846 --4704 --1473 -8286 --6151 -9917 --9637 --6751 -3202 --6813 --161 -7613 --3382 --2374 --2917 --6579 --7760 --9053 --8719 -7876 --2077 --285 -3102 --7167 -5446 --9957 -1647 -3128 -9727 -2887 -4279 -8124 --5821 --9514 -6943 -8485 -4924 --4230 --4455 -664 -653 --1158 -6838 -8176 --2068 -1448 --1937 --1233 -8987 --4558 -6868 --9189 --6707 -8191 -8659 -4404 --6075 --5264 --3212 --7773 -5265 --7541 --612 -1733 --370 -2360 --9667 -7327 --3623 --542 --8908 --7541 --1670 -9878 -9843 -8104 --3292 --2193 -8769 --224 --5156 --2095 -5273 -3044 --1964 -7392 --5418 --5489 --6575 -9994 -3530 -5374 --7953 --9953 -7749 --3946 -2035 -6722 --5221 --9957 -1582 -7706 --4036 --224 -5063 --6251 --7848 -8086 -8442 --7346 -7165 -3748 --824 --3424 -1783 --7797 --2987 -5558 -8074 -7297 -4871 -1311 --4934 --3148 -4341 -3242 --2976 -2538 --1422 --3749 --2088 --3314 --1094 --3476 -7703 --1494 --8149 --2678 -1024 -1760 --1061 --8719 --6990 --4696 --4907 -6797 -3662 -7182 --3914 -5941 --2935 -2799 --1464 --4589 --8739 --6028 -7525 -8229 --8102 -4488 -3642 -6797 --8757 --990 --6757 --328 --1980 --6354 -5572 -5190 --318 --7620 -6618 --8520 -2730 -9008 -8591 --4899 --4762 -3191 -9076 -8842 -8389 --803 -6741 --434 -8852 --4901 --7985 --9080 --7205 --4756 --2760 --4550 -6387 --5860 --1824 --4038 --8084 --3228 --535 -2224 -4685 -8631 -3736 --6956 -7250 -1942 -4128 -8440 -5320 -8241 -6072 -4949 -4092 --9221 --5166 --880 -1319 --9613 --4463 --3037 -4373 --9304 -4164 --1101 -2970 --5117 -9905 --6801 -101 --2728 --4296 --1541 --1882 --1984 --3984 -7581 -952 -6639 -8933 --2636 --3756 -2357 -4417 --2481 --1376 --6511 --7662 --8300 -9210 --3629 --6211 -7711 -4390 --706 -2224 -6633 -3444 -8191 --120 --1743 --9285 -858 -7579 --1215 --9931 -6079 --161 --6866 --9779 --4935 --1448 -2636 -1876 -6278 --5879 -6075 -6879 --7681 -8991 -4375 -7169 --9667 -9805 --9232 -8160 -2465 --1111 --2175 --5914 --3568 --4716 -5333 -5652 -5364 --1602 -3419 -717 --4207 -3192 --9823 --7693 --9924 --5839 --4330 --6054 --2034 -4369 --6312 --8904 -2163 -512 -3364 --7232 -653 -5443 -253 -1510 -4321 -521 --4055 --2486 -3728 --1494 --8681 -2617 -5937 --8176 --5333 -6668 --4091 -8648 -578 -4210 -5657 --7963 -5653 --9854 -5535 -3472 --65 -4008 --8956 -6511 -8337 --1454 --1490 --4641 -4821 -5505 -7531 -286 -4940 -8634 --4841 --5788 -6305 -9644 -2122 -4465 --5742 -4095 -7492 --9039 -6361 -5573 --850 --6494 -5358 -1804 --7144 -5489 -985 --850 --2583 -7041 --8584 -7250 --7140 -2138 -5793 --1296 --3832 -2293 -6559 --5693 --4589 --7920 --9181 --3735 -7483 -7718 --2161 -8463 --4431 -7592 -4452 --4756 -8259 --869 -5949 --7740 -331 --945 --5747 --760 -1680 --3321 --5294 --4591 --3542 --6296 --8200 -2797 --8249 --2197 --1882 -674 --187 -2772 -7531 --7996 --31 --6058 --4460 -1569 --7651 -6348 --937 --2125 -8911 -600 --3406 --8561 --8892 -9476 -9484 -8916 --770 --7108 -4514 -8261 --7833 -5491 -933 -2034 --2255 -74 -1310 --8761 --8708 --6675 --8429 --2033 --2572 -3827 --8710 -8212 -5205 -3281 -9353 --7471 -2282 --4354 -6941 --9535 -1111 -1155 -8397 -580 -4003 --1550 --9104 --611 -8916 --5426 --2323 -3916 -3073 -8696 -7307 -5884 --9854 -119 -4048 -7779 -1325 --4442 -3834 --9116 -95 -2706 --9560 -1026 --9980 --1933 -2691 -2995 --5083 --7942 -5843 -6020 --5186 -5021 --5823 --8692 --3162 -8938 -8797 -5302 --8 -9406 --4503 --3955 --2178 -7094 --4214 -5101 -797 --2385 --2415 --4936 --9122 -1253 --6814 -4967 --2195 -2214 -3466 -4376 -7683 -8124 --3774 --5999 --1241 --5436 -2468 --2981 -1530 --7399 --1646 -2795 -9514 -1947 -2429 -6621 -1421 -7902 -3488 -8330 -2648 -232 --1180 --2373 -8399 --87 -7479 --5183 --5701 -1227 -2078 -7699 --4104 --9653 --7813 -9734 --3201 --437 --9990 -9649 --4469 -8829 --7196 -9460 --1527 -2413 -8097 --6660 --4326 -2058 -6943 -1647 -1448 -8095 -7706 --9826 --8409 --7187 --9002 -466 --7491 --7565 -3370 --5209 --4448 -5522 -8 --9838 --6801 -5877 --5874 -5877 -3253 --1217 --9161 -9331 --7428 -616 --6524 -8839 --8338 -760 --5142 --2226 --4057 --2739 -232 --1933 --2858 --3955 --22 --5178 -6290 --7797 -9449 -2887 --1158 -3721 -9963 -4952 -4959 -6418 --2038 --3499 -8741 --4659 --161 --9078 -9948 -9331 -5558 -9208 --3922 --8572 -4403 -1753 -9115 -5751 -3444 -1004 --7922 --8547 -3579 --750 -389 -119 --4060 -2853 --1091 -461 --6966 --5997 -8413 -8186 --5956 -8790 -9014 -9491 -491 -5323 -5356 -2934 -9619 -7073 -5017 --1876 -9695 --7917 --3085 --2565 --4258 -3866 --6708 -258 --8570 -9022 --8215 -9340 -2349 -476 -5348 -3659 -8379 --3297 -3499 -5066 -3649 --3009 -662 -4237 -7392 --6849 -3837 -4853 -798 --7112 -8034 --535 --1925 --3593 --8769 --51 --4281 --8038 -7466 --6269 --8227 --4038 -9814 -9780 --3975 --246 -4450 --7620 --859 --5500 -7923 --388 -5109 -6015 --9232 --4760 --437 --5975 -5164 -7088 -3821 -1170 -9313 --3716 -9619 --6358 -5595 --2974 --3504 -9785 -7155 -2349 --5278 --3939 -1019 -1016 -5447 -7802 -7667 -3659 -3834 --1677 -7923 -4267 --716 --6188 --1771 -8948 -5842 --2565 --9656 -7843 --9653 --7 -1796 --1793 -762 --732 --918 -5787 -9690 -1038 --5171 --3733 -3626 -6619 -9363 -4334 -3128 -8285 --6708 -5298 -9116 -9387 --9097 -6183 --9261 --605 --164 -1600 -9824 -4493 --1338 --7565 -4042 -8223 --2488 -9826 -3831 -6864 -5126 --3430 -7904 --6056 -6373 -3150 --9785 -8819 -8474 --7879 --5001 -6375 -6222 -7063 -2880 --7462 --2266 --3793 -7536 -8358 -9527 --7628 -8664 --3323 --7630 -4475 --5969 -3657 --4264 --5648 --1185 --1626 -7090 --8003 --3946 --1101 --9564 -8342 --7419 --940 -8556 --5212 --5090 --9049 --9520 -2001 --8729 -8487 -722 -7703 -7581 --9258 -1227 -6436 --507 --2755 --611 -9994 -7678 -9529 -8579 --6046 --2782 -6649 -4486 -6844 --4497 -1470 --3507 -5851 -9273 -5149 --8065 --7853 --9464 -4373 -6571 --8843 -2068 --7338 -7412 -9534 -7795 -3677 -5509 --715 --4468 --8817 --724 -7696 -272 -4892 -9776 -6668 -8345 -8589 --1838 --7175 -986 -3139 -7030 --3678 --7245 -4138 --2806 --9016 -8044 -8934 --1830 --6939 --1183 --4957 -6808 -9574 -6883 --5022 -464 --1660 --4808 -8300 --2323 --9269 --1955 --690 -3199 --2183 --8763 --7500 -2384 --1658 -9910 -9619 --4446 -4317 --8910 --1241 --5171 -1819 --2377 --9638 --881 --3981 -2951 -1396 --2160 -3822 -933 -1562 -3620 --2364 -8507 -711 -9883 -6797 -5873 -7224 --3894 -9905 --2782 --4657 -8686 --403 --5192 -4024 -3431 -3472 -1227 -7127 --2313 -2373 -3014 -2442 -9285 -6387 -1807 --4089 --944 -7145 --1303 -175 --459 -4159 -832 --2014 --5397 --908 -7301 --740 -7879 --1039 -3837 -4070 --8910 -6522 -9585 --7000 -3214 --3425 -9600 -391 --9983 -3466 -3512 --2958 --7138 -3675 --5726 -2166 --2321 -5666 --5426 --5770 -9866 -5327 -9905 --8610 -7485 --4418 -2385 -1394 -1245 -4187 -1745 --4833 -9671 -8916 --3110 -6512 -2772 --3509 -136 -5672 -1574 -3962 -3269 --2226 --3420 --5563 -7880 -4285 --8559 -2934 --2914 -9583 --5758 --4963 -5175 --9513 --3497 --3619 -5320 -5651 -1594 -7905 -4407 --9496 -1334 --5929 --8137 --4679 -7037 --9766 --9692 --9231 -4056 --7579 -3141 --7881 --4459 -7284 -7212 --7504 -3990 -9717 --5645 -751 -8172 -8806 --1287 -6144 --5821 --1786 --8136 -8753 -6844 -5274 --3910 --4799 -3818 -785 --9703 --2858 --9692 --2094 --4659 --2130 --9430 --3622 -5635 -8261 --9689 -3390 --5436 --9464 -1310 -5918 --5410 -8066 --9426 -825 -5337 -2392 --437 --2594 -1978 --4574 -3320 --8013 --1376 --9276 --6669 --6270 -2875 --2703 -1689 -8724 -1522 --1947 -4927 --7733 -1375 -8957 --9580 --3827 --5597 -2158 --7301 -8445 --4396 --2596 -8296 -4395 --7282 -1528 --6899 -3659 --6602 --6702 -7385 --9692 --71 --9924 -507 -2388 -3547 -3675 --3102 -7368 --1906 --3537 --3697 -3088 --627 --1787 --4660 --7622 -7088 -1891 -1302 -8786 --7409 --1061 -1158 -5993 --4423 -851 --2046 -8542 --6980 -8709 --2428 -400 --5611 -8473 -4744 -6668 -5571 --6151 -5949 --380 -3438 -9008 --5758 --3281 -4084 --6855 --5189 -745 --6506 --3233 -7491 --9983 -7459 --5065 -8697 --5124 -8071 --6052 -7397 -1131 --9928 -4851 --6649 -4209 -893 -1852 -9805 -4025 -2224 -2274 --6327 -5090 -214 -9303 --6580 --7797 -8513 --9073 --9877 -4371 --9814 --7881 --5209 -6326 --3797 -3544 --2680 --8818 -7563 -5071 -5646 --2739 -5060 -8769 -6943 --3418 -1187 --2214 -1794 -1179 --6991 --9362 --7313 --3575 -5814 -7600 -8097 -9271 -9925 --5013 --4696 -4743 --8918 --1075 --438 --1995 --640 -5397 -6056 -1998 -7128 -5941 -8336 --3037 -1658 -9796 -2631 --9396 --6364 --6855 --9009 --7706 --8225 --6034 --2467 --6329 --4672 --9571 --8730 -3071 -6286 --1659 --8722 --6400 --1719 -1496 -9257 --7610 -7207 --2291 -2595 -4479 -6717 -3153 --4455 --2530 -4130 --5537 --8904 --4362 --4915 --6335 --8961 --7722 -9681 -4395 -5070 -4018 -7628 -270 -6305 -4763 --4918 -1212 --3804 -6030 -4974 --6296 --7096 --6920 --8082 --6338 -1212 --7558 --793 -4694 -2226 --184 -3108 --8239 --5794 -5751 -9160 --6211 -5053 -8097 --4099 -722 --2180 -3000 -1691 -6731 --9310 --4197 -1995 -1651 -6650 --1541 --555 -4138 --1602 -9604 -9365 -3709 -7491 -0 --1317 --9388 --444 --1031 -6446 -9217 -7009 -2282 -227 -7557 --3262 -9900 --5749 -9231 --2279 -9101 --5065 --1020 --8720 --2015 -7229 --4871 -1937 -456 --35 -2419 --2015 -3199 -1842 --5419 -7525 --2615 -6950 --5026 -6452 -155 -5633 --7143 --864 -7725 --2129 -9583 --4195 -1399 --4565 --5063 -6717 -952 -3989 --8822 -8986 --4022 -775 --6510 -7154 -4143 -4035 --9546 --5472 -5591 -6282 -3124 -4079 -1742 -4040 --3453 --1852 --2563 --2068 -9631 -5306 --443 --8678 --5003 --1508 --362 --4936 --1298 -6808 -1872 -1292 --4956 -225 -4337 --4479 --7214 --4057 --8420 --2568 -8713 --9373 --4649 --7693 -6184 -7369 --4028 --7419 -2785 --8843 -5274 --9778 -3452 -1514 --711 -1931 -102 --1441 --4455 --109 --185 -1227 --7621 -7524 --603 --4198 -6450 -8838 --4956 -1947 --8694 --4819 -5745 --3885 --1197 --1144 -231 -7689 --8245 -5376 --3270 --6361 -2809 --9633 -7760 -765 -6599 -1177 --3201 --2896 --1398 -8281 -2542 --7403 --2896 -155 -6258 -9830 --7231 --3519 --4211 --3770 --7760 -5666 --5120 --2142 -3535 -2688 --3291 -7486 -8688 --1851 -4782 -1496 -1555 -717 --7656 --6269 -7481 -1601 -7400 -9558 -9193 --3415 --1372 -8997 -3272 --9849 -2975 --2233 -9542 --5179 -674 --4469 -2119 --1729 -4390 -9400 -9862 --5220 -1187 -8000 --954 --2363 --8328 --9554 -2198 --7179 -6551 --1615 --7703 --4881 --6083 --2015 -2501 --7648 -2785 -4867 --3407 --8115 -9826 --5158 --6849 -5394 -1562 -8622 --2411 -9700 --5688 -8071 --3273 --7199 --3855 --8676 -2883 -9484 -8503 -1375 --7140 -7758 -161 --8445 --2816 --8236 -891 -5877 -114 --2596 -1812 --7830 --4052 --2055 -6079 -5381 -5095 -4777 --3662 -4383 --3052 -5390 -8066 -2736 -1021 --5852 --7629 --4601 -7164 -2383 --1489 --8189 --1511 -8460 -9974 -7660 -7151 -1222 -3844 -8672 -7579 --4523 -1026 -6897 --9469 --9428 --4450 --9043 --5536 --633 --2014 --1768 --1707 --6908 --1508 --4798 -7145 --4189 --7850 --4504 --6650 --4091 --7860 --9979 --4298 -1037 --3132 -762 --7181 -3141 --4950 --6348 -3026 -7393 -7728 --2129 --3476 -5513 --5794 --9774 --6992 --7832 --4542 --6416 -3376 -1999 -4713 --3007 --511 -6451 -8485 -2975 --1925 --5235 --3759 -3558 -7683 --8480 --2919 --1061 -9547 -8543 --3622 --3509 -9138 -75 -114 --1815 -5892 --3384 --5718 --6740 --4118 --5209 --1917 --9707 --205 --3430 -8296 --2034 --6933 -8436 --7590 --4707 -4337 -8182 -1778 --4055 -6648 --6361 -5273 --4425 --7498 -8736 -6906 --2217 -4741 -4054 -97 --2198 -6961 -456 --160 -526 -7709 --2593 -787 -442 -7358 --686 --4759 --59 --576 -6838 -7451 -6378 -7052 --5301 --9020 --6121 --3237 -4931 --9522 --1071 -613 -2617 --7351 -4891 --5941 --7664 --864 --7315 -3277 -2970 -920 -8242 -5011 -6213 --6770 -6700 --748 --5217 --8497 --2795 --4641 -3452 -2860 --5301 -5344 --4232 -6299 -3445 -9893 --3839 -1775 --7010 --647 -3332 -4187 -4207 --4830 --5961 -6760 --6531 -8328 --4644 --7503 -2252 -6239 --1204 -8135 --6759 -9138 --3915 --9984 --3472 --7880 --5611 -9011 -9417 --6059 --9463 -9202 --462 -7942 -8607 --4825 -1368 --6466 --9040 -4137 -5461 -5100 -4237 --824 -4835 -5346 --8084 --1020 -9296 --559 -813 --30 --603 -4407 --6652 -6718 -984 --3389 -2863 -8673 --1105 -1064 --9788 -3925 --3505 --4105 -9695 --5550 --5433 -8114 -3113 -9853 -8286 -3887 -576 --4936 -3202 --2237 -5613 -8503 --4278 --8153 --9309 -891 --1712 -8367 -6305 -3674 -2888 --65 -8318 -425 --5881 --5065 -1463 -6936 --4742 -4108 --5234 --2749 -9134 -9862 -4314 --7079 -3202 --4998 -6851 -6752 --7916 --60 --799 -8524 -491 -3207 --4933 -3662 -4262 --3007 -5407 -6910 --905 --7996 -532 -9353 --4555 -9517 -4502 -5977 -4402 --707 --2623 --3222 --4882 --9343 -2643 -8947 --7304 -9794 -5832 -3858 --621 -9929 -7833 -2119 -9460 --3429 --940 -6717 -6998 -1785 --458 --8430 --3593 -1195 -7481 -5956 --6391 -4406 -3662 -6336 --7012 -3644 -3765 --5182 --7849 --9977 --5164 --513 -1305 --6338 -8154 -7556 --8792 --8249 -5207 --940 -555 --9015 -8717 -3986 --3459 -258 -9744 -2258 -1999 --7074 --3784 -3133 --2158 -4886 --5797 --4344 -4278 --6494 -2282 -499 --5205 --6669 -1861 -4940 -9626 -5971 -8573 --9285 --3941 -6145 --3023 --4189 --4386 -4386 --5339 --8091 -5489 -6996 --2659 -7918 -3562 -1862 --9924 -6284 --8490 -6638 -151 -5941 -2516 -1782 --1460 --7945 -3986 --7465 --898 --8634 --955 --6770 --4936 -4066 --9541 --5957 --5420 --3390 -9851 --1619 --8829 -3629 --2830 --2298 -8767 -9813 --9578 -4970 -7482 --6357 -1481 --7403 -1801 --4 --7489 -4274 -235 --4456 --479 -6753 --6613 --5467 --2495 --3759 --2671 -5736 --6445 --6680 -9561 -2903 --9735 --3860 --9816 --3699 --3634 --7508 --6095 --9867 -7191 --4152 --4330 --2006 -8764 -9660 -9735 --3598 --471 -3289 -7101 --4427 -7795 --4138 --3290 --9834 -7536 -8648 --2622 -7677 -3544 -4535 -5879 -6144 --3612 -8589 --434 -5689 --164 -9266 --1914 --4835 -3088 -8296 --4258 --5091 --7536 --6007 --1338 -7376 -8382 --1437 --8892 --2211 --3393 --1817 -4004 -9142 -2420 --442 -3072 --5768 -1877 -5556 -83 -326 -3439 --7276 -3003 -722 --9974 -926 --7760 --1194 -2628 --8431 --1088 --6002 -3543 --6602 -3619 --2860 --1492 --2625 --2695 --5426 -9508 --5729 -6193 --7921 -3562 -5976 --864 --2757 -2651 -7307 -7857 -4000 -4940 --5570 --6413 -9170 -347 --2021 -4675 -3456 -5320 --2455 -1931 --600 --6308 --3134 -6337 -2788 -9517 --3052 --9979 -1603 -6918 --131 --4358 -9597 -1830 --9503 -7535 -9138 --1555 --4939 -5931 --8863 --3361 --2594 --1807 -7166 -7905 --9676 --3951 --1765 -4791 --920 --9698 -7748 --5363 -3961 -5654 --7428 -8549 --4142 -4583 -6376 --4080 -3827 -2341 --6017 -3005 --7273 --3432 -3214 --3586 --6081 --4518 -3870 -2157 --388 -4524 -6248 -9126 --9124 -1448 --555 -7368 --1677 -5646 -835 --1217 -8182 --4330 -5877 --10000 -4816 --1441 -3265 --4755 --7695 --2074 --4017 -5503 --7705 --1449 -4982 --3156 --3555 --4537 -5016 -7436 -91 --1721 -3210 --5770 -3589 -9386 -9552 -5089 --9554 -5785 --4580 --8247 --5468 -9189 --2464 -4159 -6833 --7697 -4042 -3789 --2105 -948 -1063 --8637 -8586 -5973 --8035 --4670 -4389 -2809 -2388 -4470 --4322 --1549 --2552 -1628 -8456 -3367 -7843 -3346 --4570 -3202 --5504 --8520 -6988 -1311 --5364 --7383 --7805 --3084 -397 --5975 --940 -3178 --1266 -4232 --1206 -2859 -8724 --1506 -1729 -9040 -3961 --3760 -6995 -4152 --216 -7164 --1452 -6172 --8908 --3220 --3758 --1519 -5695 -3297 -3500 --5105 --9247 -6292 -8599 --1798 --1710 -318 -7709 -3822 --5654 -4025 -7526 --2088 --1975 --2057 -7453 -9163 -634 -1068 -6599 --8352 -1771 -1682 --2122 --4232 --4643 --8678 -2749 -6369 --9632 -609 --5984 --2886 --7012 -7109 -3558 --1694 -5498 --6918 -8727 -5579 --4298 -6725 --693 -6040 --7423 -4348 --6417 --3045 --7404 --940 -7229 --6112 -5123 --4794 --8761 --5941 -2795 --7656 --9785 -8911 -6902 --8656 --6284 --1906 -8933 --4660 --5603 -9920 --414 -5659 --7919 -8790 -2056 --2385 --4816 --5860 -5445 -1169 --1412 --1707 -9379 -7680 -8470 --7184 --4312 -2245 -4035 -5101 --5899 -2168 --9871 --8027 -9702 -103 --9451 --1590 -2281 --4754 --2143 --5941 --4546 --671 --3056 --7963 --8229 -7109 -9895 -2202 --4854 --1302 -9759 --6054 --2293 -2532 --4936 --9841 --2816 -8863 -8305 --8280 -7833 --376 -6079 -7721 --3624 --7312 --522 -3840 --6225 -2398 -5655 -961 -6092 -9996 -9380 --8636 --7481 --8424 -3706 -4092 -4852 -9282 -425 -6056 -3567 -6305 -7168 -7176 --4034 --6001 --9124 --2101 --2415 --8647 -3535 --2470 -3666 -8752 -4120 --9940 --6790 --9370 -671 -5745 -7281 -7579 -9885 -6452 --1694 -3664 --840 --8986 --7316 --6805 -3386 -6995 -354 --3716 -1988 --5932 -6565 --3499 --5204 --188 -5718 --6312 --9838 --4666 --6095 -3177 -4926 -7779 -2269 --1944 -6752 --4423 --2375 -1195 -7455 -616 --1241 -3619 --8707 -4117 --8148 --5879 -7169 --9790 -1325 -4112 -9383 -1978 --2639 --4715 --5125 --3323 -2480 --5436 --3709 -6329 --2836 --1298 --7152 -1231 -734 -3269 --3258 -1916 -2189 -2274 --1326 --7858 -6918 --2636 -2362 -1188 -9339 --9556 -3529 -5794 -1906 -7660 --3673 -5153 --6442 -4528 --9774 -1774 -3207 -781 -6936 -4880 --9703 -9994 -8397 -1423 --7889 --2700 --3629 --6251 -9160 --3110 -3392 -5489 --3119 --7740 -499 -7114 -9904 -9796 --5528 -3005 --707 --5622 -6531 --5688 --9774 -3589 -5458 -6821 -9403 --6449 --1642 -5649 --699 --8707 --8017 --6605 -7824 -7127 -8150 -4633 --6052 --4629 -8604 -8528 --9080 -3657 -6199 --8605 -2904 --6314 -7709 --1409 --3640 -6286 -2070 -3266 --6922 --2689 -2349 -1232 -8011 -8632 --8035 -7276 --4832 --1013 --2727 -9867 -4913 -5636 --9039 -9660 --5145 --667 --8880 --2642 --4809 --4641 --3338 --6146 --4036 --9752 -6542 -6156 --2840 --6444 -4999 --7731 --4166 -5095 -4225 --6955 -2062 --6801 -1638 --9909 -6757 --8942 --621 --5847 -5494 --2604 -193 -1918 -7220 --3807 -1298 -9366 --8768 --5662 --8547 --9088 --9387 --9841 -742 --1712 -354 -4129 --7481 --7865 -8607 --1075 -7703 --7923 --2060 --6095 -7728 -3733 --7705 -7926 --7973 --3153 -6317 --2464 --9325 --3623 -645 -7819 --905 -374 --3465 --5262 --5718 -818 -1530 --1160 -4004 --4706 --6839 -7241 --2301 --9552 --4918 --3378 --7184 --476 --9299 -8322 -6650 -5364 --931 --1020 -585 --6657 --688 --2654 -6614 -4475 -4030 --3552 --6952 -9613 -3073 -7308 --940 -3550 --7610 --6188 -4008 -5118 -1024 --8647 --3317 --9805 -3141 --535 --5182 -95 -9903 -5302 --8641 --3418 --7203 -258 --7731 -227 --5663 -3264 --816 -6134 -6275 --7985 --7077 --5156 --8617 -3877 --380 --8295 -2286 --1265 --6001 --1220 -326 --9845 --2293 -3079 --6740 -7243 -5885 --6363 -9448 -6337 -5051 -8629 -9120 -2763 --8398 -1864 --528 --9262 --5458 -5889 -3133 -9323 --8897 -4521 --6252 -8536 --700 -5019 --1528 --8910 -3059 -3821 -3945 -2826 --3011 --8527 --7448 -8323 -8301 -6783 --313 -7422 -3489 -9365 --7722 -3787 -4034 --4529 --6896 --3923 -5832 --8391 -4534 --7182 --5879 --7045 --2095 -8753 --8531 -7703 -2564 -5479 --3816 -8830 -9735 -8207 -8783 --2625 -1333 --8897 -4994 --9373 -4777 --7703 -4252 -7163 -4867 --2482 --90 --7773 -9190 --578 -75 --2227 -8261 --222 -3252 --9854 --9664 --5469 -1447 -2983 -6963 --7129 -9341 -8882 -5057 --9814 -8388 --3184 -3412 -6843 -6299 -8381 --2333 --5997 --9184 --6474 -6488 --7040 --2928 --4716 -9218 --1762 -7161 -3099 --434 -4452 --4572 --9309 -1561 -3579 -9793 -675 --3273 -1302 --2896 --4105 -775 -5671 --1561 --3502 --8064 -6752 --2045 -6755 -839 --4179 -3546 -4015 --442 --9180 --8184 --8720 --3616 --6013 --1838 --6275 -3396 -6682 -9914 --5120 -9104 --6958 --4055 --4479 --7879 -3754 -782 -9808 --9503 -5329 --3634 -3399 --219 --5922 -8991 --674 --4659 --4759 --4219 --4808 -6941 -7068 --2974 -2508 --5429 --1422 --3923 -4067 -5908 -3588 -8022 -5932 --7181 --8492 --942 --8019 --942 --4460 -7549 -2163 --3817 --6770 -1961 -6889 -9348 -9915 -9548 --7503 --3421 --6679 --4715 --8964 --2535 -1362 --9275 --7336 -8509 --4523 --5384 --7301 -6188 -2070 -4996 --1646 -4476 -3507 -6294 --1512 --8861 -2075 -2398 --7184 -2782 -1197 -209 --3543 --1193 -2628 -5918 -318 --5686 --1201 -8644 --518 --3053 -4371 -1362 -5429 -8539 --6112 -6733 --6415 --838 -7447 --626 -227 --3843 --7361 --3854 -2761 --4269 --8207 --1464 -8000 --1598 --6219 -5063 --3395 -5016 --518 -6664 --8993 --748 -7368 --5999 -8789 -3649 --5788 -6591 --4643 -7454 --9276 -9778 -3735 --5603 -5683 --882 -9340 --1819 --6925 --699 -3567 -5410 --690 -6227 -7002 --1590 --2663 --2899 -4390 --9744 -2250 --6579 -4423 -9484 --9632 --3581 -5453 --9046 -2264 -5222 -6815 -4278 -3605 --6330 -3763 -2910 -7531 -2559 --9267 -6195 --3936 -4909 -5889 -4581 -6988 --5971 -1926 -9832 -7382 --6966 -5590 --7140 --1530 -3531 --2006 --5847 --5619 --8065 --3291 -4090 -8442 --6613 --4574 -3571 -5922 --1440 -17 -4502 --8431 --3052 --1948 --9676 -1582 --1771 --2439 -585 -8757 --1399 --5026 --3735 -1205 -7835 --9090 -1322 --2198 -76 -2319 -6575 -1109 --1454 -7109 -9301 -1448 --5363 --2078 --8687 -354 --3516 --9770 --3025 --2786 -7707 --1254 --7864 -3230 --1332 -422 --6808 -6139 --984 --6579 --1882 --4145 -4909 --7740 --7428 -2282 -1796 --9564 --2007 -6617 -5922 -7197 -9509 --9380 -1940 --1964 -3466 --2663 -9677 --3211 --5458 --1912 --7706 -2379 -1788 --3004 --8416 --4615 --1533 -9466 --3430 -9760 -9513 --5769 --4425 --4116 --9312 -7097 -722 -3279 -6649 -1740 -3678 --2239 --3011 -6906 --5860 --4349 --2847 -8630 --1828 --3555 --9636 --7256 --4278 -1418 -9640 -1782 -8284 --1336 --5065 -6654 --1719 -7063 --1563 -8184 --9310 --9698 -1039 --8637 --3922 -4164 --6287 --205 --1759 -4066 -7942 -5034 --2149 -636 --8057 -8397 -5703 --5635 --6609 -8736 --1508 -7097 --9849 -9755 --5221 -6172 -7459 --2301 -3610 -5959 -9675 --3750 --6899 -4671 --9310 --268 -90 -5435 --2326 -2133 --4455 -5103 -679 -7887 --1793 --5770 --818 -7477 --67 -3415 -3852 -6633 -9895 -1016 --4207 --1366 --840 --7403 --8721 --5570 --6399 -333 -6901 -3005 --4508 --3999 -6168 -4000 -8876 --4715 --3424 -4044 --5395 --9834 -5115 -1205 --1568 --8043 -9945 --8807 -4166 -1195 --9503 --3335 --2412 --8636 -3039 -8470 --4028 -4180 --8372 --5653 -2813 -6615 -8842 --5536 -8708 --555 -1733 --7705 --2754 -9610 --9050 --9675 --612 --6249 --169 --761 --4836 -3675 -4671 --7403 --2096 --5133 -6583 --1376 -7915 -3709 -8162 diff --git a/2022/21/input.in b/2022/21/input.in deleted file mode 100644 index 3814ef1..0000000 --- a/2022/21/input.in +++ /dev/null @@ -1,1901 +0,0 @@ -bwmv: 19 -dbdl: mjtf * zqpw -bznb: ntgb * rmvp -mdzc: jhmp / rsml -fgzd: 2 -fvng: bbmt + zqwq -pwjm: 2 -nzgc: crnw * vshp -wrdd: 5 -sdtq: 2 -zfcc: 3 -gzpv: 5 -bhbm: 7 -gcvp: 3 -fvtc: 2 -hzqb: 3 -srsm: djhv + ngdn -dvsh: cswn + rmgw -swlq: 5 -sfcf: hsfd * qhrz -bqpt: mzvw * fhnq -rjdp: 6 -nzqb: hnsg + ncdj -njzw: 1 -vrgp: prbv + mjfl -cjdb: 2 -hbrw: jtpw * nqcp -czcw: 1 -vwps: hfjl + cjmf -mpcs: mggp * hvhp -brtt: 2 -mcfl: pcfp + vsgw -tnqf: 2 -phnn: gdgz / mqfz -vzcv: 2 -fzdf: 5 -ldms: hvbd + srpj -wpwz: 4 -jjrn: 4 -rhqs: 3 -sjhz: 10 -bhmh: 2 -sgwj: zmts - lvhv -nmvz: 7 -hdnz: 3 -msfd: 5 -zmpc: 4 -zmdd: 8 -jbpn: 3 -qspm: qwpp * jhlw -mfgh: 4 -hcst: 5 -wqwm: bnrp + lgcm -nzfw: ntms + smzd -pwwg: jfpt + zgth -bnpq: jngz * nsph -smsl: 3 -hzsg: 2 -ntsw: dhdf * tvvw -pfgh: 3 -rgcs: ndtg + fclp -bjmc: vnqb + zjts -hdsf: pfsv + lrsr -dwcc: dpqc * fcvr -lcfl: 2 -cfgh: wphs + grrq -czgs: 6 -rwcv: shfq + hcsj -zwdg: fwgm * vmbl -vpcz: 5 -mjmt: nfdg / ntrt -dsss: fgzd * pntp -dtrg: 5 -pnbz: 3 -mjbs: fhlv - fljw -zhmd: 13 -znsb: bcwv - lftg -lntf: bmbp * dmsf -jznq: 2 -zqjm: 2 -mjnf: sbsn - vchq -hhwc: 2 -shrg: 3 -zljr: wfjm + czcw -qhfm: nmgr - qshc -zgtg: wqbz + nfqj -zpbz: lnpq * ppjh -rvqh: 1 -vrhq: pgjl + lzbr -mtth: ghmt * rrrz -qffq: qwrp + zpnq -prpq: vljj * wgwl -mqpl: qssr + wjwv -spbp: jvhh + ldms -zhrn: mcnf + swlc -mjhd: 16 -bpmg: 4 -hzrz: 4 -pntp: 3 -stmj: 2 -rdrs: 14 -ttvr: gfqw * znhz -gvzf: 4 -mlsp: 4 -mqjv: 4 -rgwv: 2 -sgbz: tvhj * lnwm -lqgf: 2 -fqws: 5 -ddvn: 5 -vqng: jvlh * ldvf -tzrc: 11 -cswn: rpjd * gczj -glgr: 3 -hspq: zlgs - cfgh -jjtd: 2 -vpgw: 2 -qggg: 5 -vvql: 2 -vcnq: 4 -dznt: 3 -hzjr: 5 -lglh: 1 -gchf: 2 -vzpf: zhdn + rnfb -nzqh: 5 -tdfl: wjsv * wrpz -bhpn: 11 -psfv: 2 -tvvw: 10 -glss: 3 -jcvg: 2 -phbr: 7 -bpwd: lggr - mcfl -pqtc: 5 -fhrj: 3 -mmhr: rplb + rfnv -lhqj: zrff - dgwl -vmtw: bdgr * glhq -wjsv: 3 -msjn: plbv + gsjn -jbmv: 3 -htfv: 2 -dlpj: 19 -szmf: dqzp + rrlm -sfmz: 3 -sdqb: hpll * fzwp -fvql: bfwm / jgnd -lcmg: dcff * rfdv -zbtq: svdq + snbf -sqds: 6 -tcvr: dqfv / szcj -dnrm: zqcl / bjzz -whmg: 2 -vfng: 3 -ptmg: cdmz + fqws -rrwc: 2 -mfnf: brtl * czzg -jbbn: 2 -ztjp: 15 -jcnm: 2 -bpdt: 9 -gtzt: chfw * pjtf -jgbq: zchp * rbht -bnrp: qbrm * wplv -fdfm: vqng * sfmb -qtjw: vzmq + qggg -crlq: nvhn + fqgq -wpwc: 4 -glsb: gghd + tnwj -bhzj: 18 -rdjw: dznt * wmpj -qdbl: qvmt + jtnm -tndm: bqws + gchf -gjlz: bvng * rdrg -jmtc: bslz + fmtr -pdgw: 3 -pgjl: dpvh * ttff -fsqh: 2 -tcrj: 5 -brtl: gvls + psnv -bvsd: 2 -zgqz: 20 -bqqt: 8 -gswt: vtqp * vmtl -chdn: fzpp - pcfq -dhjr: nhqs * nzjd -hhwj: fdbp / prnn -lznm: 5 -whnz: phnn * jvhv -nhhd: 3 -vltv: 1 -zlpr: qqrd - ggnr -dpnr: 4 -jvcz: cfdq + bdsl -vsnt: mtwc * zfdn -pzpn: vsmj * wnvf -hgcc: rhfp * gfvh -zghb: hcww + njrb -lgbl: jcmf + fhht -zfwr: rgjv + spbp -dlcq: nhbg * wmsh -szsm: 4 -nthw: 16 -dbzd: 5 -fvhd: lntf + mvgl -mcds: 11 -qztr: vczb / rmcs -rvwr: jtwj + mjhd -fhzn: 2 -pjtf: 19 -qvfm: cqst * qpmw -ddlj: 11 -qjqf: plhv + tldm -jfpt: 4 -qmcp: 6 -wgqw: 3 -svgw: 2 -jwsb: fvhw - mvzg -shfq: gspt * bzrs -hpbf: 1 -nfcg: bljl + vpfb -mqgg: lrdg + qvdm -jnfw: 2 -qjqt: 17 -sbnc: 5 -gnht: 5 -qqbd: 3 -nnsm: 2 -mrhv: fcct + jnmf -nmbc: hfbt / zcsf -bjwq: 3 -wrbj: 3 -fzpp: tfjm + wghw -hldn: wtpp + rnzj -dfvc: qnqn * dppz -dzhb: jwjp - cvmg -mjbh: jgrc * szmf -vljj: cpft + vftr -nlvv: vmcn * nqbh -gzjp: 19 -vcjt: 16 -lqbp: 1 -vvqj: bzjh * fhwl -zddr: 10 -sqrq: 3 -brwq: fnrs + trwn -zvbf: 5 -prqd: 4 -gmnb: mtdt * vsgp -tdcr: 2 -fvpr: jbzq * lbms -tfpl: 3 -flmh: 2 -fhht: tpvd * dhjh -dqrf: zhmb * ldlp -fhcr: hqpg + vztf -zjbq: 11 -wqct: wszs + lpsp -dwmn: 4 -sqhc: 6 -zjlw: 2 -lnft: csvn + qzfw -lrsr: 6 -wbtb: 4 -nqbm: 3 -mvzg: shrg * gsrm -mrpq: prch * ztsb -dgwl: cvhz * jcpf -swtw: 2 -rhgp: nwrg + rrwc -nhbg: 2 -qqtt: 7 -cpft: 16 -mtjz: 2 -znhp: lnft * vvql -tlvj: 1 -jhsv: lqcb / lznm -ggns: hzjr + nchv -dppz: 2 -jtnm: cflc * czgh -rfjh: zghb + jmcm -vfzz: 3 -cjmf: 3 -wzrc: glqg + zcjn -dpvh: cwtl + fnfj -vqvh: 2 -lqdl: nzfw + pdlp -bbsv: lclb * dfvc -jmtf: chvq + cvfc -btsq: qtjw * cdnd -czgh: 2 -zhcn: dsls * jjsd -hvjt: mwnb + ntzf -dqtl: 5 -djrh: tsdw * cbrd -zcsf: 3 -fdls: 13 -tlgd: bbpd * dnzh -nsdp: 2 -lggr: bpmg * plmh -trcq: tdbv * ggzp -vvfl: 3 -qrnp: 2 -rncb: 3 -pbnn: gjzv * fcpl -zlmn: pwnw * lpvz -bshs: rrtq * bfhf -spgv: dlsh - szmq -blhf: 2 -zjvq: 4 -wvzq: sgbf / jwtb -pvmj: 2 -gblc: bjzw * jvcz -hjbq: jznq * vcgh -qvdm: 19 -pmfp: 2 -zhfh: qvrw * lwqg -gbdl: 5 -mnct: 2 -wcwl: 2 -llvm: 13 -pbdb: qztr + ttqr -dhgn: lblh + qfls -bmnb: 3 -ntgn: 3 -hnfv: stpv + lwmh -cgmr: chtr + gnht -wgwl: 4 -qggj: mqjv * lmfc -djfn: hnfv + wclv -vczp: 2 -hfbq: 2 -bzrs: 3 -lbtl: 2 -dcvb: 16 -bbmt: hgmr + nvqm -vfbf: gnfs - mlsp -wnvf: 5 -rmvp: 18 -ffdl: cblg * nqbm -szmq: lqbw * zptz -jwjp: hgrl * zgzg -dmpc: zgtg + bpvp -vshp: 11 -qjdm: 4 -rfpz: 9 -lggh: mcln + mcth -prnn: 2 -vzgb: 2 -tsfr: 16 -vchq: rpgb * vwlf -mnqn: 7 -pzzz: wczt / vhdw -sjbm: 14 -qllr: qdjp + zdld -fdpt: qmcp * gqtl -bmwl: jppw * ldpd -znmb: nflm * jwqz -gcwj: 3 -wcqb: nwgz / smls -slwd: mdzc - hdng -rlzb: fvtc * cjtn -gwmp: 2 -dwzs: 3 -qzrc: 13 -cjsp: 5 -btsr: 13 -dqzp: ffwj * hcst -fcct: 4 -scsm: rqcr / ddgl -chtr: 2 -ztcm: 2 -tlvz: jbcs * sbfs -jvns: 18 -hrjv: dpzp + nsbl -ctwq: 2 -dvhq: shms / wssb -zhfm: 4 -bfhf: 4 -ppqf: 5 -bntm: 6 -bmns: mjfg * bgdj -trzs: 16 -fjjb: chsr * hzmp -tgwr: 3 -nfqj: 16 -hvhp: 2 -sdpv: cszr * wlss -hwhr: 2 -ndtg: 4 -gcnf: bqbc * mrfp -mbnp: hbdc + grgm -bldr: brwq / psfv -bjzz: 2 -wqcq: ljqb + mnjp -gpsj: qmnr / nprh -hgdr: fgth * crqr -tnvl: lmlp + sbtn -dfmj: 20 -bdgr: fjgn + vhlh -mvll: nhhd * pjqs -jvlh: 2 -jmsl: zmmz * bdrq -tczz: 4 -zqpw: 16 -qssr: 1 -phwl: 7 -jmlz: 3 -dtdl: 4 -gnbw: 2 -dmhs: 4 -lpbg: nrwb - zgqz -qcrq: 5 -hcsj: 2 -root: mrnz + jwrp -dchh: jzds * zfcc -vhbw: 2 -jrct: pclc + wwmh -jrnf: 3 -fswn: 2 -hdhm: znhp - tbqp -hzps: ttdd * wqsl -vvrp: 16 -cfdq: 4 -szzs: wvcs * mwjv -tzjf: 5 -lbmf: 5 -mnjp: jnvp * bmrc -hnsg: dngc + wsjn -hngp: lfpw * dfnw -qmdj: vlhz * vhth -wvrq: wqct + dsvz -svfc: 2 -hvmj: wgcs * bpwd -lzjs: dzhb * ppqf -prgf: 3 -lqqr: 3 -qcpp: 2 -jwdc: 2 -hsgc: vtrh + pmjn -tlsc: 5 -mdpl: svqw + pwhl -bzpt: 5 -fvhw: gchv + rnqz -mrnz: hncd / phsp -lnjg: mfqs + zfln -rthd: cpbd * gwqc -bzwc: 4 -btcd: bwst + nzmr -bfsh: 15 -bldp: 10 -vsgw: hldn + rzmp -tpvd: 4 -gqwv: tmgv / dqqp -ddtq: 3 -mpbq: 17 -qwqw: pvmj * hfvz -gfvh: mzrn - vghf -sjlq: fswn + vggq -cfgr: rhqs * dgtn -fszg: chzd + dwcc -jvhv: 2 -zlcl: glfw * zcnp -bcwv: gvqz * nzwg -gglj: 6 -wssb: 2 -dphd: 2 -chrg: thzp * gcwj -nbjj: 2 -nrlq: prpq - zvjw -vnqb: pjdf + zmls -mjrl: wgqw + zhfm -dzrs: rqts + vwdc -dnzh: 2 -tdtb: hggc + ztjp -fpnq: 2 -zqcl: rzpj * dbww -ftsc: fhzm * bhlz -rrgr: 3 -rbnj: ttfb * mdjl -spwn: 18 -zlht: 11 -zgth: swhc + jbbb -rdnq: hzrz + ngfn -pldw: rqbp * ftcw -drbn: 5 -twsw: bsmt * crzb -qvsj: jvmh * wqwm -dsfm: wdvv * gpbj -bprz: nfmb * pgrj -bfwm: tcjh * bhmh -wjwv: 12 -dggm: lgtb * mzlv -wdvz: bfrg + tmwj -wwmh: cnmc * hhwc -zqss: 2 -zzwh: zdfp * vjfv -crff: 3 -ctfz: 4 -jvmz: hpmf / mbbc -rsnh: 2 -gjzv: gwmp * btgm -qcqj: mwmw + cmhb -vvrf: 13 -tffp: pmfp * drhd -mzvm: 2 -lzsp: 2 -clsq: vqvh * gljs -qmnb: 5 -qznt: 3 -wdzq: qzhw + bhbm -mtcv: 8 -hmqd: 5 -plbh: wdlh / svfc -czmj: 4 -zpnq: 12 -zpcf: pqfm * qwrm -nflm: wwlm * dsfd -mcln: dtdl * zmpc -nstb: zqss * lvdw -wqpd: msrg * rbgq -jstq: dgdn + dcvb -hbvf: 2 -drrb: 1 -pcfq: 7 -smhn: 5 -lfpw: 2 -fnrs: jhgg + zvfs -fcsr: 1 -lcdv: smwh + vmhf -vvwt: vmtw / cccp -hfqr: 2 -jblj: dprq * phrn -mtmc: 5 -mmwj: tcsn * bwmv -zqmc: 2 -dsql: vmcf + zpcf -rfbr: 3 -ncss: 19 -psnv: srfz + pzfs -lgff: 8 -hwcl: 7 -fqjw: jqwh + mhqw -jdvg: 3 -qzpg: nhhv * lgjp -gggc: 2 -nlrs: 3 -vhlh: frph * ddnl -nwpl: 3 -zdfp: 5 -vpfb: prcl * jcnm -bljj: 3 -srnq: 2 -qwpp: 7 -ljqb: gswt + rzzt -lvhv: 1 -brlg: 10 -rlnn: 2 -jhlw: 2 -vzmn: 3 -hbls: hzps / gbhc -plvb: 11 -nfvl: 4 -sljl: plml + lzjv -szvf: 17 -rgvt: 4 -chzd: dbgr * mttq -rjrn: lmnw / ctpd -bbzc: 4 -cbps: zqfj + gtct -pcsf: bpnn * nhvj -cdcr: pbnn / wpwc -bjzw: 3 -phpl: 2 -dpqc: 3 -vqvq: trcq + vwps -fcfz: 6 -mpsq: qjqf * lhfm -vnmj: 3 -rqrd: rthd + gsgd -fcvr: 5 -lhch: hbjt + ljcq -hncd: zfgj + brbv -hvph: 9 -srfz: lhmg * nqsw -nrzb: qhfm * jnbm -wdlh: hhwl + rqzm -mstz: mbds + mmph -zqwv: 5 -nqsw: 3 -qpzm: dbnf * vqlt -ggzp: 8 -zfgj: mdmq * mpsq -qzhw: 1 -rppp: 16 -lhht: 2 -rfvv: 13 -rpsr: 5 -wbwf: 2 -cppz: bwtw * qppz -bpvp: dlcq * fzng -rbtw: 3 -wmsh: mpcq - dchh -lscm: 11 -bhlz: lhch / wdzq -sbcs: tfns + ddtv -rgjv: tsfr + qmdj -zbwg: 9 -pgrh: 15 -lrdg: 6 -dfst: 17 -wmvw: vsqr * hljl -gtrp: 2 -jlcj: zblj * wglg -wzrr: 16 -ggnr: 5 -zbfr: gdtz - fdqq -cnmc: gdwd * zjlw -tcjv: jjgj + lglh -rrpb: ltmf + mbfl -zchq: 5 -crdv: dvhq - lhmc -sgcm: 2 -dcml: bzwj * tbld -nrfw: 3 -fnfj: 19 -zgld: 5 -qbrm: 3 -crjf: 3 -dsvz: mmhr + nvqg -tljb: rfbl * fqjw -mflf: 4 -mtzf: 2 -zqfj: nbns + btcd -clrn: 3 -smls: 2 -tvhj: 6 -rvjc: dvsh * gggc -dzpc: qrnp * sjlq -wglg: rrpj + gmnz -thgz: 4 -njhc: dncj * mjnf -gfqw: 3 -jhjv: hcvc + ghsj -fzmr: 6 -chlt: nrfw * jzff -jwqz: rlnn * tcjv -bzjh: qspm + rncb -dfnw: 9 -pfnm: cnhz * hdsf -mzvw: 2 -mzqr: wcsd + jhsv -wjsh: scsm - rrpb -jbdr: 2 -vcbr: wdnj + lgbl -lpvz: qvdg * ljrn -dcnn: cjsp * lbhs -wghw: 10 -ndpw: 5 -vmcf: 2 -nzlh: 1 -lbms: qzcj + tzjm -vdgd: 18 -dnft: qrtv / vzgb -cccp: 2 -smzd: 7 -jqrr: pcpp * hvph -mdwj: mjdf * msfd -dncj: 4 -qfls: fcsr + hngp -dqdc: 2 -qvdg: 17 -cblg: 3 -ffwj: 13 -bzwj: qpbc * mrlh -mplz: 5 -vqdq: brlg - zpmq -ljpl: 7 -mtwc: 3 -qvmt: fqtb * vdlw -fljw: pggm + mmwj -ltmf: zjrj * ztjr -mjdf: 2 -zmmz: gtcd + tzpf -hhfr: 5 -zlqm: sfcf + frld -rzhq: 8 -rqts: 2 -jgrc: 13 -nzwg: qffq / qrjh -fmhf: fwrq * sjbm -mwwv: vmvq + hgcc -jqwh: tvvn + nmvz -snbf: pnqt * fhds -ljcq: zlmg + lsvh -qmcm: 2 -gghd: rjcv * hjsj -bwst: ztgn * bwlf -mnwp: vzcv + dcnn -djfq: 3 -rbdd: 20 -wlfb: pwcv * lmpt -wphb: wbrv + wcsf -zjrj: zzng * zsvv -vqsh: gbgn + vvgg -fjgn: lrcn * vrhq -sbtn: bqdh * stnp -njmg: bmns / gchz -nfft: qtcz + qhdd -nhjr: dqfp - mfdc -rbgq: 7 -lgtb: 3 -jzts: sdpv * hbls -gjqq: znsb * nbhz -vftr: wzsl + tjhh -tvtc: 13 -wbfs: pdgz * nfvl -fhlf: 6 -bswv: 15 -rghj: mrcn + sjsb -qsln: gzjp * zfwr -jppw: mtmc * rpsb -zwvq: 4 -wplf: pldw + tnvl -lcql: 12 -pncm: bprz / fzqm -fclr: 2 -szss: 4 -vhmc: 7 -lqww: ggns * wqls -phsp: 5 -dgdc: 2 -drpc: 20 -hbcz: hwmj * mqpl -pcfp: hrvz - vsnt -rgfj: bpls * mrhv -vmsw: 2 -brbp: qdwn + lscm -nphl: dcml - mzqr -dbnf: 3 -phzv: 7 -rtmp: tznf * nrzb -lsvh: wpzm * qwhb -wgcs: 2 -nwgz: mhsz + lbqr -rwgg: 14 -ggch: qvfm + gmnb -qlgd: nfdf * hddd -mfhn: fhrj * vqdq -jnbd: bgds + dghv -ndfh: rzbf * hfqq -hfcp: 2 -pwst: vhmc * dgwv -tzjm: 4 -tjns: 4 -bmbp: 2 -gbhc: 2 -wqsl: lvzs + nhtr -bpsv: 2 -mzrp: wqvz - vmsw -lbts: 17 -dbgr: 4 -pwnw: 2 -ftcw: gcvt + lwrb -tbrf: hdwd / jnnz -lqcb: sfdn + fwcv -gsjn: 4 -bgfq: cfgr * glsb -gchz: 2 -spbt: 2 -qtcz: pjgg * rzhq -swts: vjhg + dzzz -tzpg: hzsd * bljj -bgtc: ghtw * dhjr -cnpl: vfct + cdfg -ngcq: 18 -fpmj: qdmg + ttzc -tbjt: 2 -vztf: fzmm + jmmt -jjgj: qlgd + rppp -gtqw: mszj / jpgc -qcjv: cdcr + vdgd -vvgv: nzgc * dfst -wzzp: jcnb * lwrn -zrff: nhrd * tbzn -rdrg: 5 -plml: wlfb * bbzc -dsls: 12 -bpzs: lcmg + gtqw -zvqr: 3 -tsvw: 4 -jsrw: 4 -ldcs: 3 -tthz: chrg * qqtt -jdgh: rbjq * hpbs -zjnj: 2 -mpvz: qsch / bvsd -bgrw: qlzb + zmmg -bsvc: jwsb * sqrq -lwgg: 2 -fgrb: hfqr * wpwz -vdlw: 5 -zmbv: 3 -htls: 2 -csrv: vqvb * phpl -thls: ctzp - vfbf -qlmc: 1 -dfbs: 4 -hggq: vqvq + nhjr -qpmw: 11 -lrdb: mflv * zfcg -sqft: rmvc + nvzj -zfcg: 4 -gbnz: 6 -dsvb: 2 -vpmg: 3 -grhz: 2 -tvjr: mpzw + dgvp -swhc: 10 -djhv: 19 -gslh: 7 -ngfn: gjfn * cmmm -cdnd: hlbj / wfjv -fvjl: bpnw + swnr -scrq: 19 -ddjd: cjtt * tlvz -wlgd: 2 -vsgp: pttg * zcgl -wtqc: jhjv * hwpf -jhlz: wgdz + rwhs -mmph: 4 -ctzz: 2 -lnpq: 2 -rwgh: cgvl + hfcp -tsnd: 3 -vqvb: 3 -plbv: 3 -hvng: 18 -chsr: 2 -ntrt: 2 -qrmg: hdhm / hrrc -ttqr: ddjd - qzgj -dmbm: 3 -stpv: 3 -dvvw: ggcz - qlmc -vwdc: mbws / nnsm -qlzw: qmzj * tdcr -nsph: 2 -mrnj: 17 -jlbg: 2 -rtql: 7 -dhdf: 2 -szvm: 5 -pgrj: fmvr * gbtb -rrrz: mcqq + mdpl -dvvn: 3 -mhsz: ttpt + czgs -cwtl: jbzl * tvsh -bdsl: 3 -rqzm: rwgg + gwmb -mfqs: wdqs * qggt -ljjs: 4 -phds: 3 -jbcc: hblr + zbfn -vhdw: 3 -gbtb: 3 -gqbj: tzrc * jbmv -qppz: 3 -msmv: 2 -lmqb: ctzz * mpbq -fgnm: tbtl + rvqh -dsfd: 7 -jnvp: 10 -cdmz: mmwf * sqsj -qhnn: 2 -jlnl: ttmb + jjrn -trrs: rvhr * nrsc -svqw: 12 -wplv: qjdm + dtrs -fwcv: twsw * fqwf -pvgd: 2 -mpcq: pwst * mvqf -qjjq: 3 -cgvl: 5 -rdtm: 5 -msfl: 2 -ctzp: spwn + drpc -pzzj: 2 -ggcz: 8 -mhqw: jqbc * vpmg -vjgh: 5 -vpcm: 2 -hstl: dsfm + vbzn -shms: svgw * tqbv -gjfn: zvqr + wttr -zgpp: lhqj / vpgw -tvsh: hdnp + wrbj -rbmm: lmng + fnws -tcsn: zzww - nqzj -fhtm: 2 -fqwn: dnrm * fpmj -ttff: mnwp * zdcg -rmhb: 2 -jqwc: bfzr + tdnp -sdgc: 15 -ghtw: dwzs * rnnn -tldm: 1 -sfmr: 3 -dpnl: zgcn * hwhr -hgrl: sdqb * bjmc -vrbp: 4 -mwjj: 11 -hjlf: 2 -jcmf: 5 -mszj: btjn * dphd -mbds: 3 -lzbr: nzqb * tbnm -frph: qdbl * dmpc -jqbc: tzpg + jjtd -nrwb: bswv * rbld -tmgv: mjbs + nzgw -pbvh: 3 -rpgb: vgqm * msfl -qfjm: jmlz * cdhb -zhdn: 4 -nctm: 1 -bnfz: 3 -tsdw: 3 -pbnr: 3 -grrq: lscs + njzw -fnws: pvqs * fmgh -vlcb: 4 -nrsc: frnh * mzvm -jvmh: 9 -wnzg: rbdd + lzvf -bvng: flwg + dpnl -gtcd: 5 -bpls: 3 -qfcn: 3 -nvqm: zhcn + glqd -nbhz: 5 -qlzb: bfsh * ljgh -vlbp: hnjs + rfgp -ntgj: 20 -fqwf: 10 -jvvf: 1 -rbld: nfcc * qvgq -tnwj: gtrp * gstw -hvbd: ppns + lbts -wpqw: lrdb + lnjg -gdgz: vcjt * qmcm -mbpc: twmg * rmhb -cznr: dbzd * fgzc -jsvp: nbsl + lpbg -qbnr: mfdb + zcjz -lgcm: 2 -pwrd: qnhj - szvf -mqfz: 2 -wdzc: 2 -fjtd: 2 -qmnr: dsql + hzsg -nqzj: 2 -jmmt: 3 -dtqn: 8 -swlc: 2 -dhpt: mfnf + pwzf -wbrf: plbh * vzmn -jqjn: 7 -lgjp: 3 -brbv: pbdb + lzjs -mcth: qzrc * gdjw -nbns: dfbs + mtpc -fclp: rbnj * tbtr -gtct: sljl * hdcf -szqm: nhhh + nhgc -tbtr: 3 -pwvg: 1 -zcmf: qfjm + whrz -rnqz: fmhf * rwgh -zwlj: 3 -ntmg: 5 -tgvv: lqww * wpqw -twmg: tzjf * jtbf -lmjv: zphc + llvm -lrhn: nfft + vrgp -ctbv: gjlz / szvm -vdjr: hbdd * smtn -cvhz: blrn * ntmg -fqgq: zjbq * fbhf -zlgs: jbbn + ltmg -qmzj: fqwn + njmg -zzng: nnld - vfzv -lfnw: bdvl + dbqw -pggm: szsm * hjtg -wwlm: pnbz * sdtr -bdvl: 3 -vczb: lfnw * lwdq -prgs: zbfr + tbrf -fqtb: 5 -gstw: wcqb + mhfq -dgdn: 1 -flqb: tdts + thls -ltjl: btsr * fgrb -tbqp: fdpt * mfhn -ngqm: 2 -fgzc: 13 -czcb: tffp + jbcc -gdvn: ttqq + swts -hbzz: fdls + qwmm -lclb: sfmr * nbjj -prch: 2 -pjhq: 1 -vdch: sgbz + vdgw -rchm: mplz * dsvb -ghwr: sqds + hhfr -fvbt: 8 -wnbl: shcc + ngrj -czqg: tdjp * phds -vfzv: 8 -gczj: qznt + rnqv -mrlh: 2 -jcnb: 9 -plqs: 4 -hwtt: fbbp * vqsh -fzng: 3 -fmgh: 5 -cqss: 5 -ntms: 1 -vwlf: 7 -hswh: swlq * ndpw -bthv: pbnr * ffsn -mvff: pdnh * dnft -qwvq: sgbq + zwdg -wfjm: 5 -humn: 959 -nbvp: ffww * ddcf -wbrv: 3 -psdw: crlq * wlgd -mggp: njhc - czqg -grgm: fzmr * spgv -nlwb: glss * brbp -zdld: 15 -dnpb: hvjt * htls -jscw: 2 -zltp: 5 -rdvs: humn - wpmm -ddfl: mjvw + whwp -dzrh: 2 -ppns: fvpr + szzs -pwzf: bmwl + mfbh -bfbf: sbhh * mbfr -qrnv: ldbw * dfsp -tdbv: 5 -jnnw: 2 -tbvd: mpcs + djrh -jjsd: 11 -vfzd: chpt + ldzl -rfnv: nhng * nlrs -lblh: 2 -lwmh: hvdb * ntgn -dpzp: rpsr + mzsr -tnzw: jblj - mspv -tlnn: qgjl * zlwj -dqfp: cgmr + jtlb -hlrf: sbfj * jrct -lhmc: qzwc * wjql -wsjh: 4 -vvzd: fjjb - jgbq -jpqt: 17 -bljl: 3 -qdwn: 2 -mdth: jlbg * qrnv -jvpf: 2 -qggw: btbw + zqwv -sbfs: jzhg + tlsc -lwvz: zwlj * zhmd -pldg: csln / jcvg -qshc: nhvd * fcfz -cbhb: 4 -zlvr: mjmt * zmph -lwqg: znmb + vwrl -rdhv: smhn * scrc -bsmp: 11 -qrtv: chlt + cznr -tdnp: 6 -hpll: rrzp + fmvn -bwpn: 1 -ffpt: 13 -fbpl: 2 -vjhg: 2 -wrpz: gglj + jfcl -blbz: wplf * qhnn -gdwd: 17 -cqst: 3 -jfcl: rqnr + fmnm -mzlv: vmns + hrrf -vmvq: qhgr * pwrd -mspv: jzts + tdfl -ntgb: 3 -gvls: rfsj + qggw -fzjn: wqcq * tnqf -jvhh: 2 -sgbf: ndfh + vvgv -hbdd: jnfw * scjg -gttc: 11 -mflv: 3 -fmtr: hhdj + phzv -tfns: zlpr * bnpq -dbqw: 9 -jfbb: znmd * ntwd -dmsf: zpdc * zcgd -rrlm: 5 -lslm: hdnz * vnmj -pdps: 3 -sdtm: vvfl * qjns -hwmj: 2 -rwhs: rdhv + gfhn -nhvj: 2 -sddb: 5 -zpdc: 7 -hpbs: 3 -gcql: 2 -lbqr: 11 -gplv: 15 -cflc: dvvw + dscv -jmcm: cfrd * nzqh -hlcd: 3 -fwgm: 2 -glhq: 2 -wfmj: qwqw * pvgd -ddnl: mjbh + qvsj -szcj: 2 -nhqs: bqqt - jlrl -lnwm: sgvh * rgwv -tbtl: 18 -mdmq: 3 -rnfb: tvrb * ttsb -wjld: 5 -tvcq: wzcd - gcvp -ztjr: 6 -wgmf: 8 -hhwl: 15 -qjns: jtgb * clrn -pwfw: lqbp + pcjh -nfmh: zddr * ddvn -jlzq: 5 -ljgh: 3 -glfw: thgz * vqqm -lbhs: tcrj + hjlf -gdjw: ncsb + vltv -dlsh: zjwm * hspq -vmcn: phwl * gfrl -nhtr: qpdl + smjj -jtwj: 1 -pczh: hvfw * mjqz -lctm: nlvv - mbfg -pdlp: ptqt * hqcs -thzp: prgf * qsrr -bmzl: 2 -pgzs: hgcd * fbjr -nqbh: 2 -zjwm: 2 -mwqj: wrnh + jrnf -tjdc: ljjs + bfqp -rqlw: blbz - ncpz -tmwj: qggj + nzlh -bhwg: hzpl + mztj -ddgl: 2 -jsfv: ftnb + jqjn -zlwj: 2 -stbw: 5 -zssm: 19 -fhds: szrz + zzwh -qvgq: 3 -lhmg: 4 -rjdn: 1 -hbjt: gggn * svzg -jgnd: 2 -hjtg: 5 -zswz: hstl * scqj -zcnp: 2 -dhcd: ddlj + zncn -rmvc: 9 -ldpd: 3 -hgdg: 18 -zzww: wtls / hlsh -hptd: 2 -hfbt: hzqb * hsgc -wczt: qdlp * rfbr -bqwn: 2 -wpmm: jmtf + chdd -hcvc: 6 -mcqq: ttvr + vvqj -nhng: gzpv + bqwn -rfmg: 2 -wzsl: 1 -hcfj: 2 -whwp: tvtc * ttmh -lpsp: rfvv + wzrr -fzqm: 4 -lscs: pjhq + zhrn -ttqq: mtcv + rtmp -zjts: 5 -rjcv: 3 -qwmm: 4 -fmdn: fvng / dmbm -mpng: 2 -vmtl: 4 -wdlf: cctn + vqsn -dhjh: 5 -zsvv: 3 -nmjn: 2 -rfsj: wwvg * brwz -wzcd: cjtm * szss -hqpg: 9 -jhgg: 11 -jssr: 2 -zjvm: pfcb + dtrg -hjsj: gpsj + fftv -ngdn: mvll * hgdg -glqg: htfv * zcmf -gjlr: 3 -fmnm: tstl + pnwl -ntwd: rvjc - gsfh -jbcs: 2 -tbnm: 3 -pzfs: nljg + pfvf -dprq: 6 -cjtm: pdjl * prqd -bzww: tbvd / mrmv -vqlt: 8 -jhmp: qlzw - vhnq -gmnz: 14 -pmjn: wbrf + scfr -plhv: jssr * rfjh -mrts: tcnr * hrjv -cfqr: hwps * chzv -dtqc: cdsf * njww -prbv: nthm * dqdc -tjhh: bwpn + pwfw -hdnp: 3 -vsmj: lbmf * mslh -wdvv: 6 -gnwz: bhpn + mtjz -zgcn: 5 -mdnz: 3 -pcpp: 17 -jtbf: 5 -lmng: wrtv * pctw -sjrm: 20 -pttg: 13 -rpsb: 5 -bmrc: 9 -scrc: 14 -nhgc: 15 -hddd: grcs + dtrj -bslz: 15 -rmgw: fbhl + cppz -rnnn: pbzf + qsln -zchp: 2 -btbw: 1 -vfnb: phbr + jlnl -phrn: wvzq + pnjb -qsrr: 7 -lwrn: 4 -jtgb: 2 -vfzf: zswz + wjsh -qzfw: mwwv / pzzj -ctpd: 2 -fhzm: 2 -hlsh: 4 -csln: fpnq * fvql -lftg: 8 -cftr: 10 -tcjh: pbpt + gclq -jlrl: 2 -nvqg: 5 -zlmg: 17 -nvrh: jsvp * fqjm -fmvn: ftrh * wcwl -mbbc: 2 -wrnh: jjvw * bglg -pcjh: vsfb * hqph -zqwq: hlrf + rtql -jptg: wbtb * zwdj -ldlp: 4 -mjqz: 2 -pwcv: 3 -rrpj: tfpl * vfzz -qgjl: zqjm * mwjj -hcdh: hnws * jnnw -wwjd: wtbn * jrjn -rzpj: czhg + dfmj -qwrm: 4 -pbpt: 1 -btjn: jfdn - hwtt -mhfq: vlbp / fjtd -mttq: 2 -qqrd: bbsv / ldcs -gpbj: 3 -smtn: 2 -zdcg: 2 -hvfw: sdtm + djfq -vmhf: qpzm / vlcb -rbht: lctm - wfmj -hhdj: zfsh + dffw -vwrl: jmsl + zlnc -nqsl: 14 -fbhf: 4 -gcvt: bhwg / hgqh -hlbj: rrvm * dhcd -qdqg: qfcn * wvvd -tcvt: jqwc + tjqc -vcgh: mnql + srcd -gdbn: 12 -zfln: llst + dvhc -ldzl: 9 -gsfh: fszg + lgff -ppjh: dmfp + mdwj -nfdf: 2 -rrvm: 5 -hgqh: 2 -cvmg: wdlf / rsnh -pjqs: 3 -mwmw: 6 -hcww: 3 -dzzz: 5 -wqls: 2 -stnp: 2 -hnjs: stbw * bthv -fzwp: wnps - qwvq -fwqz: 6 -wszs: vgtg * gjlr -vggq: 11 -dgwv: 2 -hljl: 2 -nthm: srsm * vvrf -sdzf: 2 -zchv: whlm / ntld -wqvz: wtqc + mnqn -mjfl: tljb * wdzc -qgzj: 4 -drhd: dzpc + mqgg -rqbp: 10 -wphs: 4 -nphn: gdvn * bthb -nfmb: 15 -fbbp: 4 -ncpz: hptd * rgcs -whrz: mlbv + gslh -wtpp: rvwr * cbhb -ngbq: nlwb + rgfj -pdjl: 2 -nhhh: 10 -ttsb: gnhd + clsq -lmpt: 5 -wvvd: zbrb / jscw -chzv: 7 -jbzl: 4 -flwg: 1 -ttzc: rdvs / cbrl -zhmb: lrnq * sbcs -mvqf: 2 -lhjq: 15 -vhhm: ltdr + sdjj -qpdl: mpng * lcql -zmph: 5 -vsqr: 7 -pjds: nbhq * grhz -mslh: 5 -plmh: tthz + zgpp -sjzs: wvrq / sdzf -tznf: 2 -nvhn: bvfd - vmrb -lmnw: wtdl * gzmn -cbrd: mzrp + smsl -qhrz: jvpf * ttzn -pmtq: jpqt + gdbn -pvqs: 19 -vtqp: pjds / pqwz -sqsj: 3 -tdts: 13 -flnv: zlmn / zgjv -vhth: 15 -vqqm: 4 -hfqq: 2 -chvq: 20 -fqjm: 2 -nhrd: pfnm + zmfj -hsfd: wphb + gblc -rrzp: fscs / hgmm -ttzn: 3 -jsfw: djcs * bshs -lhhc: 5 -dnwb: mtth * vvrp -tbzn: 2 -jtlb: fwqz + mrnj -gspt: 3 -prcl: 5 -wnps: tqbm + bznb -rhfp: 3 -znhz: tndm + vdjr -cdsf: rrgr * dzrh -mlbv: 7 -crzb: qmnb * zdmv -cjhp: 2 -ttmh: 4 -mztj: ddfl * zwms -wvmj: 5 -wbjq: wgfv / bntm -lrcn: wjst * zlvr -rsdf: lslm * dzrs -dqqp: 3 -mfbh: 5 -pdnh: sscc - lgnp -sdjj: tjns * pldg -bwtw: cftr + mnbs -zmfj: slwd / mnct -mbfg: 3 -vjfv: wphq * trmf -dscv: 10 -tnnr: 11 -zcjn: 17 -jlss: 2 -dtqh: 3 -lmfc: pzww - rjdn -wphq: fvjl + ngcq -dffw: zltp + jvvf -czhg: 17 -jpgc: 2 -bglg: 2 -vmbl: 5 -jnbm: 2 -fwls: fzdf * wrdd -mdjl: 3 -gcsd: 13 -cjfg: 3 -bvfd: gqbj * wsjh -sfdn: 5 -gqtl: 6 -sbsn: mbnp / tbjt -pfsv: wllz - drrb -wvcs: bjwq * crff -ttdd: 2 -frld: rdjw + nthw -mzsr: wjld * cqss -sbfj: 2 -mnql: 6 -trwn: rchm + pdgw -ddtv: jsfw - rghj -pfdq: 2 -lvdw: zhfh - bgtc -jzff: 3 -ncmn: sqft * fgnm -zmts: lhlm * ljpl -nljg: 4 -rwnb: 2 -gdtz: zgld * wnbl -cjtn: 17 -nlzc: 2 -jcpf: 2 -bqdh: pcsf + vhhr -cmhb: 2 -srcd: 17 -pdfg: sddb + dtqn -qnqn: 7 -zgjv: 2 -cjtt: tlvj + csrv -svzg: 5 -tjqc: 1 -bpnw: nfcg * hmwb -btsz: vhhm + hcdh -zpmq: 3 -ffww: qcrq * rdtm -rpjd: 2 -tbld: dtqh * fpmv -trmf: 2 -jtpw: ctfz + bmnb -pclc: 15 -wwvg: 3 -hqsh: dhpt / jlss -mtdt: 2 -sjbp: 4 -hrvz: zrfc - rbsd -smjj: 3 -vzmq: 2 -dqfv: dqrf / gbnz -nzgw: mrts + qbnr -jzhg: jfmq * zjnj -hnws: nmbc + fzjn -jsdm: 2 -snpw: 2 -rfdv: zchv + lmqb -gljs: 4 -blrn: djqr + rdrs -zwdj: 4 -vmrb: gnbw + vzpf -cbrl: 2 -lmlp: djdl + nphl -znmd: 3 -vtrh: 10 -hbcr: 4 -cgvb: pczh / wlnp -zfdn: bldp + hgdr -qnhj: hbcr * lhjq -bqbc: zbtq * rdnq -ttfb: 3 -zlnc: jvmz + vccq -qcnz: 5 -nqcp: fbpl * wbjq -jzct: sdgc * hfbq -ftrh: fwls + hvng -cctn: dqtl * zlqm -ghmt: 4 -tqbv: bsmn + cfqr -frnh: 5 -ddcf: 4 -hggc: ltjl + hqsh -wsjn: rhps * sgsp -jnpg: rsdf / hgfq -jjvw: 7 -zwms: ldlg + pwvg -tcnr: 2 -bpcc: rhgp * vpcm -hzpl: bzww - wvgd -jgcg: jtmz * mwfh -gfhn: pwwg + nlzc -zcgd: 2 -qzwc: 4 -bfrg: rmtn * flnv -zmls: ffpt - ggjl -ldlg: 6 -mpzw: 6 -dghv: 8 -wlss: 2 -jfdn: bgfq * ptmg -ctdw: 3 -tfjm: 14 -jzds: 3 -dvhc: 4 -jszb: tscg * hcfj -nsbl: lcvc + mrpq -ncdj: pgzs * dhgn -dmfp: mcds * pbvh -bnrh: rbmm * whmg -vgtg: 5 -vccq: pncm * gjqq -nhhv: 11 -cfbt: bzpt * zchq -pjdf: 5 -vmns: 12 -lzvf: jszb * bbcc -tstl: 3 -nmgr: cjdb * zssm -fzmm: 4 -qhdd: cfbt * hswh -pdgz: 4 -sdtr: rjrn + fvbt -hgmm: 2 -htvs: 15 -hqph: 5 -zptz: 3 -vbqb: 6 -tqbm: pmcd * nqsl -hzmp: bsvc + gqwv -mfdc: hbvf * dpnr -gwmb: jvns / lzsp -cdfg: 3 -smwh: 1 -jngz: 5 -mnbl: zmbv * dvvn -zcgl: 2 -wpzm: 6 -dbww: 4 -djqr: 3 -nbsl: qllr + bgsh -ttpt: 5 -jwtb: 5 -gnhd: 3 -scqj: ffdl * mdnz -fhlv: hggq * htvs -njww: 2 -ntld: 2 -nbhq: zpvp / lqgf -rbsd: 8 -rplb: njmf * srnq -sgsp: lwtd * hlcd -tscg: 4 -vhhr: 3 -jwrp: bhnt * vfzd -mjtf: 4 -mbfr: 3 -sdcw: 2 -ddrh: 7 -lpfz: bhzj - zvbf -ptqt: 3 -wtdl: 2 -nnld: fvhd / ztcm -dngc: ggch + ngbq -lslc: 4 -msrg: 3 -prrc: bpsv * gvzf -jrjn: lbtl + sbnc -rwcf: wgmf * ctbv -gclq: 10 -lzgq: 11 -rhps: njgp * msmv -pzww: 8 -chpt: fsqh * lggh -zvjw: rwcv * pdps -trjv: 3 -rrtq: 4 -fgth: 3 -hvdb: ghwr + jsdm -hbdc: vvzd / vcnq -hgfq: 2 -lgnp: 5 -rnzj: vfng * bldr -pdfv: 2 -fhwl: 10 -bthb: nctm + fhlf -vngb: tgwr * dpbh -jfmq: 3 -hdcf: 2 -zdmv: 2 -vsfb: 2 -wtls: czcb / qgtp -gnfs: fmmf + hgtt -gsrm: 3 -mrcn: 1 -swdz: 5 -ghsj: 1 -qvrw: bpzs * scrq -rhwr: wcpr + hbzz -zrnq: qrmg - ncmn -ltdr: dggm * pgrh -gsgd: lmjv - wjpz -brwz: 2 -wtbn: mjrl * jzlt -sgvh: 3 -jvlw: hbrw + szqm -ljrn: 2 -tvrb: 3 -csvn: jhlz * nwpl -czzg: 2 -rfbl: 2 -zblj: 3 -wttr: nmjn * jsrw -zgzg: vvwt * hwcl -dtrs: 9 -vghf: nvrh - flqb -nprh: 2 -wsgm: 3 -crqr: 3 -srpj: ftsc + dbdl -ztgn: 5 -zrfc: zlht * chdn -bfzr: 18 -chfw: 3 -hfvz: 4 -bbcc: 12 -qpbc: qjsg / fhtm -fdqq: wzrc + crdv -shcc: 2 -dfsp: 2 -wqbz: 7 -lhfm: 2 -zcjz: vngb + hvmj -swnr: 3 -zmmg: jzct / swtw -pqfm: 13 -svdq: jdgh * tdtb -wlnp: 6 -ztsb: 5 -wjql: 2 -qzcj: 2 -jnmf: 7 -pwhl: hjbq * qqbd -mbws: qcqj * sgwj -vjhw: 2 -rnqv: 10 -hzsd: 3 -gzmn: gplv - tsvw -mwnb: vhbw * tvjr -bsmt: 2 -hbpt: 2 -cdhb: 5 -gchv: 4 -pnqt: ntgj + mpvz -pfcb: jmtc + rhwr -btgm: wzzp + hhwj -qsch: nsdp * tnnr -lvzs: 4 -wclv: dtqc + dlpj -djcs: wvmj * vpcz -zncn: bzwc * lqqr -lhlm: 2 -fdbp: nrlq + bsmp -cpbd: sdtq + lhhc -jppg: zjvm + wnzg -wcpr: 18 -pfvf: 3 -qdmg: pgwq * nfmh -ltmg: ncss * lqld -nhvd: 2 -hfjl: 9 -sbhh: cgvb + qcpp -pjgg: gtzt + tczz -nfcc: 2 -nbbp: wqqr + vcbr -wqqr: 8 -ngrj: qcnz * lpfz -lrnq: 3 -znnv: mbpc / lcfl -wmpj: 3 -chdd: tlgd * hbcz -zbrb: sdcw * msjn -wgfv: cgcr + mflf -nfgh: 2 -gvjv: qzpg * sjhz -bgsh: vtvm + cnpl -wgdz: mstz * mfgh -qzgj: mwqj * crjf -rvhr: 4 -tdjp: djfn * ctwq -wfjv: 5 -lqbw: 9 -fmmf: 13 -rmtn: 3 -nchv: 2 -qjsg: tvcq + jstq -bpnn: qjss + ncvv -qhgr: rfpz + ngqm -nwrg: 5 -hmch: 2 -cfrd: 2 -cnhz: 13 -pbzf: zjvq * prgs -hblr: lqdl * dsss -bbpd: 11 -njrb: 16 -nmch: 3 -grcs: 3 -fwrq: 2 -fcpl: 2 -hztd: 3 -cgcr: znnv * flmh -dtrj: sjbp * lcdv -ffsn: 7 -pctw: 10 -rsml: 5 -hwpf: vjgh + fhzn -dgsp: 2 -rrtg: 10 -pqwz: 2 -wdqs: 4 -mvgl: rwnb * pdfg -qrjh: 2 -gvqz: 3 -mnbs: 7 -pnjb: fdfm + nphn -dgvp: jgcg / czmj -fbhl: 20 -nzmr: jsfv * fclr -lzjv: pzpn + vbqb -gggn: 15 -jzlt: zqmc + gbtn -szrz: 9 -vqsn: gvjv + tnzw -ftnb: 6 -pgwq: 15 -nzjd: dnwb - lrhn -vlhz: 3 -fscs: zljr + wbfs -bgdj: rqrd + tgvv -jchq: hbpt * pmtq -ntzf: cjfg * vdch -tzvl: 2 -vgqm: ntsw + lwvz -mmwf: 2 -qggt: 4 -jtmz: 4 -bsmn: rqwd * dwmn -qwrp: nfgh * qjqt -zfsh: 1 -mrmv: 5 -gfrl: 5 -rzmp: tlnn * mtzf -mjfg: 2 -lwtd: 8 -bfqp: zbwg + wmvw -mcnf: 4 -tvvn: lhdf + trrs -bwlf: 3 -glqd: mdth - jnpg -vdgw: 5 -hpmf: lwgg * vfzf -wllz: pdfv * qgzj -wcsd: trzs + plvb -pmcd: 3 -lhdf: 3 -vbzn: rjdp * plqs -tzpf: pwsz * fhcr -llst: bnfz * rbtw -wdnj: 4 -wcsf: 5 -hqcs: 3 -hgcd: 2 -wjpz: 15 -jbbb: 15 -vfct: sgcm * vrbp -sgbq: dgdc + gbdl -pwsz: wsgm * cjhp -cvfc: trjv * jdvg -sscc: vjhw * jnbd -dgtn: 3 -lqld: 3 -vtvm: 12 -whlm: jbpn * zmdd -njgp: zwvq + hmch -lwrb: btsq * stmj -rqnr: 16 -rbjq: sjzs / pfdq -hrrf: 1 -vwzp: 3 -ggjl: 4 -dcff: 4 -zpvp: vczp * vfnb -dpbh: qcjv * pfgh -zvfs: 2 -qjss: 13 -qgtp: jbdr * nmch -zphc: sjrm * dgsp -mwjv: 3 -fftv: 3 -lwdq: rlzb + rgvt -wvgd: jfbb * spbt -cszr: 11 -wjst: 2 -jsrh: bqpt + bpcc -ncsb: snpw * ddtq -ldbw: wdvz + bgrw -pnwl: hpbf + qdqg -bgds: 3 -qdlp: dnpb / lhht -bqws: swdz + brtt -zbfn: dmhs * tjdc -hdng: hztd * jvlw -mfdb: rrtg * nbvp -mjvw: tcvt * sfmz -rfgp: hmqd + gcql -rqwd: 4 -qwhb: tzvl * gnwz -cbnf: drbn * jlzq -rzzt: zpbz / bmzl -gbgn: jptg * whnz -fmvr: 4 -ldvf: 8 -fhnq: 10 -wrtv: 2 -rmcs: 2 -jbzq: 3 -fbjr: vwzp * ctdw -jwgq: jchq * mvff -hgtt: 1 -lcvc: mnbl * tsnd -nfdg: rfmg * tcvr -gbtn: 5 -crnw: 3 -bdrq: jlcj + jsrh -rzbf: fmdn - wwjd -ncvv: 1 -qdjp: zlcl + bpdt -hwps: 3 -scfr: lslc * qjjq -rqcr: nbbp * bnrh -fpmv: 3 -sfmb: 9 -mwfh: pqtc + pwjm -mbfl: cbps + pzzz -mtpc: 8 -hrrc: 4 -fhgp: 2 -bhnt: gcnf + nstb -jnnz: 2 -cmmm: 3 -vhnq: jppg * glgr -njmf: 11 -djdl: jqrr + rwcf -gwqc: cbnf + sqhc -vvgg: bfbf * gttc -mzrn: rqlw / ddrh -hdwd: prrc * psdw -hgmr: zrnq * fhgp -sjsb: wqpd * blhf -hmwb: 2 -mrfp: btsz + jwgq -scjg: 13 -ttmb: wbwf * gcsd -nvzj: jwdc * lzgq diff --git a/2022/22/input.in b/2022/22/input.in deleted file mode 100644 index bce47c6..0000000 --- a/2022/22/input.in +++ /dev/null @@ -1,202 +0,0 @@ - ..#...........##..#..............#.....................................#..#....#..#..#.............. - ...............#........#............#..........................................#..............#.... - ...........#..................................#.......#..#..#.................#...................#. - ..........#.....#.................#.......#....#..#..........#................................#..... - ...#............#...............................................................#...#.....#......... - ..#............#..#........#.................#..#....#.......#....................#............#.... - ..#..........#......#...................#.........#.................................#.....#......... - ......................#..#.....#....#........##....#...............#...............#......#..#...... - ..........#...............................##...................................#...#................ - .#................#...................#......#................#...........#.........#............#.# - .#....................#....#........##.#.......##....#.......#.......................#............#. - .......................#...#....................#...............#.....#....................#..#..... - ..........##.......#...#......................#.....#........#..............#..##................... - ........#.#.............................#.........#................................#....#.........#. - ..........................................#.....#................#.............#...#................ - ...........#...............................................#..........#...#.....#....#.............# - ..#....................##.........#.........#.............#...#.....#............................... - ..#..#..#.............#....##....#...#...##....#.#............#....................#........#....... - #........#......#...#......#............................#.............#...................#...#..... - ....#............#.............#..........................................#.........#..........#.... - ...........#......#..#..........##..#.....#.....#.........................#.......###...........#... - .....#...#............#.......#.....................................................#.....#....#.... - .......##..............#....#....#......#.....................#........#................#......#.... - #..........................#...#....#.....#..#.....................#................................ - .#.......................#..#....#.##......#..#......#....#......#................#.....#........... - ...........#.#......#.......#.......#............#...............#.....................#....#....... - #...#......#..##..#......#...#..#........#........................#.........................#...#.## - ........#...#.#..#..##....#..#.#............................................#....#...#.#......##.... - .................#.....#....#......#..........#......#...............#....#.#........#.............. - ............#.#.........##.............................#..#.....#.#...#..#..#.#....#..#.#........... - ...#.....................#.........#.............#....##.......#......#....#.......................# - .........#...........#.............##...........#............#.##..............##................... - ...#.........#..........#.#.............#.......#...............#................#.........#........ - ....#................#.#............#.....#..##..............#..........#............#.....#..#..... - .....#..........#.........#..................#...........#.........................#..............#. - ....#.........................#.......#....................#..#..............##....#.........#...... - ..........##...................#...#........#..............#.........#.#.......#...#...........#.... - ..#.......#................................#..............................#.......#.....#.........## - ..#...#.....#..#.............................#........#....#...#.##.........#...........#......#.... - ..........#.........................#................##.........#........#.......................... - #........................#....#..#...................#......................##...#.......#.......#.. - ......#....................##.....#........#.......#......##................................#....... - .#............##..##..#.#.......#.........................................#..................#...#.# - ............#.............#.........................................#..........#.......#.....#...... - .......#..........#...................#...............................#........#.#...#.............. - ..#.........................................#.............................#.................#.#..... - ..#..............................#........#...........#........#.............................##..... - .....#.##........#......#..........................#.....#.......#.....#..#......................... - .......##...#...........................................#.........#.....#........................#.. - .#........#..........#...#...........#..#...............#..#....#...........#................#...... - ............#............#.................##..... - ..#......#.....................#.................. - .....#....................#.#...#............#.#.. - ..#.......#.#....#.#......#......#..............## - ................#...........#...#...............#. - ................................#................. - ....#..........#..........#.....#.....#........... - ....#...#................#.......#.#.........##... - ..#.......#................#...................... - ............#...#.......#..#.#.................... - .......#....#........#......#.................#... - ..#......#...#.#...#......#..#.................... - ....#.#..........................#....##.......#.. - .................#.........#...............#..#... - ...............#...#....#......#....#....##....... - .#.........................##.....##...........#.. - ...#...#.....#.....#.#.....#.#........#........... - ......#......#...............#.....##....#........ - ..........................#.......#.#............# - .#..........................#........#...#.....#.. - .........#..........#........#...............#.... - ...................#..........................#... - ...................#.....................##....... - ...............##..#.......#.#.................... - ...#............#.##..#....#........#..#.......... - .......#.......#.................................. - #...........#...#......#.......................... - ..#......#.##.#.......#.#............#....#....... - ....#........#..........................#.#.#..... - .......#.....##............#.#..................#. - #......#...#.......#.##...#.................#..... - ..#...#..#.#...#......#...#.#..................... - .....#..........................#.#............... - ....#..............................#.#....#.#..... - ......#.........#.......#........#.........#.....# - .#.................#.....##...#...............#... - .................................................. - ....#...#......#.............#........#..#........ - #....#...#...#.#..#............................... - ..#...........#...................#.....#........# - .........#........................#............... - .................#...............#................ - .............#.......#.......#.................... - ......................#......#..........##........ - .......#.##.....................#..........#...... - ..#..#.....#....#......#....................#..... - ...#.........#....#....................#.......... - ...##..........................#...#.......##...#. - ....##......#...........#..#..#................##. - ...#...........#...............................##. -......#.........#.....#...#...#.#.#...#.........................#.#...........#.......#.#.#......... -....##..........#......#......#..#..........###.........#......................#...........#.....#.. -..#.................#.................##.....#.........#....................#.........#...#.....#... -.......#....................#....#.......................................#.#........................ -....................#.............#...........................#...#...#.....#...#.......##......#.## -.........#..............#..........................#....#....................#....#.......#......#.. -......................#............#.......#........................#.................#.#........... -#.#......................#.............#....#..#.......#........#................................... -......#.........#.......#..#............#...................#........#........#..........#........#. -...#.........#..#..............##.....##..#....#..###...#.#.....#........#.....#..#...............#. -............................................................#.................#.#................... -...............#..##........#..............#.#....#.....#....#..##...........##.#.................#. -#....................#........#...#..............................#..............#......#.#.#...#.... -........................#..................#................##...................................#.. -...........#....#...............#........#.....#...........#........................#.....#........# -#..............#....#.#....#.........#......................##.#...#.............##..#...#....#.#... -..........#.........#..#.....................................#...................................... -..............#....#................#.............................#.#....#........#................# -...............#................#.#................##.#.#...................#..##.#................. -...#.............#................#....#...............................#...........................# -#...........#....#.#.........................##..............#....#..#...................#..#....... -#......................................#............................#.................#.........#..# -......#..#.......#........#.............##...#..#.#.#...#..#......#...#...#.......#..#......#....... -...........................................#..................#...#.................#.......#....... -...#..................................#.............#...#.#....#...#..............#.....#..........# -.#.....................##......##.......................#................#..............#........... -.......#........#..#......#..............#......#..#............#..........#....#.............#..... -...............#....#.........#.......#.............###..................#........#...............#. -#......#..#............#.##.#.......#...#.......#.........#............#....#....................... -.#......#.........#......#.............................#.........#............#.......#............. -.#........#....#........##.................#...........#................#.....##.......#.......#.... -#.....................##.....#...#.....#.......#.......#..#...........#............................. -.#...##......#..#.................#.....#.#.........#..........#.#...............#.#.#........#..... -#........#.#....#..#.#................#........#......#..........#......#.....##............#....... -........#......#.#....#...........#.......#..................#.....#...........#.........#..#....... -............#.......#......#...#.#......#...#.............................#......................... -.................#...#..........#.#..#..#..................##..#..........##..#...........#......... -......#..#....#..#..........#...........#...........#......##.#....#......#..#.......#......##...... -.....#............#......................#...............#.....#..#.....#........#..........#....... -...#.......##.................#..................#....#.#...#......#..#..........................#.. -..#........#..#.##...#....#.......#....#..............................................#............. -...............................###............................#.......................#............. -..#.....#............#.......#............##......#...........#..............#.........#....#....... -...##....#...............................#..........#..#..........#......................#.......... -.................#.....#....................#...........................#..........................# -.#.....#......#...................#.......................#.##..#...............#..........#........ -.#........................#......................#..#...........#....#...#..............#.#.#.....#. -.....#.................................#......................#.......##.........#.................. -.#..................#...........#.......................#.#...............#.....#..#.......#........ -.#........#.....#..#.............#..#.......#..#......#........#.#................#........#........ -................................#................. -.........#...............##.........#......#.#.... -#...........#........#.......................#.... -..#....#..#....#....................#.....#.#...#. -.................................#.............#.. -........#...............#....#.................... -..............#..#...........#.................... -...#.......................#.....#..#......#..#... -.........#..#.........#....................#.#.... -.##......#.....#...##...............##...#........ -........#..#......................##..........#... -..#....###.......#...#....#....................... -...............#..#............................... -..................##.........#............##....#. -....#..##......#..#......#........................ -.............#.....####.........#................. -.#.#..................#.......#................... -...............................................#.. -...........#....#...............##...............# -...#..........#.....##.........##....#..........#. -#...................#...........................#. -...#.....#....................#..........###...... -........#.................#........#.....#.....#.. -...#..##.......................#....#............. -...................................#.............. -..#.............#..............#.....#............ -..........#.......................##.............. -................................................#. -...............##............#.................#.# -...#.#..##....#....#....#......................#.. -...#....#......#.......#....#.....#..............# -.#...........#......#...........................#. -...#..................#............#.......##..... -.#.#...........#....#...........#....##..........# -...#.#.......................#..........#......... -.................#........#.#.......#......#...#.# -.#.......#...#.#.....#.......#...#.........#...#.. -......#.....#..................#.....##......#.... -......#.....#.........#........#...#........#.#... -....#...........#.........#.#..#....#............# -..#.#.......#.............#....#...#...#.......... -..#...#...#.....#..#.#.....................##..... -..#.........................#.........#...#....... -......#....................#..#.##....#...#..#.... -..#......#.............................#.....#.... -.......#.##......#....#.#.#........#....#......#.. -..#.............................#........##....#.. -....................#....................#..#..... -.....#.........#....#...............#............. -.#...........#..#..##..............#.........###.. - -3L27L4R39L42R22L2L20R47L27R11R11R19R21R36L1L40L1R27L32L7R16L23R44R8R15L22L22R22R18L44R48R27L5R32R9L38R23R48L47R25L25R27R36R7L26L13L36R37R21R3R22L38L9L43R15L50R18L19R48R6R19L30R4R33L48L42L21R45R4R9R5R4L38R41R9R37R44R39R1L8R49L24L26R33L16L22R34R39L14L28R32L23L13R19L32R34L8L35R15R29L17L3L46L26L37L48R22L6L37R16R46R36L36R22R3R12R24L17R21R26R33R16R5R44R11R2L31R23R26R25R36R27R1R1L12R39L21R49R44L41L35R31L39L3R5R14L26R30R47R6R21L34R11L42R2L20R37L28L25R47R44L9R50R49L16L33R6R7L33L45L38R24R29R29L26L36R9R16L47R27R19L35L26L24L12L50L47L11L22R39L35L12L23L31L20R32L46L46R17L35R26R35L41L30L18R7R23L9R12R21R36R45L45R41R7R29L3R22L27L35L10L11R15L39L25L19L43L18L50R24L12R7L3R28R10L32L19R11L2R6R25R43R22R8R20L31R17R45L47L48L3R20L26L15R8L30L9L34L8R35L37R30R42L31L17L19L20L9R46R5L2L48L5L15R4R13L4L23R44R36R12L12R11L29R4L37L6R12R38R24R6R1L3R50L2L8L26R24R38R24L43L42R48L35R27R10L21L34L11R48R39L4R29R28R42L35R38L8R22R23R50L5R6L25L20L6L18R48R20L33R1R13L39L7L30L48R49R14L35R38R15R25R45L18L30L2L28R25L29L4L35L25L38L33R48R37R4R29L30L13L6R23L9L37L3R17R1R13L10R22R27R14R13L32L3R6L34R49L37L47L10L1L36L27R48R15L45R23L30L47R1L15R4R30R29R40L24L37L30L28R27R36R5R15L5L6R1R15R4R23L39R38R24L46L40R16L32R4R43L17R18R27R29R24L11R38L13L31R48L5R23R4R9R35L25R12R32L39L7L22L14L14R28L1R16L39R15R2R26L34L3R18R29L46R31R47R23L31R28R20R24L18R6R18R33R49L24R11L29L6L44L22L26L1R5L1L45R29L17L31L22R46R39R7L28R4R28L13L18L50R3L17R19R43R16R26R34L4R18R29L41L33R46R16L34L23L34R22L43R22L42R1R23R37R18R36R48L18R3R22R6R27L24L47R44R19R12L41L7R23L5R39R1R1L10R17R19L8L49R38R6R3L39R1R42L21L27L25L32R18L14L5R43L13R13R26R36R44R37L23R17R41L41L22L21L41L26L20L14R22L25R42R28R16L33R2R28R50R47L21L24L5L25R4L46L34R1L2L14R7R10L34R28L34R20R35L43R6L5R32R34R16L22L45R16R9R17R19R46L46L49L22L28L29L46R2R38R2R23R47R36L45R10L46R42R9L23L38L5L50L31L14L17R6L27R28L49R45R50L30R23R3L36L10L36L21R36L25R37R40R21R32R27L3R40R28R49L10L23R36L18R21L18L36R30L44R19R15R18L22L18L13R3R43L18L2L3L46L21L6L25L19R16R43R14L11R41R27R42L30R6L34R9L14R34L49R35R21R41R4R13L3R15L38L19R37L31L9R1R9L19L6L15L9L35R27L27L27L28R26R40L41L6L3L20R39L35R9R19R14L38L13R32L12R26L27R27R42L30R5L24R32L35L3R39R42R2L35L11R33L32R6L31L33L1L9L27L1L12L25R34R13R5L34R46R44R28R29R47R47R41R20L8R40L12R39R46R34L47L42L49L5L7L25R21R20L19L2L14L43R2L15R4R48L48R5L36R36R5L46R23L32R26L29R23L6L50L33R12R27R23L22L2R33R48L7R49L5L10R26L16R48R10R19R38L34R10R42L31R45L22L36R45L40L7L19R9R15L29L7R15L35L32R31R7L17R24L46L11R5L30R27R23R9R43L36R14R26L4L34L15R49L16R20L25L12R9L8L42L39R6R20L18R9L23R15L38R13R24R18L49L47L35L41L41L8R7R10R18L39R13R46L48L49L39L49L50L34R10R30L4L19L16R18L18L12R44L17R34R2R9L11L6L14L42R29R22L8R19R42L49R29L5R44R42R46L30R44R32L45R6R38R17R14R37L47L7R5L9R7R33R10R36L13L35R19R46L32L7L8R27R3L36R39R1L26R11L20L34R38R35L10L38L5L39R17R20L26L45R48R33R20L22L5R36L16L27L28L5L41R22L9L46L20R17R1R15R12R20L24L43L35L50R6R33R5L21R21L32R34L47R13L18L4R2L43R12L30L50R49R39R20L1L45R5L12R30R6R3R7L10R44L44R33R48R14R3R45R35R11R5R10L26R9L13R37R9R34L42L11L1R42R33L4R9L26R6L2L20R39R24R17R24L22R36R4L29R35L10R12L49R9L4R13L11R18R28L49R4L18R48R49R19L28L9L49R34L40L49R31L3R19L11L33R50L33L1R47R2L7R47L34R33L39R8R49R15R47R17R14L19L5R32R24L10L21R13L47L38R23L14R40L47L5L11L24R33R34L45L38L5R41R22L3L11R44L47R5R20L39R21L49L25R28L17R18R36L16L5L12R25L39L8R12R13R18L34R45R37R22L47L8R13R18L15L9L33R28L11L1L30R49L20L27R1R2R3L42L20L44R23L11R17L18R29R31L11L20R11L6L28L3R21L22R36L49R37L39R16R1L9L48R27R32R4L3L24R6R40L28R2R39L50R27L45L15R32R44R14R8R21R5L18L24L45R29L42L46R13L39L31R43R2L27L45L42R48L3L18R20L3R30L25R12L47L23L49R27L21L46L40R21L26L22R22L22L45L18R42L6L18R30R18L23R46R22R8L44L14R26L17R26L45R41R16L46R2R16L50R20L39L24R41R7L19L25L24R29R48R41L30L10L26R3L7R41L40R20R26R40R44R3L37R22R44R17R38L47R35L28L19L23L34L8L12R8R40R43L8R43L42R43R44L30R34L6L50R20L45R25R4R9L39L29L17R1L32L18R10L8R21R29L26L34R26R41R2R49L42R43R3R10R7L14L37L1L29L15L19L23R15R28R20R2R31R44L16R38R19R12R26R42R20R12L35R34R48R13L49L48L35R30R38R21L47L41R6R10R32R46R14L20R34L1R5R7L29L41L26L41R41L41R46R18L28R18L25L20L37R47L17L35L30L49L13L19L42R36L37L36R2R1L36L31R20L36L46L26L25R26L45R18R15L42L50R17L31R30L16R45R47L11R4R29R3R9L23L19R14L15L18L14R44L4L20L20L44R17L43L9R11R42R19L1R10R44L47L46R26R22R6L24R22R34R5R35L17L12L10R42L49L43L50R5L44L24L31R7L6R37L34R7R5R11L35R34L27R18L6R16L7L31L31L50L29R34L47R4R10L48L13L10R37L48L40L32R2R36L26L41L28R38R29L32R50R32L39R30R43L39R40R35R9R34L21L25L6L14L26L42R43R5L39L1L20L37L36R25L39L14L21L37L4L10R11L35L17L47R6L30L20L18R12L10L14R37R38L2R23L17R11L1L12R34L42L24L8R34L40R34R6R25L27R25L21L4R44L41R20R14L30R30L22L40R45L11R26R34R7R40L2R43R16R17R20R35R18L1L2R22R29R44L17L41L50L8R33R2L45R49L48R46R25L23L48L13R49L1L2R18L24R19R3L29R24L20L16L48R12R8L35L4L33R19R34R11L44R40L5L7R23R46L10L15R32R49L24L40L11R26L48L13L22R23L21R45L31R49R43L16L33L39R18R24R34L39R21L45R37R7L17R44L27L34L35L11L48L7L13L41R47L19R27L17R44R29R48L48R2R35L47R46L38L20R5L49R19L17R8L13L11R30R27R18R3L11R43L19L14R37R31R42L11R15R31L1L39R16R42L46R34L48R6R48R23R48L21L19R6R17L18R7L6L22R1L39L20R28R27L10L9L4L31R34R27L29L12R30R9L28R13R37L37R48L10L28L31R33R45R1R21L40R7R10R18L17R5R11L4L48R41L37R18L50L48R30L25R47R29R40L29R4R22R44L30R5L17L43R20R4R17R14L47L20L16L33L31R48L9L30R38L21L7R5R4L13R49L48R41L28L7R30R23L25L37R23L37R34R7L22R43L36R43R8R29R35R33L14R45R2R50L44R21R24L33L39R46L47L13L48L32L22R8L16L5L13L11R35R12R36R11L50L40L26L26L16L44L26L25R26R25L31L15R31R41R7L45L29L37R15L4L36L5L47R10L46R30L1L10R21R14R3L46R7R50L40L3L7R34L34L23L49L7R19L27L32L13R10R26L26R49R41L17L27L50R29L11L31L9R13R16L47R47L40L13R33L20R24L44R14R3R46L25R11L24L26L2R2L23R34L24R9L4R22L38R24L46L6R28R35R42L5L35R11L21R42R9L40R45R22R17R9L20R6L13L27L38L32L16R23L43R33R16R10L16L6R11L9L22R44L23L31R1L20L17L9R12L44R3R49R7L8L12R5R43R33L26L16R33L48R29R26L50R9R43R48R36L30R17R42 diff --git a/2022/23/input.in b/2022/23/input.in deleted file mode 100644 index 4bc1004..0000000 --- a/2022/23/input.in +++ /dev/null @@ -1,74 +0,0 @@ -#.#..#...#..##.#..##.##.###.#..#...#.############.###.####.....##.#....... -...#..#..##......#.......###.#..##.#.#.#...#..#.#.#.#...###.#..#...#.....# -##..###..##.####....##.#...#....##.....#.##..#####..##..###.#.#.#.##...... -.#.#.##.#..##....#..#...#.#.##.#...##.##.##....#...####..#.###..#.#..##.#. -##..##.##..#.#####..#..#####..##.###.##.#..#.#....#.#.##.###..#####.#...## -.#..#.#.##.....##.#.####...##.#.......##.#.#.######.#....#####.#####..#..# -##....#...##.#.....##..#.#...######.#..#.##.###..###.#.##.##.#..#....#..## -.#.###..###.##.#...#.#.##.#.#...#####.##.#.##.######..######.##...###.##.. -#.#..##....#....#..####.#..###.#...#.#.########.#....#..#...#.#..#..####.. -....#.#.##..#.#######...##...##.#..#.#.###.###...##...##.#...##...#.#####. -....#.####..#......#..#....#..###...#.#....#.##...#.#....#####..#..#.#...# -#......#..#######..#...####...#.#.##.#..###.....#.#.####.#.#.#.##.##.##.## -.###.....##..###..####.##..###....#..#...###..##..##..#.####.##.#......### -###...#.........#.#.....####....##.###.####.###.#....##.#..#.#..##...#..## -..#.#.#####.#..#.#.######.#####....#.#...#..#.##..#..#.#..##..#..##.###... -##.#####.##.#...#.#.#...#...#..........#.#.#..####.#...##.######..###...## -..#.#.####..##..#.#..#####.#.##..#..#.##....###.##.##..#.#...##.##..##.##. -###..#.######.##...##.##.####....#.##.#.#.#...#..#....##..####..##.#.#.##. -.##.##.###.....####..###....#.#..##..#.#..#..##..#.##.##...##..#.#.#..###. -....#.####...######.....########.#.#....##.#..###..#.###..###.#..#.#....## -.#..###.#.#.#.#.#..#...####.#.#.##....#..#...#....##.....####...####.#.### -#.##...###.#####.##.###.#....##..#.....##..#...#..##.#...#..##...##.#.##.# -...#..####..##....###......######.#.#.#..#######...##.#..####.....#.#.#### -...#.####....###.##.#.#.#..##..#...#.##.#...#.###..#..#....###.##.....#..# -#..#.#.##...#......##.##..#..####..##..###.###.#.###.##....#....###.##..#. -.#..#..####.#.#.###.###.####.#....#.####....#.##.##....#......#.####.##..# -...####.#...#.#....#.#......#.#.#..##.##.##....##...##......##.####.##.... -.....#..#.##.##..#..##...###..#..#.#...####.#.##...##.#####.#..#..#..##### -..##.#...###....#...##.#.#.......#....####..##........#...#..###..#..###.. -####...###...#....####.##...##.####..##.##...#####.####..###..##.##.#.###. -...........###....#....#...#..##..###...#..#.#..#.#.#....####.#.#..####... -.#.##.###.#.##..##..######.####....#.####...#..#...#..##..######.#.##.#### -.###..#.#..##..##...#...#...####.....##..#..##.#..##....#...#..##.#..#.#.. -.#.###.#...##..#..#..###...#.##.#.#.....#.#.#...#...##.#.##.#...##....#..# -.##.##..#.#.#..#.#######.###..###.#.#####..#.###.####..###...#.#.##....#.. -.....###.####.#####.###....##.##.##.##...###.#.#.#...####...###....#...### -##.....#..#....#.###..##...##.#.#..###.#.#..###.#####.##.##.##.#...###.##. -.#..#.#####....#.#.#.#..#.####...#...#..###..##.######..#.#..####..##.##.. -.#....#..#....#.##.#.#.##..#.#..###..##..##..###..#.#######..####..###.#.. -#.#.##.##.#.##.##..#...#..###..###.#.....#.###.#..####.#..#####...###.#.#. -...#.#.##..#.#...#.#..#..####.#...###....#.....#.....#.##.####.#...####.## -##.###.##..#..##.###.#..#..#.###.###.##.##...#.#..####....##.#####...#.#.# -###.....#.#.##.#...#.#...##.##.#..####.##...#.#.#####....#..#####...#.#.#. -##.######.#.#....#....#.#####.....####....###.#.#...##.#..#.##.#.##..##.#. -##...##.##.#..#.#......#.####..###..###..#....###..#..#########..#.###.#.. -#.#..###..#...#.#.#####.#.##..#..#.#.#.#..#.##.####.####..#.#..##.##.####. -###########.#..###..#.##.###.#.#.#.#..##.##...#...###..##..###.##...##.#.# -..#.##..###....#.#..#.......#.##..##.######..#####.##.##........##....#... -.#..#.##.#..#......##.#..##.#.##.###..###.#....##..###.#.#.#...#.##.#...## -#####..##..##.#..###...##.#...#.##.#..#....##..#..#...#.#...##.###...#.#.# -#.#.#.....###.#.#.##.......#....#.####.########..#.##.##...#.#.#....##.... -.###.#...###..#####..##..#.#.##.####.###.#....##.#..##..#...#.....#####.#. -#####.#..#.###...##.#..##.##...####...####..###...###......#..#.#.......## -###....#.##.#.#.#.####.##.###...##.#.#...#..#.....#.##########...########. -###...###.#..#....#.#.#...#...#...#.#####...##..#.....##..##...#.#.#.##.#. -##.##.#..###....#..#.#.#####...##....#....#...###....#..#..#.#.#...##..### -...#..##..###..#.####..#.#.#....##.##.#.#...#....###...#.##......##.#.###. -.#.######.#######..#..#.#..##..#..#.##.#...####..##########..#.##..#.#.### -.#.#...#..##.#...#..##.#..##......#.###.###.#.##.###...#....#...########.# -.##.#....#..#.#.##..#.#####...##.#.##.##..#.#.##.##.#.#...#.#...#....##.## -..##.###.###...#...##...#.##..###.....##.#.####.###.......#....##.##.##... -.####.#.###.##.#...###.#######..#.....###..#..##.#..##......#..##.##..###. -##..#.#####.##...##..###.######..#.#.##...##.#.#.##.#..#....###.##..#..### -.###....###...#...#...#.#..###.#.##..###.#...##..#..#...##...##....#.####. -.##.#.#.##..#.#.#..#..####...###.##..##.##..###..#####..###...#.#.######## -.##..##..##....#....#.#.#.##.#....#....#..###.####.##..##...#.##..##.....# -..#.###..#.##..#..#.##.######.#.###.#..##.....#####.#########..##...#..#.# -#.####...#..#..#.###..##.#.#...#....##.#####.#..#...##..##.#..#..###....#. -##...#....#######.###.###..#.##....####.#.#...#.#.#...####..#.#..#.###.#.. -##.#.####..###.###.###...#..#.#..#..#....##..#..###.#...#.#.#..#.##.##.##. -##....#..#..#.#.##.##.#...#...#####....##..#..####.#.#..#...###.###..###.. -#.#.#.##......#..#..##...#.....##.##..####..###....#.#..#...####..#.##.... -.#.###.#..#.#..#..###.....##.#.#.##....##...##.#.#.##.#.#..##..##..#...... -###...##.###..#.##.#.#..#.##..##.#...##..###.#........#.#.#...#.#.#.#..... diff --git a/2022/24/input.in b/2022/24/input.in deleted file mode 100644 index 7fd3bd8..0000000 --- a/2022/24/input.in +++ /dev/null @@ -1,37 +0,0 @@ -#.#################################################################################################### -#<<<..>>><><^vv^<>.v^vvvvv^<>.v>><..v>.v^v>.><>>^><<.vv<^<>>^v<^.<>>>vvv^v<# -#>>>v>v.v^^^.><^<>>v.^>v^>v><.^>><>>^^.vvv^^^>^>^.><>v.>vv>^<><>><>v^^^<.<<# -#>>vvv<^^^^^<<<^v>^>.>vv^v<^^..v^>><<>^>v>v<^v.><^<^^v><^^vv<.v..<^<.>^>^<^^^><^>v># -#v^^^v.v<>>vv>^>v.^v..<><.<><^.^<^^<^<>v>..>>^^>>^^vv>v>># -#>^v<><>vvv>>>v^^<^vvvvv^>v<<>...>v<^>^.^^^<><^.v<^v>^vv^>^><># -#<<<<><>^<>>^>v<.^<^<.v<.><><<>^^.^>>>v^<^^.^<<<.v^>^^<^>^><^^.^v>^<# -#>^>v><<<>>.v.>v<^^v<.vvv^vv>>v^v^^><^><>>.>^>^v^v><^v.v<^<<..^^<.v.v><^<.><>^>>>v<# -#<^^v<.<.vv>>vv<.<.<>>vv>v^.v>v<.>v^>>>^.v>^<>v<<^vv>^^><^<>v.>vv^v<v^...<# -#>^v>>><>^.^>v<>^>>v><^<>^.^<.^>>^^><^^v>v><>^<>>v^v^<>^<^<^v^>><.# -#<<>^v<^^^<^<<<.vvv><^.<>v>^>v^v.v<<<>.<>vv>v>v>..^.^v<v^>vv<>v^>>^^<>^.<>^v^<>v^^><<>>><.>^v<^<>.v>^^^v..^>v^v>^^^>v<^<^<^^^>><.^>v<>>v^>.# -#<.>v<>>^^>^>>v>>^.v^><..^vv^>><><.<^<><^^v^<^^>>v<>^<^>v^<^>v<<^>.<>v^<^v><>v^^vv<><# -#><^^.^>>^^vv.vv^vv^>>v^^<<<>^<<>^v^v>.^<^.>>^v>>.<>.>v<^<^v.^^vv^^>>v.>^.<>.^<^.v># -#>v<^^^v^^<^v^>^<^^^.>^^<^.>v<<><>vv<>..^^<^>>>><<>v<v.<>>^^<^>v^^.<<>>>v^<^v>.# -#<><.^<^^^^.><<^v.^<>^<^v^><>vv>v<<<<<><<.>^vv^<>>>v<^v><<>v.# -#>>v>v<>vvv>^>v<^<>><>vv>>v..^.<>vv>^v>>^.<>^>v^.<<v^<^^v..><^v<^^^v<.^^^v><^<# -#.>^.>>^>v^v^<..>>^<^>^^vv>^v<^^..^v^^^<<^><<>v^vv><>v^v^v>v^>v^.v^vv>^><^>>^<># -#><.>vv^v><^^^>.v<.^<.v^^v^^^vv><><>>^>^v.v>><>^<.><.^vvv.vv^v<# -#<<^v><<^>.vv.>v>^>><^>.<<>v><^>v^<>>>^v<>.<>>^><>.>>v^>^v.v^^^^.<^.^vvv<>v<^v^v<.>># -#<^^>^>^..v>v^^>v^.^>vv>vv><.>>>.<^<<<><<<v^.v.^v^>^..^<.vv><<<^v^.>.<<<>^<^vvv># -#>>^^<.^^v>^^>^>>>^v^v^<^>^>^v^><>.^><^<>^>^..^^>^<>.^<^<><<>><>v.^.<>>>>vv^>>.<# -#>.>v>vv<>v^^v>^v><^.<^<<<^v.>v^v<>>v><><>^^.>>^^<^>^>>^vv<<>>^>>>^<>v>.^^^<<.v<<>># -#<^v.v^>v.<<.>vv^<><>>>.<^.><>>^^>v<>..>^<^^v^.<^^.><>v<<^.^vv<>v^^^.vvv.^v^><<<^<<>v<>^v>># -#>>^^><^>v.><>.^>v>vv>v>>v^>.^><^^.^<.<<.>v.>.<><^^^^>^v>^<><v^<<>v<<^v<.<.><^^>^>v># -#>^<<..^v>.v<>^.<<>v><.^^^><^><>vv>^.<<<^v^^^>^.<.v>>v><.^vv^^>v.>.v>^><>.<^^><^^>v><^v^^.<.v^>>><<>v<^.v>v><<<>..><.^^.>^^>>vv<<.>^<.^^>v^v>^..v>>>v<><>^.v<.>^>^.>.>^<^<<# -#>^^<.>vv<>vv>^>.^^>v^^<^v<<^vv<.v^>v^>>^v<^>v^>v^<^v^<^>v<^.^<# -#><>^^^.>><^.vvv^<>>v>^^<.v>>.>^<^..<..^<><>.v>^v<<>..vv>vvv^.v>v><>><^<>><# -#>>v>^v>.<><<>>^v>^^><.<<<^.v.<^>>v.^v.v^><^>v<<^v^^>v><.<^.v<.<>>v<^v^>>># -#<.v^vv<<^^..<^<>^><>>vv^^^<.<^<<^<.^>>^^.<><>^>^v>vv>v.^>v>v>>^^.>>>vv<>^^v<.<><>>.<<<^^>>><# -#^vv^><>>v^<^v><^><^>v<>v<^v>^^>>^^.>^.>>.vv^^^^<.vvv^<.v..^<.# -#>><><^^^^>^^<^^v>>.>><.>><^v^>^^>v>^^><^^^^v.>>v<^>>>^>><>^.^<^v><>^<.>>^># -#.>.v<^<>>v.v>^><^><^vv>v^<^v><^v>.^v>v^.>..^<><<<><vv<^<^v^v.^><>v<^^^^^.<^^v<# -#<>>^>>>v^^vv>><>vv^.v<>^v^^v>^^>v^v^>v^<>><<<>>v.>v>v.^^^<<<># -#<<^v^.^vv>^<^<<<<^<<<.><>^><<<>^>^>v<^<^^>v<>^^>vv>^v..v^v^< Date: Tue, 26 Dec 2023 15:54:22 +0200 Subject: [PATCH 103/225] Update pre-commit config --- .aoc_tiles/tiles/2021/01.png | Bin 9843 -> 8894 bytes .aoc_tiles/tiles/2021/24.png | Bin 9258 -> 8526 bytes .aoc_tiles/tiles/2023/01.png | Bin 9652 -> 9318 bytes .aoc_tiles/tiles/2023/02.png | Bin 10039 -> 9705 bytes .aoc_tiles/tiles/2023/03.png | Bin 10882 -> 10641 bytes .aoc_tiles/tiles/2023/09.png | Bin 10457 -> 10157 bytes .aoc_tiles/tiles/2023/10.png | Bin 9253 -> 8927 bytes .pre-commit-config.yaml | 4 ++-- 8 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.aoc_tiles/tiles/2021/01.png b/.aoc_tiles/tiles/2021/01.png index 0e8688a29988ab9d5fdc377334986734b4390cdc..8e0f7dec75ee13445ff1e5b6a686f292478e2e0d 100644 GIT binary patch literal 8894 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 M07*qoM6N<$f;tLymjD0& literal 9843 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 XQh7Z(NP${R29T3d{#GVw`0M`wH&vm; diff --git a/.aoc_tiles/tiles/2021/24.png b/.aoc_tiles/tiles/2021/24.png index 691247e1583e5ef5a45e6dcd5461446fc0d9b1b6..499225423818482069c4542dd0241f06d8c1d356 100644 GIT binary patch literal 8526 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 Dem}!d literal 9258 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 diff --git a/.aoc_tiles/tiles/2023/01.png b/.aoc_tiles/tiles/2023/01.png index 602cf348d8170d05a40475a8bfb7c61959d92c11..2080879eb5f3f4027709033f2ea179f4ab6df271 100644 GIT binary patch literal 9318 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ⅆKV>aiu(4ta-OT%qkIVOzZk>gm%_T! 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 SK!lVIKvGOrv_e?l|Nj7$nJLo% diff --git a/.aoc_tiles/tiles/2023/09.png b/.aoc_tiles/tiles/2023/09.png index 3504c0e0ca020b3dff100199b6c17708a75dbc20..b5011bfde76352b9310d91deb92d79b0c88b82c6 100644 GIT binary patch literal 10157 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 AdjJ3c literal 10457 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

*tx@6=k^ zRP!vvAzPIY+ok^fKSzCsip)IXiEhLS2C=XxeA$u(`R8PbWq!1{YTv zwr>z7^Z7Xx=Q*LteETngOT@FfT(!KL)Yl9K5LRDzqugEF|5J-M{BmGmQx!Jy3ZRj{ zI2mUaYzV8f)H(VFxwGn~=PWB5^$y z^dJ|Na&##H^ooM?Beuy^l~65@K-%j=p5E!>$2Kn*cyWRf^Z|6W1N};H`ZCu6Mn1k7 z>H7M;3~$+cb||`2BLeNa?oIOLwu&2o07(oZhynM(?=E{$t(c6uTmGr(67!LbIKq(M zh^6t3k-{fB4>?U#ZWR|@&M(KtPt1NeD#d8f|IdZ~cLKys^4E=##StZpYm>s6?m$0KEGmE2##%55rC~qY9vTBvna(Bt)cb%n@ z*W{zPRM#S+xRjK!ue$9=CW~Q+-(QAJSIwpv@4X8zh0RSmr8=B|Y^3BO! z{Lw$gux;gM4xmw(M%z&S_XWIH#ENYwRdOHkr;WbJ$R7Won*Zu!&SxS^DfgS0w082$ z_sm}2m*2O>wSex*(cOivO0@AY}_KcQd(^2n+*S)u)p2MboRZvrV~cm zWF&E;w_~9hpAUdL@20iR452RWIW|7qhy1C;hyYIE(60fxG3PCOivfu#gv+fo;p-z! zEzkl;`T3a|U7{e}>DBVF7nu?t09@`Pf{Br0`~;OW9-47&(gAddTb7ZCM3kKS1uLMt z43i}VwIy*#pyGgUxC~3G=92ljvd}cw6+XK+QfX`0l#~b;@E`afJoj547?^cw5lU5wwSad)rY9k}@c+pCHt+ssy3|yICRasT& zpO_xnnL5Mpv-)G@acL&!n>4HrmDNTwQ{OkZIcbQ=;p7C?Us=DnH=iF&#AA6HbJH0g z=ZDefUDl<-g<$`~8c*0wicq^;)f+i+9_ty)YWtL#Wk0*U)@|Oc%|3fvOB60CNskCf zvUX;w-~xaVfj`BU2QZb`sTrcLr^?zC8`MEGYw6`=Q`%Y1xgG&Hd!pMT^L>_`te$?v zlWyNv4>J)X(^ zzW2`M7)^Tcq@UMyzyd~xNBzG}f!b_6k<%Z)p(9mZID+D_lY}mp zZfTfyD=xO|8^J^jdn?eUQ4d+5OAsO)P`dmT0E*BG%q&K2zO~tYYeNTQ*B-_VKnPH4 z_1m*55kZ$59rBm!qlQk_oRwxbr(N={a*KXOxpd|*Y7Wl z@IW)4*^WzG(MiVb0)&i}u}erJpr1b_d@Pg?yj3=qw@EXG4L}H`?5c*ZkRFwz&#=oP<`cb zW~vUcyv~qX(YL?Q#1quPry|SDxSrRXqwCT`gTo?cFsT#F08ifEpm+%ru2?4}>wbfd zr_-$K&WS0N&>taSQIF6EVKwsFWtY^2gK@ua?AM+y&FT-vc&l0qC*L}cewbz!Y31y) zT=e{D4jA`j%Fo>DeUlMti=*iMPN5Z-M9OZ-9&ZBj;JfZ)QbQVyACRk)N4J}^{gNbL z$^b>7k9c>$Jgo-z;wI&55-Qi!Ne>#|Q*mB9D18I`l6)k13szeKcNX~N(K}ADo-X&| zg!{YvYK)X6WM&Qdr&~5q;w3$Kj|WgtIiOG_6)S=6wjp~)62H=JAM(dm9_pntO&5)P z`fQ>Xs;cj5Mw2Qg#hDP|T6t&fNjvYjfNt(tQ}Ta%(lIBm!+WV?dld-28qdEC4!eAe z`Csm*xx6r$CO2IKJ+mrxos0IfSO(Av0yxs_e*2MFJzTlU590`nb+y-UY|dojAMwvQ zOK`OoDza2HZvJZAq=w>UQ>pT|DL^hg6OwcCJZ}OywNYxL2TIPJRXf#G z{Y>M2EaeYn(=|jv0w|D;6C1XsFyDbMYsLimX$b^x$zy3eVQb2)moVwj<51=PglUzv zFjCE;J{PGq71T0Z7_a7=No&RWVwQdKJh;YfqoK;0yQ|#+6-4vld<|@SKbQHjABXFk zmobL2>Wz>MOt89d-x;By!K>^8ZkFKOm@5Nh=`2~&Xw#QXvZ z?sHN27p)B*3cB=`__T8Z1_#e=K3s=dp1q^theD<3D8*sZi)>+@FtdI7v^nOrjAS5y z0BB|Bcy<=#>@(=uUqx3Pawq>{PS2Y9`3Jix3Kh)~r1{`k@fNUdvbK(`dI%lruD(mn z@!mTk`z-kUVny&>1%10#J5%n@MMD0W{7t-X)5Lff{*bHs+|?#X_Rc}5v)9B!==wGh zuWgLH3cMz#YTa3Q!^`g3bk!K|vDDKwTfICutEg4aW>%qEe8;1kbNFK0x ztda$~%j2S&+HhXC`C^`)6b{#OnEbAP(&S{>gAT{fou^H0EsB z4InJ&WVaXK4RrfCq(xTg#Mi+AA*`fq?z6FwTM5~F`a&-15URlTv5>GYF8w{ZPn;Q{xjB$QLf#%HLe5)g( zUKxT91M(qV7bjJnHS34#B>qj0V+*uFsThTN6H&np71HTK@-I*G3FQdsw{xb~t8n~Z z9twi_z^cxbY~~os?2)nxl;&YLbyNfGNdzO`uLuAjBp{^nXJ3Q<&_Qdo#sS!O)CR^} zV+vZz_0T74`L*3Yu8S_W*$g&7w{7L;BFO~Mo4OJoVK_j{s8Wqxv*d2%p`}fU%g?(M zF~?$N?>bz!!>uSTwXzy3V8>PRKAV~FjXk}Caz+7e!LH12#@lTE>Cm_#Ut7f&p~%{o z+NNDcyM@ms&{GPBYQ=9s%wh5$7%rR732!-13!ZAc;djsSA{I~*oyGHWMQOKQUS4V~ z@xMryKB`#KGp=rzKv_p;Q4W2V>m2C3@~P0=wVmmRO$Vg&uQ(lD7n`3B_74e^!jP;K1hO06=Fe$CbaLB=y57(7|(u>Q} z+EPGD>%5G7OPV%lTr4LUy^;EpJ=7h~P%xnVSE$Tjg}2J}1WOUa6e=~Lf{m9%d;%7p zszIp6@oP-@CQV>T>9EEnd6qSNZg#@v#866Vob3%9UE;*xWuv1*6Wlg zbI`5%|0FW?_C@4imm7@K);#DJOw~Df&63fP?nIKH=CXn@j zt+?t`*p3r4rHS&PZotX~4oJ&ch}Y`oTlj0}RG2JVvzWDm9vr=dy80|NR z-AbGftZ~fGv;7d{ z=(|87@TENfySZHr&az*Y>+0iK4lb>+Nn_(bbnP!YlSUlgOt5ODHVad;Q0DakWI0eL zRyFMch1OCB^GmhEy!?Zw$V&xW0|Ecd$Vc|sj(p0AO}B5Mw6w|~HiU4`9}Snum@JdY zkzSuFpt5!gL&+1|L&b;~tcA!%X$@VZ0MNtcubnpb#cLP=txUn<##sCSF)UaTuQFT9 znm(Q^IgEj?Z6;F2cc@_ zk77cJu^Lx+lLo>)7=4r!%TOP6b?Vu4KCL?WYY54=Tnx)g7-`0t`8sl24iT9U2L?E+!`cIit zTMgYj?#>PDCEx%+nwKpUA2KAg{O}=guk-tot@cZ8n!w3Ffjdl-vyntdepU}ktK1j1Q^xC3r`rz9Uk#Eh`*0uxrZR0&Ax|I@x@vunZd^BzH z?RW#s?Kw#r2HjBKRabPGwK{Vct`23^^}}FUsOOZRTZ7 z)(|-R9xPnzz0qG3u;-0Kk%#;@*9TSiw$5^15yfHn_Jz+68Sv+qR=n4fW{&Kmi=98O z!!}DrLr!mKu{6_iVAmq?j_fn4A+CtIw_-2bqX~Tq1dAuM_^ZBXb`=v%-LXXs*)078 z!Fsf=#Ul0WI)P zCckuvq8lwQ%oSp+PzuUG)fddJmfbAb3Ul-s{WgDAuNgRW3G*eVQ0rEL=l3~rle$)< z&6FcdL407CXKAw#P4Pg|B?=Cs8t2KpUSR3g^Zk0x-!w2apa@}KxoXqj3-`fQ>p@$Q zGbnHVT#RX!hfJ$8Ay%=Q^Sp7j`{$}HV&+7@7y;m|4?Gw}mG25o1x$Ui#!SM7nG?M&Vz7~>#7aZ)FE34 zZ%-<4WTyV`r~Q}-r5w&l6hI}Is~s~DJ)Yl}%7g}&sTLiVFxG)BW^|7r9}7#llLx=) zHgz|>fw|5A$C#SNIr;@W4o)+QAgQ8y1ya%ev0&zojBc;*7cc|&^B21QVyGX5^?ld6 zP=KH3wQi30?enSFQ()6Ac}6=N8|hcX-g(o_aw@XGOKbqh8hQIIb>0q>1GP|ef9#T& zkTVws2|OgdR9b|j{f;fF(%2ecelB!?k|(a(Li$jN^7I#4_{wN}qRxbcHCaUaMTiIUa8h)6MQ?Ye!D< znc)Eom+$Dqsae8kAS^>hqx?4PAHLj8OJ^1h(o zc$Dob!_GBx`4Gh6XbEy0+ZN0!HK&OR^ zw}v5)dff6oyNuLNc~M%sqtSA4 zX1M2h?~Q}>R|_(QaOg$LM7lS>;>Ju8grshcZo^wCmzvKNPmUo5NiG-AYrP-39U`afk}D^gltEr+OWbK7 zH|v}r-hLUL9O;tIcU61UBoHk&UJd@PdZeGJ6%gaf!k8R^(B z>WUU{3kUAL;zrUX?IuNiC7l*`h4?r zMNZd1yP^>yv4|Rx;~`03&<})ojVoLt=yB6nkVhEvgbI?VgK*rfiAk=GXPnNq)hz8i z+gtUYT@zpwVmUa5I%BG((4lFPR(bAvW@}(H+q#CW;Uq(W6P84FQ;$&*JK})sAlf$b ze0C^9X2AD&Jd{dUCI9)Fj$WF)H)$zt#r%NikoDbyO}~{(iz>>^rf`vQzZC(c=QHBB z2EJ98fu3hpv7i~|p9@*Ing8q-O{AmY`REmE(C+nv>={;Y>Vwl7p*H_q+QO@N%OJld z7gb{)UrYexPorVXqsXhLu{HT?mFI_-Bjo!{m0ieXZ>y@QNJ_+$4k(2$CwAk!7#v%s zFXAE3GNm|Zr*c}i`%}S?o6VX&CENIMD}tWCENK%^>51AB{;Xv&0MNw=u*^U6M*4;b zJb`DP=uuu_5A1crDY|Og!hoQX4by%pb@FmDd!-Al_5*w!F-2rj`&E7*) zb*V$AEFUdm57R(z^iH3((sT8F;SkE`dF(u?4(N6B_Tw&74CDIG5+S8#Ixz$j!M_={ zC(d7_H_r;52V>qgt@gf`ZTIScuiu)=IO=-b5hSbBtl;dr&&NfS8<>X1mcgp6Wf1XnNxh+WW zZMVwpMoZN&>wdTz?)dKTUUFoT7c8NG*x<&WG!nE-hXa7AOkhnuj6{2w()wO!K$wOS zYj8TxJ)5rZfPWFY9&Zrte*InpTA0eG5&9pqxwP6#fwLhzKjHHiq9>t9xMTKV^_; z`iOf{BB$V2zAu`b;mVrU7dRDKWOFkdFfDtZU->Xx5F%`6vtHa#?cqOf)Gq99RWz7S zj+oKv@K+41HS6h}%oFu7spD^5Hf({=o`ED%)bFXXkz`fMU@!8teP;wg(`Z z5t)ul4JUVKg5d)zNO*z#8GWHWcddaE#2-Hdk~%VSIyANCxLYH3Sw#=Y-3^yLMojIA zJtr+%VPhCApkI-Cvr<`73gmy@xB3Hg>nTBO8eW#Y3hCbU9Zg$_Z>+WwguEeAx7)s6 zcFTF>Wsty_I`}|GIcIENCgATB^`LPWQ>W ziAaDLhOZlkpQG3~zeC9V+sS4g2@RK5+Ksof2t-bs%_kkwL`<(ZRP~@Lg;@v5N;Kx zn*m{o&_gOQ`z_Nb_;v&&U?4DCG7k@|J+&H8ojF!$B@p^dZZSEV9gL&*`x5PINwf$n(SFfQx!Qyn-j>;w_?mll{N8P8eN@PA=I%427GV z4!6cde6`;J&GXw%JJREOPxiVanU9CdovT49kzOmQy9Cx4gaQX}fCh-J-((CmB|bQK z2qxat4v@h|BwMtl$;T_J)qj(ZH*WE(RyHscFBc8Mtypj(HGqHU1=njL~fA?eCPJ#^P>F%0nM{KEj2=&gTef4J1KFZptW>avF{oHAn% zGJZSa)@^Bs1WgvRqjS}3z%-c6XPhN;02lc^heCG#@_GG9ta=CqcPMc(R@;+s>OgME zIBGPVJ_TYxmgQWl-9>W50>Ha$?rbC931MIF0gyQG9A-G?+z=O6Ya@fG)3{Ij{# z)R8WRwUj7w1~z3_J9YJ2R)oc$*D2nhP(@7X3x(>M!up+5@8`_A;GU(l2E1M&mC-*8 zR@jk&V%vif+Y9WB4D2eAsV3b$r#OK=*N>xs$}zt=DN+S6t@M_}-PZHQ{8 z_(p+I#uW$^<@HoKWhLu`?$y0FXVqIS>X$=*knvXo^;;0&Pw#e=+sIot^%Hb2SZ3$) zm=Y&*pzbjt@bJi-R4rzz@$jRjriH!&FrnmD#z%ihk^dfqE=i9|yGJB&&@NAmvqRop zoI)A&&gJgTa{PGN6KFsC=S2`wYr)R#nhjSf7xljDHgQgm`|vpMT{;TK)19ZPbh&sh zon>Ug87zn5VKv5KonU|tP|L7reN-5orlfXISpvr#lj&dc*kSqmCPHHal}PQBaeHAs%L#cE3wCERYV;8(H{z4@}!C z;c~rP6%DMTK2xf>wr}pr&{cj3{=3&{C|KOILo1E(?MYfION(o!UN<)3Eb(tCxIh&A(y?G-ciIO9B^6%*R2_)A&Q3=VVsj=rEi$jy4U+HPD9QLY4RlA z0$1KeZk4<4WK_GOYKAprSAJT)kznPp(cpqql^F;lkIQW}Ld{-|!+JIW7Cs%5 zhBjVgMp|*BdcH?#1vskm-~K#R%6A6#XCtTq8^VFG7Jij0X6OdM0sw~@126Em=;5C^-nyP_$o>i|3e}UFuKr z$bkLr0PeGirizBKiThOobI0S_;JWLYO41sQ!f4B%GQUGnh<L#?itZf_Z2J%JMM_DsQrzhK F{{SyzCl>$! diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 35c107c..4014c13 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,10 +1,10 @@ repos: - repo: https://github.com/LiquidFun/aoc_tiles - rev: 0.5.4 + rev: 0.5.6 hooks: - id: aoc-tiles args: - --language-sorting=jl,kt,py,rs - - --exclude-patterns="2021/*/*.apl,2021/*/*.py,2021/*/*.cpp" + - --exclude-patterns=2021/*/*.apl,2021/*/*.py,2021/*/*.cpp,2023/*/*.rs - --auto-add-tiles-to-git=amend From f096904b571354db24337a9a3bfbc293538c0367 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Mon, 1 Jan 2024 17:00:03 +0200 Subject: [PATCH 104/225] Update hook version --- .aoc_tiles/tiles/2020/03.png | Bin 4725 -> 9235 bytes .aoc_tiles/tiles/2020/04.png | Bin 3987 -> 8459 bytes .aoc_tiles/tiles/2020/05.png | Bin 10162 -> 9270 bytes .aoc_tiles/tiles/2020/06.png | Bin 4909 -> 9494 bytes .aoc_tiles/tiles/2020/07.png | Bin 9688 -> 8816 bytes .aoc_tiles/tiles/2020/08.png | Bin 0 -> 9332 bytes .pre-commit-config.yaml | 3 ++- README.md | 25 +++++++++++++++++++++---- 8 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 .aoc_tiles/tiles/2020/08.png diff --git a/.aoc_tiles/tiles/2020/03.png b/.aoc_tiles/tiles/2020/03.png index 4b6c89f96245468d3c52b0cc49952c79e6e4fcf1..103e09de3e5c9429ced067cc806db5560abe5363 100644 GIT binary patch literal 9235 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 literal 4725 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 diff --git a/.aoc_tiles/tiles/2020/04.png b/.aoc_tiles/tiles/2020/04.png index a657c3dbd4016862ffa46c96cdaebaed9e48d1f7..89acbdf012f79b89c8ea1ecd74901dfc315775b1 100644 GIT binary patch literal 8459 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 K{Abx0!T$%$y|S+W literal 3987 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 literal 10162 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

Ubg`JI^X5X|4$}wt4m) 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 T!&?XMJ0awxlq5^U4SfC&-OtT{ literal 4909 zcmX9?2RzjO8$T-JkWvbf5vsGPADP)_WgS^(3uhJCTlO9yGi08#XIyrUu4G?!;YddI zj{m3r&+Bz}ulwHXKHtyh{e7PI`~5soT2GW|piEE*1VW<%SI_~Uec)wHK?>g07k`>S zAauJb3bF{V>~*BC)-@cf8UGcPi#_+GN$rARks*x*1$=yaLW)#+_M@^fRmYj)PN~uE zrNe~B6$1tgW@Gs`LeaVnKph?TemX3Emewi zigXyST}#QxcprEkP^4o|uaAfwj(09lkZ52FJK> zO~w%lt5wz1tSl`H-o2X(Jok@NlIJ`=K6akPPPpoOi7A0?RY{0ML78!Cs;Z67Gnq+A zvV{tYieV8E*K$JS@(td*5?|lfy$)5>(D*WtBS8Xb^;qX{mG(b=z|CD8cz&j+sAwGw zOZ_$b!50#ga#!>6ZOJ!qbu~2!&kg3384J_|rT3S1`d=?wbW5Hv#wiKg3>T_Eg7Wh6 ztZ?yMckl9~s%mO}O}eAJ@vY_#H#b>0Jy|>g|D?}B$>5@cvT}q`1^2a7)uODdDS}zx z`tq_e_qnGP^?K;L9LIEPx4zDvhGmIYvHu4Pm2Ba#-3XB z#;T~RJ32Zp`oF_qORw1eJ+F#|_KCEa*&H}Tq8Y2S9|IGUYCr`V{Rxj3VW1ux8*BCa zU7R{HF%k6=ci9kZhKlI@R>G5i&p})J>KKjerMeRb7nhQNR5)i3xqyJc5;5NB|68Vu zvhIy#EZ48#&;_VFpipOLCoaM^J&{*qZVGsKdeYL+6fJQEEgS-%`l@t`)kz>dIGnGq z?})4T^M70O?Cy!WR%P;@BUQEEmKyT--B4js5ecNy^n=gN(iiP_N>^7_2~}oI&Me_I z`1TltrK76Vjmw-`3ENpC*Tfh6V?<5QyC&W!5hlBFp>hQ;V8=dwZ}{ zn5bw|e!grKfiO1aG}H1>M&_+yA2@azKhg++C>&XNDULKWoT#M}7=XV~^YeTKj{G)BVX5o-%SHL*Qst#sZEbDq-@W;KLZwhh z&_s&+V4m#8#s)%fefs^*>CsN(Qc)M3FJG|UuZ&Ts`=UY^9C3-)aA)Avn7QDChYuO4 z!+U#s-IfRVOqvtlG&MdHh`N1@DF`4Arg#p==}fvvYpDDxh!5X)#gau6T&y2x7x{ z?<`dq)`hox4ra}j@@)iP0W-)hMb!Mq#>U3S=X83wl{PbZuC1@1mXqVZI?iV#j;&t9 zz(~R4 zr>T8FdP(;ayK2wtqEFS2e>&mt7t22^&Cmn~2g{rtzH`^R1cAfhhd&}%$!M5*lE`}} z4`zK`@M(PdPw64%$Ga;%trT<@S4dRe-*M7f=){NK_x(b_BPQ0Im)9{j_f}MhJR~Fp z3WbthxL_C`h+6|gekY!8j()_@#Dt<0n+Xk ztz-EJ7=VbJn&Gh;I6fB_*Zuqb{~cU{Kx_xHWj_fV+T}zvIxedS-RA`y$s*ygyFQgJ zD#S@f&5)Rys)$^JSULImor2VL@_Z^5|5nQPhIIRPG)GV&U)J%mI+RC5B&7w}Rm>pr z>~lEHt;nx}?xo&1muG`DvOLVRW)X~c|^my<)l^yK71S|z$n7OO3~XMI*Hx+7@a z7Pq#x4BxwQ4S&!>ApDM3O4MEMLcSkvEx5inDMO$U=nN6t{5HYui+O_~60kT&b*u{Jo9V z-~7my>unuCubd|9`w_vTMro==fCrF`jv49cgvka60c1Bgo!%a?)3dBmv&h+ z6p}|+rGi4AeaTFH`}Q2{(KX$1IpdnzC~qVha-TOjmC28UEF&Ysb7NX)&p}UbtkG#I z5xUqMY(G-m83QUZV1L3k5zUc5WLH~PM?-c&xqm(*;hKnmk`0Tbmtb;Cer@e`$=iVW z0bMOEEi*G(v!xh;Hak?V?>NSAlejk1n$FZ03SG8Gl6VWjc=#xi4A&;=aE`a%4ZTT8 zdG%bLVSiXnKxpIx7ORwSo5nD*(_GAF_ui^z+Gs7;bC@1UCTk3Z-zCZleX64;0mr-c z8v|ivMnOo@1zbYOMlP}UW6aI6ayqz}@hY@$O2Ysi!>_8U%0?_0L-iNA37UV1`}x!E zkdEJ^xkLSB*EoG*6aMSs!ooYPd*7=Bcz9lYH8C<0e=)Dn_gS^5_Gy)Az2HN5LA%E~ z(_Xm(M^sc4qo}iqfx)*#c6mR4e;eV9PV+%jL&9w-bXi$hY3V%}%x8a%(ZOD-$^Fve zI^7Ml#0lVsu&V!MYGt@ z#xXZC8eb5>gq(Dr@ys&x^S8TiS6m>!D6u_7s$jO14Pvhu<~8z zf*q}+MA!Ed4eJjQL)b7jO7;tnt*jO{W?K0S)mZ50YHh#f2K+hRYBiCp;9&!yV_+Mgea6dT;(;9!fn1gURql=j(;%#;g9 zg?GxFpVs;8p_Vx7jVgeogPY9xA0UBJHNRM3ql%4O20G>mc7Jo~qj$U47RT^M zwKU#f3&prb4Jomdi+hRm&iAfE8Jub=M{F;RwB!zh{Ix`kZ*RMDmdKl!m^^Gpp-tAVpv#MHYI{cAix5zj#n_x zssYK;$oh|c=F0kmr*wg*TjYN1i$hWvwzZ<%SRBnZ+;MQk=;>oqpX`G_CkJq!x;BX;IFAn)X4xQS(ABA9u z!1Y#F3-%R6rj+pcD^Fl)_mFf0u+J;tHWCZj|@W!TkI8?~fE~yy69>otXO6l-=>FX13?nPAzpp zrCEEx?oVx?kO<~*3qXfWoY*x`2+d}Hre|h$wztPCkyM6x2pF=)@*{A?=<@O?u_^h8 z%QoSVAH7l6?t1a&vj50NlNN_efd;NX>3Q`Prnsdz(b@0M9qGnZIgO8awbT{;;YQsXEA69MCsiN;BiXH-|Y0}%SU`?*?nNp z5;va{BSVy=r65n2WnU;6uhykKCVdnrEC;=X#g()~*+X<}sY z4Yn|s?ZC?D!}7xg|FiiR0njwyvW9uv&d*LXrH^_LglC^72L=WbWX|5WFX3Q=D=z`8 zrN-lZ4&FPi^_7NBQL1{7B}g!`)x&A3k>>s(DRr!pmA<~dk`fsjP4RQ@cyx4hq(syB zpb`RMihH*AYi!es3Fat{S{h9IhPd<@8e=Z?{Ch_-mzo!?RYqx5mFANtO6w%{f=qEM zD=UnQjQS>KMy95@uV24h=%u+$nEZi^)idTm(0`X!i|B==^e3mJ0Lv59LiHN3bmQsi zX?8YqykdUoI4t$k=qLgqAVY&{IL>lud-P)dBCbo|vgfOuJIZvdb|u15%6dWa2E_&^ zyDN2eLj{M2UWF7K5J;So8%S}m%*Npgwt|L=%DC2A#nF)$Ewgj>=Op4X3sAk#3BFs! zp*Df-S9cKH+GWr;bZJLY3=IESbcF)>k7E?!78D#DJ=L_ewe|P^)8IfD$bO`2V&dqL z_w0Rx|H*!ir1v&(&49a_ivkZeX6EPTsc!PWPD_(hinFCp)0%~&8+(dj9WY*m{(F<# zpetscQLEQd`xjPLR-i#SC~HpJ)agW3ynQ>j`J?+}Z*`eSR9wrob8>QWcCIWhFE1-& zKe6;OEv^pTdokjNnAfH^j{`kaY@{+*c*aE-)2+X;{*~%N`DXNvp<>>Yu|-0q&E3T! z>6(i&sZnIPva-C^MO`03lX--p+edIS{d_UI-mUuYN-<0*`;&rvlh|($E3WVJL>ykc za(*z4ZQoMrL)v=31EnJxW(3tUmKzgUyK!%|c3(j+Dwwb)!KPtMI*Hdcuq?H)T?pId z-IR8pzAgZx@I9hXqi$Gp#KO;D!U;hR4-&(;!i_xsGreu9)z=U_jV;ZajN#@L8m+C{ z+TO3&8BC*JSGG8FC`ChE@ zws@5M{~6BJv{#0!^9{EI(yN)j8r`g#0V5kcd&S=wO*+yb9`$b;#M|X+{%=53M1`;U z_ghm|HS??yl{d0PxbvNHwr6XN&X0L__^dMkr5Av*T8f>S$4d_%C@1K7?J#JIw}ro`Lxb_(tt`_d zIQjX}D+31BzIZ=ORk<3P4fH5T?KpGTTJxnViwu}h);~|J>vVrcSo~*pW~Yg&hc$*h zDmt24^tDjqkAq*syu7>&3=By~0#?_74v1?d*z+i{Cxe@3E{hr3-AIuCdjg)eXyje9U!&C2@0WE8SVR*;8>N9(_RY;`kJQ~xGB9v+^_5`DL$%?a5U>Qup3UnZ|d?Jmt+ z<11{$NS(tXIuj110D+O$__AbaP{4`9Q&##HnEpn~c4>x|)^&J`;hsc{6Y0v6fSDMpKw~qKoICb*3Z^kj zW3~pJN!9oBlN}oV7nJHZer>$kn)Eq4d_G%i-?!Lo=+3#VsjY3?=<-}cgLp`I`}c1l zAt3|;_WAaOrlFxQBjc~>3Uj&seAV=veKS8sopr{i8X8g}*r+!Y6$jb_(diio2?=|n zskr(07U~>m?)h?M>noDHNlBqRD{5*ILM$ybdm#`a>5I`#S=;t6UQqMdP4~w$*4cgE z-(8lh(9X@j9?lJO==jv3mxZOJueT;k=H?72jUaIUp~wGak!n4^gA?4?D7atK)HK)C zg?g%|q2cnQkI-N2iGe|r!=lKbkDk8%UOFO>npTs7g5v68$9I%Lz>6o#NruvFc3^ey z-^B&epq_w+rq%Pv1`Q3ZVrr#Y+t9E%FYi`*V?)FD&d${~|C{^{3qnpmLJJC*^KN9O zy3x?k98P`YcfbmgsNj`0_7$SWzaTkfE&B8+)M#Nock}PwYI1Tiq)v5txmc2wg+=wi z#c12}GBH{K$0ac_F~5d}(=Z}NDOsxgW(^iiP0fj~U$3`IUpy+S*!wfB##zZWU>l z$s9~hOaui7cbw){Ryyr0G+SC)t}{ePwNvoFnClF|f6hapX9y9tHC2X=5b``+|6XN9 zFB9pvMn^|?eR-`qXW!SaM~8=R(r@0p`D-vaFz$uF*a%fF)}`Ca-HoyQuCA`t-k1R; zI?}G$fnNvMSXg<=A17OVeRb~DG(UX!5X45h1u_f^HGqUwtE;;k;+1}lQ6)ueK@Zjj zfuMCp@6yiln=JbA<3~b5!if6O{+gn%@74ak(_daDCX8k@{M^maY}u^g4+#kx#>O$; zn(FE+P7T)0w=cRZMkic(+=Yy!rMpufyB+`j&i!h0TqS`;FclQ@OxWv~@{tp28b$x) z0z@>T4PW#hZNZJXy3SJVSXDD!$U#_sdHMeC2(qfGs!^=5&u%+S&CT$npbtE}ysRuN z-@bhl@&3!_;5k$hrJ4X>q}2JzeR zvD)2mkQ=kHJY_pRFPK$sZf*wdc2G`KR8&ssnQwbQ@zv?DubknaWtH2`0u>ES413pl z3Bj{x&mfo}*qDe}n3$AO1xZfP;XcK+weN_LQrhu_>>aF(jCD2>Eco~_IXO8$epoQ| zc6orDDJm!|wD?3M45mCffVu&pkdvmBMqI=sceKCK9r0@@6)p@h5(@wGr1~-PRw{$$ z-rgQO&ii>aH@A}t^Io`Gf4oPW&xnL1Q7u~r4Hfm@#mQnh>KOcjL{d`nZ?ZzJjje6x zGjmumY3ZP(q@>*3XAn%{;wb6EC%e0jj*g+Bp|ry0uPl&T>+5YL5~yA$f0|(z>V8UR zQ%(6kTU&90I`&w^eOK)FH&pa1m4X{wO;{T) zjUPVD{OFHQO-WHwR_^}5A=cd9)@CyJo)h5*wTDqP&7j5m^!N8Fiw#H%$a%42mX+yp z(@t2smn<$@quWwOP64?E1&<)YbgL}mvhtrW!G^%NI$ykc8-G0>D+WG@_#@Jo+NaoY zVcQc)4w0Z=Z5=mw2-OTy^Xt%18rQRMJGXVYL%-`!lnBTzETp)5_p`@=<>B|L!I6=X z>1HoCDXBM5JjcJ-KeyK(A-zsF$fxf-9cgr$exW8HLlrt~US3|wVci{HzdjTeHk6e` z&sV97WvRz}<2SGd&jX91pvPWKhP-8{Q0S*YH83)=ySv70$H53X z21a9$1`1+sZf+>`F}f&y^FPo$hcCA9_g}yG?WQ?y1@3{?5izP*SXySWQVO~6_R{!D zB@vU6(epiky7z(KAuS{%Bsy9JCJBM^^y$+$;fby;KsK{)V`GqRQQoPKob#%x4*XDV zhKGmaQ3;~@SP?8?YJsLcRaf^s`J>#_ZqaVR1uwk4y} zW?tYl?*S16v4WZrEs?3CuMe{=Dkz{5@xD_K=up>U`IW-U>)d{}7J~IfU+lFCTXNh{ zQ&ZcWdjI}TcX=&*k_npPoowc>2%L`zGqyb^) zpE!Z-@A>R0WXkVUL>tq2fy8fQ_cTM`6$HC1lS!~@Hp^@odwg@TC z&(A+KH6=OhL{Cr8%Uc8Yk&%*OVrC9IijTvRDqPZr8Aj6Mw#*Awi^_AMHX7aSaHeb;)A``v%pLZs3;L)FsK0`>jg`Jz3tTDnkx z66STIr@$vBy6%{o!oKIxcz9&lOx&`z&J~G0D zM7Fx`tz=4uEO|;W5d+VA@2zx0^&J=(h)+s7IXoO393-}7;sesq)}9K&CcDRAz^<*T zT2@`1(7Rgj>62K*k6**-b+xrXrotZks9HqyIuH=Sw}z-90V}_L;4OOS>R6c><*e!H z=?TI0{P}Y|y$?D!^>7M{iePDCsD-ggY^F*LSp)4}Hq0?U%@fl+n<&zTz!BF!P^i&Y zm6KbatwVZ$=H=s?93O`|9?J0HvD+WuUBZ|C&N+0RfgnDdZFsU(6~tH#bLY zy^BpoH(b`|lnPTF&4gZUYUt`FKVjnG;@Uqxc6D~{ywksAK9V60Qk}1oDnaJdU{KKO zyv{!wN=Q#ohH@{~rj9-F1mr&}M56Bu+x&y~)uj)j4dykwVua%1Fjv34wKZF2EXv53 z4}n)=+$!?;@m(#r?9bK~hyVp8rJb4C%AY?&7F@E?l)6uz_|d5YPC7ZA9ZeaJHtk+I zTBHkmX=!SrrOpCSnEWOREi)=|5lofI&TLK&%c!jUwzw$D!*d9NZO8W+Bs?R-1bU^* z%S$;P!hrX}UbQ*=&G$_X@4~*SCq*3XCHf~3&q$}QItr+!3H5*ZqE}(o4P5B@XO7wC zcM!t9?z&X%?6jJ+2LMDtW-QLn19vlWa*p=(VK^ryCzD6Xc>Vj!`M0qdYN^lpF&d&= zhfQC97NGoib3ze7HY@8!!ND_PQ`^+kRQVFrN0dWZ(h;!*x1$0A0?@EYW1afOCni!k zOmFO+y&naDV!X|OA}%R;v!xX&Zlsq{1g_GX&!Mh7I%t z0xw!1m*V2$a$d;&Ly_|OJ~sCB?P{4$im0y<-$n3m28@|!rIi&GoP2yTSEwi4#;vb$ zTW4lw%y2SBUAOG`W~Zm`*uRs=9{sVl_J|TMc(ko;36L`@{tR>(1;KH4)9ETJ>)zpv zB6Wt|^`@)q<3Q)SuFPElgq+H2OS&@kfCNNTOIus^b3|Cs`noz(LNd42Z3`4cb#1Mg zYf)InSS}V~>E};N2Zv#^3Tk0b$UYN$dts}gl*mY&u65kS7Z+V&MDp_T(B}Ykekv}8 zehcuprltmxqciq+d-enXHVc1jWF+?e`+C=HJv6kSjt&WQbaX2#t7l1^3qgBe3xeI#({pit((1IPpss#9upI*%yQsJrF!e_WK8=K=WSnhHbv2*; zO!ccRt-*poCXQ`fOw44#SDWw@+NB2lCLCYBe5rLwkRruGVGa zTX}go;9_+LYgp1>Nwbl#{260hzUZiCCJ5C~ITD0l=koOuQX#Qu1Y+n4YLp&4)i~)A zS62QSb(cSMs&``z$czrESUH3q2Zx{6cj)1Ptf5xDdi4t72Q`Nyd2nV%PcW65lvE~r z6eef!GcmmM_Af(aWo1dpz`sWvGeqJ)e*GdU8?@l+-dqwWN#!)ZRp1j2MLTO1bLnPl z(&)+P$r9>vd;!rAW855wywB2!%64r~lYv-$LCP8u3z% zufZ5d1cK_A3^6h@!{YfN8r5{R!I|-&pIw2RpxnkE_!RDU({k1Vv?PuwB|!uzXQnx| zlT%Yk<6klVaQz?d{T_NOj)8h(MSl|{@^?R`86L8x=D~vp0Fhlg|CT$^2Rn4wJbTt% z?}1$db$MY?I;htETYS5<1coy_?RLIrS)g^3tNb7pJy1FW9!|S;Ag`|SQ zRNvDB*c%$29^!p>A?sJCfA`Flf+xURnVp^0*VVXE<0W2)65C0AG z-e_qn9V#JrM<*w)9=Fc6|HkaB*V>mv)OprxzCJ999axiy_gZ<+??6qcrNlyAQ15Z@ z;58aBy!!I}@Q4WMx?6%0!(z{L9>OvaKakSYo!;EJq@Sid_lajNf=(AYfBw zCY=cIEAz`$afFzUPqWSx4o_debpJ;`9%z{F2COYis-K>&GPUyW-=CNJ!Q;H^V*LRwcbt zPNt`)VU6RytlK?%mKYbex6~d8F@4}JL_|d7?Ch*Qi-JI8KDk3i7Gi7#^(05|Y;U!< z&&W1JKG8Z@vqJY1M<$~CK~dZ?E(Uk;P`aq7h=>TdK3rUHHSEOA&CSu#Lzb3IT-?H3 zsRqk8S5~+z`eMOS0cS?Y=Zx4;H_}Ad=ZuG&JN~z4nnG?g)nmZ^ikwmjAlTKi*2|6p zvHY=q5fU!LSCJY}U{fSAIg*tkkI)5g5xjwTxV?ySBOBxGO1Bs-ft0MQaf8z{SXeev zTTsst&$!c zZUvfJS_c2I+6(BmtO^Va3_Gu=CWL3be;-vg!4w&vS_*GG0e%}2e1w8<6i9&{G}2HA zLCeEKY){_4x(5{{r zOHEE5rnVr>U2G=tR&I{DZ(txII@+klhGdzvKf1nNAZ3ZNJn8&!!`#YB_Fq~_NeLTi z(Q0mZ@9MtlKHQCr-GJbt?(g||_7$DCh%eMdXpU{^k*JN$ke==B?Lfugkw}rA z$JRAA>d_Lg>69ZVN_lyB-h_l)9geAjqACHEd1WTx6lDpxtP{ld-~Zgi7!es63Fi`W zXCxbI&&TrO!fO-L(_^{@6HqFn*dgcWzpALHfH~PW1+8{Q2JK;4fgfz9vv|-Xd?W;@rr>0_uP@eqZExF*Z=kVZS1}cI->mh zZveLk3=CmWYeAh6!D6(1L)U{3+S0wfm#(g)CB9Hd9OyI+2@JIg{c^|^8}V-?+JKV+ z;$&%=m!HqL@h`uo=4k%28>}3pZ$m?adM9<9eF@lJMMXt*b^J3$W}{is7V+jpKS(~B z*09C^@`MwzRTjGl&cmrj-k%^FDcBqsuu*DiapPU}TnAZuo%o`E&(2gn@N7Wq1EKr& zU9$ZT5|U!}Yg3N(!O&+M3l1rF##%n;H$_E_6%`e=wNLKKC+Zj_mu>Gg8Dna>IoJb7 zjk~8U1|+dv;x=*JLVHfnN+BGh4J*&sX)|nFrem_&0U1lbf3`UV!DYC zn%u4i1T+iS?dt6{HxM7i)T4v4s8yo(?8S>A6Al14@X|)#iS7%VyF3mi3xwh}^pStK ztLr`-A|hgAV__1!NaXOhZ(MwQ$51k$EQ5C|L=6T9u~7uRk{9F#KDAJvS;akidS>D; z(A|I>2?_|b9f+tExhe%{!MP^zJ|J^eGw%5KxRbN=Be0 zoyNw-P*rpUEjzo4zW&|qOAiQksN$`pk+m32wE2Ng%$=;{(sc^maSCe563u7#_44S72w8V|Y^^CuVA$^da+Y^>aEdmAExxKQ zPp*}_4^OA?rCcGW8A27DIfNe+Yv~A5IyL!vgHrH(VQL65FiPQM+j?`^v?I zl9Ce6gKO=+JHbxKH$h(xR-~h=Yp_u|c>XV)oWRV2iZD1loIkb!8|3EVlJdy;!OCm7 zd&+WTsL~0 zs-dy5v5`@W^Dh;DF~4XX8IAHrccdHAC|LeH%z!!}K#8aH7;Bc* zh74)wv9r?r4|%N?M}x`SeJD+pm0Y(Yq+w+h6|wCn{`~%JXJvJLXaxnzSs(@Qbd}Ni zm9ul;2N5%r2{2DcNNP+wZ-Jc1yY8tcoRlsOQ1!F&5k7cp3Q=79=@SzN2l(?(Krl8Z zU~-iH6~^G<0GdQw=qN+~4Lz-3C(HL^crp+lD~>x*6~U|>gvf|{SOKR#5ANR&H44(H z`P|s3@}9#K+-4}DP-Mu-$*=7@b~sVs5Z{8cRTPBp)x`<;!qVBx-)CpRbHJe%x&yKF z@#8Ay{|8g}^vFGOE$9iz*mM9rfSo7^2(IO5ptkN|({1A*;mVrDfRm9-N$Y{%fSns# zTl~Ddqt-n3_S;~Koa`*FTIg)MZZq_;8hPv#lw6QDtrO6~@hGSVCMG5nk}NB>EOM>5 zhqB}&-RHW4krPz1bye=1Dop?;M@L6MkDtoQdO43n$hC}{+&L`=-xoa1SNM9DA-r^P zScj_UarBFjJu{bL>cxfH-PcDfzxPV)>37@;?nRfaG`ZbjrC9Xvy1%3Sa^Z0#NxR!Z o+Lv?9loLGjpugAux^acy$5wOHAW8TH{*weDFRda~Dq#}vKRq{4HUIzs literal 9688 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 F{s+Uo-(LU# diff --git a/.aoc_tiles/tiles/2020/08.png b/.aoc_tiles/tiles/2020/08.png new file mode 100644 index 0000000000000000000000000000000000000000..da0cf8bba5f2568760548f1d75e17afd6262f9a0 GIT binary patch literal 9332 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 QG!fPvRb7?0$|&^z05exj2mk;8 literal 0 HcmV?d00001 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4014c13..46e770b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,10 +1,11 @@ repos: - repo: https://github.com/LiquidFun/aoc_tiles - rev: 0.5.6 + rev: 0.6.0 hooks: - id: aoc-tiles args: - --language-sorting=jl,kt,py,rs - --exclude-patterns=2021/*/*.apl,2021/*/*.py,2021/*/*.cpp,2023/*/*.rs - --auto-add-tiles-to-git=amend + - --count-as-solved-when=on_leaderboard diff --git a/README.md b/README.md index c72fd7c..0ceb786 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,7 @@ +

- My Advent of Code Solutions + Advent of Code - 166/450 ⭐

- -

2023 - 50 ⭐

@@ -238,7 +237,7 @@

- 2020 - 4 ⭐ + 2020 - 16 ⭐

@@ -246,6 +245,24 @@ + + + + + + + + + + + + + + + + + + *The above tiles are clickable, leading to the solution of the corresponding day.* From bbbb7044eb0d33b91bd6ab43fa719d0cf0a512c5 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Tue, 2 Jan 2024 03:34:46 +0200 Subject: [PATCH 105/225] Add day 1 --- 2023/01/01.py | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/2023/01/01.py b/2023/01/01.py index 503a01e..ca9fb96 100644 --- a/2023/01/01.py +++ b/2023/01/01.py @@ -1,13 +1,11 @@ import re -from sys import stdin s1, s2 = 0, 0 -digits1 = list("0123456789") -digits2 = "zero one two three four five six seven eight nine".split() -as_num = lambda num: digits2.index(num) if num in digits2 else int(num) +digits = "0|1|2|3|4|5|6|7|8|9|_|one|two|three|four|five|six|seven|eight|nine" +as_num = lambda num: digits.split('|').index(num) % 10 -for line in stdin.readlines(): - nums1 = [n[1] for n in re.finditer('(?=(' + '|'.join(digits1) + '))', line)] - nums2 = [n[1] for n in re.finditer('(?=(' + '|'.join(digits1 + digits2) + '))', line)] - s1 += as_num(nums1[0]) * 10 + as_num(nums1[-1]) if nums1 else 0 - s2 += as_num(nums2[0]) * 10 + as_num(nums2[-1]) if nums2 else 0 +for line in open(0): + nums1 = [as_num(n[1]) for n in re.finditer(f'(?=({digits[:20]}))', line) if n[1]] + nums2 = [as_num(n[1]) for n in re.finditer(f'(?=({digits}))', line) if n[1]] + s1 += nums1[0]*10 + nums1[-1] if nums1 else 0 + s2 += nums2[0]*10 + nums2[-1] if nums2 else 0 print(s1, s2, sep="\n") From f74fdae019a2ae8ed474abb8c31e3f33685452a0 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Tue, 2 Jan 2024 03:37:48 +0200 Subject: [PATCH 106/225] Add day 2 --- 2023/02/02.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/2023/02/02.py b/2023/02/02.py index 3d10b4c..ce62f1e 100644 --- a/2023/02/02.py +++ b/2023/02/02.py @@ -1,7 +1,6 @@ import re -from sys import stdin s1, s2 = 0, 0 -for i, line in enumerate(stdin.readlines(), 1): +for i, line in enumerate(open(0), 1): r, g, b = [max(map(int, re.findall(fr"(\d+) {c}", line))) for c in "rgb"] s1 += (r <= 12 and g <= 13 and b <= 14) * i s2 += r * g * b From 5fff9cc997ca2b1cc182f9071af1dc8c3da897fe Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 6 Jan 2024 00:02:10 +0200 Subject: [PATCH 107/225] Add day 3 --- .aoc_tiles/tiles/2020/03.png | Bin 9235 -> 9488 bytes 2020/03/03.rs | 20 ++++++++++++++++++++ README.md | 2 +- 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 2020/03/03.rs diff --git a/.aoc_tiles/tiles/2020/03.png b/.aoc_tiles/tiles/2020/03.png index 103e09de3e5c9429ced067cc806db5560abe5363..88d167b7205dea9e785409e401b3278d789ae7f2 100644 GIT binary patch literal 9488 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 MEUzI~Dq|7+fAGUwPyhe` literal 9235 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 diff --git a/2020/03/03.rs b/2020/03/03.rs new file mode 100644 index 0000000..6bbc1a1 --- /dev/null +++ b/2020/03/03.rs @@ -0,0 +1,20 @@ +use std::io::stdin; + +fn solve(map: &Vec, dy: usize, dx: usize) -> usize { + let mut x = 0; + let mut count = 0; + for y in (0..map.len()).step_by(dy) { + count += (map[y].get(x..=x).unwrap() == "#") as usize; + x = (x+dx) % map[0].len(); + } + count +} + +fn main() { + let map = stdin().lines().filter_map(Result::ok).collect(); + println!("{}", solve(&map, 1, 3)); + let ans2: usize = [(1, 1), (1, 3), (1, 5), (1, 7), (2, 1)].iter() + .map(|(y, x)| solve(&map, *y, *x)) + .product(); + println!("{}", ans2); +} \ No newline at end of file diff --git a/README.md b/README.md index 0ceb786..efe1012 100644 --- a/README.md +++ b/README.md @@ -245,7 +245,7 @@ - + From 3e1dd7768bdbd882cf844d2d2bcdd594706b6c87 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Fri, 5 Jan 2024 23:31:15 +0100 Subject: [PATCH 108/225] Add day 1 --- 2020/01/01.rs | 34 +++++------------ 2020/Cargo.toml | 99 +++++++++++++++++++++++++++++++++++++++++++++++-- README.md | 9 +---- 3 files changed, 107 insertions(+), 35 deletions(-) diff --git a/2020/01/01.rs b/2020/01/01.rs index 59c3c4d..906364a 100644 --- a/2020/01/01.rs +++ b/2020/01/01.rs @@ -1,28 +1,12 @@ -use std::io::Read; - -fn read_nums() -> Vec { - let mut input = String::new(); - std::io::stdin().read_to_string(&mut input).unwrap(); - input - .lines() - .map(|line| line.parse::().unwrap()) - .collect::>() -} +use std::io::stdin; +use itertools::iproduct; fn main() { - let nums = read_nums(); - let mut ans2 = 0; - for i in 0..nums.len() { - for j in i+1..nums.len() { - for k in j+1..nums.len() { - if nums[i] + nums[j] + nums[k] == 2020 { - ans2 = nums[i] * nums[j] * nums[k] - } - } - if nums[i] + nums[j] == 2020 { - println!("{}", nums[i] * nums[j]) - } - } - } - println!("{}", ans2) + let nums: Vec = stdin().lines().map(|a| a.unwrap().parse::().unwrap()).collect(); + iproduct!(&nums, &nums) + .find(|(&a, &b)| a+b == 2020) + .map(|(&a, &b)| println!("{}", a*b)); + iproduct!(&nums, &nums, &nums) + .find(|(&a, &b, &c)| a+b+c == 2020) + .map(|(&a, &b, &c)| println!("{}", a*b*c)); } \ No newline at end of file diff --git a/2020/Cargo.toml b/2020/Cargo.toml index d7e16ab..6db55ac 100644 --- a/2020/Cargo.toml +++ b/2020/Cargo.toml @@ -6,12 +6,105 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -regex = "1" +regex = "1.10.2" +itertools = "0.12.0" [[bin]] -name="01" +name = "01" path = "01/01.rs" [[bin]] -name="02" +name = "02" path = "02/02.rs" + +[[bin]] +name = "03" +path = "03/03.rs" + +[[bin]] +name = "04" +path = "04/04.rs" + +[[bin]] +name = "05" +path = "05/05.rs" + +[[bin]] +name = "06" +path = "06/06.rs" + +[[bin]] +name = "07" +path = "07/07.rs" + +[[bin]] +name = "08" +path = "08/08.rs" + +[[bin]] +name = "09" +path = "09/09.rs" + +[[bin]] +name = "10" +path = "10/10.rs" + +[[bin]] +name = "11" +path = "11/11.rs" + +[[bin]] +name = "12" +path = "12/12.rs" + +[[bin]] +name = "13" +path = "13/13.rs" + +[[bin]] +name = "14" +path = "14/14.rs" + +[[bin]] +name = "15" +path = "15/15.rs" + +[[bin]] +name = "16" +path = "16/16.rs" + +[[bin]] +name = "17" +path = "17/17.rs" + +[[bin]] +name = "18" +path = "18/18.rs" + +[[bin]] +name = "19" +path = "19/19.rs" + +[[bin]] +name = "20" +path = "20/20.rs" + +[[bin]] +name = "21" +path = "21/21.rs" + +[[bin]] +name = "22" +path = "22/22.rs" + +[[bin]] +name = "23" +path = "23/23.rs" + +[[bin]] +name = "24" +path = "24/24.rs" + +[[bin]] +name = "25" +path = "25/25.rs" diff --git a/README.md b/README.md index efe1012..a4f14af 100644 --- a/README.md +++ b/README.md @@ -275,8 +275,9 @@ The graphic above has been created using [aoc_tiles](https://github.com/LiquidFu --- -All of my solutions are self-contained and use no external libraries or util files. I try to golf the solutions a little after getting the stars, while still maintaining some readability. The combination of these factors means they're rather short and generally quite elegant. The solutions expect the input via `stdin` and print (generally) 2 lines to `stdout` with the answer to part 1 and part 2. Exceptions to this are the solutions which require you to read some letters from ASCII art, in that case the ASCII art is part of the `.ans` file and it is printed by the solution instead of the letters. +All of my solutions are self-contained and use no util files (and mostly no libraries). I try to golf the solutions a little after getting the stars, while still maintaining some readability. The combination of these factors means they're rather short and generally quite elegant (e.g. [2023/18](2023/18/18.py)). The solutions expect the input via `stdin` and print (generally) 2 lines to `stdout` with the answer to part 1 and part 2. Exceptions to this are the solutions which require you to read some letters from ASCII art, in that case the ASCII art is part of the `.ans` file and it is printed by the solution instead of the letters. +* **2023**: Initially I wanted to use Rust for this year, but instead I focused on getting on the leaderboard with **Python** (successfully on day 18 and 25!). In the last days I even started using libraries (Z3/networkx). Python is my strongest language, so no surprises there, I did 5 days in Rust as well, but found it too frustrating and had too little time for 2 solutions per day. * **2022**: Using **Kotlin** for the first time. Playing with streams a lot, many days are completed by only using streams. The first 15 days have **Python** solutions as well in order to be able to submit quicker and get better times on the leaderboard. * **2021**: Using **Julia** for the first time. Because it supports numpy-like element-wise operations natively this was a great choice for AoC. If I used more Julia it would likely be my go to language for AoC right now. @@ -289,9 +290,3 @@ In order to test the programs you can pipe the input to the program, for example Programs are initialized with the `init-day.sh` script. I.e. typing `init-day.sh 10` initializes the 10th day by creating a folder named `10` and downloading the input test case with the `session.cookie`. - -easy. - -Programs are initialized with the `init-day.sh` script. I.e. typing `init-day.sh 10` initializes the 10th day by creating a folder named `10` and downloading the input test case with the `session.cookie`. - - From 118425cd02e8d95e8af140046d89ce16c0b4ceb9 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 6 Jan 2024 12:04:44 +0100 Subject: [PATCH 109/225] Add day 4 --- .aoc_tiles/tiles/2020/04.png | Bin 8459 -> 8831 bytes 2020/04/04.rs | 31 +++++++++++++++++++++++++++++++ README.md | 2 +- 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 2020/04/04.rs diff --git a/.aoc_tiles/tiles/2020/04.png b/.aoc_tiles/tiles/2020/04.png index 89acbdf012f79b89c8ea1ecd74901dfc315775b1..fac621df3a96c48b88265c568fa9206ba831e0be 100644 GIT binary patch literal 8831 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 K{Abx0!T$%$y|S+W diff --git a/2020/04/04.rs b/2020/04/04.rs new file mode 100644 index 0000000..7e9eafd --- /dev/null +++ b/2020/04/04.rs @@ -0,0 +1,31 @@ +use std::{io::stdin, collections::HashMap}; + +use itertools::Itertools; +use regex::Regex; + +fn valid_p1(map: &HashMap<&str, &str>) -> bool { + "byr iyr eyr hgt hcl ecl pid".split(" ").all(|req| map.contains_key(&req)) +} + +fn valid_p2(map: &HashMap<&str, &str>) -> bool { + valid_p1(map) + && (1920..=2002).contains(&map["byr"].parse().unwrap()) + && (2010..=2020).contains(&map["iyr"].parse().unwrap()) + && (2020..=2030).contains(&map["eyr"].parse().unwrap()) + && Regex::new(r"^((1[5-8]\d|19[0123])cm|(59|6\d|7[0-6])in)$").unwrap().is_match(map["hgt"]) + && Regex::new(r"^#[0-9a-f]{6}$").unwrap().is_match(map["hcl"]) + && Regex::new(r"^\d{9}$").unwrap().is_match(map["pid"]) + && "amb blu brn gry grn hzl oth".split(" ").contains(&map["ecl"]) +} + +fn main() { + let input = stdin().lines().filter_map(Result::ok).join("\n"); + let passports: Vec> = input + .split(|c| "\n ".contains(c)) + .collect_vec() + .split(|&l| l.is_empty()) + .map(|line| line.iter().map(|e| e.split_once(":").unwrap()).collect()) + .collect(); + println!("{}", passports.iter().filter(|h| valid_p1(h)).count()); + println!("{}", passports.iter().filter(|h| valid_p2(h)).count()); +} \ No newline at end of file diff --git a/README.md b/README.md index a4f14af..e25054e 100644 --- a/README.md +++ b/README.md @@ -248,7 +248,7 @@ - + From 32eb00195cf31c5acf2a3ced0c21f95fb63bd813 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 6 Jan 2024 12:24:58 +0100 Subject: [PATCH 110/225] Add day 4 --- 2020/04/04.rs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/2020/04/04.rs b/2020/04/04.rs index 7e9eafd..1e70856 100644 --- a/2020/04/04.rs +++ b/2020/04/04.rs @@ -19,12 +19,10 @@ fn valid_p2(map: &HashMap<&str, &str>) -> bool { } fn main() { - let input = stdin().lines().filter_map(Result::ok).join("\n"); + let input = stdin().lines().filter_map(Result::ok).join(" "); let passports: Vec> = input - .split(|c| "\n ".contains(c)) - .collect_vec() - .split(|&l| l.is_empty()) - .map(|line| line.iter().map(|e| e.split_once(":").unwrap()).collect()) + .split(" ") + .map(|line| line.split(" ").map(|e| e.split_once(":").unwrap()).collect()) .collect(); println!("{}", passports.iter().filter(|h| valid_p1(h)).count()); println!("{}", passports.iter().filter(|h| valid_p2(h)).count()); From 4f5a75a1b1045f92c0565925b48d5dc39dc0f79b Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 6 Jan 2024 13:34:13 +0100 Subject: [PATCH 111/225] Add day 5 --- .aoc_tiles/tiles/2020/05.png | Bin 9270 -> 9649 bytes 2020/05/05.rs | 17 +++++++++++++++++ README.md | 2 +- 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 2020/05/05.rs diff --git a/.aoc_tiles/tiles/2020/05.png b/.aoc_tiles/tiles/2020/05.png index 821cded5e88409331a5f8b2d0de67f423cf1bb35..064c662e283fc85cc194e1eec724663139a96eda 100644 GIT binary patch literal 9649 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 sR)htIapr!I*1 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 P!v!cSXvo*dT15UIQ@H5m literal 9270 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 diff --git a/2020/05/05.rs b/2020/05/05.rs new file mode 100644 index 0000000..99e8404 --- /dev/null +++ b/2020/05/05.rs @@ -0,0 +1,17 @@ +use std::io::stdin; + +use itertools::Itertools; + +fn as_binary(s: &str) -> i32 { + s.char_indices().fold(0, |acc, (i, c)| acc + (1<<(9-i)) * ("BR".contains(c) as i32)) +} + +fn main() { + let nums: Vec = stdin().lines().map(|l| as_binary(&l.unwrap())).collect(); + println!("{:?}", nums.iter().max().unwrap()); + nums.iter() + .sorted() + .tuple_windows() + .find(|(&a, &b)| b-a == 2) + .map(|(&a, _)| println!("{}", a+1)); +} diff --git a/README.md b/README.md index e25054e..a806ef3 100644 --- a/README.md +++ b/README.md @@ -251,7 +251,7 @@ - + From c5541c57313faafe1a1116a210c4797eb2aa8587 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 6 Jan 2024 14:57:32 +0100 Subject: [PATCH 112/225] Add day 6 --- .aoc_tiles/tiles/2020/06.png | Bin 9494 -> 9952 bytes 2020/06/06.rs | 19 +++++++++++++++++++ README.md | 2 +- 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 2020/06/06.rs diff --git a/.aoc_tiles/tiles/2020/06.png b/.aoc_tiles/tiles/2020/06.png index 16e8bb69a19337feec0a9944e6901f24eee2a992..e9c82034810b2fc7ae5639c456f4081f613d5dfa 100644 GIT binary patch literal 9952 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
%noyudw;HM;-+H;jsfRH8 z(!2IEA}h8xxJ?wOm7mUZX)=jLt`Q`P(CWHtO_IF3jg6`EGm-EM;Zgj1j`E=kj(wB6 zgPPjbDz>yl@z5DfPiD-D0*>+sxS_7i5m*yNxAwl2_q^n-O&J+Ct1bb|fsTD*aN_+> z-bYMrn*p)U?Rd(S45`aOLV;do5QNF z93;WanIqj%)2&391POQEs#rPowA=%Bjx_!Dg++F9<$RIgvYj{$o^A#e!e#m0(jbG6 z@956Fjf;`jD-nT@uLa}sBDR&NMvvZ5krMegTa+S%s2VXnY&4wx-Zc|{2N^*pV!6Wu!RVMB!xM8~F zZFu)b|F-RV)t>DB19B%fN}F6W1A)z{FboEtwVg=eB(^##{r4V}{7xSLgK~R3*?|Xe z+7H%u=~%A#BzuSeBxNk4=oh!`TMatVaHPvuUvqs&NsWE2?=Dg{>cy<`LsUTGIKo0K z{aXo}4IJx(efG};&Yrd#JD~CH|BqK`7-ftN-@oRgi%J_iI!N$9!}Uar^;@vTl?8;v z61m|HgPs35N-m;A(Kihx4_>kWT)4HwJ6G{T4F|U48eEyE50kDTAAq@h2sSFDwnpw% zrLSnUOt3!ATVJ`U_va$P?j}5eG)0e25;2$T_CW4hhb1x$xo15yu$1Pt+zjw(t?CQy zZu`8(&TI4u8Da#7@Hon?Hj+#rqqLOq?@Kt}=d){YMIiuiI%Hd@FY!w+ zt34_0@1)k$V&Np^aR!$JcURD;Ranno+@V{4TEDyxfapA|?Pi=XogvB46$>UF3O4nW z5_#}1V4=3t%Q_IMaIkM|__V}`$=^w}O`?1gi4tGJHsvWa#b4q0)-sQmm7rgmE*j$36X&Qds2LNQg LD1NRKHwgNFkkp3t literal 9494 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 T!&?XMJ0awxlq5^U4SfC&-OtT{ diff --git a/2020/06/06.rs b/2020/06/06.rs new file mode 100644 index 0000000..30a3b15 --- /dev/null +++ b/2020/06/06.rs @@ -0,0 +1,19 @@ +use std::{io::stdin, collections::HashSet}; + +fn main() { + let sets = stdin().lines() + .map(|l| l.unwrap().chars().collect::>()) + .collect::>(); + let groups = sets + .split(|set| set.is_empty()) + .collect::>(); + + let p1: usize = groups.iter() + .map(|s| s.iter().fold(s[0].clone(), |acc, curr| acc.union(curr).cloned().collect())) + .fold(0, |acc, l| acc+l.len()); + let p2: usize = groups.iter() + .map(|s| s.iter().fold(s[0].clone(), |acc, curr| acc.intersection(curr).cloned().collect())) + .fold(0, |acc, l| acc+l.len()); + + println!("{}\n{}", p1, p2); +} \ No newline at end of file diff --git a/README.md b/README.md index a806ef3..7204b00 100644 --- a/README.md +++ b/README.md @@ -254,7 +254,7 @@ - + From 35bb9b7714820439bab77b0d6b2f63d8e76506e0 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 7 Jan 2024 17:51:10 +0100 Subject: [PATCH 113/225] Add day 7 --- .aoc_tiles/tiles/2020/07.png | Bin 8816 -> 9080 bytes 2020/07/07.rs | 26 ++++++++++++++++++++++++++ README.md | 2 +- 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 2020/07/07.rs diff --git a/.aoc_tiles/tiles/2020/07.png b/.aoc_tiles/tiles/2020/07.png index df3725c3e1034de7d24905f8ab9a2a660555e847..2421127a8fe715b3e95e463b50cc64e6022cc125 100644 GIT binary patch literal 9080 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 literal 8816 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 diff --git a/2020/07/07.rs b/2020/07/07.rs new file mode 100644 index 0000000..603cdc4 --- /dev/null +++ b/2020/07/07.rs @@ -0,0 +1,26 @@ +use std::{io::stdin, collections::HashMap}; +use regex::Regex; + +fn contains_shiny_gold(map: &HashMap<&str, Vec<[&str; 2]>>, key: &str) -> bool { + if key == "shiny gold" { return true } + map[key].iter().any(|[_, name]| contains_shiny_gold(map, name)) +} + +fn count_bags(map: &HashMap<&str, Vec<[&str; 2]>>, key: &str) -> usize { + map[key].iter() + .map(|[num, name]| num.parse::().unwrap()*count_bags(map, name)) + .sum::() + 1 +} + +fn main() { + let pat = Regex::new(r"(^|\d) ?(\w+ \w+)").unwrap(); + let lines = stdin().lines().filter_map(Result::ok).collect::>(); + let map = lines.iter() + .map(|s| pat.captures_iter(&s).map(|c| c.extract::<2>()).collect::>()) + .map(|m| (m[0].0, m.iter().skip(1).map(|s| s.1).collect::>())) + .collect::>(); + + let p1 = map.iter().filter(|(key, _)| contains_shiny_gold(&map, key)).count(); + let p2: usize = count_bags(&map, "shiny gold"); + println!("{}\n{}", p1-1, p2-1); +} \ No newline at end of file diff --git a/README.md b/README.md index 7204b00..62b22d8 100644 --- a/README.md +++ b/README.md @@ -257,7 +257,7 @@ - + From 9650b2f92320dbb52a141136fd9ea2d760f7c807 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 7 Jan 2024 21:26:28 +0100 Subject: [PATCH 114/225] Add day 8 --- .aoc_tiles/tiles/2020/08.png | Bin 9332 -> 9705 bytes 2020/08/08.rs | 47 +++++++++++++++++++++++++++++++++++ README.md | 2 +- 3 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 2020/08/08.rs diff --git a/.aoc_tiles/tiles/2020/08.png b/.aoc_tiles/tiles/2020/08.png index da0cf8bba5f2568760548f1d75e17afd6262f9a0..cad805930ec65685a09f743371c8f3618633a958 100644 GIT binary patch literal 9705 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 QG!fPvRb7?0$|&^z05exj2mk;8 diff --git a/2020/08/08.rs b/2020/08/08.rs new file mode 100644 index 0000000..90e45fb --- /dev/null +++ b/2020/08/08.rs @@ -0,0 +1,47 @@ +use std::{io::stdin, collections::HashSet}; + +fn terminates(inst: &Vec<(&str, i32)>) -> Result { + let mut visited = HashSet::new(); + let mut i: i32 = 0; + let mut acc = 0; + loop { + let (op, num) = inst[i as usize]; + match op { + "acc" => { acc += num; i += 1 }, + "nop" => i += 1, + "jmp" => i += num, + _ => panic!(), + } + if visited.contains(&i) { + return Err(acc); + } + if !(0..inst.len() as i32).contains(&i) { + return Ok(acc); + } + visited.insert(i); + } +} + +fn swap(op: &str) -> &str { + match op { + "nop" => "jmp", + "jmp" => "nop", + o => o, + } +} + +fn main() { + let lines = stdin().lines().filter_map(Result::ok).collect::>(); + let mut inst = lines.iter() + .map(|line| line.split_once(" ").unwrap()) + .map(|(op, num)| (op, num.parse::().unwrap())) + .collect::>(); + println!("{:?}", terminates(&inst).unwrap_err()); + for i in 0..inst.len() { + inst[i].0 = swap(inst[i].0); + if let Ok(res) = terminates(&inst) { + println!("{:?}", res); + } + inst[i].0 = swap(inst[i].0); + } +} \ No newline at end of file diff --git a/README.md b/README.md index 62b22d8..e95ad03 100644 --- a/README.md +++ b/README.md @@ -260,7 +260,7 @@ - + From 660d17f59241b9236a499b5ccef7da714ebafef5 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Tue, 9 Jan 2024 20:56:22 +0100 Subject: [PATCH 115/225] Add day 9 --- .aoc_tiles/tiles/2020/09.png | Bin 0 -> 10035 bytes 2020/09/09.rs | 21 +++++++++++++++++++++ README.md | 7 +++++-- 3 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2020/09.png create mode 100644 2020/09/09.rs diff --git a/.aoc_tiles/tiles/2020/09.png b/.aoc_tiles/tiles/2020/09.png new file mode 100644 index 0000000000000000000000000000000000000000..02d3f3dc908da1942c23f0e10b7dcbdc4c9ef54a GIT binary patch literal 10035 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 = stdin().lines().map(|line| line.unwrap().parse().unwrap()).collect(); + let target_num = nums + .windows(26) + .find(|vec| !vec.iter().take(25).any(|n| vec.contains(&(vec[25]-n)))) + .unwrap()[25]; + + let mut max = (0, 0); + for i in 0..nums.len() { + let mut sum = 0; + for j in i..nums.len() { + sum += nums[j]; + if sum == target_num && j-i > max.0 { + max = (j-i, nums[i..=j].iter().min().unwrap() + nums[i..=j].iter().max().unwrap()); + } + } + } + println!("{}\n{}", target_num, max.1); +} \ No newline at end of file diff --git a/README.md b/README.md index e95ad03..50896af 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

- Advent of Code - 166/450 ⭐ + Advent of Code - 168/450 ⭐

2023 - 50 ⭐ @@ -237,7 +237,7 @@

- 2020 - 16 ⭐ + 2020 - 18 ⭐

@@ -263,6 +263,9 @@ + + + *The above tiles are clickable, leading to the solution of the corresponding day.* From 30b067907e337acb7a292996ece066f4720b3a16 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Wed, 10 Jan 2024 22:02:38 +0100 Subject: [PATCH 116/225] Add day 10 --- 2020/10/10.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 2020/10/10.rs diff --git a/2020/10/10.rs b/2020/10/10.rs new file mode 100644 index 0000000..aed02db --- /dev/null +++ b/2020/10/10.rs @@ -0,0 +1,12 @@ +use std::io::stdin; +use itertools::Itertools; + +fn main() { + let mut nums: Vec = stdin().lines().map(|line| line.unwrap().parse().unwrap()).collect(); + nums.extend([0, *nums.iter().max().unwrap()+3]); + let diffs: Vec<_> = nums.iter().sorted().tuple_windows().map(|(a,b)|b-a).collect(); + let counts = diffs.iter().counts(); + let lookup = [1, 1, 2, 4, 7]; + let p2: i64 = diffs .split(|&n| n == 3) .map(|vec| lookup[vec.len()]) .product(); + println!("{}\n{}", counts[&1]*counts[&3], p2); +} \ No newline at end of file From 76ec3507dcb06d96d2b2fe2b507ec9b91a580f0e Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Wed, 10 Jan 2024 22:02:38 +0100 Subject: [PATCH 117/225] Add day 10 --- 2020/10/10.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 2020/10/10.rs diff --git a/2020/10/10.rs b/2020/10/10.rs new file mode 100644 index 0000000..aed02db --- /dev/null +++ b/2020/10/10.rs @@ -0,0 +1,12 @@ +use std::io::stdin; +use itertools::Itertools; + +fn main() { + let mut nums: Vec = stdin().lines().map(|line| line.unwrap().parse().unwrap()).collect(); + nums.extend([0, *nums.iter().max().unwrap()+3]); + let diffs: Vec<_> = nums.iter().sorted().tuple_windows().map(|(a,b)|b-a).collect(); + let counts = diffs.iter().counts(); + let lookup = [1, 1, 2, 4, 7]; + let p2: i64 = diffs .split(|&n| n == 3) .map(|vec| lookup[vec.len()]) .product(); + println!("{}\n{}", counts[&1]*counts[&3], p2); +} \ No newline at end of file From 11813375ddbc6e9e2c61fc1b824889ed723cd74e Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Thu, 11 Jan 2024 21:29:20 +0100 Subject: [PATCH 118/225] Add day 11 --- .aoc_tiles/tiles/2020/11.png | Bin 0 -> 7226 bytes 2020/11/11.rs | 51 +++++++++++++++++++++++++++++++++++ README.md | 7 +++-- 3 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2020/11.png create mode 100644 2020/11/11.rs diff --git a/.aoc_tiles/tiles/2020/11.png b/.aoc_tiles/tiles/2020/11.png new file mode 100644 index 0000000000000000000000000000000000000000..5c0471ade15dbd08b1138e19bfd04e562c0de231 GIT binary patch literal 7226 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, is_part2: bool) { + + let seats: Vec<_> = iproduct!(0..lines.len(), 0..lines[0].len()) + .filter(|(y, x)| lines[*y][*x] == 'L') + .map(|(y, x)| (y as i32, x as i32)) + .collect(); + + // let is_seat = |y, x| seats.contains(x) + + let mut taken = HashSet::new(); + let s = lines.len() as i32; + loop { + let mut new_taken = HashSet::new(); + for seat in &seats { + let mut adj = DIRS.iter() + .filter(|&(y, x)| taken.contains(&(seat.0+y, seat.1+x))) + .count(); + if is_part2 { + adj = DIRS.iter() + .map(|&(y, x)| (y, x, (1..s).find(|m| seats.contains(&(seat.0+y*m, seat.1+x*m))).unwrap_or(1))) + .filter(|&(y, x, m)| taken.contains(&(seat.0+y*m, seat.1+x*m))) + .count(); + } + match adj { + 0 => new_taken.insert(seat), + 4 if !is_part2 => false, + 5..=8 => false, + _ if taken.contains(seat) => new_taken.insert(seat), + _ => false, + }; + } + if taken.len() == new_taken.len() { + break + } + taken = new_taken; + } + println!("{:?}", taken.len()); +} + +fn main() { + let lines: Vec> = stdin().lines() + .map(|line| line.unwrap().trim().chars().collect_vec()) + .collect(); + solve(&lines, false); + solve(&lines, true); +} \ No newline at end of file diff --git a/README.md b/README.md index 7f8906a..c92a278 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

- Advent of Code - 170/450 ⭐ + Advent of Code - 172/450 ⭐

2023 - 50 ⭐ @@ -237,7 +237,7 @@

- 2020 - 20 ⭐ + 2020 - 22 ⭐

@@ -269,6 +269,9 @@ + + + *The above tiles are clickable, leading to the solution of the corresponding day.* From 6df0e384ed4007fc975c233d216b9e5452de8a2f Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Fri, 12 Jan 2024 21:22:26 +0100 Subject: [PATCH 119/225] Add day 12 --- .aoc_tiles/tiles/2020/12.png | Bin 0 -> 8272 bytes 2020/12/12.rs | 47 +++++++++++++++++++++++++++++++++++ README.md | 7 ++++-- 3 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2020/12.png create mode 100644 2020/12/12.rs diff --git a/.aoc_tiles/tiles/2020/12.png b/.aoc_tiles/tiles/2020/12.png new file mode 100644 index 0000000000000000000000000000000000000000..93b7331a10a20ff3aa2d94f07d376be31675c560 GIT binary patch literal 8272 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 EAILNCUH||9 literal 0 HcmV?d00001 diff --git a/2020/12/12.rs b/2020/12/12.rs new file mode 100644 index 0000000..bf4b3f4 --- /dev/null +++ b/2020/12/12.rs @@ -0,0 +1,47 @@ +use std::io::stdin; + +const DIRS: [(i32, i32); 4] = [(0, 1), (1, 0), (0, -1), (-1, 0)]; + +fn part1(actions: &Vec<(String, i32)>) -> i32 { + let (mut y, mut x, mut dir) = (0, 0, 0); + for (action, num) in actions { + match action.as_str() { + "N" => y -= num, + "S" => y += num, + "W" => x -= num, + "E" => x += num, + "F" => {y += DIRS[dir as usize].0 * num; x += DIRS[dir as usize].1 * num }, + "R" => dir = (dir + num / 90 + 4) % 4, + "L" => dir = (dir - num / 90 + 4) % 4, + _ => panic!(), + } + } + y.abs() + x.abs() +} + +fn part2(actions: &Vec<(String, i32)>) -> i32 { + let (mut y, mut x) = (0, 0); + let (mut wpy, mut wpx) = (-1, 10); + for (action, num) in actions { + match (action.as_str(), num) { + ("N", _) => wpy -= num, + ("S", _) => wpy += num, + ("W", _) => wpx -= num, + ("E", _) => wpx += num, + ("F", _) => {y += wpy * num; x += wpx * num }, + ("R", 90) | ("L", 270) => {(wpy, wpx) = (wpx, -wpy)}, + ("R", 270) | ("L", 90) => {(wpy, wpx) = (-wpx, wpy)}, + ("R", 180) | ("L", 180) => {(wpy, wpx) = (-wpy, -wpx)}, + _ => panic!(), + } + } + y.abs() + x.abs() +} + +fn main() { + let actions: Vec<(String, i32)> = stdin().lines() + .filter_map(Result::ok) + .map(|l| (l[0..1].to_owned(), l[1..l.len()].parse().unwrap())) + .collect(); + println!("{}\n{}", part1(&actions), part2(&actions)); +} \ No newline at end of file diff --git a/README.md b/README.md index c92a278..9e57d49 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

- Advent of Code - 172/450 ⭐ + Advent of Code - 174/450 ⭐

2023 - 50 ⭐ @@ -237,7 +237,7 @@

- 2020 - 22 ⭐ + 2020 - 24 ⭐

@@ -272,6 +272,9 @@ + + + *The above tiles are clickable, leading to the solution of the corresponding day.* From ca5bb202a04bcb3a390bbf0c2e970eca74e3c8ba Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 13 Jan 2024 12:12:29 +0100 Subject: [PATCH 120/225] Add day 13 --- .aoc_tiles/tiles/2020/13.png | Bin 0 -> 8701 bytes 2020/13/13.rs | 43 +++++++++++++++++++++++++++++++++++ README.md | 7 ++++-- 3 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2020/13.png create mode 100644 2020/13/13.rs diff --git a/.aoc_tiles/tiles/2020/13.png b/.aoc_tiles/tiles/2020/13.png new file mode 100644 index 0000000000000000000000000000000000000000..667d709075be8407d61c533c3610eefb47daaf46 GIT binary patch literal 8701 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 literal 0 HcmV?d00001 diff --git a/2020/13/13.rs b/2020/13/13.rs new file mode 100644 index 0000000..dbec655 --- /dev/null +++ b/2020/13/13.rs @@ -0,0 +1,43 @@ +use std::io::stdin; + +fn mod_inv(a: i64, module: i64) -> i64 { + let mut mn = (module, a); + let mut xy = (0, 1); + + while mn.1 != 0 { + xy = (xy.1, xy.0 - (mn.0 / mn.1) * xy.1); + mn = (mn.1, mn.0 % mn.1); + } + while xy.0 < 0 { + xy.0 += module; + } + xy.0 +} + +fn chinese_remainder_theorem(pairs: &Vec<(i64, i64)>) -> i64 { + let prod: i64 = pairs.iter().map(|t| t.1).product(); + let mut sum = 0; + for (s, x) in pairs { + let p = prod / x; + let residue = (x - s) % x; + sum += residue * mod_inv(p, *x) * p; + } + sum % prod +} + +fn main() { + let lines = stdin().lines().filter_map(Result::ok).collect::>(); + + let time: i32 = lines.first().unwrap().parse().unwrap(); + lines[1].split(",") + .filter_map(|s| s.parse().ok()) + .map(|t: i32| (t - time % t, t)) + .min() + .map(|(b, t)| println!("{}", b*t)); + + let pairs = lines[1].split(",") + .enumerate() + .filter_map(|(i, s)| s.parse().ok().map(|n| (i as i64, n))) + .collect::>(); + println!("{:?}", chinese_remainder_theorem(&pairs)); +} \ No newline at end of file diff --git a/README.md b/README.md index 9e57d49..7b1720a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

- Advent of Code - 174/450 ⭐ + Advent of Code - 176/450 ⭐

2023 - 50 ⭐ @@ -237,7 +237,7 @@

- 2020 - 24 ⭐ + 2020 - 26 ⭐

@@ -275,6 +275,9 @@ + + + *The above tiles are clickable, leading to the solution of the corresponding day.* From 7cd5a97d142780b8b33b93ef2bc0d9e54536c99f Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 14 Jan 2024 15:05:40 +0100 Subject: [PATCH 121/225] Add day 14 --- .aoc_tiles/tiles/2020/14.png | Bin 0 -> 7443 bytes 2020/14/14.rs | 62 +++++++++++++++++++++++++++++++++++ README.md | 7 ++-- 3 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2020/14.png create mode 100644 2020/14/14.rs diff --git a/.aoc_tiles/tiles/2020/14.png b/.aoc_tiles/tiles/2020/14.png new file mode 100644 index 0000000000000000000000000000000000000000..8b9a82c40183c776ee9a7b23444a0016dc304071 GIT binary patch literal 7443 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 i64 { + let bin = format!("{:036b}", value.parse::().unwrap()); + let masked = mask + .chars() + .zip(bin.chars()) + .map(|(m, b)| if m == 'X' { b } else { m }) + .join(""); + i64::from_str_radix(&masked, 2).unwrap() +} + +fn mask_address(mask: &str, addr: &str) -> Vec { + let bin = format!("{:036b}", addr.parse::().unwrap()); + let x_ids: Vec = mask + .char_indices() + .filter(|t| t.1 == 'X') + .map(|t| 1 << (35-t.0)) + .collect(); + + let masked = mask + .chars() + .zip(bin.chars()) + .map(|(m, b)| match m { '0' => b, '1' => '1', _ => '0' }) + .join(""); + let num = i64::from_str_radix(&masked, 2).unwrap(); + + (0..=x_ids.len()) + .flat_map(|k| { + x_ids + .iter() + .combinations(k) + .map(|comb| num + comb.iter().fold(0, |a, &b| a + b)) + }) + .collect() +} + +fn main() { + let lines: Vec<_> = stdin().lines().filter_map(Result::ok).collect(); + let mut memory1 = HashMap::new(); + let mut memory2 = HashMap::new(); + let mut mask = ""; + for line in &lines { + if line.starts_with("mask") { + mask = &line[7..line.len()]; + } else { + let (addr, val) = line + .strip_prefix("mem[") + .unwrap() + .split_once("] = ") + .unwrap(); + memory1.insert(addr, mask_value(mask, val)); + for address in mask_address(mask, addr) { + memory2.insert(address, val.parse().unwrap()); + } + } + } + println!("{:?}", memory1.values().sum::()); + println!("{:?}", memory2.values().sum::()); +} diff --git a/README.md b/README.md index 7b1720a..b1c4d98 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

- Advent of Code - 176/450 ⭐ + Advent of Code - 178/450 ⭐

2023 - 50 ⭐ @@ -237,7 +237,7 @@

- 2020 - 26 ⭐ + 2020 - 28 ⭐

@@ -278,6 +278,9 @@ + + + *The above tiles are clickable, leading to the solution of the corresponding day.* From b83c6d2fe9abc83d2eb72cde4e2882aae6eaa79c Mon Sep 17 00:00:00 2001 From: Brutenis Gliwa Date: Tue, 13 Feb 2024 16:55:03 +0100 Subject: [PATCH 122/225] Rename 18.py to 18_non-complex.py --- 2023/18/{18.py => 18_non-complex.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename 2023/18/{18.py => 18_non-complex.py} (100%) diff --git a/2023/18/18.py b/2023/18/18_non-complex.py similarity index 100% rename from 2023/18/18.py rename to 2023/18/18_non-complex.py From e2f7b83f6a80d9972a9f7cd7c1beb75eef1fba2d Mon Sep 17 00:00:00 2001 From: Brutenis Gliwa Date: Tue, 13 Feb 2024 16:56:24 +0100 Subject: [PATCH 123/225] Add day 18 --- 2023/18/18.py | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 2023/18/18.py diff --git a/2023/18/18.py b/2023/18/18.py new file mode 100644 index 0000000..39f673b --- /dev/null +++ b/2023/18/18.py @@ -0,0 +1,9 @@ +def solve(instructions, s=2, xy=0.): + for d in instructions: + s += abs(d.real+d.imag) + d.imag*xy.real - d.real*xy.imag + xy += d + print(int(s // 2)) + +split = [line.split() for line in open(0)] +solve(1j**"RDLU".index(d) * int(num) for d, num, _ in split) +solve(1j**int(c[7]) * int(c[2:7], 16) for *_, c in split) From 22abc9466ca94ae353378f2936f2d842f2aa1c2f Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Wed, 21 Aug 2024 23:11:49 +0200 Subject: [PATCH 124/225] Add day 15 --- 2020/15/15.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 2020/15/15.rs diff --git a/2020/15/15.rs b/2020/15/15.rs new file mode 100644 index 0000000..15dd796 --- /dev/null +++ b/2020/15/15.rs @@ -0,0 +1,12 @@ +use std::{io::stdin, collections::HashMap}; + +fn main() { + let line = stdin().lines().last().unwrap().unwrap(); + let mut lookup: HashMap<_, _> = line.split(",").map(|n| n.parse().unwrap()).zip(1..).collect(); + let mut last = 0; + for i in lookup.len()+1..30000000 { + last = i - lookup.insert(last, i).unwrap_or(i); + if i == 2019 { println!("{}", last); } + } + println!("{}", last); +} From 00010287d71228ee090c3b0105584ffbc708f219 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Wed, 21 Aug 2024 23:29:26 +0200 Subject: [PATCH 125/225] Add day 15 --- .aoc_tiles/tiles/2020/15.png | Bin 0 -> 8447 bytes 2020/15/15.rs | 2 +- README.md | 7 +++++-- 3 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 .aoc_tiles/tiles/2020/15.png diff --git a/.aoc_tiles/tiles/2020/15.png b/.aoc_tiles/tiles/2020/15.png new file mode 100644 index 0000000000000000000000000000000000000000..7816ef5329ed462de751b4a16c3e53f977aeb96d GIT binary patch literal 8447 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 = line.split(",").map(|n| n.parse().unwrap()).zip(1..).collect(); let mut last = 0; - for i in lookup.len()+1..30000000 { + for i in lookup.len()+1..30_000_000 { last = i - lookup.insert(last, i).unwrap_or(i); if i == 2019 { println!("{}", last); } } diff --git a/README.md b/README.md index b1c4d98..31ecbad 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

- Advent of Code - 178/450 ⭐ + Advent of Code - 180/450 ⭐

2023 - 50 ⭐ @@ -237,7 +237,7 @@

- 2020 - 28 ⭐ + 2020 - 30 ⭐

@@ -281,6 +281,9 @@ + + + *The above tiles are clickable, leading to the solution of the corresponding day.* From a182dc16d7b35ec71a247f46508f12568432f84f Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 25 Aug 2024 16:34:49 +0200 Subject: [PATCH 126/225] Add day 16 --- .aoc_tiles/tiles/2020/16.png | Bin 0 -> 8724 bytes 2020/16/16.rs | 72 +++++++++++++++++++++++++++++++++++ 2020/Cargo.toml | 1 + README.md | 7 +++- 4 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2020/16.png create mode 100644 2020/16/16.rs diff --git a/.aoc_tiles/tiles/2020/16.png b/.aoc_tiles/tiles/2020/16.png new file mode 100644 index 0000000000000000000000000000000000000000..04d4ba495f1a740a97748063716db03e57ad2cdd GIT binary patch literal 8724 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.unwrap()) + .tuple_windows() + .exactly_one() + .map(|(a, b, c, d)| (a..=b, c..=d)) + .unwrap() + }) + .collect_vec(); + + let mut allowed: HashSet<(usize, usize)> = (0..ranges.len()) + .cartesian_product(20..ranges.len() + 20) + .collect(); + + for nearby in input.get(2).unwrap().split("\n").skip(1) { + for (i, num) in nearby + .split(",") + .map(|n| n.parse::().unwrap()) + .enumerate() + { + let invalid = ranges + .iter() + .map(|(r1, r2)| r1.contains(&num) || r2.contains(&num)) + .all(|n| n == false); + if invalid { + sum += num; + } else { + ranges + .iter() + .enumerate() + .filter(|(_, (r1, r2))| !(r1.contains(&num) || r2.contains(&num))) + .for_each(|(j, _)| { + allowed.remove(&(j, i + 20)); + }); + } + } + } + println!("{:?}", sum); + + let departure_indices = matching(&allowed.clone().into_iter().collect_vec()) + .iter() + .sorted() + .take(6) + .map(|(_, b)| b - 20) + .collect_vec(); + + pattern + .find_iter(input.get(1).unwrap()) + .map(|a| a.as_str().parse::().unwrap()) + .enumerate() + .filter(|(i, _)| departure_indices.contains(i)) + .map(|a| a.1) + .reduce(|a, b| a * b) + .map(|a| println!("{:?}", a)); +} diff --git a/2020/Cargo.toml b/2020/Cargo.toml index 6db55ac..79a1ad9 100644 --- a/2020/Cargo.toml +++ b/2020/Cargo.toml @@ -8,6 +8,7 @@ edition = "2021" [dependencies] regex = "1.10.2" itertools = "0.12.0" +hopcroft-karp = "0.2.1" [[bin]] name = "01" diff --git a/README.md b/README.md index 31ecbad..58b00a9 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

- Advent of Code - 180/450 ⭐ + Advent of Code - 182/450 ⭐

2023 - 50 ⭐ @@ -237,7 +237,7 @@

- 2020 - 30 ⭐ + 2020 - 32 ⭐

@@ -284,6 +284,9 @@ + + + *The above tiles are clickable, leading to the solution of the corresponding day.* From 56566814e95ef801bdd920f50563eaca6dcf1973 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 25 Aug 2024 16:49:38 +0200 Subject: [PATCH 127/225] Add day 16 --- 2020/16/16.rs | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/2020/16/16.rs b/2020/16/16.rs index 1b8f015..52ba470 100644 --- a/2020/16/16.rs +++ b/2020/16/16.rs @@ -13,14 +13,14 @@ fn main() { let ranges = input .get(0) .unwrap() - .split("\n") + .lines() .map(|line| { pattern .find_iter(line) .map(|a| a.as_str().parse::().unwrap()) - .tuple_windows() - .exactly_one() + .tuples() .map(|(a, b, c, d)| (a..=b, c..=d)) + .next() .unwrap() }) .collect_vec(); @@ -54,19 +54,15 @@ fn main() { } println!("{:?}", sum); - let departure_indices = matching(&allowed.clone().into_iter().collect_vec()) + let mine = pattern.find_iter(input.get(1).unwrap()) + .map(|a| a.as_str().parse::().unwrap()) + .collect_vec(); + + matching(&allowed.into_iter().collect_vec()) .iter() .sorted() .take(6) - .map(|(_, b)| b - 20) - .collect_vec(); - - pattern - .find_iter(input.get(1).unwrap()) - .map(|a| a.as_str().parse::().unwrap()) - .enumerate() - .filter(|(i, _)| departure_indices.contains(i)) - .map(|a| a.1) - .reduce(|a, b| a * b) + .map(|(_, b)| mine[b - 20]) + .reduce(|acc, x| acc * x) .map(|a| println!("{:?}", a)); } From b21736f8cd314bca7341e2e8113755649ac316ef Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 25 Aug 2024 17:30:31 +0200 Subject: [PATCH 128/225] Add day 17 (part 2 only) --- .aoc_tiles/tiles/2020/17.png | Bin 0 -> 8142 bytes 2020/17/17.rs | 48 +++++++++++++++++++++++++++++++++++ README.md | 7 +++-- 3 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2020/17.png create mode 100644 2020/17/17.rs diff --git a/.aoc_tiles/tiles/2020/17.png b/.aoc_tiles/tiles/2020/17.png new file mode 100644 index 0000000000000000000000000000000000000000..5aa45aa6d5003ba6e634c038aa6ce27acdc31a54 GIT binary patch literal 8142 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 HashSet<(i32, i32, i32, i32)> { + (-1..=1) + .cartesian_product(-1..=1) + .cartesian_product(-1..=1) + .cartesian_product(-1..=1) + .map(|(((x, y), z), w)| (x + xyz.0, y + xyz.1, z + xyz.2, w+xyz.3)) + .collect() +} + +fn main() { + let mut active = stdin() + .lines() + .enumerate() + .map(|(y, line)| { + line.unwrap() + .chars() + .enumerate() + .filter(|(_, c)| *c == '#') + .map(|(x, _)| (y as i32, x as i32, 0, 0)) + .collect_vec() + }) + .flatten() + .collect::>(); + println!("{:?}", active); + + println!("{:?}", active.len()); + for _ in 0..6 { + let mut new_active = HashSet::new(); + let mut inactive = HashSet::new(); + for xyz in active.iter() { + inactive.extend(adjacent(*xyz).difference(&active)); + if (3..=4).contains(&adjacent(*xyz).intersection(&active).count()) { + new_active.insert(*xyz); + } + } + for xyz in inactive.iter() { + if adjacent(*xyz).intersection(&active).count() == 3 { + new_active.insert(*xyz); + } + } + active = new_active; + println!("{:?}", active.len()); + } +} diff --git a/README.md b/README.md index 58b00a9..983a49c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

- Advent of Code - 182/450 ⭐ + Advent of Code - 184/450 ⭐

2023 - 50 ⭐ @@ -237,7 +237,7 @@

- 2020 - 32 ⭐ + 2020 - 34 ⭐

@@ -287,6 +287,9 @@ + + + *The above tiles are clickable, leading to the solution of the corresponding day.* From 3c8d8b5118c82f2a0e2e1aac2848c4f61716673e Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 25 Aug 2024 18:13:07 +0200 Subject: [PATCH 129/225] Add day 17 --- 2020/17/17.rs | 71 +++++++++++++++++++++++++++++---------------------- 1 file changed, 40 insertions(+), 31 deletions(-) diff --git a/2020/17/17.rs b/2020/17/17.rs index 3ff87ed..6218e25 100644 --- a/2020/17/17.rs +++ b/2020/17/17.rs @@ -1,48 +1,57 @@ use std::{collections::HashSet, io::stdin}; -use itertools::Itertools; +use itertools::{iproduct, Itertools}; -fn adjacent(xyz: (i32, i32, i32, i32)) -> HashSet<(i32, i32, i32, i32)> { - (-1..=1) - .cartesian_product(-1..=1) - .cartesian_product(-1..=1) - .cartesian_product(-1..=1) - .map(|(((x, y), z), w)| (x + xyz.0, y + xyz.1, z + xyz.2, w+xyz.3)) - .collect() -} +fn adjacent(p: &Vec) -> HashSet> { + let r = [-1, 0, 1]; -fn main() { - let mut active = stdin() - .lines() - .enumerate() - .map(|(y, line)| { - line.unwrap() - .chars() - .enumerate() - .filter(|(_, c)| *c == '#') - .map(|(x, _)| (y as i32, x as i32, 0, 0)) - .collect_vec() - }) - .flatten() - .collect::>(); - println!("{:?}", active); + match p.len() { + 3 => iproduct!(r, r, r) + .map(|(dx, dy, dz)| vec![p[0] + dx, p[1] + dy, p[2] + dz]) + .collect(), + 4 => iproduct!(r, r, r, r) + .map(|(dx, dy, dz, dw)| vec![p[0] + dx, p[1] + dy, p[2] + dz, p[3] + dw]) + .collect(), + _ => HashSet::new(), + } +} - println!("{:?}", active.len()); +fn solve(initial_active: HashSet>) { + let mut active = initial_active; for _ in 0..6 { let mut new_active = HashSet::new(); let mut inactive = HashSet::new(); for xyz in active.iter() { - inactive.extend(adjacent(*xyz).difference(&active)); - if (3..=4).contains(&adjacent(*xyz).intersection(&active).count()) { - new_active.insert(*xyz); + let adj = adjacent(xyz); + inactive.extend(adj.difference(&active).cloned()); + if (3..=4).contains(&adj.intersection(&active).count()) { + new_active.insert(xyz.to_vec()); } } for xyz in inactive.iter() { - if adjacent(*xyz).intersection(&active).count() == 3 { - new_active.insert(*xyz); + if adjacent(xyz).intersection(&active).count() == 3 { + new_active.insert(xyz.to_vec()); } } active = new_active; - println!("{:?}", active.len()); } + println!("{:?}", active.len()); } + +fn main() { + let active = stdin() + .lines() + .enumerate() + .map(|(y, line)| { + line.unwrap() + .chars() + .enumerate() + .filter(|(_, c)| *c == '#') + .map(|(x, _)| vec![y as i32, x as i32, 0]) + .collect_vec() + }) + .flatten() + .collect::>(); + solve(active.clone()); + solve(active.iter().map(|v| v.iter().cloned().chain(vec![4]).collect()).collect()); +} \ No newline at end of file From b1c53465d2ab497ee873da877c2290a3dbd5519b Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Wed, 28 Aug 2024 22:54:24 +0200 Subject: [PATCH 130/225] Add day 18 (part 1) --- 2020/18/18.rs | 45 +++++++++++++++++++++++ 2020/Cargo.lock | 95 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 140 insertions(+) create mode 100644 2020/18/18.rs create mode 100644 2020/Cargo.lock diff --git a/2020/18/18.rs b/2020/18/18.rs new file mode 100644 index 0000000..aac007f --- /dev/null +++ b/2020/18/18.rs @@ -0,0 +1,45 @@ +use std::io::stdin; + +fn eval(line: &str) -> i64 { + let mut stack = vec![0, -1]; + eprintln!("line = {:?}", line); + for c in line.chars() { + let mut eval = false; + eprintln!("c = {:?}, stack = {:?}", c, stack); + match c { + '0'..='9' => { + stack.push(c.to_digit(10).unwrap() as i64); + eval = true; + } + '(' => { + stack.push(0); + stack.push(-1); + } + ')' => { + eval = true; + }, + '+' => stack.push(-1), + '*' => stack.push(-2), + _ => (), + } + if eval { + let digit1 = stack.pop().unwrap(); + let op = stack.pop().unwrap(); + let digit2 = stack.pop().unwrap(); + match op { + -1 => stack.push(digit2 + digit1), + _ => stack.push(digit2 * digit1), + } + } + } + *stack.get(0).unwrap() +} + +fn main() { + let out = stdin() + .lines() + .filter_map(Result::ok) + .map(|line| eval(&line)) + .sum::(); + println!("{:?}", out) +} diff --git a/2020/Cargo.lock b/2020/Cargo.lock new file mode 100644 index 0000000..1b3be23 --- /dev/null +++ b/2020/Cargo.lock @@ -0,0 +1,95 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "aoc2020" +version = "0.1.0" +dependencies = [ + "hopcroft-karp", + "itertools", + "regex", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "hopcroft-karp" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a72f3d9ba936766ff5d1c23504b6da754e4eb882e36f390e57a257214cb2762e" +dependencies = [ + "fxhash", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "regex" +version = "1.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" From b1b082766f58c8b676f898e6c94326b18f53cba6 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Wed, 28 Aug 2024 23:39:41 +0200 Subject: [PATCH 131/225] Add day 18 --- 2020/18/18.rs | 73 +++++++++++++++++++++++++++------------------------ 1 file changed, 39 insertions(+), 34 deletions(-) diff --git a/2020/18/18.rs b/2020/18/18.rs index aac007f..1bda38c 100644 --- a/2020/18/18.rs +++ b/2020/18/18.rs @@ -1,45 +1,50 @@ -use std::io::stdin; +use std::{collections::HashMap, io::stdin}; -fn eval(line: &str) -> i64 { - let mut stack = vec![0, -1]; - eprintln!("line = {:?}", line); - for c in line.chars() { - let mut eval = false; - eprintln!("c = {:?}, stack = {:?}", c, stack); +use itertools::Itertools; + +fn eval(line: &str, plus_precedence: i32) -> i64 { + let mut nums = Vec::new(); + let mut operators = Vec::new(); + let precedence = HashMap::from([('(', 10), ('+', plus_precedence), ('*', 1)]); + // eprintln!("line = {:?}", line); + for c in line.chars().chain(")".chars()) { + // eprintln!("c = {:?}, nums = {:?}, ops = {:?}", c, nums, operators); match c { - '0'..='9' => { - stack.push(c.to_digit(10).unwrap() as i64); - eval = true; - } - '(' => { - stack.push(0); - stack.push(-1); - } + '0'..='9' => nums.push(c.to_digit(10).unwrap() as i64), + '(' => operators.push(c), ')' => { - eval = true; + while !operators.is_empty() { + let op = operators.pop().unwrap(); + if op == '(' { + break; + } + let func = if op == '*' { |(a, b)| a * b } else { |(a, b)| a + b }; + let value = nums.pop().zip(nums.pop()).map(func).unwrap(); + nums.push(value); + } + } + '+' | '*' => { + while !operators.is_empty() { + // eprintln!("\tc = {:?}, nums = {:?}, ops = {:?}", c, nums, operators); + let op = operators.last().unwrap(); + if *op == '(' || precedence.get(op).unwrap() < precedence.get(&c).unwrap() { + break; + } + let func = if *op == '*' { |(a, b)| a * b } else { |(a, b)| a + b }; + let value = nums.pop().zip(nums.pop()).map(func).unwrap(); + nums.push(value); + operators.pop(); + } + operators.push(c); }, - '+' => stack.push(-1), - '*' => stack.push(-2), _ => (), } - if eval { - let digit1 = stack.pop().unwrap(); - let op = stack.pop().unwrap(); - let digit2 = stack.pop().unwrap(); - match op { - -1 => stack.push(digit2 + digit1), - _ => stack.push(digit2 * digit1), - } - } } - *stack.get(0).unwrap() + *nums.get(0).unwrap() } fn main() { - let out = stdin() - .lines() - .filter_map(Result::ok) - .map(|line| eval(&line)) - .sum::(); - println!("{:?}", out) + let lines = stdin() .lines().filter_map(Result::ok).collect_vec(); + println!("{:?}", lines.iter().map(|l| eval(&l, 1)).sum::()); + println!("{:?}", lines.iter().map(|l| eval(&l, 2)).sum::()); } From 1f24938a6a1a6e5865566f2998847cee2b79d766 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Thu, 29 Aug 2024 00:00:45 +0200 Subject: [PATCH 132/225] Add day 18 --- 2020/18/18.rs | 37 +++++++++++-------------------------- 1 file changed, 11 insertions(+), 26 deletions(-) diff --git a/2020/18/18.rs b/2020/18/18.rs index 1bda38c..6e67152 100644 --- a/2020/18/18.rs +++ b/2020/18/18.rs @@ -1,50 +1,35 @@ use std::{collections::HashMap, io::stdin}; -use itertools::Itertools; - fn eval(line: &str, plus_precedence: i32) -> i64 { let mut nums = Vec::new(); let mut operators = Vec::new(); - let precedence = HashMap::from([('(', 10), ('+', plus_precedence), ('*', 1)]); - // eprintln!("line = {:?}", line); + let precedence = HashMap::from([('(', 0), (')', 0), ('+', plus_precedence), ('*', 1)]); + for c in line.chars().chain(")".chars()) { - // eprintln!("c = {:?}, nums = {:?}, ops = {:?}", c, nums, operators); match c { '0'..='9' => nums.push(c.to_digit(10).unwrap() as i64), - '(' => operators.push(c), - ')' => { - while !operators.is_empty() { + '(' | '+' | '*' | ')' => { + while !operators.is_empty() && c != '(' { let op = operators.pop().unwrap(); - if op == '(' { + if op == '(' && c == ')' { break } + if precedence.get(&op).unwrap() < precedence.get(&c).unwrap() { + operators.push(op); break; } let func = if op == '*' { |(a, b)| a * b } else { |(a, b)| a + b }; let value = nums.pop().zip(nums.pop()).map(func).unwrap(); nums.push(value); } - } - '+' | '*' => { - while !operators.is_empty() { - // eprintln!("\tc = {:?}, nums = {:?}, ops = {:?}", c, nums, operators); - let op = operators.last().unwrap(); - if *op == '(' || precedence.get(op).unwrap() < precedence.get(&c).unwrap() { - break; - } - let func = if *op == '*' { |(a, b)| a * b } else { |(a, b)| a + b }; - let value = nums.pop().zip(nums.pop()).map(func).unwrap(); - nums.push(value); - operators.pop(); - } - operators.push(c); + if c != ')' { operators.push(c); } }, - _ => (), + _ => continue, } } *nums.get(0).unwrap() } fn main() { - let lines = stdin() .lines().filter_map(Result::ok).collect_vec(); + let lines: Vec = stdin() .lines().filter_map(Result::ok).collect(); println!("{:?}", lines.iter().map(|l| eval(&l, 1)).sum::()); println!("{:?}", lines.iter().map(|l| eval(&l, 2)).sum::()); -} +} \ No newline at end of file From d1a2b321d2faa0ea9dfed8afa9e4e3c562585381 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Thu, 29 Aug 2024 00:12:07 +0200 Subject: [PATCH 133/225] Add day 18 --- .aoc_tiles/tiles/2020/18.png | Bin 0 -> 8980 bytes 2020/18/18.rs | 12 ++++++------ README.md | 7 +++++-- 3 files changed, 11 insertions(+), 8 deletions(-) create mode 100644 .aoc_tiles/tiles/2020/18.png diff --git a/.aoc_tiles/tiles/2020/18.png b/.aoc_tiles/tiles/2020/18.png new file mode 100644 index 0000000000000000000000000000000000000000..0cd5779dc1c521f89131932100081c6e27886184 GIT binary patch literal 8980 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 literal 0 HcmV?d00001 diff --git a/2020/18/18.rs b/2020/18/18.rs index 6e67152..6736e7a 100644 --- a/2020/18/18.rs +++ b/2020/18/18.rs @@ -1,9 +1,9 @@ -use std::{collections::HashMap, io::stdin}; +use std::io::stdin; fn eval(line: &str, plus_precedence: i32) -> i64 { let mut nums = Vec::new(); let mut operators = Vec::new(); - let precedence = HashMap::from([('(', 0), (')', 0), ('+', plus_precedence), ('*', 1)]); + let precedence = |c| match c { '+' => plus_precedence, '*' => 1, _ => 0 }; for c in line.chars().chain(")".chars()) { match c { @@ -12,11 +12,11 @@ fn eval(line: &str, plus_precedence: i32) -> i64 { while !operators.is_empty() && c != '(' { let op = operators.pop().unwrap(); if op == '(' && c == ')' { break } - if precedence.get(&op).unwrap() < precedence.get(&c).unwrap() { + if precedence(op) < precedence(c) { operators.push(op); break; } - let func = if op == '*' { |(a, b)| a * b } else { |(a, b)| a + b }; + let func = match op { '*' => |(a, b)| a * b, _ => |(a, b)| a + b }; let value = nums.pop().zip(nums.pop()).map(func).unwrap(); nums.push(value); } @@ -30,6 +30,6 @@ fn eval(line: &str, plus_precedence: i32) -> i64 { fn main() { let lines: Vec = stdin() .lines().filter_map(Result::ok).collect(); - println!("{:?}", lines.iter().map(|l| eval(&l, 1)).sum::()); - println!("{:?}", lines.iter().map(|l| eval(&l, 2)).sum::()); + println!("{}", lines.iter().map(|l| eval(&l, 1)).sum::()); + println!("{}", lines.iter().map(|l| eval(&l, 2)).sum::()); } \ No newline at end of file diff --git a/README.md b/README.md index 983a49c..de6d101 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

- Advent of Code - 184/450 ⭐ + Advent of Code - 186/450 ⭐

2023 - 50 ⭐ @@ -237,7 +237,7 @@

- 2020 - 34 ⭐ + 2020 - 36 ⭐

@@ -290,6 +290,9 @@ + + + *The above tiles are clickable, leading to the solution of the corresponding day.* From 0c3d683f506d5a47bd3bb6b60dddf7024896b181 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Thu, 29 Aug 2024 23:41:03 +0200 Subject: [PATCH 134/225] Add day 19 (part 1) --- .aoc_tiles/tiles/2020/19.png | Bin 0 -> 7137 bytes 2020/19/19.rs | 48 +++++++++++++++++++++++++++++++++++ README.md | 7 +++-- 3 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2020/19.png create mode 100644 2020/19/19.rs diff --git a/.aoc_tiles/tiles/2020/19.png b/.aoc_tiles/tiles/2020/19.png new file mode 100644 index 0000000000000000000000000000000000000000..9dad6447b80537be77c60b805d164888bcdf7c06 GIT binary patch literal 7137 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 PcK~%|?bl^WR^k5#`|Akp literal 0 HcmV?d00001 diff --git a/2020/19/19.rs b/2020/19/19.rs new file mode 100644 index 0000000..9f331d9 --- /dev/null +++ b/2020/19/19.rs @@ -0,0 +1,48 @@ +use std::{collections::HashMap, io::stdin}; + +use itertools::Itertools; +use regex::Regex; + +fn resolve( + curr: &str, + rules: &HashMap>>, + resolved: &mut HashMap +) -> String { + if let Some(value) = resolved.get(curr) { + return value.to_string(); + } + let rule = rules.get(curr).unwrap(); + let pattern = rule + .iter() + .map(|v| v.iter().map(|s| resolve(s, rules, resolved)).join("")) + .join("|"); + let pat = format!("({pattern})"); + resolved.insert(curr.to_owned(), pat.clone()); + + return pat; +} + +fn main() { + let lines = stdin().lines().filter_map(Result::ok).join("\n"); + let (rules_str, messages) = lines.split("\n\n").next_tuple().unwrap(); + let mut rules = HashMap::new(); + for rule in rules_str.lines() { + let (index, sub) = rule.split(":").next_tuple().unwrap(); + rules.insert( + index.to_owned(), + sub.split("|") + .map(|nums| nums.trim().split(" ").map(|v| v.to_owned()).collect_vec()) + .collect_vec(), + ); + } + let mut resolved: HashMap = rules + .iter() + .map(|(k, v)| (k, v.first().unwrap().first().unwrap())) + .filter(|(_, s)| s.contains('"')) + .map(|(&ref k, v)| (k.to_owned(), v.trim_matches('"').to_owned())) + .collect(); + + let pattern = resolve("0", &rules, &mut resolved); + let regex = Regex::new(&format!("^{pattern}$")).unwrap(); + println!("{:?}", messages.lines().filter(|line| regex.is_match(line)).count()); +} diff --git a/README.md b/README.md index de6d101..a832c55 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

- Advent of Code - 186/450 ⭐ + Advent of Code - 187/450 ⭐

2023 - 50 ⭐ @@ -237,7 +237,7 @@

- 2020 - 36 ⭐ + 2020 - 37 ⭐

@@ -293,6 +293,9 @@ + + + *The above tiles are clickable, leading to the solution of the corresponding day.* From b9d8ee14dd04b263f0462173efbf5d6641a93437 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Fri, 30 Aug 2024 00:20:02 +0200 Subject: [PATCH 135/225] Add day 19 --- .aoc_tiles/tiles/2020/19.png | Bin 7137 -> 8400 bytes 2020/19/19.rs | 16 +++++++++++----- README.md | 4 ++-- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/.aoc_tiles/tiles/2020/19.png b/.aoc_tiles/tiles/2020/19.png index 9dad6447b80537be77c60b805d164888bcdf7c06..e5f7a8657d18cf68918a5a61939c087ab6f9ae9a 100644 GIT binary patch literal 8400 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 PcK~%|?bl^WR^k5#`|Akp diff --git a/2020/19/19.rs b/2020/19/19.rs index 9f331d9..8b20f47 100644 --- a/2020/19/19.rs +++ b/2020/19/19.rs @@ -6,7 +6,7 @@ use regex::Regex; fn resolve( curr: &str, rules: &HashMap>>, - resolved: &mut HashMap + resolved: &mut HashMap, ) -> String { if let Some(value) = resolved.get(curr) { return value.to_string(); @@ -24,6 +24,7 @@ fn resolve( fn main() { let lines = stdin().lines().filter_map(Result::ok).join("\n"); + let (rules_str, messages) = lines.split("\n\n").next_tuple().unwrap(); let mut rules = HashMap::new(); for rule in rules_str.lines() { @@ -42,7 +43,12 @@ fn main() { .map(|(&ref k, v)| (k.to_owned(), v.trim_matches('"').to_owned())) .collect(); - let pattern = resolve("0", &rules, &mut resolved); - let regex = Regex::new(&format!("^{pattern}$")).unwrap(); - println!("{:?}", messages.lines().filter(|line| regex.is_match(line)).count()); -} + let p42 = resolve("42", &rules, &mut resolved); + let p31 = resolve("31", &rules, &mut resolved); + let regex1 = Regex::new(&format!("^{p42}{p42}{p31}$")).unwrap(); + println!("{}", messages.lines().filter(|l| regex1.is_match(l)).count()); + + let pattern2 = (1..6).map(|i| format!("({p42}+{p42}{{{i}}}{p31}{{{i}}})")).join("|"); + let regex2 = Regex::new(&format!("^({pattern2})$")).unwrap(); + println!("{}", messages.lines().filter(|l| regex2.is_match(l)).count()); +} \ No newline at end of file diff --git a/README.md b/README.md index a832c55..380a41d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

- Advent of Code - 187/450 ⭐ + Advent of Code - 188/450 ⭐

2023 - 50 ⭐ @@ -237,7 +237,7 @@

- 2020 - 37 ⭐ + 2020 - 38 ⭐

From 098cebf95cf3bb3e9f601f56890270d4cc2e5ce1 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Tue, 3 Sep 2024 22:59:35 +0200 Subject: [PATCH 136/225] Add day 20 (part 1) --- .aoc_tiles/tiles/2020/20.png | Bin 0 -> 7566 bytes 2020/20/20.rs | 33 +++++++++++++++++++++++++++++++++ README.md | 7 +++++-- 3 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2020/20.png create mode 100644 2020/20/20.rs diff --git a/.aoc_tiles/tiles/2020/20.png b/.aoc_tiles/tiles/2020/20.png new file mode 100644 index 0000000000000000000000000000000000000000..60996e19b4833664d2dc1b851565f300832f2e95 GIT binary patch literal 7566 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 literal 0 HcmV?d00001 diff --git a/2020/20/20.rs b/2020/20/20.rs new file mode 100644 index 0000000..d90f2a1 --- /dev/null +++ b/2020/20/20.rs @@ -0,0 +1,33 @@ +use std::{collections::{HashMap, HashSet}, io::stdin}; + +use itertools::Itertools; + +fn main() { + let input = stdin().lines().filter_map(Result::ok).join("\n").replace(".", "0").replace("#", "1"); + let blocks = input.split("\n\n").collect_vec(); + + let mut tiles = HashMap::new(); + let mut edges: HashMap> = HashMap::new(); + + for block in blocks { + let num: i32 = block.lines().next().unwrap().trim_matches(['T', 'i', 'l', 'e', ' ', ':']).parse().unwrap(); + let tile = block.lines().skip(1).collect_vec(); + tiles.insert(num, tile.clone()); + + + for edge in vec![ + tile.first().unwrap().parse::().unwrap(), + tile.first().unwrap().chars().rev().join("").parse::().unwrap(), + tile.last().unwrap().parse::().unwrap(), + tile.last().unwrap().chars().rev().join("").parse::().unwrap(), + tile.iter().map(|l| l.chars().next().unwrap()).join("").parse::().unwrap(), + tile.iter().map(|l| l.chars().last().unwrap()).join("").parse::().unwrap(), + tile.iter().map(|l| l.chars().next().unwrap()).rev().join("").parse::().unwrap(), + tile.iter().map(|l| l.chars().last().unwrap()).rev().join("").parse::().unwrap(), + ] { + edges.entry(edge).or_insert_with(HashSet::new).insert(num); + } + println!("{:?}", edges); + println!("{:?}", edges.iter().filter(|(_, v)| v.len() == 1).map(|(_, v)| v.iter().next().unwrap()).sorted().collect_vec()); + } +} \ No newline at end of file diff --git a/README.md b/README.md index 380a41d..594119b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

- Advent of Code - 188/450 ⭐ + Advent of Code - 189/450 ⭐

2023 - 50 ⭐ @@ -237,7 +237,7 @@

- 2020 - 38 ⭐ + 2020 - 39 ⭐

@@ -296,6 +296,9 @@ + + + *The above tiles are clickable, leading to the solution of the corresponding day.* From bf33bb9dcfd9b89147940c0e3b998baf65c97c22 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Thu, 5 Sep 2024 00:19:05 +0200 Subject: [PATCH 137/225] Kind of part 2 --- 2020/20/20.rs | 173 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 153 insertions(+), 20 deletions(-) diff --git a/2020/20/20.rs b/2020/20/20.rs index d90f2a1..1fd2358 100644 --- a/2020/20/20.rs +++ b/2020/20/20.rs @@ -1,33 +1,166 @@ -use std::{collections::{HashMap, HashSet}, io::stdin}; +use std::{arch::x86_64, collections::{HashMap, HashSet}, io::stdin}; use itertools::Itertools; +#[derive(Clone, Debug, PartialEq, Eq)] +struct Tile { + id: usize, + rows: Vec, +} + +impl Tile { + fn new(id: usize, lines: Vec<&str>) -> Tile { + Tile { id: id, rows: lines.iter().map(|s| usize::from_str_radix(s, 2).unwrap()).collect_vec() } + } + + fn flipped(&self) -> Tile { + let a = self.rows.iter().map(|i| format!("{i:010b}").chars().rev().join("")).collect_vec(); + Tile::new(self.id, a.iter().map(|i| i.as_str()).collect_vec()) + } + + fn rotated(&self) -> Tile { + Tile { + id: self.id, + rows: (0..10).map(|i| (0..10).map(|j| (self.rows.get(9-j).unwrap() & (1< Tile { + Tile { + id: self.id, + rows: self.rows.iter().skip(1).take(8).map(|n| (n - (n & (1<<10))) >> 2).collect() + } + } + + fn top(&self) -> usize { *self.rows.first().unwrap() } + fn bot(&self) -> usize { *self.rows.last().unwrap() } + fn left(&self) -> usize { self.rotated().bot() } + fn right(&self) -> usize { self.rotated().top() } + + fn variations(&self) -> Vec { + let mut tiles = Vec::new(); + let mut tile = self.clone(); + (0..4).for_each(|_| { tile = tile.rotated(); tiles.push(tile.clone()); tiles.push(tile.flipped()) }); + tiles + // vec![ + // self.clone(), + // self.rotated(), + // self.rotated().rotated(), + // self.rotated().rotated().rotated(), + // self.flipped(), + // self.rotated().flipped(), + // self.rotated().rotated().flipped(), + // self.rotated().rotated().rotated().flipped(), + // ] + } + + fn left_edges(&self) -> HashMap { + self.variations().iter().map(|tile| (tile.left(), tile.clone())).collect() + } + + fn top_edges(&self) -> HashMap { + self.variations().iter().map(|tile| (tile.top(), tile.clone())).collect() + } +} + fn main() { let input = stdin().lines().filter_map(Result::ok).join("\n").replace(".", "0").replace("#", "1"); let blocks = input.split("\n\n").collect_vec(); - let mut tiles = HashMap::new(); - let mut edges: HashMap> = HashMap::new(); + // let mut tiles = HashMap::new(); + let mut tiles = Vec::new(); + let mut edges: HashMap> = HashMap::new(); for block in blocks { - let num: i32 = block.lines().next().unwrap().trim_matches(['T', 'i', 'l', 'e', ' ', ':']).parse().unwrap(); - let tile = block.lines().skip(1).collect_vec(); - tiles.insert(num, tile.clone()); - - - for edge in vec![ - tile.first().unwrap().parse::().unwrap(), - tile.first().unwrap().chars().rev().join("").parse::().unwrap(), - tile.last().unwrap().parse::().unwrap(), - tile.last().unwrap().chars().rev().join("").parse::().unwrap(), - tile.iter().map(|l| l.chars().next().unwrap()).join("").parse::().unwrap(), - tile.iter().map(|l| l.chars().last().unwrap()).join("").parse::().unwrap(), - tile.iter().map(|l| l.chars().next().unwrap()).rev().join("").parse::().unwrap(), - tile.iter().map(|l| l.chars().last().unwrap()).rev().join("").parse::().unwrap(), - ] { + let num: usize = block.lines().next().unwrap().trim_matches(['T', 'i', 'l', 'e', ' ', ':']).parse().unwrap(); + let tile = Tile::new(num, block.lines().skip(1).collect()); + // tiles.insert(num, tile.clone()); + block.lines().for_each(|line| println!("{}", line)); + tiles.push(tile.clone()); + assert!(tile == tile.flipped().flipped()); + assert!(tile != tile.flipped()); + assert!(tile == tile.rotated().rotated().rotated().rotated()); + assert!(tile.left() == tile.flipped().flipped().left()); + assert!(tile.left() == tile.rotated().rotated().rotated().rotated().left()); + assert!(tile.rotated().left() == tile.rotated().left()); + assert!(tile.flipped().flipped().top() == tile.rotated().rotated().rotated().rotated().top()); + assert!(tile.variations().len() == 8); + assert!(tile != tile.rotated().rotated(), "{:?}", block); + // println!("\ntop {:010b}", tile.top()); + // println!("left {:010b}", tile.left()); + // println!("right {:010b}", tile.right()); + // assert!(tile.top() == tile.rotated().left()); + + println!("{:?}", tile.variations().len()); + + println!("{:?}", tile.variations()); + + for (edge, _) in tile.top_edges() { + println!("edge {:?}", edge); edges.entry(edge).or_insert_with(HashSet::new).insert(num); } - println!("{:?}", edges); - println!("{:?}", edges.iter().filter(|(_, v)| v.len() == 1).map(|(_, v)| v.iter().next().unwrap()).sorted().collect_vec()); } + println!("{:?}", edges); + + // tiles.iter() + // .flat_map(|tile| tile.variations()) + // .filter(|tile| !edges.contains_key(&tile.left())) + // .for_each(|tile| println!("{:?}", tile.left())); + + println!("{:?}", "hello"); + + let all_tiles = tiles.iter().flat_map(|tile| tile.variations()).collect_vec(); + + let corners = all_tiles.iter() + .filter(|t| edges.get(&t.top()).unwrap().len() == 1) + .filter(|t| edges.get(&t.left()).unwrap().len() == 1) + .collect_vec(); + + println!("{:?}", corners.iter().map(|tile| tile.id).unique().reduce(|acc, a| acc * a).unwrap()); + + let mut leftmost = *corners.first().unwrap(); + let size = (0..).find(|i| i*i == tiles.len()).unwrap(); + + let mut used = HashSet::new(); + + let mut field: Vec> = Vec::new(); + + for y in 0..size { + let mut current = leftmost; + if y != 0 { + current = all_tiles.iter().filter(|t| !used.contains(&t.id)).find(|tile| tile.top() == leftmost.bot()).unwrap(); + } + leftmost = current; + used.insert(current.id); + current.inner().rows.iter().for_each(|n| field.push(format!("{n:08b}").chars().collect())); + for _ in 1..size { + println!("{:?}", current.right()); + current = all_tiles.iter().filter(|t| !used.contains(&t.id)).find(|tile| tile.left() == current.right()).unwrap(); + println!("{:?}", current.left()); + used.insert(current.id); + + for (row, num) in current.inner().rows.iter().enumerate() { + field.get_mut(y*8+row).unwrap().extend(format!("{num:08b}").chars()); + } + } + // field.push("-".repeat(field.get(0).unwrap().len()).chars().collect_vec()) + } + let lines = field.iter().map(|vec| vec.iter().join("")).collect_vec(); + // lines.iter().map(|v| v.iter().join("")).for_each(|l| println!("{:?}", l)); + let dragon1 = "00000000000000000010"; + let dragon2 = "10000110000110000111"; + let dragon3 = "01001001001001001000"; + lines.windows(3).for_each(|w| println!("{:?}", w)); + let mut dragons = 0; + for (a, b, c) in lines.windows(3).tuples() { + for i in 0..a.len() { + if a.iter().skip(i).join("").starts_with(dragon1) + && b.iter().skip(i).join("").starts_with(dragon2) + && c.iter().skip(i).join("").starts_with(dragon3) { + dragons += 1; + } + } + } + println!("{:?}", dragons); + // println!("{:?}", edges.iter().filter(|(_, v)| v.len() == 1).map(|(_, v)| v.iter().next().unwrap()).sorted().collect_vec()); } \ No newline at end of file From 4297899fa643f58cfc03f5a191d458e1ee2175ea Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Thu, 5 Sep 2024 01:18:11 +0200 Subject: [PATCH 138/225] Add day 20 --- .aoc_tiles/tiles/2020/20.png | Bin 7566 -> 8829 bytes 2020/20/20.rs | 114 +++++++++++++++++++++-------------- README.md | 4 +- 3 files changed, 70 insertions(+), 48 deletions(-) diff --git a/.aoc_tiles/tiles/2020/20.png b/.aoc_tiles/tiles/2020/20.png index 60996e19b4833664d2dc1b851565f300832f2e95..0c716bfe93e43d8d5a8d2e2ed917a41463de4b93 100644 GIT binary patch literal 8829 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 literal 7566 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 diff --git a/2020/20/20.rs b/2020/20/20.rs index 1fd2358..80793df 100644 --- a/2020/20/20.rs +++ b/2020/20/20.rs @@ -1,6 +1,7 @@ -use std::{arch::x86_64, collections::{HashMap, HashSet}, io::stdin}; +use std::{collections::{HashMap, HashSet}, io::stdin}; use itertools::Itertools; +use regex::Regex; #[derive(Clone, Debug, PartialEq, Eq)] struct Tile { @@ -8,6 +9,8 @@ struct Tile { rows: Vec, } + + impl Tile { fn new(id: usize, lines: Vec<&str>) -> Tile { Tile { id: id, rows: lines.iter().map(|s| usize::from_str_radix(s, 2).unwrap()).collect_vec() } @@ -28,7 +31,7 @@ impl Tile { fn inner(&self) -> Tile { Tile { id: self.id, - rows: self.rows.iter().skip(1).take(8).map(|n| (n - (n & (1<<10))) >> 2).collect() + rows: self.rows.iter().skip(1).take(8).map(|n| (n - (n & (1<<9))) >> 1).collect() } } @@ -63,6 +66,64 @@ impl Tile { } } + +fn solve(corner: &Tile, all_tiles: &Vec) -> usize { + let size = (0..).find(|i| i*i == all_tiles.len() / 8).unwrap(); + + let mut leftmost = corner.clone(); + let mut used = HashSet::new(); + + let mut field: Vec> = Vec::new(); + + for y in 0..size { + let mut current = leftmost.clone(); + if y != 0 { + current = all_tiles.iter().filter(|t| !used.contains(&t.id)).find(|tile| tile.top() == leftmost.bot()).unwrap().clone(); + } + leftmost = current.clone(); + used.insert(current.id); + current.inner().rows.iter().for_each(|n| field.push(format!("{n:08b}").chars().collect())); + for _ in 1..size { + // println!("{:?}", current.right()); + current = all_tiles.iter().filter(|t| !used.contains(&t.id)).find(|tile| tile.left() == current.right()).unwrap().clone(); + // println!("{:?}", current.left()); + used.insert(current.id); + + for (row, num) in current.inner().rows.iter().enumerate() { + field.get_mut(y*8+row).unwrap().extend(format!("{num:08b}").chars()); + } + } + // field.push("-".repeat(field.get(0).unwrap().len()).chars().collect_vec()) + } + let lines = field.iter().map(|vec| vec.iter().join("")).collect_vec(); + // lines.iter().map(|v| v.iter().join("")).for_each(|l| println!("{:?}", l)); + // " # " + // "# ## ## ###" + // " # # # # # # " + let dragon1 = Regex::new(r"..................1.").unwrap(); + let dragon2 = Regex::new(r"1....11....11....111").unwrap(); + let dragon3 = Regex::new(r".1..1..1..1..1..1...").unwrap(); + // lines.windows(3).for_each(|w| println!("{:?}", w)); + let mut dragons = 0; + for (a, b, c) in lines.iter().tuple_windows() { + for i in 0..a.len() { + println!("match {:?}", &a.chars().skip(i).take(20).join("")); + if dragon1.is_match(&a.chars().skip(i).take(20).join("")) + && dragon2.is_match(&b.chars().skip(i).take(20).join("")) + && dragon3.is_match(&c.chars().skip(i).take(20).join("")) { + dragons += 15; + // println!("match {:?}", &b.iter().skip(i).take(20).join("")); + // println!("match {:?}", &c.iter().skip(i).take(20).join("")); + } + } + } + // let wins = lines.iter().map(|l| l.chars().collect_vec().windows(20).map(|w| w.iter().join("")).collect_vec()).collect_vec(); + // for (a, b, c) in wins.iter().tuple_windows() { + // println!("{:?}", a); + // } + lines.join("").matches("1").count() - dragons +} + fn main() { let input = stdin().lines().filter_map(Result::ok).join("\n").replace(".", "0").replace("#", "1"); let blocks = input.split("\n\n").collect_vec(); @@ -118,49 +179,10 @@ fn main() { println!("{:?}", corners.iter().map(|tile| tile.id).unique().reduce(|acc, a| acc * a).unwrap()); - let mut leftmost = *corners.first().unwrap(); - let size = (0..).find(|i| i*i == tiles.len()).unwrap(); - - let mut used = HashSet::new(); - - let mut field: Vec> = Vec::new(); - - for y in 0..size { - let mut current = leftmost; - if y != 0 { - current = all_tiles.iter().filter(|t| !used.contains(&t.id)).find(|tile| tile.top() == leftmost.bot()).unwrap(); - } - leftmost = current; - used.insert(current.id); - current.inner().rows.iter().for_each(|n| field.push(format!("{n:08b}").chars().collect())); - for _ in 1..size { - println!("{:?}", current.right()); - current = all_tiles.iter().filter(|t| !used.contains(&t.id)).find(|tile| tile.left() == current.right()).unwrap(); - println!("{:?}", current.left()); - used.insert(current.id); - - for (row, num) in current.inner().rows.iter().enumerate() { - field.get_mut(y*8+row).unwrap().extend(format!("{num:08b}").chars()); - } - } - // field.push("-".repeat(field.get(0).unwrap().len()).chars().collect_vec()) - } - let lines = field.iter().map(|vec| vec.iter().join("")).collect_vec(); - // lines.iter().map(|v| v.iter().join("")).for_each(|l| println!("{:?}", l)); - let dragon1 = "00000000000000000010"; - let dragon2 = "10000110000110000111"; - let dragon3 = "01001001001001001000"; - lines.windows(3).for_each(|w| println!("{:?}", w)); - let mut dragons = 0; - for (a, b, c) in lines.windows(3).tuples() { - for i in 0..a.len() { - if a.iter().skip(i).join("").starts_with(dragon1) - && b.iter().skip(i).join("").starts_with(dragon2) - && c.iter().skip(i).join("").starts_with(dragon3) { - dragons += 1; - } - } - } - println!("{:?}", dragons); + println!("{:?}", corners.iter().map(|corner| solve(corner, &all_tiles)).collect_vec()); + // println!("{:?}", corners.iter().map(|corner| solve(corner, &all_tiles)).sum::()); + // 2129 too high + // 2005 too low + // 1900 too low // println!("{:?}", edges.iter().filter(|(_, v)| v.len() == 1).map(|(_, v)| v.iter().next().unwrap()).sorted().collect_vec()); } \ No newline at end of file diff --git a/README.md b/README.md index 594119b..ab8dc8f 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

- Advent of Code - 189/450 ⭐ + Advent of Code - 190/450 ⭐

2023 - 50 ⭐ @@ -237,7 +237,7 @@

- 2020 - 39 ⭐ + 2020 - 40 ⭐

From 83f07371bf8778d6688333b1600d6c41e564f798 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Thu, 5 Sep 2024 01:22:14 +0200 Subject: [PATCH 139/225] Add day 20 --- 2020/20/20.rs | 69 +-------------------------------------------------- 1 file changed, 1 insertion(+), 68 deletions(-) diff --git a/2020/20/20.rs b/2020/20/20.rs index 80793df..195abaa 100644 --- a/2020/20/20.rs +++ b/2020/20/20.rs @@ -9,8 +9,6 @@ struct Tile { rows: Vec, } - - impl Tile { fn new(id: usize, lines: Vec<&str>) -> Tile { Tile { id: id, rows: lines.iter().map(|s| usize::from_str_radix(s, 2).unwrap()).collect_vec() } @@ -45,20 +43,6 @@ impl Tile { let mut tile = self.clone(); (0..4).for_each(|_| { tile = tile.rotated(); tiles.push(tile.clone()); tiles.push(tile.flipped()) }); tiles - // vec![ - // self.clone(), - // self.rotated(), - // self.rotated().rotated(), - // self.rotated().rotated().rotated(), - // self.flipped(), - // self.rotated().flipped(), - // self.rotated().rotated().flipped(), - // self.rotated().rotated().rotated().flipped(), - // ] - } - - fn left_edges(&self) -> HashMap { - self.variations().iter().map(|tile| (tile.left(), tile.clone())).collect() } fn top_edges(&self) -> HashMap { @@ -66,7 +50,6 @@ impl Tile { } } - fn solve(corner: &Tile, all_tiles: &Vec) -> usize { let size = (0..).find(|i| i*i == all_tiles.len() / 8).unwrap(); @@ -84,43 +67,28 @@ fn solve(corner: &Tile, all_tiles: &Vec) -> usize { used.insert(current.id); current.inner().rows.iter().for_each(|n| field.push(format!("{n:08b}").chars().collect())); for _ in 1..size { - // println!("{:?}", current.right()); current = all_tiles.iter().filter(|t| !used.contains(&t.id)).find(|tile| tile.left() == current.right()).unwrap().clone(); - // println!("{:?}", current.left()); used.insert(current.id); for (row, num) in current.inner().rows.iter().enumerate() { field.get_mut(y*8+row).unwrap().extend(format!("{num:08b}").chars()); } } - // field.push("-".repeat(field.get(0).unwrap().len()).chars().collect_vec()) } let lines = field.iter().map(|vec| vec.iter().join("")).collect_vec(); - // lines.iter().map(|v| v.iter().join("")).for_each(|l| println!("{:?}", l)); - // " # " - // "# ## ## ###" - // " # # # # # # " let dragon1 = Regex::new(r"..................1.").unwrap(); let dragon2 = Regex::new(r"1....11....11....111").unwrap(); let dragon3 = Regex::new(r".1..1..1..1..1..1...").unwrap(); - // lines.windows(3).for_each(|w| println!("{:?}", w)); let mut dragons = 0; for (a, b, c) in lines.iter().tuple_windows() { for i in 0..a.len() { - println!("match {:?}", &a.chars().skip(i).take(20).join("")); if dragon1.is_match(&a.chars().skip(i).take(20).join("")) && dragon2.is_match(&b.chars().skip(i).take(20).join("")) && dragon3.is_match(&c.chars().skip(i).take(20).join("")) { dragons += 15; - // println!("match {:?}", &b.iter().skip(i).take(20).join("")); - // println!("match {:?}", &c.iter().skip(i).take(20).join("")); } } } - // let wins = lines.iter().map(|l| l.chars().collect_vec().windows(20).map(|w| w.iter().join("")).collect_vec()).collect_vec(); - // for (a, b, c) in wins.iter().tuple_windows() { - // println!("{:?}", a); - // } lines.join("").matches("1").count() - dragons } @@ -128,47 +96,18 @@ fn main() { let input = stdin().lines().filter_map(Result::ok).join("\n").replace(".", "0").replace("#", "1"); let blocks = input.split("\n\n").collect_vec(); - // let mut tiles = HashMap::new(); let mut tiles = Vec::new(); let mut edges: HashMap> = HashMap::new(); for block in blocks { let num: usize = block.lines().next().unwrap().trim_matches(['T', 'i', 'l', 'e', ' ', ':']).parse().unwrap(); let tile = Tile::new(num, block.lines().skip(1).collect()); - // tiles.insert(num, tile.clone()); - block.lines().for_each(|line| println!("{}", line)); tiles.push(tile.clone()); - assert!(tile == tile.flipped().flipped()); - assert!(tile != tile.flipped()); - assert!(tile == tile.rotated().rotated().rotated().rotated()); - assert!(tile.left() == tile.flipped().flipped().left()); - assert!(tile.left() == tile.rotated().rotated().rotated().rotated().left()); - assert!(tile.rotated().left() == tile.rotated().left()); - assert!(tile.flipped().flipped().top() == tile.rotated().rotated().rotated().rotated().top()); - assert!(tile.variations().len() == 8); - assert!(tile != tile.rotated().rotated(), "{:?}", block); - // println!("\ntop {:010b}", tile.top()); - // println!("left {:010b}", tile.left()); - // println!("right {:010b}", tile.right()); - // assert!(tile.top() == tile.rotated().left()); - - println!("{:?}", tile.variations().len()); - - println!("{:?}", tile.variations()); for (edge, _) in tile.top_edges() { - println!("edge {:?}", edge); edges.entry(edge).or_insert_with(HashSet::new).insert(num); } } - println!("{:?}", edges); - - // tiles.iter() - // .flat_map(|tile| tile.variations()) - // .filter(|tile| !edges.contains_key(&tile.left())) - // .for_each(|tile| println!("{:?}", tile.left())); - - println!("{:?}", "hello"); let all_tiles = tiles.iter().flat_map(|tile| tile.variations()).collect_vec(); @@ -178,11 +117,5 @@ fn main() { .collect_vec(); println!("{:?}", corners.iter().map(|tile| tile.id).unique().reduce(|acc, a| acc * a).unwrap()); - - println!("{:?}", corners.iter().map(|corner| solve(corner, &all_tiles)).collect_vec()); - // println!("{:?}", corners.iter().map(|corner| solve(corner, &all_tiles)).sum::()); - // 2129 too high - // 2005 too low - // 1900 too low - // println!("{:?}", edges.iter().filter(|(_, v)| v.len() == 1).map(|(_, v)| v.iter().next().unwrap()).sorted().collect_vec()); + println!("{:?}", corners.iter().map(|corner| solve(corner, &all_tiles)).min().unwrap()); } \ No newline at end of file From 27c52eba6aca2101454419b596cb8620bfb5b71b Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Thu, 5 Sep 2024 01:37:47 +0200 Subject: [PATCH 140/225] Add day 20 --- 2020/20/20.rs | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/2020/20/20.rs b/2020/20/20.rs index 195abaa..89dfb6f 100644 --- a/2020/20/20.rs +++ b/2020/20/20.rs @@ -53,19 +53,15 @@ impl Tile { fn solve(corner: &Tile, all_tiles: &Vec) -> usize { let size = (0..).find(|i| i*i == all_tiles.len() / 8).unwrap(); - let mut leftmost = corner.clone(); + let mut leftmost = corner.rotated().rotated().flipped(); let mut used = HashSet::new(); - - let mut field: Vec> = Vec::new(); + let mut field: Vec = Vec::new(); for y in 0..size { - let mut current = leftmost.clone(); - if y != 0 { - current = all_tiles.iter().filter(|t| !used.contains(&t.id)).find(|tile| tile.top() == leftmost.bot()).unwrap().clone(); - } + let mut current = all_tiles.iter().filter(|t| !used.contains(&t.id)).find(|tile| tile.top() == leftmost.bot()).unwrap().clone(); leftmost = current.clone(); used.insert(current.id); - current.inner().rows.iter().for_each(|n| field.push(format!("{n:08b}").chars().collect())); + current.inner().rows.iter().for_each(|n| field.push(format!("{n:08b}"))); for _ in 1..size { current = all_tiles.iter().filter(|t| !used.contains(&t.id)).find(|tile| tile.left() == current.right()).unwrap().clone(); used.insert(current.id); @@ -75,12 +71,11 @@ fn solve(corner: &Tile, all_tiles: &Vec) -> usize { } } } - let lines = field.iter().map(|vec| vec.iter().join("")).collect_vec(); let dragon1 = Regex::new(r"..................1.").unwrap(); let dragon2 = Regex::new(r"1....11....11....111").unwrap(); let dragon3 = Regex::new(r".1..1..1..1..1..1...").unwrap(); let mut dragons = 0; - for (a, b, c) in lines.iter().tuple_windows() { + for (a, b, c) in field.iter().tuple_windows() { for i in 0..a.len() { if dragon1.is_match(&a.chars().skip(i).take(20).join("")) && dragon2.is_match(&b.chars().skip(i).take(20).join("")) @@ -89,33 +84,31 @@ fn solve(corner: &Tile, all_tiles: &Vec) -> usize { } } } - lines.join("").matches("1").count() - dragons + field.join("").matches("1").count() - dragons } fn main() { let input = stdin().lines().filter_map(Result::ok).join("\n").replace(".", "0").replace("#", "1"); let blocks = input.split("\n\n").collect_vec(); - let mut tiles = Vec::new(); + let mut all_tiles = Vec::new(); let mut edges: HashMap> = HashMap::new(); for block in blocks { let num: usize = block.lines().next().unwrap().trim_matches(['T', 'i', 'l', 'e', ' ', ':']).parse().unwrap(); let tile = Tile::new(num, block.lines().skip(1).collect()); - tiles.push(tile.clone()); + all_tiles.extend(tile.variations()); for (edge, _) in tile.top_edges() { edges.entry(edge).or_insert_with(HashSet::new).insert(num); } } - let all_tiles = tiles.iter().flat_map(|tile| tile.variations()).collect_vec(); - let corners = all_tiles.iter() .filter(|t| edges.get(&t.top()).unwrap().len() == 1) .filter(|t| edges.get(&t.left()).unwrap().len() == 1) .collect_vec(); - println!("{:?}", corners.iter().map(|tile| tile.id).unique().reduce(|acc, a| acc * a).unwrap()); - println!("{:?}", corners.iter().map(|corner| solve(corner, &all_tiles)).min().unwrap()); + println!("{}", corners.iter().map(|tile| tile.id).unique().reduce(|acc, a| acc * a).unwrap()); + println!("{}", corners.iter().map(|corner| solve(corner, &all_tiles)).min().unwrap()); } \ No newline at end of file From cf5d98b9acd4bc29e31a6f6db986862ba15f9859 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Thu, 5 Sep 2024 22:42:14 +0200 Subject: [PATCH 141/225] Add day 21 --- .aoc_tiles/tiles/2020/21.png | Bin 0 -> 7937 bytes 2020/21/21.rs | 33 +++++++++++++++++++++++++++++++++ README.md | 7 +++++-- 3 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2020/21.png create mode 100644 2020/21/21.rs diff --git a/.aoc_tiles/tiles/2020/21.png b/.aoc_tiles/tiles/2020/21.png new file mode 100644 index 0000000000000000000000000000000000000000..c28eeb773752ae6f16cf2cc5b26a677261e493fc GIT binary patch literal 7937 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 literal 0 HcmV?d00001 diff --git a/2020/21/21.rs b/2020/21/21.rs new file mode 100644 index 0000000..dc16eeb --- /dev/null +++ b/2020/21/21.rs @@ -0,0 +1,33 @@ +use std::{collections::{HashMap, HashSet}, io::stdin}; +use itertools::Itertools; + +fn main() { + let lines = stdin().lines().filter_map(Result::ok).collect_vec(); + + let mut all: Vec<&str> = Vec::new(); + let mut possible = HashMap::new(); + + for line in &lines { + let (left, right) = line.split_once(" (contains ").unwrap(); + let ingredients: HashSet<&str> = left.split(" ").collect(); + let allergens = right.trim_matches(')').split(", ").collect_vec(); + all.extend(&ingredients); + + for allergen in allergens { + possible.entry(allergen) + .or_insert(ingredients.clone()) + .retain(|k| ingredients.contains(k)) + } + } + println!("{}", all.iter().filter(|k| !possible.values().flatten().contains(k)).count()); + + let mut pairings: HashMap<&str, &str> = HashMap::new(); + while possible.len() != pairings.len() { + possible.iter() + .filter(|(_, v)| v.len() == 1) + .for_each(|(k, v)| { pairings.insert(k, v.iter().next().unwrap()); }); + possible.values_mut() + .for_each(|v| v.retain(|a| !pairings.values().contains(a))) + } + println!("{}", pairings.iter().sorted().map(|(_, b)| b).join(",")); +} \ No newline at end of file diff --git a/README.md b/README.md index ab8dc8f..5a494bc 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

- Advent of Code - 190/450 ⭐ + Advent of Code - 192/450 ⭐

- 2020 - 40 ⭐ + 2020 - 42 ⭐

@@ -299,6 +299,9 @@ + + + *The above tiles are clickable, leading to the solution of the corresponding day.* From f9962cf89a5350b48a961dc9105d73da2cbd5263 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Fri, 6 Sep 2024 00:21:02 +0200 Subject: [PATCH 142/225] Add day 22 --- .aoc_tiles/tiles/2020/22.png | Bin 0 -> 8294 bytes 2020/22/22.rs | 46 +++++++++++++++++++++++++++++++++++ README.md | 7 ++++-- 3 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2020/22.png create mode 100644 2020/22/22.rs diff --git a/.aoc_tiles/tiles/2020/22.png b/.aoc_tiles/tiles/2020/22.png new file mode 100644 index 0000000000000000000000000000000000000000..5604d51a1aec4afcbdfddbef88773d6fd4c1c8a1 GIT binary patch literal 8294 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, mut player2: VecDeque) { + while !player1.is_empty() && !player2.is_empty() { + let p1 = player1.pop_front().unwrap(); + let p2 = player2.pop_front().unwrap(); + if p1 > p2 { + player1.extend([p1, p2]) + } else { + player2.extend([p2, p1]) + } + } + println!("{:?}", player1.iter().chain(player2.iter()).rev().zip(1..).fold(0, |acc, (i, v)| acc+i*v)); +} + +fn part2(mut player1: VecDeque, mut player2: VecDeque) -> bool { + let is_first = player1.len() == player2.len(); + let mut cache = HashSet::new(); + while !player1.is_empty() && !player2.is_empty() { + let key = (player1.clone(), player2.clone()); + if cache.contains(&key) {return true;} + cache.insert(key); + let p1 = player1.pop_front().unwrap(); + let p2 = player2.pop_front().unwrap(); + let mut p1wins = p1 > p2; + if player1.len() >= p1 && player2.len() >= p2 { + p1wins = part2(player1.iter().take(p1).copied().collect(), player2.iter().take(p2).copied().collect()); + } + if p1wins { + player1.extend([p1, p2]) + } else { + player2.extend([p2, p1]) + } + } + if is_first { + println!("{:?}", player1.iter().chain(player2.iter()).rev().zip(1..).fold(0, |acc, (i, v)| acc+i*v)); + } + player2.is_empty() +} + +fn main() { + let mut player1: VecDeque = stdin().lines().map(|l| l.unwrap().parse()).filter_map(Result::ok).collect(); + let player2 = player1.split_off(player1.len() / 2); + part1(player1.clone(), player2.clone()); + part2(player1, player2); +} \ No newline at end of file diff --git a/README.md b/README.md index 5a494bc..7e90ca9 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

- Advent of Code - 192/450 ⭐ + Advent of Code - 194/450 ⭐

2023 - 50 ⭐ @@ -237,7 +237,7 @@

- 2020 - 42 ⭐ + 2020 - 44 ⭐

@@ -302,6 +302,9 @@ + + + *The above tiles are clickable, leading to the solution of the corresponding day.* From 474726e213e850e41bd707d2234374e7db944afd Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Fri, 6 Sep 2024 22:41:19 +0200 Subject: [PATCH 143/225] Add day 23 (part 1) --- .aoc_tiles/tiles/2020/23.png | Bin 0 -> 7377 bytes 2020/23/23.rs | 30 ++++++++++++++++++++++++++++++ README.md | 7 +++++-- 3 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2020/23.png create mode 100644 2020/23/23.rs diff --git a/.aoc_tiles/tiles/2020/23.png b/.aoc_tiles/tiles/2020/23.png new file mode 100644 index 0000000000000000000000000000000000000000..df72f6a6218f9ff9c60043b12b45038ce9376108 GIT binary patch literal 7377 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 n-Tl?hwjT8FE&JfZYem}Tz<6;svuVPwN 3 { break; } + dest -= 1; + } + // (1usize..=3).for_each(|j| cups.insert(to+j, cups.remove(j))); + (1usize..=3).for_each(|j| cups.insert(to+j, cups.chars().nth(j).unwrap())); + (1usize..=3).for_each(|j| { cups.remove(1); }); + let first = cups.remove(0); + cups.push(first); + println!("{:?}", cups); + } + + println!("{:?}", cups.chars().cycle().skip_while(|c| *c != '1').skip(1).take(8).join("")); + +} \ No newline at end of file diff --git a/README.md b/README.md index 7e90ca9..f1b7045 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

- Advent of Code - 194/450 ⭐ + Advent of Code - 195/450 ⭐

2023 - 50 ⭐ @@ -237,7 +237,7 @@

- 2020 - 44 ⭐ + 2020 - 45 ⭐

@@ -305,6 +305,9 @@ + + + *The above tiles are clickable, leading to the solution of the corresponding day.* From 191ac78b4568176b80ccba4621722badf6c5e848 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 7 Sep 2024 14:55:39 +0200 Subject: [PATCH 144/225] Add day 24 --- .aoc_tiles/tiles/2020/24.png | Bin 0 -> 8042 bytes 2020/24/24.rs | 33 +++++++++++++++++++++++++++++++++ README.md | 7 +++++-- 3 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2020/24.png create mode 100644 2020/24/24.rs diff --git a/.aoc_tiles/tiles/2020/24.png b/.aoc_tiles/tiles/2020/24.png new file mode 100644 index 0000000000000000000000000000000000000000..840685e1064b8fee7c1e0739ec0421e8a58a93f6 GIT binary patch literal 8042 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 literal 0 HcmV?d00001 diff --git a/2020/24/24.rs b/2020/24/24.rs new file mode 100644 index 0000000..3cbb768 --- /dev/null +++ b/2020/24/24.rs @@ -0,0 +1,33 @@ +use std::{collections::HashSet, io::stdin}; + +use regex::Regex; + +fn adjacent((x, y): &(i32, i32)) -> impl Iterator { + [(x-2, *y), (x+2, *y), (x+1, y+1), (x+1, y-1), (x-1, y-1), (x-1, y+1)].into_iter() +} + +fn main() { + let pat = Regex::new("e|ne|nw|w|sw|se").unwrap(); + let mut tiles = HashSet::new(); + + for line in stdin().lines().filter_map(Result::ok) { + let (mut x, mut y) = (0, 0); + for dir in pat.find_iter(&line).map(|m| m.as_str()) { + x += (dir.contains('e') as i32 * 4 - 2) / dir.len() as i32; + y += dir.contains('n') as i32 - dir.contains('s') as i32; + } + if !tiles.remove(&(x, y)) { + tiles.insert((x, y)); + } + } + println!("{}", tiles.len()); + + for _ in 0..100 { + tiles = tiles.iter() + .flat_map(adjacent) + .filter(|t| (1 + !tiles.contains(t) as usize..=2) + .contains(&adjacent(t).filter(|a| tiles.contains(a)).count())) + .collect(); + } + println!("{}", tiles.len()); +} diff --git a/README.md b/README.md index f1b7045..a4cf088 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

- Advent of Code - 195/450 ⭐ + Advent of Code - 197/450 ⭐

2023 - 50 ⭐ @@ -237,7 +237,7 @@

- 2020 - 45 ⭐ + 2020 - 47 ⭐

@@ -308,6 +308,9 @@ + + + *The above tiles are clickable, leading to the solution of the corresponding day.* From 1d0bfb483db7048a52b28f539e0198aebb5ddd49 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 7 Sep 2024 15:24:22 +0200 Subject: [PATCH 145/225] Add day 22 --- 2020/22/22.rs | 27 ++++++--------------------- 1 file changed, 6 insertions(+), 21 deletions(-) diff --git a/2020/22/22.rs b/2020/22/22.rs index 6079d04..097977a 100644 --- a/2020/22/22.rs +++ b/2020/22/22.rs @@ -1,30 +1,15 @@ use std::{collections::{HashSet, VecDeque}, io::stdin}; -fn part1(mut player1: VecDeque, mut player2: VecDeque) { - while !player1.is_empty() && !player2.is_empty() { - let p1 = player1.pop_front().unwrap(); - let p2 = player2.pop_front().unwrap(); - if p1 > p2 { - player1.extend([p1, p2]) - } else { - player2.extend([p2, p1]) - } - } - println!("{:?}", player1.iter().chain(player2.iter()).rev().zip(1..).fold(0, |acc, (i, v)| acc+i*v)); -} - -fn part2(mut player1: VecDeque, mut player2: VecDeque) -> bool { +fn solve(mut player1: VecDeque, mut player2: VecDeque, part2: bool) -> bool { let is_first = player1.len() == player2.len(); let mut cache = HashSet::new(); while !player1.is_empty() && !player2.is_empty() { - let key = (player1.clone(), player2.clone()); - if cache.contains(&key) {return true;} - cache.insert(key); + if !cache.insert((player1.clone(), player2.clone())) { return true; } let p1 = player1.pop_front().unwrap(); let p2 = player2.pop_front().unwrap(); let mut p1wins = p1 > p2; - if player1.len() >= p1 && player2.len() >= p2 { - p1wins = part2(player1.iter().take(p1).copied().collect(), player2.iter().take(p2).copied().collect()); + if part2 && player1.len() >= p1 && player2.len() >= p2 { + p1wins = solve(player1.iter().take(p1).copied().collect(), player2.iter().take(p2).copied().collect(), true) } if p1wins { player1.extend([p1, p2]) @@ -41,6 +26,6 @@ fn part2(mut player1: VecDeque, mut player2: VecDeque) -> bool { fn main() { let mut player1: VecDeque = stdin().lines().map(|l| l.unwrap().parse()).filter_map(Result::ok).collect(); let player2 = player1.split_off(player1.len() / 2); - part1(player1.clone(), player2.clone()); - part2(player1, player2); + solve(player1.clone(), player2.clone(), false); + solve(player1, player2, true); } \ No newline at end of file From 474f02438050a06aceb183546bb07a0e13d14af2 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 7 Sep 2024 16:16:37 +0200 Subject: [PATCH 146/225] Add day 25 --- .aoc_tiles/tiles/2020/25.png | Bin 0 -> 7596 bytes 2020/25/25.rs | 9 +++++++++ README.md | 7 +++++-- 3 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2020/25.png create mode 100644 2020/25/25.rs diff --git a/.aoc_tiles/tiles/2020/25.png b/.aoc_tiles/tiles/2020/25.png new file mode 100644 index 0000000000000000000000000000000000000000..6c39f1a1bc7821284240ac250bcf4ac6c128960e GIT binary patch literal 7596 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

- Advent of Code - 197/450 ⭐ + Advent of Code - 198/450 ⭐

2023 - 50 ⭐ @@ -237,7 +237,7 @@

- 2020 - 47 ⭐ + 2020 - 48 ⭐

@@ -311,6 +311,9 @@ + + + *The above tiles are clickable, leading to the solution of the corresponding day.* From df342c4ccacc45ae5f3ca163ee6d4f232474572a Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 7 Sep 2024 18:50:36 +0200 Subject: [PATCH 147/225] Add day 23 (part 2, very slow) --- 2020/23/23.rs | 75 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 52 insertions(+), 23 deletions(-) diff --git a/2020/23/23.rs b/2020/23/23.rs index 3d15716..5648931 100644 --- a/2020/23/23.rs +++ b/2020/23/23.rs @@ -1,30 +1,59 @@ -use std::io::stdin; +use std::{collections::VecDeque, io::stdin}; use itertools::Itertools; -fn main() { - let mut cups = stdin().lines().next().unwrap().unwrap(); - println!("{:?}", cups); - for _ in 0usize..100 { - // let m = i % 9; - let curr = cups.chars().next().unwrap().to_digit(10).unwrap() as i32; - let mut dest = curr + 9 - 1; - eprintln!("curr = {:?}", curr); - let mut to; - loop { - eprintln!("dest = {:?}", dest); - to = cups.find(&((dest - 1) % 9 + 1).to_string()).unwrap(); - if to > 3 { break; } - dest -= 1; - } - // (1usize..=3).for_each(|j| cups.insert(to+j, cups.remove(j))); - (1usize..=3).for_each(|j| cups.insert(to+j, cups.chars().nth(j).unwrap())); - (1usize..=3).for_each(|j| { cups.remove(1); }); - let first = cups.remove(0); - cups.push(first); - println!("{:?}", cups); +fn solve(mut cups: VecDeque, steps: i32) -> VecDeque { + let max = *cups.iter().max().unwrap(); + for i in 0..steps { + // println!("{:?}", cups); + if i % 1000 == 0 { println!("{:?}", i); } + + let curr = *cups.front().unwrap(); + cups.rotate_left(1); + + let mut dest = curr + max - 1; + let three = cups.drain(..3).rev().collect_vec(); + while three.contains(&((dest - 1) % max + 1)) { dest -= 1; } + let dest = (dest - 1) % max + 1; + + + let pos = cups.iter().rev().position(|n| *n == dest).unwrap(); + three.iter().for_each(|v| cups.insert(pos+1, *v)); } + cups.rotate_left(cups.iter().position(|n| *n == 1).unwrap()); + cups + // cups.iter().copied().cycle().skip_while(|n| *n != 1).take(cups.len()).collect() +} + +fn main() { + let cups: VecDeque<_> = stdin().lines().next().unwrap().unwrap().chars().map(|c| c.to_digit(10).unwrap()).collect(); + // println!("{:?}", cups); + println!("{:?}", solve(cups.clone(), 100)); + let a: VecDeque = cups.into_iter().chain(10u32..1_000_000).collect(); + // for _ in 0..1_000_000 { + // // a.push_front(100); + // a.insert(500000, 100); + // } + // println!("{:?}", a); + println!("{:?}", solve(a, 10_000_000).iter().take(10)); + // for _ in 0usize..100 { + // // let m = i % 9; + // let curr = cups.chars().next().unwrap().to_digit(10).unwrap() as i32; + // let mut dest = curr + 9 - 1; + // let mut to; + // loop { + // to = cups.find(&((dest - 1) % 9 + 1).to_string()).unwrap(); + // if to > 3 { break; } + // dest -= 1; + // } + // // (1usize..=3).for_each(|j| cups.insert(to+j, cups.remove(j))); + // (1usize..=3).for_each(|j| cups.insert(to+j, cups.chars().nth(j).unwrap())); + // (1usize..=3).for_each(|j| { cups.remove(1); }); + // let first = cups.remove(0); + // cups.push(first); + // println!("{:?}", cups); + // } - println!("{:?}", cups.chars().cycle().skip_while(|c| *c != '1').skip(1).take(8).join("")); + // println!("{:?}", cups.chars().cycle().skip_while(|c| *c != '1').skip(1).take(8).join("")); } \ No newline at end of file From 97c06e8e7d93a9570edcec9e214c8e5bc61898e9 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 7 Sep 2024 19:43:54 +0200 Subject: [PATCH 148/225] Add day 23 --- 2020/23/23.rs | 74 +++++++++++++++++++-------------------------------- 1 file changed, 28 insertions(+), 46 deletions(-) diff --git a/2020/23/23.rs b/2020/23/23.rs index 5648931..12d22bd 100644 --- a/2020/23/23.rs +++ b/2020/23/23.rs @@ -1,59 +1,41 @@ -use std::{collections::VecDeque, io::stdin}; +use std::io::stdin; use itertools::Itertools; -fn solve(mut cups: VecDeque, steps: i32) -> VecDeque { - let max = *cups.iter().max().unwrap(); - for i in 0..steps { - // println!("{:?}", cups); - if i % 1000 == 0 { println!("{:?}", i); } +fn solve(initial: Vec, steps: i32) -> Vec { + let mut cups = initial.iter().zip(initial.iter().cycle().skip(1)).sorted().map(|a| a.1).copied().collect_vec(); + cups.insert(0, 0); + let mut curr = initial[0]; + let max = initial.len(); - let curr = *cups.front().unwrap(); - cups.rotate_left(1); + for _ in 0..steps { + let first = cups[curr]; + let second = cups[first]; + let third = cups[second]; - let mut dest = curr + max - 1; - let three = cups.drain(..3).rev().collect_vec(); - while three.contains(&((dest - 1) % max + 1)) { dest -= 1; } - let dest = (dest - 1) % max + 1; + let mut dest = curr; + while [curr, first, second, third].contains(&dest) { dest = (dest + max - 2) % max + 1 } + cups[curr] = cups[third]; + cups[third] = cups[dest]; + cups[dest] = first; - let pos = cups.iter().rev().position(|n| *n == dest).unwrap(); - three.iter().for_each(|v| cups.insert(pos+1, *v)); + curr = cups[curr]; } - cups.rotate_left(cups.iter().position(|n| *n == 1).unwrap()); - cups - // cups.iter().copied().cycle().skip_while(|n| *n != 1).take(cups.len()).collect() + + let mut sorted = Vec::new(); + curr = 1; + for _ in 0..max { + sorted.push(curr); + curr = cups[curr]; + } + sorted } fn main() { - let cups: VecDeque<_> = stdin().lines().next().unwrap().unwrap().chars().map(|c| c.to_digit(10).unwrap()).collect(); - // println!("{:?}", cups); - println!("{:?}", solve(cups.clone(), 100)); - let a: VecDeque = cups.into_iter().chain(10u32..1_000_000).collect(); - // for _ in 0..1_000_000 { - // // a.push_front(100); - // a.insert(500000, 100); - // } - // println!("{:?}", a); - println!("{:?}", solve(a, 10_000_000).iter().take(10)); - // for _ in 0usize..100 { - // // let m = i % 9; - // let curr = cups.chars().next().unwrap().to_digit(10).unwrap() as i32; - // let mut dest = curr + 9 - 1; - // let mut to; - // loop { - // to = cups.find(&((dest - 1) % 9 + 1).to_string()).unwrap(); - // if to > 3 { break; } - // dest -= 1; - // } - // // (1usize..=3).for_each(|j| cups.insert(to+j, cups.remove(j))); - // (1usize..=3).for_each(|j| cups.insert(to+j, cups.chars().nth(j).unwrap())); - // (1usize..=3).for_each(|j| { cups.remove(1); }); - // let first = cups.remove(0); - // cups.push(first); - // println!("{:?}", cups); - // } - - // println!("{:?}", cups.chars().cycle().skip_while(|c| *c != '1').skip(1).take(8).join("")); + let cups = stdin().lines().next().unwrap().unwrap().chars().map(|c| c.to_digit(10).unwrap() as usize).collect_vec(); + println!("{}", solve(cups.clone(), 100).iter().skip(1).join("")); + let p2 = cups.into_iter().chain(10..=1_000_000).collect(); + println!("{}", solve(p2, 10_000_000).into_iter().skip(1).take(2).reduce(|acc, a| acc * a).unwrap()); } \ No newline at end of file From a755cfecf86f3ee94bf54c76bafc528ab0b73e1a Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 7 Sep 2024 20:46:01 +0200 Subject: [PATCH 149/225] Add day 2 --- 2020/02/02.rs | 55 ++++++++++++++++++++++----------------------------- 1 file changed, 24 insertions(+), 31 deletions(-) diff --git a/2020/02/02.rs b/2020/02/02.rs index 9778cf2..92c7206 100644 --- a/2020/02/02.rs +++ b/2020/02/02.rs @@ -1,45 +1,38 @@ -use regex::Regex; -use std::io::Read; +use itertools::Itertools; +use std::io::stdin; -#[derive(Debug)] struct PasswordPhilosophy { - range: std::ops::Range, + range: std::ops::RangeInclusive, letter: char, string: String, } fn get_password_philosophies() -> Vec { - let mut input = String::new(); - std::io::stdin().read_to_string(&mut input).unwrap(); - let pattern = Regex::new(r"(\d+)-(\d+) (\w): (\w+)").unwrap(); - let mut philosophies = Vec::new(); - for cap in pattern.captures_iter(&input) { - let range = cap[1].parse::().unwrap()..cap[2].parse::().unwrap()+1; - let letter = cap[3].chars().next().unwrap(); - philosophies.push(PasswordPhilosophy { range, letter, string: cap[4].to_string() }); - } - philosophies + let lines = stdin().lines().filter_map(Result::ok).collect_vec(); + lines.iter() + .map(|line| line.split(|c| "- :".contains(c)).next_tuple().unwrap()) + .map(|(a, b, letter, _, string)| { + PasswordPhilosophy { + range: a.parse().unwrap()..=b.parse().unwrap(), + letter: letter.chars().next().unwrap(), + string: string.to_owned(), + } + }) + .collect() } - fn main() { let philosophies = get_password_philosophies(); - let mut sum1 = 0; - for p in &philosophies { - let letter_count = p.string.matches(p.letter).count(); - if p.range.contains(&(letter_count as i32)) { - sum1 += 1 - } - } + println!("{}", philosophies.iter().filter(|p| p.range.contains(&p.string.matches(p.letter).count())).count()); - let mut sum2 = 0; - for p in &philosophies { - let is_first = p.string.chars().nth((p.range.start-1) as usize).unwrap() == p.letter; - let is_second = p.string.chars().nth((p.range.end-2) as usize).unwrap() == p.letter; - if is_first != is_second { - sum2 += 1 - } - } + let sum2 = philosophies + .iter() + .filter(|p| { + let is_first = p.string.chars().nth((p.range.start() - 1) as usize).unwrap() == p.letter; + let is_second = p.string.chars().nth((p.range.end() - 1) as usize).unwrap() == p.letter; + is_first != is_second + }) + .count(); - println!("{}\n{}", sum1, sum2); + println!("{}", sum2); } \ No newline at end of file From a0a3e77be46e3acbc8e8ba8226a83f8a2523e3c0 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 7 Sep 2024 20:46:49 +0200 Subject: [PATCH 150/225] Update readme --- README.md | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 49d8d5f..6054414 100644 --- a/README.md +++ b/README.md @@ -325,19 +325,38 @@ The graphic above has been created using [aoc_tiles](https://github.com/LiquidFu --- +My solutions: -All of my solutions are self-contained and use no util files (and mostly no libraries). I try to golf the solutions a little after getting the stars, while still maintaining some readability. The combination of these factors means they're rather short and generally quite elegant (e.g. [2023/18](2023/18/18.py)). The solutions expect the input via `stdin` and print (generally) 2 lines to `stdout` with the answer to part 1 and part 2. Exceptions to this are the solutions which require you to read some letters from ASCII art, in that case the ASCII art is part of the `.ans` file and it is printed by the solution instead of the letters. +* are self-contained and use no util files and mostly no libraries. +* are written in a very concise and functional style (only 5/100 solutions have >=70 loc as calculated by `cloc`) +* try to be (too) clever, this is not code written for readability, but for pushing language expressibility. +* solve both parts of each problem at once. I believe structuring the code so that it solves both parts is often an interesting challenge. +* expect input via `stdin` and output (generally) 2 lines to `stdout` with the answer to part 1 and part 2. +* (generally) parse input as it is given without modifying or pasting it into the code as an array. Parsing the strings in as little code as possible is a huge part of AoC. -* **2023**: Initially I wanted to use Rust for this year, but instead I focused on getting on the leaderboard with **Python** (successfully on day 18 and 25!). In the last days I even started using libraries (Z3/networkx). Python is my strongest language, so no surprises there, I did 5 days in Rust as well, but found it too frustrating and had too little time for 2 solutions per day. +and are written in a different programming language each year: + +* **2023**: Initially I wanted to use Rust for this year, but instead I focused on getting on the leaderboard with **Python** (successfully on day 18 and 25!). In the last days I even started using libraries (Z3/networkx). Python is my strongest language, so no surprises there. I did 5 days in Rust as well, but found it too frustrating and had too little time for 2 solutions per day. * **2022**: Using **Kotlin** for the first time. Playing with streams a lot, many days are completed by only using streams. The first 15 days have **Python** solutions as well in order to be able to submit quicker and get better times on the leaderboard. * **2021**: Using **Julia** for the first time. Because it supports numpy-like element-wise operations natively this was a great choice for AoC. If I used more Julia it would likely be my go to language for AoC right now. +* **2020**: Using **Rust** for the first time. Solved 8 days initially. Revisited in 2024 and solved all of them. This time I liked Rust much more. I ended up writing very concise and functional Rust. After getting used to it it was quite fun. All rust solutions are below 100 loc (as calculated by `cloc`). Not part of the repository yet, since these are incomplete and the code is not good (might revisit them later): -* **2020**: Using **Rust** for the first time. Solved 8 days, however I found Rust was too verbose and too safe for AoC. -* **2019**: First time participating, solved 5 days with **Python** +* **2019**: First time participating, solved 5 days with **Python**. + +--- + +### Running + +* 2023: `python 01.py < input.in` +* 2022: `kotlinc 01.kt -include-runtime -d 01.jar && kotlin 01.jar < example.in` (or use intellij, kotlinc is very slow via CLI, 5+ seconds to compile) +* 2021: `julia 1.jl < input.in` +* 2020: `cargo run --release --bin 01 < input.in` or with autoresolve current dir, auto-refresh and time-taken: `cargo watch -s 'time cargo run --release --bin '$(basename $PWD)' < '$(basename $PWD)'/input.in'` In order to test the programs you can pipe the input to the program, for example: `julia 1.jl < input.in`. The correct output is saved in the `input.ans`. Instead of doing this manually, I use my `program-tester.sh` script (see [here](https://github.com/LiquidFun/misc-scripts)), which runs the given program on all `*.in` files in the directory, and tests whether the corresponding `*.ans` file matches the given output. I have mapped that program on `Enter` in vim, which makes testing programs easy. Programs are initialized with the `init-day.sh` script. I.e. typing `init-day.sh 10` initializes the 10th day by creating a folder named `10` and downloading the input test case with the `session.cookie`. +My favorite solution [2023/18](2023/18/18.py) + From 0a85560e26639b96eb76091afca1453db7b71987 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 7 Sep 2024 20:46:49 +0200 Subject: [PATCH 151/225] Update readme --- README.md | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 49d8d5f..6054414 100644 --- a/README.md +++ b/README.md @@ -325,19 +325,38 @@ The graphic above has been created using [aoc_tiles](https://github.com/LiquidFu --- +My solutions: -All of my solutions are self-contained and use no util files (and mostly no libraries). I try to golf the solutions a little after getting the stars, while still maintaining some readability. The combination of these factors means they're rather short and generally quite elegant (e.g. [2023/18](2023/18/18.py)). The solutions expect the input via `stdin` and print (generally) 2 lines to `stdout` with the answer to part 1 and part 2. Exceptions to this are the solutions which require you to read some letters from ASCII art, in that case the ASCII art is part of the `.ans` file and it is printed by the solution instead of the letters. +* are self-contained and use no util files and mostly no libraries. +* are written in a very concise and functional style (only 5/100 solutions have >=70 loc as calculated by `cloc`) +* try to be (too) clever, this is not code written for readability, but for pushing language expressibility. +* solve both parts of each problem at once. I believe structuring the code so that it solves both parts is often an interesting challenge. +* expect input via `stdin` and output (generally) 2 lines to `stdout` with the answer to part 1 and part 2. +* (generally) parse input as it is given without modifying or pasting it into the code as an array. Parsing the strings in as little code as possible is a huge part of AoC. -* **2023**: Initially I wanted to use Rust for this year, but instead I focused on getting on the leaderboard with **Python** (successfully on day 18 and 25!). In the last days I even started using libraries (Z3/networkx). Python is my strongest language, so no surprises there, I did 5 days in Rust as well, but found it too frustrating and had too little time for 2 solutions per day. +and are written in a different programming language each year: + +* **2023**: Initially I wanted to use Rust for this year, but instead I focused on getting on the leaderboard with **Python** (successfully on day 18 and 25!). In the last days I even started using libraries (Z3/networkx). Python is my strongest language, so no surprises there. I did 5 days in Rust as well, but found it too frustrating and had too little time for 2 solutions per day. * **2022**: Using **Kotlin** for the first time. Playing with streams a lot, many days are completed by only using streams. The first 15 days have **Python** solutions as well in order to be able to submit quicker and get better times on the leaderboard. * **2021**: Using **Julia** for the first time. Because it supports numpy-like element-wise operations natively this was a great choice for AoC. If I used more Julia it would likely be my go to language for AoC right now. +* **2020**: Using **Rust** for the first time. Solved 8 days initially. Revisited in 2024 and solved all of them. This time I liked Rust much more. I ended up writing very concise and functional Rust. After getting used to it it was quite fun. All rust solutions are below 100 loc (as calculated by `cloc`). Not part of the repository yet, since these are incomplete and the code is not good (might revisit them later): -* **2020**: Using **Rust** for the first time. Solved 8 days, however I found Rust was too verbose and too safe for AoC. -* **2019**: First time participating, solved 5 days with **Python** +* **2019**: First time participating, solved 5 days with **Python**. + +--- + +### Running + +* 2023: `python 01.py < input.in` +* 2022: `kotlinc 01.kt -include-runtime -d 01.jar && kotlin 01.jar < example.in` (or use intellij, kotlinc is very slow via CLI, 5+ seconds to compile) +* 2021: `julia 1.jl < input.in` +* 2020: `cargo run --release --bin 01 < input.in` or with autoresolve current dir, auto-refresh and time-taken: `cargo watch -s 'time cargo run --release --bin '$(basename $PWD)' < '$(basename $PWD)'/input.in'` In order to test the programs you can pipe the input to the program, for example: `julia 1.jl < input.in`. The correct output is saved in the `input.ans`. Instead of doing this manually, I use my `program-tester.sh` script (see [here](https://github.com/LiquidFun/misc-scripts)), which runs the given program on all `*.in` files in the directory, and tests whether the corresponding `*.ans` file matches the given output. I have mapped that program on `Enter` in vim, which makes testing programs easy. Programs are initialized with the `init-day.sh` script. I.e. typing `init-day.sh 10` initializes the 10th day by creating a folder named `10` and downloading the input test case with the `session.cookie`. +My favorite solution [2023/18](2023/18/18.py) + From 08c9b6ce167714f9fad2429651f9fe3711caecb2 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 7 Sep 2024 20:48:54 +0200 Subject: [PATCH 152/225] Fix tiles --- .aoc_tiles/tiles/2020/23.png | Bin 7377 -> 0 bytes .aoc_tiles/tiles/2020/25.png | Bin 7596 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .aoc_tiles/tiles/2020/23.png delete mode 100644 .aoc_tiles/tiles/2020/25.png diff --git a/.aoc_tiles/tiles/2020/23.png b/.aoc_tiles/tiles/2020/23.png deleted file mode 100644 index df72f6a6218f9ff9c60043b12b45038ce9376108..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7377 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 Date: Sat, 7 Sep 2024 20:50:03 +0200 Subject: [PATCH 153/225] Add day 2 --- .aoc_tiles/tiles/2020/23.png | Bin 0 -> 7377 bytes .aoc_tiles/tiles/2020/25.png | Bin 0 -> 7596 bytes 2020/02/02.rs | 4 ++-- 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2020/23.png create mode 100644 .aoc_tiles/tiles/2020/25.png diff --git a/.aoc_tiles/tiles/2020/23.png b/.aoc_tiles/tiles/2020/23.png new file mode 100644 index 0000000000000000000000000000000000000000..df72f6a6218f9ff9c60043b12b45038ce9376108 GIT binary patch literal 7377 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 Vec { +fn parse_password_philosophies() -> Vec { let lines = stdin().lines().filter_map(Result::ok).collect_vec(); lines.iter() .map(|line| line.split(|c| "- :".contains(c)).next_tuple().unwrap()) @@ -22,7 +22,7 @@ fn get_password_philosophies() -> Vec { } fn main() { - let philosophies = get_password_philosophies(); + let philosophies = parse_password_philosophies(); println!("{}", philosophies.iter().filter(|p| p.range.contains(&p.string.matches(p.letter).count())).count()); let sum2 = philosophies From 7e1482f06302d3c6ed1e31a0ee7e3951828eea49 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 7 Sep 2024 20:53:38 +0200 Subject: [PATCH 154/225] Add day 14 --- .aoc_tiles/tiles/2020/23.png | Bin 7377 -> 9049 bytes .aoc_tiles/tiles/2020/25.png | Bin 7596 -> 8791 bytes 2020/14/14.rs | 2 +- README.md | 4 ++-- 4 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.aoc_tiles/tiles/2020/23.png b/.aoc_tiles/tiles/2020/23.png index df72f6a6218f9ff9c60043b12b45038ce9376108..f84a91a7aed0435aa8fdc06668e567dd82ed596c 100644 GIT binary patch literal 9049 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 println!("{:?}", memory2.values().sum::()); -} +} \ No newline at end of file diff --git a/README.md b/README.md index 6054414..8dceb8d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

- Advent of Code - 198/450 ⭐ + Advent of Code - 200/450 ⭐

2023 - 50 ⭐ @@ -237,7 +237,7 @@

- 2020 - 48 ⭐ + 2020 - 50 ⭐

From 34158d2c814113fdad556c0667ef026fcb0b91e6 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 14 Sep 2024 00:03:50 +0200 Subject: [PATCH 155/225] Add day 1 --- 2020/01/01.rs | 2 +- 2020/Cargo.toml | 4 ++++ 2020/benchmark.sh | 2 ++ init-day.sh | 44 +++++++++++++++++++++++++------------------- 4 files changed, 32 insertions(+), 20 deletions(-) create mode 100644 2020/benchmark.sh diff --git a/2020/01/01.rs b/2020/01/01.rs index 906364a..4d2638c 100644 --- a/2020/01/01.rs +++ b/2020/01/01.rs @@ -2,7 +2,7 @@ use std::io::stdin; use itertools::iproduct; fn main() { - let nums: Vec = stdin().lines().map(|a| a.unwrap().parse::().unwrap()).collect(); + let nums: Vec = stdin().lines().map(|a| a.unwrap().parse().unwrap()).collect(); iproduct!(&nums, &nums) .find(|(&a, &b)| a+b == 2020) .map(|(&a, &b)| println!("{}", a*b)); diff --git a/2020/Cargo.toml b/2020/Cargo.toml index 79a1ad9..6cd3638 100644 --- a/2020/Cargo.toml +++ b/2020/Cargo.toml @@ -3,6 +3,10 @@ name = "aoc2020" version = "0.1.0" edition = "2021" +[profile.release] +codegen-units = 1 +lto = "fat" + # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] diff --git a/2020/benchmark.sh b/2020/benchmark.sh new file mode 100644 index 0000000..134b8ad --- /dev/null +++ b/2020/benchmark.sh @@ -0,0 +1,2 @@ +for dir in {0,1,2}*; do cargo build --release --bin $dir; done +for dir in {0,1,2}*; do hyperfine -N --min-runs 1 --warmup 3 --input $dir/input.in ./target/release/$dir; done diff --git a/init-day.sh b/init-day.sh index 261e0f8..f8e1cbb 100755 --- a/init-day.sh +++ b/init-day.sh @@ -1,44 +1,50 @@ #!/usr/bin/bash -year="2023" -cookie=$(cat session.cookie) +year="2019" +SCRIPT_DIR="$(dirname "$(realpath "$0")")" +cookie="$(cat $SCRIPT_DIR/.aoc_tiles/session.cookie)" input_prefix="input" sample_prefix="example" # Example comes before input alphabetically, so it shows up in front in the program-tester.sh if [[ "$1" ]]; then - if ! [[ -d "$1" ]]; then - echo "Creating folder for problem $1" - mkdir "$1" + dir=$(printf "%02d" "$1") + path="$SCRIPT_DIR/$year/$dir" + if ! [[ -d "$path" ]]; then + echo "Creating folder for problem $dir in $path" + mkdir "$path" fi - cd "$1" + cd "$path" # Download input from advent of code - input_file="${input_prefix}.in" + input_file="$path/${input_prefix}.in" + echo $input_file if ! [[ -f "$input_file" ]]; then - echo "Downloading input for problem $1" + echo "Downloading input for problem $dir" # Don't DDOS! So check if file exists already nozero=$(echo "$1" | awk '$0*=1') curl "https://adventofcode.com/$year/day/$nozero/input" --cookie "session=$cookie" > "$input_file" + else + echo "Skipping $dir because input file exists $input_file" fi # Add empty file so there are not that many lines when showing input instead - input_ans_file="${input_prefix}.ans" - if ! [[ -f "$input_ans_file" ]]; then - echo "Create empty input answer file" - touch "$input_ans_file" - fi + # input_ans_file="${input_prefix}.ans" + # if ! [[ -f "$input_ans_file" ]]; then + # echo "Create empty input answer file" + # touch "$input_ans_file" + # fi # Prepare dummy python solution - solution_file="$1.py" - if ! [[ -f "$solution_file" ]]; then - echo "Create dummy python solution $solution_file" - cp "../../dummy.py" "$solution_file" - fi + # solution_file="$1.py" + # if ! [[ -f "$solution_file" ]]; then + # echo "Create dummy python solution $solution_file" + # cp "../../dummy.py" "$solution_file" + # fi - nvim "$solution_file" "${sample_prefix}.in" "${sample_prefix}.ans" -c "norm G$" + # nvim "$solution_file" "${sample_prefix}.in" "${sample_prefix}.ans" -c "norm G$" else echo "Supply some number as first argument to initialize a problem!" fi From b647628b0cf3b86a2e5b5302da5a1357d3794cfc Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 14 Sep 2024 00:04:34 +0200 Subject: [PATCH 156/225] Add day 1 --- .aoc_tiles/tiles/2019/01.png | Bin 0 -> 8769 bytes .aoc_tiles/tiles/2019/02.png | Bin 0 -> 9260 bytes .aoc_tiles/tiles/2019/03.png | Bin 0 -> 9546 bytes .aoc_tiles/tiles/2019/04.png | Bin 0 -> 8632 bytes .aoc_tiles/tiles/2019/05.png | Bin 0 -> 9365 bytes 2019/01/01.ml | 14 ++++++++++++++ README.md | 21 ++++++++++++++++++++- 7 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 .aoc_tiles/tiles/2019/01.png create mode 100644 .aoc_tiles/tiles/2019/02.png create mode 100644 .aoc_tiles/tiles/2019/03.png create mode 100644 .aoc_tiles/tiles/2019/04.png create mode 100644 .aoc_tiles/tiles/2019/05.png create mode 100644 2019/01/01.ml diff --git a/.aoc_tiles/tiles/2019/01.png b/.aoc_tiles/tiles/2019/01.png new file mode 100644 index 0000000000000000000000000000000000000000..14a2155ac9367ca59e19eb0a699782f9ad4f6001 GIT binary patch literal 8769 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 literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2019/02.png b/.aoc_tiles/tiles/2019/02.png new file mode 100644 index 0000000000000000000000000000000000000000..a82597f2c8ce14dbd15de838413df97d753cc635 GIT binary patch literal 9260 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 literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2019/03.png b/.aoc_tiles/tiles/2019/03.png new file mode 100644 index 0000000000000000000000000000000000000000..68052170bc97c0e5ab7ddd7e2c68dc1073f57b8e GIT binary patch literal 9546 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 literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2019/05.png b/.aoc_tiles/tiles/2019/05.png new file mode 100644 index 0000000000000000000000000000000000000000..892cc0bcade19f77e9fb7a7abe38cc5b9903b8a3 GIT binary patch literal 9365 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 fuel |> fuel_of_fuel);; + +let rec collect_nums acc = + try + let line = input_line stdin in + collect_nums ((line |> int_of_string |> fuel) :: acc) + with End_of_file -> + List.rev acc + +let () = + let lines = collect_nums [] in + List.fold_left ( + ) 0 lines |> Printf.printf "%d\n"; + List.fold_left ( + ) 0 (List.map fuel_of_fuel lines) |> print_int \ No newline at end of file diff --git a/README.md b/README.md index 8dceb8d..413db7e 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

- Advent of Code - 200/450 ⭐ + Advent of Code - 210/450 ⭐

+ 2019 - 10 ⭐ +

+ + + + + + + + + + + + + + + *The above tiles are clickable, leading to the solution of the corresponding day.* @@ -353,6 +371,7 @@ Not part of the repository yet, since these are incomplete and the code is not g * 2022: `kotlinc 01.kt -include-runtime -d 01.jar && kotlin 01.jar < example.in` (or use intellij, kotlinc is very slow via CLI, 5+ seconds to compile) * 2021: `julia 1.jl < input.in` * 2020: `cargo run --release --bin 01 < input.in` or with autoresolve current dir, auto-refresh and time-taken: `cargo watch -s 'time cargo run --release --bin '$(basename $PWD)' < '$(basename $PWD)'/input.in'` +* 2019: `ocaml 01.ml < input.in` In order to test the programs you can pipe the input to the program, for example: `julia 1.jl < input.in`. The correct output is saved in the `input.ans`. Instead of doing this manually, I use my `program-tester.sh` script (see [here](https://github.com/LiquidFun/misc-scripts)), which runs the given program on all `*.in` files in the directory, and tests whether the corresponding `*.ans` file matches the given output. I have mapped that program on `Enter` in vim, which makes testing programs easy. From a534fac0b9a068fb248fbcd2ba81bc9d8b527823 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 14 Sep 2024 00:04:34 +0200 Subject: [PATCH 157/225] Add day 1 --- .aoc_tiles/tiles/2019/01.png | Bin 0 -> 8992 bytes .aoc_tiles/tiles/2019/02.png | Bin 0 -> 9260 bytes .aoc_tiles/tiles/2019/03.png | Bin 0 -> 9546 bytes .aoc_tiles/tiles/2019/04.png | Bin 0 -> 8632 bytes .aoc_tiles/tiles/2019/05.png | Bin 0 -> 9365 bytes .pre-commit-config.yaml | 2 +- 2019/01/01.ml | 14 ++++++++++++++ README.md | 29 ++++++++++++++++++++++++----- 8 files changed, 39 insertions(+), 6 deletions(-) create mode 100644 .aoc_tiles/tiles/2019/01.png create mode 100644 .aoc_tiles/tiles/2019/02.png create mode 100644 .aoc_tiles/tiles/2019/03.png create mode 100644 .aoc_tiles/tiles/2019/04.png create mode 100644 .aoc_tiles/tiles/2019/05.png create mode 100644 2019/01/01.ml diff --git a/.aoc_tiles/tiles/2019/01.png b/.aoc_tiles/tiles/2019/01.png new file mode 100644 index 0000000000000000000000000000000000000000..3146660dc97079a5a641e106696f1ebc35224845 GIT binary patch literal 8992 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 literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2019/03.png b/.aoc_tiles/tiles/2019/03.png new file mode 100644 index 0000000000000000000000000000000000000000..68052170bc97c0e5ab7ddd7e2c68dc1073f57b8e GIT binary patch literal 9546 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 literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2019/05.png b/.aoc_tiles/tiles/2019/05.png new file mode 100644 index 0000000000000000000000000000000000000000..892cc0bcade19f77e9fb7a7abe38cc5b9903b8a3 GIT binary patch literal 9365 zcmX9^1yq#%(_KNOL22oZr9lZnK)M8^yFp4?TH>XYZcti~?vPqaL`qVnOG%|e1gUTM zf6qDM9$EL9XMQtx?!B|G)m7#3uqm(+2n3#@f{X_I-3NcHFwx+r%F2cj0>NaYDDzm$ zJ9FFEk50?(DiAmPGjp@d@&~J=V`GkF<+AMxOl777L++G{D9&G#WyNz$*KQ)Keo9M27)fBUkjO{^!{ynx|q*_)nuhH z9v&X!Gv-J|jlu8VzvGZ{1`$k_>${)qnSbNjUF_K1-hTP-=vTgc+`-|Yp@G2^?O8u- z&dpo5xJ*#w2$!9?=8X+oM-!=Zraxb_YxFpE0s}iAGi>6ckP~_3RuR94st0E-rTvxm8tFm6eyPX{HqS?qOkKMsxFo z_G^w9_3FKU|DJ_~B|JR5y}f;YeqKEcac8C{gl(vS3+tw6clZ>e;?Io3hvN8q+#v;n6?%lhe5Yb>Nm*EFT{XbXv z#l@HiIt~uQ*iP0Qf3*3t!x4$@FdG{is_7ylE?r$+At50GTwFSwG%iCMd;5olC^M?n z2Lb|Rm6bX=I-l28A8}amlKc4hNJ~q*ysoL?Lr6Y(vOSQ(;pF6`h1Ay4I;tBHkBW;E z;^TX~AX;)Mz1-Pq_qDLWVbZ|BV4>BEK;OySoUah&-`5&&@h>_$dbZJ-m5C|W;EA5z z)aJOn-e6*N*?eilUShTCLiAn_pvHox7G+a#ohHl+?#?Jj(WqW5a9|n;AQ)h5;Pn$={`= z+~D9Yl+WQ(A{;qHBP!Z@eC!#G@$*yi1QHVtqfeTio*p5ouRp!q8wZuhc2GNbc6o7j z3y0Lo#>Q>7JSjER)7AC$t5*stDk!hrg&*A!RYuLV?(3?>jC2VKA3l6=b#)bTUhqHO z(hmp-@bIY5%A)>FFJSYfGk~u$GVJ_VQBiRyQ-ny||IhD~!a^2*JxxvcP(fi~JwwB@ z(HFPbRM0CDQ&Sf{Jg2O^X&Do4JhB&(kGiMEp5~E&=n~AC3X};yl7nP=-ek*=N=i=hx`1rx+7)pury^!Q&EiEnLQiA0? zJvfTg)KsYUU}Ys`WlBm)T8RMMG+R46xG5$UmYuylLse*}MU6>E03L0nUJV+;%-Win zo<6w6t<-@8v6Q4H{#09A7Vm`sKR?7K7lnpK;{y>1I!^6vR&``Qe1Sdvps%k_lF=qG z@T#DIiIOrSFE6jMk{cr5_-|ulBSXj;o^i~!er07PHa3jCB64d-gM^td5^CDn|Ns~*kGj?nz4^L8md3m`}olQ()BB9nt zGhRTGTs~86?eCkDRe2-zxw&-pkvIq!clWPjWBY&pd>f#>gnMq~uqH zVWWnoro`2`yOYdl3$<@M+SO0JK^2z6Kbw=+6QR(J|V9+8U$r z$1er%>Ab3{z@^UMogF7#-AQP_p!mk-=IO4kV5z)L=FzmG=H`0{GaDNnEv=io4Y>ID zG@_ng78U}2jlYL@PE7v_N5?<2a4WMT3*{T)(#FCnVFey-(vsbOZ*GH6&xH4u;Jp|0$BR? z`l3KcLT~_6H*elt`h`kPPL7XPhl!BaNP@PkHwaxZU2Pr$72tNz*Dl5P8^xxQtkcum ztE`~VnL&R?r^=+wd;e#v*KX~s@Ln$mH+Q?s4=DnIxPSkAi*GVJ!)0OdGy9RBjEqca zSsA31i<9$%^CEuMP+wmVF8BD?uW(-L!&#f#+w;@Yr?bu-Km2cCN-gUTVq;^ER^R>H zpTrsnqq=5I)`ECFNXBPbt??4ot!EwDu%{FZ%_yomy~cB)MFxe#l+6{esn{@nzs3->jaySuhEj%mvL2 ztn>|HuqbY-((!QjB*w?TiivsTy+=3h9qtTlLtai!PDbX{>(~1za`x@w>belixCe;_ zq$DIzAu@3(|~}El$;~ zGKmobl982_wXm=Nyo~i9%U8KF#0Xz%ON+0P6888_AL6{iLg-o%H8r)^iI%PL*aV9_ zU(R<8j?bTGWn|!7ggZ1>R>p2PL_2L_&1%~+S=MUI5;uU(Xq4=CQqN5+u1e4u)Dmx{QOz2 z58eLTS@e9X7qEo`Xb@*xTfJ(t#|jFsVCq>}F(J%`-afz}p!qU5DC)NIs<^l~B&7S- z*CHtT9PyXf^R2dH@0yyL=H}*_nuKAL5D_H-%0tIzihAJ(v`0n`lxP-hctB>A{QO$m z+XHNEZMC&Y=Hy+BdkINMhQ54}q4*F-O(W*Lw6lYMmDBXSHb39e%xtN+&Uvos?#$@Y zbPLsFO>J#06*cwK3g!GUI->i}o;?HZ3ta#Yo|2ZvV^Gf~AaMBUHPP_!FefR;{rgAj zIf3Dxfv4!}`*^RlbaXsd`VxTF6@OY-5T~Q-932IgTv%9GTIzdt{9M6=|Be6ZKnhU9 zg5F}Fv{7U{OWp7|z-9^>%)GsuA|oTq$~ex^6x^|b#w^1kBI4q7ZXi57JdU@fiAYIr z^BQ`o_?6dCE*>2n0i$UzD#AG6%n|jfEGSq>V3g0Tn-eRO>l++$%IdLr@V~3;03R3k z{{8#vC0Z-n3KeLGSFc{7UY?PP7ig3~U_c}L$RyivpY>cz+m928PO7En}D)|CV!R zG*23+fq=(vc(Jy&2EPIp588?t+Zv_-$Q?mJ!Ay)@V(cSmSGm{An~>YD<*UZ$E zBKTjYLl8~F|dje)W z*TW&{#)a{{Rfk0kLSp^rPqed!{m{zF9UyrkGd0y`O$;~A-tT`pnm~3A zIvMNhpRV*LA%cKCn=hbzs)cMdHHqr6%+1YfAfZ4$#l81(^Ygo>rly95xI{%M1xxe4 z{$f?l43df?CL!quc6E9R_q(uMrDo?sX5y(av9KJVY;0}W0M+l`Ctep&WExLoRtByA zbQNHkZR7#*5{=ohM9ddH- zzdObt$03_Q=6d63&rVJNJK5OTFF?oi_xD5dfHHXg{JE+Be$QYU&)@A?j73qu<1KUy zeE+}mUUOeK%AN?qR0xlkK9Fy0ZVCtruATbaM!brON=r^& z%AqGECYHRMPyjIVR*q%Frxl-@m{?n04#Cy?cozbM$GT5}H!|1_#J!lj01?#LDapmf zMN3QT-AT{I1zb*%Aps|a?}FlqPkv9Rbkp|uH1OiUD}ye*}#fA2C%Sy_4CROP+Kbja?W5jFGC z0Rllnl2Z3hJwaZ(p}7|;}8|8UAUG06!}kxRQ()zvQE-Y3w)2|G(NJ~ezl zmiq`Iui;B7E=Z_*KS=$KGvVuk!oqOm%7_y_B{V-60NmW%azNkR!qlqfc zL8G74TVcCN5YL0IDC!x>Oh@OkF-q@gIAJ&1Lev*!;?w)OtLyRk;2bgbEjy23jA{`v z&h067QknJL-8jxSG!>%3;JuMv(qQ^>M)fe%M-arQ#*fFASlmFQ@|fZ~%cy2dWJxX% zM9SLc;}!W(B$D{~5ZyW^4-6HoI}J%nB1$*8{s`LJyP@qm@7}$O7hzD+lxJVlvmHe3kU^*D}jUf&!0a4iBJV%ZY!9L z#jRVsf`Xr`^mtjG1LNI|pkS@%zJ-AL?i^A2#)Hl{w+e(z==n^&&Cpw5R$X0PAn8C? z5fBg*=yaWIH!cq6NW|s*{i-Ixe3WhGcFoTN)XPCI5WQ{cs%hGR!8aS1uuQ(00W7Ywb6Uu0#qSI%m>g;wuK_j3n+)l%I$@=v$Cr8{|NVAM@E*G zl=%4iULJi_E2d|pMS1gPzg)rSvEU^S3kwT%IzBr3)E%kR(@hlL4WFExxFm~IU zm@K?kPE!Gb51P%!=Jvhp?oQ7)R4*#7oeKX`H$YW;d!$_W_w#dqP!Hli5%KEfzkdA+ z-I*L8pJ{Za?RAa;mjn1G=1?6tUJ3M1)PvIUF~9TEuN!LJr@idt>qdrjv2kZ>*YZuoaGkc^m^iHQj;NFra1 zVb=v<1fXLuWzT>+e;FR;=HUqhLldlW;EvhZG-LCRNTW!|$Rb>WVTQnX%*!)ZP*5;7 zo`;dgfkXm{1oV5#p$*g)l#+>w$?!N0{w2F1XkS8)NyvB!QPo9mFdX^nkoDL8XrxD_A{yW*PX}Ox_TX9_Zuy_qXu8 z!K(q)zwq_z*U3pCF)>bdcJQ(8z6_3x#Lld_)%@dQ7!Je^-2DMtKWHc8lDxcN{>EpM zcI~~|;7E*(jdh$KD0_Pg$H?JeVfjEy`s?WHHFH@8U%8jpvhaF}IL-A94$d~YT7q%i(C`O%p7$r8xX4I@8jGIv&j-?Z zt*sduS==|V!x$JDyZ4hpiZos@OG)BIo0*)eEeR_tC@Qieky5Gg{VTBZU|@X&K2@>Z z*FO185I|tm!gL1l3Wpi${*s-It@EA^y)H9F%dXwRdz*66iuMnAYano<^TG72sJQ4MGtJeT5-5L%yVg`m3xSJjiv*vX(Iwrt;-u?aC9;h1<3D%C~Rbx|YD`Uhx6&3+HI)oi7zkvZW z3kxYZd6Vy--&0e1D^?v14I~E|g=4nr+Vl zf9VJAOa&Ni-x`$E)m?TM+FrkY4OIt%W-Hb!zUxgz1(y*pWer_jjGpSPot=r%QOU~) zaO35|wZ)fF=m7E$TrWv@CFb0M|GlZs`gX znFd~j4T&1uAtsi2=njsn)+_AxL$y4EG}R*5XqdHrh9U?5&p=aid2#miR6)%6e#jb<}J85mIgS|bdcbNUTm`HLj^JU-z_wL;T)=%DFCi1}vU=WlV zV1c~&I0ZSm0^q-jip;i9T$WA@^^_sm8*>tLKxP+}r^EnxQ~4L2LHy+mKEFI3`caWp zM)sHtLjIMNlz^bPd3iO~)-ue5!FmA9zXu{Bry#<~(_9_qOG}Y3eF4k?05vr=&(8)F zj*gE_n%$Tg8ABeOFM{cIPVQicHT;I%yEajQ30ei-2J0&@1Dx9W_V!$W9YfkcT1G}i z`MiDjBTWaUTIcm;c6ojZcc0oJ1b%>IX9uikabL%m&u7a-Q3+_OtN{l!!H<+pPLay9 zwYQfl@yj#6nWb9v_1E_HHXsN&w*})$7(FK^Cl60mc{y&+E)fw?$d^*En&76EmW;=u zOY7FU<%$c}r1X;bpliU47j^(xHMN#Z5x`ZhTkC$PJ6ZB$}Duze7{aqS5C`A;E%89J`fhxiD9 zsM44iywW=<=Ae!=rKOjN7!#JJq2)xQxVJRyqQB+d;xMn&v%X7XD=$iiaEjU>W&JlqCM^{xH zmr@TUz>0xg8LY;;Q>XhVVLWEMeLK~lq^S6-GZ_8u-Mhsv`>&=)_V*VwYhLumrgfQ_ zS?Mt+^%rZ#w^{4yktg*tCH0dB>z$;M4Fvgu9PeaD{|);$b(6_Ecgyt@OdzX3iou^F z4$I9ogAN8xrmBiRj)qbB>|^8u5koIDA3pwax0UUUji9YCx~L~k_jKeLs@}c@7Lox^ z51;`}+;4RNR!$tP1pXV|a}f97CehH)=vEp*i25xaC9SQZCxN|k#8qi&y0A_3TblyM z_-Tn&vH+omiG^jk;%v)u_n>R^1AJ7dWS;u*&OE@!%=hm=gmg_zRP)q7!25xZf&!Kf zuic!en1$6n6gQARc6M0%UUQa(Ha~EH|MO2SF5aLGJikjr1G^<=D=@m93=H1F`B}XO z{~DHy?ZC+kSP6n@91`ny(G za{|sbNwug>j}z>GPWA&JgEVhc+5@k|Yt^Nseooa`0$qpEr9P#~c0U|ka9G^apVDTKDx~@Gc(vFwM2Rz#$%V`C%q5*W|`z+cD5bEkM9TRAU}?*ZaGO-qx@Z}{*5JVIen zQP=~Kl9IymN(x66z?O{LNUy>EyAW)zAlo?s|JZ?yEPv60T5SFv5y5A5DZXjz)oe8rsQP z*2rQ~WXYiPge$OhkpmgBtZ zvTRIEVH*T=(Ocv)qbw@55N8lZd-dv2+^Jl_e fuel |> fuel_of_fuel);; + +let rec collect_nums acc = + try + let line = input_line stdin in + collect_nums ((line |> int_of_string |> fuel) :: acc) + with End_of_file -> + List.rev acc + +let () = + let lines = collect_nums [] in + List.fold_left ( + ) 0 lines |> Printf.printf "%d\n"; + List.fold_left ( + ) 0 (List.map fuel_of_fuel lines) |> print_int \ No newline at end of file diff --git a/README.md b/README.md index 8dceb8d..a02c347 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@

    - Advent of Code - 200/450 ⭐ + Advent of Code - 210/450 ⭐

    - 2023 - 50 ⭐ + 2023 - 50 ⭐ - Python

    @@ -81,7 +81,7 @@

    - 2022 - 50 ⭐ + 2022 - 50 ⭐ - Kotlin

    @@ -159,7 +159,7 @@

    - 2021 - 50 ⭐ + 2021 - 50 ⭐ - Julia

    @@ -237,7 +237,7 @@

    - 2020 - 50 ⭐ + 2020 - 50 ⭐ - Rust

    @@ -314,6 +314,24 @@ +

    + 2019 - 10 ⭐ - OCaml +

    + + + + + + + + + + + + + + + *The above tiles are clickable, leading to the solution of the corresponding day.* @@ -353,6 +371,7 @@ Not part of the repository yet, since these are incomplete and the code is not g * 2022: `kotlinc 01.kt -include-runtime -d 01.jar && kotlin 01.jar < example.in` (or use intellij, kotlinc is very slow via CLI, 5+ seconds to compile) * 2021: `julia 1.jl < input.in` * 2020: `cargo run --release --bin 01 < input.in` or with autoresolve current dir, auto-refresh and time-taken: `cargo watch -s 'time cargo run --release --bin '$(basename $PWD)' < '$(basename $PWD)'/input.in'` +* 2019: `ocaml 01.ml < input.in` In order to test the programs you can pipe the input to the program, for example: `julia 1.jl < input.in`. The correct output is saved in the `input.ans`. Instead of doing this manually, I use my `program-tester.sh` script (see [here](https://github.com/LiquidFun/misc-scripts)), which runs the given program on all `*.in` files in the directory, and tests whether the corresponding `*.ans` file matches the given output. I have mapped that program on `Enter` in vim, which makes testing programs easy. From 6aefd29ec5788d589f627e302ee32adef76e579b Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 14 Sep 2024 22:06:04 +0200 Subject: [PATCH 158/225] Add day 2 --- .aoc_tiles/tiles/2019/02.png | Bin 9260 -> 9794 bytes 2019/02/02.ml | 19 +++++++++++++++++++ README.md | 2 +- 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 2019/02/02.ml diff --git a/.aoc_tiles/tiles/2019/02.png b/.aoc_tiles/tiles/2019/02.png index a82597f2c8ce14dbd15de838413df97d753cc635..83042da4b5617372d3913e10c5ad8bb2a5e048d4 100644 GIT binary patch literal 9794 zcmX9^by!qS8@&i9f~16$G)gx}E8V?xC`c^=l1rCJgNSrX!_pl~cXvy7EU|Qd`+L4W z?%e0OF?Z(9%zMsz&V;I|$YNuXVFCbvEiWgffjsvikFOZdkfqY*t|0(0zLb~xq~(?h zH?sUpI87|3=~`R&4HG5jC$omcZ(~BKu4ljU-eX`8zs<}HKy`+jqSeWOyH*kKQe_l_Y;K2vJ+;HXNbR^2-G}y31y~V?e#~~LJ z)>N!=g=??8Ep7kuV5KDPDG27ktj!m9Nwu8PL;lMYWMcia)@%){=LJ1os}@;Yp_`vi zrXFA#Bz98Vj6h7W%Ui%~aB-MGBuPU53&0PmZi70t@NwG9uW?m(ZNuM3bV9phlC7!kF;tt#fnB2vH=ew~ zGiC`Q>z&=O?h06j#CPn>#Av^1aNGxL&(qY)Z#O2heMK14&^Y`!VjdeVCtIrp*-1~K zw2OwTI?^_7z)xWRC&NmVK$FgN4i&XrHCa&tY}_rIIsVBo&vQ@G&$Ot=+oiKb!kHiV zc)@>Qwh}vZ>=IdAku6l~2)xfb5_(xPbyfTZ2e`#&!8huN+$hn28_wrPna1@Ui3Cg-F`yCpwSK9$V=4YG1V3215GMyp@#bp1Y`1znxc2xv}xA<}`DNoL zEW8@^ypX&VgN4T`uU_rA2m6Aj0j|Ysm*klr-O#*GRC`UT&ZQ~FBEm}-izz|Ini04# z115Wn&1GE;YkUck`Zn%;MhH~HAoS&kN&3}c@~>HN5~mNPMIno(C2PTqJ_GRS2RX4O zirt6XucivgS`v4tquH2M;| z99pire^fK-9gi}}Q|tA44)~suO4)LXUi&)@V@)XVlJUt7Ea^@O5Dz-~D|wJJle$!H zC1@3vpayJOHr0)8=>_$RA1>d!>MFx1eBXcrwD3pGhaMy317Z*Mjp+9_Qx)Ma?LPdcWJps)T^ zDrx>oG`W3kPsrPsZP`G4*+qWItFk~caZpf#ujv+cr5VzbW4BDD zmfGM&==QdX?-{TvIC|O8^Jrg~a`gg0)7)zm+nTS!E4{2wRzvZ-e8desm-Uuyxw1

    eA?kXV>#T;G4DTbfevV%WI_$?iYTaSFoQ$?jio`GcyQ2)8kVXIMY^< zN+%xOutg0}FGRl5Dc&yy0e%d8lCM*q$;iFlOQYhkz^`AlO^E#tO9cQj6U)P}fZOy@eC(!pHqzpv zl+uH9v^g>Y?53NM<5wR?imI`r8xuPUsGgpK(^99EMcjlv%aoXkWSv6 z!$teQ+BD#7yD_f^GiU+4s=2iVO=oNC&^@t&7>K@$Cu~vgy_yw6qf;|_W;2Qk80Eiv z}*m!R?F);3FbvrGP-;RvczKuxI5WHg$vZ2xO!M7h1%^?{1eXQ@CQ2WFRQ|I`I#}8>0 z*f57nW`vL?29Q-g?Yb?I3FW;)9c4-x?&=`NK|Zv!Dh4`)6fL zIJ^Ah-`M$jsuog6S>A>uE*~V@!nP7(RUU-zCD=J|Xl|RV2 z=-c0(%j^V|yQ><)LV5xPc8~Pu{xmyk$-VrYKsUH#u*`*>99~eZbo5C%g(mqtc(9d> z-tgk^n%)61638XqSm!&m;B--wVtor6XbAV}^$k0HjB*H#P`=a%VO zPNUiPTtT8wi(kG@ocVr^U;K&)nIKD_FGO-CnswtE9CQnt*bnAqd0RgaunIpbasAr_ zdZrO0!`fZ3^i$?$C|Nd0t?nTDJ_oaFK zxEUnHaG4b2{;v`Ng?qMIZl{}&i97YKa55YGlHk4P9Newyd3#qTq$LtlJ+V5Y)9HhX z@Ryu6q6Yo-f z|5fn8E~uNTnqZ#jf?c~Qvhj|PwIp9>M*)u%L(l7?pYAB?f->`(NCe(bYdG+urKzyKp zi@|!|XM4cmZh#B?jBX*4``)w8vLEn0^5OdB+ICm8_`+jW`AfLUdd(u3D)GneYxLKl zVG7?OFE;oQ#!Z%s6f^EWQd2CUB()1m?8f9DcGENV3E;GZdn)c+5s&&y zS(&5pH9O<*%{1a4p7%#ga6FgV#+K=7Z#tbvEmai`gz>}}53#4GAt~|EYkY~`_?;qf zUDhaEOWhk7C^*<=A0D76CRVvBU))Zh+98Fd_>AC#k)q8kOyx_r2A zxclJA&MX`rL0;4Yp%Wrkjb~<)iy=JJi@iQn@m*sYP5;?~)x^TqAyoEZR=G}jIVzgL zk9xC?j->`WVu%H6qnU@x=Ap71Kd;$vMD@ClinrM~=SeqUl?)XAVoKBm0HjO}lx%${ z`SNyU%f6IRY%vM%FrQe!SP`bRLB*mZieS^X=lJ6VF9K}t(ce+DDiJBuQyW$|3;nlX zkjdijR9J>74jbg?X28Ue*bPV3`tN~=@uClX0LYYx9bFq5*SO*4v6A(kLd5A?O=B;i zv;Z-Sn&EVH#_>sA80O0or6UuCBNH-5`8S_Y{H&DTwL$EJ0VH{s88!b1E6{?5$Sg&A zo3I->XINn{OXN>-zMJ)&RT)2bm!3Rs6@eo%mJao}{(a!WqF>>5nUzQ4OF9v*SP^3U5oSc?%Tm zSA*!pN;g@7u{+}NJ7Stfv}KzY>755I&w&wRhX8+M)LlA5pUsE6S4Q;fDcXAKc&;=B zIgt0y+dk+-p#leeFXEYQatwa%ap+k**?A36;#%uJ3^tdn8<426e$odm$`Y1voWyoM zn43Tz_f8aBusjvSTi-c=i3w`a2x`;`$cpqu+BT*5AI#3G8YY|y*die$$d(|}`M|Tv zD6iu+&@!EP@{5u2t7L*EYO8B~6=%b2?U%3nKMeGADCS&r6ki}C^)MxB?wZhbg|1%C&&Dz@=eRwZeUu?Il zZfz!TY4#Df|1y^W#s2A6rg+C-t4oy_!YnS7y!EmX_PtbWimfq73Ux~c=b&w33I3l1 zwwQGdYjs6YX~kFHmOpvUaNmd=rDg1UD)oG;C|%mXZlr5O+jHPz+Fi=P6lb>4<<1d!vPo}AaYH`Csm0Q_L!qT2QQIw3UMqgrfCLCwEt_#_|+y3&quV*;e48KeUl64#035stYDci zVb5A@|Ks<#%9lD=vvTAa@#%+HH9!swh%8Z20KaChxd(TSVIvOfV4qxpyz)ztmH8pW z7F}*|VPCUJ`K6&*#@?;5rkg6Mi)jhVhD#wddsQ;1qfz?XD$_e}QzKTve#w>O=cD1? zK_LQ7sxlRXFdj8@i-^>GDKS)ejd;1epe7UMJ8OlxZXZ^g38s-t-H#$_IrmW6#F`2Q~H<6n@^=lO6D!u-X~^BVbC&d zf31r0*hM1H8i!CWwbQ4lfFgWeFGQJ^ewNQWcg+?&sdJ&fu?a4lXXzRT8!JhV7hF3v zHoW^G^KO-~EKRH83H?psA?LlNX#!|Js7@!3A&j@3JV;k7LbFidrux* zjhsB(*-(SPJ+JcUq9fc0PD-3N7JthC#AytesxyewfHYFbG2<`KdAdOXsO zS9>}CP!}hwRIT_!jx?XeS@|f-D1-=!4V3pn^c5E8M{JvMZ?xW5yiXYUVQRXiEA4q5 zU|D;e!-s3~{xGT=!{Z7TJ+BwJhh*(6>cxpG9|63L%ZymQso&+S>zAkb$6R_Tk8+1M zf}ZTnJXXDhj2Flnv7Ku_!-?qdB;I{!3X3DsWYRA^Z=ki`>yuonF4OC8p+A8^hQIDD z>Zr5Krjxf~)qK}2H8ZLU(E-;{=9{7bMO+T!vsV&37?{J;f(rA)0ALKwbvgVMHkGi< zqq^^^y;ns}__BDvna7UJepRzz%7;J^Od!kx*0#9O+k39KJFIJ0CHg>K^wso0JYnyF zZS|m7=JLOWy(cyxoW5nC)lw(cqN`*UP55iIgvCd{$oNg05dTNB<5U$weLPM}8IJ5P zxf*NfVXAX@lSW8Oz1f%U4qB2vzkDP7VR71L(+qQr-#Y#fCGJ&73m!3`x)qsPmps4v z?{7xPeTZihqr8JkPa;ry_vN`NXbXxQiiO8AyF$5(YLM?~SG#m>Q-1dqRja;gjMuJp z_SF#B43CydKSdY|>v#=3&8A0VKtsfS*PCH1=iq8XiLzArQIYGP*|OQPH$UsonXcMJ z4W`79MFCIJZ6Xm?)eH$L$v{<6^1tl9fAb`ZQG7*;<)T&cpgN;NKAv~8f1o`flWpYV z10f2?B)fo#NVQ3k>UHL+Q#XQ$B zwn2{b--Rh_vD8k!d1=s(ft#8Mkpi)CelATHgCSQj5!HuBf6MMp0WGM6zv+JIpYvbE z08q;*Tm2koIJZVuwk+oAS5|}ofgK`&B(Cyy1g=)Sn`tXdp=wPt8a8`S40bg+baDKe zbX>-IBa+zQy1q$S;fvy4IaKuxqvpoNVGaJghTHRoQ^%3^*AvCtY0az^KV~o!=!q^Bq+? zhU5xqKaWa&%dvct19KKMNx?s;94TZJ7l>%TGZNUX>KlxC^Vjn$Y5bJoCl`_9c_tDs z8Bmk*gj185NOHR-4k97+C>Pg(U?p0hebloH14=JHp3lFaBRU*!L`cy5BH_i>OB_e~ zpR^^Iq2*-i#*+`niEr=QQXY&Nz6FA214f*;SzYS-7d)TH@31j2Kp4L5FK^E+T&g^2 zx1%t!mgJ^%!wm)ESg z6}=-9{uDJ8tezWkxU&>@n%ro;5^@xsjbcAB%X<;>bnjYwO~}cs-Nd(Co}aZu1OVwy z=0g##>WdZy=9`XazrOt;)xy@>Upg1^bRfy9_)Hd_cyux0=8TFH#Tr+^shJ1*g0G## z(n~uve|nlJauZzkTgMOY3uy8{{I=pCdI>A-AV2t;c&e5h#b?2jdKGo1>dwh%=Txd$ zg(%yAQ1d{^-yv%kEYrw06fG58A$6Or3nnkUu7-4mKPuh@vUE(6|2_8hh0|Sm=N=S~ zjgtnfTSL~YAxta`C`mPm{i1J93F61vgl_NNP}0*0rPz(#pE$b*=O3-?V2F)%;CmjE zF`Cn01n83ozEbEg`?y-84?d<~Q9gZpLu0qBR<1OEJF7J>uJ_g`nHOH}z4d0LyBP&+ zK&GjM|0T|9EKaP70q@I28SD7;D;?J;!78S%=?Dz?0~KwLehb}7=ija5WsW`B5?7zO zh%0yI)3YN(aid8vo(G-x%}>9x*a0afiSNpXc6DVOu{YP@&MGU-wyu3#OlUd=RCh8S zZ%0g`CDBz=O1-N`HZ2pprpCvP`4+ouNBB5Gj^sHNjkr3BS{BjnARB$&ipU8ll*X70 zC1v^m`F(Xa9#HELCDJ)}q5DueLg&BX_uDi4EH<9QQ_IKIRkYn{Ymn;Cyjy&_OG8q9 z{4zR_?kMEzE;hyfwoT+~i?dO}mF5`i(+v^S(oq?ClrO zDv{AJXFh*sZI2sL7JFc)VO_)5eptw)Ggc4&biOw{g3Y6Z+d@?rSkW2B^+$||4~*cu zwEGwG3u!{Y@&lRr{;F8G;g(|f>c48vQwSy%IbeCRK>OplO6HD^me!?1K8$K&NV`973Snam^axNJ1B(#3y2T3;80 zODaicN$V0ZUaXZ`z({#QaLmkUi#_C-y|Rq^+qzFTq#)bD6$*J2>1k(&(DX3k^*j&j zIDoW7qpp6G+cD|GQr^>jvzu$vK^f@1-CGfkwY^u|HV&unj5@HRVe>1`{7TK*M4JnD z=r0lY?UCwj(?cNYdKtzJFt0m{3I2(F+Fov0&DBVZ-j`o5Qdg2r8=LZAP_(`qgI>Ou zW;!oMFi$9oxELbh+zwr~J+!0hU5&MD7$-d9hv0<6vtDw6Aj!KmDd^vHqRyXC4IQ3T zI@}um=+JUzI(vpNhHCC+&-ABt_J@)YFKRM_ao{Ar=hfhTu6)FxAViBoFVXoPBz6c?HH->>E3 zb0B%C=t^Xm+sjfJ-8h6}EZx65Wvy;Zd-LU;zyJ9f4@#38=vfc%r82bkmK2c+dq3(5 zlG{^N4r?$S5Bp>GZaovxlGidPpXv)^=p6WCz8qQRCNSDHdBmuX-F*Q0WE+`%^mGDi zJr{9u_;q!{d^^>nu=EyG1_?SI<6ik|&UMMI+SEyPz-;=`iO!8KP(*zotRPYsY%`@r zKCb&l2^SFAT7|iexc}@IXLXV~By-QL7c8N8i^vK4k4QwW?iewVsy5w|Kv+z%Wryvy zT50UZgtQ|Q{_kO{6}SGV76>Ncqwkl}EpbQ4pm`|jN>2gCNP9zqyAOE{1Y0IM}wJ%xu|HBd( z&kS$r{hIYfAaKknp{m(n`Rf^u+`#MPx0)g6ze5^uEJw{Nb<~=~@RzVjd+d>h8{wIL z>Ep>^>hU$x_jSpYGd-i=-in+aCF5G*vmbbq)c1{Y2Me5?Rkr-VuBS3KZV);Cv^rEG zv*?dq{Q)`%&OgH?4)}R)7!=ci13{OEGO*L7Df_bPrv=ICw=&KYy*$RqxGZ4ikt?-^ z0PEutE78*?PwgL3&;`yp--}3>s6&Ot&Ac4LZ9b9I7MQN6iTM>F{qhig6u_!cVtQ)$ zXdIFub#$kY!@2Yn)pB)KYGPuJz_mGY>*Mz^nxE|~%=WjX`Z?37o(3SloKs65Y0aa|y5?|!re98*MNKNMZ2QuW670JPz;>Q))`(B|%VjM@1(^uV| zgKjOKmqc0~C4&GY`Hh^D^A34D6UNAew-;IjOkFs{Lx*V=V>Ug*{Zd()WIMLNJ zCetYesGUAiPp@G{p#V3NJZ-mt&fo{rhA70k%fh%0s)!DFntiMLPs)Lih%tAWteWk3 z$+k;(Fbkr~BO7&RQZEBl5`2{Qvqn(Gf^Ft19ZYuqo3^{i9Vu>pJ;#9Jy9?_0LpGp6 z?*z_{Xp=CYv+BlKa11FM^C+}$`{u<9l5W@#)ia}iuW5C7q3+6#lDAsY>AFPWH%=^Z zH#lZZbcNGuqfx5O!7b9tH4zUMw290;ZSVLrpg@+4Zb|uv0sZ&NS0-~W0i_ZBq%n6c zgp6bXhxDNB!iyb^Cb2K!&$uXPpQ~M%{G;p$#}l%>>rE9GCy{7(@>!z~nF7CU{~m26 zQ7mgxUx`I8f4b}ld{#tyh_dmh0bOp_jd@@Y(T?=Fd{D)~{J)2(nYR9K?L|uu-Al-i zfd>sn=7*F19K71#za5H{1k;hZ%6{kb_OX-`vK;M}_M_D{$%MDgGg7gNke0c)X1Tky2lOY4?B)M|R<&RThJtZx&kmO6cP zuXm_wy=G0Hka+bfbJF@m2)jndrcc| z{5%ImOL~=wZLSh)?Hxgm_SrLz@ja$-a7$KkwO{R1lhmF1vWW@8{Dno#*BqWV<86)M zY9*xY)36Mj1Z{jUGS{SDKEZ(YSRjEDV!TG-4)`rhyfPC2PBw2z%BT3(^-M~y33p%w zrqd%J_oI+};*g z|DK{;rW72XG;9^fJOvFzCdx2Ctq^oMy5b3P6C@b$c^h}f7-Y@_wQNB5D4oz&IFNV* zUHrt@QAGP+tH!<%0&0tvnkmMp0KB;>5X92?`V;$MU&gy@99HZK@UJ%?FZL<(ZWU?o ztQ>69fAXkgJy=y=o#R2>Q3$%%1wBTe(R%0D`*trFQ8W)4-gdU^Ga==d87`=sCwrVA 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 diff --git a/2019/02/02.ml b/2019/02/02.ml new file mode 100644 index 0000000..ca4ee69 --- /dev/null +++ b/2019/02/02.ml @@ -0,0 +1,19 @@ +let rec process nums i = + match nums.(i) with + | 1 -> nums.(nums.(i+3)) <- nums.(nums.(i+1)) + nums.(nums.(i+2)); process nums (i+4) + | 2 -> nums.(nums.(i+3)) <- nums.(nums.(i+1)) * nums.(nums.(i+2)); process nums (i+4) + | _ -> nums.(0) + +let with_a_b nums noun verb = + let memory = Array.copy nums in + memory.(1) <- noun; + memory.(2) <- verb; + process memory 0 + +let find_part2 nums = + List.init 10000 Fun.id |> List.find (fun x -> (with_a_b nums (x / 100) (x mod 100)) == 19690720) + +let () = + let nums = input_line stdin |> String.split_on_char ',' |> List.map int_of_string |> Array.of_list in + with_a_b nums 12 2 |> Printf.printf "%d\n"; + find_part2 nums |> print_int \ No newline at end of file diff --git a/README.md b/README.md index a02c347..072f78c 100644 --- a/README.md +++ b/README.md @@ -320,7 +320,7 @@ - + From 469e59a0393c422b87cff9d8389179ab8e6102e4 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 15 Sep 2024 23:07:51 +0200 Subject: [PATCH 159/225] Add day 2 --- 2019/02/02.ml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/2019/02/02.ml b/2019/02/02.ml index ca4ee69..375b617 100644 --- a/2019/02/02.ml +++ b/2019/02/02.ml @@ -4,16 +4,16 @@ let rec process nums i = | 2 -> nums.(nums.(i+3)) <- nums.(nums.(i+1)) * nums.(nums.(i+2)); process nums (i+4) | _ -> nums.(0) -let with_a_b nums noun verb = +let with_a_b nums n = let memory = Array.copy nums in - memory.(1) <- noun; - memory.(2) <- verb; + memory.(1) <- n / 100; + memory.(2) <- n mod 100; process memory 0 let find_part2 nums = - List.init 10000 Fun.id |> List.find (fun x -> (with_a_b nums (x / 100) (x mod 100)) == 19690720) + List.init 10000 Fun.id |> List.find (fun x -> (with_a_b nums x) == 19690720) let () = let nums = input_line stdin |> String.split_on_char ',' |> List.map int_of_string |> Array.of_list in - with_a_b nums 12 2 |> Printf.printf "%d\n"; + with_a_b nums 1202 |> Printf.printf "%d\n"; find_part2 nums |> print_int \ No newline at end of file From de350478dcc03bf8dee41fca356247e512769475 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Wed, 18 Sep 2024 23:51:19 +0200 Subject: [PATCH 160/225] Add day 3 --- .aoc_tiles/tiles/2019/03.png | Bin 9546 -> 10092 bytes 2019/03/03.ml | 37 +++++++++++++++++++++++++++++++++++ README.md | 10 +++++----- init-day.sh | 2 +- 4 files changed, 43 insertions(+), 6 deletions(-) create mode 100644 2019/03/03.ml diff --git a/.aoc_tiles/tiles/2019/03.png b/.aoc_tiles/tiles/2019/03.png index 68052170bc97c0e5ab7ddd7e2c68dc1073f57b8e..a6fba94cd5eb723dae105c90906a2e2b24b68257 100644 GIT binary patch literal 10092 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 literal 9546 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 int_of_string in + let xy = match String.get dir 0 with + | 'U' -> (0, 1) + | 'D' -> (0, -1) + | 'R' -> (1, 0) + | _ -> (-1, 0) in + List.init num (fun _ -> xy) + + +let rec scan sx sy = function + | [] -> [] + | (x, y) :: rest -> (sx+x, sy+y) :: scan (sx+x) (sy+y) rest + + +let read_line stdin = + input_line stdin |> String.split_on_char ',' |> List.concat_map to_tup |> scan 0 0 |> TupleSet.of_list + + + (* List.iter (fun (a, b) -> Printf.printf("%d,%d -> ") a b) dirs *) + +let () = + let d1 = read_line stdin in + let d2 = read_line stdin in + (* TupleSet.inter d1 d2 |> TupleSet.iter (fun (a,b) -> Printf.printf "%d,%d -> " a b); *) + (* TupleSet.inter d1 d2 |> TupleSet.to_list |> List.map (fun (a,b) -> abs(a) + abs(b)) |> List.iter (fun b -> Printf.printf "%d -> " b); *) + TupleSet.inter d1 d2 |> TupleSet.to_list |> List.map (fun (a,b) -> abs(a) + abs(b)) |> List.fold_left min max_int |> Printf.printf "%d\n"; + (* Printf.printf "\n%d\n" (TupleSet.to_list d1 |> List.length); *) + (* Printf.printf "\n%d\n" (TupleSet.to_list d2 |> List.length); *) + (* List.iter (fun (a, b) -> Printf.printf("%d,%d -> ") a b) d1; *) + (* let shared = List.filter (fun x -> List.exists (fun a -> a == x) d1) d2 in *) + (* let num = List.map (fun (a, b) -> a+b) shared |> List.fold_left max min_int in *) + (* Printf.printf "%d " num; *) diff --git a/README.md b/README.md index 072f78c..9c0d243 100644 --- a/README.md +++ b/README.md @@ -323,7 +323,7 @@ - + @@ -361,17 +361,17 @@ and are written in a different programming language each year: Not part of the repository yet, since these are incomplete and the code is not good (might revisit them later): -* **2019**: First time participating, solved 5 days with **Python**. +* **2019**: First time participating, solved 5 days with **Python**. Trying OCaml in 2024. --- ### Running -* 2023: `python 01.py < input.in` +* 2023: `python 01.py < input.in` with Python 3.12 * 2022: `kotlinc 01.kt -include-runtime -d 01.jar && kotlin 01.jar < example.in` (or use intellij, kotlinc is very slow via CLI, 5+ seconds to compile) * 2021: `julia 1.jl < input.in` -* 2020: `cargo run --release --bin 01 < input.in` or with autoresolve current dir, auto-refresh and time-taken: `cargo watch -s 'time cargo run --release --bin '$(basename $PWD)' < '$(basename $PWD)'/input.in'` -* 2019: `ocaml 01.ml < input.in` +* 2020: `cargo run --release --bin 01 < input.in` or with autoresolve current dir, auto-refresh and time-taken: `cargo watch -s 'time cargo run --release --bin '$(basename $PWD)' < '$(basename $PWD)'/input.in'` with Rust version 1.80.1 +* 2019: `ocaml 01.ml < input.in` with OCaml 5.2.0 In order to test the programs you can pipe the input to the program, for example: `julia 1.jl < input.in`. The correct output is saved in the `input.ans`. Instead of doing this manually, I use my `program-tester.sh` script (see [here](https://github.com/LiquidFun/misc-scripts)), which runs the given program on all `*.in` files in the directory, and tests whether the corresponding `*.ans` file matches the given output. I have mapped that program on `Enter` in vim, which makes testing programs easy. diff --git a/init-day.sh b/init-day.sh index f8e1cbb..758d23d 100755 --- a/init-day.sh +++ b/init-day.sh @@ -1,6 +1,6 @@ #!/usr/bin/bash -year="2019" +year="2018" SCRIPT_DIR="$(dirname "$(realpath "$0")")" cookie="$(cat $SCRIPT_DIR/.aoc_tiles/session.cookie)" input_prefix="input" From 723c63ddc2d8ab1332b16b27380bd3f5ed015fac Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 1 Dec 2024 09:01:09 +0100 Subject: [PATCH 161/225] Add day 1 --- .aoc_tiles/tiles/2024/01.png | Bin 0 -> 9094 bytes 2024/01/01.py | 7 +++++++ README.md | 8 +++++++- init-day.sh | 2 +- 4 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2024/01.png create mode 100644 2024/01/01.py diff --git a/.aoc_tiles/tiles/2024/01.png b/.aoc_tiles/tiles/2024/01.png new file mode 100644 index 0000000000000000000000000000000000000000..0e821fdd14e9913ec527d5b7bfea421c6a5e3c10 GIT binary patch literal 9094 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 literal 0 HcmV?d00001 diff --git a/2024/01/01.py b/2024/01/01.py new file mode 100644 index 0000000..6a55352 --- /dev/null +++ b/2024/01/01.py @@ -0,0 +1,7 @@ +n = [int(a) for a in open(0).read().split()] + +s1 = s2 = 0 +for a, b in zip(sorted(n[::2]), sorted(n[1::2])): + s1 += abs(a - b) + s2 += a * n[1::2].count(a) +print(s1, s2, sep="\n") diff --git a/README.md b/README.md index 9c0d243..a599a4b 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,13 @@

    - Advent of Code - 210/450 ⭐ + Advent of Code - 212/452 ⭐

    +

    + 2024 - 2 ⭐ - Python +

    +
    + +

    2023 - 50 ⭐ - Python

    diff --git a/init-day.sh b/init-day.sh index 758d23d..296f751 100755 --- a/init-day.sh +++ b/init-day.sh @@ -1,6 +1,6 @@ #!/usr/bin/bash -year="2018" +year="2024" SCRIPT_DIR="$(dirname "$(realpath "$0")")" cookie="$(cat $SCRIPT_DIR/.aoc_tiles/session.cookie)" input_prefix="input" From 288015369c01b786b6406b93004be9d154d45807 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Mon, 2 Dec 2024 13:28:07 +0100 Subject: [PATCH 162/225] Add day 2 --- 2024/02/02.py | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 2024/02/02.py diff --git a/2024/02/02.py b/2024/02/02.py new file mode 100644 index 0000000..1b69b9c --- /dev/null +++ b/2024/02/02.py @@ -0,0 +1,9 @@ +is_safe = lambda n: sorted(n) in (n, n[::-1]) and all(1 <= abs(a - b) <= 3 for a, b in zip(n, n[1:])) + +s1 = s2 = 0 +for line in open(0): + n = [int(a) for a in line.split()] + s1 += is_safe(n) + s2 += any(is_safe(n[:i] + n[i+1:]) for i in range(len(n))) +print(s1, s2, sep="\n") + From c1005d235a803fac3e3d98356bbac49a35d8fbe9 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Tue, 3 Dec 2024 06:23:20 +0100 Subject: [PATCH 163/225] Add day 3 --- .aoc_tiles/tiles/2024/02.png | Bin 0 -> 10061 bytes .aoc_tiles/tiles/2024/03.png | Bin 0 -> 10287 bytes 2024/03/03.py | 10 ++++++++++ README.md | 10 ++++++++-- 4 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2024/02.png create mode 100644 .aoc_tiles/tiles/2024/03.png create mode 100644 2024/03/03.py diff --git a/.aoc_tiles/tiles/2024/02.png b/.aoc_tiles/tiles/2024/02.png new file mode 100644 index 0000000000000000000000000000000000000000..a8a0147ab1d616048b0617dd401cbdf67f17f670 GIT binary patch literal 10061 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 To97Q3lLKTW6(y>~jDr3TiOB0& literal 0 HcmV?d00001 diff --git a/.aoc_tiles/tiles/2024/03.png b/.aoc_tiles/tiles/2024/03.png new file mode 100644 index 0000000000000000000000000000000000000000..7c12d678ed319967f4f23963e8ee249e063da6ae GIT binary patch literal 10287 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ⅆdfPD2)6m?n$+Je#)P<>He0lHv*(M6NjLyz0WRx(-t$yh zXuUY7qP-GrYX{MxnGjX%eQf%7W$K@%OekAI+{D`QP}GFG(UmK*-dutZbUn*_!O7aa z@yc|F9U1k$_fXl2qFW09&b_uyJATf-NWXsLPOca`Fn~t}{(SFSgeiio`f8ZtuM!5g z-j+&jXrdG!Ep~3d)2i+G{-Y&D)kT)`@m=!pT&Zu66=N{T;orDY$F;VD-@998q zqX@XFg~z}UyNoX|JQgKR%U)(~htW5XeK^K_<+X*-w&Kmdc`~l|KxJORhGyJw%G!Ks ztO*C0N(;2FWW*G?5@(n@4dX`^jT`iyihKt0s|+@+hmWvjesYa0&`fi2)Iz50-4AX% zUV69L%0QM<6*!jZSLb=znhUW;+VLQ!xkh_)n}iB^q${Z?#s~`WDF3TzM1(ASLa@c| zc4Q8X-6LT_xGEKcPpn!aZ~zTQCzJ)Xr>-1$2YoUs4cPKW7- zTIi@cJ2DvLn#!(pEeYSVHlcsK8FPcUi&~sV+GaFk+=9au-5kdX{V367>wL?33}d5_wy?ujiYyn`$e0f9FC8YHyDuy$6S5zV+lY z1mogoIj-{fdF6eCBj`ujxmEZ98f67(erP1K3u=q8n)D`YI0Y`LD)OzR7Ofdm7}m5i z2`j{@*IczHJAw^cr2X?r?w}=6>JsQb(J>Mh$i5gB)x@43V2_>?yGv9sq%N0+W6^U# zrrFgAN#FTm$1oJNay`kYVr=|_e0wW^SckP#2P&`(_G#;$e*Sj9BPQ1o63&#nQTN1Uq7d6YrQHSN2YXR6$9MH*Ys0^jrXGw%q(}@C|EOye$ zr7jj8I2KUPDUSw6^hTt}y?{=aDD}aLkve)F7%{ZT1Mx?*k#=dk8R5Bm%@;g;hVt4# zA_Pe1oNc~FdB0k!HuwNL(oXk&jP_s7Gc5q*$mNnkAJ?xb13rR1YWWuK{N-wqCxVTg zn_*Y~7PFK@;Jp;lZGvlk&!lY%MVJbe(;<&zZ1`^K5Uy5zIl)OwCTJ$s1sPkC%49x; zvXIcjC+;sB2=7Z*tpiMnSw^+Ulm9FYzlri#y3wZE`_ zuk7&iSJp>lyjdwf|0}&V)vjmM9VrKc3Wq-WR7StQb;}F6tC^maXys}4%SFZz845%v zX;elYGGJh3!dv%aVAJA&;ycmS+-k1bq20&AaD^U3F7vqTJF_?jBZ1?g0w!ha95 zgWleYddBq#tuBMaW}=JKDgT5=S3}T+icdJW+9i95H!_hBoNUar4D_lORPaV>z#3(5 zO!i^%T%JgoT%7h9?4_f$v0NDtO2Zd#C9{3WDwQ>F{Z3;h!#h^0#G0LxD5sOo;>qm< zC7PhxDI{eS;Lm)8oDlv2pS+z0!B}r?S@`(VL_#w=M}^@yQ~Hp3gww8ApoSfeRJ9@$ zGm?$x&%;v@Q+7wpzyobqtDxKXNM@VT>Z}aBhw;fLzH~Hfn8WTCPOkFPCqOWpR*~u7 zyLd(3B5(Q^i{EvyT$rgoOyjDEZawHD>e7tWT?4=b11PVXy!OQYx0*CMF80L=p4l3d zuauxbyb_@#xiO%_xaJTyO2146eEt?;>MSVn4tO-20yEiu*G!a20WrxjI)-5y4ud68 zMi<1Lv`RJC8#zPM2Oi$sg{wPS{hnp^4V(u5G(d;4>K9 zqs;{bzh!X>h)nIZ7fH`E`-@tYqq_}i*I4_p>{FfGfn z5zB5HjfDKhps(U9<1@=~SjS5bQ`?Okg{*N`8;L3ConPxl^sI5QIr?l}B;IP&K4HUd zVLs5dYr@N!awh_|(%l5BaH{Zd z^8J@V#)QJ>>{z)2(!=BPr?h?;z2dIy(&r!_^1%OoD&a)A-SR8R7Xa#>P z9?r9t!nxA{R#7^aRa!I5F&sZqPtg~Z{h}68K$^Dd4n~Ou^U7(q5rIatRMQL_^&3=| zJbX&R+lKK*NRX_OVQAWoN?5whRdq+pL5I*_ZN}|LB>D>9mW9li9v>YDmi#pJk-fH` z<3qS)*j@b1fX`&L4U8Xgf+gMqSjb_{PEXEG)Rs_PzC6(PvFfrItp2HuCVDAR6acg?ZCjhc8b>*Y(m>yxU={Xu@OSE}2y*t3k`$QSZ$r!1B+gA13V4S2F7ouR0T9_+r*rY86%Vkn48yZhx9MovNq z&m62cSgkZ|EVRS*?kYcvwa!D-ZWP-{Z%#h5vVk)bmal9if@ep{Z^cT4~#W4y9Qr|M!5 z0sk&Ogw`geRK_N@8fz81EjcHL!BRct~Hf7e`sR~$talnhNX!TD(AnjNPp1p}gW3?6UHjC6707@V;5 zu9CFG~?}d3y`gBNjy=K`U{~p3`plex~prc{V{}V zl&3Ubr^BVFsq$Sjc7DjlOo)g1z-aOKqZ}`JSA;^3=??`28U4&HV ziSY#o`Ikxry?9zJE}OAs!x`ecmPD47jo65im8HE7NOz}k3K#%*-HreN+2p0x`WITc zGDE|ik1&*(SnxfeR2K~Q{`PP7_e^O9F%e_>p_eFCYI6yTm!*e((1(S;lGMpVp9;QI zu)A?VGu$?%OcG=+OiUwHw;s^M%hXQVlS20mJ^+M=whp>e!uIqjVAgoima8HVMRhG! z%ndkN>c0~oCu~v%g=2%?2Y$Aszxh8@nJ`)#z-p7oe5Iua^)Zx&O|4ZPCC zOmS=*%1iu_2S)6(5>_Y67uxAc=i9`jSQ@s)NQ_$cWL(oM^Mm(EE6rd-;#&aGAD3H(Hg|ZJ3x2%OG=FzwhR~-hB;@u`Q1dAC#vHy zYq$*0uo%~iUxmm)<7k-7nbUbZD;GTi9^Std@4TGv{+ULs)o{5CoSx)$W4~2)*Mnr+ z^b3@T(QAT>t}oA$>mIo(s||C(hJ2f7<%Gg#Mcpsa0m%~0F&Jx7I(&cQzrF)XcP}7h zl0MQ@zqGX58ky2QW2`apW$AXgh6I_mMAVk+`~SLz@#4wmO98)H{Zdsuue;*x4Yd&% ztWbpcpc~TAN|C7N$3ig7H8#YeUSD9iqFIt?TsOEP=tN11hc&;X{P+kHa4hucZCb3+Wk1Pc^ql*+ z0GG5TdCJx-Bh0~g9;@l>$|Za>ju<7AnISZWaB*6>U6fjlp0i{wcO>FvzuG(#!vFUN z{XV>z3JjB#j-1h&1hnZ*()4?cBv#aK;@&+f)-bp`uPsJ+Tl^ApmwI8kx9aOtA%iAr zD9=Mi-FI}($jT7;t``L+MkivXJ@H^ASpaP$28Y;X-H3=WY^z6*cX?mjw{<~GqvWVZ zeVt+>2kWqW>riKXuG1glanCpd&VkH(@z-x3zW$(5rwCz61}(fxXsjN z zcTtU4w1W;<{IMSWPp^E=6Sp5H8fNg75o2HlDi+<@b}I%y;m*(Mj2YHu_ZlOyFjw?n z^z=$Q?tfKxkkX!*9L~;D8GHeqtONyl^ETrHDl5xX-ZKCJzcFeM*j}Sgn`mH8ocW1XNM;Zvmmfa&H0+nfiHR{(Hef)txO`Jro#nE!K zrteLCWcO&Wk?aLL2CVN=ao}MVoO!Jvi@%XBN#0ocMC8}`{aP=kRa}|VnIg08r{qXj z^elLl|Gta?)`3h6JDiv}5pH0OCc~oRESbZBZ|u(Md+s`y-#;y@V%K7|Vga9SXNTSc zVS@UtN(*@&VU{V6S=Kw}v;|6p5?CdLElbr$(D(1t>yYq$&u*0nveftabS*=8I3ar5 z3hRF*={$@n;6-4NmoARjWb|R%oOleDo=WRuT$NzLzVt+qtb>g^q;WFCwB)Dij|N-0 zqx@RrBHSIUHU~njHVZJgQ~$Xb2zD#8u(OQM#W{J`PDCT=johzhUYBE1#*i-x6J<|+ znFGrFnhrqlZU_Q&&WE+JLoU^KHWBe0GBdzZtk!91c@7(uu((lvBOIlRN4cnZ+1(@y zA~=3v7lFZD6=lK25hCtBhU8(%36!{+wb4rG-Ofa%;|X@;i+-*yE{vnf9$Lt6!*8w~ z_)LqWb24lh>~Dd=TRmB7tM38l+Q6gt+^hrpCuL%co`$VidhKT;J7q@Mt$A8r<_7S% z+j5M3;Oct36kM19#I~ujdaS6?`cyBjJ(1m^)xZ>J-jJv6E1TRM(^y?UKaiJq8!Azr zW(3CyyOwaDS#h^1CX9q==7bwd6BBA|H!@OMjVoBq=c{0v>%wC;F~+1Nj3(7q5AjE& zBqHN&&Z_RcjC#qYr{hV|eeiYCZ+_KvWw0*HWEx{NpT03U*$1mT*kN)|>6`w{(x?jS z41Wl~cA}Gqhf`ws@B?(BO9aYLuoQ0@)QTxA;CTV(nBWZz){DcYMsD>d#E7wai@&y& zPbOUaQkBvDwj96lnXlF*ExB>&nr#xcOX3(RS-yM0-1=Fz%p@CYyS$F(2W~RgVq3YI zs|I%R6|8AA<#kqpuK!%_j)v(@@tWLGb1IffK_`nH#Gu9MzuvImyfrbmrshYn@cr~P z&K-*UkzlB>{YD19KW7Q;yN|+%zz?n2G^3R!7{L#f>&j3U{$%^W?~_Obx-%SSbb#s# zGf(wRtPW=e&{e(%m)bA8?D^a-cS-vt?{urr7p}FbFs~^yx|yg&4Ary4*Xe+Ot>Hv zlJ|V)n|pc^zxH|c<+Nx+T^{+z znU6TK43m`bgAF|`?+8F=+1MI1J^=T7Ao5Ei+>?E_-ZbhohEnsSoDb@hiM$@SCg$2? zu6uunW4cy@N96u|T(X|EOAPlQ`+6fK`N}mEgY!;v6xTLr>WiM+KUn`mtlG;_U=c%Z zE6XssIX~$|cN16qM>YnAFNNKCZDBGd`*9u4K4EFUrS9g*KYEH3-wVJ)nG60Wodx8H z*I9UGeqkJFZ#?vUwqGUmenyN#>76R+#l6{vV5uNwShc9d4-dK0r&BMw@kL+!qeJ&v zhrN57LSY7<=YXJHk)G9ZNW_1?z%XX>oGOY)#}&p6{r@v`^O0AtBif1gF<#o2w*5Xq s78Pu-+hkQ8{ctAX=LBbL|6YPr!`(%dn>ce}gMfhSS0%|RapREx1F!Wxng9R* literal 0 HcmV?d00001 diff --git a/2024/03/03.py b/2024/03/03.py new file mode 100644 index 0000000..cd06c33 --- /dev/null +++ b/2024/03/03.py @@ -0,0 +1,10 @@ +import re +s1, s2, enabled = 0, 0, True + +for a, b, dont in re.findall(r"mul\((\d+),(\d+)\)|do(n't)?", open(0).read()): + if a or b: + s1 += int(a) * int(b) + s2 += int(a) * int(b) * enabled + else: + enabled = dont == '' +print(s1, s2, sep="\n") diff --git a/README.md b/README.md index a599a4b..4bb0120 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,19 @@

    - Advent of Code - 212/452 ⭐ + Advent of Code - 216/456 ⭐

    - 2024 - 2 ⭐ - Python + 2024 - 6 ⭐ - Python

    + + + + + +

    2023 - 50 ⭐ - Python

    From ba78456114a381506a0184a9c4287946fd6af267 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Wed, 4 Dec 2024 06:51:01 +0100 Subject: [PATCH 164/225] Add day 4 --- .aoc_tiles/tiles/2024/04.png | Bin 0 -> 9638 bytes 2024/04/04.py | 18 ++++++++++++++++++ README.md | 7 +++++-- 3 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2024/04.png create mode 100644 2024/04/04.py diff --git a/.aoc_tiles/tiles/2024/04.png b/.aoc_tiles/tiles/2024/04.png new file mode 100644 index 0000000000000000000000000000000000000000..c80854f0e6e550de7f4ca4ff22fbc7aa2adcaf81 GIT binary patch literal 9638 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

    - Advent of Code - 216/456 ⭐ + Advent of Code - 218/458 ⭐

    - 2024 - 6 ⭐ - Python + 2024 - 8 ⭐ - Python

    @@ -14,6 +14,9 @@ + + +

    2023 - 50 ⭐ - Python

    From 691f459ac8b3ef82231854cafabd20b424ba951d Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Wed, 4 Dec 2024 07:04:28 +0100 Subject: [PATCH 165/225] Add day 4 --- 2024/04/04.py | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/2024/04/04.py b/2024/04/04.py index ad7a19d..5a4b533 100644 --- a/2024/04/04.py +++ b/2024/04/04.py @@ -1,18 +1,20 @@ X = [l.strip() + " " for l in open(0).readlines()] X.extend([" " * len(X[0])] * 3) -s1 = s2 = 0 +s1 = s2 = 0 +dirs = [ + [(0, 0), (1, 1), (2, 2), (3, 3)], + [(0, 0), (1, 0), (2, 0), (3, 0)], + [(0, 0), (0, 1), (0, 2), (0, 3)], + [(3, 0), (2, 1), (1, 2), (0, 3)], +] for y in range(len(X)-3): for x in range(len(X[y])-3): - s1 += sum(word in ("XMAS", "SAMX") for word in [ - X[y][x] + X[y+1][x+1] + X[y+2][x+2] + X[y+3][x+3], - X[y][x] + X[y+1][x] + X[y+2][x] + X[y+3][x], - X[y][x] + X[y][x+1] + X[y][x+2] + X[y][x+3], - X[y+3][x] + X[y+2][x+1] + X[y+1][x+2] + X[y][x+3], - ]) + for dir in dirs: + s1 += ''.join(X[y+dy][x+dx] for dy, dx in dir) in ("XMAS", "SAMX") - a = (X[y][x] + X[y+1][x+1] + X[y+2][x+2]) in ("MAS", "SAM") - b = (X[y+2][x] + X[y+1][x+1] + X[y][x+2]) in ("MAS", "SAM") - s2 += a and b + a = (X[y][x] + X[y+2][x+2]) in ("MS", "SM") + b = (X[y+2][x] + X[y][x+2]) in ("MS", "SM") + s2 += X[y+1][x+1] == "A" and a and b print(s1, s2, sep="\n") From f4dbe79a2b1227027efbc9cad31c442070b8df72 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Wed, 4 Dec 2024 07:26:12 +0100 Subject: [PATCH 166/225] Add day 4 --- 2024/04/04.py | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/2024/04/04.py b/2024/04/04.py index 5a4b533..74ff791 100644 --- a/2024/04/04.py +++ b/2024/04/04.py @@ -1,20 +1,11 @@ -X = [l.strip() + " " for l in open(0).readlines()] -X.extend([" " * len(X[0])] * 3) -s1 = s2 = 0 -dirs = [ - [(0, 0), (1, 1), (2, 2), (3, 3)], - [(0, 0), (1, 0), (2, 0), (3, 0)], - [(0, 0), (0, 1), (0, 2), (0, 3)], - [(3, 0), (2, 1), (1, 2), (0, 3)], -] - -for y in range(len(X)-3): - for x in range(len(X[y])-3): - for dir in dirs: - s1 += ''.join(X[y+dy][x+dx] for dy, dx in dir) in ("XMAS", "SAMX") +coords = {x+1j*y: c for y, r in enumerate(open(0)) for x, c in enumerate(r)} +g = lambda c: coords.get(c, "") - a = (X[y][x] + X[y+2][x+2]) in ("MS", "SM") - b = (X[y+2][x] + X[y][x+2]) in ("MS", "SM") - s2 += X[y+1][x+1] == "A" and a and b +s1 = s2 = 0 +for c in coords: + for d in [1, 1j, 1+1j, 1-1j, -1, -1j, -1+1j, -1-1j]: + s1 += g(c) + g(c+d) + g(c+d*2) + g(c+d*3) == "XMAS" + if d.imag and d.real: + s2 += g(c+d) + g(c) + g(c-d) == "MAS" and g(c+d*1j) + g(c-d*1j) == "MS" print(s1, s2, sep="\n") From e8cc040016a194b99d7b870d616f215e3db147db Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Thu, 5 Dec 2024 06:52:36 +0100 Subject: [PATCH 167/225] Add day 5 --- .aoc_tiles/tiles/2024/05.png | Bin 0 -> 10353 bytes 2024/05/05.py | 19 +++++++++++++++++++ README.md | 7 +++++-- 3 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2024/05.png create mode 100644 2024/05/05.py diff --git a/.aoc_tiles/tiles/2024/05.png b/.aoc_tiles/tiles/2024/05.png new file mode 100644 index 0000000000000000000000000000000000000000..e8cbf00b92da67edbc8b8f3fc3a6d82c0572389d GIT binary patch literal 10353 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 literal 0 HcmV?d00001 diff --git a/2024/05/05.py b/2024/05/05.py new file mode 100644 index 0000000..652f859 --- /dev/null +++ b/2024/05/05.py @@ -0,0 +1,19 @@ +rules, pages = open(0).read().split("\n\n") +rules = {tuple(r.split("|")) for r in rules.splitlines()} + +s1 = s2 = 0 +for row in pages.splitlines(): + n = row.split(",") + n2 = n[:] + if all(n.index(b) < n.index(a) for b, a in rules if b in n and a in n): + s1 += int(n[len(n)//2]) + else: + new = [] + i = -1 + while n: + i = (i + 1) % len(n) + if all(b not in n or b in new for b, a in rules if n[i] == a): + new.append(n.pop(i)) + s2 += int(new[len(new)//2]) + +print(s1, s2, sep="\n") diff --git a/README.md b/README.md index db8f844..9164a61 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@

    - Advent of Code - 218/458 ⭐ + Advent of Code - 220/460 ⭐

    - 2024 - 8 ⭐ - Python + 2024 - 10 ⭐ - Python

    @@ -17,6 +17,9 @@ + + +

    2023 - 50 ⭐ - Python

    From fbcb3563edf62781c9ea9755f199b4bd2885b3c0 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Thu, 5 Dec 2024 07:20:13 +0100 Subject: [PATCH 168/225] Add day 5 --- 2024/05/05.py | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/2024/05/05.py b/2024/05/05.py index 652f859..bb86d53 100644 --- a/2024/05/05.py +++ b/2024/05/05.py @@ -1,19 +1,13 @@ rules, pages = open(0).read().split("\n\n") rules = {tuple(r.split("|")) for r in rules.splitlines()} -s1 = s2 = 0 +s = [0, 0] for row in pages.splitlines(): - n = row.split(",") - n2 = n[:] - if all(n.index(b) < n.index(a) for b, a in rules if b in n and a in n): - s1 += int(n[len(n)//2]) - else: - new = [] - i = -1 - while n: - i = (i + 1) % len(n) - if all(b not in n or b in new for b, a in rules if n[i] == a): - new.append(n.pop(i)) - s2 += int(new[len(new)//2]) - -print(s1, s2, sep="\n") + old, new = row.split(","), [] + for o in old * 100: + if o in new: continue + if all(b in new for b, a in rules if o == a and b in old): + new.append(o) + s[new != old] += int(new[len(new)//2]) + +print(*s, sep="\n") From cb0117e6d9775ad866c9b9df4af79663cc9000f0 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Fri, 6 Dec 2024 06:44:35 +0100 Subject: [PATCH 169/225] Add day 6 --- .aoc_tiles/tiles/2024/06.png | Bin 0 -> 10599 bytes 2024/06/06.py | 76 +++++++++++++++++++++++++++++++++++ README.md | 7 +++- 3 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2024/06.png create mode 100644 2024/06/06.py diff --git a/.aoc_tiles/tiles/2024/06.png b/.aoc_tiles/tiles/2024/06.png new file mode 100644 index 0000000000000000000000000000000000000000..d1731d6d896abf43cae4c58f3700188b87a3488e GIT binary patch literal 10599 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 N`t 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 o!S|0xA_Hm5*q?X(qropYNW5p

    - Advent of Code - 220/460 ⭐ + Advent of Code - 222/462 ⭐

    - 2024 - 10 ⭐ - Python + 2024 - 12 ⭐ - Python

    @@ -20,6 +20,9 @@ + + +

    2023 - 50 ⭐ - Python

    From 92df7755deacec40e5faa124ad544b105e9b8ed6 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Fri, 6 Dec 2024 06:59:28 +0100 Subject: [PATCH 170/225] Add day 6 --- 2024/06/06.py | 83 +++++++++------------------------------------------ 1 file changed, 14 insertions(+), 69 deletions(-) diff --git a/2024/06/06.py b/2024/06/06.py index fdba753..42cd478 100644 --- a/2024/06/06.py +++ b/2024/06/06.py @@ -1,76 +1,21 @@ -from collections import * -from itertools import * -from functools import * -import re - -d4 = [-1j, 1, 1j, -1] -d8 = d4 + [1+1j, 1-1j, -1+1j, -1-1j] -def adjacent(coord, dirs=d4): - return [coord + d for d in dirs] - - -coords = {x+1j*y: c for y, r in enumerate(open(0).read().splitlines()) for x, c in enumerate(r)} -# field = open(0).read().splitlines() +coords = {x+1j*y: c for y, r in enumerate(open(0)) for x, c in enumerate(r) if c != '\n'} for pos, c in coords.items(): if c == "^": start = pos -def solve(obstruction, s=start): - dir = d4[0] - - # seen_with_dir = set() - print(obstruction, s2) - - turn = defaultdict(list) - seen = {s, (s, dir)} - while s in coords: - # print(s, dir) - while s + dir in coords and coords[s + dir] != '#' and s + dir != obstruction: - # print("\t", s) - seen.add(s) - seen.add((s, dir)) - s += dir - if s + dir not in coords: - return False - turn[s.real].append(s.imag) - dir *= 1j - if (s, dir) in seen: +def solve(obstruction, pos=start, d=-1j): + seen = set() + while pos in coords: + seen.add((pos, d)) + while coords.get(pos + d, "#") != '#' and pos + d != obstruction: + pos += d + seen.add((pos, d)) + if pos + d not in coords: + return {p for p, _ in seen} + d *= 1j + if (pos, d) in seen: return True - # print(turn) - # turns = set() - # s2 = 0 - # for y, row in turn.items(): - # if len(row) < 2: continue - # for x in row: - # for y2, row2 in turn.items(): - # if y2 != y and x in row2: - # for x2 in row: - # if x2 == x: continue - # turns.add(tuple(sorted(((y, x), (y2, x), (y, x2))))) - # s2 += 1 - # for t in sorted(turns): - # print(t) - # print(len(turns)) - # print(s2) - # exit(0) - - - - # for y in range(100): - # some = False - # for x in range(100): - # p = x + 1j * y - # if p in coords: - # print(end=coords[p] if p not in seen else "o") - # some = True - # if some: - # print() - - # print(len(seen)) - -s2 = 0 -for coord in coords: - s2 += solve(coord) -print(s2) +seen = solve(-1) +print(len(seen), sum(solve(coord) is True for coord in seen)) From b6672b0ceca0217a553a61c93f522b81da21ef2e Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 8 Dec 2024 06:25:14 +0100 Subject: [PATCH 171/225] Add day 7 --- .aoc_tiles/tiles/2024/07.png | Bin 0 -> 9945 bytes .aoc_tiles/tiles/2024/08.png | Bin 0 -> 8993 bytes 2024/07/07.py | 50 +++++++++++++++++++++++++++++++++++ README.md | 10 +++++-- 4 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2024/07.png create mode 100644 .aoc_tiles/tiles/2024/08.png create mode 100644 2024/07/07.py diff --git a/.aoc_tiles/tiles/2024/07.png b/.aoc_tiles/tiles/2024/07.png new file mode 100644 index 0000000000000000000000000000000000000000..a1bd4e6f3a4d6a4fcd22aaeae8ffe0e15b5cb8b6 GIT binary patch literal 9945 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 first: + break + if s == first: + s1 += first + # print('found', first, bin(mask)) + break + else: + for mask in range(3**repeat): + s = n[0] + for i in range(repeat): + mask, index = divmod(mask, 3) + op = [operator.add, operator.mul, concat][index] + s = op(s, n[i+1]) + if s > first: + break + if s == first: + s1 += first + print('found', first) + break +print(s1) + # re.findall(r"\d+", line) +# not 17866121572136 +# not 5724973022478 diff --git a/README.md b/README.md index 90ce923..9a1f3db 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@

    - Advent of Code - 222/462 ⭐ + Advent of Code - 226/466 ⭐

    - 2024 - 12 ⭐ - Python + 2024 - 16 ⭐ - Python

    @@ -23,6 +23,12 @@ + + + + + +

    2023 - 50 ⭐ - Python

    From d1d8b4bcf24fd2bb50723f8d405d20e849c51be7 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 8 Dec 2024 06:25:28 +0100 Subject: [PATCH 172/225] Add day 8 --- .aoc_tiles/tiles/2024/08.png | Bin 8993 -> 10039 bytes 2024/08/08.py | 51 +++++++++++++++++++++++++++++++++++ README.md | 2 +- 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 2024/08/08.py diff --git a/.aoc_tiles/tiles/2024/08.png b/.aoc_tiles/tiles/2024/08.png index dc7e715bb0a4af6c71bf17cb2f7290b2cf2a25e1..4e2089f1eed7a0a4189f6cb4db239223a4e21ac5 100644 GIT binary patch literal 10039 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 literal 8993 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 - +

    From 97b641f7f31bd47f99538741a2261c9963dda79d Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 8 Dec 2024 22:34:46 +0100 Subject: [PATCH 173/225] Add day 8 --- 2024/08/08.py | 53 ++++++++++----------------------------------------- 1 file changed, 10 insertions(+), 43 deletions(-) diff --git a/2024/08/08.py b/2024/08/08.py index e5c32e4..e731df5 100644 --- a/2024/08/08.py +++ b/2024/08/08.py @@ -1,51 +1,18 @@ -from collections import * from itertools import * -from functools import * -import re coords = {x+1j*y: c for y, r in enumerate(open(0)) for x, c in enumerate(r.strip())} -# d4 = [1, 1j, -1, -1j] -# d8 = d4 + [1+1j, 1-1j, -1+1j, -1-1j] -# def adjacent(coord, dirs=d4): -# return [coord + d for d in dirs] +by = lambda v: v[1] +order = groupby(sorted(coords.items(), key=by), by) +p1, p2 = set(), set() -order = defaultdict(list) - -for coord, char in coords.items(): - if char != '.': - order[char].append(coord) - -antinodes = set() -# print(order) - -for char, coord in order.items(): - for a, b in combinations(coord, r=2): +for char, coord in order: + if char == '.': continue + for (a, _), (b, _) in combinations(coord, r=2): diff = a - b - i = 0 - while (new := a + diff * i) in coords: - antinodes.add(new) - i += 1 - i = 0 - while (new := b - diff * i) in coords: - antinodes.add(new) - i += 1 -# print() -antinodes &= coords.keys() -# print(antinodes) - -for y in range(12): - for x in range(12): - c= y*1j+x - - print(end='#' if c in antinodes else coords[c]) - print() - -print(len(antinodes)) - - + p1 |= {a + diff*i for i in (-2, 1)} + p2 |= {a + diff*i for i in range(-100, 100)} -# for line in open(0): -# n = [int(a) for a in line.split()] - # re.findall(r"\d+", line) +print(len(p1 & coords.keys())) +print(len(p2 & coords.keys())) From 29192f4f98e0d37d98307fd6cdaa246be791b88a Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 8 Dec 2024 22:49:43 +0100 Subject: [PATCH 174/225] Add day 7 --- 2024/07/07.py | 45 +++++++++++---------------------------------- 1 file changed, 11 insertions(+), 34 deletions(-) diff --git a/2024/07/07.py b/2024/07/07.py index af1aeaa..b8086e0 100644 --- a/2024/07/07.py +++ b/2024/07/07.py @@ -1,50 +1,27 @@ -from collections import * -from itertools import * -from functools import * -import operator -import re - -d4 = [1, 1j, -1, -1j] -d8 = d4 + [1+1j, 1-1j, -1+1j, -1-1j] -def adjacent(coord, dirs=d4): - return [coord + d for d in dirs] - +from operator import * def concat(a, b): return int(str(a) + str(b)) - -s1 = 0 +s1 = s2 = 0 for line in open(0): first, rest = line.split(": ") n = [int(a) for a in rest.split()] first = int(first) repeat = len(n) - 1 - for mask in range(1 << repeat): + for mask in range(3**repeat): s = n[0] + for_part1 = True for i in range(repeat): - op = [operator.add, operator.mul][bool((1 << i) & mask)] + mask, index = divmod(mask, 3) + for_part1 &= index != 2 + op = [add, mul, concat][index] s = op(s, n[i+1]) if s > first: break if s == first: - s1 += first - # print('found', first, bin(mask)) + s1 += first * for_part1 + s2 += first break - else: - for mask in range(3**repeat): - s = n[0] - for i in range(repeat): - mask, index = divmod(mask, 3) - op = [operator.add, operator.mul, concat][index] - s = op(s, n[i+1]) - if s > first: - break - if s == first: - s1 += first - print('found', first) - break -print(s1) - # re.findall(r"\d+", line) -# not 17866121572136 -# not 5724973022478 + +print(s1, s2, sep="\n") From 87d31a64c0a0e1682dbc906fd3ac15c6c24d1e43 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Mon, 9 Dec 2024 23:20:46 +0100 Subject: [PATCH 175/225] Add day 9 --- .aoc_tiles/tiles/2024/09.png | Bin 0 -> 10085 bytes 2024/09/09.py | 71 +++++++++++++++++++++++++++++++++++ README.md | 7 +++- 3 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2024/09.png create mode 100644 2024/09/09.py diff --git a/.aoc_tiles/tiles/2024/09.png b/.aoc_tiles/tiles/2024/09.png new file mode 100644 index 0000000000000000000000000000000000000000..9dbb11b7798de7506110e9ab5f147db67dcc1cb0 GIT binary patch literal 10085 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 r@0TLO_cio4bPR(|IqZaYo?fP(SV(NA*gwH= file: + spaces[j].append((i, file)) + files[i] = (0, file) + free_spaces[j] -= file + break + + for file, space, empty in zip(files, spaces, free_spaces): + for i, count in [file] + space + [(0, empty)]: + while count: + s += i * (index := index + 1) + count -= 1 + return s + +filesystem = [int(a) for a in input()] +print(solve1(filesystem[:])) +print(solve2(filesystem[::2], filesystem[1::2])) + +# print(spaces) + + +# for file in files[::-1][::2]: + +# for i, file in enumerate(files): +# for _ in file: +# s += i * (index := index + 1) + + +# while f+1 < len(files): +# file = files[f := f + 1] +# is_file = f%2 == 0 +# for _ in range(file): +# i = f//2 if is_file else len(files) // 2 +# print(end=str(i)+"'") +# print(f, i, is_file, len(files)//2, files[-3:]) +# s += i * (index := index + 1) +# if not is_file: +# files[-1] -= 1 +# while files[-1] == 0 or len(files) % 2 == 0 and len(files)-1 != f: +# files.pop() +# if len(files)-1 == f: +# break + +# print(s) +# for f, file in enumerate(files): +# not 8276976286384 +# not 6341974755416 +# not 6341974805198 + diff --git a/README.md b/README.md index e25d186..cfca341 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@

    - Advent of Code - 226/466 ⭐ + Advent of Code - 228/468 ⭐

    - 2024 - 16 ⭐ - Python + 2024 - 18 ⭐ - Python

    @@ -29,6 +29,9 @@ + + +

    2023 - 50 ⭐ - Python

    From d4c75f97469b10d4c05671692200875fb105303e Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Tue, 10 Dec 2024 06:25:41 +0100 Subject: [PATCH 176/225] Add day 10 --- .aoc_tiles/tiles/2024/10.png | Bin 0 -> 8689 bytes 2024/10/10.py | 18 ++++++++++++++++++ README.md | 7 +++++-- 3 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2024/10.png create mode 100644 2024/10/10.py diff --git a/.aoc_tiles/tiles/2024/10.png b/.aoc_tiles/tiles/2024/10.png new file mode 100644 index 0000000000000000000000000000000000000000..63fca2ffb64996fa7ed3982b1f62f233e8698bbe GIT binary patch literal 8689 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

    - Advent of Code - 228/468 ⭐ + Advent of Code - 230/470 ⭐

    - 2024 - 18 ⭐ - Python + 2024 - 20 ⭐ - Python

    @@ -32,6 +32,9 @@ + + +

    2023 - 50 ⭐ - Python

    From dfb4e261270064c135308f2dd51ee9ef5d2044bc Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Tue, 10 Dec 2024 06:26:31 +0100 Subject: [PATCH 177/225] Add day 9 --- 2024/09/09.py | 32 -------------------------------- 1 file changed, 32 deletions(-) diff --git a/2024/09/09.py b/2024/09/09.py index ce9e9fe..3f96a31 100644 --- a/2024/09/09.py +++ b/2024/09/09.py @@ -37,35 +37,3 @@ def solve2(files, free_spaces, s=0, index=-1): filesystem = [int(a) for a in input()] print(solve1(filesystem[:])) print(solve2(filesystem[::2], filesystem[1::2])) - -# print(spaces) - - -# for file in files[::-1][::2]: - -# for i, file in enumerate(files): -# for _ in file: -# s += i * (index := index + 1) - - -# while f+1 < len(files): -# file = files[f := f + 1] -# is_file = f%2 == 0 -# for _ in range(file): -# i = f//2 if is_file else len(files) // 2 -# print(end=str(i)+"'") -# print(f, i, is_file, len(files)//2, files[-3:]) -# s += i * (index := index + 1) -# if not is_file: -# files[-1] -= 1 -# while files[-1] == 0 or len(files) % 2 == 0 and len(files)-1 != f: -# files.pop() -# if len(files)-1 == f: -# break - -# print(s) -# for f, file in enumerate(files): -# not 8276976286384 -# not 6341974755416 -# not 6341974805198 - From ba66bd14c41d69ee26148e048613945765d9d77f Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Tue, 10 Dec 2024 06:30:00 +0100 Subject: [PATCH 178/225] Add day 10 --- 2024/10/10.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/2024/10/10.py b/2024/10/10.py index 5220007..f389dd2 100644 --- a/2024/10/10.py +++ b/2024/10/10.py @@ -9,10 +9,10 @@ def traverse(c, unique, some=0): some += traverse(c+d, unique) return some -s1, p2 = 0, {c: set() for c in coords} +p1, s2 = {c: set() for c in coords}, 0 for c in coords: if coords[c] == 0: - s1 += traverse(c, p2[c]) + s2 += traverse(c, p1[c]) -print(s1) -print(sum(map(len, p2.values()))) +print(sum(map(len, p1.values()))) +print(s2) From 6a0fa6d715fd95e0ff352bc30af1c75655a5593d Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Tue, 10 Dec 2024 13:27:22 +0100 Subject: [PATCH 179/225] Add day 10 --- 2024/10/10.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/2024/10/10.py b/2024/10/10.py index f389dd2..4420f68 100644 --- a/2024/10/10.py +++ b/2024/10/10.py @@ -1,18 +1,18 @@ -coords = {x+1j*y: int(c) for y, r in enumerate(open(0)) for x, c in enumerate(r.strip())} +coords = {x+1j*y: int(h) for y, r in enumerate(open(0)) for x, h in enumerate(r.strip())} -def traverse(c, unique, some=0): +def hike(c, peaks, paths=0): if coords[c] == 9: - unique.add(c) + peaks.add(c) return 1 for d in [1, 1j, -1, -1j]: if coords.get(c+d) == coords[c] + 1: - some += traverse(c+d, unique) - return some + paths += hike(c+d, peaks) + return paths p1, s2 = {c: set() for c in coords}, 0 for c in coords: if coords[c] == 0: - s2 += traverse(c, p1[c]) + s2 += hike(c, p1[c]) print(sum(map(len, p1.values()))) print(s2) From 5c138988ad51ece5916aa685b250ec6f3b5e1e4d Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Wed, 11 Dec 2024 07:19:15 +0100 Subject: [PATCH 180/225] Add day 11 --- .aoc_tiles/tiles/2024/11.png | Bin 0 -> 8057 bytes 2024/11/11.py | 30 ++++++++++++++++++++++++++++++ README.md | 7 +++++-- 3 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2024/11.png create mode 100644 2024/11/11.py diff --git a/.aoc_tiles/tiles/2024/11.png b/.aoc_tiles/tiles/2024/11.png new file mode 100644 index 0000000000000000000000000000000000000000..99fd549db59b19603027cb0b26fe8fc7600fbc0e GIT binary patch literal 8057 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 Hu0mjf(P9%@ literal 0 HcmV?d00001 diff --git a/2024/11/11.py b/2024/11/11.py new file mode 100644 index 0000000..d1f4510 --- /dev/null +++ b/2024/11/11.py @@ -0,0 +1,30 @@ +lookup = {} + +def duplicate(num): + if num in lookup: + return lookup[num] + nums = [num] + for i in range(25): + new = [] + for n in nums: + s = str(n) + if n == 0: + new.append(1) + elif len(s) % 2 == 0: + new.append(int(s[:len(s)//2])) + new.append(int(s[len(s)//2:])) + else: + new.append(n * 2024) + nums = new + lookup[num] = nums + return nums + +def solve(nums, target, i=0, s=0): + if i == target: + return len(nums) + return sum(solve(duplicate(n), target, i+25) for n in nums) + +nums = [int(a) for a in input().split()] +print(solve(nums, 25)) +print(solve(nums, 75)) + diff --git a/README.md b/README.md index d804b47..d56681c 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@

    - Advent of Code - 230/470 ⭐ + Advent of Code - 232/472 ⭐

    - 2024 - 20 ⭐ - Python + 2024 - 22 ⭐ - Python

    @@ -35,6 +35,9 @@ + + +

    2023 - 50 ⭐ - Python

    From 2ba4ae01d24463b70cb7bae3cd3b68b8f9b56237 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Wed, 11 Dec 2024 07:34:00 +0100 Subject: [PATCH 181/225] Add day 11 --- 2024/11/11.py | 36 +++++++++++++----------------------- 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/2024/11/11.py b/2024/11/11.py index d1f4510..0118a47 100644 --- a/2024/11/11.py +++ b/2024/11/11.py @@ -1,30 +1,20 @@ -lookup = {} +from collections import Counter -def duplicate(num): - if num in lookup: - return lookup[num] - nums = [num] - for i in range(25): - new = [] - for n in nums: +def blink(counts, blinks): + for _ in range(blinks): + for n, occ in list(counts.items()): s = str(n) if n == 0: - new.append(1) + counts[1] += occ elif len(s) % 2 == 0: - new.append(int(s[:len(s)//2])) - new.append(int(s[len(s)//2:])) + counts[int(s[:len(s)//2])] += occ + counts[int(s[len(s)//2:])] += occ else: - new.append(n * 2024) - nums = new - lookup[num] = nums - return nums + counts[n * 2024] += occ + counts[n] -= occ + return counts -def solve(nums, target, i=0, s=0): - if i == target: - return len(nums) - return sum(solve(duplicate(n), target, i+25) for n in nums) - -nums = [int(a) for a in input().split()] -print(solve(nums, 25)) -print(solve(nums, 75)) +counts = Counter([int(a) for a in input().split()]) +print(sum(blink(counts, 25).values())) +print(sum(blink(counts, 50).values())) From eb11e94ffdaaeadd9ab77d1903495fefa35c1b6b Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Wed, 11 Dec 2024 07:39:32 +0100 Subject: [PATCH 182/225] Add day 11 --- 2024/11/11.py | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/2024/11/11.py b/2024/11/11.py index 0118a47..06c5dbd 100644 --- a/2024/11/11.py +++ b/2024/11/11.py @@ -1,20 +1,16 @@ from collections import Counter -def blink(counts, blinks): - for _ in range(blinks): - for n, occ in list(counts.items()): - s = str(n) - if n == 0: - counts[1] += occ - elif len(s) % 2 == 0: - counts[int(s[:len(s)//2])] += occ - counts[int(s[len(s)//2:])] += occ - else: - counts[n * 2024] += occ - counts[n] -= occ - return counts - counts = Counter([int(a) for a in input().split()]) -print(sum(blink(counts, 25).values())) -print(sum(blink(counts, 50).values())) +for i in range(75): + for n, occ in list(counts.items()): + if n == 0: + counts[1] += occ + elif len(s := str(n)) % 2 == 0: + counts[int(s[:len(s)//2])] += occ + counts[int(s[len(s)//2:])] += occ + else: + counts[n * 2024] += occ + counts[n] -= occ + if i in (24, 74): + print(sum(counts.values())) From 854cd88b4996ddd1a01f01d9433fa31b06eedf81 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Wed, 11 Dec 2024 16:02:20 +0100 Subject: [PATCH 183/225] Add day 11 --- 2024/11/11.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/2024/11/11.py b/2024/11/11.py index 06c5dbd..7a60324 100644 --- a/2024/11/11.py +++ b/2024/11/11.py @@ -4,13 +4,11 @@ for i in range(75): for n, occ in list(counts.items()): - if n == 0: - counts[1] += occ - elif len(s := str(n)) % 2 == 0: - counts[int(s[:len(s)//2])] += occ - counts[int(s[len(s)//2:])] += occ + if (l := len(str(n))) % 2 == 0: + counts[n // 10**(l//2)] += occ + counts[n % 10**(l//2)] += occ else: - counts[n * 2024] += occ + counts[n * 2024 or 1] += occ counts[n] -= occ if i in (24, 74): print(sum(counts.values())) From cd1077d63b8f3a74635265c38ea7b370f743ce13 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Thu, 12 Dec 2024 06:30:13 +0100 Subject: [PATCH 184/225] Add day 12 --- .aoc_tiles/tiles/2024/12.png | Bin 0 -> 8875 bytes 2024/12/12.py | 77 +++++++++++++++++++++++++++++++++++ README.md | 7 +++- 3 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2024/12.png create mode 100644 2024/12/12.py diff --git a/.aoc_tiles/tiles/2024/12.png b/.aoc_tiles/tiles/2024/12.png new file mode 100644 index 0000000000000000000000000000000000000000..2265331354a92a02f39d9cd608bfafba5a6d1cb7 GIT binary patch literal 8875 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

    - Advent of Code - 232/472 ⭐ + Advent of Code - 234/474 ⭐

    - 2024 - 22 ⭐ - Python + 2024 - 24 ⭐ - Python

    @@ -38,6 +38,9 @@ + + +

    2023 - 50 ⭐ - Python

    From 1558f219d225d4aea6df80a5537ecd60e3eeee95 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Thu, 12 Dec 2024 07:40:52 +0100 Subject: [PATCH 185/225] Add day 12 --- 2024/12/12.py | 74 +++++++++++++-------------------------------------- 1 file changed, 19 insertions(+), 55 deletions(-) diff --git a/2024/12/12.py b/2024/12/12.py index 78e48e9..3830538 100644 --- a/2024/12/12.py +++ b/2024/12/12.py @@ -1,77 +1,41 @@ -from collections import * -from itertools import * -from functools import * -import sys -import re - -sys.setrecursionlimit(1000000) - coords = {x+1j*y: c for y, r in enumerate(open(0)) for x, c in enumerate(r.strip())} -d4 = [1, 1j, -1, -1j] -dc = [i/2 for i in [1+1j, 1-1j, -1+1j, -1-1j]] -# print(dc) -def adjacent(coord, dirs=d4): +dir_corners = [.5+.5j, .5-.5j, -.5+.5j, -.5-.5j] +def adjacent(coord, dirs=[1, 1j, -1, -1j]): return [coord + d for d in dirs] +regions, visited = [], set() - - -# for line in open(0): -# n = [int(a) for a in line.split()] - # re.findall(r"\d+", line) - -regions = [] - -visited = set() - -def collect(c, char, region): +def fill_region(c, region): visited.add(c) region.append(c) for adj in adjacent(c): - if coords.get(adj) == char: - if adj not in visited: - collect(adj, char, region) + if coords.get(adj) == coords[c] and adj not in visited: + fill_region(adj, region) return region - -for c in coords: - char = coords[c] +for c, char in coords.items(): if c not in visited: - regions.append((char, collect(c, char, []))) - + regions.append((char, fill_region(c, []))) -s = 0 -s2 = 0 +s1 = s2 = 0 for char, region in regions: perimeter = 0 - # # # sides = 0 for r in region: for adj in adjacent(r): if coords.get(adj) != char and adj not in region: - # sides.add(adj) perimeter += 1 + s1 += perimeter * len(region) + corners = set() - for c in region: - for delta in adjacent(c, dc): - k = 0 - ks = [] - for adj in adjacent(delta, dc): - adj = round(adj.real) + round(adj.imag) * 1j - k += adj in region - if adj in region: - ks.append(adj) - if k in [1,3]: - corners.add(delta) - if k == 2 and (ks[0] - ks[1]).real and (ks[0] - ks[1]).imag: - corners.add(delta) - corners.add(delta + 0.001) - # print(char, corners, len(corners) * len(region), len(corners)) + for r in region: + for corner in adjacent(r, dir_corners): + k = [adj for adj in adjacent(corner, dir_corners) if adj in region] + if len(k) in [1, 3]: + corners.add(corner) + elif abs(k[0] - k[1]) != 1: + corners |= {corner, corner+0.1} - s += perimeter * len(region) s2 += len(corners) * len(region) - -print(s) - -print(s2) +print(s1, s2, sep="\n") From 5d10e1fe7bc9631697cc975bd4e3ef082ce7d1da Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Thu, 12 Dec 2024 07:53:27 +0100 Subject: [PATCH 186/225] Add day 12 --- 2024/12/12.py | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/2024/12/12.py b/2024/12/12.py index 3830538..9166f75 100644 --- a/2024/12/12.py +++ b/2024/12/12.py @@ -1,34 +1,27 @@ coords = {x+1j*y: c for y, r in enumerate(open(0)) for x, c in enumerate(r.strip())} - dir_corners = [.5+.5j, .5-.5j, -.5+.5j, -.5-.5j] +visited = set() + def adjacent(coord, dirs=[1, 1j, -1, -1j]): return [coord + d for d in dirs] -regions, visited = [], set() - -def fill_region(c, region): +def fill_region(c): visited.add(c) - region.append(c) + region = [c] for adj in adjacent(c): if coords.get(adj) == coords[c] and adj not in visited: - fill_region(adj, region) + region += fill_region(adj) return region +s1 = s2 = 0 for c, char in coords.items(): - if c not in visited: - regions.append((char, fill_region(c, []))) + if c in visited: continue -s1 = s2 = 0 -for char, region in regions: - perimeter = 0 - for r in region: - for adj in adjacent(r): - if coords.get(adj) != char and adj not in region: - perimeter += 1 - s1 += perimeter * len(region) + perimeter, corners = 0, set() + + for r in (region := fill_region(c)): + perimeter += sum(adj not in region for adj in adjacent(r)) - corners = set() - for r in region: for corner in adjacent(r, dir_corners): k = [adj for adj in adjacent(corner, dir_corners) if adj in region] if len(k) in [1, 3]: @@ -36,6 +29,7 @@ def fill_region(c, region): elif abs(k[0] - k[1]) != 1: corners |= {corner, corner+0.1} + s1 += perimeter * len(region) s2 += len(corners) * len(region) print(s1, s2, sep="\n") From 0028a8251bfd3547d38b17bf81f2d657bc19957a Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Fri, 13 Dec 2024 06:42:05 +0100 Subject: [PATCH 187/225] Add day 13 --- .aoc_tiles/tiles/2024/13.png | Bin 0 -> 9143 bytes 2024/13/13.py | 19 +++++++++++++++++++ README.md | 7 +++++-- 3 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2024/13.png create mode 100644 2024/13/13.py diff --git a/.aoc_tiles/tiles/2024/13.png b/.aoc_tiles/tiles/2024/13.png new file mode 100644 index 0000000000000000000000000000000000000000..bb9edddc2e7fe6184d0517991fa0c64f35fd5053 GIT binary patch literal 9143 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

    ~v4YxD&f&Eu zyZ3()!E(hTEQOL609v%%kLAPfZEd;#YM}zRa7(m%W8z(#<9<^tX${_Z6C26Hy@cr+ zckn>vhs~pz1f9Ee!?$d>MLuHdyQp*vBqP4wU%?wQgr8=H7+uHO7;t~QA6Yw(wWE+F zx=2C^I?Ob^`d5Aw?e^kwmwFWZLIGNJY2s1!exq_vU4qlxpnP?$e50Zei$NXKy}IhJ ze2h;^__&qencks7BfU uR;;WdeS?XH{C8>e5LemhJpiYIJ&7$6@cL_O*#2)>4j?bBB2^)267qj_JvJWz literal 0 HcmV?d00001 diff --git a/2024/13/13.py b/2024/13/13.py new file mode 100644 index 0000000..ef9a5ac --- /dev/null +++ b/2024/13/13.py @@ -0,0 +1,19 @@ +import re +import z3 + +s = [0, 0] +for machine in open(0).read().split("\n\n"): + (ax,ay), (bx,by), (px,py) = [map(int, x) for x in re.findall(r"(\d+).*?(\d+)", machine)] + + for i, add in enumerate([0, 10000000000000]): + a, b = z3.Int('a'), z3.Int('b') + + solver = z3.Optimize() + solver.add(px + add == a * ax + b * bx) + solver.add(py + add == a * ay + b * by) + solver.minimize(a * 3 + b) + + if solver.check() == z3.sat: + model = solver.model() + s[i] += model.eval(a).as_long() * 3 + model.eval(b).as_long() +print(*s, sep="\n") diff --git a/README.md b/README.md index 09c95a0..0c06684 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@

    - Advent of Code - 234/474 ⭐ + Advent of Code - 236/476 ⭐

    - 2024 - 24 ⭐ - Python + 2024 - 26 ⭐ - Python

    @@ -41,6 +41,9 @@ + + +

    2023 - 50 ⭐ - Python

    From 28887aa48a229b7cf7c74efb60a987bac5ed8c00 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Fri, 13 Dec 2024 19:42:02 +0100 Subject: [PATCH 188/225] update pre-commit-config --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 35dcee1..4b77607 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ repos: - repo: https://github.com/LiquidFun/aoc_tiles - rev: 0.6.2 + rev: 0.6.3 hooks: - id: aoc-tiles args: From 9dc411ca20388751eec10de349506c45e4f12a3a Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 14 Dec 2024 12:46:34 +0100 Subject: [PATCH 189/225] Add day 14 --- .aoc_tiles/tiles/2024/14.png | Bin 0 -> 8287 bytes 2024/14/14.py | 88 +++++++++++++++++++++++++++++++++++ README.md | 7 ++- 3 files changed, 93 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2024/14.png create mode 100644 2024/14/14.py diff --git a/.aoc_tiles/tiles/2024/14.png b/.aoc_tiles/tiles/2024/14.png new file mode 100644 index 0000000000000000000000000000000000000000..5d16359dff4f27c25a4d241ad6b36499392d0a12 GIT binary patch literal 8287 zcmV-lAfVrgP)%SOpJ-{IdG?%bAaF6j{t&u3Kh%B4s>uq62*us)d{J2)=Rsx5KN;oKEuG4zb+lw|UJwxEZVdp( zlM284J4-XKP8cHXtX5c3sZ7`{p%4jpJPs*wwJ|xoY3`Dp=WAP4G?q@RI$?OVGKEC6 zWDzY{w2(2juTJ-ly;HpZ@2qZ#6af5Ptz4{GVV<_39=14KKl36OI_<1hSoa>)zx~S% zJRTR~Zu9x_P!l=@08HqVoi9&$d2fP&tlDEZwlWGl9{18D4;wap%OAG@VArZ}7M=3+ zc!yLw_wgu{N@XcUwcngg+y3O9AK+%~Wb}%<#7(H%iKb>57?#@Gn zI&6l~#)UxvZZ;-#N^wowxw|Ea*>bmrK7@s^io2yv?R={zHyB$p1`Y?`z7~n93IL=s z86JmQGT9R?!D$#r^o8N5Dij=^@ZjZKtguE~G67)gu{*pj@s}&Y?9Gi0;hpa5xG3BM z07ygvDB1h{-`PwW8Cw$UZoN3%BmQ2g@~M=0gFS2yz7=);Zt>o@bQ}(*_&9vIauSnD zKK$#Wii(@TNVio%{J;)y-UF^KwQRn_)CR%pEJNcjpIiI)&>F zB=Uvb0B|#}`j;!Y$Zr&CCrBj{3HsZFPQi{k>smYAF{&!8YB_Q(uUjH5s%|;>kK&uN zOs0-OHAaA{*bJlfv&UmgO6oZ3DvP_j)$P&(eLoX6#`ryM>^PmQ_$=e|`I{F8C+}W4 zFT_n@7pf`*6cUlwB}O-0ZP?R&oqoOg0IMVgRe?5REC5(M$rHPooL?2{IZAa^rN^JJ zTY}vr;CrOZFjD-h!SGkru}!ma0Jdff5<%`CdoHDvCU(I}%WS<9w)*_kmm9lDP03ilZ;16fL8EdUS+cp?Gc zB~tO<=tEcpJbtF1(;LygXi3_`+R{1>i*AILc-ot-p6+w}M!vJP$?LNxD4anml{L2W zEuW0Wrj4^Nt>?@MbT+1v6>1K5RRMsbB~!WZSW;n1QEh)wAkfm@l~X-)A2;QcH(?7A zd!;hj(d+p!p>BUA7bzb&C(w1*nkfKKR?k`eO#(V|Nu$wh%@_?FzP*L_nOHE zE@p2%c85kGy)k>-o;8z~@418>yvyCOvEwQ{9!I4Rv8pPmYg@B7q3(%zHyyf;oq|VH zl~vZLe3ic^=C$*L=q8m+G@2&C>=$ZAL>VmejZLQXkgsjk~{KXZ&EP z3IN7CS&)hNtg_zQmG<^_c8PP!8?W3id+(QPr*0O0wJO5Kf{pBIY8P}%q-(!Vyq;Ut z!57uH@xD5p)-9Dy@v+CAq4&h3MXl7=db-C@vXVO0j^d6xV(zy{Rvs`FAPL0Xc*gS#!ypL z_y?y&@?%P6NM(v|g@*I0M4+n`S0H-a*p6)KZSRfTidSZibG0$KU(x^oRn1%`m5d!% zi6zpO4uLs~iam;mW!-S#icXXqo^bcsv;+Sk;Gp7sDx)ztHe{wl|j>;J*;$8su(sr=a?~3o53?m3iq#B&R2@2n0ON zf<^UqFav<54nYG)&MtE%6&Zo3v{&6*;hZ3s8511Or4(nDG;jsN$v%!tCwW{*D{XA= zISE%FI&d+2^TGfsg?P8H*3_7~K6+e99Y=BIeIQ%eicKTRzlZ;LG4n>Qim!zI%Zo)n zz60vYJI3D3MCl{68Ix+pq*gX+8f9Yb^|CiR@WwQBGuq!N+TRHP{=8mr;9@rRD03#Y zs)?)4UUhGUAO4Y)Qs_2yoWr~G1K13s$|mlf^BHlea?>T}Q%f2+{MC_O%O;QM;0tf% z*ZguhS1gfx#A`K=r4oAdu0$eh=LzXXq_)nktkQ-PN%ia&-U|tj>;0c)is9xn@ zLm6|wjML1k?yWFB^-+B4BhB`v6xC{&L*euJdJ0RwR^EO(6-GqwKIiR|S07;wUu*l9 zHzB<&A-zm{-tf&w`-N8<40=23EG!z0HfEIR)+NCnc5LOniP;rfkKXB%Rae-WGR}Rv zNaa@`4VeA;xfX7hA-pimdv_3dbraSoE7R9z`YZ@>#p88$iP76yJRbM;+DKhhWjHSk z|K1%$UTuYC#iqY9(|19r8;zpR)6)=Z-tvzdu|uSlpF!R}R6?Z?!@cb1g}6@k zb|C0}mr}>7J%YU)UY+5s-?0LLKJ%^!3~6NwUV3rY@~BT^g<_puVn&9lKtWh|JdQ>o zS+Hmh7R<2@<`Z13{N1d{M1tOw>R7deg(++MiZDGMy9Pq1R-PB+f_2X1^Z9&$H-5PM zEUO9>gmrB53*(#=zw{Xb1FijFQJ}3UqaUwFOJ1Go&kb}!g@xMtu)6hW^J1ag&dPrA z3KbBib$?fDHp57z(|XTUQAo!(&9*aRglst}mCEGLKzSp|$KTc3gia}{ZjDVYyqwYd zj;#L#X`e7qRkQsaqx>BE?{c)|)xNTa9ec$TPd8ike^-YCzz^{mjX23?%fkU6(A{Rz zmSX_0EW*pr)oQdQ>*j;1P*2;v=hHJw>SqVIES@x`OVnLf&)IV}O;=t8sBC8izjy^8 zPU~F0=)|pu>YUaQe6T2xLQ-)CdvoKTHbipyqQn0_Xm02GyIOy?JUqXmxvHt>6T;IH zmVv6WHDzGk9|i`x_U^-)wr$5#PHu_*=+E1zy&HeM1^{QaEZ>dbSZF#uAt94V2$cd)xU!p}4!9C+reQC?tZjwF#3(+4*t=vX|7Cx1ip<>VP<{zkm3aW~X&qQ^tpj z0>6#V>{eR+VauXS_jP*rU?NsY*x&Fpgk|_Ba_vkXA4l{4yCQ9Q^+TsXL?IEdo@$y= zT+<2wpB}v>?v|P`86u@_(-L~ObMP43KAqN)|8_=6Lws84oIqy<-r!&-8OUzsS7|sy zKMPCJmz$dgAieABWU(f4Z2w)6w!Hd*&*%S@Ty$j93*`-*)3*w@GkvU0=^KB)sgl>u%(%XdH`;>r{^AgS zS1U4+SW?&a^9p?aWbtz3*mr)tfpsXy^3o_oCY8K@{fuwVr*HY~ zI*meldtSiz>t`(3aSk24%XvrP2?kAB=?%1ZKYTIB#^Cj?dhqIjp*C-%J+Ee`bz>^| z%N1d_3u@Xrg>JTNH(R!~2@L=oOsS4mEaW_m9KKj0UAg=3#H{jmp0KX9bK9|7-4bb} z?`V{ZsK7e#KzZi`I?tRiT3xm5@+NB&nsxulZV-F-7j#lyt+bNE5AB({98X?6+D?>Jax0M zl`FvGa3?;PcjWp50PwUo-xHVFb}{#-^^vB=My=c~0I*R#Yky@E_tz`Et6^ojhD1`&s}nT0vJ`VwR&08d zzw>t&GX6+>(Agyh04kRENlg*~zw6AsLy39sFH-ylr#-J`4Ei{7K<`)z*3Judi5%yk zuCh!9J7Uw&S?OWX%8eXeJ5RXh)oC1F7gr#n8X0lB#LCs$`NEo(&YG6a5D%N^0H;eC z=s2YZ4` z?K<1z6opP=?N^HMt|hMq3ND@(zTs zlv&r$9_MLqs!m6Z`(&U}2Q zuoeb2&Vt^@4yoQ9MBb+>EM-;}o$|%$ z2VtYbE90BE3=U5?EL4^E)7qzZCBqTekBr*JdDj&xRTUHLq7YC}0k;cku4YvX3snIC zHWSzoyk`t9uUcU}4OS$Png)b>+1>kQx!$}A_~-M5%7q($yLr2yM!9@M_U<6^svctv zmbHV0k=nb1$g4tFhOiP0TQ)r?7{R?eh`frA!oeEf3>FNrcS(fzwwFQ_3WZ`xhd}hW zp*_32Ng=~3n?Z>j?-1;6<7R7O$}j?e`ZiwDgUaJK^6PZTEjsj71q#A?t}5-Ju9Yby zf(40c!K4PdSz|M-y4kY-cxM(ik0Ag!TCrZX@>w*|W8<&a?iQ*T`DxFq4F>Wa*=y%> zRcQ}x#~FCsOOrhQyDA(2%IY~PbIt&OF_pacwMcE;`GG zyY~A;4H;Gw(u%u8qC=N+YFfAeuwjnhhPi%dorzwfzBzYKKVHpHY43`uV`DUI`ytX^h1KGPow5cIp+(3Q1#a{UGG(0qHa%nvy+>nzdV(i z{6K{Zp&669db;!^uDw9<{NyD=B=$)-c@92Gxy!zEkI>li_qb4I5u+gh>hSlO)6>-=U zQkxc4wD{59y8>;POz4#HP8Qg99yno*cvUH*vrGK-nN$V8cmUY?Qka)RZvZf%Sn~0o zN!^(BqWxvBxLbPvQGKUCiza%Yo8oTi`@db!ujq|> z&|mh_jYyjp1ceMt9^C`vWQ;GqAM8vb`ls3MezIP(A1OSNg z?<)f#tie*%z{hzlW`k-|wm-;PD?X4g2}6sIzw-F8?}SK~(^7DZLZ`VleNdE2jB8tZCD4#kp2--iH*1 zqpAb~wW^|!2>V`-Bt7{EEtSdWMx=eOPe&`%a|9p$nXDf#ws(!GqyRVTW&gXNF4lYp zU---A><<=)P{@RWissotZZmuxw)}Am*{gj9SJ3z`8lu7)j;hiO0v=Bx^|m%1hr^EF z0f26#XPhR5-sK9!OLxVIHO9>S<)3U0Pq;A5{f%h9qUzRn4<(@iNVU)4s(FMn6oobN zRQ2?r+`AH~R4E>j3dG(jOvq3X5UbA&uGe#`f;OGN@^%VDSoePf1058kPdrzZ_87|V z+C%G(HM~@XWLVX*clkoG^51%R&7|nWD<`bwU&jv&t4j3A8?)oWpzvzIb6#~&d=!ps zYoGHD7_XeLM!dDpc?XQQS6I)2wFAS;W*FVrwH!OSFfhEDF~Gd|L19HP0(cjMxhqs? z>+DjOVRZ!9t0m;(ybl;Ff|0>HKhz!hl#7MRS?__gcf7OZsz@Ji2XhmKQDqbN?A=H4 zX+3FRf7%e~?_#BVNbK$6J?DD@{adr?Z_e@ccd-P3-15e6CJKMmQKGTxgX80c<; z!{Jm`FeuLZ(COWQ;Z=aAz1iyNJ|3gY_P!Pg06$&IYUJ?LWmruqst;ErZJU#YD@Hy8-=HnA0j31yf9(fc!#;4#iB_V_pO_5!J@6$9gl2oUKBjj&*_EF z|58_hMx*ID^ZpE~O7CL@-7=wA(!m!A#S$_R?`X+nQpuk!3;kkw7?n(vN;Q3d(VG{m zDgdC62z)h*H8#fhJ#OqkRRsWJMww=p)?-t99=nl0-r3T@qUYnZmxFmuS%bO?2(MN% z@6*QFZ(R}`v*W@Wv&V;yv0)gIGE3@r#@=mc;{gBxkH4~GX;N;*j#DYvqxP+vP9_mH z9Jqol9C@nZ3&k2TtdhxOp?sdpk~$6m>^Pk&mPpA&yoL;`2HK0m0h30tH#c59(cOkk z|M`!^P}_Z%*Iy%H;p9nnYH!cF%BoXH9TS{BqInZ_o4`W%~MofAcC; ztO8m&)id{TQ%-pkmiM2GvI#C$YiEr&p;IhP=u0PiBJMp_Pl5obt6*=%M$eI_0fJYq3*|TVVptTu}4M{;Sq(+Vt_GPi~pB{Z#5TOm_f) z5t$g}=d?GjH{~0`dn31E$ElPJb0)kyKakfYzFkoL&d-T|eY^mDn5wHF&@YR9c1dmT z@3Mwgu3(IPk4I6bKy)tU;j##?6G{1qi~WL7_xRKjbb-J~Rn<`D<#mbkDw^{u;NR@Z zx90k8TNaX0+JMc*JKo8HOvGoEH7WC+x><1QW`PNv(!m!=Winr9D*!;(a4S~`@p1rw z+BP0qL4UWI4!+0~vz+zV^?U~lX6P6@0PwUo^B84%_Q`W_D75mB;yt+~dVqOv<=0Tj zL{}RVY+<0Q6;~j7+}N&;m%|exOK~Q7kLutHi>eeKrbq=EjTSb>mMaiFtnPJg)=F4H zp-7>GfXCaIGLUORP}9Oq%znIViWdOHgt%puHXt)*L$-HEFmKoxTW4z)cCW9KiscfH zR?M1~PMJ&vuMuWJycL_iV#?UxujXQ3P|ylA8qJbLTQbSx$n^pd<~2p`QTX-?6Xpgw z?~BjGrVT<_jj6q}Y74{MDI`K_kzA~>BmX`)y7>h=GvlZLmwj>RFf>~E8RU)fcbw{D zAAhejr@V`a8 za=m~>r+oBcP-8pa%ic^whSmPHciZul=m4k5V@JIi?aQK*E1S4`&S%7>mMBy+XHv_R z*6;v8YEkWxYk9K+oZp=5SKHcoA@$J@f8WR6jgSg+f?ORfS@mtaiy37HFXt-EoAe4x zDwCZ`emE!4`P|)}D^Rd@oZ z_iBmZqACPPhE>$wGj|@fb#~!#xZmHIdGclv0C?E3|9AFYTc=Q6hSjHG@1=}#mD%dB znD(J+-}Y{a^w5=@LswMvFIwS5@}m>UD$=f^kb4yVcq!+{OFgGkwzjUd^X;D#K_jY~ zIso9(eHC8%T4H#q3IKk;nuGlpg^sZqZOIe}yU9d?l?jd8C9Y}d)R19y*x9QkuMTnE zwF&mJ<;CE4WNB?vw=U7r9PdNpqQijz{F%$IW9m=W# zmGfA7u)5foShDERfi8Zo*02B2$6ZYwhNG&8^4@$+9sG8_@T>n!Z0CtORpnMifMi&G zRMi;ZY%wpyEnZbBZ_OCussd&229>NcCOCb&E^_v^Sma5kj2){c&+>CFspI@`F*{4+ zw|aFL7OGP4ZW#K#JBYk;!W!|`KIa`U-u{X6K3uGQ&O2bd{SfDU7+L$Acffe@gTjj7 dIqwMO{eLy&H|?2RBt`%L002ovPDHLkV1nT7Xk-8Y literal 0 HcmV?d00001 diff --git a/2024/14/14.py b/2024/14/14.py new file mode 100644 index 0000000..685a517 --- /dev/null +++ b/2024/14/14.py @@ -0,0 +1,88 @@ +from collections import * +import time +from itertools import * +from functools import * +# import networkx as nx +import re +import sys +sys.setrecursionlimit(1000000) + +s1 = s2 = 0 +# coords = {x+1j*y: c for y, r in enumerate(open(0)) for x, c in enumerate(r.strip())} + +d4 = [1, 1j, -1, -1j] +d8 = d4 + [1+1j, 1-1j, -1+1j, -1-1j] +d4half = [i/2 for i in d4] +d8half = [i/2 for i in d8] +def adjacent(coord, dirs=d4): + return [coord + d for d in dirs] + + + + +X = 101 +Y = 103 +# X = 11 +# Y = 7 +maps = [] +for line in open(0): + x, y, vx, vy = map(int, re.findall(r"-?\d+", line)) + maps.append((x, y, vx, vy)) +8 +70 +284 + +seen = set() + +for i in range(0, X * Y, 1): + counts = {} + quadrant = [0, 0, 0, 0] + nines = [0] * 9 + rows = Counter() + for x, y, vx, vy in maps: + nx = (x + vx * i) % X + ny = (y + vy * i) % Y + if (nx, ny) not in counts: + counts[(nx, ny)] = 0 + counts[(nx, ny)] += 1 + rows[ny] += 1 + # print(x, y, nx, ny) + # print(nx, (nx >= 55) + (ny >= 56) * 2) + # print(X // 2, Y // 2) + if nx != X // 2 and ny != Y // 2: + q = (nx > X//2) + (ny > Y//2) * 2 + #print(q) + quadrant[q] += 1 + n = (nx // (X//3+1)) + (ny // (Y//3+1)) * 3 + # print(n) + nines[n] += 1 + seen.add((tuple(sorted(quadrant)), i)) + + + # key = tuple(counts.items()) + # if key in seen: + # break + # seen.add(key) + + s = quadrant[0] * quadrant[1] * quadrant[2] * quadrant[3] + # if any(q <= 10 for q in nines): + if rows[40] > 30: + for yy in range(Y): + print(end=str(yy)) + for xx in range(X): + print(end="#" if (xx, yy) in counts else " ") + # print(end=str(counts.get((xx, yy), " "))) + print() + + print(quadrant) + print(i) + print() + # time.sleep(0.1) + + # print(quadrant) + +# print(sorted(seen, reverse=True)) + +print(quadrant) + +print(s1, s2, sep="\n") diff --git a/README.md b/README.md index 0c06684..8899000 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@

    - Advent of Code - 236/476 ⭐ + Advent of Code - 238/478 ⭐

    - 2024 - 26 ⭐ - Python + 2024 - 28 ⭐ - Python

    @@ -44,6 +44,9 @@ + + +

    2023 - 50 ⭐ - Python

    From e7b61a95f2b98387c3fcf8e18ba6a6c1cfd915a1 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 14 Dec 2024 13:15:57 +0100 Subject: [PATCH 190/225] Add day 14 --- 2024/14/14.py | 91 +++++++-------------------------------------------- 1 file changed, 12 insertions(+), 79 deletions(-) diff --git a/2024/14/14.py b/2024/14/14.py index 685a517..a8b89a8 100644 --- a/2024/14/14.py +++ b/2024/14/14.py @@ -1,88 +1,21 @@ -from collections import * -import time -from itertools import * -from functools import * -# import networkx as nx import re -import sys -sys.setrecursionlimit(1000000) -s1 = s2 = 0 -# coords = {x+1j*y: c for y, r in enumerate(open(0)) for x, c in enumerate(r.strip())} +X, Y = 101, 103 +nums = [list(map(int, re.findall(r"-?\d+", line))) for line in open(0)] -d4 = [1, 1j, -1, -1j] -d8 = d4 + [1+1j, 1-1j, -1+1j, -1-1j] -d4half = [i/2 for i in d4] -d8half = [i/2 for i in d8] -def adjacent(coord, dirs=d4): - return [coord + d for d in dirs] - - - - -X = 101 -Y = 103 -# X = 11 -# Y = 7 -maps = [] -for line in open(0): - x, y, vx, vy = map(int, re.findall(r"-?\d+", line)) - maps.append((x, y, vx, vy)) -8 -70 -284 - -seen = set() - -for i in range(0, X * Y, 1): - counts = {} +for i in range(X * Y): quadrant = [0, 0, 0, 0] - nines = [0] * 9 - rows = Counter() - for x, y, vx, vy in maps: + picture = [" "] * (X * Y) + for x, y, vx, vy in nums: nx = (x + vx * i) % X ny = (y + vy * i) % Y - if (nx, ny) not in counts: - counts[(nx, ny)] = 0 - counts[(nx, ny)] += 1 - rows[ny] += 1 - # print(x, y, nx, ny) - # print(nx, (nx >= 55) + (ny >= 56) * 2) - # print(X // 2, Y // 2) - if nx != X // 2 and ny != Y // 2: - q = (nx > X//2) + (ny > Y//2) * 2 - #print(q) - quadrant[q] += 1 - n = (nx // (X//3+1)) + (ny // (Y//3+1)) * 3 - # print(n) - nines[n] += 1 - seen.add((tuple(sorted(quadrant)), i)) + picture[ny * X + nx] = "#" + if nx != X//2 and ny != Y//2: + quadrant[(nx > X//2) + (ny > Y//2) * 2] += 1 + if i == 100: + print(quadrant[0] * quadrant[1] * quadrant[2] * quadrant[3]) - # key = tuple(counts.items()) - # if key in seen: - # break - # seen.add(key) - - s = quadrant[0] * quadrant[1] * quadrant[2] * quadrant[3] - # if any(q <= 10 for q in nines): - if rows[40] > 30: - for yy in range(Y): - print(end=str(yy)) - for xx in range(X): - print(end="#" if (xx, yy) in counts else " ") - # print(end=str(counts.get((xx, yy), " "))) - print() - - print(quadrant) + if ("#" * 20) in ''.join(picture): print(i) - print() - # time.sleep(0.1) - - # print(quadrant) - -# print(sorted(seen, reverse=True)) - -print(quadrant) - -print(s1, s2, sep="\n") + break From 1a13b02250234e6077c4f9587719a26516e18f0f Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 15 Dec 2024 07:57:00 +0200 Subject: [PATCH 191/225] Add day 15 --- .aoc_tiles/tiles/2024/15.png | Bin 0 -> 8483 bytes 2024/15/15.py | 106 +++++++++++++++++++++++++++++++++++ README.md | 7 ++- 3 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2024/15.png create mode 100644 2024/15/15.py diff --git a/.aoc_tiles/tiles/2024/15.png b/.aoc_tiles/tiles/2024/15.png new file mode 100644 index 0000000000000000000000000000000000000000..c54e5ad5ad5160924dd9b3de8b9566042c6db8d3 GIT binary patch literal 8483 zcmY*fWn5Ij+CPBQA|X=J64JFGNFyy>3&_IKAT8Y?uz;kLNSBE0(kWfi2m&sh(yY=U z{qDW@)BE9^^JRWBXJ(#xo`1}H9W51N5G@D*0OD7wih7vuAm*_lz{b2aHg-$_fO+qg z;!6X+oWExF7LQft8P6O?JTiFpapPUy4ulCsE-Mi5r4g~EjchW1@L*$Gfs>KH&39F1clo6e|6H&j_DNr@DiIzoV9{Oh$AqCSVC77vb}y-Lc3AMxZ!zUahF;WqVL}n;+E1V0#q0BH zi$LUhKZJwe;O6SPQ0mE!po#5hzq#vH<87lR0O0-c=0Jlqo|x9sR+(@8m;^Qs0Q8G5 zD2M0fxw8IEa5**l_f+=1eHYi+44eB!2z)!<@` z9%6eOxE%W|(Ibm|!$YiY-mlH#Lm6m?g6eyKbo=SOVSMz!cUAL&o4t>Ze9DWn?dPiV zGSCNB?V-I+_K%59Em8OiHR&tje%dUlP(jXnGe*j_-gi^>@$OSxytn>1OD-7$@ej|d zi*;2o1726ja5<4P3;zkV*LxAp0O**`bXcvdL>+^_ekNL=mUx|=uzZ>=U#JMP5-x*M zMZx{td1=yqx17gumAGeen?;aVzAV?vENWJGb5RuGUTyXJ?P{xcswD&qpipCHjD|{e zlWKKaj?n>pb;Uxa)3chKe{e`z*^hmqfc!3l8Y>i!bE2(Hb}ploGK+m8U0|zKx!5EzNDbG*4^rVxyYWH3x*Q znxUCQgv)gyZ^~jG&;zUP?l^!PxBe+ytgg-dr0RlkL+apuawJP22<+=#e<4OaxhA#c zrKa{&tRW`Oj6(FFTqo&07C&YcFUPZWzpCHoG4-IyJ3R%pI6q?5Lab=Y9 z)fqgS@_EI|O($sqnb`Guuc14<>COwe8|9T~P8aCmSK*{^HKVzEJ09Eo2)1X$Q1L?s zO4YtCPixNh((HJny7WOaLq}?a0l6APE?=AqSWP$z8LT2bab&s85wVBR-F*j(AM;?{ zn+|Jmzq;KotVE4A8%nm2!hv^DZIJ15~Y%yZ!Ui)#`9|_URimQeh+~S#8*Ez(w559`Cw|iVopJ} zdNoEP*^{Hyk*iB+-m@lW1#@{NEzn#IduF6~Em@u?HH@0RnM!@7gZH%qRC25swA`jz zpS9l)K*ayv!$&LV4%tFZh)!q1hZ{P8%hu@9jj6^PWE@Ssq*r z0l(LJT9GdlaF9hfa=xsnwG0Vx-e?0Q4NPzbGlc6&qpnacgbETqL^2C`lj`{VOI zCU3yJ(U@PGZIT+T!U6m|c)g});+600G)E(HvKsl5lTu5PQrQPm2!TWI+GFpAh+`4o z7#oki`CIp+x#zj^uM}EWk)4w^AX|+v;o7fxc?zsZgD-FP$kN>X#imAn=Rsmhq=%7C zYXZyO4ojy6T-~hB#_>@;-E%5RXD;CuzEFdwnhZS+_`jF487O``-~;?kh|K}?xQrO^aSWA-@fwop6pBorpl)qLo_SKC6!l)R{?Jo-`dEuksD6+h?OQMpKzC%PRw)F+D&|DlA@;iHB3k9NMk6}^*H9j zR8{hyF9}%aPsG%oI5JD3=`Js3U=5Q2;fkNA_aCh~5}OTIIJ!=qfr=kRXhNQ?Hwcw7 z7&GxujNF}}gU@Da-h>Ve_mgaV6_M@H=S^40W>Xx@T*GKU9>KY<8huq)WYkZ3>BaH8vYK_y}yM(gAeylC)_lTSyv&? ztfO7+XtSx|@AObfXsgj(8+)g8!n+*7aX~jNy^z18MtM8EXlECn)g@zgo&EOHUkk~^ zVz#!{DxReTfS|x4>-VYs;q}^_SgJBpq2SRNu9y6h_ZrH4^cHQDEHA$lh>2aY40Y3G zLaC#Ea(+(>4^S7LkIF1oZ8rSl2@uqs)5lHkFE)RV{6q$>A0cvThGyfRr{M`?foQSN3OiP6>O=hskQ{cS_?xP{d#>jvWXX8DWvRgg}{oJ-a_18$uB`Z9r`iL zaG>8|6TQ1R^ZYiu;Yis{dP1P>%AyP9TwT56)l!wZdEU1sljwYgbkBq=XtV9w-~u}$ z{%Bk_Fnq|MgcN26>y6yBv2S*D>{i(AonmW;~L+K;IDXefdtbo%h$77FYlAffpcf7i(ENL~I1y@6aV<%80H zLKHnqK@)NfVBD&2HGy-d<72TUQJLRQlYI}rf(jzx1M52!Da3L6R@O3;eG;?1uH_lh znP0o3s*}q5KUrV_CK3Swyr~Vxi-Ji=0wiUj4(9`l+jmfbIs~9*%+WOV{W0ASO^A+f0+qgK=6pem!Q z7$@<*_tTxNh>s060w2CO?0<2fkPXupLu!v!hmf81=$vVQU%SqlWhP8O)U=8loj^*Tg5!(8WLkf>#va8m`kVm6uQ+*F@4 zUGk$+(pkO0*MoM{hsLWs{|}*CFJ*w$qYLD(s=L4tRXX$fyV5|~glSKNiHywop>7Dn z>6vawZp-WTC+TUQrc%<(k$cxSS0+dGWGP4BGt=~EuXqvkS(TM5FzbZ+#e<>x+tR|nz@jec6IN%fI^)?D;*ONzWuJ9P|IC? zDC?QAW*gQa&jfplj_QNYCA6Zk=y?Fh&s9wurl8u=ct2mrAU%QZ5MP{m$yDsk_QCG# zLwnnk1Te?w$=|YKz8`NE8!NMSZ94~SSx0v5Er+}_n_vFqDi_cy-I%Gj+I}hjYl#@p zk<}|Ay_z-34K((!>A!u{MV$tPS6MN@IZhph)Iu#TjMYl8BIYfiolkDs z0%$96Aaw!Gu$`~P)K=HuRE&emDhj*u+M14)^vrw~$)a|qr0ZO^!Vcw`PDM;qvQWOq z-tmlHAVQ!^#TXzmssqcTe6acxS9*x?ZU-3EnE1sK=V(*zy*WgNH8z6IMHRYNW)eQn7P_b9tBkyxtN4 z=gOxIQwAk}uB~CMLWm1BZM`C#(ODt8g|1W(^`?RxGc-=^Cx%w?v`4C3=UxQH<46C+ z)TL{OJ~!W54DA@tP!Ve+Qf^)FTxgMzOn5R8?pWpAlf4FCZMP!y66z0oKhH*jrrLTm7h ze72%o?qR==bN^}0zO1RghX{Wu5()wep8A__usu3#9ha3M&$wPgKW*RY>kk`e)#T=l zfo$)+5s+hB_2rF&J!c0ZntTPnrf2(wlf3ggSg2v@eAG?->W#sV^LPe%cQdD%_1{sV zAs3@$O&upif~yGZFFDrT<+D|h!QIpFwT2(L7qtdjU9=797cdQl5D0fSM<`o?-@QL4 z<5l%F+`DU1TC9*%7UAzVlS+*f@eoP)GGvjmZwMALcNG)M)Jcn27 zlq=U}zU%s&B4bKXnLNY%FsW2BtWBBvqXhCOfR~^Ow-vW#js#&CLg=5s!<$gvPelb- zoc)qp%B;6|A&uz+CFGx>_WTS!IlilA>Jdo@v#`HZrCw67B0m4-P-3<>7BhPp`U4*z;@#o zL2epBzwHNW#m;2sPjE(%5aWL9^dU;Ie8a^clSli#uOF>b@4F204Y%Zpf^b~!^7V^N9%G|naZ5` z=MD;|f1-7cha+jSZfbJJ!;CfRXo^7&R$q-boNC2R{Wk!@P?1}t=PC)F2jT5dkYgpK z@^~4ePD?uCI1=Y;*s#+%KMqSOr408cj>g&V>;cmW_ntw)qeP?<+x^#L9EkNzC0J=>)C>b=b_ znX5Yy8+rwxi$HSPu{CUF;L=$TYrSUrvVI~HA&Vw7qOX-9rPhzXD z&W7Ira{f5l3rEtzwEinCL+1gCnsnRMNCW_o#01MZ4^pbRyu1qNj(ecYLp|LH zdG1{_Rv`b#a1*o{vAB&t=>+}f&Bwie^W)9NW~%aemJx@BY(5&9f6>vU1LJTK77HYj z7PfxCE(qhPT4IWRWO)`~;@+g_v0-Rv#=`_uyH9^gs2k|=@4uA1J@{=M?B|WAgW3h* z(Y@PmqAnTyw~3-1q@{r&daBI09&7?=mO`2J#OJh1BB zz*@_L0EWJozwRqysl5s?#=iP|&&qX@-JlRLDP0x{tF_66C7Ym;lh&q&=J&z9M5 z8E}$)7citu#h9;h=4Wt`d^Xjz;~}Il*~lJ%a7K(>AqFPj0Z0%wTv6^krbFwacsieI z=;Kgn-YeU63VWxzEGikli7{^Qe5+_<660x!OiMsd{)I>up-1Fdt!qJR7wKT&^-s+(( zcc=f_O%1LvMeL4$`p~Gx;4a^qaIiR;rfn9>01LR`e}@^B?3eX!R~zXG`tE3*Ay70} ztpJ_rQrB@KdXMV0js3*6$Mf$tZB$-67COjJtPus2IkyjT4$aOu=+Vl^^Yg z5=^_W3|WfGe3wU0WMBiMA@xA4w^O$44@0R)0GegHigvxHy*Rp2O%s!_kC8`D5iviEj%?V|v`? zIRJ1Zt2#IMKKbqmZj+SV#({6G?id)~fTZeaZ4_SK&bqaP)gx?a?5}(4AUx(}5OvZ;YxWZB{;su(2Iy_a z)i+*bQKmpjWT59V{edTY#lv%V)!3d%= zkk>VPRhEOXn{gliZDS%9Hly~_vwBg+XoayAEZ`vmrq!&AWuT5;(9MILy5r)&+9=18 zj-%x5dS>0Z{q15FB9pbU?eJ=7Humi9mesZSOV2l62{=gI7QA(=M#nf{ow=A9>8X>L z1|s&Ay@5!G$;#d5&z9w-!7KJAN&7)dYQtO`!NIQe(&>tka=1W> zsk*>DPYpryckmwwyoWhQrHAHIyF4K0LUg}+R*GLG+h8xua!bz|%y4T~Zst5%!q@IYMo!VTD z|I5@a8}>44dT}DwL77$fE1LwIAQR&K{S$ab5d?JYC_&?}pLVCJu+K}5Q&BMRM zH1EBCV6;&ijn3-<+Vh6sJ}2<<-O-7Rfuj>GOf)qh^a8x`JKVvq#?lIQ6IR_rgV#n> z)TaAnzO|)6$(RA}4E2~hWLdKxWa)P}mUP;YW*V>di^kIX@Rw2PL`#FXOMJA;H!*w1 z>bQQOLXgH_68@JcxBQ2)+m+_K7kzUavIh~{yIE1xxU%+0h(2~uPWgF7_Cw&`Y1PIRHeNlA-S z&vG<3=}wUnCDpzX88T;3G6vO|x;mP8;0m4j*n81P-(jRTGyRlIA)n4)dZh6ZRZ;pl zj^M$fo4fe>4a48Lc=pFZVz=a-m#Wwa@*s~H%i4v5GkC%@25DhRRervf7T<5zJW0IF zZBxCYo?L3GU~fXnw6*`a1JQ1_h?8@VcV355OWor;??a2IK)^IXzvthQ(s)Qd<4?8@P)suuWKZAs#^F-UFI*02SS}1_W}M;7GwMr5FlG; zzCQ?@-R)hNn}D6+AR zRhHLgE%kRslhm~HUX;}RS(;WU62t%Q{3=U)g5-;8X6aUxvq8bkE5-b>2KA{cx3tO zJRIUfJzg%g5medRCQuSf3C85_kBq9bKVI{G0Hq4Xcvr~_ujiL#bz;U5^8RPJlzVrV zDKQu!xt;`mpY<3c(cNAnpQz%3L71T=5uTS!$9oPrB}o4&q^1W(v8lxVcsn|O{G^f9 zjV?>|fUo4oV#*U&!?UA*K~xdPLq*kJND4daD3v22`qR{w^)f9T301E3iJ+en9E+Y> z-#CEP!N0s4%Os+1N!1i;oB5=1cJLOby3%Ejf6LIC;^{WgmJ$WOodf&MyWA4kVohuF zO1tpoVzE5^yYdi-_Crd@%P^Mmo-^rugUMx7!oXTcXy{%hJ{+S#tDK8bGdB6Y$E3IC z?!ixs&#aFw=l#}zih$!~Re{cASmJO2nBvY$7+sn@zF9Oj?1GlhTbd@|tiAkE8s)#Q zV)dpB1RP%H@@{l;PG+n-I`NZ_3@V1_;^waKRXF|aiK&*@*h6wuZQ<%Al)sSHLODYz z@}MZ}{O@22jG_B#gV7hOk@w2!Wu@%Os6?htLHA6iNhFGN3-=<+R}cw0&B*s9O@#Bs z2?_tQjxW7!#rHaOoEM~kC>b)08aw%gV1U;@;CFBKf&^nlhV4+OVvLmM-Yn!-': 1, 'v':1j, '<':-1, '^':-1j} +# d8 = d4 + [1+1j, 1-1j, -1+1j, -1-1j] +# d4half = [i/2 for i in d4] +# d8half = [i/2 for i in d8] +def adjacent(coord, dirs=d4): + return [coord + d for d in dirs] + + +field, moves = open(0).read().split("\n\n") + + +if True: + for r, r2 in [("#", "##"), ("O", "[]"), (".", ".."), ("@", "@.")]: + field = field.replace(r, r2) + +coords = {x+1j*y: c for y, r in enumerate(field.strip().splitlines()) for x, c in enumerate(r.strip())} + +# field = [list(l) for l in field.strip().split("\n")] +s = 0 +for c, char in coords.items(): + if char == "@": + s = c + coords[c] = "." + +M = max(map(lambda c: c.real, coords)) +for c, char in coords.items(): + print(end=char) + if c.real == M: + print() + + +def collect(s, d): + if coords[s+d] in "[]": + dn = (1 if coords[s+d] == '[' else -1) + d + base = {s+d: coords[s+d], s+dn: coords[s+dn]} | collect(s+d, d) + if d not in [1, -1]: + base |= collect(s+dn, d) + return base + return {} + +for m in moves.strip(): + if m not in d4: + continue + # print(s) + d = d4[m] + n = s + d + i = 1 + + + ok = True + if coords[s + d] in '[]': + boxes = collect(s, d) + # print(boxes) + for x, char in boxes.items(): + if coords[x+d] == '#': + ok = False + break + if ok: + for x, char in boxes.items(): + coords[x] = '.' + for x, char in boxes.items(): + coords[x+d] = char + s = n + elif coords[s+d] == '.': + s = n + + # while coords[s + d * i] in '[]': + # i += 1 + # if coords[s+d*i] == '.': + # coords[s+d*i] = 'O' + # coords[n] = '.' + # s = n + + # print("\033[0;0H") + # for c, char in coords.items(): + # print(end=char if c != s else '@') + # if c.real == M: + # print() + # import time + # time.sleep(0.02) + +for c, char in coords.items(): + if char == '[': + s1 += c.imag * 100 + c.real + + +# for line in open(0): + # n = [int(a) for a in line.split()] + # re.findall(r"\d+", line) + + +print(int(s1), s2, sep="\n") +# not 6186250.0 diff --git a/README.md b/README.md index 8899000..6b5f5c7 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@

    - Advent of Code - 238/478 ⭐ + Advent of Code - 240/480 ⭐

    - 2024 - 28 ⭐ - Python + 2024 - 30 ⭐ - Python

    @@ -47,6 +47,9 @@ + + +

    2023 - 50 ⭐ - Python

    From 4dff89ad99c593d50b60d425cf0ced166d9ad2ad Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 15 Dec 2024 08:31:17 +0200 Subject: [PATCH 192/225] Add day 15 --- 2024/15/15.py | 136 +++++++++++++------------------------------------- 1 file changed, 34 insertions(+), 102 deletions(-) diff --git a/2024/15/15.py b/2024/15/15.py index 018bd20..a40df04 100644 --- a/2024/15/15.py +++ b/2024/15/15.py @@ -1,106 +1,38 @@ -from collections import * -from itertools import * -from functools import * -# import numpy as np -# import networkx as nx -# import z3 -import re -import sys -sys.setrecursionlimit(1000000) - -s1 = s2 = 0 - -# d4 = [1, 1j, -1, -1j] -d4 = {'>': 1, 'v':1j, '<':-1, '^':-1j} -# d8 = d4 + [1+1j, 1-1j, -1+1j, -1-1j] -# d4half = [i/2 for i in d4] -# d8half = [i/2 for i in d8] -def adjacent(coord, dirs=d4): - return [coord + d for d in dirs] - - -field, moves = open(0).read().split("\n\n") - - -if True: - for r, r2 in [("#", "##"), ("O", "[]"), (".", ".."), ("@", "@.")]: - field = field.replace(r, r2) - -coords = {x+1j*y: c for y, r in enumerate(field.strip().splitlines()) for x, c in enumerate(r.strip())} - -# field = [list(l) for l in field.strip().split("\n")] -s = 0 -for c, char in coords.items(): - if char == "@": - s = c - coords[c] = "." - -M = max(map(lambda c: c.real, coords)) -for c, char in coords.items(): - print(end=char) - if c.real == M: - print() - - -def collect(s, d): - if coords[s+d] in "[]": - dn = (1 if coords[s+d] == '[' else -1) + d - base = {s+d: coords[s+d], s+dn: coords[s+dn]} | collect(s+d, d) - if d not in [1, -1]: - base |= collect(s+dn, d) - return base - return {} - -for m in moves.strip(): - if m not in d4: - continue - # print(s) - d = d4[m] - n = s + d - i = 1 - - - ok = True - if coords[s + d] in '[]': - boxes = collect(s, d) - # print(boxes) - for x, char in boxes.items(): - if coords[x+d] == '#': - ok = False - break - if ok: - for x, char in boxes.items(): - coords[x] = '.' +def solve(field, gps=0): + coords = {x+1j*y: c for y, r in enumerate(field.split("\n")) for x, c in enumerate(r)} + + s = [c for c, char in coords.items() if char == "@"][0] + coords[s] = "." + + def collect(c): + if coords[c+d] not in "]O[": + return {} + dn = d + ("]O[".index(coords[c+d]) - 1 if d.imag else 0) + return {c+d: coords[c+d], c+dn: coords[c+dn]} \ + | collect(c+d) \ + | collect(c+dn) + + for m in moves.replace("\n", ""): + d = {'>': 1, 'v': 1j, '<': -1, '^': -1j}[m] + + if coords[s + d] != '#': + boxes = collect(s) for x, char in boxes.items(): - coords[x+d] = char - s = n - elif coords[s+d] == '.': - s = n - - # while coords[s + d * i] in '[]': - # i += 1 - # if coords[s+d*i] == '.': - # coords[s+d*i] = 'O' - # coords[n] = '.' - # s = n + if coords[x+d] == '#': + break + else: + for x, char in boxes.items(): + coords[x] = '.' + for x, char in boxes.items(): + coords[x+d] = char + s = s+d + + print(int(sum(x.imag * 100 + x.real for x, c in coords.items() if c in '[O'))) - # print("\033[0;0H") - # for c, char in coords.items(): - # print(end=char if c != s else '@') - # if c.real == M: - # print() - # import time - # time.sleep(0.02) -for c, char in coords.items(): - if char == '[': - s1 += c.imag * 100 + c.real - - -# for line in open(0): - # n = [int(a) for a in line.split()] - # re.findall(r"\d+", line) - +field, moves = open(0).read().split("\n\n") -print(int(s1), s2, sep="\n") -# not 6186250.0 +solve(field) +for r1, r2 in [("#", "##"), ("O", "[]"), (".", ".."), ("@", "@.")]: + field = field.replace(r1, r2) +solve(field) From fef6f270f03c5c15d9e4b8ec2811145307b410aa Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 15 Dec 2024 15:52:35 +0200 Subject: [PATCH 193/225] Add day 15 --- 2024/15/15.py | 44 +++++++++++++++++++------------------------- 1 file changed, 19 insertions(+), 25 deletions(-) diff --git a/2024/15/15.py b/2024/15/15.py index a40df04..48eb599 100644 --- a/2024/15/15.py +++ b/2024/15/15.py @@ -1,34 +1,28 @@ -def solve(field, gps=0): +def solve(field): coords = {x+1j*y: c for y, r in enumerate(field.split("\n")) for x, c in enumerate(r)} - s = [c for c, char in coords.items() if char == "@"][0] - coords[s] = "." + pos = [c for c in coords if coords[c] == "@"][0] + coords[pos] = "." - def collect(c): - if coords[c+d] not in "]O[": + def find_boxes(c): + if coords[c] not in "]O[": return {} - dn = d + ("]O[".index(coords[c+d]) - 1 if d.imag else 0) - return {c+d: coords[c+d], c+dn: coords[c+dn]} \ - | collect(c+d) \ - | collect(c+dn) + c_adj = c + ("]O[".index(coords[c]) - 1 if dir.imag else 0) + return {c: coords[c], c_adj: coords[c_adj]} \ + | find_boxes(c+dir) \ + | find_boxes(c_adj+dir) - for m in moves.replace("\n", ""): - d = {'>': 1, 'v': 1j, '<': -1, '^': -1j}[m] - - if coords[s + d] != '#': - boxes = collect(s) - for x, char in boxes.items(): - if coords[x+d] == '#': - break - else: - for x, char in boxes.items(): - coords[x] = '.' - for x, char in boxes.items(): - coords[x+d] = char - s = s+d - - print(int(sum(x.imag * 100 + x.real for x, c in coords.items() if c in '[O'))) + for move in moves.replace("\n", ""): + dir = {'>': 1, 'v': 1j, '<': -1, '^': -1j}[move] + if coords[pos+dir] == '#': continue + boxes = find_boxes(pos+dir) + if all(coords[box+dir] != "#" for box in boxes): + coords |= {box: '.' for box in boxes} + coords |= {box+dir: boxes[box] for box in boxes} + pos += dir + + print(int(sum(c.imag*100 + c.real for c in coords if coords[c] in '[O'))) field, moves = open(0).read().split("\n\n") From 4aaebfdf9b42972c98eb9ffedcc54135300964f8 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Mon, 16 Dec 2024 14:45:33 +0200 Subject: [PATCH 194/225] Add day 16 --- .aoc_tiles/tiles/2024/16.png | Bin 0 -> 9794 bytes 2024/16/16.py | 122 +++++++++++++++++++++++++++++++++++ README.md | 7 +- 3 files changed, 127 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2024/16.png create mode 100644 2024/16/16.py diff --git a/.aoc_tiles/tiles/2024/16.png b/.aoc_tiles/tiles/2024/16.png new file mode 100644 index 0000000000000000000000000000000000000000..4b9ccca698d7c10d0b0042630eb4f4f438c9da5b GIT binary patch literal 9794 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 QY;PDK3sRD-kT4ARAKm8|vj6}9 literal 0 HcmV?d00001 diff --git a/2024/16/16.py b/2024/16/16.py new file mode 100644 index 0000000..baeef02 --- /dev/null +++ b/2024/16/16.py @@ -0,0 +1,122 @@ +from collections import * +from itertools import * +from queue import * +from functools import * +import networkx as nx +import re +import sys +sys.setrecursionlimit(1000000) + +s1 = s2 = 0 +coords = {x+1j*y: c for y, r in enumerate(open(0)) for x, c in enumerate(r.strip())} + +d4 = [1, 1j, -1, -1j] +d8 = [1+1j, 1-1j, -1+1j, -1-1j] +d4half = [i/2 for i in d4] +d8half = [i/2 for i in d8] +def adjacent(coord, dirs=d4): + return [coord + d for d in dirs] + +G = nx.DiGraph() + +S = [c for c in coords if coords[c] == 'S'][0] +E = [c for c in coords if coords[c] == 'E'][0] + +q = Queue() +# q.put((S, 1)) +# for d in d4: +# q.put((S, d)) +# if coords[S+d] != '#': +# G.add_edge(S, S+d, weight=1 if d==1 else 1002) + +for c in coords: + if coords[c] == '#': continue + for d in d4: + G.add_edge((c, d), c, weight=0) + G.add_edge(c, (c, d), weight=1000) + if coords[c+d] != '#': + G.add_edge((c, d), (c+d, d), weight=1) + # for D in d4: + # G.add_edge((c, d), (c, D), weight=1000 * (d != D)) + + + +# while not q.empty(): +# c, dir = q.get() +# print(c, dir) +# for d in d8 + ([dir] if c != S else d4): +# if coords[c+d] != '#' and (c, c+d) not in G.edges: +# G.add_edge(c, c+d, weight=1 if dir==d else 1002) +# q.put((c+d, (d if d==dir else d-dir))) + +all_paths = list(nx.all_shortest_paths(G, (S, 1), E, "weight")) +path = all_paths[0] +print(sum(G.edges[edge]["weight"] for edge in zip(path, path[1:]))) + +print("shortest path") +flat = sum(all_paths, []) +nodes = {(p[0] if isinstance(p, tuple) else p) for p in flat} +# print(len(nx.shortest_path(G, (S, 1), E, "weight"))) +print(len(nodes)) +exit(0) + + + +best = 1e9 +best_paths = {} + +K = 0 + +def tie(curr, num=[0]): + tie[0] += 1 + return tie[0] - 1e9 * (curr in best_paths) + +for i in range(2): + + queue = PriorityQueue() + queue.put((0, 0, 0, 0, S.real, S.imag, (K:=K+1), {(S,1):0})) + + visited = {S} + + + while queue.not_empty: + cost, forward, turns, dir, real, imag, _, path = queue.get() + dir = d4[dir] + curr = real + 1j * imag + if coords[curr] == 'E': + # visited.remove(curr) + best = cost + best_paths |= path + print(len(best_paths)) + print(cost) + + if cost > best: + if i == 1: exit(0) + else: break + for d in d4: + n = curr+d + is_f = dir==d + forward2 = forward + 1 + turns2 = turns + (not is_f) + cost2 = forward2 + turns2 * 1000 + path2 = path | {(n, d): cost2} + if best_paths.get((n, d)) == cost2: + print(n, cost2, "!=", best_paths.get((n, d))) + best_paths |= path2 + print(len(best_paths)) + if coords[n] != '#' and (n not in visited or i == 1 and (n, d) not in path): + visited.add(n) + queue.put((cost2, forward2, turns2, d4.index(d), n.real, n.imag, (K:=K+1), path2)) + + + + + + + +# for line in open(0): +# n = [int(a) for a in line.split()] + # re.findall(r"\d+", line) + + +print(s1, s2, sep="\n") diff --git a/README.md b/README.md index 6b5f5c7..47ec2f5 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@

    - Advent of Code - 240/480 ⭐ + Advent of Code - 242/482 ⭐

    - 2024 - 30 ⭐ - Python + 2024 - 32 ⭐ - Python

    @@ -50,6 +50,9 @@ + + +

    2023 - 50 ⭐ - Python

    From 7554f595c80c6d7f47d8ad997c64689b14c6e972 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Mon, 16 Dec 2024 14:50:33 +0200 Subject: [PATCH 195/225] Add day 16 --- 2024/16/16.py | 105 ++------------------------------------------------ 1 file changed, 3 insertions(+), 102 deletions(-) diff --git a/2024/16/16.py b/2024/16/16.py index baeef02..81c8bc6 100644 --- a/2024/16/16.py +++ b/2024/16/16.py @@ -1,122 +1,23 @@ -from collections import * -from itertools import * -from queue import * -from functools import * import networkx as nx -import re -import sys -sys.setrecursionlimit(1000000) - -s1 = s2 = 0 coords = {x+1j*y: c for y, r in enumerate(open(0)) for x, c in enumerate(r.strip())} -d4 = [1, 1j, -1, -1j] -d8 = [1+1j, 1-1j, -1+1j, -1-1j] -d4half = [i/2 for i in d4] -d8half = [i/2 for i in d8] -def adjacent(coord, dirs=d4): - return [coord + d for d in dirs] - G = nx.DiGraph() -S = [c for c in coords if coords[c] == 'S'][0] -E = [c for c in coords if coords[c] == 'E'][0] - -q = Queue() -# q.put((S, 1)) -# for d in d4: -# q.put((S, d)) -# if coords[S+d] != '#': -# G.add_edge(S, S+d, weight=1 if d==1 else 1002) - for c in coords: if coords[c] == '#': continue - for d in d4: + for d in [1, 1j, -1, -1j]: G.add_edge((c, d), c, weight=0) G.add_edge(c, (c, d), weight=1000) if coords[c+d] != '#': G.add_edge((c, d), (c+d, d), weight=1) - # for D in d4: - # G.add_edge((c, d), (c, D), weight=1000 * (d != D)) - - -# while not q.empty(): -# c, dir = q.get() -# print(c, dir) -# for d in d8 + ([dir] if c != S else d4): -# if coords[c+d] != '#' and (c, c+d) not in G.edges: -# G.add_edge(c, c+d, weight=1 if dir==d else 1002) -# q.put((c+d, (d if d==dir else d-dir))) +S = [c for c in coords if coords[c] == 'S'][0] +E = [c for c in coords if coords[c] == 'E'][0] all_paths = list(nx.all_shortest_paths(G, (S, 1), E, "weight")) path = all_paths[0] print(sum(G.edges[edge]["weight"] for edge in zip(path, path[1:]))) -print("shortest path") flat = sum(all_paths, []) nodes = {(p[0] if isinstance(p, tuple) else p) for p in flat} -# print(len(nx.shortest_path(G, (S, 1), E, "weight"))) print(len(nodes)) -exit(0) - - - -best = 1e9 -best_paths = {} - -K = 0 - -def tie(curr, num=[0]): - tie[0] += 1 - return tie[0] - 1e9 * (curr in best_paths) - -for i in range(2): - - queue = PriorityQueue() - queue.put((0, 0, 0, 0, S.real, S.imag, (K:=K+1), {(S,1):0})) - - visited = {S} - - - while queue.not_empty: - cost, forward, turns, dir, real, imag, _, path = queue.get() - dir = d4[dir] - curr = real + 1j * imag - if coords[curr] == 'E': - # visited.remove(curr) - best = cost - best_paths |= path - print(len(best_paths)) - print(cost) - - if cost > best: - if i == 1: exit(0) - else: break - for d in d4: - n = curr+d - is_f = dir==d - forward2 = forward + 1 - turns2 = turns + (not is_f) - cost2 = forward2 + turns2 * 1000 - path2 = path | {(n, d): cost2} - if best_paths.get((n, d)) == cost2: - print(n, cost2, "!=", best_paths.get((n, d))) - best_paths |= path2 - print(len(best_paths)) - if coords[n] != '#' and (n not in visited or i == 1 and (n, d) not in path): - visited.add(n) - queue.put((cost2, forward2, turns2, d4.index(d), n.real, n.imag, (K:=K+1), path2)) - - - - - - - -# for line in open(0): -# n = [int(a) for a in line.split()] - # re.findall(r"\d+", line) - - -print(s1, s2, sep="\n") From fba11fadb49161f31a014f46a224ac7df8fdbd69 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Mon, 16 Dec 2024 15:15:20 +0200 Subject: [PATCH 196/225] Add day 16 --- 2024/16/16.py | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/2024/16/16.py b/2024/16/16.py index 81c8bc6..a8184c0 100644 --- a/2024/16/16.py +++ b/2024/16/16.py @@ -2,22 +2,16 @@ coords = {x+1j*y: c for y, r in enumerate(open(0)) for x, c in enumerate(r.strip())} G = nx.DiGraph() - for c in coords: - if coords[c] == '#': continue for d in [1, 1j, -1, -1j]: - G.add_edge((c, d), c, weight=0) - G.add_edge(c, (c, d), weight=1000) - if coords[c+d] != '#': + G.add_edge((c, d), (c, 0), weight=0) + G.add_edge((c, 0), (c, d), weight=1000) + if coords[c] != '#' != coords[c+d]: G.add_edge((c, d), (c+d, d), weight=1) -S = [c for c in coords if coords[c] == 'S'][0] -E = [c for c in coords if coords[c] == 'E'][0] +E, S = [c for c in coords if coords[c] in 'SE'] -all_paths = list(nx.all_shortest_paths(G, (S, 1), E, "weight")) -path = all_paths[0] -print(sum(G.edges[edge]["weight"] for edge in zip(path, path[1:]))) +paths = list(nx.all_shortest_paths(G, (S, 1), (E, 0), "weight")) -flat = sum(all_paths, []) -nodes = {(p[0] if isinstance(p, tuple) else p) for p in flat} -print(len(nodes)) +print(sum(G.edges[e]["weight"] for e in zip(paths[0], paths[0][1:]))) +print(len({p[0] for p in sum(paths, [])})) From 41896d948433e7c0d39cfaf333ecd92fcd69a992 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Tue, 17 Dec 2024 08:18:17 +0200 Subject: [PATCH 197/225] Add day 17 --- .aoc_tiles/tiles/2024/17.png | Bin 0 -> 8546 bytes 2024/17/17.py | 137 +++++++++++++++++++++++++++++++++++ README.md | 7 +- 3 files changed, 142 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2024/17.png create mode 100644 2024/17/17.py diff --git a/.aoc_tiles/tiles/2024/17.png b/.aoc_tiles/tiles/2024/17.png new file mode 100644 index 0000000000000000000000000000000000000000..4e38d2ed603b2532ae73351a76be8608bfe7b4b5 GIT binary patch literal 8546 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 R;@=72qr9qIm5f>F{{eaW&UpX; literal 0 HcmV?d00001 diff --git a/2024/17/17.py b/2024/17/17.py new file mode 100644 index 0000000..9468272 --- /dev/null +++ b/2024/17/17.py @@ -0,0 +1,137 @@ +from collections import * +from itertools import * +from functools import * +from operator import * +# import numpy as np +import networkx as nx +# import z3 +import re +import sys +sys.setrecursionlimit(1000000) + +s1 = s2 = 0 +# coords = {x+1j*y: c for y, r in enumerate(open(0)) for x, c in enumerate(r.strip())} + +# d4 = [1, 1j, -1, -1j] +# d8 = d4 + [1+1j, 1-1j, -1+1j, -1-1j] +# d4half = [i/2 for i in d4] +# d8half = [i/2 for i in d8] +# def adjacent(coord, dirs=d4): +# return [coord + d for d in dirs] + + + + +# for line in open(0): +# n = [int(a) for a in line.split()] +a, b, c, *nums = [int(a) for a in re.findall(r"\d+", open(0).read())] + + +def solve(A): + init = A + solution = [] + B = C = 0 + def combo(n): + return {4:A, 5:B, 6:C}.get(n, n) + inst = 0 + while inst < len(nums): + op = nums[inst] + num = nums[inst+1] + # print(op, num, f"{A=} {B=} {C=}") + match op: + case 0: + A = A // 2**combo(num) + case 1: + B ^= num + case 2: + B = combo(num) % 8 + case 3: + if A != 0: + inst = num + continue + case 4: + B = B ^ C + case 5: + val = combo(num) % 8 + solution.append(val) + if val != nums[len(solution)-1]: + return solution + # print(combo(num) % 8, end=",") + case 6: + B = A // 2**combo(num) + case 7: + C = A // 2**combo(num) + inst += 2 + if solution == nums: + print(nums) + print(solution) + print(init) + exit(0) + return solution + +lo = 2**(3*15) +lo = 37221200000000 + # 37221261688308 +hi = 37221265882612-1 + +for i in range(lo, hi): + # solve(i) + lin = solve(i) + # print(i, lin) + +print(nums) +# print(solve(117440)) +print(lo, hi) +# 8 64 512 4096 +# 3 6 9 +# lo = 0 +# hi = 2**100 +import random +from math import * + +mi, ma = 1e999, 0 +while True: + n= random.randint(lo, hi) + s = solve(n) + # print(f"{log2(n)} -> {len(s)}") + # assert len(s) == len(nums), f"{log2(n)}" + if s[-12:] == nums[-12:]: + mi = min(mi, n) + ma = max(ma, n) + print(log2(n), n, s, mi, ma) + +def to_num(curr): + return ''.join(map(str, reversed(curr))) + +while lo <= hi: + mid = (lo + hi) // 2 + print(mid, solve(mid)) + curr = to_num(solve(mid)) + # loo = to_num(solve(lo)) + # hii = to_num(solve(lo)) + print(curr) + num = to_num(nums) + print(num) + if len(curr) < len(num) or curr < num: + lo = mid+1 + else: + hi = mid + + +exit(0) + +l = 0 +for i in range(2**(3*15), 2**100): + # solve(i) + lin = solve(i) + # if len(lin) != l: + # print(i, l) + # l = len(lin) + # print(f"{i} -> ", lin) + +# 2,0,4,0,7,2,3,4,0 + + +# too high 37221265882612 + +# print(s1, s2, sep="\n") diff --git a/README.md b/README.md index 47ec2f5..83e39f2 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@

    - Advent of Code - 242/482 ⭐ + Advent of Code - 244/484 ⭐

    - 2024 - 32 ⭐ - Python + 2024 - 34 ⭐ - Python

    @@ -53,6 +53,9 @@ + + +

    2023 - 50 ⭐ - Python

    From 46233de40a604344ef502284e26af393a79cd21a Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Tue, 17 Dec 2024 18:12:14 +0200 Subject: [PATCH 198/225] Add day 17 --- 2024/17/17.py | 158 +++++++++----------------------------------------- 1 file changed, 26 insertions(+), 132 deletions(-) diff --git a/2024/17/17.py b/2024/17/17.py index 9468272..5c1907c 100644 --- a/2024/17/17.py +++ b/2024/17/17.py @@ -1,137 +1,31 @@ -from collections import * -from itertools import * -from functools import * -from operator import * -# import numpy as np -import networkx as nx -# import z3 import re -import sys -sys.setrecursionlimit(1000000) - -s1 = s2 = 0 -# coords = {x+1j*y: c for y, r in enumerate(open(0)) for x, c in enumerate(r.strip())} - -# d4 = [1, 1j, -1, -1j] -# d8 = d4 + [1+1j, 1-1j, -1+1j, -1-1j] -# d4half = [i/2 for i in d4] -# d8half = [i/2 for i in d8] -# def adjacent(coord, dirs=d4): -# return [coord + d for d in dirs] - - - - -# for line in open(0): -# n = [int(a) for a in line.split()] a, b, c, *nums = [int(a) for a in re.findall(r"\d+", open(0).read())] - -def solve(A): - init = A - solution = [] - B = C = 0 - def combo(n): - return {4:A, 5:B, 6:C}.get(n, n) - inst = 0 - while inst < len(nums): - op = nums[inst] - num = nums[inst+1] - # print(op, num, f"{A=} {B=} {C=}") +def compute(A=a, B=b, C=c, pointer=0): + out = [] + while pointer < len(nums): + op, num = nums[pointer:pointer+2] + combo = {4:A, 5:B, 6:C}.get(num, num) match op: - case 0: - A = A // 2**combo(num) - case 1: - B ^= num - case 2: - B = combo(num) % 8 - case 3: - if A != 0: - inst = num - continue - case 4: - B = B ^ C - case 5: - val = combo(num) % 8 - solution.append(val) - if val != nums[len(solution)-1]: - return solution - # print(combo(num) % 8, end=",") - case 6: - B = A // 2**combo(num) - case 7: - C = A // 2**combo(num) - inst += 2 - if solution == nums: - print(nums) - print(solution) - print(init) + case 0: A = A // 2**combo + case 1: B ^= num + case 2: B = combo % 8 + case 3 if A != 0: pointer = num - 2 + case 4: B ^= C + case 5: out.append(combo % 8) + case 6: B = A // 2**combo + case 7: C = A // 2**combo + pointer += 2 + return out + +print(*compute(), sep=",") + +def find_A(A, at=15): + if at == -1: + print(A) exit(0) - return solution - -lo = 2**(3*15) -lo = 37221200000000 - # 37221261688308 -hi = 37221265882612-1 - -for i in range(lo, hi): - # solve(i) - lin = solve(i) - # print(i, lin) - -print(nums) -# print(solve(117440)) -print(lo, hi) -# 8 64 512 4096 -# 3 6 9 -# lo = 0 -# hi = 2**100 -import random -from math import * - -mi, ma = 1e999, 0 -while True: - n= random.randint(lo, hi) - s = solve(n) - # print(f"{log2(n)} -> {len(s)}") - # assert len(s) == len(nums), f"{log2(n)}" - if s[-12:] == nums[-12:]: - mi = min(mi, n) - ma = max(ma, n) - print(log2(n), n, s, mi, ma) - -def to_num(curr): - return ''.join(map(str, reversed(curr))) - -while lo <= hi: - mid = (lo + hi) // 2 - print(mid, solve(mid)) - curr = to_num(solve(mid)) - # loo = to_num(solve(lo)) - # hii = to_num(solve(lo)) - print(curr) - num = to_num(nums) - print(num) - if len(curr) < len(num) or curr < num: - lo = mid+1 - else: - hi = mid - - -exit(0) - -l = 0 -for i in range(2**(3*15), 2**100): - # solve(i) - lin = solve(i) - # if len(lin) != l: - # print(i, l) - # l = len(lin) - # print(f"{i} -> ", lin) - -# 2,0,4,0,7,2,3,4,0 - - -# too high 37221265882612 - -# print(s1, s2, sep="\n") + while True: + if nums[at:] == compute(A)[at:]: + find_A(A, at-1) + A += 8**at +find_A(8**15) From 7fca9c5443bebe48b23e94aceb7fd8a01f74336d Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Wed, 18 Dec 2024 07:23:53 +0200 Subject: [PATCH 199/225] Add day 18 --- .aoc_tiles/tiles/2024/18.png | Bin 0 -> 9456 bytes 2024/17/17.py | 6 ++-- 2024/18/18.py | 59 +++++++++++++++++++++++++++++++++++ README.md | 7 +++-- 4 files changed, 67 insertions(+), 5 deletions(-) create mode 100644 .aoc_tiles/tiles/2024/18.png create mode 100644 2024/18/18.py diff --git a/.aoc_tiles/tiles/2024/18.png b/.aoc_tiles/tiles/2024/18.png new file mode 100644 index 0000000000000000000000000000000000000000..5983ae69d62258cc6810be2b9fabc3eaae71b4bd GIT binary patch literal 9456 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

    - Advent of Code - 244/484 ⭐ + Advent of Code - 246/486 ⭐

    - 2024 - 34 ⭐ - Python + 2024 - 36 ⭐ - Python

    @@ -56,6 +56,9 @@ + + +

    2023 - 50 ⭐ - Python

    From cbaf6150355fb6b27121482755ad206ad0a9a786 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Wed, 18 Dec 2024 07:50:24 +0200 Subject: [PATCH 200/225] Add day 18 --- 2024/18/18.py | 66 +++++++++++---------------------------------------- 1 file changed, 14 insertions(+), 52 deletions(-) diff --git a/2024/18/18.py b/2024/18/18.py index 82b2f5e..d2c83b4 100644 --- a/2024/18/18.py +++ b/2024/18/18.py @@ -1,59 +1,21 @@ -from collections import * -from itertools import * -from functools import * import networkx as nx -import re -import sys -sys.setrecursionlimit(1000000) -s1 = s2 = 0 - -d4 = [1, 1j, -1, -1j] -d8 = d4 + [1+1j, 1-1j, -1+1j, -1-1j] -d4half = [i/2 for i in d4] -d8half = [i/2 for i in d8] -def adjacent(coord, dirs=d4): - return [coord + d for d in dirs] - - -all_obstacles = [] - -for line in open(0): - x,y = map(int, line.split(",")) - all_obstacles.append(x+y*1j) - -for limit in range(3000, 99999999): +def solve(obstacles, S=70): G = nx.DiGraph() - try: - obstacles = all_obstacles[:limit] - S = 70 - - coords = {x+1j*y: '#' if x+1j*y in obstacles else '.' for y in range(S+1) for x in range(S+1)} - - # print(coords) - # print(coords.get(0+0j)) - # print(coords.get(S+S*1j)) - - for c in coords: - for adj in adjacent(c): - if coords[c] == '.' and coords.get(adj) == '.': - G.add_edge(c, adj) - -# for y in range(S+1): -# for x in range(S+1): -# print(end=coords.get(x+y*1j)) -# print() - - print(len(nx.shortest_path(G, 0, S+S*1j))) - except: - print(limit, obstacles[limit-1]) - exit(0) + for c in {x+1j*y for y in range(S+1) for x in range(S+1)}: + for d in [1, 1j, -1, -1j]: + if c not in obstacles and c+d not in obstacles: + G.add_edge(c, c+d) + return nx.has_path(G, 0, S+S*1j) and len(nx.shortest_path(G, 0, S+S*1j)) +obstacles = [complex(line.replace(",", "+")+"j") for line in open(0)] +print(solve(obstacles[:1024])) -# for line in open(0): -# n = [int(a) for a in line.split()] - # re.findall(r"\d+", line) - +lo, hi = 1024, len(obstacles)-1 +while lo < hi: + mid = (lo + hi) // 2 + if solve(obstacles[:mid]): lo = mid+1 + else: hi = mid-1 -# print(s1, s2, sep="\n") +print(str(obstacles[mid]).replace("+", ",")[1:-2]) From 22473dba038a89b5831de0cf52f9f9f0938ffdc4 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Wed, 18 Dec 2024 12:28:54 +0200 Subject: [PATCH 201/225] Add day 18 --- 2024/18/18.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/2024/18/18.py b/2024/18/18.py index d2c83b4..f650724 100644 --- a/2024/18/18.py +++ b/2024/18/18.py @@ -1,16 +1,13 @@ import networkx as nx def solve(obstacles, S=70): - G = nx.DiGraph() - for c in {x+1j*y for y in range(S+1) for x in range(S+1)}: - for d in [1, 1j, -1, -1j]: - if c not in obstacles and c+d not in obstacles: - G.add_edge(c, c+d) + G = nx.grid_graph((S+1, S+1)) + G.remove_nodes_from(obstacles) + return nx.has_path(G, (0,0), (S,S)) \ + and len(nx.shortest_path(G, (0,0), (S,S))) - return nx.has_path(G, 0, S+S*1j) and len(nx.shortest_path(G, 0, S+S*1j)) - -obstacles = [complex(line.replace(",", "+")+"j") for line in open(0)] -print(solve(obstacles[:1024])) +obstacles = [tuple(map(int, line.split(","))) for line in open(0)] +print(solve(obstacles[:1024])-1) lo, hi = 1024, len(obstacles)-1 while lo < hi: @@ -18,4 +15,4 @@ def solve(obstacles, S=70): if solve(obstacles[:mid]): lo = mid+1 else: hi = mid-1 -print(str(obstacles[mid]).replace("+", ",")[1:-2]) +print(*obstacles[mid], sep=",") From e6d9a4e5361ce3ed443e9bfecff0dbaa8da42f60 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Wed, 18 Dec 2024 12:31:50 +0200 Subject: [PATCH 202/225] Add day 18 --- 2024/18/18.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/2024/18/18.py b/2024/18/18.py index f650724..bc30a81 100644 --- a/2024/18/18.py +++ b/2024/18/18.py @@ -1,4 +1,5 @@ import networkx as nx +from bisect import bisect def solve(obstacles, S=70): G = nx.grid_graph((S+1, S+1)) @@ -9,10 +10,5 @@ def solve(obstacles, S=70): obstacles = [tuple(map(int, line.split(","))) for line in open(0)] print(solve(obstacles[:1024])-1) -lo, hi = 1024, len(obstacles)-1 -while lo < hi: - mid = (lo + hi) // 2 - if solve(obstacles[:mid]): lo = mid+1 - else: hi = mid-1 - -print(*obstacles[mid], sep=",") +index = bisect(range(len(obstacles)), 0, key=lambda x: not solve(obstacles[:x])) +print(*obstacles[index-1], sep=",") From 378adbe1ee4b9587e765b6e2d6af3ce31e6dd594 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Wed, 18 Dec 2024 13:41:03 +0200 Subject: [PATCH 203/225] Add day 18 --- 2024/18/18.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/2024/18/18.py b/2024/18/18.py index bc30a81..af63de8 100644 --- a/2024/18/18.py +++ b/2024/18/18.py @@ -1,14 +1,14 @@ import networkx as nx from bisect import bisect -def solve(obstacles, S=70): +def solve(bad, S=70): G = nx.grid_graph((S+1, S+1)) - G.remove_nodes_from(obstacles) + G.remove_nodes_from(bad) return nx.has_path(G, (0,0), (S,S)) \ - and len(nx.shortest_path(G, (0,0), (S,S))) + and nx.shortest_path_length(G, (0,0), (S,S)) -obstacles = [tuple(map(int, line.split(","))) for line in open(0)] -print(solve(obstacles[:1024])-1) +bad = [tuple(map(int, line.split(","))) for line in open(0)] +print(solve(bad[:1024])) -index = bisect(range(len(obstacles)), 0, key=lambda x: not solve(obstacles[:x])) -print(*obstacles[index-1], sep=",") +i = bisect(range(len(bad)), 0, key=lambda x: not solve(bad[:x])) +print(*bad[i-1], sep=",") From 4e7089249351f9c21c438f2eaf57b65633906578 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Thu, 19 Dec 2024 08:15:22 +0200 Subject: [PATCH 204/225] Add day 19 --- .aoc_tiles/tiles/2024/19.png | Bin 0 -> 9157 bytes 2024/19/19.py | 102 +++++++++++++++++++++++++++++++++++ README.md | 7 ++- 3 files changed, 107 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2024/19.png create mode 100644 2024/19/19.py diff --git a/.aoc_tiles/tiles/2024/19.png b/.aoc_tiles/tiles/2024/19.png new file mode 100644 index 0000000000000000000000000000000000000000..2d37a46bc9d95f1d80beb120ee4b15e281b9d67b GIT binary patch literal 9157 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 MX=SNuN#h^?1DuyI>Hq)$ literal 0 HcmV?d00001 diff --git a/2024/19/19.py b/2024/19/19.py new file mode 100644 index 0000000..b625ff5 --- /dev/null +++ b/2024/19/19.py @@ -0,0 +1,102 @@ +from collections import * +from itertools import * +from functools import * +import numpy as np +import networkx as nx +# import z3 +import re +import sys +sys.setrecursionlimit(1000000) + +s1 = s2 = 0 +# coords = {x+1j*y: c for y, r in enumerate(open(0)) for x, c in enumerate(r.strip())} + +d4 = [1, 1j, -1, -1j] +d8 = d4 + [1+1j, 1-1j, -1+1j, -1-1j] +d4half = [i/2 for i in d4] +d8half = [i/2 for i in d8] +def adjacent(coord, dirs=d4): + return [coord + d for d in dirs] + + +patterns, designs = open(0).read().split("\n\n") +patterns = set(patterns.strip().split(", ")) +designs = designs.strip().split("\n") +# print(sorted(patterns, key=len)) + +patterns_regex = set(patterns) + +for pattern in list(patterns): + if len(pattern) > 1 and "r" not in pattern: + patterns_regex.remove(pattern) + +# print(sorted(patterns, key=len)) +# exit(0) +M = max(map(len, patterns)) + +g = '|'.join(sorted(patterns_regex, key=len)) +# print(g) +reg = re.compile(rf"^({g})+$") +# print(reg) + +def find3(design): + dp = [0] * (len(design)+1) + dp[0] = 1 + for i in range(len(design)): + d = design[i:] + for pattern in patterns: + if d.startswith(pattern): + # print(d, pattern, dp) + dp[i+len(pattern)] += dp[i] + print(dp) + return dp[-1] + +def find2(design): + b = bool(reg.fullmatch(design)) + print(b) + return b + +def find(design, j=0): + # global s1 + if j == len(design): + # s1 += 1 + print(design) + return True + # for i in range(M, 0, -1): + for i in range(M): + if design[j:j+i] in patterns: + # print(design[j:], design[j:j+i]) + if f := find(design, j+i): + return f + return False +from concurrent.futures import ProcessPoolExecutor + +# print(find3(designs[0])) +# print(find2(designs[0])) +# exit(0) + +with ProcessPoolExecutor() as executor: + for good in executor.map(find3, designs): + s1 += bool(good) + s2 += good + +# import multiprocessing as mp +# print(mp.cpu_count()) + +# pool = mp.Pool(mp.cpu_count()) + +# results = pool.map(find, designs) +# pool.close() + +# for design in designs): +# s1 += find(design) +# print(s1, design) + +# print(sum(results)) + +# for line in open(0): +# n = [int(a) for a in line.split()] + # re.findall(r"\d+", line) + + +print(s1, s2, sep="\n") diff --git a/README.md b/README.md index 6ac5618..2d978c5 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@

    - Advent of Code - 246/486 ⭐ + Advent of Code - 248/488 ⭐

    - 2024 - 36 ⭐ - Python + 2024 - 38 ⭐ - Python

    @@ -59,6 +59,9 @@ + + +

    2023 - 50 ⭐ - Python

    From e80cb6fd98db73c7ae8471d483604ed83216dc7a Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Thu, 19 Dec 2024 08:25:52 +0200 Subject: [PATCH 205/225] Add day 19 --- 2024/19/19.py | 102 ++++---------------------------------------------- 1 file changed, 7 insertions(+), 95 deletions(-) diff --git a/2024/19/19.py b/2024/19/19.py index b625ff5..353a36b 100644 --- a/2024/19/19.py +++ b/2024/19/19.py @@ -1,102 +1,14 @@ -from collections import * -from itertools import * -from functools import * -import numpy as np -import networkx as nx -# import z3 -import re -import sys -sys.setrecursionlimit(1000000) - -s1 = s2 = 0 -# coords = {x+1j*y: c for y, r in enumerate(open(0)) for x, c in enumerate(r.strip())} - -d4 = [1, 1j, -1, -1j] -d8 = d4 + [1+1j, 1-1j, -1+1j, -1-1j] -d4half = [i/2 for i in d4] -d8half = [i/2 for i in d8] -def adjacent(coord, dirs=d4): - return [coord + d for d in dirs] - - patterns, designs = open(0).read().split("\n\n") -patterns = set(patterns.strip().split(", ")) -designs = designs.strip().split("\n") -# print(sorted(patterns, key=len)) - -patterns_regex = set(patterns) +patterns = patterns.split(", ") -for pattern in list(patterns): - if len(pattern) > 1 and "r" not in pattern: - patterns_regex.remove(pattern) - -# print(sorted(patterns, key=len)) -# exit(0) -M = max(map(len, patterns)) - -g = '|'.join(sorted(patterns_regex, key=len)) -# print(g) -reg = re.compile(rf"^({g})+$") -# print(reg) - -def find3(design): - dp = [0] * (len(design)+1) - dp[0] = 1 +def arrangements(design): + dp = [1] + [0] * len(design) for i in range(len(design)): - d = design[i:] for pattern in patterns: - if d.startswith(pattern): - # print(d, pattern, dp) + if design[i:].startswith(pattern): dp[i+len(pattern)] += dp[i] - print(dp) return dp[-1] -def find2(design): - b = bool(reg.fullmatch(design)) - print(b) - return b - -def find(design, j=0): - # global s1 - if j == len(design): - # s1 += 1 - print(design) - return True - # for i in range(M, 0, -1): - for i in range(M): - if design[j:j+i] in patterns: - # print(design[j:], design[j:j+i]) - if f := find(design, j+i): - return f - return False -from concurrent.futures import ProcessPoolExecutor - -# print(find3(designs[0])) -# print(find2(designs[0])) -# exit(0) - -with ProcessPoolExecutor() as executor: - for good in executor.map(find3, designs): - s1 += bool(good) - s2 += good - -# import multiprocessing as mp -# print(mp.cpu_count()) - -# pool = mp.Pool(mp.cpu_count()) - -# results = pool.map(find, designs) -# pool.close() - -# for design in designs): -# s1 += find(design) -# print(s1, design) - -# print(sum(results)) - -# for line in open(0): -# n = [int(a) for a in line.split()] - # re.findall(r"\d+", line) - - -print(s1, s2, sep="\n") +p = [arrangements(d) for d in designs.split()] +print(sum(map(bool, p))) +print(sum(p)) From 88026c274cc8bc6b9175f8d14b8cd4327c04e9ce Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Fri, 20 Dec 2024 08:11:01 +0200 Subject: [PATCH 206/225] Add day 20 --- .aoc_tiles/tiles/2024/20.png | Bin 0 -> 7973 bytes 2024/20/20.py | 79 +++++++++++++++++++++++++++++++++++ README.md | 7 +++- 3 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2024/20.png create mode 100644 2024/20/20.py diff --git a/.aoc_tiles/tiles/2024/20.png b/.aoc_tiles/tiles/2024/20.png new file mode 100644 index 0000000000000000000000000000000000000000..b30ccd93f2f6605a12329922cdf8037c7e42820e GIT binary patch literal 7973 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 E2RBTy2><{9 literal 0 HcmV?d00001 diff --git a/2024/20/20.py b/2024/20/20.py new file mode 100644 index 0000000..a38aa1c --- /dev/null +++ b/2024/20/20.py @@ -0,0 +1,79 @@ +import networkx as nx +coords = {x+1j*y: c for y, r in enumerate(open(0)) for x, c in enumerate(r.strip().replace(".", " "))} + +d4 = [1, 1j, -1, -1j] + +G = nx.Graph() +for c in coords: + for d in [1, 1j, -1, -1j]: + if coords[c] != '#' != coords[c+d]: + G.add_edge(c, c+d) + # G.add_edge((c, 1), (c+d, 1)) + +S = [c for c in coords if coords[c] in 'S'][0] +E = [c for c in coords if coords[c] in 'E'][0] +EL = nx.shortest_path_length(G, target=E) +SL = nx.shortest_path_length(G, source=S) +print(SL) +print(EL) +# exit() +L = {l: max(EL[l], SL[l]) for l in EL} + +# L = [el+sl for ] + +# print(L) +# print(L[S]) +# exit(0) + +from collections import * + +C = Counter() + +s1 = 0 +seen= set() +for c in coords: + for d in [1, 1j, -1, -1j]: + for d2 in [d]: + diff = 0 + for d3 in [0]: + c2 = c+d+d2+d3 + if c2 in coords and coords[c] != '#' != coords[c2] and c != c2: + delta = d+d2+d3 + new = SL[c2] - SL[c] - int(abs(delta.imag) + abs(delta.real)) + print("\t", d3, new) + diff = max(diff, new) + if (c, c+d+d2) not in seen and diff > 0: + seen.add((c, c+d+d2)) + seen.add((c+d+d2, c)) + if diff > 0: + # print(c, c2) + C[diff] += 1 + if diff >= 30: + print(diff) + for y in range(15): + for x in range(15): + X=x+y*1j + print(end=coords[X] if X not in [c, c+d+d2] else "!") + print(end=f"{SL.get(X, '##'):2}") + print() + print() + if diff >= 100: + s1 += 1 + + +for asd in sorted(C.items()): + print(asd) + +# 536 +# 677 +# 1923 + + +# for path in nx.all_simple_paths(G, S, (E, 1), cutoff=L): +# if L - len(path) >= 100: +# s1 += 1 +print(s1) +# paths = list(nx.all_shortest_paths(G, S, (E, 0), "weight")) + +# print(sum(G.edges[e]["weight"] for e in zip(paths[0], paths[0][1:]))) +# print(len({p[0] for p in sum(paths, [])})) diff --git a/README.md b/README.md index 2d978c5..4e042a4 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@

    - Advent of Code - 248/488 ⭐ + Advent of Code - 249/490 ⭐

    - 2024 - 38 ⭐ - Python + 2024 - 39 ⭐ - Python

    @@ -62,6 +62,9 @@ + + +

    2023 - 50 ⭐ - Python

    From 4c120a656ddbb88702508e6977d9113d77bb61f6 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Fri, 20 Dec 2024 08:22:44 +0200 Subject: [PATCH 207/225] Add day 20 --- 2024/20/20.py | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/2024/20/20.py b/2024/20/20.py index a38aa1c..00a6252 100644 --- a/2024/20/20.py +++ b/2024/20/20.py @@ -1,4 +1,7 @@ import networkx as nx +from collections import * + + coords = {x+1j*y: c for y, r in enumerate(open(0)) for x, c in enumerate(r.strip().replace(".", " "))} d4 = [1, 1j, -1, -1j] @@ -12,12 +15,38 @@ S = [c for c in coords if coords[c] in 'S'][0] E = [c for c in coords if coords[c] in 'E'][0] -EL = nx.shortest_path_length(G, target=E) +# EL = nx.shortest_path_length(G, target=E) SL = nx.shortest_path_length(G, source=S) print(SL) -print(EL) -# exit() -L = {l: max(EL[l], SL[l]) for l in EL} +# print(EL) +C= Counter() + +sl = list(SL.items()) +seen = set() +s2 = 0 +for i, (c1, dist1) in enumerate(sl): + for c2, dist2 in sl[i+1:]: + diff = c2-c1 + diff = int(abs(diff.real) + abs(diff.imag)) + if diff <= 20: + D = dist2 - dist1 - diff + if D > 0: + C[D] += 1 + if D >= 100: + s2 += 1 + +for asd in sorted(C.items()): + print(asd) + +print(s2) +exit() +# L = {l: max(EL[l], SL[l]) for l in EL} + +for c in coords: + for d in [1, 1j, -1, -1j]: + if coords[c] != '#' != coords[c+d]: + G.add_edge(c, c+d) + G.add_edge((c, 1), (c+d, 1)) # L = [el+sl for ] @@ -25,8 +54,6 @@ # print(L[S]) # exit(0) -from collections import * - C = Counter() s1 = 0 From 886ac37ffe3baa2673871155242bffc81d1a18c2 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Fri, 20 Dec 2024 08:31:05 +0200 Subject: [PATCH 208/225] Add day 20 --- 2024/20/20.py | 103 +++++--------------------------------------------- 1 file changed, 10 insertions(+), 93 deletions(-) diff --git a/2024/20/20.py b/2024/20/20.py index 00a6252..61c5632 100644 --- a/2024/20/20.py +++ b/2024/20/20.py @@ -1,106 +1,23 @@ import networkx as nx -from collections import * - -coords = {x+1j*y: c for y, r in enumerate(open(0)) for x, c in enumerate(r.strip().replace(".", " "))} - -d4 = [1, 1j, -1, -1j] +coords = {x+1j*y: c for y, r in enumerate(open(0)) for x, c in enumerate(r.strip())} G = nx.Graph() for c in coords: for d in [1, 1j, -1, -1j]: if coords[c] != '#' != coords[c+d]: G.add_edge(c, c+d) - # G.add_edge((c, 1), (c+d, 1)) S = [c for c in coords if coords[c] in 'S'][0] -E = [c for c in coords if coords[c] in 'E'][0] -# EL = nx.shortest_path_length(G, target=E) -SL = nx.shortest_path_length(G, source=S) -print(SL) -# print(EL) -C= Counter() - -sl = list(SL.items()) -seen = set() -s2 = 0 -for i, (c1, dist1) in enumerate(sl): - for c2, dist2 in sl[i+1:]: - diff = c2-c1 - diff = int(abs(diff.real) + abs(diff.imag)) - if diff <= 20: - D = dist2 - dist1 - diff - if D > 0: - C[D] += 1 - if D >= 100: - s2 += 1 - -for asd in sorted(C.items()): - print(asd) - -print(s2) -exit() -# L = {l: max(EL[l], SL[l]) for l in EL} - -for c in coords: - for d in [1, 1j, -1, -1j]: - if coords[c] != '#' != coords[c+d]: - G.add_edge(c, c+d) - G.add_edge((c, 1), (c+d, 1)) +coord_to_dist = nx.shortest_path_length(G, source=S).items() -# L = [el+sl for ] +s1 = s2 = 0 +for c1, dist1 in coord_to_dist: + for c2, dist2 in coord_to_dist: + diff = int(abs((c2-c1).real) + abs((c2-c1).imag)) + if dist2 - dist1 - diff >= 100: + s1 += diff <= 2 + s2 += diff <= 20 -# print(L) -# print(L[S]) -# exit(0) - -C = Counter() - -s1 = 0 -seen= set() -for c in coords: - for d in [1, 1j, -1, -1j]: - for d2 in [d]: - diff = 0 - for d3 in [0]: - c2 = c+d+d2+d3 - if c2 in coords and coords[c] != '#' != coords[c2] and c != c2: - delta = d+d2+d3 - new = SL[c2] - SL[c] - int(abs(delta.imag) + abs(delta.real)) - print("\t", d3, new) - diff = max(diff, new) - if (c, c+d+d2) not in seen and diff > 0: - seen.add((c, c+d+d2)) - seen.add((c+d+d2, c)) - if diff > 0: - # print(c, c2) - C[diff] += 1 - if diff >= 30: - print(diff) - for y in range(15): - for x in range(15): - X=x+y*1j - print(end=coords[X] if X not in [c, c+d+d2] else "!") - print(end=f"{SL.get(X, '##'):2}") - print() - print() - if diff >= 100: - s1 += 1 - - -for asd in sorted(C.items()): - print(asd) - -# 536 -# 677 -# 1923 - - -# for path in nx.all_simple_paths(G, S, (E, 1), cutoff=L): -# if L - len(path) >= 100: -# s1 += 1 print(s1) -# paths = list(nx.all_shortest_paths(G, S, (E, 0), "weight")) - -# print(sum(G.edges[e]["weight"] for e in zip(paths[0], paths[0][1:]))) -# print(len({p[0] for p in sum(paths, [])})) +print(s2) From edafffba653c2b08c783bf44c154b9bfb6ad8a53 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Fri, 20 Dec 2024 08:36:39 +0200 Subject: [PATCH 209/225] Add day 20 --- 2024/20/20.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/2024/20/20.py b/2024/20/20.py index 61c5632..3eec314 100644 --- a/2024/20/20.py +++ b/2024/20/20.py @@ -9,7 +9,7 @@ G.add_edge(c, c+d) S = [c for c in coords if coords[c] in 'S'][0] -coord_to_dist = nx.shortest_path_length(G, source=S).items() +coord_to_dist = nx.shortest_path_length(G, S).items() s1 = s2 = 0 for c1, dist1 in coord_to_dist: @@ -19,5 +19,4 @@ s1 += diff <= 2 s2 += diff <= 20 -print(s1) -print(s2) +print(s1, s2, sep="\n") # use pypy instead of python From 2c6176c558c7b871a4c7c4ec943972d81eae3929 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 21 Dec 2024 08:30:29 +0200 Subject: [PATCH 210/225] Add day 21 --- .aoc_tiles/tiles/2024/20.png | Bin 7973 -> 9677 bytes .aoc_tiles/tiles/2024/21.png | Bin 0 -> 6791 bytes 2024/21/21.py | 119 +++++++++++++++++++++++++++++++++++ README.md | 7 ++- 4 files changed, 124 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2024/21.png create mode 100644 2024/21/21.py diff --git a/.aoc_tiles/tiles/2024/20.png b/.aoc_tiles/tiles/2024/20.png index b30ccd93f2f6605a12329922cdf8037c7e42820e..4ea62c54a4d1e203b8de9a68f46d2791a2938289 100644 GIT binary patch literal 9677 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 F{{d-g90dRX literal 7973 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 E2RBTy2><{9 diff --git a/.aoc_tiles/tiles/2024/21.png b/.aoc_tiles/tiles/2024/21.png new file mode 100644 index 0000000000000000000000000000000000000000..63dd7247430a4df6124d8f299d7456ee9ffe216d GIT binary patch literal 6791 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 | ++---+---+---+ +""" +R = """ + ^A + +""" +RC = {c: (x,y) for y, r in enumerate(R.splitlines()) for x, c in enumerate(r)} +print(NC) + +@cache +def path_to(start, end, numpad): + pad = NC if numpad else RC + sx,sy = pad[start] + ex,ey = pad[end] + dx = ex-sx + dy = ey-sy + spacex, spacey = pad[" "] + # print(dx, dy) + ri = "" + up = "" + if not (sx == spacex and sy+dy == spacey): + # if sx+dx == spacex and sy == spacey: + up += ("^" if dy < 0 else "v") * abs(dy) + up += ("<" if dx < 0 else ">") * abs(dx) + + if not (sx+dx == spacex and sy == spacey): + # else: + ri += ("<" if dx < 0 else ">") * abs(dx) + ri += ("^" if dy < 0 else "v") * abs(dy) + + if up and ri: + s = up if random() < 0.5 else ri + else: + s = up or ri + return s + "A" + +# print(path_to("<", "A", RC)) +# print(path_to("A", "<", RC)) +# exit() + +def solve(code): + prev = 'A' + seq = code + for i in range(len(state)-1, -1, -1): + pad = i == len(state)-1 + # print(i, pad) + new_seq = "" + for char in seq: + new_seq += path_to(prev, char, pad) + prev = char + seq = new_seq + print(i, len(seq)) + # print() + return int(code[:-1]) * len(seq) + +print(68 * 29, 60 * 980, 68 * 179, 64 * 456, 64 * 379) + +def simul(code): + robots = 26 + return min(solve(code) for _ in range(1)) + +# re.findall(r"\d+", line) +for line in open(0): + # s = solve(line.strip(), list("AAA")) + s = simul(line.strip()) + print(line.strip(), s) + s1 += s + # exit() + + +print(s1, s2, sep="\n") +# 211930 +# 217398 +# 215546 +# 990957 diff --git a/README.md b/README.md index 4e042a4..b877cfb 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@

    - Advent of Code - 249/490 ⭐ + Advent of Code - 251/492 ⭐

    - 2024 - 39 ⭐ - Python + 2024 - 41 ⭐ - Python

    @@ -65,6 +65,9 @@ + + +

    2023 - 50 ⭐ - Python

    From 6e12c9e1742498cd47548a1ce86f0dabaee95a4c Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 21 Dec 2024 08:59:46 +0200 Subject: [PATCH 211/225] Add day 21 --- 2024/21/21.py | 49 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 38 insertions(+), 11 deletions(-) diff --git a/2024/21/21.py b/2024/21/21.py index 89ad478..1f7fa39 100644 --- a/2024/21/21.py +++ b/2024/21/21.py @@ -81,27 +81,54 @@ def path_to(start, end, numpad): # print(path_to("<", "A", RC)) # print(path_to("A", "<", RC)) # exit() +G = 26 +# G = 3 + +# for r in R.replace("\n", "").strip(): +# for r2 in R.replace("\n", "").strip(): +# length(r, r2, 1) +# exit() +@cache +def length(P, char, i): + if i == 0: return 1 + s = 0 + prev = 'A' + for c in path_to(P, char, i==G): + s += length(prev, c, i-1) + prev = c + # print(i, " : ", P, char, " = ", s, " path: ", path_to(P, char, i==G)) + return s def solve(code): + path_to.cache_clear() + length.cache_clear() prev = 'A' seq = code - for i in range(len(state)-1, -1, -1): - pad = i == len(state)-1 - # print(i, pad) - new_seq = "" - for char in seq: - new_seq += path_to(prev, char, pad) - prev = char - seq = new_seq - print(i, len(seq)) + + + + # for i in range(len(state)-1, -1, -1): + # pad = i == len(state)-1 + # # print(i, pad) + # new_seq = "" + # for char in seq: + # new_seq += path_to(prev, char, pad) + # prev = char + # seq = new_seq + # print(i, len(seq)) # print() - return int(code[:-1]) * len(seq) + s = 0 + for c in seq: + s += length(prev, c, G) + prev = c + # print(int(code[:-1]) * s) + return int(code[:-1]) * s print(68 * 29, 60 * 980, 68 * 179, 64 * 456, 64 * 379) def simul(code): robots = 26 - return min(solve(code) for _ in range(1)) + return min(solve(code) for _ in range(10000)) # re.findall(r"\d+", line) for line in open(0): From 7c8523e851bd77864fcea63a4dc35ef0700751ef Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 21 Dec 2024 09:12:25 +0200 Subject: [PATCH 212/225] Add day 21 --- .aoc_tiles/tiles/2024/21.png | Bin 6791 -> 8435 bytes 2024/21/21.py | 115 +++++------------------------------ README.md | 4 +- 3 files changed, 17 insertions(+), 102 deletions(-) diff --git a/.aoc_tiles/tiles/2024/21.png b/.aoc_tiles/tiles/2024/21.png index 63dd7247430a4df6124d8f299d7456ee9ffe216d..181daf83c9328110bea311463a961352f572c814 100644 GIT binary patch literal 8435 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 | -+---+---+---+ -""" -R = """ - ^A - -""" -RC = {c: (x,y) for y, r in enumerate(R.splitlines()) for x, c in enumerate(r)} -print(NC) +R = " ^A|" +RC = {c: (x,y) for y, r in enumerate(R.split('|')) for x, c in enumerate(r)} @cache def path_to(start, end, numpad): @@ -59,16 +15,12 @@ def path_to(start, end, numpad): dx = ex-sx dy = ey-sy spacex, spacey = pad[" "] - # print(dx, dy) - ri = "" - up = "" + ri = up = "" if not (sx == spacex and sy+dy == spacey): - # if sx+dx == spacex and sy == spacey: up += ("^" if dy < 0 else "v") * abs(dy) up += ("<" if dx < 0 else ">") * abs(dx) if not (sx+dx == spacex and sy == spacey): - # else: ri += ("<" if dx < 0 else ">") * abs(dx) ri += ("^" if dy < 0 else "v") * abs(dy) @@ -78,16 +30,7 @@ def path_to(start, end, numpad): s = up or ri return s + "A" -# print(path_to("<", "A", RC)) -# print(path_to("A", "<", RC)) -# exit() -G = 26 -# G = 3 -# for r in R.replace("\n", "").strip(): -# for r2 in R.replace("\n", "").strip(): -# length(r, r2, 1) -# exit() @cache def length(P, char, i): if i == 0: return 1 @@ -96,51 +39,23 @@ def length(P, char, i): for c in path_to(P, char, i==G): s += length(prev, c, i-1) prev = c - # print(i, " : ", P, char, " = ", s, " path: ", path_to(P, char, i==G)) return s def solve(code): path_to.cache_clear() length.cache_clear() prev = 'A' - seq = code - - - - # for i in range(len(state)-1, -1, -1): - # pad = i == len(state)-1 - # # print(i, pad) - # new_seq = "" - # for char in seq: - # new_seq += path_to(prev, char, pad) - # prev = char - # seq = new_seq - # print(i, len(seq)) - # print() s = 0 - for c in seq: + for c in code: s += length(prev, c, G) prev = c - # print(int(code[:-1]) * s) return int(code[:-1]) * s -print(68 * 29, 60 * 980, 68 * 179, 64 * 456, 64 * 379) - -def simul(code): - robots = 26 - return min(solve(code) for _ in range(10000)) +def simulate(code): + return min(solve(code) for _ in range(1000)) -# re.findall(r"\d+", line) -for line in open(0): - # s = solve(line.strip(), list("AAA")) - s = simul(line.strip()) - print(line.strip(), s) - s1 += s - # exit() - - -print(s1, s2, sep="\n") -# 211930 -# 217398 -# 215546 -# 990957 +codes = open(0).read().split() +G = 3 +print(sum(simulate(code) for code in codes)) +G = 26 +print(sum(simulate(code) for code in codes)) diff --git a/README.md b/README.md index b877cfb..13dc916 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@

    - Advent of Code - 251/492 ⭐ + Advent of Code - 252/492 ⭐

    - 2024 - 41 ⭐ - Python + 2024 - 42 ⭐ - Python

    From 16b24568dd213e9d6052ecb831b5d9bf5195276c Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 21 Dec 2024 09:28:50 +0200 Subject: [PATCH 213/225] Add day 21 --- 2024/21/21.py | 30 +++++++++--------------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/2024/21/21.py b/2024/21/21.py index d11acd4..901d164 100644 --- a/2024/21/21.py +++ b/2024/21/21.py @@ -16,40 +16,28 @@ def path_to(start, end, numpad): dy = ey-sy spacex, spacey = pad[" "] ri = up = "" + yy = ("^" if dy < 0 else "v") * abs(dy) + xx = ("<" if dx < 0 else ">") * abs(dx) if not (sx == spacex and sy+dy == spacey): - up += ("^" if dy < 0 else "v") * abs(dy) - up += ("<" if dx < 0 else ">") * abs(dx) - + s = up = yy + xx if not (sx+dx == spacex and sy == spacey): - ri += ("<" if dx < 0 else ">") * abs(dx) - ri += ("^" if dy < 0 else "v") * abs(dy) + s = ri = xx + yy if up and ri: s = up if random() < 0.5 else ri - else: - s = up or ri return s + "A" - @cache -def length(P, char, i): - if i == 0: return 1 - s = 0 - prev = 'A' - for c in path_to(P, char, i==G): - s += length(prev, c, i-1) - prev = c +def length(code, robot, s=0): + if robot == 0: return len(code) + for i, c in enumerate(code): + s += length(path_to(code[i-1], c, robot==G), robot-1) return s def solve(code): path_to.cache_clear() length.cache_clear() - prev = 'A' - s = 0 - for c in code: - s += length(prev, c, G) - prev = c - return int(code[:-1]) * s + return int(code[:-1]) * length(code, G) def simulate(code): return min(solve(code) for _ in range(1000)) From 81f3e90a8b684f4786019ff5b312511fed5a2a49 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 21 Dec 2024 09:49:56 +0200 Subject: [PATCH 214/225] Add day 21 --- 2024/21/21.py | 45 +++++++++++++++++++-------------------------- 1 file changed, 19 insertions(+), 26 deletions(-) diff --git a/2024/21/21.py b/2024/21/21.py index 901d164..2c5daea 100644 --- a/2024/21/21.py +++ b/2024/21/21.py @@ -2,48 +2,41 @@ from random import random N = "789|456|123| 0A" -NC = {c: (x,y) for y, r in enumerate(N.split('|')) for x, c in enumerate(r)} +NC = {c: x+1j*y for y, r in enumerate(N.split('|')) for x, c in enumerate(r)} R = " ^A|" -RC = {c: (x,y) for y, r in enumerate(R.split('|')) for x, c in enumerate(r)} +RC = {c: x+1j*y for y, r in enumerate(R.split('|')) for x, c in enumerate(r)} @cache def path_to(start, end, numpad): pad = NC if numpad else RC - sx,sy = pad[start] - ex,ey = pad[end] - dx = ex-sx - dy = ey-sy - spacex, spacey = pad[" "] - ri = up = "" + diff = pad[end] - pad[start] + dx, dy = int(diff.real), int(diff.imag) yy = ("^" if dy < 0 else "v") * abs(dy) xx = ("<" if dx < 0 else ">") * abs(dx) - if not (sx == spacex and sy+dy == spacey): - s = up = yy + xx - if not (sx+dx == spacex and sy == spacey): - s = ri = xx + yy - if up and ri: - s = up if random() < 0.5 else ri - return s + "A" + if pad[start] + dy*1j == pad[" "]: + return xx + yy + "A" + if pad[start] + dx == pad[" "]: + return yy + xx + "A" + return (xx+yy if random() < 0.5 else yy+xx) + "A" # ¯\_(ツ)_/¯ @cache -def length(code, robot, s=0): - if robot == 0: return len(code) +def length(code, robot, first=False, s=0): + if robot == 0: + return len(code) for i, c in enumerate(code): - s += length(path_to(code[i-1], c, robot==G), robot-1) + s += length(path_to(code[i-1], c, first), robot-1) return s -def solve(code): +def solve(code, R): path_to.cache_clear() length.cache_clear() - return int(code[:-1]) * length(code, G) + return int(code[:-1]) * length(code, R, True) -def simulate(code): - return min(solve(code) for _ in range(1000)) +def simulate(code, R): + return min(solve(code, R) for _ in range(1000)) codes = open(0).read().split() -G = 3 -print(sum(simulate(code) for code in codes)) -G = 26 -print(sum(simulate(code) for code in codes)) +print(sum(simulate(code, 3) for code in codes)) +print(sum(simulate(code, 26) for code in codes)) From 979fe279fef1ad8a563ce5cb4314de4f2bbf4d25 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 21 Dec 2024 10:11:15 +0200 Subject: [PATCH 215/225] Add day 21 --- 2024/21/21.py | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/2024/21/21.py b/2024/21/21.py index 2c5daea..3a42566 100644 --- a/2024/21/21.py +++ b/2024/21/21.py @@ -1,15 +1,13 @@ from functools import cache from random import random -N = "789|456|123| 0A" -NC = {c: x+1j*y for y, r in enumerate(N.split('|')) for x, c in enumerate(r)} - -R = " ^A|" -RC = {c: x+1j*y for y, r in enumerate(R.split('|')) for x, c in enumerate(r)} +N = {'7':0, '8':1, '9':2, '4':1j, '5':1+1j, '6':2+1j, + '1':2j, '2':1+2j, '3':2+2j, ' ':3j, '0':1+3j, 'A':2+3j} +R = {' ':0, '^':1, 'A':2, '<':1j, 'v':1+1j, '>':2+1j} @cache -def path_to(start, end, numpad): - pad = NC if numpad else RC +def path(start, end): + pad = N if (start in N and end in N) else R diff = pad[end] - pad[start] dx, dy = int(diff.real), int(diff.imag) yy = ("^" if dy < 0 else "v") * abs(dy) @@ -22,20 +20,19 @@ def path_to(start, end, numpad): return (xx+yy if random() < 0.5 else yy+xx) + "A" # ¯\_(ツ)_/¯ @cache -def length(code, robot, first=False, s=0): - if robot == 0: - return len(code) +def length(code, depth, s=0): + if depth == 0: return len(code) for i, c in enumerate(code): - s += length(path_to(code[i-1], c, first), robot-1) + s += length(path(code[i-1], c), depth-1) return s -def solve(code, R): - path_to.cache_clear() +def solve(code, max_depth): + path.cache_clear() length.cache_clear() - return int(code[:-1]) * length(code, R, True) + return int(code[:-1]) * length(code, max_depth) -def simulate(code, R): - return min(solve(code, R) for _ in range(1000)) +def simulate(code, max_depth): + return min(solve(code, max_depth) for _ in range(1000)) codes = open(0).read().split() print(sum(simulate(code, 3) for code in codes)) From 4319b4713cacee067824441ad6a1bb6c5ee9cb4c Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 21 Dec 2024 10:27:33 +0200 Subject: [PATCH 216/225] Add day 21 --- 2024/21/21.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/2024/21/21.py b/2024/21/21.py index 3a42566..68a856f 100644 --- a/2024/21/21.py +++ b/2024/21/21.py @@ -10,8 +10,8 @@ def path(start, end): pad = N if (start in N and end in N) else R diff = pad[end] - pad[start] dx, dy = int(diff.real), int(diff.imag) - yy = ("^" if dy < 0 else "v") * abs(dy) - xx = ("<" if dx < 0 else ">") * abs(dx) + yy = ("^"*-dy) + ("v"*dy) + xx = ("<"*-dx) + (">"*dx) if pad[start] + dy*1j == pad[" "]: return xx + yy + "A" From b362d3afbc89ff7b8d21d96b5617baa0cbd6766c Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sat, 21 Dec 2024 16:27:15 +0200 Subject: [PATCH 217/225] Add day 21 --- 2024/21/21.py | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/2024/21/21.py b/2024/21/21.py index 68a856f..93d2684 100644 --- a/2024/21/21.py +++ b/2024/21/21.py @@ -1,5 +1,4 @@ from functools import cache -from random import random N = {'7':0, '8':1, '9':2, '4':1j, '5':1+1j, '6':2+1j, '1':2j, '2':1+2j, '3':2+2j, ' ':3j, '0':1+3j, 'A':2+3j} @@ -13,11 +12,9 @@ def path(start, end): yy = ("^"*-dy) + ("v"*dy) xx = ("<"*-dx) + (">"*dx) - if pad[start] + dy*1j == pad[" "]: - return xx + yy + "A" - if pad[start] + dx == pad[" "]: - return yy + xx + "A" - return (xx+yy if random() < 0.5 else yy+xx) + "A" # ¯\_(ツ)_/¯ + bad = pad[" "] - pad[start] + prefer_yy_first = (dx>0 or bad==dx) and bad!=dy*1j + return (yy+xx if prefer_yy_first else xx+yy) + "A" @cache def length(code, depth, s=0): @@ -26,14 +23,6 @@ def length(code, depth, s=0): s += length(path(code[i-1], c), depth-1) return s -def solve(code, max_depth): - path.cache_clear() - length.cache_clear() - return int(code[:-1]) * length(code, max_depth) - -def simulate(code, max_depth): - return min(solve(code, max_depth) for _ in range(1000)) - codes = open(0).read().split() -print(sum(simulate(code, 3) for code in codes)) -print(sum(simulate(code, 26) for code in codes)) +print(sum(int(code[:-1]) * length(code, 3) for code in codes)) +print(sum(int(code[:-1]) * length(code, 26) for code in codes)) From 021d01b1b9fa7a6241987b14324a992d2e09df54 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 22 Dec 2024 13:02:10 +0200 Subject: [PATCH 218/225] Add day 22 --- .aoc_tiles/tiles/2024/22.png | Bin 0 -> 8454 bytes 2024/22/22.py | 73 +++++++++++++++++++++++++++++++++++ README.md | 7 +++- 3 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2024/22.png create mode 100644 2024/22/22.py diff --git a/.aoc_tiles/tiles/2024/22.png b/.aoc_tiles/tiles/2024/22.png new file mode 100644 index 0000000000000000000000000000000000000000..8e52f04c1c53ef7f83493c49b7dfb8077e0734c1 GIT binary patch literal 8454 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

    - Advent of Code - 252/492 ⭐ + Advent of Code - 254/494 ⭐

    - 2024 - 42 ⭐ - Python + 2024 - 44 ⭐ - Python

    @@ -68,6 +68,9 @@ + + +

    2023 - 50 ⭐ - Python

    From 1d05697c02deb3ab23a79ae5504a74ecc8533c52 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 22 Dec 2024 13:34:57 +0200 Subject: [PATCH 219/225] Add day 22 --- 2024/22/22.py | 87 +++++++++++---------------------------------------- 1 file changed, 18 insertions(+), 69 deletions(-) diff --git a/2024/22/22.py b/2024/22/22.py index 6dd9d68..fef88ad 100644 --- a/2024/22/22.py +++ b/2024/22/22.py @@ -1,73 +1,22 @@ -from collections import * -from itertools import * -from functools import * -import numpy as np -import networkx as nx -# import z3 -import re -import sys -sys.setrecursionlimit(1000000) +from collections import Counter -s1 = s2 = 0 -# coords = {x+1j*y: c for y, r in enumerate(open(0)) for x, c in enumerate(r.strip())} - -d4 = [1, 1j, -1, -1j] -d8 = d4 + [1+1j, 1-1j, -1+1j, -1-1j] -d4half = [i/2 for i in d4] -d8half = [i/2 for i in d8] -def adjacent(coord, dirs=d4): - return [coord + d for d in dirs] - -# G = nx.Graph() -# for c in coords: -# for d in [1, 1j, -1, -1j]: -# if coords[c] != '#' != coords[c+d]: -# G.add_edge(c, c+d) - -# S = [c for c in coords if coords[c] in 'S'][0] -# coord_to_dist = nx.shortest_path_length(G, S).items() - - - # Calculate the result of multiplying the secret number by 64. Then, mix this result into the secret number. Finally, prune the secret number. - # Calculate the result of dividing the secret number by 32. Round the result down to the nearest integer. Then, mix this result into the secret number. Finally, prune the secret number. - # Calculate the result of multiplying the secret number by 2048. Then, mix this result into the secret number. Finally, prune the secret number. +s1 = [0] def secret(num): - mod10 = [] - price = [] - print(num) + prices = Counter() + last4 = (10,10,10,10) for i in range(2000): - prev = num - num ^= num * 64 - num %= 16777216 - num ^= num // 32 - num %= 16777216 - num ^= num * 2048 - num %= 16777216 - mod10.append((num%10 - prev%10)) - price.append(num%10) - # print(f"{num} {num%10=} {num%10-prev%10=}") - return mod10, price - - -c = Counter() -for line in open(0): - n = int(line) - # s1 += secret(n) - a, price = secret(n) - # print(a[:20]) - # print(price[:20]) - seen = set() - for i, (t, p) in enumerate(zip(zip(a, a[1:], a[2:], a[3:]), price[3:])): - if t not in seen: - seen.add(t) - c[t] += p - # exit() -print(c.most_common(20)) -print(c[(-2,1,-1,3)]) - - - # re.findall(r"\d+", line) - - -print(s1, s2, sep="\n") + prev = num%10 + num ^= (num*64) % 16777216 + num ^= (num//32) % 16777216 + num ^= (num*2048) % 16777216 + last4 = last4[1:] + (num%10 - prev,) + if last4 not in prices: + prices[last4] = num%10 + s1[0] += num + return prices + +ints = map(int, open(0)) +c = sum(map(secret, ints), Counter()) +print(s1[0]) +print(sorted(c.values())[-1]) From 258364d79c5dd5565b523336f642ad6261b3de1a Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 22 Dec 2024 13:47:05 +0200 Subject: [PATCH 220/225] Add day 22 --- 2024/22/22.py | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/2024/22/22.py b/2024/22/22.py index fef88ad..a5a3192 100644 --- a/2024/22/22.py +++ b/2024/22/22.py @@ -1,22 +1,17 @@ -from collections import Counter - -s1 = [0] - -def secret(num): - prices = Counter() - last4 = (10,10,10,10) - for i in range(2000): +s1, s2 = 0, {} +for num in map(int, open(0)): + seen = set() + last4 = (10, 10, 10, 10) + for _ in range(2000): prev = num%10 num ^= (num*64) % 16777216 - num ^= (num//32) % 16777216 + num ^= num//32 num ^= (num*2048) % 16777216 last4 = last4[1:] + (num%10 - prev,) - if last4 not in prices: - prices[last4] = num%10 - s1[0] += num - return prices + if last4 not in seen: + seen.add(last4) + s2[last4] = s2.get(last4, 0) + num%10 + s1 += num -ints = map(int, open(0)) -c = sum(map(secret, ints), Counter()) -print(s1[0]) -print(sorted(c.values())[-1]) +print(s1) +print(sorted(s2.values())[-1]) From c19cda86307a900dcdc64db6ce466d14a7365844 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Sun, 22 Dec 2024 14:04:54 +0200 Subject: [PATCH 221/225] Add day 22 --- 2024/22/22.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/2024/22/22.py b/2024/22/22.py index a5a3192..148be74 100644 --- a/2024/22/22.py +++ b/2024/22/22.py @@ -4,9 +4,9 @@ last4 = (10, 10, 10, 10) for _ in range(2000): prev = num%10 - num ^= (num*64) % 16777216 + num ^= num*64 % 16777216 num ^= num//32 - num ^= (num*2048) % 16777216 + num ^= num*2048 % 16777216 last4 = last4[1:] + (num%10 - prev,) if last4 not in seen: seen.add(last4) @@ -14,4 +14,4 @@ s1 += num print(s1) -print(sorted(s2.values())[-1]) +print(max(s2.values())) From b2902dcc6eeb39bc2e1b5539bdbe68100070afeb Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Mon, 23 Dec 2024 07:57:39 +0200 Subject: [PATCH 222/225] Add day 23 --- .aoc_tiles/tiles/2024/23.png | Bin 0 -> 9810 bytes 2024/23/23.py | 8 ++++++++ README.md | 7 +++++-- 3 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2024/23.png create mode 100644 2024/23/23.py diff --git a/.aoc_tiles/tiles/2024/23.png b/.aoc_tiles/tiles/2024/23.png new file mode 100644 index 0000000000000000000000000000000000000000..a3be5cd0832a7ad0920046d2a9eb176dd1663af5 GIT binary patch literal 9810 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 literal 0 HcmV?d00001 diff --git a/2024/23/23.py b/2024/23/23.py new file mode 100644 index 0000000..d9d6b60 --- /dev/null +++ b/2024/23/23.py @@ -0,0 +1,8 @@ +import networkx as nx + +G = nx.Graph(line.strip().split("-") for line in open(0)) +cliques = list(nx.enumerate_all_cliques(G)) + +has_t0 = lambda clique: any(a[0]=='t' for a in clique) +print(sum(has_t0(c) for c in cliques if len(c) == 3)) +print(','.join(sorted(cliques[-1]))) diff --git a/README.md b/README.md index cf01b14..945a45d 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@

    - Advent of Code - 254/494 ⭐ + Advent of Code - 256/496 ⭐

    - 2024 - 44 ⭐ - Python + 2024 - 46 ⭐ - Python

    @@ -71,6 +71,9 @@ + + +

    2023 - 50 ⭐ - Python

    From c8551a094a7edc377dc0af3c829d99172dad4f74 Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Mon, 23 Dec 2024 08:05:18 +0200 Subject: [PATCH 223/225] Add day 23 --- 2024/23/23.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/2024/23/23.py b/2024/23/23.py index d9d6b60..685e56c 100644 --- a/2024/23/23.py +++ b/2024/23/23.py @@ -3,6 +3,5 @@ G = nx.Graph(line.strip().split("-") for line in open(0)) cliques = list(nx.enumerate_all_cliques(G)) -has_t0 = lambda clique: any(a[0]=='t' for a in clique) -print(sum(has_t0(c) for c in cliques if len(c) == 3)) +print(sum(any(a[0]=='t' for a in c) for c in cliques if len(c) == 3)) print(','.join(sorted(cliques[-1]))) From 8b1f13674f478f2d707f13f816c009ab0479952a Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Tue, 24 Dec 2024 13:17:12 +0200 Subject: [PATCH 224/225] Add day 24 --- .aoc_tiles/tiles/2024/24.png | Bin 0 -> 8913 bytes 2024/24/24.py | 212 +++++++++++++++++++++++++++++++++++ README.md | 7 +- 3 files changed, 217 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2024/24.png create mode 100644 2024/24/24.py diff --git a/.aoc_tiles/tiles/2024/24.png b/.aoc_tiles/tiles/2024/24.png new file mode 100644 index 0000000000000000000000000000000000000000..4bc1e176b665ce48dbc212a6377ff0bafb4b8b9e GIT binary patch literal 8913 zcmV;?A}-yDP)4p@Ic4qOnDdEwMyR;KP+Z@_E39t5 zpIH1PwM-xq4{2-P@%9@p5u+RcfK0?2Ycq|tnd6*H@~b#o{(PLTF7aTn_APnSkF6ZJ z_5}QOmY?13r4vw>@CCwVUT0wyC#|&M-m9YWhBn#TTIg$TneFLqX9xfYi^@9mPZBn- zN*E;dtWa2Dv4k%aQHTUQ9tRzt$XDgQuPq3M)RZ`tv`Y;PE(LJEQ+D z@?$Y5000()vS<0k+CoQzT2RF~8lDIMIJ#~sRI;I^ z-T#X)UAAV_p84<%=l>X9T-yQwxb=0Y5t{)W{QCU!2T3Ke>_e`WGfV3kRI-salT7R$ z75R@e4IFL$D7m!nctJnfJH^fN;Oc;&oma~0S}=Hf5EjH5o{<0DhvVUQqMw6FW@){J zf!67bA$nR}_jNMY{dMh>E74iVYX{YTs2_M&AAQ^@6tNhT?-!5pwKsx~2f17JD6D?A zcfol35Kl`}U5%{L`cn^5V=~I%Q?6F}O9Na+n(MNd)Z&`v%Q0EkpXaE`+rxANWUW9b zu50c#+gOK*!-0dV0$^1E0K^gr9*3Jh!4W=!!{|r!grTS^7#uGD`2AGmkrDcu0Dv9m zpRYI+QC8pDySylSwHTDI=6Ta8B#cYe1-pJW!|g#*$;RW4aw{5-uA3U@W&xe@u{S=u zX+{f=f8b`qw_!0wHJtB19KSr!rAJ;Au%1{*YpLY!l0uQ#$KKf1L>oTx)77{OQJFSI z?4#?Z8oYVIsf{76DhLF;)Srq-zySc_bE^RW0-?AUd1dYG=oC7d>0I0r{Qaf4*9A4Q zmuPEH7x_E>bUoqHlQaOpi|h(2nYdx5=i}sJi3GgNshsiOzsujK|Ng5&Hj_GQjNO?> zX~>(&*BIQKYRC=zFvHypo*9yv=S80>N| z3{=HtQr8B#B9G)(aTFC62!(1B$+ed+5Un^A5uQ+Zc+I5Evpgsy0;<3?Hw%GKbmLhj zeB^R;mZc$Ul!ZR@wOsm{N+A)s9Rk!%Is~FnAM4}m1EcoLJH26=i-j(#fKoH>^TsT1Aca5%tXP+Tqb z_pX>|qQm_0?>P7rg+c}ZYz%b|_Oy&hEIx2Ek;S0w|Hz+4mU{d3AS?nNALMEMN$_a+ z$jh9{f+`L)Dum!@rn4;2g-F2LnP{&GazougESA(F`e&0znE?PoysR{6WK_wat||b4 zg}&wpeN7TUs#ecOWyNM!_7(*MW$ewVXj*pg{-flQV`~HFjkSZ1>u69KTG{~s8)tj} z{^|6YzBVGUn8WQbWHaG1Azn7m_ALq9Hq*&mciH~%)S_AxZ&Mq8?Qf5-zsSEGU$FOT zJc~hbwbVnhE9_(WIhZ8;vYbNdo*)GPaJc-h&qV_O67#FmOX^0B=(^X|IX;`;_r@#e ztv}1GeBaLo`n+nI%ZHO3QR)^5hvZ5TnT-B#pup`A{27sUAv#-a3b|0;UV%uQR8%+H zuhUewOEf$lPb3nP$V31@dP&`+<`D%|8~^|whZBmsJAYBBC5wN$ZK%zh?qPXz=bW$4 zML$R^Lh@dU&KAGv<>Xay0085i;d>i$~esmZ0Qt;002bPcm@6>x0VG$acwiV zpo()hq2OUs5ns@)yo&nP`Fn1xnm#(v%|cI$QQgG7@+_yakt-{#+GgI$BM(2DG1}9{ z003NiN&VsQq;2ne!38k-w%8bKsv7sj+>>XJK~>j3~tYn$cX>Pc$JM^i`H7_naG%Nb)TLYJ^0)^$fC zl)n-Hz~SO`dGV+=;~3Xm((@3wyVSo zVX&!cknj@lxQ(G6vwUq%K1@3snJE@aP`q~&3bwrO9qMa)@oCq<@B@Fxtg?ozvIYRa zcxSV!#qZt68tWM7K8wQA=A8UEd^ifMDITG+vow4J0llz(%g@IDl;Z+kg z>0~oqP2|D%yluSgjGkwfAG-CbS9qB;vb(kZibD~3m0jXM+1tY7|8YP0i+R2jG9k01 zeu}&0bPub~e}4#_4e_>~;%0F@Ha9W9rnQ|v!Np?1c>7x~3y>o)WkBrDS~g(QiP9sc z-|i$nNtLro*t@()^x_y$RbB@(9hS@@w2mfCN0U}si`C0i$=J_&NmD6L<6B;rMO1$1ir>8RK&+exF$|1-;z&7_vrweGv|>SmnE(KMD$dKC zs@%#ZjK#s;vet;r2-^}YcTorf6Tb+nZ&7*pIiy>60C^P(%gT^7#m&;+#cZU7o}wvr zI)y~1kn}WZ4yM}E0QfXybX`mPt+;~gFY;uYu(zzm<8j|D9;2$N-kw)g42ISnKwh-4 z7*x_sAKUlG+B=%*sBw2aP1?$-BbQEg3X94*{WzneQz(~JC7`VRIB?`>>1C-t!Z2vv z0p#r#mI0fwJkVv%SbJtdn%@syEo`SaA^RS6Wl z_|D!%)4#dG7pUwKGdxrUklqa!zX)A2dF0!x3WkXe^VH{4y=~B*I?4lOErUwhwRj93 zufAiddc4?}>1~bt%H#2x+B!Zta{u3~Du8@qMWvR`AMckWA^`+jROE2 zx&5jZC;E2LH~@f`ozeKM=K%l<{hi!x3`Xc{Jxwd~b2L71BOx)rI>^&{-gt+OPGMm+ zXWzA#s`8>B`^?yXJs!2s%+Jwe(L^U`PlS)X@$t{5-*}OG;AR4qLK*LD^7VWl4H`Kt zs%ySfTZ4LL!?c2G&UcsM#A3+|FRQZ~r?3A#GQFf8Ss=HfamU%GVu@sypWT)1vsNCu zoASnO3m}E{I3H$fENfSnzRW-IPne6=G&;N)elAVjjdDs|c zRjThbB==2}UQ&nrszD>~S~7nB_4w@a1^~Lf+97)%CYP`nl=r->U|}tp=*Sm}HlBD2 zd1@r&RsXnr{KlE?AOHFQF3=$muKz6p@^*>KuKZc>zwW+N`Q31KFJK9ojML=I^9fMa%@OZqxW3ta}ey^y8 zb2&OIN#1rV6zZCJ2X7{v*)*e>*NFqTFV8*e(Kk>ouaYG{nldW6um<_VAbY2|S$w~E z3;>|Gre)31M^y;-(T7PT`#zemY_ikMmjz@ZVS=;C(#cK$0DTr6;=T8(@Yl6dR!(!h z`YfAFB2F4*{_!+d00465AI|xcKasy<`+~6_PL$e{(~H=CIx0L~z5|Bb)@4#jVOxTY z-g=`V1i4E(Dyb@d|03iv{$Ly7%YsTK#_nIT_sWYaG1(|y29;!Kpk>IW2fB{%wKv*z zDeiG<_g?L}V{KPWbzw89Jig#XcGa238GmgG+IH&6-Gr{e;|Kmu>q6YLHE7%p!L!Wr z6Zez<{%SU|fYcLQ@(bw3#IFiOQY zl#{uxTwy7yO%Y38M;nJfmSh1V&TNJd*3pbB&g3u4VK zZ!D{CHPh8-Z0)!jn|tR~QB`C2LlQz=Gw)GyX=F;-hM8^)C#Wz(VP(jYJ*cRbL%gh} zx{XkDtK_0OLl)ieEo3)?NG z*TUmxmo=a+gtv-}A8Cpz&?PJ+>$TWC0v`YO^IUkPPcFm~$)VdxUbcodMywv}djm~6 zdIY4%T2me7*4ZA4?$aq0{cz>wp;Z%=h7%* z(Aq1~tDQfwHKZ$yAMt*k%Yg@`_C+8XPD^H zQwEA^nSjUb`fx19;?ju+=~=}pyPo#Qs|<#assI3bT67MVkK&!~VKK?Y>~?%XN>N>F zd#8_`5z4FG&%x-w3;oVUW)@U&j9An)L2hOBtzl8!vlZigl7L%@z7qY!%Z^B~XYxT6~I~Vxuy8N=o zH3_xVtfxt@Xh8R5c80|UdsOLm-%5{cEE z`{|2k#>Z1#Kl}YbJHP9_aOr7QV{1Dehr95_%yW@x002ib-F-I`o9?6@TN|LQL2Yd9 z008J|(sq8}`@@w!R22Z=z1_Fu9>4pl=ROH2jKD6VNfb|+DJy50hIEsGJp*amFIbPuaT zw_cronAX-I007XC_P!}eBH;I4jX&`)ecK#QwRy2I;QdIIpIAuNQI`7lrrH>VQOGQp zzlj^dOdsojQ3_=$k$`W{$0)yY(pylemTNiOW-fo<$CEkSj@I^08kO2A6IluX(9Gjk zG_+MTwE5Z_1$$b`eJc%VRRL9ng<@S7;;#I)h1Jb+qa;Ew)798KOX2(i0N_eY7Ch0{ zZ|Jd>_g#O9{3?-vFV93lpW#~m^mrunVehpB=mR{7byz0CyOO*Z7!0ZcD!mF(tP@6> zjdM0t{_=km@021E@Vh@8i;8W8M0FGQz>Rq2xq1b|pmhh3S6N}9SeZ2PHw(uqPt4;B zP(F%CtPL9FXomGl{rIT9 zdxyv8N2ixz6zFvfo7Npb-kyae%er`ybC9RC+`@8E-NgOtNv7OWS`5l}i~KO=7n<5S zkO46J0mG?v2avai&butDpM%M^xjxEsOC(_L)r58h%Z@wdd1E_6@45T}!-cEYp;9fU zA6waXzho!^=~JX^oOcK|M(l&D15}!AzZjjZD70&+kM%?sGmLAWrj_1%rLbq#>rnN- zi_8Qz2%i}P%d1dWvaE(|#_`XlGi9P3V<0}a`qyyzBWeHulvfP{{x0Ud_*A&}-}hw? zZaVq&S!M+ormZ`Gyz-wtvaH$~v=bYGRmwV%ThX-rY>Y@@Nccg7;o7hX0(1QWU*; zP=U`^|3}XEAGz}bU-S(HqL%i~;+p2NDRW_3n;A-w;XJl*4(q>Wt0M$+0sI=0s zCmB_$F>6^SKJ)61bF<@K!<((CaWG;)tyg$IeMCXX_U z-@nLIr-yYH`ElM&bu~_I2sS~agTh8!PSvhUadj#NVic*qQFFk7-MTA(eTb1^HT-36 zM`!1W`zg>isdXXl>t=Mjhm3VH-G5!-LVK^PYVjoJP+wbfJrj>UNvjt%S(dj)$Yxm0t(4P9GktB5U!fR7Z^H`#%CNd3!1?g%NmpVF z58OyV#TE?qwC)s&?;y6MUyjb2GuD2Tg+3JEN{c~h>F8nj1!Y(b_O!G&VHef39Juv5 zt+*?C7CO$miH^p;m6I_X4Uk|lC|}O=R?gCHghgfj@A7k1uY%FLJGc6R_x$D{900~T zOjIt+D>5kyZH(Bn{p^rOB3`4PE^6B=6p0VreEHyY{twIiukDz<3ujnm zFzC@4<$0By*z8K7NIcHTczM9c5&D{6pO<tH0R=+w>%8iD;~dNp zipR*XN~hCBV#(Ii(Qx7H@)4}TR1#oJCsX1odSsWvYJq^cNH(v~?sGkt6h-+uiULfncntTyrF zj~-$&E7k_P+8D7E?S<(f!|LF~&{7qYVHIP{JI%vt>zwZ8#bz#l%ZW%hrJLHk5Rkmy zc1F9FPH1ZDn78L

    #ZBMHyBVrMje3hyVaZp5*`lUb~zjkvbbz`wc@&RS+;#HQw25 z@A8RoKQ~r3t3e}q+8QqW@s^@k^Qa7~LEg4gMw`R^s!$(mPaA_<@dar`^#YN2y1PZ- zX!D=0C&+zbVf>2*sj!Bks<1)8<0+)>+Q#E>sMUQ2Rn4H>sMc+57cAI&Q-B#Ww>!gX zuzPlS<9|*>#piZy2HtiidbY34d*0Si#*O^Sri~|}o@dE%F2|nb9*n{oeyZv_$hNLX zEEXvdjOR*pR`@G9Ns}cKaQ#L8^%n})=%5U%NZz*gPNe%kghAKGdZ#MoF_?W&2iFs8 zXsHUyu&QM1^7sPTzx5#Tgy{?3ZebNwb0EuyinXDLsA7Y>mj8vk=vU$Jw)P!wzwt^5 zYuH=+j&ayxkdsCeQs{#N3$L=Q8a=3~ztj1I^Td?Q^~FCl(#Jm59fId1LL4ub;By zz`dfHt_ZQe{*w&l5P^5|A``TNo-(*Xzl*6d)g80v{%`{Tu+ZO$N+ve(1lC5Zzt&V&1DWme@ajqWTJ#Toz5@Ulp|5GCs{w^V0RWJR_-kLze3n`9ysLpBsw%awZ5K-T0#OUElP?gFiFgZrO-&m4+l7A6SutiZ z1hsiFa;TQnwv-?;hj$9a`BfYvZK>S@NM6|lttg-hK)gx`Yw{?w9rJxcci;LX$korm zh)E?S=2!2z@}j1R3jiSC@e#WhM5UJOz7&hR>X+4lWD;TBQK?kW!%tN_z5pY`Dw#~? zOK+ddui^jzc3+MYh{R+f9wWo*TiT0}Llp%_Q|(*v-90cQuiON!NT3S9^{nh#p$3h7 zacc;bMA(1*rz!vd zlwo!6iivJA9bUP-^)2m3?j#>yAGq(M3IAI zOXX+u2=cJdq?02Oi{c`ma{h4 zJ=D(*ejbK++qAaxqYz0uho!0j05@Oc-h6=`70&(P2E_aKbE#8_1+@TxsI;=EG^}vF zy<%@nX2nN`A3!-&FK!J%P(|ue?yig)D%oXBE5~ zlJmQra*_*c8e7{P%(^^^+S)s>$L1{bcY@s`XZzXRj?0HP2n<(M4Q5^_hw7u`((Pws zuEpl=TBJV7`gnPIM{>E~bq z0B|(Zu{YJe_U1h}7;1S?@m|~-+|Rtx85J}#5t*`7i$OX1$>jD<;r6pJLXlW5FET-^ zTtEe?TjV&GDkUsFAAKbOk2lh07T0#?#;Is%eVAOlaH10cAk^13si3B)r;M>ZVpyuG zA9%+&7+V=igU<1x z>Kp)|r%6Z7c**kWYSI*K8tWF8SR%O;lM~`)1^YXrtljkI<0X?vu9z~azL|IYUeX`; zVUtWW#b6SMhcO|P*D{GD8njj@73pdO>G@`9PZSHsTZGS0|4wz*gsy2 zZ))Q!%COoO_G08v{o+j5UZ5U%1HQV5%{$}!n~DlZy$XN3oATS;6h*96jcuR*{t)}8 zl-0EW0Pen)v4n`yNHQV_@GLc}wqPKPkDjM1_GOP|cdzIu> zHqJW$0H;LAkgaol(o5(sWywibCX-=xbEuoz zyn|U)K<)&o8m!hvEPX9Tu$Q&Fjp3RjJv`MEVJNDKDDBNx*TQS&@qbt{wwc?B5#t`p zu$os^>uIGo)7SQPT%M}DgIrZW*1JJ2>l8Q3gR29Ac3y$rbh6mJbiy=utNbd?kvqvr zm}~WlFeFrk@@^RXtvi6cQo+$$*VBVd!Mqxc*i?jdGQ0n f3gI2^Fy{R~>9-&TB%jkD00000NkvXXu0mjfbCsMo literal 0 HcmV?d00001 diff --git a/2024/24/24.py b/2024/24/24.py new file mode 100644 index 0000000..a05b455 --- /dev/null +++ b/2024/24/24.py @@ -0,0 +1,212 @@ +from collections import * +from itertools import * +from functools import * +import numpy as np +import networkx as nx +from operator import * +import operator +import z3 +import re +import sys +sys.setrecursionlimit(1000000) + +s1 = s2 = 0 +# coords = {x+1j*y: c for y, r in enumerate(open(0)) for x, c in enumerate(r.strip())} + +# d4 = [1, 1j, -1, -1j] +# d8 = d4 + [1+1j, 1-1j, -1+1j, -1-1j] +# d4half = [i/2 for i in d4] +# d8half = [i/2 for i in d8] +# def adjacent(coord, dirs=d4): +# return [coord + d for d in dirs] + + + +initial, instructions = open(0).read().split("\n\n") +initial = initial.split("\n") +instructions = instructions.strip().splitlines() +instructions = [a.split() for a in instructions] +import random +# random.seed(42) + +def solve(modify=None): + states = {} + XX = [] + YY = [] + for line in sorted(initial): + a,b = line.split(":") + # b = "0" if a[0] == "x" else "1" + # b = "1" + if modify == "flip": + b = str(1-int(b)) + if modify == "one": + b = "1" + if modify == "random": + b = str(random.randint(0, 1)) + states[a] = int(b) + if line[0] == 'x': + XX.append(b.strip()) + if line[0] == 'y': + YY.append(b.strip()) + + XX = ''.join(XX[::-1]) + YY = ''.join(YY[::-1]) + X = int(XX, 2) + Y = int(YY, 2) + Z = bin(X + Y)[2:] + + to_op = { + "AND": and_, + "XOR": xor, + "OR": or_, + } + + target_to_op = defaultdict(list) + G = nx.DiGraph() + + prev_z = set() + for a, op, b, _, target in instructions: + if target in swap: + target = swap[target] + target_to_op[target].append((a,op,b)) + G.add_edge(a, target) + G.add_edge(b, target) + if target[0] == 'z': + prev_z |= {a,b} + + # G.add_edge(a, (a, op, b)) + # G.add_edge(b, (a, op, b)) + # G.add_edge((a, op, b), target) + # if a in states and b in states and target not in seen: + # assert target not in states + # states[target] = to_op[op](states[a], states[b]) + # print(target, len(seen)) + # seen.add(target) + + + + # "kth", "tgs", + + seen = set() + last = 0 + while len(seen) != len(instructions): + for a, op, b, _, target in instructions: + if target in swap: + target = swap[target] + if a in states and b in states and target not in states: + # assert target not in states + states[target] = to_op[op](states[a], states[b]) + # print(target, len(seen)) + seen.add(target) + if last == len(seen): + return list(range(46)) + last = len(seen) + + # print(states) + z = [] + for var, state in sorted(states.items()): + if var.startswith("z"): + # print(var, state) + z.append(str(int(state))) + + + #70364449079294 too high + Z_real = ''.join(z[::-1]) + ans = int(Z_real, 2) + # print(ans) + + + wrong = [] + for i, (z1, z2) in enumerate(zip(Z[::-1], Z_real[::-1])): + if z1 != z2: + # print(i) + wrong.append(i) + + + if True: + + xy = sorted({i.split(":")[0] for i in initial}, key=lambda x: 1000*int(x[1:])+ord(x[0])) + print(xy) + pos = nx.bfs_layout(G, xy) + print(pos) + + colors = [] + for node in G.nodes: + + if node in "fgt,fpq,nqk,pcp,srn,z07,z24,z32".split(","): + colors.append("red") + # G.nodes[node]["color"] = "red" + # G.nodes[node]["c"] = "red" + else: + colors.append("blue") + + for key, p in pos.items(): + if key[0] in "xyz": + p += np.array([0.001, 0]) + + if key in prev_z: + p -= np.array([0.001, 0]) + + print(len(colors)) + print(len(G.nodes)) + nx.draw_networkx(G, pos=pos, node_color=colors) + from matplotlib import pyplot as plt + plt.show() + exit(0) + return wrong + + # for line in open(0): + # n = [int(a) for a in line.split()] + # re.findall(r"\d+", line) + + + print(s1, s2, sep="\n") + + + + +nodes = set() +for a, op, b, _, target in instructions: + nodes |= {a, b, target} + +nodes = list(nodes) +for n in list(nodes): + if n[0] in 'xy': + nodes.remove(n) +# print(nodes) +best = [] +from tqdm import tqdm +for a,b in tqdm(list(combinations(nodes, r=2))): + # (0, 0, 0, 0, ('btq', 'jss')), + # (0, 0, 0, 0, ('nqk', 'jss')), + # (0, 0, 0, 0, ('nqk', 'z07')) + swap = { + "fpq": "z24", # GOOD + "srn": "z32", # PROBABLY + 'nqk': 'z07', # MAYBE + "pcp": "fgt", + # a: b, + # "nmq": "pcp", + # 'jnv': 'dpm', + } + swap = {} + ans = [] + + for a_,b_ in list(swap.items()): + ans.append(a) + ans.append(b) + swap[b_] = a_ + print(','.join(sorted(swap))) + s = solve() + s2 = solve("flip") + s3 = solve("one") + s4 = max([solve("random")] for _ in range(50)) + print(a,b, s, s2, s3, s4) + exit() + if len(s) > 10: continue + best.append((len(s), len(s2), len(s3), len(s4), (a,b))) + best.sort() + print(best[:10]) + +print(sorted(best)[:20]) + diff --git a/README.md b/README.md index 945a45d..6201c36 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@

    - Advent of Code - 256/496 ⭐ + Advent of Code - 258/498 ⭐

    - 2024 - 46 ⭐ - Python + 2024 - 48 ⭐ - Python

    @@ -74,6 +74,9 @@ + + +

    2023 - 50 ⭐ - Python

    From 16f97a337386efb1219b9ed52fb2bffbc8c0bb2c Mon Sep 17 00:00:00 2001 From: LiquidFun Date: Wed, 25 Dec 2024 18:41:33 +0200 Subject: [PATCH 225/225] Add day 25 --- .aoc_tiles/tiles/2024/25.png | Bin 0 -> 9613 bytes 2024/25/25.py | 9 +++++++++ README.md | 7 +++++-- 3 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2024/25.png create mode 100644 2024/25/25.py diff --git a/.aoc_tiles/tiles/2024/25.png b/.aoc_tiles/tiles/2024/25.png new file mode 100644 index 0000000000000000000000000000000000000000..6958d221ac106ac8e0cce4c0a8a5690c8799c388 GIT binary patch literal 9613 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 O0E)6|GL=$hU;Yo-X5sVz literal 0 HcmV?d00001 diff --git a/2024/25/25.py b/2024/25/25.py new file mode 100644 index 0000000..016f363 --- /dev/null +++ b/2024/25/25.py @@ -0,0 +1,9 @@ +occ = {".": [], "#": []} + +for schematic in open(0).read().split("\n\n"): + counts = tuple(c.count("#") for c in zip(*schematic.split())) + occ[schematic[0]].append(counts) + +print(sum(all(k+l<=7 for k,l in zip(key,lock)) + for key in occ['.'] + for lock in occ["#"])) diff --git a/README.md b/README.md index 6201c36..e45b12d 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@

    - Advent of Code - 258/498 ⭐ + Advent of Code - 260/500 ⭐

    - 2024 - 48 ⭐ - Python + 2024 - 50 ⭐ - Python

    @@ -77,6 +77,9 @@ + + +

    2023 - 50 ⭐ - Python

    pFad - Phonifier reborn

    Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

    Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


    Alternative Proxies:

    Alternative Proxy

    pFad Proxy

    pFad v3 Proxy

    pFad v4 Proxy

2023 - 50 ⭐ @@ -314,6 +314,24 @@ +

2023 - 50 ⭐ @@ -237,7 +237,7 @@