commit - ec8844f9c7b87cf8698b72528d49d5cc4c43d859
commit + f043bd101b4535f56722f0072e154273233128e4
blob - /dev/null
blob + 2691f94f65bc73ef42496e7601bc234967364fe3 (mode 644)
--- /dev/null
+++ input/18.txt
+R 5 (#2f3630)
+U 9 (#54a1a3)
+R 5 (#05bce0)
+U 3 (#008843)
+R 5 (#6690d0)
+U 4 (#008841)
+R 5 (#651d10)
+U 7 (#830023)
+R 8 (#4750a2)
+U 7 (#6a1001)
+R 3 (#114a72)
+D 5 (#21dbf3)
+R 3 (#4523f2)
+U 4 (#3a1e43)
+R 4 (#2eef10)
+D 4 (#352183)
+R 5 (#2eef12)
+D 6 (#1fd943)
+L 7 (#5c0bd2)
+D 5 (#32d3b1)
+L 5 (#47d3d0)
+D 3 (#3032e1)
+R 2 (#47d3d2)
+D 4 (#4dee61)
+R 4 (#044a92)
+D 4 (#494b23)
+R 2 (#132772)
+D 3 (#2186a3)
+R 7 (#49e542)
+U 3 (#864783)
+R 3 (#3afdd2)
+U 5 (#2ab8d1)
+R 6 (#2d5072)
+D 5 (#362ab1)
+R 4 (#2d5070)
+U 5 (#46eaa1)
+R 9 (#183c12)
+U 3 (#494b21)
+R 3 (#584d32)
+U 4 (#6a1003)
+R 3 (#618682)
+U 4 (#5a1853)
+R 6 (#30cf00)
+U 6 (#6b3a23)
+R 5 (#5e1260)
+U 2 (#20b7d3)
+R 3 (#1d2ec0)
+U 10 (#89f613)
+R 5 (#16c5b0)
+U 3 (#26b1d3)
+R 4 (#475e70)
+U 3 (#007223)
+R 5 (#3cf870)
+U 3 (#851f83)
+R 8 (#326e40)
+U 5 (#043ad3)
+R 4 (#2eb0a0)
+U 5 (#26e791)
+R 3 (#0b6950)
+U 7 (#323af1)
+L 3 (#0b6952)
+U 3 (#4ffc41)
+L 4 (#721f70)
+U 8 (#0137b1)
+R 4 (#5c9d22)
+U 3 (#55ff21)
+R 5 (#5c9d20)
+U 3 (#3b2d71)
+R 5 (#721f72)
+U 7 (#1fa921)
+R 8 (#3012f0)
+D 5 (#4c6a91)
+R 8 (#61af70)
+D 4 (#4c6a93)
+R 6 (#2e21b0)
+D 2 (#7df243)
+R 2 (#108f72)
+D 9 (#239da3)
+R 5 (#1f8fb0)
+D 8 (#8e8b71)
+R 5 (#5a6f50)
+D 2 (#8e8b73)
+R 3 (#159190)
+D 5 (#5f70a3)
+L 5 (#012372)
+D 3 (#04bf23)
+L 5 (#72bbe2)
+D 6 (#04bf21)
+L 3 (#1bb142)
+D 3 (#0f6693)
+L 4 (#108f70)
+D 6 (#0ecae3)
+L 6 (#407170)
+D 8 (#10ff11)
+L 7 (#18f910)
+D 6 (#10ff13)
+R 2 (#483d30)
+D 6 (#30a891)
+R 4 (#1ed8b0)
+D 5 (#688901)
+R 4 (#130de0)
+D 6 (#4d20e1)
+R 5 (#4b1000)
+U 7 (#877bf1)
+R 2 (#395410)
+U 4 (#877bf3)
+R 4 (#167f10)
+D 2 (#486f11)
+R 7 (#54e8d0)
+D 2 (#504301)
+R 2 (#8035e2)
+D 7 (#433471)
+R 3 (#8035e0)
+D 3 (#26cad1)
+R 3 (#4b3dc0)
+D 5 (#802d11)
+R 2 (#05af00)
+D 4 (#3b3f31)
+R 5 (#0dfed0)
+D 8 (#3b4341)
+L 6 (#489830)
+D 3 (#3b4343)
+L 3 (#4e0bd0)
+D 7 (#0f7fd1)
+R 6 (#1c6dd0)
+D 2 (#318d21)
+R 3 (#0cb8f2)
+D 6 (#68acd1)
+R 2 (#432822)
+D 3 (#218ee1)
+R 11 (#661ec2)
+U 3 (#218ee3)
+R 5 (#0b10d2)
+U 4 (#2233f1)
+L 3 (#2a5330)
+U 3 (#0df7d1)
+L 9 (#5ff680)
+U 4 (#2b9701)
+R 12 (#8b68d0)
+U 3 (#2b9703)
+L 5 (#086f10)
+U 7 (#1f1431)
+R 4 (#6937b0)
+U 5 (#2cce51)
+R 3 (#26cb50)
+D 8 (#3ee1c1)
+R 6 (#3c8a40)
+D 5 (#7e7211)
+R 7 (#7190e0)
+D 3 (#036101)
+R 6 (#6110b0)
+D 3 (#89da01)
+L 12 (#1f2cc0)
+D 3 (#2b7181)
+L 4 (#3942b0)
+D 5 (#10f821)
+L 2 (#61ae90)
+D 6 (#04dee1)
+L 6 (#2fc950)
+D 2 (#04dee3)
+L 8 (#353d90)
+D 4 (#1e21b1)
+L 3 (#46fa00)
+D 4 (#3ea393)
+R 5 (#5c2e32)
+D 5 (#361be3)
+R 6 (#2ddc12)
+U 4 (#4b1a83)
+R 6 (#135722)
+U 6 (#521483)
+R 9 (#7382b2)
+D 6 (#239da3)
+R 3 (#3ed420)
+D 4 (#3a0c73)
+R 6 (#5a68d0)
+D 3 (#76f053)
+L 5 (#244ec0)
+D 4 (#062573)
+L 8 (#053c50)
+D 5 (#0bfac3)
+R 3 (#123e30)
+D 7 (#21c2c3)
+R 6 (#0b11b0)
+D 3 (#6781f3)
+R 9 (#720e70)
+D 3 (#7ddd13)
+L 11 (#33d6f0)
+D 2 (#1b2d83)
+L 7 (#5f0280)
+D 5 (#579183)
+R 4 (#5f0282)
+D 6 (#5c9303)
+R 3 (#3c6770)
+D 4 (#2b6333)
+R 5 (#4f28a0)
+U 5 (#55d573)
+R 6 (#2b03a0)
+U 5 (#244bd3)
+R 5 (#644122)
+U 7 (#08ab63)
+R 7 (#232bc2)
+U 5 (#71f5e3)
+R 4 (#060d22)
+U 3 (#168c63)
+R 4 (#44efa2)
+D 3 (#17c163)
+R 9 (#2ed822)
+D 6 (#17c161)
+R 10 (#4b9682)
+D 6 (#168c61)
+R 6 (#1ab282)
+D 3 (#490b43)
+L 6 (#639022)
+D 4 (#447151)
+L 5 (#0596c0)
+U 4 (#2fba61)
+L 5 (#0596c2)
+D 4 (#201131)
+L 3 (#1f9c52)
+D 3 (#0c4a23)
+R 9 (#266412)
+D 3 (#68bea3)
+R 7 (#266410)
+D 4 (#1f3423)
+R 3 (#51d9c2)
+D 6 (#1f6633)
+R 8 (#7382b0)
+U 8 (#01fca3)
+R 7 (#3271f0)
+U 4 (#7ee903)
+R 6 (#581210)
+D 7 (#7ee901)
+R 2 (#12dd60)
+U 7 (#15a1a3)
+R 6 (#7c30f0)
+U 2 (#591961)
+R 3 (#69efd0)
+U 4 (#591963)
+L 9 (#32e7e0)
+U 3 (#574071)
+L 3 (#50c6a0)
+U 3 (#0be261)
+L 5 (#6ae5c0)
+U 3 (#5c08b1)
+L 3 (#7158d0)
+U 2 (#36fe01)
+L 4 (#325c22)
+U 9 (#305be1)
+R 3 (#325c20)
+U 2 (#36c0a1)
+R 3 (#1687d0)
+U 7 (#6e3d91)
+R 4 (#69abb2)
+U 4 (#0a66d1)
+R 4 (#3091a2)
+U 6 (#548a01)
+R 3 (#47a5c2)
+U 3 (#2a9553)
+R 5 (#795b32)
+U 3 (#2a9551)
+R 8 (#181b72)
+U 7 (#43b071)
+R 4 (#443e90)
+U 2 (#3926e1)
+R 4 (#6c3760)
+U 4 (#694dd3)
+R 6 (#4b1d30)
+U 3 (#032dd1)
+R 6 (#101060)
+U 4 (#032dd3)
+L 6 (#49c630)
+U 7 (#694dd1)
+L 2 (#1df000)
+U 3 (#2ff181)
+L 8 (#3617e2)
+D 6 (#3a3c41)
+L 3 (#51c8c2)
+D 4 (#5c01b1)
+L 11 (#0ca2b0)
+U 2 (#4333b1)
+L 3 (#812b52)
+U 8 (#6f4601)
+L 3 (#379b22)
+U 2 (#07d291)
+L 7 (#49e292)
+U 7 (#709721)
+L 4 (#1db7a2)
+U 8 (#58c9d1)
+L 6 (#52d210)
+U 5 (#64a341)
+L 3 (#1054c0)
+U 7 (#64a343)
+L 4 (#61a0b0)
+U 10 (#187211)
+L 4 (#5b9920)
+U 4 (#05d301)
+L 3 (#0c8ef0)
+U 8 (#09f161)
+L 4 (#7fa590)
+U 4 (#516f31)
+L 3 (#408e12)
+D 6 (#3ccd51)
+L 2 (#4ba672)
+D 10 (#1fb771)
+L 3 (#3d8200)
+U 8 (#195531)
+L 3 (#6bcfe0)
+U 9 (#484041)
+L 5 (#3ae112)
+U 5 (#6d6931)
+R 4 (#3ae110)
+U 7 (#05dd71)
+L 4 (#4c5332)
+U 6 (#5df683)
+L 10 (#3aebd2)
+U 3 (#5f3f53)
+L 3 (#815352)
+U 6 (#5f3f51)
+L 4 (#28ac32)
+U 4 (#5df681)
+R 4 (#3cb5e2)
+U 2 (#7662f1)
+R 4 (#322d10)
+U 8 (#1a81a3)
+R 5 (#3e2ba0)
+D 4 (#1a81a1)
+R 3 (#362bc0)
+D 6 (#3e19c1)
+R 5 (#234960)
+U 5 (#2d2853)
+R 7 (#56bab0)
+U 4 (#2d2851)
+R 8 (#4d6be0)
+U 5 (#5ad541)
+R 8 (#1d6e52)
+U 6 (#077851)
+L 7 (#45b722)
+U 3 (#077853)
+L 7 (#52cf22)
+U 4 (#07d441)
+R 7 (#77bb62)
+U 4 (#1a8641)
+R 7 (#4c1bf2)
+U 3 (#2ca611)
+R 3 (#18b8e2)
+D 3 (#57ff81)
+R 4 (#60c622)
+D 7 (#42e791)
+R 4 (#1a7550)
+D 6 (#2645b1)
+R 5 (#1a7552)
+D 8 (#4ea9d1)
+R 6 (#797f00)
+D 2 (#02b451)
+R 4 (#375b52)
+D 7 (#28c491)
+R 7 (#5e30f2)
+D 9 (#3f4341)
+L 7 (#11cf50)
+D 5 (#82e171)
+R 3 (#655ee0)
+D 3 (#189ea1)
+R 3 (#772e32)
+D 10 (#177941)
+R 4 (#06baa2)
+D 11 (#561461)
+R 2 (#5c8dd2)
+D 7 (#561463)
+R 6 (#36fc22)
+D 5 (#0cea13)
+R 2 (#4cc760)
+D 4 (#4dfe53)
+R 6 (#323630)
+U 9 (#566003)
+R 7 (#7efd92)
+D 9 (#40f433)
+R 6 (#080d32)
+D 8 (#6cf311)
+R 5 (#35bf72)
+D 3 (#3b7973)
+R 8 (#06a632)
+D 4 (#252293)
+R 4 (#06a630)
+D 5 (#35ed03)
+R 7 (#4d1cd2)
+D 2 (#4cf4f3)
+R 3 (#1dd4e2)
+D 3 (#2b92f3)
+R 4 (#117530)
+D 4 (#5ac883)
+R 12 (#117532)
+U 4 (#48ca43)
+R 7 (#708b12)
+D 5 (#068663)
+R 5 (#4247e2)
+D 7 (#704161)
+R 4 (#4b2b22)
+D 8 (#13ea71)
+R 4 (#699472)
+D 5 (#4d6551)
+R 5 (#8503c0)
+D 2 (#281c91)
+R 2 (#8503c2)
+D 9 (#33a0c1)
+L 5 (#4e8ad2)
+D 3 (#825f21)
+L 5 (#26aab2)
+D 8 (#097c71)
+L 6 (#169832)
+D 4 (#457031)
+L 7 (#8cee10)
+U 5 (#251221)
+L 3 (#71dce0)
+U 3 (#331751)
+L 6 (#7cfe10)
+D 5 (#617961)
+L 9 (#7cfe12)
+U 5 (#04b4d1)
+L 8 (#379ae0)
+D 8 (#0c88f1)
+L 4 (#0ee942)
+D 8 (#297c01)
+R 5 (#5a78a2)
+D 6 (#3db043)
+R 5 (#7eadd2)
+D 4 (#3db041)
+R 5 (#4e5622)
+D 2 (#381fa1)
+R 6 (#2cfd90)
+D 4 (#36bd23)
+R 3 (#4d18c0)
+D 4 (#36bd21)
+R 3 (#1a3d70)
+D 2 (#6644a1)
+R 12 (#868912)
+D 4 (#5cb351)
+R 3 (#868910)
+D 4 (#3b3501)
+R 5 (#1cddb0)
+D 4 (#4cc9b1)
+L 9 (#040250)
+D 6 (#38c721)
+L 7 (#23e920)
+D 3 (#08dde3)
+L 8 (#2c48f0)
+D 4 (#08dde1)
+L 2 (#414710)
+D 4 (#3c36b1)
+L 8 (#467ab0)
+D 3 (#034323)
+L 4 (#67f960)
+D 6 (#034321)
+L 9 (#675f90)
+D 6 (#338083)
+L 5 (#2b4702)
+D 6 (#035ab3)
+L 6 (#4d5642)
+D 7 (#035ab1)
+L 8 (#40ff22)
+D 3 (#495523)
+L 5 (#83a372)
+D 5 (#1a5d23)
+L 8 (#4ef3c2)
+D 4 (#7515a3)
+L 9 (#40d0f0)
+D 5 (#143e73)
+L 8 (#2ec480)
+U 8 (#070d81)
+R 4 (#344d10)
+U 4 (#070d83)
+R 5 (#2eb4b0)
+U 5 (#681243)
+R 3 (#51a710)
+U 5 (#8a2821)
+R 7 (#2faba0)
+U 5 (#8a2823)
+R 3 (#3849b0)
+U 6 (#375b63)
+L 8 (#3790d0)
+U 7 (#2f77d1)
+L 6 (#444dd0)
+U 3 (#85afe3)
+L 6 (#656d90)
+U 6 (#85afe1)
+L 2 (#1152b0)
+U 3 (#334491)
+R 4 (#362670)
+U 7 (#819361)
+L 4 (#4fd202)
+U 3 (#718a21)
+L 5 (#17bf92)
+D 10 (#3334f1)
+L 2 (#43c272)
+D 4 (#40f041)
+L 5 (#3afbc2)
+D 6 (#742533)
+L 8 (#0ae4c2)
+U 6 (#146731)
+L 8 (#2aec82)
+D 2 (#89fa61)
+L 3 (#044562)
+D 4 (#1e14a1)
+R 2 (#7b0a82)
+D 4 (#1e14a3)
+R 7 (#4b7812)
+D 2 (#09cdc1)
+R 5 (#3c3502)
+D 2 (#70eb41)
+R 12 (#4b7400)
+D 3 (#5c8043)
+L 12 (#6085c0)
+D 3 (#5c8041)
+L 4 (#5b0330)
+D 4 (#74bce1)
+L 12 (#6f6142)
+D 2 (#0f2211)
+L 5 (#40e5b0)
+D 5 (#72afc1)
+L 7 (#40e5b2)
+D 3 (#160a51)
+L 3 (#7a6c72)
+D 6 (#3ade81)
+L 4 (#6c12d2)
+U 10 (#0d3851)
+L 5 (#4e1680)
+D 10 (#65ba61)
+L 5 (#185f10)
+D 3 (#65ba63)
+L 6 (#3ca040)
+D 7 (#6970e1)
+L 3 (#49ad52)
+D 2 (#0c8481)
+L 8 (#3e7a82)
+D 3 (#0c8483)
+L 5 (#1aee02)
+D 4 (#35e721)
+L 4 (#39f672)
+D 5 (#07f333)
+L 6 (#730842)
+D 6 (#0fe7b3)
+L 3 (#6079e2)
+D 9 (#74e4d3)
+L 7 (#6079e0)
+D 4 (#1c77b3)
+L 3 (#3299b2)
+U 4 (#6649e3)
+L 5 (#496642)
+U 5 (#618563)
+L 4 (#36e332)
+D 4 (#084843)
+L 6 (#670e22)
+D 9 (#164f23)
+L 5 (#3c5360)
+D 5 (#467003)
+L 3 (#3c5362)
+U 3 (#3980d3)
+L 3 (#275e32)
+U 6 (#19ea63)
+L 4 (#855df0)
+U 2 (#5ec993)
+L 9 (#66f342)
+U 7 (#4ac7a3)
+L 5 (#1e6ab2)
+U 8 (#2bd3a3)
+L 4 (#5f6272)
+U 5 (#3b2031)
+L 4 (#1c1fa0)
+U 5 (#534711)
+R 3 (#1c1fa2)
+U 5 (#3474d1)
+R 5 (#572be2)
+D 4 (#2cdf53)
+R 6 (#3bb0e2)
+U 4 (#5e9073)
+R 4 (#3bb0e0)
+U 4 (#376c53)
+L 3 (#193f72)
+U 3 (#484e83)
+L 4 (#799b82)
+U 5 (#52f273)
+R 4 (#376190)
+U 5 (#3650a3)
+L 5 (#7def10)
+D 2 (#20fa83)
+L 2 (#089240)
+D 11 (#49c3a3)
+L 3 (#768be0)
+U 4 (#42fa23)
+L 5 (#5ab362)
+U 4 (#593983)
+L 8 (#5e6ba2)
+D 4 (#593981)
+R 4 (#7b4fc2)
+D 9 (#44a9c3)
+L 2 (#086692)
+D 3 (#7ce9f3)
+L 4 (#68b430)
+U 6 (#5ab7c1)
+L 4 (#430330)
+D 6 (#0b1593)
+L 5 (#1ca4a0)
+D 5 (#0b1591)
+R 10 (#429f80)
+D 2 (#5ab7c3)
+R 2 (#292be0)
+D 4 (#7a8693)
+R 3 (#12dfd2)
+D 10 (#2244f3)
+L 4 (#4eeb62)
+D 10 (#4831c3)
+L 6 (#25aa50)
+U 8 (#379b33)
+L 3 (#25aa52)
+U 3 (#145863)
+L 5 (#480492)
+U 4 (#69feb1)
+L 7 (#593592)
+U 4 (#4c6b91)
+L 5 (#312212)
+U 3 (#26df43)
+R 12 (#68b362)
+U 4 (#6e94f3)
+L 5 (#28bd52)
+U 4 (#1aea03)
+L 8 (#615f22)
+U 2 (#6fb163)
+L 2 (#40b8a2)
+U 7 (#09d633)
+L 7 (#044e02)
+U 8 (#1a4333)
+L 4 (#172d00)
+U 2 (#4509c3)
+L 6 (#4de1d0)
+U 7 (#818a41)
+L 4 (#0ce4b0)
+U 7 (#0745d1)
+R 6 (#520370)
+U 2 (#5a7db3)
+R 8 (#2f93c0)
+U 4 (#2e5263)
+L 4 (#147e00)
+U 3 (#44d303)
+L 7 (#245640)
+U 4 (#17d933)
+L 3 (#4f6820)
+U 3 (#17d931)
+L 10 (#488c50)
+D 3 (#108b33)
+L 4 (#300e60)
+D 3 (#887d43)
+R 7 (#4272d0)
+D 8 (#657091)
+L 7 (#63d120)
+D 3 (#230cb1)
+R 4 (#04e1b0)
+D 6 (#4ba9a3)
+L 7 (#055c40)
+U 2 (#3ee173)
+L 4 (#454062)
+U 6 (#2af563)
+L 3 (#40a642)
+U 6 (#4ddf13)
+L 6 (#85e6a0)
+U 6 (#090df3)
+L 9 (#055c42)
+U 2 (#4ac2b3)
+L 3 (#2ae1a0)
+U 5 (#43af51)
+R 6 (#860900)
+U 5 (#43af53)
+L 6 (#057bb0)
+U 3 (#570c13)
+R 4 (#515d92)
+U 3 (#09a031)
+L 7 (#45b7f2)
+U 5 (#09a033)
+R 6 (#1f50d2)
+U 7 (#4e6373)
+L 6 (#5df030)
+U 7 (#004663)
+R 7 (#10f120)
+U 4 (#5f4883)
+L 12 (#10f122)
+U 2 (#441aa3)
+L 3 (#1c7242)
+U 4 (#4849a3)
+R 7 (#7026d2)
+U 4 (#442943)
+R 8 (#5c5152)
+U 5 (#563813)
+L 4 (#5c5150)
+U 4 (#1460b3)
+L 5 (#1d3272)
+U 6 (#1d15d3)
+R 5 (#4fe282)
+U 3 (#6a04c1)
+L 6 (#2ca912)
+U 5 (#1d2623)
+L 6 (#298bb2)
+U 3 (#1d2621)
+L 9 (#3a4e82)
+U 4 (#2abf71)
+L 5 (#01c5d2)
+U 4 (#7f5d41)
+L 6 (#0149b2)
+U 4 (#66f8c3)
+L 5 (#53acd2)
+U 6 (#55caa3)
+L 3 (#676e82)
+U 8 (#5c69a3)
+R 5 (#5d7ed2)
+U 2 (#1d90a3)
+R 3 (#579cb2)
+U 3 (#631003)
+R 9 (#6ffcb2)
+U 5 (#2e98f3)
+R 2 (#036c22)
+U 3 (#2bd763)
+L 5 (#478442)
+U 7 (#7a8373)
+L 9 (#5da862)
+U 4 (#13a8d3)
blob - /dev/null
blob + 107f9a6e86b3db73c4e6e51585c64620ad754291 (mode 644)
--- /dev/null
+++ src/day-18.lisp
+(defpackage #:aoc/day-18
+ (:use #:cl #:aoc/utils)
+ (:export #:day-18))
+(in-package #:aoc/day-18)
+
+(defun parse-line (line)
+ (multiple-value-bind (dig-length)
+ (parse-integer line :start 2 :junk-allowed t)
+ (list (switch ((aref line 0))
+ (#\U :up)
+ (#\L :left)
+ (#\R :right)
+ (#\D :down))
+ dig-length)))
+
+(defun dir-diff (dir)
+ (ecase dir
+ (:up '(0 . -1))
+ (:left '(-1 . 0))
+ (:right '(1 . 0))
+ (:down '(0 . 1))))
+
+(defun fill-lagoon (map start-pos)
+ (loop with todo = (list start-pos)
+ while todo
+ for current = (pop todo)
+ do (setf (gethash current map) t)
+ do (loop for n in '(:up :left :right :down)
+ for n-pos = (point+ current (dir-diff n))
+ unless (gethash n-pos map)
+ do (push n-pos todo))))
+
+(defun find-start-pos (map min-x min-y)
+ (loop for x from min-x
+ for y from min-y
+ for pos = (cons x y)
+ when (gethash pos map)
+ do (return (point+ pos (cons 1 1)))))
+
+(defun lagoon-size (map)
+ (multiple-value-bind (min-x min-y)
+ (loop for key being the hash-keys of map
+ for (x . y) = key
+ minimize x into min-x
+ minimize y into min-y
+ maximize x into max-x
+ maximize y into max-y
+ finally (return (values min-x min-y max-x max-y)))
+ (let ((start-pos (find-start-pos map min-x min-y)))
+ (fill-lagoon map start-pos)
+ (hash-table-count map))))
+
+(defun day-18 (input)
+ (loop with map = (let ((ht (make-hash-table :test 'equal)))
+ (setf (gethash (cons 0 0) ht) t)
+ ht)
+ with current = (cons 0 0)
+ for line = (read-line input nil)
+ while line
+ for (dir length) = (parse-line line)
+ do (loop for i from 0 below length
+ do (setf current (point+ current (dir-diff dir)))
+ do (setf (gethash current map) t))
+ finally (return (lagoon-size map))))
blob - /dev/null
blob + 5687ff81534c8dee53a45e815c8ec1c19453d995 (mode 644)
--- /dev/null
+++ t/day-18.lisp
+(defpackage #:aoc-test/day-18
+ (:use #:cl #:lisp-unit2))
+(in-package #:aoc-test/day-18)
+
+(define-test test-day-18
+ ()
+ (multiple-value-bind (task-1)
+ (aoc:run-day 18 "R 6 (#70c710)
+D 5 (#0dc571)
+L 2 (#5713f0)
+D 2 (#d2c081)
+R 2 (#59c680)
+D 2 (#411b91)
+L 5 (#8ceee2)
+U 2 (#caa173)
+L 1 (#1b58a2)
+U 2 (#caa171)
+R 2 (#7807d2)
+U 3 (#a77fa3)
+L 2 (#015232)
+U 2 (#7a21e3)")
+ (assert= 62 task-1)))