Recommended python version: 3.10
- Day 3, 5 and 21 use the walrus operator
:=introduced in Python 3.8. - Day 7 solution leverages the
matchstatement introduced in Python 3.10. - Day 11 and 20 need Python 3.9 for type annotations.
virtualenv -p python3 .venv --prompt aoc-2022
source .venv/bin/activate
pip install -r requirements.txtpython dayXX/main.pyCode golf is a type of recreational computer programming competition in which participants strive to achieve the shortest possible source code that solves a certain problem - Wikipedia
Move into the folder: cd dayXX. For the shortest solution, open a python shell and copy the code snippet.
You can also run python golfing.py. The benefit of the python shell is that you don't need to call print()
to display the computed values.
Do you know you can encode your code in UTF-16? The solution is a bit less readable but way shorter. As this is controversal in the code golfing community I reported the length of both the raw code and the encoded version.
- Day 1 - 94/76 chars:
c=sorted([sum(map(int,e.split("\n")))for e in open("i").read().split("\n\n")]) c[0],sum(c[:3])
exec(bytes('㵣潳瑲摥嬨畳⡭慭⡰湩ⱴ灳楬⡴尢≮⤩昩牯攠椠灯湥∨≩⸩敲摡⤨献汰瑩∨湜湜⤢⥝瀊楲瑮挨せⱝ畳⡭季㌺⥝ ','u16')[2:])
- Day 2 - 122/90 chars
[*map(sum,zip(*[[b+1+(b-a+1)%3*3,b*3+(a+b-1)%3+1]for a,b in[[ord(l[0])-65,ord(l[2])-88]for l in open("i").readlines()]]))]
exec(bytes('牰湩⡴⩛慭⡰畳Ɑ楺⡰嬪扛ㄫ⠫ⵢ⭡⤱㌥㌪戬㌪⠫⭡ⵢ⤱㌥ㄫ晝牯愠戬椠孮潛摲氨せ⥝㘭ⰵ牯⡤孬崲㠸晝牯氠椠灯湥∨≩⸩敲摡楬敮⡳崩⥝崩 ','u16')[2:])
- Day 3 - 196/127 chars
d=open("i").readlines() [sum([c-38-58*(c>97)for c in map(ord,map(max,b))])for b in[[set(r[:len(r)//2])&set(r[len(r)//2:])for r in d],[set(d[i])&set(d[i+1])&set(d[i+2])for i in range(0,len(d),3)]]]
exec(bytes('㵤灯湥∨≩⸩敲摡楬敮⡳牰湩⡴獛浵嬨ⵣ㠳㔭⨸挨㤾⤷潦湩洠灡漨摲洬灡洨硡戬⤩⥝潦湩孛敳⡴孲氺湥爨⼩㈯⥝猦瑥爨汛湥爨⼩㈯崺昩牯爠椠嵤嬬敳⡴孤嵩☩敳⡴孤⭩崱☩敳⡴孤⭩崲昩牯椠椠慲杮⡥ⰰ敬⡮⥤㌬崩嵝 ','u16')[2:])
- Day 4 - 218/138 chars
import re [*map(sum,zip(*[[r[0]<=r[2]<=r[3]<=r[1]or r[2]<=r[0]<=r[1]<=r[3],r[0]<=r[2]<=r[1]or r[2]<=r[0]<=r[3]]for r in[list(map(int,re.search(r"(\d+)-(\d+),(\d+)-(\d+)",l).groups()))for l in open("i").readlines()]]))]
exec(bytes('浩潰瑲爠牰湩⡴⩛慭⡰畳Ɑ楺⡰嬪牛せ㱝爽㉛㱝爽㍛㱝爽ㅛ潝孲崲㴼孲崰㴼孲崱㴼孲崳爬せ㱝爽㉛㱝爽ㅛ潝孲崲㴼孲崰㴼孲崳晝牯爠椠孮楬瑳洨灡椨瑮爬敳牡档爨⠢摜⤫⠭摜⤫⠬摜⤫⠭摜⤫Ⱒ⥬朮潲灵⡳⤩昩牯氠椠灯湥∨≩⸩敲摡楬敮⡳崩⥝崩 ','u16')[2:])
- Day 6 - 114/86 chars
f=lambda d,m:min(i+m for i in range(len(d))if len(d[i:i+m])==len(set(d[i:i+m]))) d=open("i").read() f(d,4),f(d,14)
exec(bytes('㵦慬扭慤搠洬洺湩椨洫映牯椠椠慲杮⡥敬⡮⥤椩敬⡮孤㩩⭩嵭㴩氽湥猨瑥搨楛椺洫⥝⤩搊漽数⡮椢⤢爮慥⡤牰湩⡴⡦Ɽ⤴昬搨ㄬ⤴ ','u16')[2:])
- Day 10 - 218/134 chars
from itertools import* a,b=zip(*[[(i+1)*x*(i%40==19),"\n"*(i%40==0)+".#"[x-2<i%40<x+2]]for i,x in enumerate(accumulate([1]+[int(x)if x[-1].isdigit()else 0 for x in open("i").read().split()]))]) print(sum(a),"".join(b))
exec(bytes('牦浯椠整瑲潯獬椠灭牯⩴愊戬氽獩⡴楺⡰嬪⡛⭩⤱砪⠪╩〴㴽㤱Ⱙ尢≮⠪╩〴㴽⤰∫⌮嬢㰲╩〴砼㈫嵝潦Ⱪ⁸湩攠畮敭慲整愨捣浵汵瑡⡥ㅛ⭝楛瑮砨椩學ㄭ⹝獩楤楧⡴攩獬‰潦⁸湩漠数⡮椢⤢爮慥⡤⸩灳楬⡴崩⤩⥝牰湩⡴畳⡭⥡∬⸢潪湩戨⤩','u16')[2:])