diff --git a/2020/1/input b/2020/1/input new file mode 100755 index 0000000..9ef1876 --- /dev/null +++ b/2020/1/input @@ -0,0 +1,200 @@ +1891 +1975 +1987 +1923 +1928 +1993 +1946 +1947 +2005 +1897 +1971 +1929 +1875 +1945 +1680 +811 +1901 +1396 +1942 +1282 +1941 +1978 +1884 +1879 +1230 +2010 +1881 +1979 +1996 +1904 +1934 +1865 +2003 +2006 +1966 +1860 +1259 +1959 +1931 +1963 +1878 +1880 +151 +1925 +1663 +1908 +1863 +1391 +1922 +1968 +1998 +1084 +1982 +1960 +1938 +1876 +1937 +1882 +1873 +1926 +1986 +1416 +1864 +1862 +1969 +1913 +532 +1866 +1242 +1933 +1903 +965 +1927 +1890 +1991 +1388 +1992 +1902 +1907 +1964 +1394 +2009 +1920 +630 +1932 +1854 +1951 +1852 +1983 +1314 +1855 +1954 +1921 +1989 +1871 +1995 +1885 +1974 +1915 +1872 +1251 +1899 +1985 +1889 +1935 +1912 +946 +1965 +1739 +1973 +1911 +1910 +1917 +1918 +1900 +1886 +1477 +2000 +1916 +1077 +2004 +1456 +1867 +1970 +1999 +1919 +1726 +706 +1930 +1994 +1988 +1997 +1870 +1953 +652 +1893 +1898 +1883 +1957 +1972 +1874 +1977 +1955 +2001 +1906 +1389 +1848 +1940 +1877 +1962 +1948 +1887 +1924 +1403 +1408 +1861 +1892 +1990 +1222 +677 +1392 +1113 +1085 +1894 +1106 +1939 +1961 +1944 +1952 +1643 +1404 +1895 +1958 +1976 +1206 +1905 +1076 +1888 +1896 +1943 +1950 +2008 +1967 +164 +1981 +1868 +1914 +1909 +1956 +341 +1379 +2007 +1563 +1980 +1072 +1949 +1250 +1258 +1092 +2002 diff --git a/2020/1/solve.py b/2020/1/solve.py new file mode 100755 index 0000000..fb3386b --- /dev/null +++ b/2020/1/solve.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python3 +from itertools import permutations +with open('input', 'r') as f: + content = list(map(int, (map(str.strip, f.readlines())))) +perms = permutations(content, 2) + +for perm in perms: + perm_sum = perm[0] + perm[1] + if perm_sum == 2020: + print('{} * {} = {}'.format(perm[0], perm[1], perm[0]*perm[1])) diff --git a/2020/2/input b/2020/2/input new file mode 100755 index 0000000..c1285bc --- /dev/null +++ b/2020/2/input @@ -0,0 +1,1000 @@ +4-6 b: bbbdbtbbbj +1-6 g: ggvggbgggstg +1-4 s: lssss +13-14 v: hvvcvvvvvvvvvsvvv +3-5 m: lcmmm +3-4 t: stht +5-6 b: dbkbhb +4-7 p: ppfppppq +4-5 j: jjjjj +3-12 s: sskssssssssss +14-15 z: zrndzbmrzzpzzqzj +12-18 l: tllllllllllllplllbl +8-10 b: bdbvqbtbrb +1-3 c: tcqccc +1-2 n: nbnj +5-7 c: ccccccccc +9-10 l: hpmslrlgll +6-9 n: nnnnnnnnb +6-10 r: rmzjlrsxkbw +6-8 r: bzqnnrrrj +4-14 c: mfffvcbtchzrqcn +1-6 f: ffffffffffffff +2-5 f: wxtkf +8-12 b: rdcbbjbzbbpb +8-18 d: ddtdddddddwvdfdsdd +5-8 s: sssmsgpgszms +6-11 x: xxxxxvxxxxxt +17-18 n: jhrnnzpxzngfqrntmnc +13-14 r: rrrmrrrrlrrshvrrr +4-5 h: hhhhrhh +8-10 d: dgwtdsxnncd +9-13 q: qqbpqmqgmqwqbqqqxcgq +2-5 g: gjjcpgg +6-12 t: ttttvttttttrtt +3-9 h: hhhhhhhhsh +15-16 p: ppppsppppppppppz +2-5 c: csccctcccc +11-14 p: pppppppppppppnp +8-9 j: jvbjjjjrjbjj +8-16 b: qklbmbntmvbhxplbbcb +12-13 j: jjjjsjmfjjjkhj +2-13 t: llckxhfmtznptndcsx +6-8 x: dxxxxvxxtt +3-4 d: ddht +3-4 t: ttdtt +11-12 r: rrrrrrrrrrrd +9-10 h: hhhhhhhhgh +3-16 h: hhhhhhhhhhhhhhnhhh +10-11 h: hxhhhdhhhsh +1-7 n: jnfnjnn +3-4 m: msmnpmpf +15-17 t: tpdtttgltvtttztlv +7-10 v: vvpsvpgjzvvvvjs +1-5 p: pxppg +2-7 w: jwhgkgvxcv +13-14 m: pxxmjznmrzdsbbmmfj +1-4 d: ddddd +14-16 r: rrrrrrrrrrrrrwrr +2-5 l: klbtzzlrlslgswhljtq +6-12 c: qccrcpccccccdccccc +2-18 l: llllllllvllllllllkll +18-20 z: zzzzzzzzszqzwzrzzzzn +5-16 c: cbccclcfcncvqztqc +7-11 m: fnwmtsmgpxncnr +6-7 h: hpjrhbhkshnchbhpph +11-12 s: ssssssssssps +6-9 s: jfsmmssssqz +1-15 l: llllllllllllllbll +2-6 g: gggggwgggpggggggg +6-9 j: jjjpjjjjn +9-13 n: nnnnnnnnnnnnnn +10-13 t: cgntllxnvpkjwxtght +2-11 f: xcftbcdcndkgm +10-13 j: jjjjjjjjjjjjvj +9-17 f: rfrffnsffxqflbffvv +6-11 k: kkkkkrwkqckmk +5-7 q: zfqqqqqn +12-13 c: cfcccvccccckccccv +5-15 z: xhzzzzzzzzfzzknzz +18-19 f: jkfksvmfjbdffffffff +8-11 h: hhhhmhhkhsfdg +14-16 s: ssssssdjssssssssssss +15-16 t: jtmjhsxqqmmthmtttm +5-7 h: hkbjhjhh +2-6 n: knprnfnfhhrcnk +3-4 w: snwd +5-11 w: wwwwnwwwwwwwwwwww +2-12 k: bkqjghpktfsk +14-15 v: vvvsvvvvvvvvvxv +8-9 w: fxwwwwwscwl +9-15 c: sbjvvsmdvqknbccxxx +6-15 t: tpwjtdnnldthxvn +13-15 t: tttttrzmzttjttt +3-11 m: mmvmlmmmwfmjx +13-14 s: gskssssssscssssqjssl +5-10 l: bfnmqlldllp +17-18 q: qkwqqqqqqqqqqqrqqqqq +2-5 r: rsvrrq +3-4 j: jjjdj +3-4 m: mtmk +8-9 k: vsvkvkrkc +10-12 t: ttttttcttttgttt +3-4 n: trzw +5-11 q: qqmpsqbxkqq +13-15 s: sqsssnmwqszfsmv +5-6 b: bbbbzvb +5-13 p: pjjhpnqpzpmpfpfp +4-5 l: mgnwlrw +1-7 k: fkzxwkj +1-10 q: qgxqqqqqqg +8-9 s: ssqssssfss +7-8 c: xxcscclccdvcmqcc +2-6 d: xdlmzdzxrpmlnt +3-9 s: sssssnssgbs +7-10 h: sblrrhqrhh +3-5 n: xnndnnnfnw +9-10 l: vllllqlllhllljxlp +2-5 d: ddxzbxk +10-14 m: mmmmmmmmmmdmmmmsmmm +1-2 f: ffffw +14-15 g: wdjhplhrbcxdgpnt +1-2 l: klllllll +10-11 k: ckkhkkvkkkmkkjkwkkwk +7-9 f: ffrhdvftfpjfqffhnfsf +4-5 c: kkjksrmkccg +5-9 r: rrrrhrrrrr +5-6 p: pppppth +4-10 t: kpfwzjtchtbndblrvst +1-5 l: mllllllnllll +13-16 r: rrrvrrrrrrrrzrrg +17-18 x: xxfxxxxxxxxsxxxxxsxx +8-11 w: rwbnqrngcvpgwwww +4-8 z: zzzzzzzzzz +4-9 b: bbvvbbbbr +2-5 x: qlfhxkx +3-8 t: wvptttttttt +1-3 m: hmmmmqmm +17-19 h: nhhhdvhnhrhhhhnhmdh +11-12 s: psszbdpsgfks +6-7 s: sssssshs +10-15 l: mnkdvnvmxljjtggwcl +1-13 j: qjjjjjjjjjjjdj +4-9 l: jxvkwhlmlhdtgwvgsdzz +5-9 c: ccfghhccccgc +10-11 v: vvvvvvvvvvv +7-8 t: cntwzshkzvmrnnkr +1-11 l: tllllllltllll +15-17 l: lllglvctrvllzkllt +3-5 n: ncnnp +2-3 q: jsqqh +4-10 h: hhhhhhhhhvh +16-18 b: bbnbbbbbtbbkktbbzdr +4-6 g: kbggdhgggggggggggfc +12-13 p: cpvcppqpplwpt +5-10 h: fvhhbrhpghchhhhhh +2-5 b: bbvzn +14-15 x: xxxbxnwxxxxzxxh +13-15 n: nnfgdglfnntnjqn +2-4 c: cfccc +3-5 v: vrvvzdvv +17-19 v: vvvvvvvvvvvvvvvvvvsv +1-20 h: hhhhhhhhhhqhhhhhhhhh +4-15 q: qqqtqqqqqqqqqqqqlq +11-13 h: hhkhvhhhhwhgk +8-11 p: ppvppppppptspf +8-9 m: mmmpmmkmdmpkspmg +1-7 m: lcmvggm +6-12 v: tvfstvvpvzsvcv +8-9 n: nnnqnnwrrdzlmnwlznrn +1-5 s: msssms +1-3 v: vpdzvdvgv +6-9 g: drgrfggcg +6-16 x: djpxhxvncxfghsxx +1-3 b: sjbwwxbvtvbkt +6-8 c: cccccstccjhv +1-11 q: qqqpqqqqqqwqqq +9-11 m: vsbmmmmmmmqmmsm +2-7 g: gqggggggg +2-3 m: mrgvm +6-7 c: cccpcfcc +6-10 w: swbngwswnxnww +13-14 r: rrrrrrrrrrwrrgrdr +3-9 v: vctxhxtfvq +2-9 r: jrrcslgplcprlvgthg +2-3 n: hnnnsxclvdj +10-11 h: zrhghhqhgzh +15-18 z: zzzlzzzzzzzzpzqzpzzz +3-8 f: fffffrfl +1-4 l: rllllfl +1-2 n: nnnnnvtnv +17-19 z: zzzzzzzzzzzzzzzzzzqz +13-15 n: nnnznnnnnnznnnn +2-5 c: gcccncjmsncfcntjc +8-9 h: hhhhhhhhbpsfh +7-11 r: lzvvlbrgjgrr +5-11 x: xxxxqxxxxxxx +4-7 p: gqpkmppzpsmtzhfdfpl +3-4 j: jjdjdg +14-16 z: zzzzzzzgjzzzzpzf +1-2 n: nnnvnwnnnnh +4-5 z: jhzzz +5-7 k: kkkkkkf +8-18 z: khzzrzjzmzzvzzpcclm +5-10 m: kjrhwkhmsm +10-16 v: vvvvvvvvvvvvvvvwv +9-10 l: xhvjsmllkcdtldfxlw +8-10 p: ppjvppbpqhpwhppgbp +4-6 m: jlmkhm +1-3 k: gvpklkkkk +15-16 g: ggjggggvgmgtpgcg +1-4 j: jbjwj +1-3 x: xxxpxxdxxhfx +14-16 v: vxmhhdvvfjjqwhtv +6-7 l: lnkchzlwxlp +3-4 v: vvvcv +13-14 p: pbqpppppzbmppc +6-12 p: glqwzprpqbqf +6-12 l: lllllglllllll +8-9 n: nnsnnnndcn +6-8 p: prwppppp +1-10 q: dqqqqqqqqjq +12-16 w: kwtbdnjqmwwxhwcwswkl +11-14 r: rrnjghfrrrshlrq +2-14 w: vwbbvcvgnxdmxl +7-8 g: sqmggkgslkwlvggg +1-6 q: tqqqqqq +2-3 b: bbbr +7-9 b: jnwbswfpbn +4-5 n: nnlct +3-11 s: ssssssssssp +2-6 f: wjlpwf +5-10 g: gggghqgqgb +1-3 p: ppdg +4-7 j: pjnkjjljjj +1-2 v: ghmjzxmtxjxnv +6-14 k: klgdzfmgdwhqdkhcnzm +6-11 z: tgzpzzzzztc +2-12 b: cxsmjbdgdnrb +4-6 v: lxdvvh +3-8 l: pnpdnrll +7-8 m: mzmswvmmbxmzlmwhdvq +13-14 s: khzssssssssszsssss +10-18 d: dmfdlgcxdbzznbrlqn +13-14 j: jjjjjjjjjjjjdpjj +15-17 j: jjjjjjjjjwjsqjwjj +10-15 x: xxfxkzxxhxxxxxvxxw +7-14 c: wcccwcmmcccccxhcccc +2-7 z: zmzvfzlszr +7-8 k: jjkrklrkkv +8-9 r: rrrrrjrtz +2-3 w: tvws +1-5 b: bbbjm +1-2 q: tqqjf +5-10 j: wlgjghjhjljwtpcdkqwk +2-5 c: dzpkc +5-6 m: mbvmkm +4-15 k: stjkjvvxrmwdpkwsjqvc +6-9 h: hwkgjplmhxwgvnbhwh +12-13 z: zzzzzzzzzzzzz +7-8 q: qqqqqqqqq +2-5 c: clcwmccczclcccc +2-5 l: jlcgfbflklvpfqxtwgg +5-7 n: nnnnnnvnnnnnn +3-5 f: gfktfffqvgltsbff +10-16 p: jppbttppzpqppppp +2-3 m: zmdm +4-6 j: zsmtjjdnrpp +17-18 j: hvvmrkfnnkvrjtjhjj +12-15 d: dtddddddddtwxgld +8-12 r: rdzrwfgrmxwttknxz +6-7 s: rssbktxsgd +11-13 d: ddddmwddddxddndc +3-6 p: ppcpspfp +12-15 j: jjjjjjgjjjjcjlzj +8-12 v: tgjkwfbsxzzvvpmfs +6-7 z: trbfbdz +4-6 v: vvvvvpvv +8-16 p: pnvppdpjppppppph +8-9 z: lzzzzpdzk +1-4 t: qttzz +2-3 d: dhdd +5-8 m: mmmkmmxmkj +2-12 f: hfhzkwdmrlqvfkn +5-6 h: hhhhhph +14-15 b: bbbbxbbbbbbbbbh +2-3 v: vvcj +12-19 d: ddvdwwqdddcdtdmwdqp +3-4 s: ssjssssssss +2-6 c: wzzxqcdcnlgcph +11-12 j: jjdrcjzjkjcs +4-9 z: bzzzzzzxzz +2-8 b: gjbfkxhb +1-3 c: cpksst +1-5 h: hhjhh +14-15 j: jjjjjjjjjjjjjjr +8-9 n: pcndxcfknfbnnls +10-13 k: kkkqzkwbkkkrtn +4-5 r: rzrrrnrj +13-15 p: ppppppppppppppt +3-6 j: fjqqzzzjm +2-9 m: zmjhctkmf +5-6 s: ssmjss +3-4 c: jlfd +8-12 d: qbddfhnddzgvddddd +6-7 p: xfppppcppppxgp +8-13 s: sssssssfssssssss +13-17 g: xskktsjxlvgfxtzzgfj +2-4 q: qqtwfqqnkvbvbhzs +1-5 j: cjmjs +4-5 c: tvccnc +3-14 m: kkfhmnkkmztxtmn +11-15 x: xxxxxpxmxxvbxxxvx +9-11 l: nhgzwmmrkqhblnk +7-10 x: xxxxxdmxxxxxxxx +13-14 v: vvvvvvpvvvjvvcvv +16-17 n: nnnnqnnbnnnnnnnpn +3-4 j: jvjj +15-16 q: zlqsgvpztknqjqqwqvf +3-4 s: sssrsssdss +11-13 g: ggqggmggswggdk +1-4 t: jmtzttztqt +2-3 v: vvvv +11-13 g: cgjgxgggkgbggxg +4-6 g: ggggqlhgmz +8-15 g: prvxwzkvdhgkjlg +6-9 g: gggggnsjlg +12-14 p: mmvlpzkmpgtpvj +7-10 k: kkkxkkjkkkdkkkp +14-16 b: zmztqsrgvjjmswzkbnk +1-2 x: xxbxxxxhx +2-5 l: tlhsx +3-5 x: xxxxn +4-12 c: vdnmtmqwnxkcldc +4-8 x: xxxxjglx +5-13 s: vsssspszssssnsss +3-6 k: kkhkkkknb +3-5 t: pttqtwnprt +10-14 m: ttjqvzmgmmjqzkd +1-5 b: bbbbpbbb +10-15 d: wdjrhvfngdtlkdl +6-7 w: trxwdwww +2-4 n: snxqlgtsmdnnjgwrgmms +16-18 l: klslpljllqlcslqqll +4-7 t: tttwzttjt +9-10 f: ffffffffwf +8-15 h: trhgxjchhxvvhqp +8-12 w: wwwwwwwqwwwg +12-13 x: xxxxxxxxsffqlxx +5-7 k: kkkklkkkktkk +1-7 m: wkmmqmmhf +12-13 h: mhhchwhhhzhhcvh +7-11 k: kkkkkkwkkkgkk +4-6 l: hdlbll +8-12 v: fvvvvvvvrvvv +2-9 h: hzhhhhhhhhhhhhr +6-8 b: qbqjpbbbdsshv +2-3 h: hwhl +4-7 l: mdllxjgdw +3-9 f: rwffzfkpwbzp +3-5 t: ttnttt +7-10 c: mpcccpndqc +6-7 h: fhhhljh +2-7 v: pnvzcns +1-3 v: vvgv +5-9 s: ssssshsspsssssss +4-6 j: mjjjjq +5-14 h: hwbqghmvmmnvhhrqmj +5-6 s: wctjsh +7-8 s: sssscsjs +14-17 v: vvvvvvvvvvvvvvvvv +14-15 w: wxwwwwwwfwwwwsw +6-7 v: ksvvvlpvv +7-18 s: cssstsvsscshsstsss +5-6 b: zzwbpm +6-7 r: bvtmpkxspskr +6-7 v: lvxrvqv +15-17 c: ccccccccccccccccccc +8-12 r: ghxpwhxcqjrr +6-10 k: kzbcdkndqm +5-6 s: tpsxss +1-5 p: qlrlp +4-8 q: qqqkqqqz +7-11 v: vgvsxvwvlxv +2-5 b: bgkbb +3-18 j: jjsplxjxgqjfjrjxjjlx +6-10 k: kxkhkkjkkrvkkk +7-16 t: ttttttzttttttttbtttt +1-7 l: ptzptslrjgwlfgwq +8-10 v: vvqvvvvvvvv +3-5 z: zzzhz +6-7 c: cbrctgc +5-16 l: llllxlllllllllllll +6-7 c: chxclqcdrh +1-10 c: jcmcccccwcccccjbvc +8-14 h: zhhvhhhhhhhhhv +4-7 n: rnnnnnfnnnnnvn +10-12 w: wwwwwwwsgtwww +5-8 c: cmbcctzcj +5-7 f: fffskrf +5-6 l: lllmzl +7-14 m: mmmmmmmmmmmmmmmmmmm +1-9 f: jfffffffzvffff +2-5 g: ggmng +16-17 x: xxxxxxxxxxxxxxxlx +4-10 n: npkgjcfnnnnn +1-13 d: bhkjgsnzxkdgwbdv +6-7 f: ncqfzff +7-10 h: hqhhhhhjhhh +2-4 v: vnvvv +1-6 w: thlmdwgwgtswvtx +3-7 d: ddlkhvfdnpbdr +1-4 q: qbfq +2-6 f: rzfmfrjgcfjk +10-16 b: bbbbblbbbkbbbbbbwqb +13-14 j: jjhcjnkgvrnwjp +5-12 l: lgqwvrlwcllllv +4-8 j: jjgpdjssspjfdbt +1-9 h: hhhhhhhhwhhh +4-6 p: psmppt +2-3 h: zhhhk +2-6 b: bbbbbmbbvb +7-9 z: zzzzzzgzdzz +8-9 d: ddgdmdwddd +2-6 s: nssssv +18-20 x: xxxxxxxxxxxxxxxxxvxx +9-10 m: dzckmrbhcmwvkcxmlx +10-11 v: vwvvvvwvvghvn +3-6 d: wcwxddjhnljfntj +13-15 v: vvvvvvvvvvvvcvc +1-5 x: xxfxfxxkx +7-8 w: wqzjzwwwtw +2-4 f: flgl +3-6 n: ncfngngdnm +5-7 k: kdkmbkkkkxk +5-6 x: xxvxth +5-6 r: rrhhzr +4-6 b: bbbrbbbbbmb +12-13 q: qqqqqqqqqzqkqp +6-14 n: mlbflnrbhlhpdrfln +9-12 q: qqqqqqqqqqqwq +3-4 k: rkncnbk +1-3 j: jjpj +8-9 v: vjvczrvvm +9-16 m: tmnmmmxmbmmmrtmmr +9-11 q: qqqqqzqqsjxq +3-5 h: hhhhcs +11-12 k: kkkkkkkkkkkvqk +11-12 x: xlxxxjjxxxpx +1-12 n: nngtnhlnjfnf +5-7 p: ppptppppp +13-14 l: lllmlflllhllpm +13-14 m: vdkmrdfzmkknmp +13-15 s: ssssssqssssscssss +5-11 h: hhhlxhhhhhhshh +10-11 s: ssssssssssgsssss +6-7 q: kqqqqmqnqq +8-13 l: llllllltlllljll +9-12 j: jjjjjjjjjjjlj +7-11 s: gstcncsssscssssss +4-6 x: lrtjfnhmpmxj +9-20 c: cttccccccnccclcccccc +1-8 w: cwwwwwwwwww +12-13 n: nnnnnnnngnnnnn +1-5 p: pfqwcpnppppwwpqppp +7-8 g: gggsgglghg +6-7 g: gggggggg +4-10 s: ssssssssssss +1-2 n: njsnnln +7-8 z: gzczzwdzkkzz +2-8 b: bbbwjfbh +6-8 r: rrrrbrrbr +2-5 k: lkkkkl +2-3 c: swcgjcm +2-10 t: ttttttttttt +12-13 l: lllllxllllllqhl +2-9 l: qtqxdpqqlwhqwlr +1-5 q: qqxrn +10-11 k: kkkkkkkkkckk +1-2 f: ffff +3-4 r: rrxr +8-9 p: lppppxpsp +2-5 s: ssstchlrds +11-15 m: mmmmmmmmmmmmmmmmm +14-17 k: kkkkkkkkkkgkkkktbkk +1-2 x: xlxx +9-10 w: wwcwptczwzzd +1-3 c: ccgcccccccccccccc +4-5 h: nhhhvh +8-16 l: hlllfllllmltlhlldl +4-5 w: wgwfw +6-15 p: pjpbfrmxqgkxkbqhj +12-17 l: llmtllnlllllllllnns +8-15 n: zjnxzndnznklxzjlx +6-9 r: wpsmstnkgtrmng +3-7 s: csvhxhsgvrsrn +10-15 h: hchhhdhkhghlhgsh +2-9 c: mzbmtccktc +3-4 x: xlzvxg +12-14 k: zmkskknwkkkmkkwkgkkk +4-9 r: vqrrrrdzpl +3-4 g: ggvbxg +5-8 q: xtrqrmqq +16-18 l: zllllllllllllllwlnll +6-7 s: zsqszss +3-4 g: wghgpg +1-6 z: hzzzzrz +3-8 h: hthfqtccnq +15-18 p: ppppppcpppppppnppppp +3-4 l: qplkdmjntlghjlpxlq +10-12 q: xzqkxdvgrqxqqzzxgjj +6-9 q: qqqvsvqqxq +12-13 g: shgcnjlgvcgqg +5-10 l: llklplllmlsl +3-12 l: vllqfzwnsqslpnvrbkh +14-16 g: gjggggggggggggbzcggg +5-11 m: ssmsmbnspmm +11-13 v: mkqvvvvvmcvvz +2-3 k: mkkchtzqsvkbclgxn +4-7 r: rphrrnrrqwknrktrgsg +6-10 z: vpjhzzzkqzjl +16-18 c: ccccccccccccccchccc +1-10 v: qvvvvzvvvvvv +5-7 j: jjrjjjj +14-16 l: zlgdrlqllgpllfhh +3-6 l: llmllll +3-4 l: smdl +4-11 h: kgqhcpvrbldrhbq +1-15 j: ljjjjjjjjjjjjjjj +7-14 c: ccccccccccccccc +2-10 v: vzvjvvvvvvvvv +4-9 p: flbpmqmhkpt +10-12 q: rtdrqmpcsqrhqqchqczw +16-19 w: vlwxgtmjwrzvqgdwbdw +8-15 c: gkcccslctcmszhc +3-7 f: hhffhbbtbwzw +4-9 s: msbsxssds +13-15 p: pppppppppcpppxldp +6-7 m: mmmmmqmm +11-12 m: mxmmzwmmmdqpmp +7-12 l: gncmgzxlqcllqgt +12-14 t: tttttttttttdtt +2-6 f: ffffffbrfffp +14-17 h: hhdhpphhhhhhkhhxqph +7-9 x: xxxxxxxxqxxxxxx +5-18 j: vlwgjljtljtrdbxjnjwm +5-7 n: jmncnsndnbwx +8-9 r: rrrrrrrrr +11-17 j: jjjjjjjjjjjjjjpjr +5-6 x: xxxxjt +13-15 l: nshmnjgzhmjdzvl +9-10 r: wmsvzxsrqnnhfr +8-11 k: kkkxxrkpktg +1-7 r: rrrrrrrfrrrjwrd +5-7 t: rztvtvplbrk +2-7 w: wwwwwwsw +1-2 g: sgggk +12-13 j: jjjjjwjjjjvvjjjrjs +1-2 c: cccccc +3-5 g: khgzr +9-16 b: bbbbbbcbsbbbbbbb +12-13 z: zzzzzzzzzszkz +4-5 r: rkrrrr +1-2 t: tgbqtddbmq +1-2 w: wkwwwww +14-15 q: qqdqqqqqqqqhqnb +6-7 r: rrrrrdmrr +8-9 j: jjjjjjjqhjjjjj +3-6 t: gwmlntffstzllvs +6-8 h: hhhhnhhhqh +9-11 w: cwcwwwwwgxwwbw +5-9 w: wwwwcwwww +8-12 k: snjmkkhrgkkzkkpskk +3-6 q: lvqjqlq +3-4 z: zzzn +9-12 t: dvmvhttxtmzhrr +3-7 k: kkkkkkskkkkkk +6-15 v: vqvvvdvvvvbvvvvvvvvv +3-4 z: jzzzzzdk +8-12 b: bbbbbbbbbbbs +3-9 m: nvhwmwgmmqkbmmmzb +8-10 r: npwjcgwrwcrx +1-5 r: rxdrr +6-9 p: ppppppsbkmppkp +1-4 j: jjjqjjjz +6-7 b: rblbbbbbbp +5-9 t: tttttttttf +8-9 c: czcccccccc +13-14 j: jjjbjjtbjjjjjj +3-8 p: pwppzqvp +3-12 m: mmzmmmmmmmmmmm +3-9 d: ddjddddddqddd +3-4 q: qqfq +6-14 m: mmmmmbmmmmwmmlmmmm +3-4 c: glgzc +6-7 t: ttttttt +1-4 s: sssbs +5-8 r: drrkrrrzrrrr +10-12 q: rvqfqqkllqqqlfrq +11-13 s: szsssssssssssss +8-11 t: tttttttsttvt +11-15 j: zjjjjjjjjjjjjjjjjj +2-4 s: dvfs +3-4 q: zhpq +10-11 c: cccccccccckc +5-11 h: pnrjhtdlkzvhh +5-9 l: nlllxgnrlllllllmq +3-4 f: gfff +8-9 g: grgggggbg +3-4 j: pfwjhh +2-5 l: jlfjr +2-4 l: lblv +3-10 q: qqvzhnqqhqvqq +11-15 t: tfttttttktwttts +12-14 b: gqptrzwclbdbfqd +1-4 r: crrprr +5-13 v: qvdvvvdnrqmrqp +9-12 r: rwrrlsrrsrrjgdnrrr +4-6 c: ccldccnp +16-17 q: qqqqqpqqqqlqqqqmlq +2-8 w: wwwwwwwhwmwws +3-6 m: dmmbmmdmkxm +6-13 t: xflrtblvcvfxnlf +2-6 m: pmnsmm +13-15 k: kstfvnkkgfvvkbk +4-10 w: jqwcwlcwcwvqbfzfzfm +1-5 d: ddndbmjxhfqqn +13-16 p: pzvbszhqtpklpkpdw +2-4 t: thttwmxjsbtp +8-10 s: zbsvjcssfmf +3-5 l: lltlwlllll +12-14 g: hgfvvfpnrvpfggnss +3-13 q: cjmbvgxchmqdqcvc +12-16 j: cjjjjjjjjjjqjjjjjj +1-5 m: kqrgm +11-14 x: xcjpwbrrffxkfxh +12-14 c: kgfnccxqczkcjkcc +3-4 f: sfftf +1-3 f: ffdz +12-14 t: xftfxmkttdsttg +4-9 f: ffhcgfffffff +9-10 b: zjlbbsbzbx +9-14 m: hhxmlmmmzmmtmm +3-5 t: tkcpzjwr +6-9 k: wkfdwflgrntrknsr +1-4 l: gfml +9-10 z: zzzzzzzzzrzzzz +9-11 h: hhhhhhhhhhzhh +1-9 k: kkkkkkkkzkkkkkkk +2-7 h: sswmmkhkvhw +2-5 m: pmbnnmzrkk +9-12 f: xhpfbfdffkfw +3-4 g: gfwg +11-12 n: nnnnnnnnnnnpnnnxn +5-6 d: dddddgddd +7-9 j: cbjgnjqjgj +9-14 r: rrrrrrrhrrrrrzbrr +4-5 p: prphk +2-4 d: dpdd +5-15 p: zjsppzhqqgqspcppqpps +2-7 r: rrrrrrfwrr +1-3 h: hhqh +14-16 g: zgvdgspkjrrvcgdlxg +4-6 c: psgqccccvc +9-14 q: qdqjqmttdtcqggqpqn +13-18 f: ffffffffffffgffffff +8-9 g: gggggggggggg +11-12 x: xxxxxxxxxxxr +2-17 c: cxcccfchcccccccbbcm +7-11 b: nwbrzndvrfxwt +3-4 x: xhwxxxv +16-17 r: rzrrnrrrvxrrzrrrrrr +2-3 f: zcvgbmxvwp +5-6 b: fwbbbf +6-10 m: mmmmmpmmmw +2-4 n: bnnvndbpvzj +3-4 t: dftfhdngqp +1-2 v: vtvvvvvvvvv +2-3 v: vgvv +9-10 s: tsvsshsssgssssmsksss +6-7 t: ttttttxt +3-4 c: jcrc +5-8 l: ztlmjljlb +4-5 w: bwwwww +11-14 r: rrrbrrrrrrnrrrs +10-16 z: zzzzznzzzwzzzzzzzz +7-13 m: mmmmmmfmmmmmmmmmmmmm +15-19 w: fflzcwftmcswcwwnwts +10-19 b: bjbbbbbbmwbbbbbbbbtb +14-16 x: xxxxpxxpxxqxdqxxxx +8-13 r: rkzrjbxrgwkhnb +5-18 r: rrrzfkrrrrrrrrtrrnrr +4-5 b: bbbfzb +6-10 q: qnscxqqfqb +8-13 w: wwwwwwwfwwwwwwwwww +10-11 n: scvnsnpgnjnmdpnwct +7-11 p: pjpppppdqpjpfppsptp +7-9 n: jfsvclhfm +3-8 h: whsggqscd +2-12 r: mrmpxhrqsdmqpjshvck +2-4 g: gdgggg +7-12 s: ssssssssgsss +7-11 l: dlklllnjlslbl +5-11 k: kkkkkkkkkkkkkkk +6-9 g: dhtvcgmfrjhk +4-5 m: lmmmhmsmmmmmcmmmmzmm +11-13 t: zgtnkjzmtkttmtkc +6-7 b: bbbbbbv +3-4 q: qqcq +12-16 z: zzzszjzszzczmxtzzcl +2-5 w: wwfhp +1-2 d: gddkd +5-12 f: fwqgbvrcfmwb +2-5 w: bnxcw +3-15 t: ncwftppphsxvztttjs +7-10 p: ppnsppkcppsp +5-6 v: vvrdvv +5-6 z: hczwbzz +3-12 p: gcphfgmzfkflspmxg +14-19 m: jmfmfjpvbmfmmrdkdnzp +6-7 p: pdwzppppp +4-7 b: bbbnbbqbb +7-8 r: frrrrrxxr +8-18 b: jbphpzgvnppwhkxfzs +1-5 c: pvhcc +4-8 z: fzznzjzztstzxrz +5-10 v: jvvwvvvlvlvqc +7-14 p: svgrzfpxkdpbhph +5-7 n: nncmvkn +11-12 r: rrlrbrrrvrrr +1-5 r: vtngrndhqf +2-4 k: knjp +11-14 h: hhghhhhhhhxhhwhhh +16-18 r: rrrrrrrrrrrrrrrpnb +10-14 d: dpddbvdtdmxfdddd +2-4 t: cztt +5-6 r: rzrprd +2-5 n: ngwdngc +1-6 q: qqqzzwwqqqkqqq +7-8 l: lllzllpxl +1-4 b: kmltzzjzbppgwq +1-4 t: ttttb +3-4 p: dkxpcph +7-15 z: zzzzzzhzzzzzzzzzz +4-7 c: cdljfccm +3-8 p: hbpxhlmc +4-5 w: wwwlw +14-15 b: lbqbbbkgbbwfbdb +6-10 j: jtjjvpwwthwcsj +5-8 t: ltvtttbtqxtzq +12-13 t: ttttttttjttztxt +16-18 p: ppppppppppppppxpxbpp +4-7 n: nnnrnnnnt +1-2 r: rfrr +5-6 g: ggggvggg +3-4 s: ssbw +3-4 l: ldll +8-10 m: mmmmvmmcjkmg +10-18 w: wwvwwvwwhwwjwwwlwxcm +1-2 x: cxxxxxxxxxxxxx +1-5 b: bbbbkbbb +12-14 z: zwqzrrzzvqqzzszrx +1-5 z: lzzfzzzfz +16-17 t: ftgstrgptwmptxrzt +9-10 b: bbbbbbbzbbbb +8-14 w: wwwwwwwjwwwzwzww +3-4 h: qhnh +2-12 d: dnddddkddddzdxdddd +5-17 x: xxxxxxxxxxxxxxxxx +9-10 h: hhhhtqhhhrh +6-7 p: pfmppppp +5-8 v: vbvvvvvs +4-5 h: qhfhqcb +3-12 d: dlddlhhwvcrdrxwpt +2-3 n: nnwnp +4-8 g: ggggjgfgzgdglgg +4-9 h: vrghsphxhxzsxw +12-18 z: qrzzzfwdcwnzdzkckz +6-8 v: zvmlqwwh +10-14 p: pppxwpndfpwppdpptmpp +12-15 q: qqnqkqkqjgrcqfq +2-4 n: pnszjnnn +2-3 c: zkctcfc +17-20 l: lvjlcclllslzllllwgll +16-17 k: dfgskkfkkkfjhfvfks +1-3 t: tjttltt +2-3 b: bbzbb +8-15 t: dtttttsttlttttzlttj +13-14 v: vvkvvjvgwvvvkvf +7-8 v: tvvvvvvhv +3-10 d: bxktdrtddtdtsh +4-12 j: npwxjjjjbjkq +1-4 l: tlllll +12-13 b: lbhpxbbbvbbbqbbbsbb +9-15 v: vqhsggmpvmqtbzzlq +12-14 f: ffhfjfffqfxqff +15-16 m: jtnsjwpggbpxlhqmk +2-4 n: xptncjsstcl +5-8 q: dmwklqjqnzb +3-4 c: vcgl +1-6 h: hhhhhh +8-9 x: ckblstcdx +5-7 w: vwphwwmwwwww +2-4 x: kxxxdh +10-11 m: kmmvmmmfmksmj +4-7 v: zvrvvvdvvv +1-8 p: npxbwqpxbjrnrv +5-11 t: jfkwttkstrxlgts +1-2 g: ggggg +5-7 p: tpppppr +15-17 v: vvvvvvvvvvvvvvvvvvvv +17-19 w: dwjwjznczwgfmkmhdtw +10-13 f: fffffbqfffffffffff +4-14 g: ggggggggggggggg +2-3 d: bdkfd +7-8 x: xxxxxxxx +6-9 h: hmshdhvvhkhbhcshs +14-15 g: gggggggggggggghg +2-16 q: qqsxqqqdgqqghqqk +3-17 p: ppbppprppppppppphppp +8-18 v: vczfvqcvvcspndvxwjdv +1-3 d: fdddd +9-11 j: gfjjnjsdnhb +8-10 s: hkhshttssl +5-10 f: ffsffffffqxfff +7-10 w: wwlwwckwwf +4-8 x: blxxmtbgnblfgnfwz +4-5 p: rlpkprppp +13-14 s: ssssssssssssswss +4-8 h: hhhdhmhhhjhlhh +6-7 h: chhhhhfhzqhdhhh +15-17 m: msvrmwzkzvmmgrmmpm +4-6 x: qgtwwxhgsxxmklgmn +4-7 p: rpzkdpp +3-4 v: vvvhvjv +16-18 p: pppppppppppppppppmp +15-17 k: kpkkkkkhqkkkkklktk +5-7 s: ssbxxsk +2-4 l: cwllll +6-9 v: cvvrrkvrvsdvfwcv +1-7 w: qwwwwslwwwwwwwwrww +2-12 c: clcccccccccccccc +5-10 m: ftcmrpmvrzc +7-11 w: wwwwwwwwwwtwwwww +2-3 n: jngdlvgcvtkmn +1-8 v: hvvvvvvvvv +3-17 p: jrpvltxlcqgpfxwsj +1-5 k: kkkkfkk +1-10 c: cccccccccfc +13-19 f: flfffffxfvffffprfmcb +3-6 g: htglsbvrzcghjmd +9-11 h: wrwghhhhnzhxl +5-12 z: zzkzzhnjpmkvzzzw +7-11 w: qrwcwwstwddw +15-19 m: mmmmmmmmmmmmmmmmmmmm +15-16 m: mmmmmmmmmmmmmmhmm +12-16 x: xxxxxcxxxxxlxxxxxxx +5-10 l: qwfqlllgsdjrlspll +3-4 f: hffmfffg +6-7 l: lwlllbllnl +11-20 t: tttkrtlpttwftmwttttt +11-12 d: ddbdddddddpktdd +4-11 w: sxkmkwdwwnlwxmdvfx +4-5 k: kkzkpk +13-20 n: nnnnnntnnnnnbnnnbnnn +5-7 c: ccccwcc +1-6 h: cckkhhdhhwmhhmzchhwx +1-15 b: hbbbbbbbbhbbhbbbbnbb +1-2 w: mwwww +1-2 f: sfzgwtf +3-4 s: sssj +1-3 w: xwww +1-16 p: ppppppppdppppppp +1-6 c: ccxmccccc +4-8 b: rtpbcfbr +9-10 s: sszssstshss +15-16 x: xxxtxxxxxxxmxxxzx +9-15 k: kkkkkkkkkkgrkkkkk +11-13 x: xtxxxxxxxxrxkxx +1-5 f: rffflfffnf +14-16 n: nnxnnnnnnnnnbnzbnnn +3-6 d: ddddddndbdfdhd +14-15 q: sbqqhvqqqvqgxfq +5-6 b: jglbfjb +1-10 l: llllllcllsll +3-5 z: lwzzz +5-12 k: kkkkmkkkkkkkkkkl +8-12 v: vvtsvfvnzvhpm +5-7 l: llllllll +4-7 f: nqfffkbdf +4-8 j: jjjljkhj +9-15 h: vgzpgfhfhmwdhbqc +1-5 p: ptpsjqpnp +5-8 q: qbqqwqnq +5-7 w: wwswwxsb +3-6 h: nnhrnhkmxqkt +1-3 w: jwwww +2-14 x: cxxxxdxxxxxxxbxx +12-14 x: xxxfxxxxqxxrxt +4-9 f: fffkffbsfkxv +12-13 m: mmmmmmmmmmmwm +6-10 p: ppppphpppxppp +9-12 v: vsvvvvkmjvvvn +3-12 r: shngvhbmjrpr +12-13 w: wqwcwxclwwwfw +4-5 r: nnrrdz +4-19 c: vbcpwzvxssccqkqgmxvj +1-6 g: tglxhggng +9-10 z: lvzhvtglzf +10-16 f: gddxfftggfbmxwts +4-12 k: kkkklkkkkkkpkkk +7-11 m: mmmmmmmmmmtm +2-10 z: vkfpjrrvlwlbjwk +3-7 w: dtdzwjqgxdwjhchwwd +13-14 v: vvvvvvvvvvvvvvvv +11-12 c: cjccccqccccc +14-15 h: hzhrhkhfthrhxht +3-5 v: dtwvvvvvcvvvrvsvvv +10-14 q: qhqqkqcqqqqqlfqgsqq +3-14 f: ffvffffffffzffffff +1-12 x: xxtxjxzxxxxxlxxxxxxx +2-4 c: pgpc +1-4 r: fdrr +5-7 r: rrrrrrt +10-11 d: drdddddddmddddpd +2-5 f: gfrlctftzr +10-13 z: nrzjjrzjzzplzmzzbn +8-10 c: cccccccgbc +5-8 g: fgggcndwgggbjnfgb +6-9 d: ddddghdgbddm +3-7 j: ftjjjvjqcp +5-6 s: sqvfstz +5-18 k: kkkwkkkkkkbkkkkkkkbk +3-6 f: djffffkff +4-6 p: pqppppr +5-9 h: hhkhjhmgcqvfhqvhn +8-12 t: tttttttvttttt +14-15 z: pzrzhjqmtbcnzdzr +1-17 s: ssssssssssssswsss +1-4 s: ssqh +1-5 r: rrrrrrr +17-18 h: hhhhhrhcxhhhhhhhhb +7-9 t: dttttjmtv +1-3 c: mcccp +4-5 x: xprbxql +1-5 q: cqqqqqq +3-4 g: ggggw +1-7 f: ffffffnf +7-9 t: ttttttttttt +11-15 m: mmlmfmmmmmmmmmmqm +4-5 n: npnnnn +4-5 b: zvbbvbjhlkf +11-16 c: gnqmcvtzwpcbvncwcc +12-18 q: qbqkwqqvqwqqnljsqpqt +6-10 r: wcrtdrlkgjr +16-17 p: gppppppppwvlgpptp +1-13 g: gqghbwqqzwwdk +1-6 l: rlllll +3-7 j: pdjjtcqwbqtpfkjbwgq +7-17 z: zzhsnjrhrzzfrqszdhdg +6-7 n: xnvnhnrn +6-7 r: rrrrrrzr +2-3 c: ccmcccc +2-3 v: vvdv +3-9 f: mlfffshbfdff +11-13 v: dfvkltvjvvvvx +12-13 c: mqrccccbccbgcccccvc +9-13 w: wwwwwwwwwwwwcwtww +6-8 d: pdvgddtmvwdkvdtzf +1-9 s: hsssssssssdsls +1-5 c: zbsslcd +1-4 p: bpppppppppp +13-16 s: sssxslsscssbqsspcs +1-10 p: pskwpppzpppppks +3-5 c: ccppccmcc +10-11 b: rhbbbbbbbzbb +2-3 d: ndhjhd +3-4 s: sscs +5-6 d: dtwwnt +4-5 d: dddddddd +5-9 z: zztzvzzzz +2-6 v: vpqdll +13-14 d: nxkmbkkpxkcdld +1-3 s: ssss +8-14 z: zzzzzzzzzzzzzbz +16-17 f: fffnffffffftbzffpkf +3-4 m: mtcm +3-4 r: mrdrd +11-13 k: ljkmhdkkkcpjzlmkkzkk +2-3 d: tdqnxpd +3-7 h: mrvdlthxchpvwvssqpk +13-17 j: jjfjjvjjjjjzjsjjksxr +1-4 n: rnnx +7-10 m: mmmmzmxfmm +1-6 r: lrrvrrrrm +4-18 r: rrrdrrrrrrrrrkblrr +6-7 k: kkkkkkl +4-6 v: vmnfvvvvmcmlh +6-9 g: jgcgggkbbmgbs +7-8 t: ttcfwtgjtcttv +3-4 j: tjjj diff --git a/2020/2/solve.py b/2020/2/solve.py new file mode 100755 index 0000000..fd936ba --- /dev/null +++ b/2020/2/solve.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 +import re +pattern = re.compile('(\d+)-(\d+)\s(\w):\s(\w+)') +with open('input', 'r') as f: + content = list(map(str.strip, f.readlines())) + +valid_pws = 0 +for entry in content: + mini, maxi, char, pw = re.match(pattern, entry).groups(1) + mini = int(mini) + maxi = int(maxi) + char_count = pw.count(char) + if mini <= char_count <= maxi: + valid_pws += 1 + +print(valid_pws) + diff --git a/2020/2/solve2.py b/2020/2/solve2.py new file mode 100755 index 0000000..d56172a --- /dev/null +++ b/2020/2/solve2.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 +import re +pattern = re.compile('(\d+)-(\d+)\s(\w):\s(\w+)') +with open('input', 'r') as f: + content = list(map(str.strip, f.readlines())) + +valid_pws = 0 +for entry in content: + p1, p2, char, pw = re.match(pattern, entry).groups(1) + p1 = int(p1) - 1 + p2 = int(p2) - 1 + if pw[p1] == char and pw[p2] != char or pw[p1] != char and pw[p2] == char: + valid_pws += 1 + + +print(valid_pws) + diff --git a/2020/3/input b/2020/3/input new file mode 100755 index 0000000..c0c1bde --- /dev/null +++ b/2020/3/input @@ -0,0 +1,323 @@ +....#...##.#.........#....#.... +#.......#...#...#.#............ +#..#..#.#.##....#.#........#... +........##...................#. +........#...##...#.#.###....... +##............#...#.....#.##... +...........#....###...#.....#.. +.......#......#..##..#.....#... +..#.#..#....#.........#...#..#. +.........##......#.....##..##.. +........#.....#....#..##......# +..#..#.......#..............#.. +.....#.#....................... +.#.#....#.........#............ +.......#.....#.###............. +......##......#...........#..#. +.#...............##...#........ +.....#..##........###.........# +#...........#..#............#.. +.........#....#..#.#......#.... +.......#.........#..##......... +.##.....#..................#... +....#............#.#....#.....# +..#....#...##....#...#.#...#... +..........#................#.#. +#...#.#.#.####..#.#..........#. +..#...#.##......#...........#.. +..#.....#...#.......#......#..# +..............#.......#........ +.#..#..........#.....#...#..#.# +#........#...#......#.......#.. +#..................#........... +..#...#........#...#..#........ +..............#.....#.....#..#. +#.#.......#..............##.##. +....#.#.....##....#...........# +......#....#...#..#.......#.... +....#..#.#.....#..##.....#....# +...........#.......#.#.#....... +#.......#..##........#..#...... +.........#.##..#..............# +...........#............###.#.. +..#.....#.....##...#.........#. +....##............##........#.. +.....###..........#......##.... +#...##..#..#..........#........ +....#.....#.......#..#.#...##.. +.#....#........#.#.........#.#. +##...#.#.....#......#.......... +.....##.....#....#.....###.#..# +..............#..###..#...#..#. +....#...#....#.............#.#. +.#.........#.....#........#.##. +....#.........#..........#..... +.......#........#.#.#.......... +#........##....#.........#..... +..##..........#....#.#...#....# +#...#.#......#..##..........#.# +.....#..#...#..#............... +#...#..............#........... +.#...#....#..##.....#....#.#... +.#...#.......#...#..#.##....#.. +#....#........#....#...#....... +#..#......#.....#.....#..##.... +......#.#....##....##..#...#... +..#....#.#.###..............#.. +.#.##.......#.#.#..#...#..#.... +..#..........#.#....#..#.#....# +..........#...#...#..........#. +..........#.....#.#..#..#....## +.#.#...##...#...........####... +........##..#.#..........#.##.# +#......###...........#...#..... +..#.#....##.........##....#.... +#....#.##..##..#..#.....#.....# +.##.....##....##....#.......#.. +#...#.....##....#..........#... +............#.#.##....#....#... +....#............#.....#......# +....................#.......... +..#....................#..#.... +....#.....#........#..##...#... +#.....#.#....................## +.#....#.#.#...#..........#....# +....#...#......#...#.....##...# +.....#......................... +.......#..#.#...#...#...#.....# +...#......#.##.#...#..#...##.#. +...........................#..# +..#.#.....#........##.......... +....#...##........#.#.#..#...## +..##.....#..###.........##.##.. +.#..#.....#...#.............#.. +#..............##...#....##.... +.##......#.#............#...... +.............##...#.#.......#.. +.........#..#..#............... +........##......#....##........ +...#.........#.#.#............. +#..........#......#......#..#.. +.............##.#.#..#.#.#...#. +.....#.........#............... +..##.#..#.....##..#........#.#. +.#..........#.#.......#......## +.#........................#.... +#....#....#...#..#......#...... +........#.......#......#.....#. +.....#....##..#...###...#....#. +....#.........#....#......#.... +.............#...#....#.......# +.....#.........#..#.#.......... +.........#..#........#.#.#..... +......#.##......#....#.#.##.#.. +.#...#.#...#...#.#......#....## +.#................#......#..... +#.#.#...............#.......... +.....#.#.......#...#........#.. +#...#.#.#.##..#...........#..#. +.............###.........#....# +.#.....#.......##....##.......# +....#...#.......#.##.....#..... +...........##.........#...#.... +..............#.#..#.....#..#.. +#.#...#..#.#.........#......#.# +#.##.....##....#........#.#.#.# +##.#.###.........##.......#..#. +#.....#.....................#.. +.........##........#........... +.###........##....#...#........ +....#.#........##...........#.. +..........#.....#..........#..# +......#..............#......#.. +.....#...#......#...#...#...... +..........#.#..#....#...#..###. +#..##........#................# +..#............................ +.....#.........#.#............. +........#...#.....#...##......# +..#........#................#.. +......#....#..#......#......... +...........##....#..#.#........ +.....#.............###......... +#............#......#..#....... +..#..#.................#..#..## +.......#......#.....#........#. +....................#..#.##...# +.#..##...............##...#.... +...#...#....#........#......... +.....##...#.....###............ +.###.........#........#.....##. +.............#...#............. +...#.#...............#..##..#.# +...#...............#..#.....#.. +....#.#..................#...#. +..........#...........#.#...### +#...#......#................#.. +...#.#.......#...#......#.##... +......#..........#............. +##.......#.##.#...........#.... +......#...#.#.....#............ +.#.....#.....#.....#.........#. +..................#............ +.#.#.#.....#......#.##......... +.......#..##.##......#..#....#. +...#.#.#......#...#........#... +..#............#......#.......# +..#......#........#.........#.. +..#..#.#.#.....#.............#. +..#.#..##......#...#...##...... +.##...#....##.#.#...........#.. +..............#..#...#....#.... +.......#.#........#............ +.....##..###........#.......... +......................#........ +..##....#....#................. +.##.#.###.#........#.##..#...#. +##................#...........# +....#..##.....##............... +.#.....#..#............#.....#. +#.........#..............#..... +...##.#......#...#............. +................#.............. +...#.....#....##...#..#....#... +..............##..#...#.##..#.. +......................#..#....# +.......#....#..#.##.........#.# +#...#........##.......#........ +...##...............#.....#.... +.##...##...#................... +.........##.#...#.........#.... +............#............#..#.. +.............................#. +....#.#....#................... +......#......#...#..##......... +#........#.#.#.#.#......#....#. +.#.........#.#...#......#..#.#. +..............#....##.........# +.#.......#..#....#.#.#....#.... +...###.#.#..#...#....#....#.... +#........#....................# +......#...##.###..#..##...#.... +.....#........#.......#........ +#..#...........#.#............. +....##.#...#..##............##. +#.#..##..#...#...#.....#....... +..#.............#.##..#...#.##. +.#.....##.#..#...#...........#. +....#...#....................## +....##......#.###......#......# +...#...#.........#..#.##....#.. +#......#..#....###.........#... +#...........##.............#.#. +#..............##....#......#.. +.........#...#.#...#...#....... +....#....#............#.......# +........#...#....#......##..... +..........#.#..#.........#..... +#........#.##....##......#..... +...#.......#................... +###...#...#..#.##....#.....#... +........##..........#.##..#.... +.....#......#..#.....#.....#.#. +...#..#..##..###.....##.#...... +#..#......##...#............#.. +#............#....#..#......... +#........#.......#......#..##.# +...#.#.........#.#............. +#..............#..............# +#.#......#..........##......... +#..##...........#..##...#...... +.....#.#.....#......#.....#.#.# +.#.##...#...##...........#....# +#.............#........#....... +..##.............#...#......... +....#.#......###....#.......... +...#..#.....#..##.#....#...#.#. +.............##................ +#.#............#........#..#.#. +.#......#.....#...........#.... +...#.........#...........#.##.. +.....#...#.....#..#..........#. +........#.#...............#.#.. +.......#..#..#.....#.......##.. +.#...#...#..#...##...#......... +..........##....#..#.##..#..... +....#.................#...#.... +.........#...#......#....#....# +.........#..#...#.##........##. +#.#....##.......#.#............ +##.......##..................#. +......#...#......##............ +##.#...#.#...........#..#...... +.........#.........#..#.#...#.. +.#...#.......#.#...###......... +................#.#.....#...... +..#...#.....#........#......... +.........##.###.#.#.....#...#.. +#..#..........#....#.#...#...## +##.#.#....#..##.............#.# +.###....#..#...............##.. +............#......#.#.#....#.. +........#...#..#...#........... +##.........#................#.. +...###...#.#..#...#..........## +...#......#......##........#... +.......#............#.......... +.....#.....##....#.....###..... +.#...#...#.....#..#..#....#..#. +#.#........#..#.......##...#.## +.....#.....##..#.##........#..# +.....#...#...........#......... +..#....#.#...#..#....##...#...# +...........#...##.........#.... +..#....#....##........#.####... +#.............#.#.............# +...................#.....#.#..# +.#....#.#.............#.#...... +#...........#............#.#... +..#.........#.#....#.......##.. +#....####......#...#......#.... +....##....#...................# +....#.##....#.............#.... +.........##........#.....#..#.. +............#...#.............. +............#..##....#.....##.# +............#.....#......#..... +........#..#........##.#....... +...#.#........#..............#. +............#.........#..#.#... +................#.............# +..##..........##......#.#...... +..#..#.##....#.........#...#... +...........##...#.#.#.......... +.#.#.......#.#...#.........#... +.........#..#........#..#.#.... +..........##..#.##....#....#... +....#...............#.......#.. +##..........##................. +....#.#.#.....#..........##.#.. +..............#.##..........##. +##...............#...#..#...... +..#..#..........#......#....... +#...#..##.#.#.................. +....#....##......##.#...#....## +.#...#.#....##.............#..# +................#......###..... +..#..#.............#.#.......#. +..#..................#.......#. +.....#.......#....#.##...#.##.. +.....##.......#......#..#...... +#..#.......#........#.......... +..#...#..#....#.........#...... +#..#..#......##..#.##....####.. +......##.#.....#..#.......#.... +.##...#.....#..#...#.#......... +#.....#........###....#...#..#. +.#....#.#..#......#............ +.........#..#..#.....#........# +..#.......#..........#..#...... +......#.......##.#....#.#.#.... +.#............#.....#.......#.. +...#..#...............#........ +.....#......................... diff --git a/2020/3/solve.py b/2020/3/solve.py new file mode 100755 index 0000000..232eed2 --- /dev/null +++ b/2020/3/solve.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python3 + +class cursor(): + def __init__(self, game_map): + self.x, self.y = 0, 0 + self.limit_x = len(game_map[1]) + self.map = game_map + def setx(self, x): + self.x = x % self.limit_x + def sety(self, y): + self.y = y + def isTree(self): + line = self.map[y] + char = line[self.x] + return char == '#' + +with open('input', 'r') as f: + game_map = list(map(str.strip, f.readlines())) + +slopes = [(1, 1), (3, 1), (5, 1), (7, 1), (1, 2)] +cur = cursor(game_map) +tree_list = [] +for slope in slopes: + print(slope) + x, y = 0, 0 + cur.setx(x) + cur.sety(y) + try: + trees = 0 + while True: + x += slope[0] + y += slope[1] + cur.setx(x) + cur.sety(y) + if cur.isTree(): + trees += 1 + except IndexError: + tree_list.append(trees) +result = 1 +print(tree_list) +for res in tree_list: + result *= res + +print(result) diff --git a/2021/1/1.py b/2021/1/1.py new file mode 100755 index 0000000..0d0b6a0 --- /dev/null +++ b/2021/1/1.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python3 + + + +content = open('input', 'r').readlines() +depthInc = 0 +lastDepth = 9999 +for line in content: + depth = int(line.strip()) + if depth > lastDepth: + depthInc += 1 + lastDepth = depth +print(depthInc) + +if __name__ == "__main__": + main() diff --git a/2021/1/2.py b/2021/1/2.py new file mode 100755 index 0000000..2dd803c --- /dev/null +++ b/2021/1/2.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 + + + +content = open('input', 'r').readlines() +depth_inc = 0 +last_window = 9999 +window = [] # queue for "search window" +window_size = 3 + +while len(window) < window_size: + window.append(int(content.pop(0).strip())) +# we now have our starting state +last_window = sum(window) +while(content): + # slide window 1 position + window.pop(0) + window.append(int(content.pop(0).strip())) + window_sum = sum(window) + if window_sum > last_window: + depth_inc += 1 + last_window = window_sum +print(depth_inc) + diff --git a/2021/1/input b/2021/1/input new file mode 100755 index 0000000..900b6a4 --- /dev/null +++ b/2021/1/input @@ -0,0 +1,2000 @@ +191 +192 +201 +205 +206 +203 +188 +189 +199 +206 +224 +230 +233 +232 +260 +257 +258 +259 +251 +233 +236 +237 +238 +241 +242 +243 +250 +259 +251 +255 +263 +265 +266 +259 +265 +260 +267 +270 +271 +284 +286 +301 +302 +304 +309 +333 +335 +342 +350 +349 +342 +343 +345 +346 +331 +332 +317 +324 +328 +327 +332 +320 +340 +341 +344 +353 +361 +372 +376 +387 +397 +433 +431 +432 +436 +435 +449 +460 +474 +476 +483 +490 +487 +488 +495 +500 +511 +531 +537 +525 +503 +506 +515 +517 +518 +517 +514 +516 +521 +515 +516 +517 +526 +514 +490 +487 +484 +482 +474 +476 +480 +479 +474 +482 +480 +481 +483 +484 +482 +481 +477 +478 +482 +483 +494 +517 +520 +517 +510 +497 +481 +519 +522 +524 +528 +530 +543 +542 +543 +531 +529 +528 +526 +499 +521 +526 +518 +533 +535 +538 +542 +572 +573 +574 +548 +550 +559 +567 +569 +570 +571 +570 +587 +592 +600 +620 +630 +627 +652 +659 +656 +663 +661 +666 +681 +687 +702 +714 +715 +711 +714 +722 +719 +723 +721 +720 +731 +724 +726 +732 +735 +736 +739 +745 +739 +747 +745 +758 +755 +754 +755 +756 +757 +758 +759 +760 +763 +799 +800 +810 +825 +826 +829 +841 +848 +852 +855 +858 +856 +874 +894 +897 +892 +925 +932 +935 +931 +953 +971 +967 +953 +957 +941 +950 +952 +923 +922 +933 +938 +943 +944 +964 +952 +935 +913 +901 +902 +903 +904 +901 +909 +910 +909 +929 +930 +929 +924 +916 +904 +897 +905 +908 +899 +898 +903 +907 +924 +915 +919 +911 +915 +916 +926 +931 +933 +965 +967 +968 +979 +981 +997 +1009 +1012 +1010 +1011 +1036 +1035 +1049 +1050 +1048 +1053 +1054 +1055 +1053 +1046 +1055 +1069 +1067 +1062 +1081 +1079 +1091 +1093 +1095 +1093 +1100 +1091 +1093 +1107 +1109 +1105 +1111 +1121 +1140 +1141 +1148 +1149 +1162 +1166 +1165 +1163 +1164 +1165 +1169 +1182 +1188 +1186 +1185 +1165 +1169 +1176 +1177 +1179 +1183 +1182 +1188 +1191 +1181 +1183 +1204 +1203 +1204 +1206 +1201 +1215 +1232 +1234 +1239 +1243 +1235 +1239 +1242 +1238 +1240 +1241 +1263 +1259 +1267 +1257 +1261 +1265 +1264 +1261 +1260 +1262 +1265 +1263 +1266 +1262 +1263 +1268 +1271 +1282 +1286 +1287 +1284 +1280 +1279 +1280 +1288 +1289 +1292 +1287 +1293 +1301 +1329 +1343 +1350 +1347 +1348 +1354 +1356 +1359 +1360 +1363 +1369 +1366 +1369 +1370 +1368 +1373 +1376 +1385 +1391 +1400 +1411 +1415 +1396 +1398 +1428 +1433 +1442 +1444 +1436 +1467 +1469 +1470 +1484 +1485 +1489 +1498 +1468 +1469 +1468 +1465 +1459 +1460 +1458 +1459 +1460 +1462 +1467 +1479 +1499 +1501 +1512 +1515 +1516 +1519 +1524 +1538 +1547 +1558 +1563 +1573 +1584 +1592 +1606 +1632 +1630 +1637 +1640 +1633 +1662 +1677 +1681 +1679 +1681 +1683 +1684 +1704 +1709 +1705 +1702 +1701 +1700 +1707 +1708 +1717 +1709 +1718 +1721 +1738 +1740 +1746 +1748 +1750 +1751 +1757 +1758 +1765 +1767 +1749 +1730 +1732 +1745 +1751 +1752 +1750 +1747 +1746 +1751 +1756 +1766 +1767 +1769 +1767 +1775 +1806 +1812 +1808 +1809 +1845 +1846 +1848 +1860 +1864 +1866 +1868 +1874 +1853 +1852 +1848 +1835 +1851 +1850 +1843 +1842 +1835 +1862 +1865 +1859 +1886 +1887 +1888 +1900 +1926 +1942 +1944 +1945 +1946 +1945 +1939 +1946 +1951 +1946 +1951 +1957 +1971 +1985 +1986 +1987 +1990 +1991 +1992 +1991 +1986 +1989 +1991 +1998 +1996 +2002 +2003 +2007 +2009 +2010 +1989 +1991 +1990 +1991 +2001 +2016 +2017 +2026 +2028 +2039 +2038 +2053 +2047 +2052 +2049 +2050 +2052 +2057 +2055 +2053 +2051 +2042 +2027 +2036 +2026 +2040 +2042 +2046 +2045 +2050 +2051 +2072 +2073 +2075 +2072 +2078 +2077 +2082 +2087 +2074 +2079 +2074 +2070 +2071 +2070 +2074 +2076 +2077 +2084 +2086 +2089 +2102 +2100 +2102 +2104 +2110 +2112 +2093 +2104 +2107 +2104 +2130 +2101 +2103 +2102 +2103 +2111 +2116 +2117 +2122 +2119 +2126 +2127 +2128 +2148 +2159 +2160 +2157 +2165 +2173 +2169 +2170 +2175 +2161 +2151 +2163 +2172 +2209 +2211 +2209 +2223 +2222 +2221 +2220 +2226 +2228 +2229 +2226 +2234 +2214 +2212 +2216 +2215 +2220 +2223 +2228 +2234 +2233 +2235 +2233 +2235 +2264 +2263 +2262 +2285 +2287 +2303 +2286 +2287 +2279 +2280 +2285 +2279 +2281 +2291 +2295 +2322 +2323 +2332 +2337 +2340 +2343 +2344 +2370 +2371 +2370 +2377 +2385 +2390 +2389 +2396 +2401 +2407 +2410 +2411 +2412 +2413 +2415 +2422 +2419 +2431 +2439 +2444 +2447 +2457 +2443 +2455 +2466 +2483 +2471 +2472 +2481 +2486 +2490 +2470 +2471 +2483 +2481 +2480 +2490 +2529 +2541 +2546 +2547 +2570 +2574 +2560 +2558 +2562 +2561 +2566 +2565 +2563 +2569 +2571 +2582 +2596 +2594 +2593 +2594 +2585 +2566 +2567 +2550 +2559 +2551 +2561 +2542 +2544 +2553 +2557 +2561 +2574 +2577 +2593 +2601 +2613 +2621 +2623 +2628 +2627 +2648 +2640 +2639 +2664 +2649 +2659 +2663 +2662 +2664 +2659 +2660 +2659 +2675 +2654 +2655 +2657 +2656 +2662 +2669 +2663 +2652 +2645 +2656 +2664 +2660 +2680 +2684 +2673 +2678 +2675 +2662 +2663 +2666 +2668 +2681 +2676 +2687 +2688 +2689 +2688 +2689 +2692 +2693 +2704 +2703 +2702 +2701 +2707 +2710 +2711 +2713 +2712 +2687 +2697 +2698 +2699 +2733 +2731 +2738 +2739 +2740 +2746 +2741 +2744 +2741 +2746 +2744 +2731 +2733 +2740 +2741 +2745 +2747 +2748 +2765 +2774 +2787 +2789 +2790 +2794 +2797 +2778 +2788 +2790 +2789 +2784 +2788 +2789 +2807 +2826 +2842 +2835 +2834 +2837 +2846 +2847 +2849 +2866 +2868 +2880 +2881 +2885 +2892 +2893 +2895 +2896 +2905 +2907 +2914 +2917 +2915 +2910 +2914 +2916 +2917 +2926 +2927 +2946 +2961 +2962 +2952 +2954 +2960 +2972 +2976 +2978 +2999 +3007 +3009 +2998 +3001 +3021 +3017 +3011 +3013 +3010 +3007 +3019 +3020 +3037 +3038 +3037 +3041 +3046 +3060 +3064 +3066 +3056 +3059 +3058 +3049 +3056 +3063 +3065 +3055 +3056 +3055 +3054 +3067 +3066 +3071 +3075 +3057 +3056 +3057 +3070 +3082 +3107 +3109 +3107 +3102 +3101 +3103 +3098 +3096 +3097 +3093 +3095 +3097 +3106 +3124 +3125 +3128 +3137 +3145 +3143 +3146 +3120 +3122 +3135 +3129 +3158 +3159 +3176 +3212 +3216 +3220 +3222 +3225 +3229 +3235 +3252 +3247 +3252 +3256 +3259 +3270 +3277 +3286 +3296 +3311 +3322 +3324 +3331 +3363 +3364 +3376 +3372 +3373 +3384 +3392 +3397 +3393 +3395 +3407 +3408 +3409 +3404 +3409 +3414 +3422 +3427 +3426 +3428 +3410 +3418 +3416 +3408 +3406 +3411 +3412 +3418 +3427 +3425 +3413 +3400 +3399 +3400 +3393 +3394 +3395 +3394 +3393 +3392 +3389 +3390 +3394 +3395 +3402 +3394 +3395 +3415 +3405 +3407 +3432 +3439 +3437 +3439 +3458 +3461 +3469 +3464 +3463 +3464 +3453 +3458 +3452 +3455 +3456 +3459 +3464 +3468 +3471 +3474 +3476 +3475 +3477 +3479 +3481 +3482 +3492 +3501 +3506 +3501 +3497 +3498 +3501 +3502 +3496 +3510 +3513 +3515 +3533 +3534 +3545 +3552 +3561 +3554 +3561 +3562 +3563 +3564 +3553 +3554 +3558 +3546 +3547 +3561 +3563 +3547 +3570 +3572 +3579 +3590 +3604 +3634 +3627 +3630 +3629 +3632 +3598 +3599 +3619 +3617 +3630 +3624 +3625 +3627 +3636 +3632 +3633 +3638 +3642 +3640 +3621 +3623 +3620 +3627 +3625 +3624 +3616 +3648 +3630 +3625 +3628 +3634 +3629 +3649 +3651 +3652 +3653 +3660 +3672 +3674 +3684 +3706 +3707 +3713 +3708 +3707 +3697 +3674 +3670 +3671 +3670 +3674 +3676 +3677 +3674 +3693 +3691 +3693 +3694 +3698 +3662 +3671 +3664 +3665 +3666 +3667 +3665 +3666 +3667 +3666 +3667 +3663 +3662 +3665 +3659 +3651 +3657 +3656 +3663 +3659 +3669 +3666 +3652 +3643 +3635 +3665 +3673 +3682 +3681 +3674 +3673 +3677 +3674 +3672 +3674 +3677 +3685 +3697 +3696 +3708 +3704 +3702 +3705 +3709 +3740 +3741 +3740 +3734 +3738 +3741 +3743 +3741 +3723 +3693 +3703 +3702 +3712 +3713 +3705 +3706 +3703 +3718 +3749 +3761 +3760 +3763 +3765 +3757 +3733 +3740 +3736 +3762 +3761 +3771 +3764 +3761 +3763 +3762 +3756 +3771 +3753 +3759 +3789 +3791 +3792 +3780 +3787 +3788 +3786 +3792 +3793 +3790 +3794 +3795 +3794 +3791 +3801 +3802 +3811 +3813 +3815 +3818 +3824 +3835 +3837 +3836 +3838 +3840 +3841 +3842 +3840 +3841 +3843 +3872 +3879 +3884 +3871 +3878 +3896 +3897 +3896 +3895 +3893 +3887 +3882 +3885 +3887 +3875 +3876 +3856 +3859 +3853 +3831 +3832 +3831 +3830 +3814 +3815 +3799 +3814 +3811 +3834 +3845 +3842 +3847 +3853 +3854 +3853 +3851 +3870 +3869 +3870 +3868 +3876 +3874 +3875 +3872 +3866 +3874 +3873 +3857 +3858 +3857 +3865 +3874 +3865 +3876 +3878 +3881 +3883 +3884 +3885 +3887 +3863 +3862 +3864 +3867 +3872 +3875 +3876 +3884 +3880 +3891 +3897 +3898 +3894 +3891 +3895 +3893 +3912 +3913 +3910 +3916 +3912 +3917 +3925 +3937 +3942 +3941 +3947 +3952 +3955 +3952 +3944 +3945 +3946 +3960 +3985 +4012 +4013 +4014 +4012 +4032 +4045 +4029 +4030 +4048 +4055 +4054 +4072 +4073 +4083 +4085 +4086 +4091 +4094 +4097 +4112 +4090 +4102 +4108 +4134 +4147 +4148 +4149 +4172 +4175 +4182 +4176 +4154 +4170 +4180 +4179 +4186 +4187 +4182 +4170 +4172 +4178 +4181 +4193 +4188 +4193 +4192 +4202 +4205 +4207 +4185 +4183 +4187 +4189 +4204 +4207 +4202 +4204 +4201 +4214 +4219 +4216 +4211 +4199 +4196 +4195 +4199 +4200 +4201 +4192 +4191 +4195 +4217 +4205 +4210 +4218 +4204 +4207 +4213 +4214 +4215 +4233 +4240 +4253 +4251 +4253 +4262 +4266 +4257 +4261 +4262 +4271 +4263 +4262 +4284 +4288 +4267 +4276 +4283 +4284 +4283 +4284 +4281 +4278 +4266 +4261 +4260 +4276 +4281 +4283 +4272 +4297 +4302 +4301 +4312 +4311 +4329 +4346 +4336 +4347 +4365 +4364 +4366 +4370 +4372 +4365 +4364 +4367 +4365 +4366 +4368 +4369 +4372 +4379 +4373 +4391 +4390 +4393 +4389 +4370 +4372 +4375 +4376 +4378 +4387 +4388 +4408 +4419 +4421 +4414 +4415 +4413 +4415 +4419 +4420 +4405 +4422 +4421 +4423 +4435 +4434 +4439 +4441 +4443 +4450 +4446 +4450 +4452 +4453 +4454 +4458 +4462 +4475 +4492 +4489 +4494 +4498 +4497 +4498 +4499 +4511 +4515 +4516 +4529 +4534 +4538 +4540 +4537 +4544 +4561 +4562 +4563 +4565 +4569 +4564 +4569 +4576 +4580 +4619 +4618 +4620 +4633 +4634 +4613 +4611 +4614 +4632 +4618 +4629 +4631 +4643 +4640 +4644 +4628 +4630 +4632 +4631 +4648 +4652 +4651 +4640 +4637 +4638 +4641 +4649 +4654 +4650 +4648 +4651 +4650 +4630 +4631 +4632 +4628 +4634 +4633 +4635 +4641 +4633 +4632 +4634 +4646 +4658 +4654 +4639 +4658 +4659 +4664 +4673 +4679 +4681 +4687 +4685 +4719 +4720 +4721 +4731 +4741 +4744 +4727 +4729 +4735 +4738 +4748 +4749 +4750 +4746 +4753 +4754 +4762 +4773 +4774 +4777 +4783 +4782 +4793 +4799 +4805 +4810 +4813 +4812 +4824 +4817 +4815 +4817 +4816 +4804 +4809 +4827 +4820 +4819 +4849 +4850 +4851 +4850 +4862 +4861 +4873 +4875 +4878 +4879 +4882 +4883 +4878 +4880 +4893 +4890 +4891 +4886 +4889 +4890 +4904 +4902 +4925 +4927 +4923 +4920 +4915 +4924 +4896 +4898 +4891 +4894 +4898 +4900 +4901 +4902 +4912 +4913 +4911 +4908 +4917 +4905 +4908 +4931 +4934 +4969 +4973 +4972 +4982 +4983 +5001 +5000 +5004 +5009 +5007 +5002 +5000 +4999 +5000 +5002 +4991 +4993 +4997 +4998 +5000 +5003 +4998 +4999 +4996 +5005 +5004 +4993 +4994 +4995 +4996 +5000 +5004 +5011 +5013 +5012 +5002 +4999 +4979 +4989 +4992 +5002 +5004 +5005 +5004 +5027 +5026 +5027 +5031 +5035 +5037 +5044 +5050 +5057 +5062 +5065 +5062 +5056 +5058 +5065 +5073 +5093 +5092 +5109 +5110 +5130 +5137 +5159 +5172 +5164 +5194 +5196 +5197 +5234 +5233 +5222 +5225 +5227 +5231 +5248 +5249 +5261 +5254 +5255 +5256 +5257 +5254 +5252 +5253 +5261 +5279 +5266 +5267 +5259 +5283 +5309 +5332 +5335 +5336 +5337 +5336 +5344 +5349 +5356 +5386 +5396 +5403 +5409 +5410 +5413 +5415 +5417 +5431 +5433 +5436 +5434 +5436 +5440 +5450 +5449 +5461 +5480 +5482 +5479 +5481 +5482 +5494 +5495 +5494 +5495 +5498 +5497 +5510 +5512 +5508 +5499 +5509 +5520 +5540 +5553 +5554 +5555 +5568 +5550 +5540 +5535 +5564 +5567 +5575 +5574 +5586 +5579 +5580 +5579 +5577 +5588 +5592 +5562 +5568 +5589 +5595 +5606 +5607 +5596 +5608 +5627 +5635 +5632 +5631 +5630 +5629 +5628 +5626 +5625 +5629 +5630 +5629 +5630 +5633 +5634 +5639 +5640 +5660 +5666 +5660 +5663 +5662 +5672 +5671 +5652 +5650 +5667 +5666 +5642 +5643 +5642 +5640 +5642 +5644 +5649 +5650 +5647 +5648 +5647 +5651 +5650 +5651 +5653 +5646 +5627 +5636 +5635 +5623 +5624 +5625 +5624 +5633 +5630 +5622 +5619 +5616 +5634 +5635 +5630 +5664 +5671 +5673 +5671 +5683 +5693 +5699 +5700 +5701 +5697 +5693 +5664 +5665 +5677 +5670 +5684 +5653 +5648 +5646 +5648 +5645 +5651 +5650 +5651 +5652 +5653 +5654 +5639 +5648 +5640 +5657 +5667 +5685 +5706 +5697 +5698 +5702 +5709 +5705 +5720 +5723 +5716 +5712 +5708 +5707 +5668 +5665 +5666 +5667 +5666 +5670 +5669 +5670 +5671 +5675 +5676 +5682 +5683 +5673 +5675 +5666 +5675 +5677 +5686 +5693 +5694 +5676 +5677 +5678 +5680 +5689 +5712 +5714 +5730 +5729 +5740 +5743 +5776 +5777 +5788 +5787 +5783 +5791 diff --git a/2021/1/template.py b/2021/1/template.py new file mode 100755 index 0000000..e8c88aa --- /dev/null +++ b/2021/1/template.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python3 + + + +content = open('content', 'r').read() + +if __name__ == "__main__": + main() diff --git a/2021/2/1.py b/2021/2/1.py new file mode 100755 index 0000000..868fc8e --- /dev/null +++ b/2021/2/1.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +import re + + +def main(): + position = { 'x': 0, 'y': 0 } + content = open('input', 'r').readlines() + for line in content: + move = line.strip() + match = re.match('^(\w+) (\d+)$', move) + direction, amount = match.groups(1) + amount = int(amount) + #print(f'logged: {direction} {amount} ') + if direction == "forward": + position['x'] += amount + elif direction == "down": + position['y'] += amount + elif direction == "up": + position['y'] -= amount + print(position['x'] * position['y']) + + +if __name__ == "__main__": + main() diff --git a/2021/2/2.py b/2021/2/2.py new file mode 100755 index 0000000..0222174 --- /dev/null +++ b/2021/2/2.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +import re + + +def main(): + position = { 'distance': 0, 'depth': 0, 'aim': 0 } + content = open('input', 'r').readlines() + for line in content: + move = line.strip() + match = re.match('^(\w+) (\d+)$', move) + direction, amount = match.groups(1) + amount = int(amount) + #print(f'logged: {direction} {amount} ') + if direction == "forward": + position['distance'] += amount + position['depth'] += position['aim'] * amount + elif direction == "down": + position['aim'] += amount + elif direction == "up": + position['aim'] -= amount + print(position['distance'] * position['depth']) + + +if __name__ == "__main__": + main() diff --git a/2021/2/input b/2021/2/input new file mode 100755 index 0000000..a5acc98 --- /dev/null +++ b/2021/2/input @@ -0,0 +1,1000 @@ +forward 2 +down 4 +down 1 +down 4 +forward 3 +down 6 +down 5 +forward 3 +forward 8 +down 2 +down 3 +up 8 +down 5 +up 7 +down 7 +forward 5 +up 2 +down 6 +forward 7 +forward 1 +forward 2 +forward 7 +up 7 +forward 6 +down 3 +down 1 +up 9 +down 2 +up 1 +down 1 +up 6 +forward 6 +down 7 +forward 6 +up 1 +down 6 +forward 2 +up 7 +forward 4 +forward 8 +forward 7 +down 7 +forward 8 +down 1 +down 6 +down 7 +forward 4 +down 3 +up 7 +down 5 +down 9 +up 8 +up 4 +down 2 +down 3 +up 7 +forward 6 +forward 6 +forward 8 +forward 2 +up 5 +down 8 +down 3 +down 3 +down 4 +down 9 +down 6 +up 6 +forward 4 +down 6 +forward 3 +forward 3 +down 4 +down 8 +down 2 +up 5 +up 5 +forward 3 +forward 5 +down 7 +forward 6 +forward 9 +forward 8 +forward 2 +down 3 +down 3 +down 7 +down 1 +down 1 +down 1 +down 2 +down 8 +down 6 +forward 6 +up 1 +up 6 +down 7 +down 1 +forward 1 +up 2 +up 8 +up 8 +forward 2 +down 1 +down 8 +down 7 +down 1 +forward 1 +down 9 +up 3 +down 3 +forward 2 +down 3 +up 6 +down 2 +forward 7 +down 9 +down 6 +down 1 +forward 6 +down 4 +down 1 +down 3 +forward 3 +down 5 +forward 9 +down 5 +down 7 +up 8 +forward 8 +forward 8 +down 6 +down 1 +forward 8 +down 4 +up 4 +up 4 +up 2 +forward 2 +forward 2 +down 1 +up 8 +down 1 +down 7 +forward 5 +down 9 +down 2 +up 3 +down 1 +down 5 +forward 6 +down 7 +up 3 +forward 7 +down 4 +down 3 +forward 4 +up 8 +down 4 +forward 4 +forward 2 +forward 5 +down 5 +up 2 +forward 4 +down 4 +forward 6 +down 4 +forward 1 +down 5 +forward 2 +forward 2 +down 8 +forward 4 +forward 7 +down 3 +up 3 +forward 2 +forward 6 +forward 8 +down 2 +forward 4 +down 2 +up 9 +down 9 +down 2 +forward 5 +up 4 +forward 2 +down 2 +down 3 +forward 1 +down 2 +forward 8 +forward 8 +down 4 +forward 6 +down 3 +down 3 +down 5 +forward 8 +forward 4 +forward 1 +up 4 +up 2 +forward 8 +down 8 +forward 2 +forward 6 +up 1 +up 5 +forward 2 +forward 4 +forward 7 +forward 8 +forward 2 +down 3 +down 1 +down 9 +down 6 +up 5 +up 6 +forward 6 +down 3 +down 2 +down 1 +forward 5 +forward 2 +forward 7 +down 8 +down 7 +forward 7 +up 8 +forward 7 +down 1 +up 4 +forward 9 +forward 4 +forward 1 +down 3 +down 9 +down 7 +forward 1 +down 3 +forward 3 +down 4 +down 7 +forward 4 +up 6 +down 8 +up 1 +forward 6 +forward 1 +down 7 +down 8 +up 9 +up 4 +down 3 +down 7 +forward 8 +up 2 +up 6 +forward 8 +down 1 +up 4 +up 4 +forward 8 +down 2 +down 4 +down 3 +forward 5 +down 8 +forward 1 +down 2 +forward 9 +forward 3 +up 6 +down 6 +forward 6 +forward 4 +down 6 +down 3 +down 3 +forward 6 +down 5 +up 4 +down 9 +down 3 +down 6 +up 9 +forward 6 +down 2 +forward 7 +up 8 +down 3 +down 7 +down 9 +forward 6 +down 1 +forward 2 +down 1 +down 3 +down 3 +forward 5 +forward 2 +up 5 +forward 4 +up 7 +down 9 +forward 7 +forward 3 +down 6 +forward 1 +down 1 +up 8 +down 9 +up 3 +down 7 +up 9 +forward 7 +down 7 +down 9 +forward 9 +forward 7 +up 9 +down 7 +down 2 +down 7 +up 2 +down 3 +down 9 +down 6 +forward 7 +forward 8 +forward 8 +forward 6 +forward 9 +forward 4 +down 4 +down 5 +down 7 +forward 6 +forward 2 +forward 4 +forward 9 +down 4 +forward 6 +down 7 +up 1 +down 7 +forward 9 +forward 7 +down 4 +down 3 +up 6 +forward 8 +forward 7 +down 8 +forward 4 +up 6 +up 4 +forward 9 +forward 4 +forward 4 +forward 7 +down 1 +up 6 +forward 8 +forward 3 +up 6 +forward 4 +down 1 +up 2 +forward 1 +down 5 +forward 5 +up 4 +down 6 +down 3 +up 8 +forward 9 +down 2 +forward 4 +forward 8 +down 9 +forward 5 +forward 2 +down 9 +down 8 +forward 8 +down 7 +up 6 +forward 1 +up 9 +up 3 +forward 9 +down 6 +forward 9 +down 3 +down 3 +forward 7 +forward 5 +down 8 +down 9 +down 3 +down 6 +up 8 +down 9 +forward 8 +down 7 +down 5 +down 1 +up 4 +down 9 +forward 6 +forward 9 +up 6 +up 4 +forward 3 +forward 2 +forward 1 +down 1 +down 2 +forward 8 +up 6 +forward 5 +up 4 +down 1 +forward 5 +down 3 +down 6 +up 7 +forward 2 +forward 6 +forward 7 +forward 4 +down 5 +down 4 +forward 4 +down 6 +up 2 +up 2 +forward 7 +forward 3 +down 8 +down 1 +down 8 +forward 7 +forward 7 +up 5 +forward 4 +up 8 +down 9 +down 4 +down 4 +forward 5 +down 1 +forward 2 +down 6 +up 4 +down 8 +down 1 +down 9 +down 5 +up 5 +forward 4 +down 2 +down 8 +down 4 +forward 4 +forward 5 +down 8 +up 9 +forward 7 +forward 6 +down 8 +down 3 +up 7 +down 7 +forward 2 +forward 5 +forward 7 +down 9 +up 1 +down 6 +down 2 +forward 6 +forward 3 +forward 3 +up 9 +forward 4 +down 5 +down 7 +forward 8 +forward 6 +forward 5 +down 9 +down 5 +down 1 +down 7 +forward 9 +forward 8 +down 2 +down 4 +down 1 +up 5 +up 5 +forward 5 +down 3 +down 1 +forward 8 +up 9 +up 3 +down 3 +up 3 +up 5 +forward 8 +down 3 +up 3 +down 9 +up 6 +up 8 +forward 5 +up 2 +down 6 +forward 3 +down 2 +down 4 +forward 9 +forward 6 +forward 3 +up 5 +down 9 +down 7 +forward 9 +forward 7 +forward 5 +up 5 +up 1 +down 6 +forward 4 +forward 4 +down 7 +down 1 +up 3 +forward 6 +forward 4 +down 1 +forward 5 +forward 3 +forward 1 +forward 3 +up 3 +up 9 +down 7 +down 4 +forward 8 +down 8 +down 3 +up 2 +down 8 +forward 5 +down 7 +forward 6 +down 9 +up 5 +forward 4 +down 2 +forward 6 +down 8 +down 7 +forward 8 +forward 5 +down 2 +forward 7 +forward 5 +forward 7 +down 8 +forward 5 +down 8 +down 6 +down 7 +down 9 +forward 9 +down 6 +forward 8 +up 6 +up 1 +down 5 +forward 1 +forward 7 +up 2 +up 5 +up 6 +down 5 +down 5 +forward 7 +down 9 +down 2 +forward 9 +forward 3 +down 5 +up 2 +up 8 +forward 5 +forward 8 +up 1 +forward 3 +forward 1 +up 4 +forward 1 +down 9 +down 6 +forward 1 +down 4 +down 4 +forward 9 +down 3 +up 6 +down 3 +forward 6 +forward 6 +down 3 +forward 6 +down 3 +down 1 +forward 3 +down 7 +up 9 +forward 1 +down 7 +down 2 +up 8 +down 1 +down 9 +down 1 +down 4 +down 6 +down 3 +down 7 +down 2 +down 9 +down 2 +forward 4 +up 3 +down 4 +up 4 +down 1 +forward 5 +forward 7 +down 7 +forward 9 +forward 6 +down 8 +forward 6 +forward 7 +up 3 +down 3 +up 6 +forward 7 +up 4 +forward 4 +down 1 +up 8 +forward 7 +down 2 +up 6 +forward 1 +forward 3 +up 9 +up 8 +up 5 +forward 7 +up 5 +down 6 +forward 7 +forward 7 +down 4 +down 3 +forward 2 +down 8 +up 9 +up 6 +forward 7 +forward 5 +down 9 +down 2 +up 5 +down 3 +down 3 +up 5 +down 8 +forward 7 +down 4 +down 2 +up 9 +down 5 +down 8 +down 5 +down 6 +forward 9 +down 3 +down 8 +forward 3 +down 1 +down 9 +forward 1 +down 3 +up 9 +up 3 +forward 8 +up 2 +down 4 +up 5 +up 4 +down 9 +down 5 +up 3 +forward 2 +down 8 +forward 8 +forward 7 +up 4 +down 9 +down 6 +up 1 +forward 9 +up 8 +forward 4 +up 3 +down 4 +up 2 +up 7 +down 2 +forward 3 +down 8 +down 9 +up 7 +up 8 +forward 3 +forward 1 +forward 7 +forward 5 +forward 9 +forward 2 +up 1 +down 1 +up 4 +forward 1 +up 9 +forward 7 +forward 2 +down 6 +down 5 +forward 9 +forward 4 +down 6 +down 6 +up 8 +down 3 +up 8 +down 3 +forward 2 +down 1 +down 1 +forward 5 +down 1 +forward 9 +up 8 +forward 2 +down 5 +up 8 +up 8 +forward 8 +forward 8 +forward 3 +forward 2 +forward 8 +forward 9 +forward 8 +forward 6 +forward 4 +up 7 +forward 9 +forward 8 +up 7 +forward 6 +forward 9 +forward 8 +down 7 +forward 9 +down 4 +down 1 +up 1 +up 9 +forward 2 +down 6 +down 2 +down 8 +down 6 +up 8 +forward 7 +up 9 +forward 5 +forward 4 +forward 8 +up 4 +forward 4 +up 6 +forward 7 +forward 1 +up 8 +down 6 +forward 7 +forward 3 +forward 2 +down 4 +forward 4 +down 7 +down 6 +down 2 +up 3 +up 5 +down 7 +down 9 +up 8 +down 1 +up 1 +down 8 +up 8 +forward 8 +down 6 +down 1 +down 6 +forward 3 +down 9 +down 5 +up 3 +down 1 +down 1 +forward 4 +down 4 +up 3 +forward 8 +up 4 +down 3 +down 5 +down 3 +forward 6 +forward 3 +down 2 +forward 9 +forward 3 +forward 2 +down 2 +forward 6 +down 1 +down 1 +forward 5 +forward 4 +forward 6 +down 7 +forward 7 +forward 3 +forward 1 +up 3 +down 6 +forward 1 +up 9 +forward 9 +forward 5 +forward 3 +forward 3 +down 3 +up 8 +forward 5 +up 6 +forward 2 +down 7 +forward 2 +forward 8 +forward 8 +forward 3 +up 9 +down 5 +down 3 +forward 7 +up 9 +forward 4 +down 1 +down 3 +down 5 +down 2 +forward 9 +up 6 +down 3 +down 7 +down 3 +up 6 +forward 3 +down 4 +forward 2 +down 8 +down 2 +forward 7 +down 2 +down 9 +forward 1 +down 1 +down 9 +down 6 +forward 5 +down 1 +up 1 +forward 5 +forward 4 +forward 9 +down 3 +forward 3 +forward 5 +down 9 +forward 9 +down 8 +down 2 +forward 1 +up 1 +down 5 +forward 2 +up 9 +forward 9 +forward 7 +forward 9 +forward 3 +down 7 +forward 2 +down 4 +up 3 +down 7 +down 6 +forward 2 +down 2 +forward 8 +up 9 +down 1 +forward 7 +down 8 +forward 3 +down 2 +down 5 +down 5 +down 3 +forward 1 +up 9 +up 9 +down 8 +down 6 +up 7 +forward 7 +down 4 +forward 6 +down 9 +up 5 +up 6 +forward 4 +forward 1 +forward 1 +down 7 +down 8 +down 2 +down 4 +down 3 +up 8 +down 3 +forward 3 +forward 8 +up 3 +down 2 +forward 4 +down 3 +forward 5 +up 1 +down 9 +down 1 +down 4 +forward 3 +forward 6 +forward 7 +forward 2 +forward 9 +forward 1 +forward 6 +forward 7 +forward 2 +up 1 +down 6 +down 1 +forward 6 +down 6 +down 5 +forward 1 diff --git a/2021/2/template.py b/2021/2/template.py new file mode 100755 index 0000000..7c7334a --- /dev/null +++ b/2021/2/template.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python3 +POSITION = { 'x': 0, 'y': 0 } + + + +def main(): + content = open('input', 'r').read() + +if __name__ == "__main__": + main(): diff --git a/2021/3/1.py b/2021/3/1.py new file mode 100755 index 0000000..28cde45 --- /dev/null +++ b/2021/3/1.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python3 + +def main(): + content = open('input', 'r').readlines() + input_length = len(content) + # init with first row + popcounts = [int(bit) for bit in content.pop(0).strip()] + #print(popcounts) + for line in content: + popcounts = list(map(int.__add__, popcounts, [int(bit) for bit in line.strip()])) + gamma_rate = "" + for val in popcounts: + if val >= (input_length/2): + gamma_rate += "1" + else: + gamma_rate += "0" + + mask = (1 << len(popcounts)) - 1 + gamma_rate = int(gamma_rate, 2) + epsilon_rate = gamma_rate ^ mask + print(f'gamma: {bin(gamma_rate)}') + print(f'epsil: {bin(epsilon_rate)}') + + print(gamma_rate * epsilon_rate) + + +if __name__ == "__main__": + main() diff --git a/2021/3/2.py b/2021/3/2.py new file mode 100755 index 0000000..835c04f --- /dev/null +++ b/2021/3/2.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python3 + +def is_bit_set(integer, bit_index): + return bool(integer & (1 << bit_index)) + +def get_mcv(_input): + input_length = len(_input) + popcounts = [0 for bit in range(len(_input[0].strip()))] + #print(popcounts) + for line in _input: + popcounts = list(map(int.__add__, popcounts, [int(bit) for bit in line.strip()])) + mcv = [] + for val in popcounts: + if val >= (input_length/2): + mcv.append(1) + else: + mcv.append(0) + return mcv + +def main(): + content = open('input', 'r').readlines() + #mcv = get_mcv(content) + # mask = (1 << len(popcounts)) - 1 + # gamma_rate = int(gamma_rate, 2) + # epsilon_rate = gamma_rate ^ mask + + # print(f'gamma: {bin(gamma_rate)}') + # print(f'epsil: {bin(epsilon_rate)}') + #print(f'mcv: {mcv}') + bit_length = len(content[0].strip()) + oxy_input = content + while len(oxy_input) > 1: + offset = 0 + while offset < bit_length: + mcv = get_mcv(oxy_input) + print(mcv) + print(f'length {len(oxy_input)} offset {offset} mcv {mcv[offset]} ') + oxy_input = [x for x in oxy_input if int(x[offset]) == mcv[offset]] + if len(oxy_input) == 1: + break + offset += 1 + oxygen_value = int(oxy_input[0].strip(), 2) + + co_input = content + while len(co_input) > 1: + offset = 0 + while offset < bit_length: + print(f'length {len(co_input)} offset {offset} mcv {mcv[offset]} ') + mcv = get_mcv(co_input) + print(mcv) + co_input = [x for x in co_input if int(x[offset]) != mcv[offset]] + if len(co_input) == 1: + break + offset += 1 + co_value = int(co_input[0].strip(), 2) + print(co_value * oxygen_value) + + + + + + +if __name__ == "__main__": + main() diff --git a/2021/3/input b/2021/3/input new file mode 100755 index 0000000..d4a5493 --- /dev/null +++ b/2021/3/input @@ -0,0 +1,1000 @@ +101000111100 +000011111101 +011100000100 +100100010000 +011110010100 +101001100000 +110001010000 +111110011011 +000110100110 +110100000001 +110100001001 +010000100011 +000010011100 +111001110001 +011001000010 +100011100110 +101010100111 +001011001101 +001101100100 +111010110100 +010101011100 +001010010000 +101001111001 +101110010001 +110100011100 +001010111110 +011110110100 +110110101110 +000000101101 +001100000110 +110010110001 +010110101110 +100111000111 +000010101111 +010101111011 +011101000100 +010000011011 +110011111111 +000001100100 +100100110110 +100001101001 +110001000010 +010111110110 +101101011001 +010101101101 +010001101100 +100010000000 +111111001001 +111101001011 +010110011001 +011000000100 +011100101000 +111101001000 +111000110010 +110000000110 +001101011000 +101110010011 +100010011111 +111110010000 +000011010011 +111110100010 +111111001111 +101001011110 +111001101001 +111010011100 +001011001111 +001010011110 +110111101010 +101111101101 +011101110101 +001111110101 +010111110011 +000010011000 +111111111000 +000101001100 +110011001000 +100010100110 +100110101110 +001010101101 +110000111000 +101100010110 +000000100101 +111001101101 +111010001101 +111110000111 +010101000010 +100000101101 +000011100011 +011011000111 +011000011111 +100101011100 +101011000110 +111110001110 +001010011101 +101001101001 +001101111110 +000100000010 +011110000001 +010111101101 +010101100010 +000110000011 +100001111010 +011001011000 +001011110100 +001101111011 +001110110010 +001010101000 +100001001100 +101010100110 +100010101011 +111000010000 +100101100111 +010001011001 +010010101101 +001001000111 +100010111100 +001011100011 +100100001101 +110000110010 +100010011101 +111001011100 +101101011011 +010011111111 +010100111111 +000101100011 +111001110111 +000010100100 +101100000000 +111110100011 +110101111111 +001101001101 +010110000110 +110100010100 +011100011100 +110011001100 +000001010111 +110100001000 +110110100111 +010000001111 +100011111110 +001000010000 +011101001001 +100110101111 +000010101101 +100011010101 +010101001000 +110101011101 +111111101010 +101011101101 +010101001001 +101101000110 +110110101000 +110100100101 +000011110101 +001110101001 +011101011110 +111111110100 +010111000011 +100101010000 +010011111010 +111001101100 +100100010101 +100101100001 +001111000111 +110100101001 +010010011100 +011001000101 +111101010001 +001100010000 +111100000011 +000101001000 +010011010111 +101110011000 +110000111010 +110010001011 +111110110010 +000000001011 +011001111001 +001001001110 +100111001111 +110110001010 +110110010101 +110011001101 +010001101001 +000010100111 +100111111110 +111011100001 +011000100000 +111111000100 +111100100010 +110110110110 +001100111110 +101000100001 +000010000101 +111101011101 +001001001101 +101011001101 +000010010001 +011010110001 +110000000010 +000111001000 +111110101100 +011111000111 +010101111000 +010100010110 +111111100100 +110011010001 +010110001110 +000100010011 +100101100011 +101010001011 +001010111101 +111110111000 +101001100011 +011100110010 +101001101010 +111011110000 +011101110000 +000001101111 +111101101100 +110101000101 +011000110101 +000111100101 +111110011101 +000111101010 +010011100101 +101001001001 +100010101000 +111111100011 +011011101111 +001011111001 +001001101011 +100101100101 +100011111000 +010110100001 +000100111111 +010100111101 +010100100000 +110000101000 +100001011000 +100010011000 +100011101111 +001100010001 +010001010001 +011011001001 +001001110110 +111011011100 +000110010000 +111110011111 +001111101000 +010010010001 +000011001110 +101011101100 +001000110110 +111000010001 +010111000101 +110000001110 +000011111010 +010000010100 +011101001110 +000111011011 +000111110010 +111110110101 +101110100001 +111101011100 +010001111001 +010011011000 +111110111011 +111000100110 +000110001001 +100000111110 +001101101010 +101100111010 +000101011111 +001101010111 +011001010011 +001111010110 +010101000000 +010011100001 +010011001000 +110110011011 +110100111000 +101110000111 +100101110111 +000001011100 +111110111110 +000001011010 +010101101000 +010010100100 +011100010011 +110111001000 +110011100001 +111100111010 +010001110100 +000100100111 +000001110011 +110011100111 +010010101111 +100010001101 +111101101011 +110100010101 +101010111110 +111010011110 +111101101101 +000100010000 +111101010010 +011100001111 +101010110001 +000111111100 +010100001101 +111100010000 +101011110110 +010100011000 +100111101001 +011100000000 +000110110110 +001111010011 +111100111101 +101111101100 +001000101100 +111100011000 +010101110000 +001110110001 +000000011110 +010010111101 +000001001001 +110100101101 +100010010100 +010100001001 +100110001000 +000011001011 +101011001111 +100010100111 +011101100000 +110111101111 +001110100010 +100101101110 +110100000000 +001010100100 +011100110100 +011100011111 +010101100110 +011000001000 +100000111010 +011011100000 +000011110011 +010111011111 +011100101111 +111011111001 +110010111101 +101101110101 +101100100010 +001001111100 +100100111001 +101101111110 +001100100110 +011011100101 +110111010010 +101100111111 +000011110111 +001110111101 +100110000000 +001100010100 +110001101101 +011010100000 +000100011010 +011001011010 +011111111111 +011000001100 +111111110001 +000000101110 +000110011111 +001110100000 +001110011101 +000000011000 +101001110011 +000101101010 +000100001110 +101100011011 +110010101111 +011101000001 +110001011000 +111011011111 +111110100100 +010101011111 +110011111000 +000101111111 +001101011101 +010111011011 +101000110011 +001110010001 +010010001001 +000010011010 +000010101001 +110111110100 +100101001000 +000101000100 +101111001001 +101111111111 +010000010010 +101001110000 +100100001110 +001001110010 +111010110010 +110011011111 +101001110100 +011100111111 +100000111111 +110101101100 +000100110100 +100110101010 +100100000100 +010010000110 +010110001100 +000010001001 +001100001010 +100001101000 +100010011001 +010101101110 +010000111001 +101110110010 +111100100000 +110000101110 +101001101111 +100101001100 +111011101111 +001111000001 +011101111101 +011000010111 +101011111001 +101011010110 +010000000011 +100010011011 +001111001011 +101000011101 +001101100010 +100111010101 +000111100001 +101111010011 +000101101100 +111110000101 +110100011110 +011101101000 +100000111001 +111000101001 +000011010100 +110101011011 +010011100011 +111011010110 +010110111000 +110111010101 +001111111110 +000011011101 +001011000100 +000101101111 +101100011100 +001001101100 +011110111100 +010001000001 +100100101101 +001101010101 +101101111001 +111001101011 +100111001010 +100110111001 +110000101111 +001001110101 +011101101111 +101101100011 +101000011111 +101010111101 +011100010111 +011010110000 +100111101111 +110101110100 +011111011000 +110010100000 +010110100000 +100010101111 +100101001110 +000101000000 +100111110111 +000101100100 +010111101111 +110100101000 +110111001010 +010011000000 +000110110100 +000110011010 +110000010110 +111000100100 +001110001110 +100011100111 +100101000100 +100110110100 +110010110011 +001100101000 +000101001001 +110101000100 +100101010101 +000101011101 +111110000001 +000101110001 +011001011100 +101001110010 +010111001000 +100000000111 +101110101000 +111000001011 +101111110111 +111000111010 +011101000111 +101111110001 +011010101111 +111100100100 +100111000101 +000011100110 +011110110010 +110110100001 +011111010000 +100111010000 +011000101000 +011001000111 +000000001000 +000100101010 +010011001111 +100100011100 +011110100011 +000010111101 +000110010110 +110010100010 +001100011011 +101101000001 +110111101011 +110101100000 +100101011000 +110111011111 +111011100000 +011101101101 +110101001000 +000100111000 +101100101001 +111101101111 +000100111100 +000101111110 +011100101011 +111101000101 +111000101000 +010111110001 +111011001001 +110001010010 +110101001101 +101101000010 +110101010100 +001100011010 +001100001001 +101011000101 +110101010001 +010111011100 +001110110011 +111110101000 +101101010111 +001110001010 +011000011101 +101111000011 +101000000000 +001000000010 +000110111001 +110100110110 +111000100010 +110011010000 +101000101111 +001100101111 +111111111001 +110001001000 +010100010101 +000100101100 +101110111111 +101001001100 +010111100011 +101100101101 +101101001111 +010110011010 +000101001010 +100111110010 +101110000110 +000000110111 +001001010110 +010101000110 +001101000101 +001011101000 +101010110110 +010111000000 +111110001001 +011101110001 +000101110100 +101110101011 +100010101001 +111001100101 +011010010101 +111010010000 +001010110111 +100111101101 +001011001001 +111100110001 +000000000100 +011010110111 +100101011111 +011000001110 +100111010010 +111111000111 +011110110110 +011000110011 +000101101011 +011011101101 +001110111010 +111011110100 +001100101001 +111001111011 +111111101111 +011011000101 +011000110010 +100011110001 +111101110001 +100010101100 +010111111001 +001001100100 +100010111110 +110111100111 +100110000100 +111110011000 +110000100011 +011000010010 +011110011001 +101011011111 +010111001001 +010001011101 +111000100101 +001011000111 +010011111110 +011110011110 +011011111100 +011000110000 +101100111110 +010101111110 +110111100010 +000111001101 +111100000101 +001001010010 +001101111111 +101000011001 +000111010110 +010101100011 +011101110110 +101100110010 +100001010001 +010110001010 +010101011110 +111110101101 +000011111110 +010010000100 +010111000111 +000110001011 +010000101001 +000000010000 +100011100000 +000001100110 +101100011000 +011001110001 +010011011001 +110000000111 +000101101110 +010011000111 +110100011010 +001110100111 +000100010101 +000110110111 +100001010000 +001110001000 +111101100100 +001001100000 +100011111010 +101111001110 +100010111011 +011110000110 +101110100000 +001100001100 +011010010000 +011001111100 +110011011110 +110110001111 +001100010111 +101110001100 +101110101010 +000010000111 +101010000101 +010011011010 +010010011000 +010100101011 +001110000101 +000110111111 +011011110110 +111111100110 +100011110101 +001011011110 +111001111100 +110011101001 +011010001011 +110001100001 +101100101100 +011100001001 +010101011000 +111111111011 +110001111011 +110111110011 +111100001010 +110011011000 +100011001000 +011100100000 +110110110010 +101011110101 +001101100101 +111001010000 +111010100110 +011011011101 +001000011001 +000111011100 +111001001100 +101111010000 +100101101101 +000010010110 +101110111010 +010011000011 +001000011010 +000101000010 +100000110100 +100000011101 +110001001111 +010100101100 +100100010111 +010111100001 +010000111101 +001000100101 +101101111100 +111001110101 +111101010110 +010101001100 +100101011011 +100001100101 +001100101011 +111101011110 +001100100100 +000000101100 +010000101100 +011010011011 +111101101001 +110010110111 +010101111111 +011001101000 +011000010001 +001111011011 +001001011111 +110101000000 +110101000010 +100111110100 +111010011010 +000011001111 +101010110010 +100101111001 +100110100110 +111001110011 +011000100010 +001110010011 +001110001111 +100101000101 +111000011101 +101111101010 +011001100111 +001000000011 +010000010101 +100111111100 +011011011111 +010110100110 +010111101110 +010001101010 +000001101000 +101011000111 +111011000010 +101101100000 +000100010100 +000010011011 +111000101101 +001100110000 +111010100011 +101100000110 +100011100011 +100011100001 +111011110111 +100111100100 +111001110000 +010111100000 +111001011110 +110011100101 +111101010000 +010101001010 +100110101011 +100101101001 +101000001001 +011110111101 +010000110110 +011111000000 +111100101101 +011100110011 +011011000011 +111000000001 +001010101010 +111011111101 +110001110000 +000001010001 +101000100100 +000001001100 +101010010011 +001000000100 +010001111000 +011100000001 +111100111100 +100011000011 +111011110110 +100000101111 +111101000001 +100100110100 +010110111111 +111100010011 +100001000001 +111101000000 +110010001101 +011110010011 +110010111010 +011011001111 +110111101100 +000000111001 +010111111100 +100110101000 +110000110110 +010010110100 +101101001101 +101100000010 +000101000001 +001001010100 +000110111101 +100100001011 +100100110001 +110001000001 +111101011010 +001010110001 +110111000111 +010101000011 +111101101110 +101011000000 +010101100101 +110010100110 +001010001000 +110000101001 +010100100111 +111110010111 +000010110010 +001101010001 +101111110101 +100011001010 +110011111001 +111001011010 +100011101010 +100111100101 +001101110111 +111000110101 +010000100001 +000000110110 +010111110100 +000111110011 +000101000101 +010101000101 +001101101101 +111000010111 +000100000011 +111011000001 +001111001110 +101110010101 +010011010001 +110111111110 +001011100001 +101010011110 +110010010101 +101100110001 +001111111010 +001111011111 +010110111001 +100101010010 +110101110111 +000110111011 +100000010010 +111000110100 +000100111001 +011011001010 +110000000000 +101001010011 +100100001001 +011111101100 +011101110011 +011101000101 +000100100001 +001011001011 +110101101111 +110010111111 +100100100110 +110110001000 +001001101111 +111001000000 +001101111000 +101110011010 +110001101111 +000000101010 +110001001010 +000110111110 +101111010110 +010000001000 +111011110010 +110111011110 +010011000001 +010101001111 +001101110110 +001000011111 +010110110011 +111000001101 +010000110111 +000101110110 +000011011110 +111110010010 +100100110000 +000100001111 +011100101101 +001101010000 +100101001001 +001001010000 +000100001001 +011100011101 +101000111010 +100111011110 +000000001111 +100001100100 +111101100011 +111001111010 +110110100011 +101110101111 +101000001110 +000011010101 +010001000110 +010110100101 +010000110010 +100110011001 +100100101111 +110110001001 +111111010111 +011010011111 +111110011010 +011011011011 +111101001110 +110111100001 +011111101010 +010010111000 +000010010000 +111110101010 +011011101100 +100100111000 +110100000110 +110111010100 +101101011110 +100100111011 +101001011011 +011000111001 +111100111011 +110101011010 +101010101010 +001010010010 +101001110111 +001001100010 +001010101110 +000001001111 +011010001111 +010110100111 +011110110000 +111001000101 +001110100110 +111001010010 +101001010010 +001011000010 +111010101010 +101010110000 +111100010100 +000111100111 +110111100100 diff --git a/2021/3/template.py b/2021/3/template.py new file mode 100755 index 0000000..be7cf52 --- /dev/null +++ b/2021/3/template.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python3 + +def main(): + content = open('input', 'r').read() + +if __name__ == "__main__": + main(): diff --git a/2021/4/.1.py.swp b/2021/4/.1.py.swp new file mode 100755 index 0000000..251be7c Binary files /dev/null and b/2021/4/.1.py.swp differ diff --git a/2021/4/1.py b/2021/4/1.py new file mode 100755 index 0000000..1f8f86c --- /dev/null +++ b/2021/4/1.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python3 + +class BingoBoard(): + def __init__(self, board): + self._hits = [[False for x in range(5)] for x in range(5)] + self._board = board + self._remaining = 0 + self.bingo = False + for line in board: + line = list(map(int, line)) + self._remaining += sum(line) + + def isBingo(self): + rowBingo = any(all(row) for row in self._hits) + colBingo = any(all(row[col] for row in self._hits) for col in range(len(self._board))) + if colBingo or rowBingo: + self.bingo = True + return self.bingo + + def checkField(self, field): + for row_idx, row in enumerate(self._board): + try: + col_idx = row.index(field) + self._hits[row_idx][col_idx] = True + self._remaining -= int(field) + return True + except ValueError: + pass + return False + def getRemaining(self): + return self._remaining + +def chunker(seq, size): + return (seq[pos:pos + size] for pos in range(0, len(seq), size)) + +def main(): + content = open('input', 'r').readlines() + content = list(map(str.strip, content)) + content = [line for line in content if line != ""] + draws = content.pop(0).split(',') + print(draws) + boards = [] + for board in chunker(content, 5): + board = list(map(str.split, board)) + boards.append(BingoBoard(board)) + print(f'Loaded {len(boards)} boards, playing {len(draws)} moves') + boards_finished = 0 + total_boards = len(boards) + for draw in draws: + print(f'New number drawn: {draw}') + boards_hit = 0 + for board in boards: + if not board.bingo: + if board.checkField(draw): + boards_hit += 1 + if board.isBingo(): + print('WE HAVE A WINNER!') + print(board.getRemaining() * int(draw)) + boards_finished += 1 + #boards.remove(board) + #break + print(f'{boards_hit} hit this draw') + + +if __name__ == "__main__": + main() diff --git a/2021/4/input b/2021/4/input new file mode 100755 index 0000000..03a2bb4 --- /dev/null +++ b/2021/4/input @@ -0,0 +1,601 @@ +67,3,19,4,64,39,85,14,84,93,79,26,61,24,65,63,15,69,48,8,82,75,36,96,16,49,28,40,97,38,76,91,83,7,62,94,21,95,6,10,43,17,31,34,81,23,52,60,54,29,70,12,35,0,57,45,20,71,78,44,90,2,33,68,53,92,50,73,88,47,58,5,9,87,22,13,18,30,59,56,99,11,77,55,72,32,37,89,42,27,66,41,86,51,74,1,46,25,98,80 + +24 75 59 41 17 +58 74 64 92 39 +68 8 78 85 72 +18 3 22 4 34 +11 76 6 28 50 + +21 31 36 13 87 +80 91 63 62 77 +46 93 40 16 25 +47 66 30 54 74 +56 59 86 72 37 + +92 43 68 60 81 + 3 78 75 73 12 +90 50 31 67 76 +28 63 52 95 61 + 6 38 79 19 17 + +81 20 61 60 86 +43 27 50 21 85 +77 84 68 76 24 +33 13 89 1 48 + 6 57 30 11 5 + +66 24 22 86 2 +67 77 72 88 87 +21 60 89 36 32 +39 37 29 17 31 +78 97 63 94 91 + +85 71 86 16 54 +98 11 82 89 17 +38 23 99 59 69 +58 12 74 15 93 +41 5 52 48 26 + + 3 32 61 29 27 +98 74 34 58 23 +24 54 76 79 88 +71 90 97 96 68 +21 33 72 47 82 + +13 70 59 7 91 +74 88 85 50 15 +35 8 40 93 6 +95 29 52 18 99 +57 64 0 9 39 + +72 6 74 64 0 +73 9 46 52 98 +81 68 14 69 48 +25 17 5 54 19 +11 47 33 23 62 + +45 14 90 59 97 +43 46 58 55 29 +80 53 2 37 78 +40 79 57 52 72 +92 13 54 25 19 + +39 78 99 84 2 +80 53 24 51 5 +33 20 48 43 66 +82 13 52 30 98 +14 16 26 44 74 + +38 35 45 83 94 +18 28 41 22 13 +44 9 10 98 58 +64 73 24 31 34 +39 85 50 77 63 + +71 18 68 47 65 +25 40 82 69 44 +30 6 72 73 7 +80 24 41 79 2 +11 20 96 84 54 + +16 6 38 75 25 +56 2 51 69 81 +15 54 91 85 90 +94 0 7 71 30 +28 17 76 67 31 + +13 12 23 7 71 +91 89 84 40 78 +44 83 90 21 31 +77 17 3 95 42 +87 82 38 30 67 + +44 64 60 76 36 +21 39 86 89 34 + 5 54 24 14 58 +78 55 98 74 69 + 2 97 42 59 51 + +51 35 78 54 40 + 9 52 5 66 19 +92 74 68 90 73 +76 11 60 67 22 +44 7 1 89 15 + +93 72 3 95 13 +77 1 32 35 5 +68 91 98 23 51 +59 19 31 57 56 +54 46 92 88 26 + +84 91 40 9 73 +90 41 51 12 10 + 0 61 89 13 8 +62 74 5 45 92 +65 27 78 26 31 + +54 21 32 84 42 +68 25 76 3 40 +24 15 59 12 2 +72 49 73 31 93 +35 67 70 60 91 + +55 34 51 76 54 +73 28 5 87 52 +24 36 65 49 27 +99 10 12 44 50 +23 77 53 80 4 + +30 42 92 11 40 +83 49 41 72 54 +73 97 18 4 37 + 0 15 70 55 33 +71 26 46 25 81 + +22 35 41 71 58 +55 39 18 85 45 +79 44 9 38 2 +47 4 23 34 82 +49 63 88 81 29 + +49 82 40 37 77 +17 45 92 7 65 +51 38 91 68 32 +73 57 69 85 50 +87 10 95 59 1 + +57 27 95 59 87 +78 96 82 63 52 +39 17 14 74 21 +47 64 28 94 65 +40 3 49 25 61 + +97 9 24 80 27 + 5 36 83 15 29 +86 33 32 61 2 +87 48 82 91 4 +35 10 16 85 65 + +17 12 43 96 5 +36 76 29 51 73 +98 66 27 97 91 +78 28 2 61 30 +95 70 19 47 54 + +98 88 51 32 7 +89 61 16 91 95 +94 23 19 77 70 +42 90 36 26 44 +99 71 5 57 13 + +14 43 97 72 83 +39 73 58 16 59 +51 2 28 24 18 +40 70 65 27 91 + 4 44 68 74 56 + +90 9 71 23 73 +11 95 62 36 38 +77 34 60 67 41 +28 48 98 40 42 +47 51 82 87 63 + +19 41 57 61 50 +64 84 8 81 11 +83 68 31 66 90 + 2 72 71 96 79 +78 89 77 60 4 + +73 88 72 23 68 +98 52 21 89 43 +48 29 10 8 6 +49 3 54 37 12 +83 34 51 77 66 + +52 16 94 84 81 + 3 87 99 72 98 +48 10 44 32 22 + 9 69 36 74 62 +51 42 91 68 60 + +39 54 16 97 14 +58 84 89 15 20 +67 49 19 55 86 +10 44 76 12 96 +74 36 51 41 2 + +27 22 90 79 86 +47 73 2 53 58 +31 89 37 19 12 +20 83 87 23 30 +32 8 92 55 68 + +19 39 64 53 12 +32 7 80 72 79 +82 96 21 13 40 +18 25 61 9 70 +84 95 42 36 52 + +48 12 29 61 7 +34 13 99 98 6 +74 36 66 91 88 +75 85 93 80 83 +96 11 44 47 39 + +79 43 28 16 75 +66 64 17 71 72 +36 30 19 60 38 + 1 13 77 69 94 +78 6 97 93 63 + +86 45 14 38 37 +35 20 15 68 55 +92 3 0 90 8 +88 32 87 17 22 +33 34 78 13 43 + +87 92 58 95 6 +35 23 54 40 97 +82 64 88 10 94 +63 8 26 98 18 +42 76 39 50 51 + +75 13 4 72 95 +11 50 15 47 52 +12 73 80 74 70 +68 30 21 37 58 +91 2 24 32 82 + +76 66 4 68 79 +19 73 24 51 96 +16 52 26 78 7 +48 30 17 82 92 +28 88 90 71 59 + +95 18 69 85 63 +16 78 97 10 41 +53 98 73 87 19 +15 35 94 57 82 +48 40 14 3 38 + +39 40 78 64 87 +90 69 83 18 16 +58 91 36 23 74 +25 51 99 4 76 +62 10 88 2 1 + +72 95 34 2 84 +38 12 97 92 47 +24 23 41 10 75 +56 87 68 45 89 +14 85 52 98 79 + +96 97 15 98 17 +76 13 6 38 81 +66 90 51 36 85 +95 48 40 99 94 +69 88 19 4 1 + +20 36 93 50 35 +13 15 6 49 92 + 0 70 38 29 22 +68 34 73 89 71 + 5 10 12 79 31 + +16 63 34 29 2 +43 57 18 51 67 +83 47 49 17 96 +84 33 40 7 50 +60 30 41 81 76 + +86 85 4 48 61 +34 46 89 78 23 +83 8 43 57 30 +21 36 7 75 37 +29 40 62 60 54 + +47 28 42 39 57 +16 46 54 52 55 +78 84 32 95 23 +27 26 9 75 62 +90 85 0 65 37 + +89 46 4 81 55 +68 13 79 18 90 +57 73 21 15 32 +59 56 62 58 36 +45 98 64 33 12 + +89 92 3 69 78 +45 50 12 71 72 +18 87 64 48 88 +84 77 53 17 62 +68 6 83 91 2 + + 5 80 25 90 19 +21 86 66 69 61 +22 59 39 54 91 + 9 27 14 24 40 +95 74 18 63 11 + +84 63 42 80 61 +23 39 49 92 25 +56 64 70 2 88 +99 29 15 26 9 +82 91 35 7 40 + + 4 93 44 42 16 +78 72 32 73 81 +84 91 85 82 69 +88 49 59 92 96 +61 99 19 33 38 + +87 2 46 16 83 +29 31 45 37 51 +25 65 26 89 19 +80 17 27 8 73 +54 4 76 0 12 + +50 65 47 43 31 +58 94 90 71 12 +27 3 81 45 9 + 1 33 37 15 83 +96 26 41 77 57 + +22 54 71 73 5 +64 77 15 98 38 +61 90 20 57 40 +60 18 83 72 12 +34 91 87 41 21 + +82 29 51 16 61 +37 41 86 20 19 +59 30 43 15 53 +17 83 5 14 89 +78 70 1 12 62 + +19 95 68 67 92 +14 70 73 62 29 +40 9 97 82 66 +11 50 77 47 53 +20 75 88 94 93 + +48 39 62 56 44 +95 43 10 89 60 +40 0 73 17 59 +50 2 8 4 5 +24 79 20 13 96 + +25 40 36 54 13 +46 48 37 71 26 +29 42 27 44 23 +24 61 79 3 90 +97 21 43 86 18 + +95 4 14 12 71 +11 55 50 83 85 + 9 43 29 32 28 +78 20 63 87 40 +61 84 37 75 77 + + 4 96 87 22 2 +95 70 39 35 49 +23 27 19 43 0 +42 75 36 52 11 +13 8 57 88 46 + +37 5 87 58 86 +65 78 89 57 79 +70 40 14 80 97 +88 55 68 28 13 +53 59 24 26 1 + + 5 95 59 71 23 +44 57 34 65 83 +49 93 9 77 28 +37 69 79 99 73 +17 27 33 66 85 + +75 61 32 0 16 +65 59 47 25 81 +87 97 8 50 70 +78 34 38 42 51 +22 63 6 66 1 + +65 68 77 1 19 +53 14 7 88 9 +11 22 40 25 39 +69 93 37 72 5 +90 80 38 10 16 + +15 81 62 68 44 +26 70 43 55 89 +22 69 8 94 51 +52 19 79 96 10 +24 48 63 74 84 + +36 9 57 4 40 +95 98 58 70 87 +45 97 92 23 86 + 6 31 15 78 12 +90 75 48 41 3 + +34 97 31 92 20 +59 6 89 79 70 +39 90 16 72 91 +76 75 85 47 68 +86 62 32 19 64 + +44 5 72 25 32 +87 18 93 33 0 +22 96 46 4 28 +61 81 77 52 80 +66 24 63 23 45 + +53 33 99 31 75 +60 39 56 89 57 +76 81 14 95 23 + 8 19 98 13 5 +49 91 54 47 7 + +11 58 44 6 94 +31 87 50 77 22 +49 9 40 24 60 +86 36 12 3 71 +59 99 68 20 66 + +83 11 93 36 6 +73 55 97 48 18 + 3 43 51 90 57 +38 65 39 95 68 +94 24 59 20 34 + +53 57 69 3 16 + 2 91 22 24 26 +44 84 31 28 82 +46 94 65 78 99 +55 49 11 66 21 + +10 53 20 69 41 +70 12 56 2 94 +87 23 74 60 55 +59 67 18 38 22 +71 4 51 81 39 + +59 32 64 66 53 +20 11 27 10 81 +41 93 12 45 99 +70 94 77 16 76 +30 79 57 0 90 + +84 8 76 13 98 +96 1 9 65 38 +23 30 64 3 95 +70 26 34 86 79 + 2 22 77 41 68 + +77 11 55 80 21 +45 70 28 0 57 +38 74 33 86 22 +42 13 66 61 83 +46 94 7 82 40 + +53 68 94 71 64 +44 99 86 66 97 +80 33 48 74 45 +29 13 11 15 62 +36 89 9 47 56 + +49 90 16 55 14 +68 13 27 47 46 +54 93 97 10 31 +33 58 6 83 48 +63 28 95 8 62 + +72 60 12 24 20 + 1 22 90 58 65 +84 5 96 80 33 +64 15 47 23 46 +63 36 6 31 91 + +19 27 96 54 36 +33 32 65 11 26 + 0 47 25 59 56 +41 45 76 14 98 +52 22 31 66 38 + + 7 91 5 18 14 + 4 19 54 42 71 +31 82 81 61 39 +58 51 70 10 55 +43 60 15 89 21 + +85 31 75 55 76 +92 93 54 98 44 +21 22 6 79 20 +34 64 7 82 78 +53 36 96 37 19 + +84 58 35 68 76 +79 91 92 25 29 +93 83 23 22 80 +51 28 53 60 40 + 0 62 77 49 39 + +35 38 24 88 53 +61 30 52 49 83 +20 97 6 16 55 +60 43 14 67 4 +66 9 85 28 77 + +73 57 65 36 50 +18 94 14 59 67 + 7 78 40 6 13 +86 49 5 22 66 +63 32 68 44 80 + +52 95 93 25 16 + 0 83 41 77 49 +13 63 65 84 69 +51 9 39 47 24 +92 4 14 8 66 + +70 31 33 69 50 +36 29 76 56 64 +97 11 40 19 81 +18 57 10 24 15 +30 44 42 89 60 + +42 97 9 38 60 +48 62 53 70 27 +49 72 90 86 18 +69 50 8 78 84 +28 13 17 10 35 + +84 7 60 17 36 +30 1 3 89 49 +45 10 85 97 76 +31 38 16 2 12 +43 58 11 77 78 + +53 20 98 94 82 +54 62 27 92 83 +60 41 66 5 30 +58 15 90 88 3 +38 45 7 26 37 + +62 94 17 55 28 +27 86 26 42 87 +90 18 84 20 85 +92 97 59 83 0 +89 21 25 36 11 + +89 60 41 91 54 +16 9 57 40 53 +87 56 64 23 27 +13 42 84 2 52 +66 77 80 0 38 + +58 23 55 96 75 +56 8 19 52 10 +98 13 70 62 73 + 6 64 86 4 12 +51 91 93 29 34 + +55 8 99 51 70 +33 30 52 58 10 +38 31 87 9 61 +63 46 15 48 24 +32 94 40 74 21 + + 5 70 26 48 28 +41 35 93 34 44 +46 86 19 0 27 + 7 81 51 95 15 +36 84 76 75 92 + +34 0 31 21 3 +23 96 49 51 11 +42 27 47 66 91 +93 89 16 62 54 +22 71 26 32 99 diff --git a/2021/4/template.py b/2021/4/template.py new file mode 100755 index 0000000..be7cf52 --- /dev/null +++ b/2021/4/template.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python3 + +def main(): + content = open('input', 'r').read() + +if __name__ == "__main__": + main(): diff --git a/2021/5/1.py b/2021/5/1.py new file mode 100755 index 0000000..af662a4 --- /dev/null +++ b/2021/5/1.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 +import re + +def main(): + board_size = 1000 + content = open('input', 'r').readlines() + content = list(map(str.strip, content)) + board = [[0 for _ in range(board_size)] for _ in range(board_size)] + for line in content: + m = re.match('^(\d+),(\d+) -> (\d+),(\d+)', line) + x1, y1, x2, y2 = tuple(map(int, m.groups(1))) + if x2 < x1: + x1, x2 = x2, x1 + if y2 < y1: + y1, y2 = y2, y1 + if x1 == x2: # move in y + assert(y1 < y2) + print(f'marking from {x1},{y1} to {x2},{y2}') + for y in range(y1, y2+1): + board[y][x1] += 1 + elif y1 == y2: # move in x + print(f'marking from {x1},{y1} to {x2},{y2}') + assert(x1 < x2) + for x in range(x1, x2+1): + board[y1][x] += 1 + else: + print(f'skipped: going from {x1},{y1} to {x2},{y2}') + + hotspots = 0 + for line in board: + for cell in line: + if cell > 1: + hotspots += 1 + print(hotspots) + + + +if __name__ == "__main__": + main() diff --git a/2021/5/2.py b/2021/5/2.py new file mode 100755 index 0000000..c4e3f09 --- /dev/null +++ b/2021/5/2.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 +import re + +def main(): + board_size = 1000 + content = open('input', 'r').readlines() + content = list(map(str.strip, content)) + board = [[0 for _ in range(board_size)] for _ in range(board_size)] + for line in content: + m = re.match('^(\d+),(\d+) -> (\d+),(\d+)', line) + x1, y1, x2, y2 = tuple(map(int, m.groups(1))) + if x1 == x2: # move in y + if y2 < y1: + y1, y2 = y2, y1 + assert(y1 < y2) + print(f'marking from {x1},{y1} to {x2},{y2}') + for y in range(y1, y2+1): + board[y][x1] += 1 + elif y1 == y2: # move in x + if x2 < x1: + x1, x2 = x2, x1 + print(f'marking from {x1},{y1} to {x2},{y2}') + assert(x1 < x2) + for x in range(x1, x2+1): + board[y1][x] += 1 + else: # move diagonal + # + offset_x = x2 - x1 + offset_y = y2 - y1 + if offset_x > 0: x_step = 1 + else: x_step = -1 + + if offset_y > 0: y_step = 1 + else: y_step = -1 + + for offset in range(abs(x2-x1)+1): + board[y1+(offset*y_step)][x1+(offset*x_step)] += 1 + print(f'diagonal: going from {x1},{y1} to {x2},{y2} -> ') + + hotspots = 0 + for line in board: + for cell in line: + if cell > 1: + hotspots += 1 + print(hotspots) + + + +if __name__ == "__main__": + main() diff --git a/2021/5/input b/2021/5/input new file mode 100755 index 0000000..69f6044 --- /dev/null +++ b/2021/5/input @@ -0,0 +1,500 @@ +365,809 -> 365,271 +899,814 -> 899,921 +967,913 -> 434,913 +971,362 -> 631,362 +597,422 -> 597,575 +722,82 -> 722,365 +98,891 -> 972,17 +361,534 -> 361,52 +958,858 -> 958,612 +261,683 -> 261,477 +859,381 -> 850,372 +773,305 -> 703,305 +527,318 -> 281,72 +29,119 -> 863,953 +428,723 -> 428,971 +582,787 -> 582,326 +795,495 -> 795,525 +920,548 -> 920,718 +421,264 -> 714,557 +635,310 -> 635,983 +751,479 -> 534,696 +121,768 -> 121,129 +679,858 -> 737,858 +499,549 -> 603,653 +398,95 -> 398,537 +459,626 -> 473,626 +611,905 -> 854,662 +139,124 -> 568,124 +230,921 -> 960,191 +550,258 -> 883,258 +866,830 -> 681,645 +501,840 -> 774,840 +383,900 -> 383,536 +635,690 -> 868,690 +37,948 -> 954,31 +785,598 -> 785,955 +844,957 -> 130,243 +395,307 -> 562,307 +463,286 -> 374,286 +798,351 -> 52,351 +549,79 -> 549,300 +153,847 -> 977,23 +499,976 -> 499,576 +687,281 -> 621,215 +765,640 -> 794,640 +776,287 -> 906,157 +879,108 -> 333,108 +340,565 -> 340,521 +706,809 -> 159,262 +725,896 -> 941,896 +673,470 -> 792,470 +446,562 -> 638,754 +315,626 -> 189,500 +816,637 -> 77,637 +171,313 -> 171,82 +941,19 -> 150,810 +885,854 -> 513,854 +864,177 -> 864,213 +156,150 -> 544,538 +810,20 -> 344,486 +651,757 -> 623,729 +567,475 -> 126,475 +436,975 -> 707,975 +948,977 -> 138,167 +498,186 -> 601,289 +532,900 -> 532,515 +12,809 -> 60,761 +561,344 -> 453,452 +241,600 -> 780,61 +600,574 -> 258,232 +53,661 -> 224,490 +735,134 -> 735,707 +850,14 -> 398,14 +472,489 -> 472,22 +949,196 -> 492,196 +220,30 -> 959,769 +354,889 -> 632,889 +779,537 -> 397,919 +136,876 -> 896,116 +12,983 -> 930,65 +716,856 -> 716,516 +595,604 -> 595,97 +863,70 -> 946,70 +13,988 -> 988,13 +595,955 -> 978,955 +138,300 -> 138,452 +801,883 -> 830,854 +189,13 -> 110,13 +315,68 -> 147,68 +594,977 -> 594,707 +424,726 -> 836,314 +596,790 -> 842,790 +135,135 -> 823,823 +257,639 -> 718,178 +462,859 -> 965,859 +935,29 -> 18,946 +308,841 -> 676,473 +372,607 -> 946,607 +518,806 -> 201,489 +620,689 -> 620,480 +376,378 -> 376,900 +86,675 -> 179,768 +509,790 -> 509,501 +778,143 -> 778,474 +965,140 -> 194,911 +621,458 -> 316,153 +83,931 -> 959,55 +533,647 -> 402,778 +957,336 -> 397,336 +929,788 -> 929,587 +642,978 -> 647,978 +429,275 -> 276,275 +662,821 -> 120,279 +137,208 -> 85,260 +815,641 -> 763,589 +222,510 -> 881,510 +892,930 -> 845,930 +288,268 -> 288,509 +900,13 -> 79,13 +438,764 -> 248,764 +391,495 -> 391,771 +868,713 -> 223,68 +680,180 -> 680,553 +911,389 -> 911,578 +107,182 -> 107,555 +944,787 -> 944,25 +405,193 -> 569,193 +341,182 -> 952,182 +497,197 -> 820,197 +204,224 -> 693,224 +342,290 -> 342,479 +881,281 -> 881,899 +971,987 -> 11,27 +389,729 -> 501,729 +638,939 -> 316,617 +923,799 -> 923,84 +17,744 -> 17,47 +305,163 -> 305,506 +703,414 -> 74,414 +572,537 -> 122,987 +385,364 -> 385,403 +667,825 -> 667,607 +466,86 -> 842,86 +591,209 -> 151,649 +329,526 -> 329,772 +756,769 -> 122,135 +638,454 -> 380,454 +316,98 -> 654,98 +273,740 -> 627,386 +88,982 -> 963,107 +913,710 -> 913,157 +530,410 -> 129,410 +660,237 -> 256,641 +865,149 -> 865,934 +769,47 -> 76,740 +520,876 -> 520,630 +101,839 -> 394,546 +422,874 -> 330,874 +987,19 -> 20,986 +398,771 -> 174,771 +574,546 -> 582,546 +896,52 -> 11,937 +927,927 -> 927,923 +111,822 -> 953,822 +633,130 -> 76,130 +193,74 -> 193,400 +887,828 -> 887,160 +284,313 -> 500,97 +813,500 -> 839,500 +312,534 -> 129,534 +202,34 -> 202,196 +740,597 -> 681,597 +37,979 -> 892,124 +494,235 -> 494,426 +334,892 -> 334,788 +679,728 -> 947,728 +635,557 -> 242,950 +301,713 -> 326,738 +261,867 -> 986,867 +959,344 -> 412,891 +605,659 -> 647,701 +806,931 -> 270,395 +546,107 -> 150,107 +836,793 -> 131,88 +231,572 -> 99,572 +257,580 -> 257,459 +254,669 -> 254,52 +105,26 -> 973,894 +101,532 -> 339,770 +854,695 -> 319,160 +599,190 -> 227,562 +783,816 -> 370,816 +505,638 -> 889,638 +742,615 -> 742,399 +984,750 -> 984,662 +295,736 -> 937,94 +762,435 -> 239,958 +876,89 -> 758,89 +178,964 -> 651,964 +385,389 -> 67,71 +514,967 -> 462,915 +819,758 -> 819,978 +541,109 -> 767,109 +137,262 -> 137,815 +720,591 -> 934,805 +56,79 -> 752,775 +493,519 -> 493,278 +202,718 -> 202,344 +665,24 -> 446,24 +426,845 -> 426,193 +116,930 -> 982,64 +625,587 -> 625,908 +13,965 -> 919,59 +124,466 -> 124,194 +793,249 -> 480,562 +20,174 -> 359,174 +982,988 -> 25,31 +71,416 -> 586,416 +157,122 -> 363,122 +31,453 -> 344,453 +435,284 -> 387,284 +389,446 -> 379,446 +913,536 -> 32,536 +505,952 -> 505,495 +489,159 -> 222,426 +267,118 -> 954,805 +15,833 -> 15,323 +77,197 -> 946,197 +955,22 -> 955,798 +620,707 -> 620,915 +740,495 -> 740,334 +770,735 -> 770,184 +420,524 -> 420,108 +382,982 -> 556,982 +111,777 -> 867,21 +280,105 -> 915,740 +235,23 -> 863,651 +679,402 -> 197,884 +72,77 -> 829,834 +858,486 -> 443,486 +403,115 -> 403,342 +489,547 -> 489,53 +404,280 -> 950,826 +680,458 -> 260,458 +10,610 -> 315,915 +386,630 -> 128,888 +293,732 -> 293,861 +204,378 -> 116,378 +90,269 -> 90,173 +893,869 -> 92,68 +741,694 -> 741,136 +620,449 -> 620,62 +866,678 -> 441,253 +885,212 -> 167,930 +868,853 -> 868,852 +392,926 -> 982,336 +252,930 -> 829,930 +758,606 -> 949,606 +79,895 -> 798,176 +394,688 -> 901,688 +355,217 -> 355,732 +43,23 -> 903,883 +426,691 -> 695,422 +970,416 -> 970,950 +317,334 -> 957,974 +198,160 -> 198,195 +610,191 -> 852,191 +388,569 -> 899,58 +490,662 -> 517,689 +691,627 -> 643,627 +404,564 -> 539,564 +946,623 -> 478,155 +686,608 -> 686,213 +573,508 -> 47,508 +610,262 -> 610,905 +782,602 -> 581,602 +987,378 -> 987,391 +443,243 -> 447,243 +710,493 -> 54,493 +564,179 -> 564,966 +828,673 -> 828,691 +761,869 -> 260,869 +810,949 -> 192,331 +674,263 -> 467,263 +481,81 -> 940,540 +779,301 -> 159,301 +763,457 -> 574,646 +794,770 -> 784,780 +19,964 -> 973,10 +809,720 -> 809,142 +822,324 -> 822,112 +120,980 -> 354,980 +238,277 -> 636,675 +747,647 -> 550,450 +419,205 -> 419,494 +34,968 -> 719,283 +306,591 -> 401,496 +648,673 -> 526,795 +486,426 -> 44,426 +441,642 -> 137,338 +396,740 -> 585,740 +741,227 -> 117,851 +620,263 -> 319,263 +421,321 -> 300,321 +732,387 -> 732,784 +445,59 -> 445,273 +151,910 -> 220,841 +836,599 -> 274,599 +598,193 -> 95,193 +718,765 -> 884,931 +403,165 -> 591,165 +241,441 -> 736,441 +902,986 -> 190,274 +190,671 -> 190,342 +887,301 -> 887,216 +878,747 -> 244,113 +93,747 -> 814,26 +764,604 -> 764,444 +510,852 -> 175,852 +50,718 -> 132,718 +791,436 -> 95,436 +751,122 -> 751,146 +953,162 -> 953,168 +113,546 -> 113,828 +752,407 -> 482,407 +398,412 -> 305,412 +912,630 -> 830,630 +699,155 -> 354,155 +842,874 -> 451,483 +18,83 -> 580,645 +63,594 -> 945,594 +557,286 -> 557,773 +21,448 -> 21,11 +955,724 -> 955,353 +857,411 -> 857,41 +605,932 -> 605,159 +985,64 -> 216,833 +34,673 -> 610,97 +888,764 -> 888,415 +574,801 -> 646,801 +290,593 -> 290,694 +151,72 -> 887,808 +632,53 -> 632,98 +346,686 -> 963,69 +258,129 -> 582,453 +189,205 -> 646,662 +272,821 -> 946,147 +409,531 -> 462,478 +725,575 -> 894,575 +885,888 -> 885,878 +475,210 -> 763,210 +42,963 -> 920,85 +985,213 -> 271,213 +538,842 -> 482,842 +175,529 -> 662,529 +853,670 -> 259,76 +656,364 -> 373,647 +114,134 -> 827,134 +58,878 -> 58,569 +45,340 -> 684,979 +35,829 -> 611,829 +625,166 -> 625,898 +849,980 -> 143,980 +720,92 -> 330,92 +689,255 -> 689,389 +842,526 -> 867,526 +834,399 -> 395,838 +325,212 -> 786,673 +934,941 -> 31,38 +211,640 -> 812,39 +449,896 -> 82,896 +795,757 -> 630,592 +894,691 -> 894,11 +639,839 -> 639,360 +941,862 -> 676,862 +480,757 -> 480,123 +425,734 -> 425,332 +391,704 -> 350,745 +173,352 -> 131,352 +814,703 -> 814,150 +347,156 -> 609,156 +427,520 -> 862,520 +787,724 -> 206,724 +313,587 -> 312,587 +743,491 -> 743,580 +277,964 -> 845,396 +132,65 -> 864,797 +227,619 -> 227,365 +360,484 -> 299,484 +717,790 -> 875,790 +798,480 -> 413,95 +643,518 -> 643,407 +939,530 -> 440,31 +241,44 -> 241,82 +362,49 -> 316,49 +160,98 -> 382,98 +67,593 -> 508,593 +363,456 -> 470,456 +644,63 -> 273,63 +341,696 -> 72,696 +270,303 -> 270,60 +716,391 -> 716,983 +678,904 -> 756,826 +480,487 -> 290,487 +762,316 -> 762,969 +380,735 -> 380,652 +223,922 -> 436,709 +690,733 -> 815,733 +185,130 -> 555,130 +10,931 -> 924,17 +678,940 -> 891,940 +702,112 -> 702,673 +554,559 -> 812,301 +406,758 -> 377,758 +361,119 -> 96,384 +787,356 -> 787,963 +957,54 -> 23,988 +636,650 -> 34,48 +170,21 -> 170,541 +955,103 -> 85,973 +144,698 -> 381,698 +85,55 -> 925,895 +12,15 -> 978,981 +32,954 -> 32,301 +438,234 -> 195,477 +121,438 -> 121,542 +353,607 -> 919,607 +978,646 -> 978,643 +925,112 -> 925,646 +447,120 -> 447,104 +332,398 -> 568,162 +399,841 -> 276,841 +923,853 -> 923,820 +890,202 -> 964,202 +306,782 -> 871,217 +547,558 -> 21,32 +893,164 -> 508,549 +485,76 -> 361,76 +713,768 -> 570,768 +314,18 -> 461,18 +618,281 -> 715,281 +374,787 -> 374,209 +324,97 -> 405,97 +890,729 -> 566,729 +762,438 -> 762,978 +274,49 -> 274,525 +905,34 -> 905,741 +799,384 -> 799,742 +378,358 -> 378,17 +805,131 -> 31,905 +640,453 -> 640,800 +563,305 -> 563,945 +898,590 -> 57,590 +513,187 -> 513,76 +706,407 -> 500,407 +235,69 -> 861,695 +408,259 -> 624,43 +327,308 -> 722,308 +109,247 -> 183,247 +487,493 -> 619,625 +769,452 -> 899,452 +727,765 -> 524,968 +887,472 -> 801,472 +157,100 -> 936,879 +584,658 -> 584,582 +557,488 -> 557,510 +790,35 -> 28,797 +458,920 -> 350,812 +54,797 -> 790,61 +59,387 -> 59,334 +565,368 -> 268,368 +70,146 -> 70,525 +681,451 -> 242,890 +869,831 -> 869,272 +276,184 -> 276,517 +984,922 -> 984,426 +616,572 -> 307,881 +323,806 -> 700,806 +595,547 -> 595,651 +731,638 -> 731,582 +760,836 -> 31,107 +768,377 -> 347,798 +847,765 -> 431,765 +777,95 -> 777,837 +832,330 -> 460,330 +423,213 -> 423,110 +937,549 -> 937,882 +529,735 -> 570,735 +436,343 -> 771,343 +965,833 -> 965,143 +518,484 -> 65,31 +940,989 -> 940,293 +983,63 -> 63,983 +237,733 -> 237,735 +624,281 -> 624,330 +473,719 -> 633,719 +312,489 -> 872,489 +369,520 -> 539,520 +80,705 -> 133,652 +659,289 -> 163,785 diff --git a/2021/5/template.py b/2021/5/template.py new file mode 100755 index 0000000..fddd016 --- /dev/null +++ b/2021/5/template.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import re + +def main(): + content = open('input', 'r').readlines() + content = list(map(str.strip, content)) + for line in content: + m = re.match('^(\d+),(\d+) -> (\d+),(\d+)') + x1, y1, x2, y2 = m.groups(1) + print(f'going from {x1},{y2} to {x2},{y2}') + +if __name__ == "__main__": + main()