From 52771588ee4e3d28f3edcd44bd6cac6396afa145 Mon Sep 17 00:00:00 2001 From: Roland Thomas Date: Sun, 1 Dec 2024 11:34:22 -0500 Subject: [PATCH] Add 2021, 2023 --- 2021/day3 | 1000 ++++++++++++++++++++++++++++++++++++++++++++++ 2021/day3.py | 12 + 2021/day3.sample | 12 + 2023/day1 | 1000 ++++++++++++++++++++++++++++++++++++++++++++++ 2023/day1.py | 79 ++++ 2023/day1.sample | 7 + 2023/day2 | 100 +++++ 2023/day2.py | 62 +++ 2023/day2.sample | 5 + 2023/day3 | 140 +++++++ 2023/day3.py | 94 +++++ 2023/day3.sample | 10 + 2023/day4.py | 10 + 13 files changed, 2531 insertions(+) create mode 100644 2021/day3 create mode 100755 2021/day3.py create mode 100644 2021/day3.sample create mode 100644 2023/day1 create mode 100755 2023/day1.py create mode 100644 2023/day1.sample create mode 100644 2023/day2 create mode 100755 2023/day2.py create mode 100644 2023/day2.sample create mode 100644 2023/day3 create mode 100755 2023/day3.py create mode 100644 2023/day3.sample create mode 100755 2023/day4.py diff --git a/2021/day3 b/2021/day3 new file mode 100644 index 0000000..4b57032 --- /dev/null +++ b/2021/day3 @@ -0,0 +1,1000 @@ +i110011101111 +011110010111 +101010111001 +110011100110 +110010000101 +000111001111 +001111110011 +100000111010 +101010000110 +001000100011 +110000000100 +000100110000 +010010101110 +101110111101 +100000100111 +111011010111 +001101010010 +010010001111 +010101100001 +111001101101 +110110000011 +000110111111 +111111100010 +110010101011 +010011100100 +110011010010 +100001111010 +000101000110 +110001000111 +110110000001 +101011010110 +101001011010 +100101000110 +101010110001 +111000110110 +111000001111 +010111101111 +000001001011 +000001111101 +000111010101 +110101111110 +110000100101 +011101110101 +011101000000 +111011100101 +011100001101 +000010100001 +010010010100 +001010100110 +001111110110 +111110101001 +000010101101 +100111000100 +000001110000 +011010110011 +111111110111 +011100010011 +010001100101 +000100110101 +101101001111 +001000011101 +101100000000 +000100101000 +100100010010 +111010011011 +101010001010 +110111111100 +010111000001 +010110111010 +001011110110 +100010001100 +010000000011 +101101101001 +011110101101 +101101010101 +011011101110 +001110110100 +110100101000 +101000000101 +000101100010 +100000111111 +110100101011 +010011110110 +011001100110 +011000100010 +100110001101 +010011110010 +010011010010 +111001110011 +001010101100 +001011100111 +001101110011 +110011101011 +100001100110 +011011101000 +001001011100 +110000110110 +111100010010 +011110110100 +110000111000 +110000001100 +101110111011 +110010111001 +100001010110 +011111110110 +001101010000 +101110110010 +011101001101 +011100001001 +011110101111 +010000101011 +101110111111 +000010100011 +001010110010 +111101111011 +000101101010 +111011101011 +101001000001 +100010100101 +100110100010 +101001111011 +010110001111 +010001000100 +100101001111 +100100110101 +011010101110 +111100001000 +010000110001 +000101000100 +100011011011 +101101010111 +011110101000 +011011100110 +010111101001 +001110000101 +100100100011 +010001110011 +000111101111 +001100011000 +010100010011 +110000100011 +000010010001 +000101110111 +101011011101 +101001111000 +011101111010 +111011000011 +110111100101 +000110111010 +100101011110 +000010000001 +010110011111 +011011000100 +101001111100 +101101101010 +100011100111 +001100100101 +111010101101 +010010010101 +110001101100 +011000100101 +011010100010 +010110010001 +100101011010 +001011100001 +000100010001 +110001100000 +001011001100 +110111111001 +100110110000 +001110101001 +100001001101 +101111101101 +101010001110 +000010011000 +010011101100 +101000110100 +010001001110 +000111100110 +010010011100 +011011111100 +011000110110 +101000011110 +110111011001 +111011000000 +101000101111 +011110100111 +101000011010 +011100000110 +110100001000 +010101100011 +100110001010 +001100111101 +101100111111 +000000100101 +000110010001 +000010101011 +111100000001 +101011001000 +010100111111 +010001010011 +010001010100 +010000100001 +110101001011 +000010001101 +101110011001 +100010101100 +110000011111 +100111010111 +010100000110 +000000100010 +111001000100 +000010110111 +111010000100 +101001010110 +110000000010 +001110000001 +111001100001 +001001001011 +000111111000 +000001101000 +001010100011 +011110010011 +011110110101 +101010001011 +110110110011 +001100010011 +001011000011 +100011011010 +101001110011 +111011111111 +011100101110 +101101101111 +011001000000 +100110011001 +111011000100 +001010110001 +010000111011 +101101111010 +010001111111 +001010101110 +000111011111 +100010100011 +011001100101 +010010000000 +110001101011 +000010010000 +011001110010 +011111111111 +000100010101 +000001010001 +101111110010 +010100001010 +001100101110 +010010101001 +100010000110 +100110010001 +011001111100 +000000111011 +100011101000 +100110101101 +110111001110 +110101001100 +101101011110 +100100111101 +101000100101 +011010011101 +010011110011 +101110111000 +110000010110 +101110000110 +001001100110 +000001001010 +001111011001 +110100000011 +101011010011 +111010101001 +000100111000 +011001010100 +001101101011 +011110011001 +000100101001 +000010001000 +011101100100 +110000001000 +010111000100 +101101111100 +110100011110 +001111000100 +001011000110 +011110011010 +010101100111 +110111010110 +001001011101 +011111100100 +110001000101 +001101011000 +001001110001 +000001100101 +111100010001 +111100100110 +001000001000 +010111110010 +011011111011 +101101111011 +100100000010 +001010001000 +011100110011 +010101000101 +101110001010 +001001001101 +110011010101 +000101010101 +100101010100 +101001101000 +000111011001 +001110110101 +000011100101 +001100101111 +001110010101 +000111010100 +110001110111 +101110010100 +010110111111 +010110111001 +101011111001 +101101100010 +100010110000 +111110000011 +011101011010 +010101101110 +100000001101 +111001010001 +101010101101 +111110001110 +010101010000 +011100001010 +011011110100 +101001001111 +011110110010 +101101000000 +111000101101 +001001111000 +011000010111 +001000000011 +010111110111 +111011100001 +010110011000 +110010000100 +010001101011 +000110000010 +100011100100 +010100101111 +110011001111 +100001111110 +100000011110 +000001010010 +001001010100 +000110100110 +010010011101 +101000000100 +010010111000 +000001000010 +110010100101 +101010000100 +111110101101 +100000110010 +100110110001 +001011001101 +110111011111 +101111011000 +111010110001 +101111100111 +110100111100 +110000000001 +000010100110 +110000010101 +010101111000 +001001110101 +010101001000 +010011011101 +100111100010 +111010011000 +011001000110 +010101110111 +101111100001 +101110101100 +101010010110 +101100001001 +110111101101 +100101001100 +111111010010 +010010100010 +111100010111 +000101011100 +100100101100 +100111011100 +100000000010 +110110001100 +011000110010 +011000010101 +101110011110 +101001110000 +001000001010 +001101101001 +011001000111 +010010100001 +011100100100 +001000111001 +110111111110 +011100101000 +110101100010 +111110110010 +100001110111 +101011110101 +001101010011 +001000110100 +001000110010 +110101111010 +101010010011 +110111010111 +001001011110 +010110101011 +100100101101 +000000001100 +001111101010 +000000000000 +110011010011 +101010111101 +011010000000 +110111000101 +111000010111 +101100000110 +011001101110 +100001100011 +000110000110 +110010000010 +100011101111 +011010110001 +101111100110 +111110000101 +000100110111 +101111000010 +011111001010 +000110111000 +101011100101 +111100011011 +111000011011 +011001100001 +000110001110 +101000111010 +011000110011 +001101000011 +010011100000 +011101001110 +001010100000 +101111110011 +100111111010 +001110010010 +111000110001 +101110001000 +011010110000 +100011110110 +010100101001 +000011111101 +111000000001 +001001011000 +000110000000 +011001010110 +111001101010 +101001011000 +011000010011 +001010101101 +010100010000 +111111000010 +101001001011 +101000111001 +010110110010 +111010110100 +110100100100 +001000011000 +011011011000 +011000111110 +010010010001 +001010010000 +100100001110 +110101010000 +011011010000 +011011100000 +100010010010 +001000001001 +111011011101 +010110010011 +111111101100 +100111011011 +010010111010 +001101101110 +010000011111 +111011000110 +111000011100 +111100110000 +111100101011 +010100000100 +001111111100 +000111100111 +100110001111 +001111001100 +000010001001 +101011100111 +110010010100 +011010001011 +011100111100 +010101011111 +110010110000 +110110100010 +011001110000 +010011111000 +001001001001 +101110010011 +000111110100 +100110000100 +011100101011 +000110001000 +001111100101 +000111000000 +101110100011 +000100000011 +111111100011 +101011101001 +010000111101 +011110111100 +110100111011 +110110011001 +101111110110 +011000100001 +101100111011 +110010111011 +001101011101 +110010110001 +000000101011 +111011110101 +011000010110 +110011110010 +011111011000 +010111100101 +110111111101 +000001101001 +011111110000 +101000111101 +011010000100 +110000010100 +110101101111 +111000110011 +001100001111 +111101010110 +001000111111 +000101000101 +000000101100 +000111011011 +010110000011 +001111000101 +111000001000 +001001101100 +011011110111 +001000101100 +111011001001 +010001100100 +011011100010 +101111010011 +101111010101 +100100101110 +111011011111 +010100011011 +000000000110 +010011101001 +011001110101 +110010101110 +011100011001 +110001101110 +001111010100 +000011001100 +100010010001 +101011110100 +000111010111 +000101101001 +111001101000 +000110110001 +010110111110 +101011000101 +110000000111 +010110011010 +001101000000 +101111001100 +001000100000 +000101110010 +111010111001 +000110011110 +011011100101 +001101111110 +000010010100 +101001001100 +000010010110 +000010010101 +011000000110 +000111000011 +101010011100 +111100001110 +011000011010 +001110001001 +101010111100 +101111001110 +011100010010 +011110001000 +111011110001 +101100110011 +010000000100 +010001011010 +101111101010 +100101101011 +110011011010 +101011010001 +101100110010 +000111101000 +101011100011 +100010010110 +111001110101 +100011111011 +101011010100 +111100110001 +001011111111 +010000001111 +011111101111 +001011001011 +000111001110 +101111000111 +110001111010 +100001100111 +110110101110 +110100010000 +110101010110 +101101000100 +000101100111 +001110111101 +110100100000 +011000101000 +010000001001 +001101001010 +101111001000 +100001110110 +111110100011 +110011111010 +101100011100 +011000100000 +011111111101 +101101101100 +111100110011 +010011101010 +011010111101 +000100010111 +101001011101 +110111000111 +011101100001 +111101000010 +000100011010 +010111010010 +000011110010 +010001110100 +011100110101 +011001100010 +010100001100 +000001110101 +001111100001 +001110000110 +100101110000 +000100100000 +101100111101 +001100011010 +011011011010 +011101100110 +001101001000 +001001010111 +000001100000 +100110001000 +010010111111 +101110100010 +001101110101 +011101010100 +101001010111 +111100111101 +101110100101 +110110110110 +011011100011 +000111010001 +100000011100 +000111111101 +111111011101 +111000100110 +001000011011 +000101001111 +011101010101 +100100010111 +111101100100 +011100001100 +101001001101 +001101001001 +001111000111 +001100010101 +000010111111 +011001100100 +111100100010 +010100100011 +001011111000 +110100101111 +011010010000 +101011000011 +100100110010 +010111001101 +101011010111 +010000110010 +011111101000 +001000000111 +101011000110 +001111101011 +000001101110 +000100011111 +110100010010 +010011101110 +001111011101 +010100011100 +101101001000 +101010000101 +010111010000 +001100001101 +011111011101 +101101100101 +010111010111 +001000010000 +111100100111 +011010001000 +111111001000 +100010100001 +010010010111 +001110011100 +010111011011 +111000111000 +111100001010 +100100011111 +110010100100 +101010001001 +110011100111 +110101000101 +000011100001 +100111011111 +110011011011 +101000010110 +110010111111 +111000001011 +111001000111 +111101101111 +110000100100 +011011110000 +010000100010 +000011010010 +000000011100 +100110000010 +110110111101 +010010001011 +000010111100 +100000010110 +110010101010 +110001000110 +000110101110 +000010100000 +011111000001 +100010011001 +111111101010 +001001111011 +101111010110 +010010110000 +111000010010 +111011010110 +010001111000 +011100000101 +001001101000 +110101101001 +110010101000 +111111000101 +101000010111 +111101010011 +101110101010 +001000101000 +001101111111 +111100111111 +110011000001 +011000111001 +111000000011 +111110011110 +011101000001 +001111110000 +000000000010 +011011001101 +110000001101 +000001110111 +011000111111 +001101100110 +100000011000 +010100001110 +011100010100 +011111011100 +100100011000 +110011001011 +111111011010 +101111010100 +110101010101 +011110011011 +111100101101 +010001010000 +101010101010 +101101101110 +010101101001 +010101011110 +110001000000 +101101111001 +100011101110 +001101010110 +100111101010 +011010111010 +110010100010 +010100111000 +110010110100 +010011000110 +110010111000 +111010001001 +000000111110 +110101010100 +110010001001 +110101011000 +110111000001 +000110110100 +110010010110 +011000011100 +100011001001 +111000111011 +001100100111 +001111101000 +100100000001 +000111001101 +000000101111 +000111110111 +100000000101 +010111011100 +011101100111 +011111000101 +010010011110 +000001110110 +111001110010 +111000011101 +111101110010 +110110010011 +000010111110 +010011101000 +111010011100 +111011001010 +101011001011 +110000000011 +101000010010 +110100110011 +100101010111 +101101110100 +010001000001 +111001001011 +011011010110 +110100010111 +111000011010 +000100011011 +101000011011 +001010110011 +100110111000 +010001011111 +111101111110 +111100001100 +010011011011 +101101110000 +111001010101 +010101011100 +011001011110 +001000000110 +010011011000 +000000001001 +010110100101 +110101101010 +011100011010 +101101011100 +100000111100 +100111100000 +111001111000 +000110011111 +010110100000 +000010011100 +110101001110 +000001001001 +011010010001 +010101000010 +001011101011 +110001000011 +110111100001 +110101011010 +101001111110 +000001111001 +001100110010 +110000101001 +000111000001 +011000000111 +100010101110 +011111001110 +001111111111 +011111010001 +000111110101 +100010010100 +111100000010 +001011111001 +100101111111 +101111110100 +111101010100 +011100011101 +111011001100 +010111000011 +010011010100 +110011000100 +000011101111 +100111111111 +100010001000 +111101010001 +111101001011 +101100000010 +011010111001 +101101001101 +100011110100 +111101111111 +011110010001 +001011001001 +100000011001 +101011011010 +011100101100 +111100100000 +100000000001 +010000011011 +101010011000 +111101101000 +101011001101 +011111000111 +100010110011 +001100110100 +000111010000 +100101101100 +010011100001 +010101001111 +011101010001 +100011000011 +010101100100 +111111010001 +000011111100 +111100101000 +100100010011 +101000001000 +110010000110 +010101010011 +000110011010 +110010010101 +001101011010 +101100010111 +100010011100 +101001101010 +100100000110 +100101111101 +011001001101 +001101001111 +011110001111 +000101011010 +111101001100 +001100010001 +101100001100 +011001000001 +011101110010 +001011001110 +100101110001 +111111110001 +001100010110 +101001010100 +001011111010 +000011001001 +000101011000 +000111011000 +010000010101 +101010110101 +010101000000 +100010110101 +111110010001 +110010100001 +000111010110 diff --git a/2021/day3.py b/2021/day3.py new file mode 100755 index 0000000..d718f85 --- /dev/null +++ b/2021/day3.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python3 + +def main(): + with open("day3.sample", "r") as file: + lines = file.readlines() + + for line in lines: + print(int(line.strip(), 2)) + + +if __name__ == "__main__": + main() diff --git a/2021/day3.sample b/2021/day3.sample new file mode 100644 index 0000000..a6366a8 --- /dev/null +++ b/2021/day3.sample @@ -0,0 +1,12 @@ +00100 +11110 +10110 +10111 +10101 +01111 +00111 +11100 +10000 +11001 +00010 +01010 diff --git a/2023/day1 b/2023/day1 new file mode 100644 index 0000000..5484788 --- /dev/null +++ b/2023/day1 @@ -0,0 +1,1000 @@ +99lbqpxzzlbtvkmfrvrnmcxttseven +q7cnfslbtpkvseven +6threezlljtzcr1sdjkthree4cx +21xfxfourmzmqbqp1 +lkdbjd5 +8three27 +21three +3lqrzdq16 +49threenjdgrmgfnfhcgz +fourmsmjqfmbjvtwosevendcljsdcstl3one +four98 +4sevenfddxgcvdgx +dffmkvmhhdbzjcgrjc5132 +eight4one31nxlnrzvtfvrkfvgbbqmvff +mdmvbhqjt5rkfpcnfvzhkkfbjvh8three9 +four32 +seven6pljhqnineeightjjsvnqblk8eight +6glzfour77fiveone +ntvhxqzsixxcrfpgstwo915onevxz +81four8xkttczb2vj +six8flfzdzl72eightnine +sevensevenzsztgvh4sixbzltzl +2fivehgrszcrgc9 +four53ninedrjllgffrfrtjgggvknine +nineonecxpzzqsptc7nv9pck +sixrqqfkcjrqkppvqthree1 +1five72cxh3fivefive +75349sixnhxjpgtnhqlf +9963onefourthree6oneightq +51fp +foursix2lt7one1sevenone +fourddcmgbvkm8fivethreeksqghch65ztdtsdmpvk +35jxmgctsevennine +mbbkjxfthreetwoqlcrjnlvkrgnine41vkjknnmtv +three7sixtwohpghsdxleightthreetwo5 +twocbtbkxhhcdrctkc14hlmdh +4sevensix3ninedss8 +snqhqmffonettwofourgdkjmbjvjpgxxxpzkm8zfpfcgj +3xmpfmnlz9fourthree9pdnzdlcsix +66fourone1 +bdkfdqvkmmstkhdsbbl5 +48nfive +twothreesixthreecvsskxq3threefoureight +1vkseveneight +gskgpsix4lhrtwo88threernhqnnfqdf +nskfvvncxfourninehkrbxpgdsk4 +vlm3qszxqnnzz1ptcvdxnf +xrppvsfourfive3sixthreebvbdkpckgheight +pckngkbfour3nineninepqcxvsqspbthmhzrp +pbtndgpfkhpflpj39zkpjcnine +954fourvrmftt +2xjrkdb8mzcfkvbdcx6 +plt462 +mcmzfzcdones2seven4 +8chnpnqmbx946eightkdjvhkkbtthree +6zgvqslsixnine4fivethreegqqpjz +9twosixseven4 +7seven75 +four7sevenmdj8 +6r219sevenpcvfpmfxxl +dvxjblhdjqttxdfourhhrgdpmvvone83 +one3sdnfone1ddjlzhgninethreenine +nine3sbj5msppfonetwo +14tgmqlnh +seven5xjncjmggjppmnsx7fourdzxrsck +j1hphv +61threejjlccdzvsevenjqpbjsphdq +pjmsphdtwo5x6vjzmvtkfhk43hknqc +xfpbzdl6 +twosix3fournlddsqmfbpslstnfiveonezfgoneighthtl +828fivethreetwo2 +fmrgz5sxrrd +one88cjcvxddjmczjznhpnvsix +two9six7pkgttqdnsbgfdcdsixmskjgfvvlvqvdx +six7eighteightq68eight +seven4bsrfpxb6threesevenmgxfmfive +gf74fourjdflkdtrvmljskxsix5three +xsvrhh25 +2sixtwofivez813four +kbkclv3onelmf4ntxhxbrppsixsix +8nine9hstninezzbflnjfxrndcpzknk +1hjlnsszbmtjtwo +2one146 +9jdpnzgqrf +1qfbhl83threezxcrdfzcbbqv +p4lcmztns33 +xmcsevenseven21jjfphz7sevengxlvfrrj +jfkmdmrfhv8 +73spzlbvnxsqsvgpbkl +kkeightlrnj4three +4qxzfxjdmrddlhxfive173eight +jhmvxpbeight681gj6seven +mqpsxqpxj3nine9ss +fourdjqll2vbqbtwo +28fivesix6one +pgblvrqlnjfdtvngfbzpl5njsmvshn5tc +eightvvh43nine +dpxc5oneonebdbkheight +pveightwothree2kfzpkks3ljxnbp +vknl4xptptjjp +4twotfour +182eight +ninesixqkfbhgtwo3 +twoseventwo4fivethree3one +sevenoneeightnine4sgkckjszmp +six4svkqftsrdzk +bhnbm96fivenineszx8sevenoneightkdk +rjldcxl8cxkpsdsdpgbngqeightnine9 +5two6bdrksqgd +threestrhsdtmnc998xfdtfg66 +bknkttsjf6gonesixeight +nine6one9jnqf1 +qkrpkv95bd11two8 +dksqfpmb6ttt5twothree5 +xxhrnpjsvcq7nineonexjkcsrbxr6one +hsmdgfvbsk76four1sixhfn +ninefiveeightrflsdc4one9 +four73915seventhfmjjqgxjzsnxvmnl +seven9phpseven9ftwo +59121fivep4 +gg3eightgdngqf +4zbthb7 +rxrhprtfb4ljdzqfmhgbzqzmrvvj1eight +zkvmsrvtk3two4 +ckbk8nine +tbbkxr844lpkgjvmsix +onetwo8kbxqgvsevenmrhqndt +ptvgfn6rnpfkxcc52 +three1vd +fivefiveeightdrljdrljxc9bjpbqseven8 +fourx7mlksevendjtr1lb4 +6ndfqts3two88 +qh976eightvfch7 +five9xdthree1seventhreeseven2 +xvfmccmmjcjjsm5 +ffiveeight579 +97hcfbrhkfive39lzhgjddsx6 +388eightkrmdktwopjdlpfmfivetwoneql +eightonenine4 +bqzpzbzkbs7nprbdmbqseven8kzr1pflnine +9eightfourthree5four +cclc6 +13one8tkfrmvcjfq4sixjlxj +dtrtwo9foursflc +3six4two3nine +7vkztxh6 +xthtrhfz83six +twofive56 +nineeight5 +one5qmhmvrkktjmvhgxx +4four1 +8one2dljjrvkthreehjdsbpqgtbjm +foursevennine51s +1nine8ddhdnbheightseven1 +nine5five2375lhphjk +ftdrpmmzhvrxcz3vfqnhjqlqxdcrxeighteightspmj9 +qbczvsdl449six1 +seventwohpknrrjtvfhpxpzb3sevenn2 +jnpxrqrtwogqsk4 +three9fouronejjlrzqdrxkcqnd +ql871three1rbhtszd +xfbrnkzshqtwo43twohhfqdddc8j +ninedgj6 +two3three6ninethreefourseven +4bfsl1shdzeight3 +96mcdgv1 +4fivefour4 +sixfivetwo4pjbkcg +4onetwotrnqlgxgtxxrgxpgsevenddjfd +three19 +jbnrs5bgmsixeightxzjznzkhpvsix5twoneb +7sixpzhsbnhrrmonetwosrjbt1jcxflk +74onetdh7 +5one4cmmcmjnl9eightkvhrnkgqjstxnpt +seven9xttdmzsix9tbnjfgmsgfoureight +32five4 +7five41lpscgz +48three +hddfhppseven2 +5ninecbtfxkfrtccfdzplndjpseventfhqkmcm5 +65ninesqgeightjt7 +four3csxzztgbrninesbfzf +2bcnlphn +xsfmhnbdrj31828 +ninezrvbf717six +7hlbhqxseven +2jrvfr5lbqzfjgpdgfourthree7srmq +6sixfive8nine +eight29one +onefour5ddgcrninedgdkzh1threesmcjmntnhh +gdg18ntxdpvvxcn7zk74 +5onesixfnppbf2vxxbntdqvv +kmclhrb2five49sevennine3eight +6jdddgdjbgdqmkktf +26jhvtscmrjthreenine53mldd8 +mkdcpnbsevencjfm21twotwo +3bqzmtnjhlbdszlrvpmvcgclbgfzljk74 +8gfbmnnlltjcmjkmmvnfsgph +eightpcggqtqns2 +ztzrvxglv7three5cmhnbt1five1chfk +9eight8cfzrsixthreevvvfour +3nine824ninefour +nmrjjp2fourd +twoonemgdm67 +foursdmljtklzldsevenvbqpthree917 +3ddzjxlsg69nine2eighttwoseven +6btlmdone8eight +7qhmpdeight +dxlb1 +zp9bqm4176seven +5krrrsix6 +9seven4ninexsgrqs6 +9zzfj98fourpjzqtk9 +svsrlmggeightpgmprpkpj486twot +sevenfourtwo8sevensix7 +zqspkktb831xjlhvfourtbtvpzmlbbt +2gfffoursix5 +8ccqxqm4tsdpvvxpdpcrlmktmg +5fivesix +7fourone55two7fivenine +9twothreethreeoneone +xtzc64fourzkpcqjg7twobslssjln +38fivetwo716 +hkxrxtdjzdzqnrzxfzsix3three +onetwo8 +ppbrqlhvqpcfx2 +rhlbtdddqggnmfour74zcmrkdthree +threesix3seven1one +nine6six9eight +mzmhvmrmtvsk5 +2qgbkrrgeightfzflbhpxctdpg39 +61two6 +2rzbdfmbczxcgphmonexmntkcmdxxpg6 +b6threetwosix791 +sevenmzlmcqxdbfmfj8ckchpkgxgmtmnzcninethree +jvrpkltm9n9p +two3bhlrgqjxbc6crzbvzmz9nqfdtztvqbhcrjptdvm +jdjchvpkcrfive67fivegltkrflqsbktkc +sevennine99jpkqljhfztbqrzm2twoctrgm +rcmlkj5 +lltwo4ninestwoseven1l +65threerzpkhjtzxl3jx +ninesixninebdlfckbp2 +fourdqqklkgcsbtwobj5 +threesix44six2tctgp +9zczcltwo +vr6bmpl +7fivelpfnzgct +ninethreesix1twocqfpchfour9 +1jcj81tkklgrhhjt +pntwonetwotnpnbmonennfblctcv91nqr +jnsfspcg45xkc +8eightqbhmrqc +five5threerhxffonemkbnine +16hqlvzjc +3mzjkkr +kcsrxhsnmqkz3two +9ftxzstqrdjcqddvzdxljz6sixsbxlztnqgthree +threeninesxt965six +4threenine2417qcljfive +4mqzxsnt3hqbhjj +r9ctkhvtl51 +47kmgznjvcg5eight +one5rv9ztvpt1 +2one3htxp3three +74six4bkqsjfgtdt +two2onenine9fourfdqqrmx4one +rvltwo9grrhsvgzr6pmnvrnlxb +ninefourrzgfgcfcvv8two8oneone +1zg5seven3 +six91xgqcs28 +5threemxxntrml +3hjltzgdgcmfmstvgfivenxfour5eight +five1dl8six8 +96lkghnglthree +7sevenvggnkkjvzmjbbjgjhmtx53 +9onetwo +6tmltdjvsevenfourfive +ghqkskqmbnhnone7dphgvqjzbq834 +nllxconethree1 +fivez5lxtfpjxpfdtwo6twosevenkhtmqbm +eightone4lnhlq3639np +8cqcjfxvclskqqnbgq8 +qvsixgxlfsevensixhqtgmnmvk6 +twopfccg6nine4gdhrzdqrbm +1hg72five +kqrr96jhsfxgddncone4 +55xsfk4nqzqvthck4onerldsjx +ninesbcqfdlvl1sixeighthdnhsh3eighteight +rrspvpclvl7eightthreeqtfive +twobfjrmffive6three9kqmqmmps4lrjzjqt +fivefivejjxcmczlsdeighthdxbltgvjgthree8mp +one46mhghdxldbfiveckljksxm +c7fiveonesix +sixnineseven8xqb48eight +2mqxkvdmhgbnx +sixkrknqflbz6 +6four9twogonesix +cbxrknrrddnfour73ninexqdhlql +rjtdxkjfs628eight +xchpj2 +fhteightsdzsjqvhgceight43threefive +426jqvrxqflhch9 +sevenmj3fiverfqzhhpvtbkrqglqzp +2nine8fnz3five7xjzrp +twofiveeightfivedcnpv74 +7fiverkzrthree +gfctwonesevenhhcsvjqfourpfxjmthbcm5mttmfrb +fourjc9threethreetwosixpffp +sf9eight5fivenrlxfkjgq9 +hd48bq +five21sixone +vgkgfvnblrdbeight245nlfnnhfx +3fsdrdmvrqptwothree +ntcx82fivesevencvdkk5 +6gdmmvxcvp5sixthreecjtfkgnpmnthree4three +xpkthreethreeeightxzkdv7mgrbzxhfive +one98 +5foureightmqstc +twothreejrhffour9twosxcj +twoseven5five4ptz34 +1phdclsix +3chbfpvfzj51tbhpvqhninefschztfbdm +113tqmjkzjlgr +kjdrfrnzhvone6bhv8zlllc2 +four1nine +3pkxz8 +four1oneseventcspbzninenineqdg +one9lsmfghl6pxhbmmzxpjjthree +szlqptvcvskkcgxxtfrfivefive28pccjhzz +7sixjhhzhgh +onerxgnxcvprphgpzsixphrkdd97two +twodhqbmrz11lg +5ninectctwo2ninenc8 +hntt5 +chkjc4twokc +threecsix62one8tgnsqxxvpjsix +fhtjrljsevenfchxccpckl8 +nine61sixrqktdm9 +threepkzmnmnmmngxrcq7 +4dtfivehdvcknmkj4sevend3tx +njcvzpmp8gmgvtoneninecnhgj3five +4pvqncghvr4pmlone +2eight4596bs6 +twosix93fclbgfive9fourxnqdhkg +8onektghncz3dcklzvbdtwovsnlrcclpc +221threegtmppngzseven +jrhvplk55five7keight +4eightktndbfzfmskcjlm1 +fskbxxvvsmsevenrzqrcgninemscc8vnvzseven +kbtsf6sixczlbqzrjfm9oneightmqg +vvn3threefour6sixseven2 +6jfourzkhlllkseven +2twodxxhhns4gdjqmztnine +sevensfxztmfive7twofourqbzlzkjc +vqcblfvrgfourfiveseven7 +6nineseven4 +bnfivevbjgfzcctrhncmmnpfzmcdt4six +two8onesevenonecmtddxnfbjeight7 +4sixfourdgmstmsj +7eight97kzxxdbdonejtsjqgjcdlssix +vtvdone2cjzcjltcj6six +ztwobmrvcbfsnine4one +jjblshvzsevenfoursix1ndqlgphrbbfkkcmstlsoneightfjm +5seventwofive +onebk4 +61bgcdfjsevenhhcjjgdqhr +6kdvfpsevensevendg3 +61gslvnlcjlsfgdsflqp1rnqdgktfseveneightwom +rvcmkdtqqglcvsxkntfour32bdptgseventhree +zvsbhkftlpgntvfgfxpcztm9fournmvxjnine +four91nptdgzk8rnmqc +tqmtfsixbcxspjscnine2 +1kvmreighthnine2qxvrckqvgd5 +dcpvrl8two1fivec698 +xqg91snbsslnrptwoeightdzq +gsnvsix4vdmszmjfourfnrnine +9nineeightthree51gl2 +7sixffvf9two +bbgqpxghsb45seven312eightworg +fournineeight45five4fivebrznpkz +dhrsrghxfivejdrqfgkdlxzb869 +8nzxvsmrrcz1one5four +3mmlzvzqptttbbmtgthfive1nine +one9eightpzsmjvnptwonemkf +fivejkgrclbthree5 +5fourtxxxvfthreelxcmghhtkqnrqzvts +1tlhcscbd +99six +53sixthreetwoninedjsvdfourone +fivefour7pbponectstmp +six5tnl164htsv +fivekbkjtjkxfszcqvppqqxdtwo29 +42threexpdfive +9892 +lvlkqlzvsix7gbxhpxrdfh2zcgccjvblhpvxqshmbbjkpgpd +two7sevenfourblphfkgoneone3 +7onenine6535 +59zv +347threeeight +8five49 +73four +heightwosix99 +1foureight +soneight1xzmfs8six7vpxcfq +nine91 +pvxtkphg3gzgvqlfk9vhjvqmgszfivegd +seventwo9six2 +2sqp +3twoeight3 +8slnsxtteight429seven +qfjtthmthree3twothree +txrdqsp4oneqsprgjnnsc +7kqgv3five1 +fourninegrfz2 +seventbbfrvjqlkvm47 +8pkqtpxfxrgpq1 +kqvseven4n5ksixdphmjk +17j +1m3 +ninefivefour6 +jrdmvztnncnhnp8onefourfive88 +kbvninetworblsd3fivesixhvhtxvgt +4ninesevenkpfgcddkninetnhg +9rdzsixsixtfbgzmhsgconethreedfxqqvv4twonem +kvbeightsdtqrhsscpone6 +7fivezhxkkxlsonenine +sevenone7threeddmjmsjrhprn +eightsix5 +4bjmfskbtc37seven3eight +grxbdmppllthreeeight53 +one8jnhgjpdbseven8bc5fivenine +jvlmsfive43gqmpzseventhree +jqj9twosix +eightseven9 +fourninexdzbnqsvkdvbbkb6 +pttwone2nbone7gnpbllbhp8 +sxpkrnshj8fivefive9kfvgjpv +4threepkvz2shljdn9hgrmznine +6seven29gnhtvshpks77fourstkdf +bmnfthree2threetwofive +51 +jghxzhndrkfourtwo1 +jspckbhzfcqsbone26mfhkmqztnine +5fgzbmgfivefive +six18sxvchr +rv7fivebdrtdl5twojt4cx +twofourthreetwo5onejfm6 +threesixeight2 +9jrmdmzvlgnine6cjlphdnine7 +9fivembvhfrlnzbsevenngp73ninefour +sixxtcgjvssevenmfiveseven15l +threeseven6 +cknkdqrnxrjfbn818vstmprqbts +4zfmxjxlkv7rdqhjfourfoureightcgvrpxfnrn +ghzmpsgzrkztp8s4zl +ninefour78rhtjfrqvh4 +one9qzkjtsix13 +sixfk72jjnrninertbzheight +rxhvxzcp366one +24eightthree +teightwofprzdscnts4nv88 +eighteightshqcbqzxmbktwo54fourpdkf +sixfhvgkfourfoursjxnstgqnjh2 +6two1vtnqbrhqjbnkm7six9six +66threeeight +lbdkggsncthree315 +8gqsrmseven3gvvxq99 +sltgzbgbmg1 +9twov6 +shhbqkcc71threecmkl +cgqtpsjkglzszffcnineninesgvj1 +fourhqnlhrrsbrsevenkrgffivefour6eight4 +twojdccnhk6fivelddgrppkldtdlt +4dlkn5x +12sfdtvcqztxmtvvkds +44one6jxjdbsjxpg +7sixfmbbfxnjjhj5qkqfvfntonegdktrfl +eightfourzkdxgqn8 +1fourthreetbvtpphj4rmrhlcbxbrqfdxszfour +eight42onehpvrlbkglq +9five2five5 +bnzbccq26mblqtjxlsbtdvm +nineninelnknxhbfk4xssrlsdmsixoneltjseightwofzf +8mleight7zhfsmsmpdthree +mjcsr5tsktfpzc2nine7 +tmlxbkh79four7 +fiverzrfvlcdnmkn46onennxbbvn +threefournine9 +snz6bcgqlhx +4ninevqjlbfklgz +8fsvsfiveone9fvdfiveg5 +eight5dhcgxjts +ljldjmfmgtzclfhthkdtdthree4 +qrlmdjmkvvtwopdphfpmdd6fourxkblfqcx5 +62glckjgdvnpfourzlkphvrjffive +nltxkzk2zhmqhfqq +95six8xflfzhf3 +zsfvrpjx67 +two4vfivehglclslddsix +gssccpnhjx5128foursxpgrgztdfour +87fourpqdrxmvqdmxfrtzthree +one85fmkj +5rtjzsevenfive1thpzqxxm5 +bone78 +4three83947 +sixffkfmhzfkksevennllffhjvkxqhpjjtfl1 +foursixxvfst6twosbvjfvcb2t +fgzthreekkpffive5four +685jfttdmjq +t4 +xqeightwojhbrrrqgdtbcqlhthreesixsreight7rxxgqntqdqlbnm +stbmgqjdvqfour4 +dfour11gfcvx4nine5 +eight4fourseven5five +six3seveneight +four2sevenltvckjxjhjfslsvgpzxffivefive +27one5vdtkjt4 +fourzpr1gxgone +gtfive5hbqktbfour5g2tk +nine2pqhqgprxrg9hgjj4 +twovcjkcsqznsix557psh2 +1fkpjccjffr7nine3gxzk +5threezzbbvtcbvj4 +8nkbdhct +8eight2 +six17ninetworpc4 +qljgkvq23eightfourfour +onebblhxbnlhztgrkchlbtwo5 +sixthreevmngjjgpfourrrblxqvcl22 +mcnksthree81xrzrrrvnvdvbzfzlrgseven +chjxhjjxthree3 +mrmxzpbxnh4sixrxskzvnjtlkjddnrpkbjhslbxjbkq8fsix +2kgfmzeight +plvslqzpbk7 +xsfq49ljfts +seven2x9hpzbhqzpffoursix8 +5999one1mbnxmrqcxv9 +eight52prffgvvgznineseven +l8onehqzcf +sixkzxvqdgnbbmdtrvhzfouronekmklkjp34v +98144threethreebvcjpllggz +nine7twofive9sevenszvdrq +jnvcprvbgtfourthreed9pm3 +tszbl9one5dfmsmkmlvfrlf +537tmcrdxp +sfcqfrrcqj26 +8fourfoursevensixmlmqzggmrfive +kbmbxz1onelqtdxxk3 +45mxksixfour +7zncmh2 +hzoneightsixfourzzlkmrnzptllthree2tpdjtsszxnjdhkgv +ztpqbd68814five +92gnzsvldmvhhzb8 +ninefour2sixseven1seven4vcnkgklh +sevenfsjrdhclm7six8nlrhdpplbjg +sevenlgd86 +pg75sixtwozk +734eightone5gssxhffscq +5sevendrxvkmfsjkgg5twocqpqlhksrp +seven1cktfl +mrs7 +2foursevenninelpzxthreetwojmbvfzs +2rdsjl1three1 +xrkztslbkgdzgjjtst5six5fourthree +twosixfhlldtwo2sevenfourknbfgnnjs +nine699two9pp1 +9kdlfour8kzfm57two +hlmscnhk1cqqzqbsxqglf9jgpjnfrjczeightspkkzrdqjd +72six7mjsxfxtz5 +3sixonebkfgp +fivefourvslvn2six +19pshkt +739bzfpltmtsevenfour27 +fvps6pprtjlq5foureightworm +qds3zdsgzxvthreethreeeightdqjbtrfjbbj +nine3148oneeight +nineggvmffthree1fivefbkmmfvjkpcgsxrfzg +7vlff9msmx3njb76 +hsthree4jfpvhxnceightkfseventhree +hx3seventwonineklbq7six +38zeightjlxj +jdbqgmsix8 +seven8njthzbdrtninexkplhnrfourone +tnhhzhjccjdtpleight3onegsevenxkqbmqzx +4679scb2 +twos334fourfivefourfour +sixseventwo356 +xnmsevennlr78jlfrbgb +four7krmgzcclgf6dteighteight +94mzfhdk +7two43threecthree +lztbgnscq7ggeightsevengtjpseven +nbcrvpljfive1threefive5seven +fc895 +eightlqzzlgrxv9gdfcrpkxkhzgbjtpcgncppm +8cfjbngnd6371threedczkfqmptxtrqt +6jblvpxskcnine +onexvkxthreebcvnnrctsix1oneightsrd +two66fourfourdnccpl +3fourbqznm +eight9lbz3eightfourmonethree +2qpvlbbb +threeoneone1mjhqfive +2threenine +two6qvxnnqj91eightfourkqxvhq +rtsftmvb14 +kvzptdxdfsrm5four5three +sixkfjjbccbeight3eight +kjskjrnbfs29seven6 +68qxpjrz +eight4cnmx9four9eightvbsvvsix +6xvsptbqcsxlcdzcnzrninehhrjqjsixkk +seven7vknjphhfbs +rjmhjgmpzk22fjmtmtc7spgkfkqgcn +three8ftxlktggjn2rfljxmlg9 +9threehlvtmftzfiveqghnvmtbseventwo21 +pceightwopbpbj3two2eightfive7 +lsdbf6five3nddpcnnine5xvqx +2sevenseven86lldmhf +8rqhnhsrcjnfzgpcclrmnlvbphrtgchpls9 +kxeightwoxsrvcbzhhbpdlrt22fhqfivefptwo +bdseven2hnqccjqgxjvjk86xvbhddlbx6 +zszz4kqtsqjfpqmcxbndmbdseventhreeeight +fourfiveoneseven83twotzblfpldfq4 +tgbxlthreezdfspjsnhrmrqxqj6cplcczt2pgsbfczn +jzdkc6xfmhpqstvzzmvxk431 +7eightqbxcnsgxm +5sixeight +6sixvjstz +4trxhdlkzqvjpzgpvfp1 +sixqhghvddcdn7blhptxp5htcf3 +nineksjvmvc2 +41krm9 +nine42sevenfive2 +zfivepkfqrgpkmxbmjbq6tgktpvnjvdjzsd +gssrnnqmm7sixfivelklmggxgkdtlmlzqp +64qsevenftmjzgs +6nctkfbskghpqr7 +8nine3 +hkjoneight6seventhree9 +11nineeight9nine +845fouronetwothree +pfhb14v +three21kdgcplbzzbeighteight +4cszltd7ninerrmhjqmtrprtccpjnjgdbdtwo4 +five96 +2lkfbsnq64three +srltvpbgnxvlksmfzpj2 +four9tpjvhhpsctclzpnsr1fourcttqvng +gpjxncqsbp46vb9tqgnninetwo +four1four +6dtklvddhlprphffpnkrksfseventwonek +eight4seveneight2onezfbnvjplvl97 +7ndvfp8qstcjdgzcfcninebj +9beightbsbphgrnq1ninesixsvthrx +bpxthreezkhjleightsbxmsdeightseven4 +fivemlfsninesix1nine6six +4fivethree3qtqsbscnc +four7dsix3kfhrrgbbnlzdfbgxsix +hqckztqxgxeightkfmvvjg6tp4nine8 +tmgfmcl2twonedg +fmvvcsix8nineninepqdrcmhdzsixtwohcnrss +nine258foursevensix8eight +8q +pqjqrxnine2one +9sixpbxr43sflnine3 +4onethreeonefoursixonefour +1vnscdrnnfpkrj8mndxbqdrckzgdpnfdone +threeseven7six8three3six2 +jvt24pjtnxdcpsthree +7nxfpnfzrssvqqcnrjnine47 +cflhgfournine368 +62srjsxgr +mnsix6fivefourjdnqfgjvp99two +8five6fdvgctwoeightcsmspmxmbgjqzjhlhb +seventgcdvchsfivefour9nine4seven +bbzvxfvmxhqv26rp5 +2psmsflpgqmb +eightnine4threekgfjmhbkhtxgr4threekxnmspvbfs +seven9two84phzrrvftgpt +xgpfkphfchzptzvconetxcp3qdmdn +five2fddc8hdzrzgcgdtonesix +one24sixtwo +mxfltrcltqjmmtj4psbf +jbrskjdtthvksk9mhfxjgdjt +four96njn +five8tqltpdxrklninednqkmgstlptpjhqvklnjhrvpzvpfr3 +onecsktmkt9 +seveneight1 +nineeighttwo1txhjjkqzqtnine +37onegfcf253 +4ninethreepndgnfqpvqzxbxkpgp4eightwozg +tfxnx999864three +sixthree19 +3nineonefive +rpht1onetztgngmeight +9928two4six5sp +gmhtwooneclqfdqvfivefour5 +two3dkkfive +7four6pklfxjqhgbvnpxmndsixthreetwoeight +5eightthreeseven9 +9fourseven5pmtcdpfvhjj +24fhbms2sixtrjtm +seventwob99 +3mffcdvdqsixgxtbrxqddkrzclz92 +5fivenkmtgbsnsixeight +3seven9hcbmcnjvqfour7 +bvspr4jhjlnddp3eighttwosixfour +kdvh5 +seven7hvcmdfkfour5nine +1ksqzfnmhfqjjlklptmmpvxnine6 +fxp7hljzvndnd2mpqm8 +86qxntjqmljdqpdbftqfrfiveninefcxzdqctbjppc +one62 +two23fivesgtsqpjrkvlbrfknjgcjbt +29gkcpcfdlm3 +ninehzvhg2one +ljv73tpfjvbhlxnpxqxhfivefivezxtzhlfsc +three7637 +rnmkzqgtjpfbn3nine8nine9ttcsdbr +jqtwo7fourone7dclxtnlnthree1 +872fivemjghskxcxmninexljstpvb +9hdjtfkqsb8skkvpfpgqlctvlz +nqnltrnsevenfbsixmnxrv87ffsjn5 +fkxzbxsbbfour17fivenine424 +ccbrxlskjzmrclgchlxlcpkck2 +one9sevenjgxrk33twonepjs +5eightthreefivethreetwor +zxqdnhnk51 +two39xctxpvsmfivenbtsmpcg3eight +three52threevgj8 +1twom52 +3pthscht +8ninegx3f8 +lzjvthree96jgfhfvsbv7qfour9 +threenineeight722ltvvxhdczjfivedcxbst +fourgvlbxrone8btblnlbkmx51 +one5nine93fzxthreebzchcqjbrxxct +3sjbbtbpkr1onectngpqpdfp +5xdgpgpm +nine9onev952 +fxc9seven +fiveggdqqlspfoursevenfour5three +7ninekhxpdgfive +3fmkhhbztk +737 +3kx2sixgrgslpfvvlfourfive7gbk +1rqjxnfmzkvxxsixt +fiveszkkmrtrctjgqvcfbg5r5 +6onefoursixntbbrjxfrfournpjbgcx +sixgpbbbkhxdj4skfrvnnlmmhxcpfnxfive +two37hjdklhtvtwonzhcqrbfv +eightsix7 +four9253njcqvvhtgs +fourfive3bxnvck +ninelsrbgctxvn59six +3jzqb7six69eightonenine +73nine6tkrqsc3kthjdmdtmsixspvvr +8691twothreeeighteight +8ninetwo7nine21qpkbml +3lttttwonemh +8eight9onefpscrm5 +qgl38onevqjbfldcg +dbcxgcfsf23jbb6eight671 +18pzgfqjsfourthree4bvqtxsh +fiveseven7mdgmsbdphthreefivedpzjbjc +7onemmspfpbfbftcpgvxhmh944cvdvlp +96hpgcqlp8six +two5jrrsix4dktmzkqgvb +two93fourninekfkkgdxbvk +93onesdnxqtwo +jxmfmmvlxzseventhree5sfconeeightkrzdcvnhpvmfnz +86gkxpqspnxs +seven9pblxnnkkjffournjlkgqmonedxqseven6 +jtddqv7nzpsixseven +vgjkbfnc29gskmmjmgsrbvghgrbtsbrdglszsix6gm +gjglfour8three7five +seven8ninetc4foursevenxfxlvmt +sevenone21nine +9onefouronevqrsthmlone +8threemsrbrchmk22fivepjdxprpvplt +rsqkrlnfpsixfive3three77 +twoeightseven2threejzgzmzzgqdrcmf +three8lsctcbnhgkpr3 +4ktrtzn +vqhvfxrxhpdgqhcrrczjlmhdnlzseventvtrrktd9twonenqn +twonineeight7 +67sixeighthvfkjhtj5 +644 +onezdfz6 +6qmcd9ninenineninetwo8 +four7nine7 +4hjnndn +1fqfqdqqxdnvhmqcp8 +rrhndnbpjjzhclhv9ppvlbtxklzfivejhxzcbpmd +six7526 +8ninefkhszlp2 +fivesix34twocg14 +3sixfive +2nine3 +2hv4rrfh3two8lr +sevenrqbzmkmcn22 +56vrglvbcdtxxrnjrlhpffr +mfddxflkqd4six +bfsfnkqxc76rtpgss3pkqkksrcxnine +83fivemnjdfnk85zqmssgfffourvgqjbn +822 +dvxgqrbjpnqvpsfthkz6 +4fdlzcxeight8crmrztfdmthree7eightfive +two9threefourtwo8vj2 +nine1jxpclfhj +jrgfxlgblzqnr9mnfrcsixone +5t3nine5 +twogxssevenoneseventdc3 +rvzcbtwofour4sixgfzk +six22eight81ninepnscnlv +eightfiveeightsevendxx1gh +7nzlpbx864g5 +hxgdrrnnsix1sevennvmsvdvccpmfive +1threevz9 +36eight4xvnrghgjf996 +nine8mmtqkffkthree8xpmsbksix +1fivejrgqrjjnql2dvmcqdbjbsix +15fiveseven1td3 +kmfmbhcmf62five +36dxfoneninefivehrr6 +four54sixfzhq26 +1427qjseventhreefiveqhv +eightghnnlddqdpm1 +9jbcfdjzjxreightlcpmdddts +6ninesrdgkrfivefoursckkrfrpqqhgzeightwoj +xmqsnjgskfour8eight +9l8one +four9jghzbrsix7seveneight4 +9tgsvk +sxgkkbnlsbnbbc2ckqhzgdlsbhp +6ktwohsvbeighttwo +xgfrrnrlkgdqfxdtwo9fvthree +5hqdvsdnrvr81sixsqjmbdls +kkghseightsevenmtbtvplcjnqtscx6 +rveightwobhqtmjhsrptpzkbv3ninem +3qpgbd2fourqdsnnbgmnsqgdb4 +mfive12 +52xqhpfdjgmeight13tcn3four +6lkgjdj +rvsvpt144lrtvrtpvd +8fourfive8 +28dhzrtfcjlgchxbthree +vvsixtwodxfz5six +seven7rcp7 +threethree136gts9threenine +9477 +seveneight8gmhthree8 +nn633sixzxcxthree +two95rfcffourtwo3 +76nine +cvhlpzsbmknkqpgsevenlkzvm7hnznjsbszgvxrmdnn4 +pnlqmxlmvkkpdgktwo1four41one +4hgnhzkbmlvkqpqqptd93two +lfsnfs7eightvdnghthree +shpndlkr7five1three6 +sevenfourfivesckjjlzgv27four +xhtpxlqssd3eight6two6 +48ckzhkk84seven1ggsffz +33rqthree6jvqlbzllz +4jfourthree6 +jkhflbhqhtmpmhmonebfbmcmczbspj9sttmnvnvgfivekz +eighttwodk25sevenninenine2 +oneqqxfkffivesevenzqhvjtgjlrninenine1 +2nineseven82fivethreezzqfjm +mh4 +3tjfmrtnff498 +five7three7three52eight +jgrndnjckvc1 +9sixgvv +six3rfpxrl9three1chczskrxthree +6bjqqzfqcxvnxbkpq +922 +loneightnznrcpd6cpfsmclp +7five7qncxmfhleight +bhsgbsdnsixnine4msnfmonerjbpvkqf6five +4xrcrrllzh9two6zgcftpfqj47 +six31two5fourthreeeight +gqhckrzrpltwo72znb4oneeight +trsxcpls3pmqqrskpmfivehdqrptvdtq +six3four87one +46two3 +9fiveseven57vhmq +jkrbkfsevencnvzp89vhmsdcfcthreetwonedrl +9cvzvqfboneffive6jmnpjkvrjz +82xrqjdqchdbvhxpninefourdhb +3bqsrf +fourtwosixsevensix9threesixthree +3fourkgjbxbpsrtgsmgrjthree +ndeightsevenfourtwo943 +471pn6 +bpstsix84four32 +gjkcq89ninegkckjpkz +eightkgvmxlzlhrnrdpttdqbthree117 +vtdnlkqcg65 +btwone727onesevensixkhbnkvtlthfjfive +twozspnzkssqseven413 +7nttlqthreenspcdrhdpn563 +six3nine +4twodkrlmssknsgfourkcfrxskpntnine +qgtgfxhfjj3pslzsttxpfive +fivethree9ct55sevensix +8twooneonesixjlszd1hlhbcgjf +fivetwosixsevenmrzjqjtfourmrk7two +pfnine6sevenone +3threex94znone96 +79two2sixeightqmnbxcxf8 +oneeight5 +763lsdvlz24threed +four9oneeighthdcrzqlnvxj6ninex +7552twojhv4 +3rzxhddcfxone553one9 +sixsix8 +7seven26k +86onethreenine1vlnmvghn +sevenglrmsnngpf3mfblll3seven +npdrbsxxpcpc3jzlpljsnlsrvdmvtr6one +6894one +rjzxs7 +7mllptmtwoqxrpgprvqrstmvvvvm +sixone12 +225 +dcjzmcnbpptwothreedzqctmhm4seven3qhnbn +oneone2six56jsmdjqcznjtwolcjvmpkxlj +2sevenseven +7cpnpkcqsstfourjthreenbzvrdgeightsevenhfnztth +4phcrvcgseven4njn4 +three9fiveninefdv +63ll +9sevenx7 +9fivehvtfdckjnpvk +gpkhmlrxs5two39 +kfvqv5oneonefiveonethree5five +2mrjctkmlks4z +8eightkrzkdxvrrjvtwo2 +fiveninesix9 +rhtnxkvthkpbqn4mtgtdnmmxmvmmzmcbt1 +mtwonexdljqqgbbnineqrgbqnqx7eight +fiveeight8sfvzbpkeights4 +8threesix8two8hszvhcbonefour +tpjtvpjgtnine2rbbfd +zrxjftfg4b6three37four +th5kktbzgmvkxhhcsqcrvtldnldml7seven +4txnqnplsixzptgszd +gzt5threefiveninetwoeightsevennine +jtfrlffv17268 +qfour9six +49vrbpqkkzct6 +14two +nine2drdcd7sixpfvsblcxqsjshhg +5onehfivefour8mnine +5qlthree6hbkktrpbmgninepqtxq +three8four +ftm67qrmsix +seightwoplhzgbvb7275 +qnqtbdmqd4 +onefive2lcrdjrzbheightthreegvc4three +87eight4fiveninefiveeight +1seven7eightfivezqcndfj5cmblgczd +seven6rkxsvbs529fbgbtclkjhcljpkjbgmvz +1twojxpxrgvvzq14ldngl9eight +qkg2fivemrlzlhxxzcmfive +one85four9six8eight +7sixbgvdf4841 +hktntngtlfflzrdpfourninevlzpdrngvchg2 +6two115 +fiveninesevenqxgjrnk3two +eightthree988nrclmr +2one6 +6737jfive +8four3 +4fivesvntkxfpnqhone94three +7six1twothsd86 +98pczqhlqbzjlvfnine68 +xtqtwoneeightlvcjqfourckfour2nine +9sixllhhqhfivemmoneeight9 +4czj3 +ggdlxrrxjl1jnndbgbdninesbcfhd2five3 +kszvbdfninethree5onevflrqffxmdonefour2 +1nkpmvbf75 +lnbgnkkfhseven5zfive2qcr +seven75xcx +2eightbzsp2pfg7eightv7 +fourone29 +4two5two9xcpkkjqxcfivessqqvhbbt +ncnqg1sixt9ninedlfgsqhnxx6 +xrlsktwodnbcbonefvxxqgbrsdthree3seven +klvsv73 +onezvbhrblrkzcrsevensix96jnpxjone +nine6chd4 +bdvkqlrh9eight6eightninehq7 +fivexpx1vsrreightkp7dph +3eightlrrlgck967 +xcntwone4633sixmkm1nine \ No newline at end of file diff --git a/2023/day1.py b/2023/day1.py new file mode 100755 index 0000000..f534634 --- /dev/null +++ b/2023/day1.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python + +numbers = { + "one": "1", + "two": "2", + "three": "3", + "four": "4", + "five": "5", + "six": "6", + "seven": "7", + "eight": "8", + "nine": "9", +} + + +def get_first_and_last(line): + for letter in line: + if letter.isdigit(): + first = letter + break + for letter in line[::-1]: + if letter.isdigit(): + last = letter + break + return first, last + + +def find_first(line): + first_position = len(line) + 1 + result = "0" + for number in numbers: + index = line.find(number) + if index >= 0 and index < first_position: + first_position = index + result = numbers[number] + for number in "123456789": + index = line.find(number) + if index >= 0 and index < first_position: + first_position = index + result = number + return result + + +def find_last(line): + last_position = -1 + result = "0" + for number in numbers: + index = line.rfind(number) + if index >= 0 and index > last_position: + last_position = index + result = numbers[number] + for number in "123456789": + index = line.rfind(number) + if index >= 0 and index > last_position: + last_position = index + result = number + return result + + +def main(): + with open("day1", "r") as file: + lines = file.readlines() + total = 0 + for line in lines: + first, last = get_first_and_last(line) + total += int(first + last) + + print(total) + + new_total = 0 + for line in lines: + first, last = find_first(line), find_last(line) + new_total += int(first + last) + + print(new_total) + + +if __name__ == "__main__": + main() diff --git a/2023/day1.sample b/2023/day1.sample new file mode 100644 index 0000000..41aa89c --- /dev/null +++ b/2023/day1.sample @@ -0,0 +1,7 @@ +two1nine +eightwothree +abcone2threexyz +xtwone3four +4nineeightseven2 +zoneight234 +7pqrstsixteen diff --git a/2023/day2 b/2023/day2 new file mode 100644 index 0000000..b14a54c --- /dev/null +++ b/2023/day2 @@ -0,0 +1,100 @@ +Game 1: 3 green, 1 blue, 3 red; 3 blue, 1 green, 3 red; 2 red, 12 green, 7 blue; 1 red, 4 blue, 5 green; 7 green, 2 blue, 2 red +Game 2: 1 green, 19 blue, 1 red; 8 blue, 4 red; 3 red, 6 blue; 1 green, 1 red, 12 blue +Game 3: 3 green, 1 blue, 9 red; 1 blue, 2 green, 8 red; 1 blue, 2 red +Game 4: 6 green, 2 red; 2 red, 16 green; 3 red, 1 blue +Game 5: 5 blue, 1 green; 3 blue, 3 green, 3 red; 8 red, 1 blue, 2 green; 7 blue, 6 red; 4 red, 4 blue +Game 6: 5 red, 20 blue, 3 green; 4 red, 20 blue, 3 green; 12 blue, 3 green, 1 red; 3 red, 3 green, 19 blue +Game 7: 5 red, 3 blue, 9 green; 12 red, 3 blue; 5 green, 3 blue, 19 red; 6 red, 1 green, 3 blue +Game 8: 9 red; 2 green, 1 blue, 7 red; 5 red, 2 blue; 3 blue, 1 green; 1 green, 14 red, 1 blue; 3 blue, 4 red, 1 green +Game 9: 11 red, 2 green; 13 red, 8 green; 15 green, 3 red; 1 blue, 9 red, 18 green; 2 green, 12 red; 15 green, 9 red +Game 10: 1 green; 16 green, 3 red, 2 blue; 1 blue, 16 green, 4 red; 16 green, 5 red, 2 blue +Game 11: 2 red, 18 blue, 5 green; 4 green, 12 blue, 9 red; 6 red, 4 green, 5 blue; 8 red, 16 blue, 2 green; 1 green, 18 blue, 13 red; 13 blue, 9 red +Game 12: 5 red, 10 green, 4 blue; 8 green, 8 red, 14 blue; 10 green, 17 blue, 13 red; 7 blue, 9 red, 13 green; 6 red, 16 blue, 4 green; 16 blue, 14 red, 16 green +Game 13: 6 green, 1 red, 1 blue; 10 blue, 15 green; 1 blue, 2 red, 5 green; 2 blue, 1 red, 20 green; 3 blue, 3 red, 10 green +Game 14: 2 green, 2 blue; 2 green, 3 red, 4 blue; 8 red, 1 blue, 1 green +Game 15: 3 blue, 10 green, 1 red; 16 red, 1 blue, 20 green; 7 green, 6 blue, 13 red; 8 green, 20 red, 5 blue; 8 blue, 8 red, 18 green; 17 green, 8 red, 10 blue +Game 16: 6 blue, 5 red; 6 red, 16 blue, 11 green; 1 red, 3 green, 13 blue; 1 red, 5 green, 1 blue; 3 red, 14 green, 16 blue; 1 red, 1 green, 3 blue +Game 17: 8 green, 5 red, 7 blue; 2 blue, 2 green, 6 red; 3 green, 4 blue, 15 red +Game 18: 5 blue; 2 red, 9 blue, 3 green; 4 green, 20 blue, 2 red; 4 green, 2 red, 5 blue; 16 blue +Game 19: 15 red, 1 blue; 3 green, 16 red, 4 blue; 1 blue, 3 green, 4 red; 9 red, 2 green, 6 blue; 2 green, 5 blue, 4 red +Game 20: 12 red, 7 blue; 11 blue, 7 red, 1 green; 1 green, 10 red, 4 blue +Game 21: 9 blue, 1 green, 1 red; 4 blue, 2 green; 1 blue, 2 red +Game 22: 1 red, 10 green; 6 blue, 4 green, 1 red; 6 blue, 12 green, 1 red; 3 red, 4 blue, 10 green; 1 blue, 13 green, 1 red +Game 23: 14 red, 2 blue, 3 green; 8 green, 2 blue, 4 red; 2 blue, 7 green, 4 red; 4 blue, 7 red; 1 blue, 8 green, 13 red +Game 24: 1 blue, 6 green, 7 red; 6 green, 2 blue, 5 red; 1 blue, 3 green; 2 blue, 9 green; 1 green, 4 red; 5 green, 4 red +Game 25: 8 red, 2 green, 6 blue; 3 blue, 15 red, 1 green; 8 blue, 2 red; 2 blue, 1 green; 2 green, 18 red, 1 blue +Game 26: 9 red, 11 green, 6 blue; 1 blue, 2 red, 16 green; 15 green, 11 red, 6 blue; 3 red, 13 green, 6 blue; 20 red, 2 blue, 4 green +Game 27: 9 red, 10 blue, 17 green; 8 green, 15 blue; 4 green, 3 red; 11 blue; 14 green, 1 blue, 8 red; 10 blue, 5 green, 3 red +Game 28: 2 green, 17 red; 7 red, 6 green, 6 blue; 12 green, 16 red; 7 red, 7 green, 7 blue; 7 green, 8 red, 5 blue; 7 red, 5 blue +Game 29: 2 red, 2 blue, 3 green; 3 blue, 1 red; 3 green, 2 blue, 1 red; 6 red, 1 green, 4 blue +Game 30: 8 red, 15 blue, 4 green; 5 green, 9 red, 15 blue; 1 green, 1 blue, 11 red +Game 31: 6 blue, 2 red, 1 green; 2 blue, 2 red, 8 green; 2 blue, 1 red, 7 green +Game 32: 6 red, 7 green, 6 blue; 9 red, 6 blue, 6 green; 1 green, 13 red, 4 blue +Game 33: 3 green, 1 blue, 9 red; 2 blue, 12 red, 4 green; 1 blue, 5 red, 1 green; 4 green, 5 red, 2 blue; 1 red, 2 blue, 3 green; 3 green, 3 red, 1 blue +Game 34: 1 blue, 9 red; 3 blue, 4 red; 3 blue, 5 green, 10 red; 2 blue, 9 red, 5 green +Game 35: 3 red, 2 blue; 1 green, 10 blue, 4 red; 1 blue, 5 red, 2 green; 5 blue, 2 green, 1 red +Game 36: 9 green, 6 blue, 1 red; 16 blue, 8 green, 3 red; 9 green, 8 blue, 2 red; 3 green, 3 blue, 1 red; 16 blue, 3 red, 3 green +Game 37: 1 green, 1 red; 2 blue, 3 green; 1 red, 1 blue, 5 green; 1 red, 9 green, 2 blue; 12 green, 2 blue +Game 38: 16 blue, 12 red, 4 green; 15 blue, 5 green, 6 red; 7 red, 12 blue; 19 blue, 15 red, 1 green +Game 39: 1 red, 2 blue; 1 green, 10 red, 3 blue; 1 green, 2 red; 1 blue, 3 red +Game 40: 11 blue, 6 red, 3 green; 2 blue, 12 green, 1 red; 16 green, 5 red; 5 red, 10 green, 6 blue; 3 red, 13 green, 1 blue; 13 green, 3 blue, 7 red +Game 41: 19 red, 1 blue; 9 blue, 6 red; 10 red, 1 green, 17 blue +Game 42: 1 red, 8 green, 12 blue; 8 blue, 10 red, 12 green; 9 blue, 8 green, 9 red; 8 red, 11 green; 12 blue, 5 red, 2 green +Game 43: 6 blue, 7 red, 9 green; 4 blue, 6 red; 3 red, 4 blue, 5 green; 7 green, 15 blue; 15 blue, 9 green, 6 red; 6 green, 8 red, 7 blue +Game 44: 12 blue, 5 red; 7 red, 16 blue; 2 red, 4 blue, 8 green; 3 red, 10 blue, 3 green; 5 blue +Game 45: 3 green, 4 red, 6 blue; 1 green, 2 red, 11 blue; 6 red, 9 blue, 1 green; 8 blue, 3 green +Game 46: 1 blue, 9 green, 1 red; 1 blue, 2 red, 6 green; 10 green, 3 blue +Game 47: 2 green, 4 red; 2 green, 4 blue, 2 red; 2 blue, 3 green, 12 red; 12 red, 3 blue +Game 48: 4 blue, 3 green, 16 red; 1 green, 2 blue, 2 red; 9 green, 7 blue, 13 red +Game 49: 4 blue, 5 green, 17 red; 1 blue, 13 red, 2 green; 15 red, 1 blue, 5 green; 4 blue, 7 green, 19 red; 4 blue, 3 green; 2 green, 2 red +Game 50: 2 red, 3 green, 7 blue; 1 green, 9 blue, 1 red; 19 blue, 4 red; 1 green, 13 blue +Game 51: 2 blue, 4 green, 14 red; 8 blue, 17 green, 7 red; 1 blue, 6 green, 19 red; 20 red, 17 green, 6 blue; 2 green, 1 red, 9 blue +Game 52: 13 green, 17 blue, 2 red; 18 red, 12 blue, 10 green; 11 green, 17 red, 9 blue; 7 green, 11 red, 9 blue; 12 red, 15 blue; 7 green, 4 blue, 5 red +Game 53: 2 green, 1 red, 3 blue; 1 red, 1 blue; 1 blue; 1 blue, 1 green, 1 red +Game 54: 2 red, 5 green; 3 blue, 3 red, 2 green; 1 blue, 3 red, 5 green +Game 55: 7 green, 5 blue, 4 red; 8 blue, 7 red, 8 green; 12 blue, 2 red, 16 green; 3 green, 8 blue +Game 56: 9 green, 2 red, 1 blue; 1 blue, 11 red, 3 green; 9 red, 1 blue, 8 green; 10 red, 16 green +Game 57: 1 red, 5 blue, 9 green; 19 blue, 2 green, 5 red; 15 green, 3 red, 7 blue; 2 blue, 15 green, 9 red; 5 red, 9 green, 15 blue +Game 58: 5 green, 1 blue; 3 red, 2 blue; 2 blue, 1 red, 12 green; 8 green; 12 green, 2 blue; 4 green, 4 red +Game 59: 11 blue, 5 red, 4 green; 6 red, 1 green, 3 blue; 7 red, 10 blue, 4 green; 12 blue, 1 red, 1 green +Game 60: 3 green, 10 red, 10 blue; 10 green, 6 blue, 10 red; 1 blue, 6 green, 7 red; 3 red; 8 blue, 7 green, 8 red; 3 red, 19 green +Game 61: 11 green, 3 blue, 20 red; 3 green, 3 blue, 20 red; 10 green, 12 red, 8 blue; 4 green, 8 blue, 6 red; 7 blue, 10 red, 5 green; 6 green, 6 red +Game 62: 10 green, 9 red; 2 green, 2 blue, 5 red; 4 blue, 11 green, 12 red +Game 63: 5 blue, 4 green, 2 red; 5 blue, 3 red, 2 green; 6 blue, 2 green, 2 red; 1 red, 5 blue; 1 green, 3 blue +Game 64: 5 blue, 4 green, 8 red; 8 blue, 12 red, 10 green; 8 red, 7 blue; 7 green, 7 red; 5 blue, 1 red, 2 green +Game 65: 3 blue, 3 red, 15 green; 12 green, 3 blue, 12 red; 13 green, 6 red, 2 blue; 1 red, 7 blue, 3 green; 9 red, 5 green, 7 blue; 1 green, 5 blue, 9 red +Game 66: 1 green, 6 blue; 7 blue, 8 green; 2 blue, 9 red, 14 green +Game 67: 1 blue, 8 red, 1 green; 7 red, 10 green, 4 blue; 3 blue, 1 red, 4 green +Game 68: 8 blue, 8 green, 10 red; 4 red, 5 green; 4 blue, 12 red, 15 green +Game 69: 2 red, 3 blue, 2 green; 1 blue, 15 green, 4 red; 15 red, 20 green; 8 red, 4 green +Game 70: 6 red, 4 blue, 10 green; 5 blue, 6 red, 16 green; 9 green, 1 red, 1 blue; 2 blue, 6 green; 1 green, 3 blue, 5 red +Game 71: 9 red, 9 green, 4 blue; 1 blue, 5 green; 4 red, 2 blue, 5 green; 1 blue, 3 red, 2 green +Game 72: 14 blue, 1 red, 4 green; 18 blue, 1 red, 3 green; 1 red, 1 green, 10 blue +Game 73: 7 red, 6 green, 1 blue; 14 green, 1 blue, 4 red; 7 red, 18 green; 1 red, 5 green +Game 74: 9 green; 1 red, 7 blue, 4 green; 10 blue +Game 75: 4 red, 1 green; 1 green, 4 red, 2 blue; 3 green, 2 red, 7 blue +Game 76: 16 green, 7 blue, 1 red; 2 blue, 6 red, 2 green; 7 blue, 17 green; 5 red, 15 blue, 15 green +Game 77: 1 red, 7 blue, 8 green; 1 red, 6 blue, 5 green; 1 red, 5 blue, 4 green; 8 green, 1 blue; 2 blue +Game 78: 9 green, 3 blue; 6 red, 12 green; 5 red, 3 blue, 10 green; 3 blue, 14 green, 13 red +Game 79: 20 green, 1 blue, 3 red; 11 green, 4 red, 2 blue; 11 red, 1 blue, 5 green +Game 80: 14 red; 3 green, 2 blue, 7 red; 1 blue, 6 red +Game 81: 1 red; 11 blue; 11 blue; 9 blue, 5 green, 1 red +Game 82: 13 red, 17 blue, 9 green; 1 blue, 2 green; 9 red, 5 green, 6 blue; 10 green, 14 blue, 14 red; 5 green, 2 blue, 10 red; 4 blue, 4 green, 2 red +Game 83: 6 blue, 3 red, 5 green; 3 blue, 6 green; 13 red, 11 green, 1 blue; 7 blue, 1 green, 14 red; 9 green, 2 blue, 3 red; 8 green, 3 red, 2 blue +Game 84: 5 green, 8 blue; 7 red, 7 blue, 10 green; 7 blue, 7 green, 7 red; 7 blue, 1 green, 11 red +Game 85: 12 blue, 1 red, 2 green; 3 green, 13 red; 17 red, 1 blue, 2 green; 4 blue, 15 red; 9 blue, 7 red; 2 green, 11 red, 4 blue +Game 86: 15 green, 1 blue, 8 red; 1 blue, 18 green, 3 red; 3 red, 1 blue, 16 green +Game 87: 9 red, 17 blue, 9 green; 4 green, 6 red, 2 blue; 6 red, 5 blue +Game 88: 8 red, 6 blue, 17 green; 17 green, 5 blue, 12 red; 2 red, 14 green, 1 blue +Game 89: 14 red, 5 blue, 6 green; 1 blue, 6 green; 4 red, 9 green, 8 blue; 2 blue, 4 red, 11 green; 12 red, 1 green, 8 blue; 3 blue, 2 green, 5 red +Game 90: 3 red, 3 blue; 14 green, 8 blue; 4 red, 12 green, 8 blue +Game 91: 2 blue; 2 blue, 8 red; 4 red; 8 red, 1 blue; 1 green, 2 blue +Game 92: 16 green, 16 red; 5 green, 2 blue; 14 red, 16 green; 17 red, 1 blue, 12 green +Game 93: 9 blue, 14 red, 6 green; 2 blue, 6 red, 3 green; 1 green, 2 blue, 12 red; 6 green, 8 red, 5 blue; 5 blue, 9 green, 10 red; 7 blue, 10 green, 3 red +Game 94: 2 blue, 13 green, 7 red; 5 red, 2 blue, 14 green; 8 red, 9 green; 2 blue, 8 green, 1 red; 7 red, 12 green; 2 blue, 3 green +Game 95: 1 red, 8 blue, 4 green; 1 green, 3 blue, 2 red; 6 blue, 2 red, 1 green; 3 blue, 4 green; 3 green, 1 red +Game 96: 15 blue, 8 red, 5 green; 15 green, 16 blue, 4 red; 11 blue, 8 red; 16 blue, 6 green, 1 red; 10 blue, 9 red; 1 red, 3 green, 3 blue +Game 97: 11 green, 8 blue, 4 red; 12 green, 11 blue, 1 red; 4 red, 1 blue, 11 green; 6 green, 1 red, 7 blue; 5 blue, 12 green, 4 red; 5 blue, 8 green +Game 98: 4 green, 15 blue; 13 blue, 8 green; 10 blue, 6 green; 1 red, 7 green +Game 99: 1 green, 3 blue, 18 red; 8 blue, 19 red, 5 green; 7 red, 2 blue, 2 green; 10 red, 1 blue, 2 green +Game 100: 4 red, 3 green, 4 blue; 8 green, 5 red, 2 blue; 1 red, 2 blue, 7 green; 3 blue, 8 green, 5 red \ No newline at end of file diff --git a/2023/day2.py b/2023/day2.py new file mode 100755 index 0000000..c677566 --- /dev/null +++ b/2023/day2.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python +limits = {"red": 12, "green": 13, "blue": 14} + + +def game_possible(games): + games_list = [pair.strip().split(",") for pair in games.split(";")] + is_possible = True + for game in games_list: + pairs = {pair.split()[1]: int(pair.split()[0]) for pair in game} + if not possible(pairs): + is_possible = False + return is_possible + + +def possible(totals): + is_possible = True + for color, limit in limits.items(): + try: + if totals[color] > limit: + is_possible = False + except KeyError: + pass + return is_possible + + +def get_power_of_fewest(games): + highest_power = {"red": 0, "green": 0, "blue": 0} + games_list = [pair.strip().split(",") for pair in games.split(";")] + for game in games_list: + pairs = {pair.split()[1]: int(pair.split()[0]) for pair in game} + for color, count in pairs.items(): + if highest_power[color] < count: + highest_power[color] = count + result = 1 + for number in highest_power.values(): + if number: + result *= number + return result + + +def main(): + with open("day2", "r") as file: + lines = file.readlines() + + sum_ids = 0 + for line in lines: + game, games = line.split(":") + game_id = game.split()[-1] + if game_possible(games): + sum_ids += int(game_id) + print(sum_ids) + + total_powers = 0 + for line in lines: + _, games = line.split(":") + total_powers += get_power_of_fewest(games) + + print(total_powers) + + +if __name__ == "__main__": + main() diff --git a/2023/day2.sample b/2023/day2.sample new file mode 100644 index 0000000..295c36d --- /dev/null +++ b/2023/day2.sample @@ -0,0 +1,5 @@ +Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green +Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue +Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red +Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red +Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green diff --git a/2023/day3 b/2023/day3 new file mode 100644 index 0000000..f315aaf --- /dev/null +++ b/2023/day3 @@ -0,0 +1,140 @@ +.......358..........31.....339.....669.............598......328.....575......................447..650..............964...........692........ +...............415..*.........@......*...627*...................945*.............144/.506............................*......514...*...150... +.........182..+.....873.756.......737........784..568....667..............258........./.........741...........707*....84........520......... +..579...@.........$........*..........258.................*.........274..*.....739.......157./.....*580...........893.....696*........889... +.....*.........875.........173.........*..................109...896*......959...*........=...677...........&636.........................$... +......961..$............-...............907...569....#...........................756.....................................681................ +...........478...616.....30.....221*...............552.../33...258*343.....488........*682...526..*.........422...........&..........764.... +................+..........................................................*................*.....7...550..........=.........878............ +...171..275............#.....................401....50.$.................43...............123.............../949..135..331.....@.495........ +........*...48@.662.100...............590...*........#.566.....................15..../426.............774...............+...........*....... +...944.28.........*.....................*....307...........411.361....55..................24.447.*......*....787*...266....361.......161.... +....*...........405.&...=785...146......654.......281.............*.....+...................*....760..80..17.....84....*..+................. +.....830...140......745.........%..$..........972.......406*864..762..............695.327.................*...........512................... +............*...............#......414...........*..960...............1..............*.................374.....264.............833....336... +.......-.252.......10....518..................777...=...811..103.454..*....................774*433.........951*....826........@....=...*.... +.....44..............*................-....................@..$......957...............216..........=..................614........521..232.. +.........=232......802...+779.....759..307....................................%941.......*........512.............865.....*................. +...................................*.......162...662....816.681.....21*................290.........................*......364..........=.... +.................258....195.........1..535......*.......*.....*........261............................650.......152.................514..... +..425...411@...../.........@...........*.....788.........186...91.279............-.....................*............268.......639.......864. +....................................=.933........../.................%...%........73........%203....187..362...861.....*389.....*.......*... +...254....847............@........135......6.......529..........202......96...........840.........@........*...*.../.........998.......989.. +.........*.....288......650............349*.......................%.609...................526.....655.....854....425..............531*...... +..../....848....&..............505...........................594..........434.................@.......$68............767..............732... +.410...............585...............185........................*...91........773..579........454............757.....*....568..+742......... +..............................*70.......*......478............769....&.182.......%.*..................568......-.570.861....*............... +..............*993.48......893........835....*..*......*.................*..........798..473.........../....................965...691....... +...........306.......*............531.......938.200.335.432...343.....360......836......-...........*..........951.691..............*....... +...341*360............958............*.........................#.........../.....*.../........728..585.........*.............902=..696...... +.............190...................808..451........+..................272...59.641...822.........*..........289...36...................509.. +..464*10.604.+....241.102%..............*...633.450......................+........................797............*.......575..........*..... +...........-............................488..........402.....936.847................+.......434.......................&.....&....844...478.. +......147..............826...297................257...*...........*.....$.....932...492..81...%....829..........560...661.........*......... +.........*....379.......*....*...884..700.......*.....646..........914..659...............*....................=..........513/..621..790.... +.369....472..*.......843....734....#.+....%...738........................................989............501.......817.375...............@... +..............727.........................131.....767..........=......665...685..............747..727.......868..*.............478#......... +........247.............-...........649.............*..*82..507...............*..................................504........................ +.........*...........909...............*.....707..922..............701...213.833.866$.630...&..606+....................102.183@..*281.225... +...465.108...............772.....915.109..96.%...................../.....*.............*..685........155....811*...220.*...............*.... +.................106.....=.................&........*........*488.........233.......590........$551.....*..........+...287.#874..%....956... +....................*513.........&...............829.487................................350..-........338.......55................464....... +....&............@............695......227................$.793.............802.....294...*...822..........960....*....295..946............. +....587...........859...204.......246*....*644.........925.........167.210..../..........129.............%....*...102.....*..*..........832. +.......................*..............558.......404.......................%..........................817..870.791......120..483..406...$.... +....797%..68....929-.87....411............*........*.............458*143....721.-....706.......694....*.........................+........... +...........*..................*........369..........899..79................*....417.....*930..*........78.....@174.........276.............. +.313........394...750..........773.........................................916......37+.......384...........-......355.203....*.....180..... +....@...902...........829.......................................*823........................*.............408.......*......960......*....... +........*......%........#...........@871..........756.........22.........956..............56.622.=461.823..........749...........297..557... +......877.......863..............................*.........................=.968..............................12.......946%..........%...... +..............................123.39.551...12...700..507*....................*........320.........*...54.................................... +.............583........424..................$...........571......#.......499.......-.............803......92.&......942..........782....... +....726.....$...............=....688.580...*...........#..........905............446....397...................629...*............*.......... +.....*..758.......831........760..-....*.427......473...729............298...618........-.........562*865.........553....267...12........... +.................$.....971...........472.....61....#..................*.........@..714.......712............173.............*......-780..... +.....*948..........&.....*..750.311..................*425.193....@336..882........*..........*....913.........*...........369............... +..942..............209.791....-....%.626.787..812.954......................725/.806.%...............#.......447....679..........706...11.... +...............922......................*................217@......962..............9.104...806...................%.....278*.....*.......... +.........382......*........./.......346.......346....448............*....................$...................*................820..454%..... +.315......./....418.........748................%...............577..655.......*254..266.....383*...$......316.243.........*................. +.....................363................709.....................=..........714..........224......479...................817.428....../....... +......................*................*........318................237....................*...................497.152............457........ +...........911........756..589..........562......=..253........8*................498...392.......394.768...@................................ +...............$..751..........856...................*...56......202...201.........+................*.......525.......430................... +.193........953...*.....456..@................310*........*............../.58@.........*..............863..........$....%..675..+117...447.. +.......940.................*.905.889......542.....723......591....*956.........743.$..156.........791*......923..84......../..........$..... +.........&.....538&......643......*..=......*..................659............@....66.....681............................................... +.................................127.585.238.......-866....654......................................393................80..19..979.......... +.........................300.................102........................465*..............705.332......................%.........*.....*142. +......+....#.....*...500..%..336.419........*....+116.719...........237.....81...461*931.....*.........613.#426...................434....... +......489.420.459......*......*....*.....277.............%.........=...............................*..............746....512............%848 +.......................804....445.197.........658.*342....................+461.630......%...930@....804.504........*.............+..299..... +...........270.....257........................./.........283....................*.......357.......................702.....644.587......*.... +...460%...=...........*.......406.........162..............*...259.......*.......121.............360$.#...76..228.....847..*............666. +.....................612..178*.............*...527*872.762.267........307.606.........#........$......224....&....13*....-.455.......&...... +..........152.......................919..485............/.........70.................623....968......................810............281.230. +......693.*...520............$......*...........*909.....................586.........................794......229.........88...385.......... +..363*....636..*......619.....238....45..............982...........*145.....*803......-.......426.......#.....+.......213*...#....*......... +...............536.....+........................&.......*.......708.....170......360..220......*../.......16................796....283..564. +.652....&...........$.....*....................89...944.894................*....-............975.27...409*...978......./445................. +...*.538...........822.274.491.....-..........................572.........329.........*468......................&.......................213. +.47......568.......................706.....232....74..490............&965..........685................125...........................824*.... +........*....725...........#548............=......*.........................................77*391...*........253...............767......... +.......769...&......................183........687..921......913$...@.....162...724.................220.........*...880.834.........404..... +...+.................466...%411...../...............*...............894....*.......*.............*............196.....*................*.... +.90.......423..../......*.......1.........-.......360.....233...............2........=......@....422.....334.........878......322......573.. +....649..........475....450....%......-....249.................905.............760..879......829..........-....................*............ +......*......290.....................680............/............/.244&.........................................9.596.326.........359....... +...............*........200.....723................826....773...........576..790..=..............642.................*....617....*.....649.. +.....#979....776..562.......@.....*........................#........363.....&....915..704....401....*...32*681.%261.......&.......351....... +896*.................*896...493.88....*.........622.............925*.................*....17*.......265..............893.................... +....778.%222.......................873.872..........635@...852..........559........456..%......*128........179.......*............336*...... +.................985.......................77...482.........-.......502*......404......206...41......631..*.........761...............782... +.....194...........&...............514*130..=..*.............................*...........................168.............../..46+........... +.............207...............................195.....619..$..........544..191.......419*842....64......................206..........816... +..............................670..84*78.................*.966......%.....*.....................*........=............................*..... +.564.........185-........250....*........464...762.....412.......302.....27..764.653/.738*596..........563....741.........13.148.......928.. +....*.............%..565....%.60....+158..*...$............*503...................................824.................284.......*.931-...... +....710...763...272..*...................851..../....................456.......121....603................3..445...............382.......837. +....................956..970........-..........377......381.......56.......926........../......135......*....../.........315........172.&... +........201.............+...........261.517..................606........../.....347......................655.......717........468..*........ +...746...&...332...............681...............703...........*.....=............*...........................................*....824...... +......-.........*478.............*.....595.245....*...918.....875...875.........965...........676...745*...858...479.......132.............. +..354........*.................776.-...*...*...820...../..%..............291........../........*........59.*........*....................485 +...&......668.956......738.........921.312.803.....770...613....78*522..&...........665......692............253......863............537..... +...................498......258...................................................................426.........................#............. +.....108..........&.....357.-......794..594#............#............255........$.........664.525./....885...$..............353..823........ +........+...590..........*........*...........111.......420..374..............144...........*...*...80*.....164...928...427......&.......... +...+...........*..289.185......$...659.772/....*.............*........361..........504.........436...................*......@............... +...14....*...296...*........453..............753.368.733...167..675....*....................................22........502..443.............. +.......413........................200=..616.......+...*...........#.....143..768..........404.............@...=...102..............378...... +...538..........579.......................=...........311.267...................*.....445...*.....%138..158............#...........*....323. +......$............/.................586%.........825.....*....................318......@...260.................618..229...865....353...*... +.............834.......68*981................606..*.....432............870...............................749....*...........#.........215... +......886....*...325...................18.25*.....977...................../.......385.........$.......95*......182./........................ +............773........................*................165...+....+816........*...*...........391..................439............@........ +........................682..........249...................*.435............400...261..119.....................................921..630..... +.......-.......92*744....*....................115.......780........205....................*...347.152......950..592&.152....@.....*......... +.....789.949..............530.248.149.............................*....*957............957.....&..*.......#..........#.....572.............. +...........*.601.766..112.......*......113..@.....529...736.+...656.837........320...............518.120.........125..............900....... +83......434.....*.....*.../...224.....*....235..............498............175...*.930.......................+......*................*880... +...*296...............118.328........405.............../801................*...804....*.......................590...770.........276......... +297..............726.............................966............*997......165..........25.983............669.............&..992*.......966.. +...........92....*........%.........108.............@.475....769..................897......@.........792................123.......122....... +...........*...&..579......811..708...&.................*........................*....767.......386...........558............708.....=...... +........230..161...............*................#....177.........940...903./...706.......*785..=.....93..381..%.................*........... +...621.............652..886...157........$....204............418....*....%..62......422.............*.....=........555.537.............+479. +.....%............*.....*.............499............96.........*....656..............*...751..293...759.....174..........%..265..32%....... +...............610....105.416.........................%........242.........*.......746.......*....=...........*..259@....................... +............#................*591........./.-.......................653.103..62=.............585.............567...........586...+....216... +..840/....612.......588.................676..202...................&................@..............................301............632..*.... +......................*.........=392.............667..%..........-...............457...134*....................165*.....................728. +.339&.*74.........402.581............518&.......*....823.....874..102..678.74..............219....114..................836..915..245.-...... +..........38.....*........612...628..............90......513...*............*...........59......+..../....799..268....*.....*.........370... +..........$........./........*.....*.......$...................8.......684=.577..209.........550.............#.....#...529.240.............. +.236..............153......163........*.414...........................................549........432............919............81.....-337.. +....*.................604......-...631..........879........240.......97...............*.....315....&...720..........610...530............... +.....856...214..236....*.....159.%......738.....-......826....&.272.*.......36.....465.........../.....*...587.......*....*......548..699... +.............*........36..........743.=.../...............*......*..424.................580.#...897.448....*.......833...633.....*...*...... +.............963......................542........734.....901...914..........843.............523..........818..................691.....833... \ No newline at end of file diff --git a/2023/day3.py b/2023/day3.py new file mode 100755 index 0000000..8f0ad75 --- /dev/null +++ b/2023/day3.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python +import re + + +def do_last(index, lines): + pattern = r"\d+" + symbol_pattern = r"[^\d.\n]" + matches = [ + (match.start(), match.end()) for match in re.finditer(pattern, lines[index]) + ] + numbers = re.findall(pattern, lines[index]) + + symbol_indexes = set() + for row in range(index-1, index+1): + for match in re.finditer(symbol_pattern, lines[row]): + symbol_indexes.add(match.start()) + + result = [] + for index, match in enumerate(matches): + is_symbol_adjacent = False + for number_index in range(match[0]-1, match[1]+1): + if number_index in symbol_indexes: + is_symbol_adjacent = True + if is_symbol_adjacent: + result.append(int(numbers[index])) + return sum(result) + + +def do_first(index, lines): + pattern = r"\d+" + symbol_pattern = r"[^\d.\n]" + matches = [ + (match.start(), match.end()) for match in re.finditer(pattern, lines[index]) + ] + numbers = re.findall(pattern, lines[index]) + + symbol_indexes = set() + for row in range(index, index+2): + for match in re.finditer(symbol_pattern, lines[row]): + symbol_indexes.add(match.start()) + + result = [] + for index, match in enumerate(matches): + is_symbol_adjacent = False + for number_index in range(match[0]-1, match[1]+1): + if number_index in symbol_indexes: + is_symbol_adjacent = True + if is_symbol_adjacent: + result.append(int(numbers[index])) + return sum(result) + + +def find_adjacent(index, lines): + pattern = r"\d+" + symbol_pattern = r"[^\d.\n]" + matches = [ + (match.start(), match.end()) for match in re.finditer(pattern, lines[index]) + ] + numbers = re.findall(pattern, lines[index]) + + symbol_indexes = set() + for row in range(index-1, index+2): + for match in re.finditer(symbol_pattern, lines[row]): + symbol_indexes.add(match.start()) + + result = [] + for index, match in enumerate(matches): + is_symbol_adjacent = False + for number_index in range(match[0]-1, match[1]+1): + if number_index in symbol_indexes: + is_symbol_adjacent = True + if is_symbol_adjacent: + result.append(int(numbers[index])) + + return sum(result) + + +def main(): + with open("day3", "r") as file: + lines = file.readlines() + + total_adjacent = 0 + for index in range(len(lines)): + if index == 0: + total_adjacent += do_first(index, lines) + elif index == len(lines) - 1: + total_adjacent += do_last(index, lines) + else: + total_adjacent += find_adjacent(index, lines) + print(total_adjacent) + + +if __name__ == "__main__": + main() diff --git a/2023/day3.sample b/2023/day3.sample new file mode 100644 index 0000000..624ea4f --- /dev/null +++ b/2023/day3.sample @@ -0,0 +1,10 @@ +467..114.. +...*...... +..35..633. +......#... +617*...... +.....+.58. +..592..... +......755. +...$.*.... +.664.598.. \ No newline at end of file diff --git a/2023/day4.py b/2023/day4.py new file mode 100755 index 0000000..8951dcc --- /dev/null +++ b/2023/day4.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + + +def main(): + with open("day3", "r") as file: + lines = file.readlines() + + +if __name__ == "__main__": + main()