diff --git a/advent-of-code-2022.csproj b/advent-of-code-2022.csproj
index 619169b..d199543 100644
--- a/advent-of-code-2022.csproj
+++ b/advent-of-code-2022.csproj
@@ -46,6 +46,8 @@
+
+
diff --git a/inputs/09.txt b/inputs/09.txt
index 55294f6..c53fad6 100644
--- a/inputs/09.txt
+++ b/inputs/09.txt
@@ -1,100 +1,2000 @@
-5656921987125678979998760234965456789998768789239876323457896545467894567987232345679209876567998656
-4349899876234599568987654345894345999987656678945965212348965434356943459876101956798912987459876541
-5498789854345689467898765456789297898999736567899874323489654321248932398765219897987893498598765432
-6989598765459789356989878767896345987432125456789985434578965432357953499954398789376789569679876543
-9875459876569893249876989898965476976521012345699876645689876543456894689875679643234598998789987656
-8764345987678989139765393959796567965432543457789987887792987654569965678976798432123467899899998867
-9773239898789678999878212345697679876543656598999999998901298767678976789598987621012345943978929998
-9652198789894567989992101556789799989854567679659898999992399899789987893459996532136756964569919999
-8543999674923469879989232345899899998765678789798787899989989929896798932345987643245697897679897899
-7659896543212359768978943456789997889876789896987656789878679210945679651267898789976789989998786789
-8798789954563498957767894567899986678989898965432345678964567921234989743456989891988995679876545856
-9987679899874987843456965678979875567999987654321239789443459432345899954589876910999434678995432545
-9877578789989876532567899789765983458999898965410198999321598996476789875678965439876323789789541234
-8765467678999997673458978997654901269998769876322397898945976989987899986789876598765212345678930347
-4323234589989998789569769898769892978987654987439986787899865678998998997899989999874347456789821236
-4310123689878999897678958789898799899987743498598765696789987799569987898999998789985456789897642345
-6421234578956899998989345678987688789996532987699764545698998912499876949998989698976587899998759487
-7834545789345778999997236789876567678987653698789843234567899943989989234997678587989798968789898998
-8945656793234567899876345698765434589998974569898762126789999899879894349876583456899899655698997899
-9658789932123458999765458999654323678909895689987651015897998789965789498765432345699921234987846789
-8769894321012367899876567987721012789219789797896543123456789679874397679876321256789430349876734599
-9889965439143456789987679876432125699998679896987654234899896598765498989997442345678921467965325678
-3999877998956567897898999876543234789896598965498765856789965459876789899998656576789939569876566789
-4599989867898789956789789989854345699765497894349976767897654367987895698999767678997898978987977892
-5689998756999892347898698998768456789754346789234989878998796456798964787899898989445677899298998901
-6899899845890901239986567769877687897673235692123999989449987567899763456789999894323456910149989992
-7998789956791912398765436456998998987542124989239898793234598978999854667899898765212347891239878989
-9898598767989899459954324365679549099993235978998769654395989899898765678998769986323456789398765678
-8767459879876788969843210234568932198789549867989659875989876789769877889987653295434568996987654567
-9856345998765657899764321246789845987699998759878943989878965678954989998998854598546878945699543458
-9943235987654345678976532347899659876587899548767892398767954569893292677999765987657899234598754589
-8632047998775457899876545498998998765456798732455921019655343456789101456899876798768910123459897678
-7542123989896668999987756789787899654349986621434893198743212347893252367967987899979439294998998999
-9753239876998789998999887897656798743298765410123789987654323458954543478945598999989598989897659599
-7654449995979893987899998976545679854349874321245678999995934567895676569123499789999987678789343489
-8765998784569932396998769987437789967656985432356789987889895678976987878994987678999876545679212978
-9899887643458921985489954599545699878787898765467899996579789789987898989789986568998765432389343459
-1998798532467939874367893987657899989898979887598969875468678993098999997656542456989876546456954568
-0129654321256899765459932498768989692929567998989657965376578992129899876542101349876987687767897678
-9298999432345678976578943569879976541012468999876549874212456789234799997653212498765498898878998889
-8987678956756799698689654698998765432123567893986432987301234894345689998765323989874349999989329998
-7676567898767894598798765987969876865238678992195410196513346965576796989865439876543236799893213567
-8543458999879932989899878976845987974347889989954329987325457896678895678976545987754545698764301348
-3212345789989549878942989895434598765456998876899498765436567987989934568987656899865656789965492349
-2101676789397698767891098789423459876667897794768999887687678998999912347899767999876767899877989499
-3212567893219985456932987679554567987798976643456899998798989999129893456789879987987878999989878989
-4323456789998764387899876568965679698899765532345698779899294989098789567894989976598989789998757679
-5434567899899765678989875457976789549989654341234987665989123978987678998903496987439395679986545567
-6545678988789876789976982349897895434678943210129876534578939865654567899212345698921234598765432498
-8766989876578987898995431298789954323567954321239884325989097654523458989423566999890123459878521389
-9877899765467898967984310345698965212456895592398765456789198763012369878954879898791234567987632478
-9989978984358999549865321234567892101569986989989879877998999832125489767895998787679987678996543567
-9898867893267899432979832345698943452978998979878989989567899944345678956789987654567898989987654578
-8767456792125678921098765456789654567889999767467899895456798767856789345991986543456789993398765689
-7654346789334569432399886667896987698996987654348998754345679878969891239890995432545898942109876797
-8743234579456696543989987778975698999785698765459879543234789989878992349789894321234567893299987896
-9652125678967789654976599899654579987654569876767965432126567895989989498658789432356778954989999945
-8721014567898998769865456976543434976543456987879896943013478953997878987545696545467899899878901234
-9832123456789659978954348987632123987654568998998789892134567899876767897676789656578935698767892545
-8743234568995443989875467896541015699879878949998678789255778998765455698797898789678926989659789676
-7654345789654321295996568987432123456998989439876589678969899999654364759898919899799019976545689797
-8965676898743210134987699898943296587897998919887434567899989788963213345999323999898998965434568989
-9876789997654329245698789789894989799986897898776623456789876587892101296789454599987987654323679979
-4987995789975998956789895699789678989875766987654512345696567456789742679896567989876398766554789568
-3298954679899887967899934987654567878964345696543203456965435345897653498987979978964239987667895457
-9989763456798776798989429898543476567895256987653212569896321256789776567899898769879125698998912345
-8765432345987654789878998769452323479792123498765323456789432345899987678956789656998934569979101236
-9899321296998765699869987654321012345689234789765434767896543656789398789547897997987897698654312377
-0998910989899876986545699876542123467894345679876545678987656767891239895438456789876789798765425458
-1987899876789987899634569987643444578965467989987687989698767878932367994321387899965678969886534567
-9876798985678998998785678998754555678996879897698789094579978989973456789210998999864567954997545678
-6765987654589899219896899679865766789987998789999892123467989698764567894339899598765899543987659889
-5434599543456789995987954589976778997899987659899943234579692569875698965998789439976798762399767996
-4323498432345899884398943478987889656768999548789867455698543459876789879887678945797897653989888945
-5419987521236789765459654569998995443459998929689978996987656767987894998776569896898998769876999236
-6598996432345799896598767679989764312379876213567899989698967878998932989675456679999889899965210123
-7987987643457899989679898789876532101999954101377999877549878989999549876543234578998778989874321256
-9896599754598999978989969898989953219889893215456789765434989991987657987832124567989656578995452345
-8789459895689988767897654947898764598767789326767999874323497890198798998775012579876545456789678456
-5678968987899877658989932236789879987656698987978999985212646789259999659654323456987434368999989567
-6989879498998765434567890125678998798544567898989989432101239894349898745965434569874321239989998698
-7897989369987654323456921234578987654123456789999978999219398965498789659876756998765442398978999799
-8996593254598987312347892347689897543244789899878867878998997896987678967987987899876599976767899892
-9989432123459876201234989498996798798765679998765756767987876789876567898999898913987988765356789921
-9878941012367965312345678999345699899879789459854543459876565698985458799898789109899875434267896540
-9767892125679878323456789987656789999989897698763212598765434597654345689798678998756964320134589432
-8856999234569999474567898998967896798995979899854443679872123789986456895676569899549876534565678993
-7545898945678998765678987899898965987654168998766558789983234895497587894123456789434987655676799789
-6534767898799439976989876799789654496543054579878669893494545679398998973236789896545999768789897678
-5423456999896521989898765687678943219832123567989778912965876893219349765445678987659878978897934569
-7312346789995432398789954554567894398753234578999889999876987932101239876576789998798967989976545778
-6101237799989545986566893213458965989964545679432999889987898993299545987689899999987652397999758889
-4232345678978959875455799102348979877899656789599989678998929989988956798797999899876541656789767896
-5643458989769898765344568923456798765678997899987878567899019876567897899896789789987630345689878945
-6756567895456789654123579434568998654567989999996759456789198765458998998965675679898321234678999234
-7887678943379899763234678945689876543234878998875642345689987654349899987654324598765432345899899165
-8998789321234789854345789656999987632123569987984551234793498875456789998783213459876543656789678976
-9549895452375699965656798767899874321012478976543210159892109986767899989654302345998754567897567897
-0234976565467789798767899988998765434566567897865421767899212987898909876543213566789766678998486789
-1655989876988894569989910199019876545679788998976562345678924598999212987654424587899887889239345678
\ No newline at end of file
+U 2
+L 2
+U 1
+R 2
+D 2
+L 1
+R 1
+U 2
+D 1
+L 2
+D 2
+R 2
+D 1
+L 1
+U 2
+D 2
+R 1
+U 1
+L 1
+D 1
+L 1
+R 2
+U 1
+D 2
+U 2
+D 1
+L 1
+D 1
+L 2
+R 2
+D 2
+R 1
+D 2
+R 1
+D 2
+R 1
+U 2
+L 1
+U 2
+R 2
+D 2
+U 1
+R 1
+L 2
+D 1
+L 1
+R 1
+D 2
+R 2
+L 1
+R 2
+U 1
+L 2
+R 1
+D 1
+R 2
+U 2
+R 2
+L 1
+U 2
+R 1
+L 1
+U 2
+R 2
+D 2
+U 1
+L 2
+D 2
+R 1
+L 2
+D 2
+L 2
+R 1
+L 1
+U 2
+D 1
+U 1
+D 1
+L 1
+D 2
+U 1
+L 2
+R 2
+D 1
+U 1
+D 2
+L 2
+D 1
+R 1
+U 2
+D 2
+L 2
+R 2
+U 1
+D 1
+U 1
+L 1
+D 2
+R 1
+D 2
+U 1
+D 2
+U 2
+L 2
+R 2
+D 2
+R 1
+U 2
+R 2
+L 2
+U 1
+L 3
+U 3
+D 1
+U 2
+R 1
+U 3
+R 2
+U 3
+D 1
+R 1
+U 2
+D 2
+U 2
+D 2
+R 2
+U 3
+D 1
+L 1
+R 2
+U 2
+L 3
+U 3
+D 2
+L 3
+U 3
+R 2
+D 3
+L 3
+U 2
+D 2
+U 3
+R 1
+D 1
+R 2
+U 3
+D 3
+R 3
+D 2
+L 3
+D 2
+R 3
+D 1
+R 2
+U 1
+D 3
+R 2
+D 1
+U 3
+L 1
+U 2
+L 1
+R 3
+D 1
+L 1
+D 1
+R 2
+U 2
+R 1
+D 1
+R 2
+D 1
+R 3
+L 3
+U 1
+R 2
+U 1
+L 1
+D 1
+U 3
+D 1
+L 1
+R 1
+U 1
+D 3
+U 1
+R 3
+U 1
+L 1
+D 2
+R 2
+U 1
+R 1
+L 2
+R 1
+U 2
+L 3
+R 3
+L 1
+R 3
+D 3
+U 3
+R 1
+U 2
+L 2
+D 2
+R 3
+L 2
+R 3
+U 1
+L 1
+R 2
+D 2
+R 3
+U 2
+D 3
+R 2
+L 1
+D 3
+R 2
+L 3
+U 2
+L 1
+U 2
+R 1
+U 2
+D 1
+L 2
+U 3
+R 1
+U 4
+R 1
+U 4
+R 1
+L 1
+D 3
+L 3
+R 3
+U 4
+L 1
+R 2
+D 4
+U 2
+L 3
+U 1
+R 4
+D 1
+L 1
+U 4
+D 4
+L 3
+R 2
+D 4
+R 4
+D 1
+U 2
+L 4
+U 3
+D 2
+L 4
+D 2
+L 4
+U 2
+D 4
+L 1
+D 2
+U 4
+L 2
+U 1
+D 3
+U 4
+D 2
+L 1
+R 2
+L 4
+U 4
+L 3
+R 4
+D 3
+R 4
+D 2
+L 3
+U 2
+L 3
+U 1
+D 3
+L 4
+R 2
+D 2
+L 1
+U 2
+R 2
+L 1
+D 2
+U 3
+L 1
+U 1
+L 4
+U 4
+L 2
+R 1
+U 1
+R 4
+L 4
+D 2
+L 4
+D 4
+L 3
+U 4
+D 4
+L 2
+U 1
+L 1
+R 1
+L 4
+U 4
+L 2
+D 1
+R 2
+D 2
+L 2
+R 2
+L 1
+U 3
+L 1
+U 2
+D 2
+R 2
+D 3
+L 4
+R 2
+L 3
+R 3
+U 3
+L 5
+U 1
+D 3
+L 1
+U 5
+L 3
+U 4
+L 4
+R 5
+D 5
+R 1
+L 3
+D 1
+U 5
+R 3
+U 4
+D 4
+U 1
+D 4
+U 4
+R 4
+U 4
+R 4
+U 5
+R 3
+D 3
+L 1
+D 3
+U 4
+R 2
+U 2
+R 2
+U 2
+L 3
+R 4
+L 2
+D 5
+U 4
+D 4
+L 4
+R 4
+U 5
+R 1
+D 4
+L 4
+U 1
+L 2
+U 3
+D 1
+R 5
+U 4
+D 5
+L 5
+D 2
+L 1
+U 3
+D 4
+R 4
+L 2
+R 4
+D 3
+R 5
+L 4
+R 1
+D 3
+L 2
+R 5
+D 3
+R 1
+U 1
+L 5
+D 1
+U 4
+L 2
+U 4
+D 5
+L 4
+D 5
+L 2
+D 3
+R 5
+L 2
+D 1
+R 5
+D 1
+L 2
+U 1
+D 1
+L 3
+R 4
+L 1
+D 1
+U 3
+D 1
+R 2
+D 5
+R 3
+D 5
+L 2
+D 2
+U 5
+D 3
+R 5
+D 3
+R 4
+U 2
+L 5
+R 2
+D 5
+R 1
+U 5
+R 6
+D 6
+U 2
+R 3
+L 2
+U 4
+R 1
+D 6
+L 3
+U 5
+R 2
+L 6
+U 1
+D 5
+L 3
+R 3
+U 5
+L 1
+R 3
+U 3
+L 3
+R 6
+D 6
+L 3
+U 2
+R 1
+L 4
+R 5
+L 6
+R 4
+D 6
+U 6
+L 6
+U 2
+L 4
+D 6
+R 2
+D 2
+R 3
+D 2
+L 1
+U 4
+R 4
+D 1
+R 2
+L 1
+D 5
+L 6
+U 6
+D 2
+L 2
+D 1
+U 3
+D 1
+L 4
+U 5
+R 6
+U 5
+L 2
+R 6
+D 5
+R 3
+L 4
+U 6
+L 3
+D 6
+L 4
+R 5
+L 5
+R 4
+D 4
+L 5
+R 3
+U 6
+D 6
+L 3
+D 6
+U 1
+D 5
+L 5
+R 3
+L 4
+R 1
+L 1
+U 3
+D 6
+U 6
+R 2
+D 1
+U 2
+L 1
+R 5
+U 1
+L 5
+U 3
+R 3
+D 3
+L 4
+D 6
+U 1
+R 5
+L 3
+U 5
+R 2
+U 5
+L 3
+D 6
+R 6
+D 2
+R 5
+U 3
+D 6
+U 7
+R 7
+L 7
+U 2
+L 6
+U 2
+R 5
+L 7
+U 2
+D 5
+U 2
+R 2
+U 2
+L 1
+D 5
+U 5
+R 2
+U 6
+R 2
+D 3
+R 1
+D 4
+L 3
+R 5
+U 7
+D 6
+U 5
+D 2
+L 5
+U 5
+L 5
+R 7
+U 3
+L 7
+U 7
+L 3
+U 5
+D 7
+L 4
+D 6
+L 2
+U 7
+D 1
+L 6
+R 6
+D 7
+U 5
+L 2
+D 7
+U 1
+D 5
+L 2
+U 2
+D 1
+U 7
+R 1
+D 3
+L 4
+D 5
+R 4
+L 6
+R 1
+L 1
+D 2
+R 5
+U 4
+L 2
+D 7
+R 1
+U 3
+L 2
+U 3
+L 2
+U 6
+D 1
+U 3
+L 2
+U 4
+R 3
+L 7
+D 7
+R 6
+L 1
+R 3
+U 1
+R 3
+D 5
+R 2
+U 4
+R 1
+U 1
+L 6
+D 7
+U 5
+D 1
+R 2
+U 1
+L 6
+R 6
+U 6
+D 1
+U 4
+D 4
+U 4
+L 2
+D 5
+U 4
+R 4
+U 7
+D 4
+U 5
+D 5
+U 8
+L 6
+U 5
+L 1
+D 5
+R 1
+D 7
+L 8
+U 4
+R 7
+U 7
+D 4
+L 4
+U 7
+D 1
+R 4
+L 2
+U 2
+R 7
+L 1
+R 2
+L 2
+R 1
+L 3
+D 7
+L 3
+D 7
+U 6
+L 1
+D 4
+U 2
+D 8
+R 4
+D 2
+R 7
+L 8
+U 5
+L 7
+U 5
+R 1
+D 4
+R 8
+L 2
+R 7
+L 4
+U 6
+R 3
+D 6
+L 8
+R 5
+U 5
+R 1
+D 3
+U 8
+R 3
+D 5
+L 1
+D 2
+R 8
+D 3
+R 6
+L 2
+R 1
+U 5
+R 5
+U 7
+L 3
+R 3
+L 8
+D 5
+L 2
+D 3
+L 5
+D 6
+L 5
+U 2
+R 3
+U 5
+R 7
+D 2
+U 5
+R 2
+D 3
+L 5
+R 1
+U 7
+L 5
+D 5
+R 4
+U 6
+D 8
+R 2
+D 4
+L 3
+R 4
+D 1
+L 7
+U 8
+L 3
+U 6
+D 6
+L 4
+D 1
+U 6
+L 4
+R 2
+L 5
+D 5
+L 5
+D 6
+R 2
+U 1
+L 7
+R 4
+D 9
+U 1
+L 3
+D 7
+L 9
+D 3
+U 9
+L 6
+D 6
+U 5
+D 5
+R 2
+D 8
+R 2
+D 1
+U 9
+D 7
+R 2
+D 3
+U 1
+L 3
+D 5
+R 3
+L 6
+D 7
+U 2
+R 8
+U 2
+L 6
+D 4
+L 5
+R 5
+L 6
+D 5
+L 1
+U 8
+D 1
+L 9
+D 6
+R 5
+D 4
+U 2
+R 9
+D 1
+U 4
+D 1
+U 7
+L 4
+R 4
+D 8
+U 3
+R 7
+L 1
+D 4
+L 9
+U 7
+L 6
+R 2
+L 6
+D 4
+L 8
+U 8
+L 2
+R 1
+L 9
+D 9
+L 2
+U 7
+L 5
+D 2
+U 1
+L 6
+D 6
+L 1
+R 8
+D 3
+R 8
+L 6
+U 7
+D 9
+U 7
+L 7
+D 4
+R 8
+D 3
+R 9
+L 1
+U 4
+L 2
+R 9
+L 3
+D 9
+R 7
+D 3
+U 4
+D 9
+R 4
+L 6
+U 9
+D 7
+U 8
+D 7
+L 1
+R 2
+U 3
+D 7
+U 5
+R 4
+L 8
+D 9
+L 1
+U 9
+L 1
+D 1
+L 2
+U 2
+R 8
+D 6
+L 4
+U 9
+L 3
+R 9
+U 4
+L 5
+R 6
+U 6
+D 6
+L 5
+D 4
+L 9
+R 1
+L 3
+D 8
+L 1
+R 2
+D 8
+U 10
+L 1
+D 8
+L 4
+U 7
+D 4
+R 10
+D 5
+L 5
+U 10
+R 3
+U 6
+L 10
+R 2
+U 5
+R 7
+L 5
+R 6
+U 4
+D 8
+U 8
+D 7
+R 8
+U 3
+D 7
+R 4
+D 4
+L 8
+R 2
+U 9
+R 1
+L 7
+R 6
+D 2
+U 9
+R 4
+D 9
+R 7
+D 6
+U 3
+L 4
+D 9
+L 9
+D 8
+L 4
+R 4
+U 6
+D 2
+U 3
+D 1
+L 1
+R 10
+L 1
+D 2
+R 4
+U 6
+L 3
+D 4
+L 4
+D 1
+L 9
+D 8
+R 5
+D 3
+U 2
+D 9
+R 10
+D 10
+R 10
+U 5
+D 4
+R 4
+D 4
+L 8
+D 4
+R 10
+D 9
+L 8
+D 1
+R 1
+D 8
+L 1
+D 8
+R 4
+U 8
+R 4
+U 4
+L 4
+U 8
+D 4
+L 8
+D 3
+U 3
+R 5
+D 9
+L 10
+R 8
+U 5
+L 4
+U 8
+R 6
+D 3
+L 8
+U 11
+D 4
+R 3
+L 5
+D 10
+U 11
+D 2
+L 5
+D 4
+R 4
+D 5
+R 11
+L 7
+U 9
+R 6
+L 7
+D 6
+R 4
+D 4
+U 9
+R 6
+D 2
+U 3
+D 8
+L 6
+U 6
+R 11
+U 10
+R 6
+L 5
+R 4
+D 1
+L 10
+R 5
+U 4
+R 3
+D 4
+U 9
+R 8
+D 4
+U 11
+L 2
+D 9
+U 5
+R 3
+D 4
+R 6
+U 11
+R 4
+D 2
+L 1
+R 1
+U 4
+L 5
+U 9
+L 8
+R 6
+D 11
+L 4
+D 5
+L 11
+D 7
+U 11
+D 3
+U 3
+L 5
+R 9
+D 2
+L 9
+R 7
+L 3
+D 7
+L 10
+D 1
+L 5
+U 8
+D 1
+L 5
+U 11
+D 8
+R 6
+D 9
+U 2
+D 11
+R 8
+U 5
+D 6
+R 1
+U 7
+D 10
+L 8
+D 2
+L 7
+D 9
+R 12
+U 11
+R 8
+D 9
+R 1
+D 10
+L 3
+R 10
+D 9
+L 2
+R 3
+D 6
+L 12
+U 3
+R 2
+U 11
+R 8
+L 12
+D 9
+R 10
+L 2
+D 6
+L 8
+U 4
+R 5
+U 8
+L 11
+R 7
+D 3
+L 2
+R 2
+U 4
+R 12
+L 8
+U 1
+R 5
+L 9
+D 7
+R 9
+D 8
+L 2
+R 12
+L 5
+D 6
+R 10
+U 11
+R 12
+L 9
+D 5
+L 7
+U 7
+R 9
+L 10
+R 11
+U 11
+D 8
+L 3
+U 10
+D 1
+R 11
+L 7
+R 5
+L 11
+D 6
+U 5
+D 5
+U 12
+D 7
+L 1
+R 3
+D 8
+L 10
+R 2
+D 10
+R 12
+U 10
+R 7
+U 12
+R 11
+U 5
+D 12
+R 6
+D 1
+U 2
+L 8
+R 7
+D 12
+U 5
+R 10
+L 2
+R 3
+D 10
+U 2
+L 8
+D 6
+R 12
+L 5
+R 7
+U 1
+R 2
+L 5
+D 1
+U 12
+L 2
+U 6
+D 8
+U 3
+D 11
+L 5
+R 6
+L 10
+U 9
+D 6
+R 5
+L 4
+R 6
+L 9
+D 12
+U 7
+L 2
+D 6
+L 1
+U 1
+R 7
+L 13
+D 8
+U 4
+L 5
+D 11
+U 12
+R 5
+U 7
+D 5
+L 4
+D 9
+L 9
+U 1
+L 9
+U 1
+L 2
+U 13
+L 2
+R 11
+L 7
+R 8
+U 11
+D 13
+U 10
+R 5
+U 5
+L 6
+R 7
+D 5
+L 1
+R 5
+U 6
+D 13
+U 4
+L 10
+U 6
+L 3
+U 7
+R 6
+U 4
+L 11
+U 7
+L 6
+R 13
+U 10
+R 11
+D 11
+U 9
+D 2
+U 4
+R 9
+L 11
+R 7
+U 1
+L 5
+U 8
+D 5
+L 12
+U 3
+D 7
+L 2
+R 6
+L 4
+D 12
+U 5
+R 12
+L 13
+D 6
+U 3
+L 11
+R 4
+L 3
+R 8
+U 12
+D 11
+U 3
+R 10
+U 12
+L 7
+D 10
+R 1
+U 5
+L 1
+U 13
+D 12
+U 1
+L 2
+R 12
+D 13
+R 2
+D 6
+L 12
+U 10
+R 14
+U 14
+R 2
+D 4
+L 10
+R 7
+U 14
+L 5
+D 7
+L 12
+R 2
+D 9
+R 8
+D 2
+R 4
+U 5
+L 9
+R 13
+L 14
+R 1
+U 8
+R 12
+U 10
+D 2
+R 5
+U 8
+D 4
+U 9
+D 3
+R 5
+D 7
+L 8
+R 11
+D 2
+U 11
+L 4
+R 2
+U 2
+D 10
+U 14
+L 3
+R 3
+D 3
+R 14
+L 2
+R 6
+D 9
+U 1
+L 14
+R 9
+L 7
+R 10
+U 7
+L 14
+R 11
+L 11
+D 10
+R 11
+U 13
+L 2
+D 7
+L 4
+D 10
+L 10
+R 12
+D 7
+R 14
+L 13
+D 8
+R 5
+L 12
+D 6
+R 5
+D 3
+U 6
+L 10
+D 6
+R 8
+U 9
+R 4
+D 7
+R 6
+D 12
+R 5
+D 6
+L 14
+U 12
+L 10
+U 14
+D 12
+L 12
+R 2
+U 14
+R 14
+D 11
+R 14
+U 12
+D 2
+U 10
+R 4
+U 7
+D 9
+U 10
+D 12
+U 8
+D 10
+L 3
+R 8
+L 5
+D 2
+R 6
+L 1
+D 8
+U 3
+L 4
+U 3
+R 5
+L 10
+D 10
+U 14
+D 2
+U 3
+R 13
+L 7
+R 12
+L 10
+R 14
+D 4
+L 10
+R 3
+U 14
+L 2
+D 15
+R 14
+D 2
+R 14
+L 12
+D 10
+R 3
+D 2
+L 3
+R 3
+D 5
+L 2
+R 1
+L 5
+D 14
+L 8
+R 10
+L 14
+D 8
+L 8
+D 8
+R 15
+D 12
+U 7
+D 13
+L 13
+U 4
+L 7
+U 13
+R 7
+U 12
+R 1
+D 7
+R 5
+L 10
+R 11
+L 15
+D 13
+L 8
+D 12
+U 15
+L 11
+R 10
+U 13
+R 12
+U 6
+R 11
+D 13
+R 8
+D 15
+L 2
+D 5
+U 11
+R 5
+L 13
+D 4
+R 15
+D 13
+R 10
+L 10
+U 1
+R 11
+U 3
+R 5
+D 11
+U 5
+R 6
+U 6
+D 14
+L 2
+R 14
+U 2
+R 1
+L 11
+U 15
+R 2
+D 10
+L 5
+D 3
+U 4
+D 9
+U 2
+L 13
+R 2
+D 7
+R 15
+D 1
+U 9
+R 15
+L 5
+D 4
+L 10
+D 16
+U 8
+R 11
+L 12
+U 5
+L 16
+R 1
+D 10
+R 11
+L 16
+D 4
+U 8
+D 7
+U 13
+D 3
+R 5
+U 9
+R 6
+U 12
+D 4
+U 15
+L 5
+U 15
+L 6
+U 12
+R 8
+L 3
+R 2
+U 3
+L 3
+R 10
+L 11
+U 6
+D 11
+L 4
+R 6
+D 8
+U 14
+L 5
+D 13
+R 13
+D 9
+L 10
+D 16
+R 14
+L 6
+D 7
+U 2
+L 11
+D 14
+R 4
+U 6
+R 7
+L 13
+U 6
+L 8
+D 13
+R 4
+U 13
+L 15
+U 16
+L 8
+D 14
+L 3
+R 7
+D 3
+U 9
+D 7
+U 12
+R 4
+D 3
+U 11
+D 7
+L 9
+U 6
+L 5
+U 12
+D 6
+R 5
+D 9
+U 14
+D 9
+R 6
+U 16
+R 11
+U 16
+L 15
+R 15
+U 10
+L 13
+D 12
+R 4
+D 5
+L 5
+U 1
+D 11
+R 10
+U 7
+R 13
+U 6
+L 6
+D 5
+R 13
+U 13
+D 3
+U 11
+L 4
+R 5
+U 4
+D 5
+L 17
+R 2
+L 12
+R 10
+L 17
+U 1
+R 11
+D 12
+L 10
+U 8
+L 15
+R 8
+U 9
+L 17
+D 13
+L 5
+R 7
+L 1
+D 8
+R 6
+D 1
+U 3
+D 10
+R 6
+L 6
+U 15
+R 1
+U 17
+L 17
+R 4
+U 4
+R 10
+U 12
+L 5
+D 12
+R 14
+D 17
+R 1
+U 1
+R 9
+U 2
+D 4
+R 17
+L 9
+D 5
+U 2
+L 7
+D 8
+R 11
+U 12
+D 13
+R 16
+L 15
+D 15
+L 2
+R 10
+D 16
+R 13
+D 2
+R 6
+D 16
+L 8
+D 2
+L 10
+U 7
+L 14
+R 16
+L 5
+D 5
+R 10
+L 2
+U 13
+R 10
+L 9
+U 1
+L 10
+R 10
+U 14
+D 6
+R 11
+D 4
+R 12
+D 4
+L 1
+D 14
+L 2
+U 3
+L 15
+U 9
+D 12
+R 13
+D 14
+R 5
+L 6
+D 14
+R 14
+L 16
+R 7
+U 7
+L 14
+R 11
+U 9
+D 11
+U 9
+L 10
+R 13
+L 4
+R 12
+U 15
+R 9
+D 10
+U 3
+R 7
+U 1
+R 6
+D 17
+U 16
+D 4
+R 12
+U 3
+R 18
+D 17
+L 8
+U 11
+D 6
+L 9
+R 17
+L 14
+D 1
+L 2
+D 6
+U 13
+L 3
+R 18
+D 4
+L 13
+U 7
+D 6
+U 11
+L 11
+U 8
+R 10
+L 15
+U 4
+D 6
+R 18
+U 17
+R 16
+D 11
+U 5
+R 16
+L 5
+D 16
+U 1
+R 9
+L 10
+U 7
+R 17
+U 8
+L 7
+R 14
+L 11
+R 9
+D 8
+R 9
+U 1
+R 14
+L 15
+U 6
+L 4
+R 3
+L 15
+U 15
+D 17
+U 12
+D 14
+R 13
+U 11
+D 10
+U 16
+L 8
+R 11
+U 6
+D 11
+U 9
+R 15
+L 12
+U 6
+L 13
+U 12
+R 3
+U 16
+L 2
+U 15
+L 15
+R 4
+D 5
+R 8
+D 9
+L 8
+U 7
+R 2
+D 10
+L 12
+R 1
+U 11
+R 17
+U 18
+D 6
+L 12
+U 2
+R 2
+U 14
+D 17
+L 7
+R 12
+U 13
+D 18
+L 8
+R 4
+U 10
+R 10
+L 8
+U 4
+L 1
+U 15
+L 6
+D 6
+L 10
+R 12
+D 2
+R 10
+U 16
+L 12
+D 1
+R 11
+D 10
+U 19
+R 7
+D 18
+U 1
+D 7
+R 3
+U 19
+R 12
+U 5
+L 11
+U 8
+D 12
+R 2
+D 16
+U 14
+R 14
+D 1
+U 17
+L 15
+D 8
+L 18
+D 2
+L 14
+U 10
+L 17
+D 2
+U 14
+L 17
+U 15
+R 18
+L 11
+R 15
+U 4
+L 8
+D 10
+L 17
+U 13
+R 1
+L 10
+U 16
+R 9
+L 4
+D 13
+R 13
+U 10
+R 12
+L 14
+U 10
+D 5
+R 18
+L 8
+D 8
+R 5
+D 19
+U 10
+R 8
+U 12
+R 12
+D 6
+U 7
+L 2
+U 5
+L 6
+R 1
+D 16
+R 16
+U 15
+R 2
+D 15
+R 2
+D 10
+L 4
+D 8
+R 17
+D 6
+R 7
+U 10
+R 8
+D 16
+R 3
+D 17
+R 11
+D 18
+L 3
+R 11
+D 8
+R 14
+D 7
+U 14
+R 12
+L 2
+R 18
+L 6
+R 2
+D 3
+R 18
\ No newline at end of file
diff --git a/inputs/09a.txt b/inputs/09a.txt
new file mode 100644
index 0000000..a573603
--- /dev/null
+++ b/inputs/09a.txt
@@ -0,0 +1,8 @@
+R 4
+U 4
+L 3
+D 1
+R 4
+D 1
+L 5
+R 2
\ No newline at end of file
diff --git a/inputs/09b.txt b/inputs/09b.txt
new file mode 100644
index 0000000..a971fa1
--- /dev/null
+++ b/inputs/09b.txt
@@ -0,0 +1,8 @@
+R 5
+U 8
+L 8
+D 3
+R 17
+D 10
+L 25
+U 20
\ No newline at end of file
diff --git a/src/09.cs b/src/09.cs
new file mode 100644
index 0000000..cca3ca5
--- /dev/null
+++ b/src/09.cs
@@ -0,0 +1,212 @@
+namespace aoc2022;
+
+internal class Day09 : Day
+{
+ private struct move
+ {
+ public char dir;
+ public int steps;
+
+ public override string ToString() => $"{dir} {steps}";
+ }
+
+ private class knot
+ {
+ public int x;
+ public int y;
+ }
+
+ private readonly List moves = new();
+
+ internal override void Parse()
+ {
+ foreach (var line in Util.Parsing.ReadAllLines("09"))
+ {
+ var parts = line.Split(' ');
+ moves.Add(new move
+ {
+ dir = parts[0][0],
+ steps = int.Parse(parts[1]),
+ });
+ }
+ }
+
+ private static double dist((int, int) a, (int, int) b) => Math.Sqrt(Math.Pow(b.Item1 - a.Item1, 2) + Math.Pow(b.Item2 - a.Item2, 2));
+ private static double dist(knot a, knot b) => dist((a.x, a.y), (b.x, b.y));
+
+ internal override string Part1()
+ {
+ var headPos = (x: 0, y: 0);
+ var tailPos = (x: 0, y: 0);
+ HashSet<(int, int)> visited = new()
+ {
+ { (0, 0) },
+ };
+
+ foreach (var move in moves)
+ {
+ for (int i = 0; i < move.steps; i++)
+ {
+ switch (move.dir)
+ {
+ case 'R':
+ headPos.x += 1;
+ break;
+ case 'L':
+ headPos.x -= 1;
+ break;
+ case 'D':
+ headPos.y += 1;
+ break;
+ case 'U':
+ headPos.y -= 1;
+ break;
+ }
+
+ var d = dist(headPos, tailPos);
+ if (d < 2)
+ {
+ continue;
+ }
+
+ if (headPos.x == tailPos.x || headPos.y == tailPos.y)
+ {
+ if (headPos.x > tailPos.x)
+ {
+ tailPos.x++;
+ }
+ else if (headPos.x < tailPos.x)
+ {
+ tailPos.x--;
+ }
+ else if (headPos.y > tailPos.y)
+ {
+ tailPos.y++;
+ }
+ else if (headPos.y < tailPos.y)
+ {
+ tailPos.y--;
+ }
+ }
+ else
+ {
+ if (headPos.x > tailPos.x && headPos.y > tailPos.y)
+ {
+ tailPos.x++;
+ tailPos.y++;
+ }
+ else if (headPos.x > tailPos.x && headPos.y < tailPos.y)
+ {
+ tailPos.x++;
+ tailPos.y--;
+ }
+ else if (headPos.x < tailPos.x && headPos.y > tailPos.y)
+ {
+ tailPos.x--;
+ tailPos.y++;
+ }
+ else if (headPos.x < tailPos.x && headPos.y < tailPos.y)
+ {
+ tailPos.x--;
+ tailPos.y--;
+ }
+ }
+
+ visited.Add(tailPos);
+ }
+ }
+
+ return $"Locations tail visited with 2 knots: <+white>{visited.Count}";
+ }
+
+ internal override string Part2()
+ {
+ List knots = new();
+ for (int i = 0; i < 10; i++)
+ {
+ knots.Add(new knot() {x = 0, y = 0});
+ }
+
+ HashSet<(int, int)> visited = new()
+ {
+ { (0, 0) },
+ };
+
+ foreach (var move in moves)
+ {
+ for (int i = 0; i < move.steps; i++)
+ {
+ switch (move.dir)
+ {
+ case 'R':
+ knots[0].x += 1;
+ break;
+ case 'L':
+ knots[0].x -= 1;
+ break;
+ case 'D':
+ knots[0].y += 1;
+ break;
+ case 'U':
+ knots[0].y -= 1;
+ break;
+ }
+
+ for (int k = 1; k < knots.Count; k++)
+ {
+ var d = dist(knots[k-1], knots[k]);
+ if (d >= 2)
+ {
+ if (knots[k-1].x == knots[k].x || knots[k-1].y == knots[k].y)
+ {
+ if (knots[k-1].x > knots[k].x)
+ {
+ knots[k].x++;
+ }
+ else if (knots[k-1].x < knots[k].x)
+ {
+ knots[k].x--;
+ }
+ else if (knots[k-1].y > knots[k].y)
+ {
+ knots[k].y++;
+ }
+ else if (knots[k-1].y < knots[k].y)
+ {
+ knots[k].y--;
+ }
+ }
+ else
+ {
+ if (knots[k-1].x > knots[k].x && knots[k-1].y > knots[k].y)
+ {
+ knots[k].x++;
+ knots[k].y++;
+ }
+ else if (knots[k-1].x > knots[k].x && knots[k-1].y < knots[k].y)
+ {
+ knots[k].x++;
+ knots[k].y--;
+ }
+ else if (knots[k-1].x < knots[k].x && knots[k-1].y > knots[k].y)
+ {
+ knots[k].x--;
+ knots[k].y++;
+ }
+ else if (knots[k-1].x < knots[k].x && knots[k-1].y < knots[k].y)
+ {
+ knots[k].x--;
+ knots[k].y--;
+ }
+ }
+ }
+
+ var tailPos = (knots.Last().x, knots.Last().y);
+ visited.Add(tailPos);
+ }
+ }
+ }
+
+ return $"Locations tail visited with {knots.Count} knots: <+white>{visited.Count}";
+ }
+}