From 4427590639becb8c12e673b4b694d21fe977e730 Mon Sep 17 00:00:00 2001 From: dobiadi <50926840+dobiadi@users.noreply.github.com> Date: Fri, 22 Dec 2023 13:34:50 +0100 Subject: [PATCH] Day18 C --- day18/c/day18 | Bin 0 -> 24648 bytes day18/c/day18.c | 369 ++++++++++++++++++++++++++ day18/input.txt | 660 +++++++++++++++++++++++++++++++++++++++++++++++ day18/sample.txt | 14 + 4 files changed, 1043 insertions(+) create mode 100755 day18/c/day18 create mode 100644 day18/c/day18.c create mode 100644 day18/input.txt create mode 100644 day18/sample.txt diff --git a/day18/c/day18 b/day18/c/day18 new file mode 100755 index 0000000000000000000000000000000000000000..d450bd8fc7fd92845377cddc976c5f8f7fae5917 GIT binary patch literal 24648 zcmeHP4{#jSd4DI_Ai($pv9SPyZ@^A*jStB-#s-|6Z5>__8!NWe(xhZ{)}5sbC!M%I zAY}l{JzwIR^99jFEy=*t3~eDzGtg=95E=)WKNhqJkrO606PP;0w0DsKp^!#RjIY1% z?fX`H>pdA{rA?T7n!WFRf8Y1M_h;YRUA>+DjW<=fT!K@z_=F&=^#X(9Q;a>gstkZn ztPFrT^ z3`bRY3^|?@6S`KZc-mn-c$660^*WTE9X1+jf+3YbY3rMb;8eGduD0%8 zNQdLmw$-ckc)TspwF5X5+ius}I&Rl@1i}%~9Se6Qb_lXb9dV`Du(4^~dVQJqIy1Mz z%q^eDF7sY1^rmf_^k66!Y7fT~q1d)f>m$*w(6+$#NC*YBcSgIEo4O(DD2VD-p+{Ds z_f=uGsgi$`pD8I64j1TgKpubd!r}92l-#3eb0j`Pd`aQozW=Y#jjP4|3Qt}VK8H$q z5I7~CH+jDDsmAP6^CHu^k!xC|nqWHPM|6WuW5zn3j#}t6{y60=^mCaAIBKDzVrCk* z&}n>f>Q{8?KQuNtJz$~poI$*O7P`D&DTT)@bYt8bj3+E~DudHg7COg*c!L%?0&S)j zE%ftDsu05#`Ya2*lC4Cb5`jttDiNqepb~*U+z9;Aefe*+)bScEJM-1eLTKs1L{)KE zOFdunoUByw+RuPIR$TO10QUkx@*Tt(EBvfjEcQ#B7B*vr!zNA(tg*sD6Q>2vSmB>c zoEBPRg@;X?7CK{v`%Rn{IAeufCQb{RvBDiDP79i`LV$62w^Vx9D5QVDpS*>Hauy?8{TTl9R8e^c|%Jb8*Sd^Zy0QNNz1MISJa|7cPk{{ z+u?OD*bNj7kXzFWik6!hBd~frF&9mpMRG}tmRj=$J$TSEZzg7G*){(O zB>%OO#bQ2)U>}jXM7@gIuH&=`&{DG&ijAvZOTL3% z<_l`s8H=ux1^CAs2A`oNasE57uVvCliYJR&R)VLA{ym7nk)eDq@eKyVhDj`!9tC)s zmei)$7Kja{zYjVo7M>yPtP*c_X_*1ibnhSdH-J60eFq4h>rVeQ$>j#fURG*r4`>IE z&eT$awOVdPl@rS~tmU*CN6xd#(I&J)?%GGLmNj^a9Lm4(ezBO6CAb```Iq3ARx^Je zNPE)csNrtWonDMkX9uX3DhQdMP>eDdatO{*s>P|?!39D%khd91c`}xjx?1KCdfu;> zSlk{tA>EQflKZNa`vZe3+YWBr3slxt%eIUMwIy?8V<%?j2f%pgIqoA`=ALmalN{Bu z{&6iUGKiWVh{znw3@?81Hmh7dlRTznT8<3)Pf!#KIrNOI|AcBJshQW%AlX{jI075m z>Sx{Qzk#T;l!bZ_8qj@F%lc}emFzSu7>20%rLp9nSX9VSqqt_wm{gvx2C6%kIm^^Z z8EHz&-F@y;G*uQ}E$3c|Rd<>;!OoUzEM!YP>Zl%J!!u=TqV#05MQNfYmcZ@wI!ZL# zLUQ-nvKk|EQ~nb!Xx!jG=HAmH>#`vPzXqhT!nQ=pgswrit3JyMNS!z{TwB~+% zn60{=b+WotAV^xKwrm8HHS%6rljWDOHoj9@OUXLA3bPRt6@?+eAat52)EF|; z8-?0wjY5rKjiXRQQ>f7w&=t5ZP(YkoB-j7Zj6xNSa9H>90d0JQ2L{0ntOq&_Y4PzMn* z>23)g>H!!^pWylNkI+O}iI&b;OXZlM+n+Re@0F7Z8KpXk$Qel5AwTYMw!=c1GzmG{ zk)ux9p^B98hlPyVI@*zQn6yKYDB}+cWzr;+lJP;@DQY*!$>#lEQUG2kxz)1lo!?9y zkVPezPi7s{E_teDzG@gxNz`R^bJpZ;8chT@Np4a%NdRstxew;1vR=l`l#Cl}QjEC) zzD5m@eNt8nO9JvLH}|1mQ6&#QP1{3S6xWUcA4=~5*J!0$l~b)W$7Iy09JLY&*;>iy zS*SkAsp?0OGg^tva4V4jTvc+bW!cn9vM6e$^43v(@>I4G8Ba+Rtu*20eDJ9zW!yA6 zF5D!!N!=s?xT)kmn48La88=h1X0S;Ww6&6~7FvmFm7DwPUs5F}TIutnz*P@TS6cZ%|-HmAxPv)A&;M-^i_=R z2bz^A`8%h?U)t2vWTmRsHf*aV{K%vqgBephs|I&glI60GN~LZ94uzgM&9F)yqy}Az zOL8U`{f87MxFx!niAWdqB|!S6_4O7hBxC?0?7+YtlI4(`z}Ov1Urizul1K0w%0Pi3 zR}Ti|3SE-1g3%j+X48b0jTNan#mc?k=h;2zPQQzpVTvYbGnh#aqJSwIz!or*e(_8! zkPE|SV!&4i3rAofbwI{7*^Z|evQjzPK5548D)TZ8z`HO|(t}C=6zhA)=fT{?t*pv( zfBEmxvZh5Eu({@O^u2xXNp9oOHz#k!#3U|1kMTHdE}LFDkIQmi%BKnc?>z-iG^VSo zm~k*idKG52$$HM3w|^JSP*S`*_Yc;NM3dErYbIk#n5;A1_15pA79Y;b--}si8u}8= ze8#jx!$wTjdBpK)414N;EYJPrlHT%R+8~v`3Xcd+-&>kSrqOM4$bA@3<O>oRzPbEwSYL?%=27fT3bQR@wVdKxqr0IJd?B#R&?~5X^9)t{1fupCq7%!$-kp+5HCv|^*GLd0HUL*z~pIY9Sv;Z8RL z!LF*GFeGFjP}!mMDwP}Q9ZKKG`CGCwUv||-O66B=i5l#Ls03F^nt_vK*}n3;`|BxL zI@r>lrPYi&++L(rrw^*+b)gmS9EZ}4jCz4)C0f=^QZ4VMJN@$+Q#PSxHLSYH8RydL zv(j;g(nsmVN9ILsFg@k4lAMO|Yu zdy~2%=MQ5Jn_^`w>+Gpom{>hc)dJ69<%jvaH{~#2jB$R1T0T2K^DebyhTbAl5NSm$ zce!U6(uqlZiq)Ce`%KY*<*qPQ3#X6h3qLm_I&4Ig`qA%aM5m#f|6g>{*c&pW=V1<} z4(XD&6KX-sv#KF&x0C&N8JCh%4MgOObIMe_TfVQ;U`0;F{rJtM3B~M3uin+0GvobL z7H_U4ukAr^H` z$HLYa_l}Lq;gPGeGVeTB%O{U_zD_|P1y~{g*^)Tj{ap<4eZ;^{TZ1%@_-sqw`riCD z$+~Ua^6or!ydLk*k7SasSl^i9Ylm$L>|)$`;l*yV|~)cEq9$<+9=#9I99ygfBupEx@;-jKLtM0fD|kk~S^ z!I9oLa*ZQ>DvX=pFUrZ z-%6QZM^U^hsS<%o1S%1zM4%FZN(3qqs6?O=fj^uG(0^|(YV$0LM8cj$aRHb-mwtOt z1=pq3H#7s%{|U|*E*5tK{w*Lq0R1-L^MH+qi^T}w(jOIzuK|Agm12>;)a?bFkB!Kx zpA?HX0_O16zZH=F2bz-W3tNP%r`C1ptg~zS6@5PF!?62t5@Db#0+k3j+-YSs_`7$fV4xJp&L*pYa%vR9noOU+S* zdlmnG6wdWf=BEwtd2V)t^=k9#Q?OaVRt38i>{GB`!F>uop`hLF>F}CXLt?}F_1Al@ zYT2IbN+dlE4c-;r`lSs?i8kE3Y?-%y#bQOC+#>bo8RA{}hSw@d?M7!r?Nx#GDCWli zo#d%qt3<8nSLYEbap6()K^uL!qVu?7`6gss7!|dx28G8PowDW<7n$S4;0kd!GE}ZP zP8DO1l%H#!OU3e!BID$Lxq3Y=?aUDmu4M}o(89 z&OQwKg;lsK+UK{eZLvgyH;O~-0^7rSBG4{Ch$oUec6i&w#DRBuqEm09Bk$sn3`X_# zNOXH3q6ZVvSX>Vzdqi8bvpW(>go56BX9+spFRTY*u|TgL>Pp0Vae7~%Go%NTot<=e zp9Rw)nJ5tr26`J-!69A0Y0KJ8e%*gdqmGmI8vpE;wVRsOgN*YYb-$*#TH_X>Z`inb z-P(=%=9_NX>ffesTf1(fUzZ04`uNyCd9I)Rh(VK!0|3>@f+p#72LZ~n3`?a$!9XG) zWZmIq>4Ai%;0NWU{0Np|v)i#BT|2P&Gp>(DRSqQQ_JYu}FU5b6q|lWe@nFQ#;~&j}WW1>_2;q(Qb|wPb0TVF;c5n`dI)-B1!rK*1 zguLxtNpE*7+8v4|dM%{w$uN#04F?rz?YgF=)YYYUMM%{nWItD!*T0G_WjRmqN?f$&Wc_mI z=aMWXUXL1>5G#?f>f6uJrS}-t#PdGWXnkVU=k*ao4+|=2*Z)({@nLq9{pWQ(LoQz} zZ%^?*0DW51vp%o;8Fo-`k;q5Na{YPz9R`h-bga+&2!_0GfQU@W9HZh6JSGtTRL6RMKz{<8x)WGJSr&-)IBgG!Lgx7VMJ5hDF{O0Ja(LSo4K z9@3|n+4Ua=jbg&~&HJ3X-|_wqA~M#aoOS$~O*&iYo!ea9;5Q|0%m4nwb!Y3a@W@cc{rYWCf#Kd3t1qc-DQF3Zw3+DX5i NZY)Tb*c5E2_+JxU0NDTl literal 0 HcmV?d00001 diff --git a/day18/c/day18.c b/day18/c/day18.c new file mode 100644 index 0000000..0994ec7 --- /dev/null +++ b/day18/c/day18.c @@ -0,0 +1,369 @@ +#include +#include +#include +#include +#include + +#define LINE_MAX_LENGTH 256 +#define MAX_ENTRIES 2048 +#define MAX_QUEUE_LEN 256 +#define MAX_EDGES 1024 +#define MAX_BREAKPOINTS 512 +#define min(a,b) ((a) < (b) ? (a) : (b)) +#define max(a,b) ((a) > (b) ? (a) : (b)) + +typedef struct entry { + char direction; + long long count; + char rgb_string[10]; +} entry_t; + +typedef struct zone { + long long upper_left_corner[2]; + long long lower_right_corner[2]; + uint8_t outside; +} zone_t; + +int cmp(const void* a, const void* b); +int on_edge(long long edges[MAX_EDGES][2][2], int edges_num, long long side[2][2]); +unsigned long long lake_volume(entry_t entries[], int entries_num); +void decode_rgbs(entry_t entries[], int entries_num); + +int main() { + char *p, *buf, c; + + buf = (char *)malloc(LINE_MAX_LENGTH); + memset(buf, 0, LINE_MAX_LENGTH); + p = buf; + + entry_t entries[MAX_ENTRIES]; + memset(entries, 0, MAX_ENTRIES * sizeof(entry_t)); + int entries_num = 0; + + while ((c = getchar()) != EOF) { + *p++ = c; + if (c == '\n') { + sscanf(buf, "%c %lli %s", &entries[entries_num].direction, &entries[entries_num].count, entries[entries_num].rgb_string); + entries_num++; + memset(buf, 0, LINE_MAX_LENGTH); + p = buf; + } + } + + unsigned long long part1 = lake_volume(entries, entries_num); + + decode_rgbs(entries, entries_num); + + unsigned long long part2 = lake_volume(entries, entries_num); + + printf("%llu\n", part1); + printf("%llu\n", part2); + + free(buf); +} + +int cmp(const void* a, const void* b) { + return *(long long*)a - *(long long*)b; +} + +int on_edge(long long edges[MAX_EDGES][2][2], int edges_num, long long side[2][2]) { + for (int i = 0; i < edges_num; i++) { + if (edges[i][0][0] == side[0][0] && edges[i][0][0] == edges[i][1][0] && side[0][0] == side[1][0] && edges[i][0][1] <= side[0][1] && edges[i][1][1] >= side[1][1]) { + return 1; + } + if (edges[i][0][1] == side[0][1] && edges[i][0][1] == edges[i][1][1] && side[0][1] == side[1][1] && edges[i][0][0] <= side[0][0] && edges[i][1][0] >= side[1][0]) { + return 1; + } + } + + return 0; +} + +unsigned long long lake_volume(entry_t entries[], int entries_num) { + long long x = 0, y = 0, dir[2]; + + long long edges[MAX_EDGES][2][2]; + memset(edges, 0, MAX_EDGES * 2 * 2 * sizeof(long long)); + int edges_num = 0; + + for (int i = 0; i < entries_num; i++) { + switch (entries[i].direction) { + case 'R': + dir[0] = 1; + dir[1] = 0; + edges[edges_num][0][0] = x; + edges[edges_num][0][1] = y; + edges[edges_num][1][0] = x + entries[i].count * dir[0]; + edges[edges_num][1][1] = y + entries[i].count * dir[1]; + edges_num++; + break; + case 'L': + dir[0] = -1; + dir[1] = 0; + edges[edges_num][1][0] = x; + edges[edges_num][1][1] = y; + edges[edges_num][0][0] = x + entries[i].count * dir[0]; + edges[edges_num][0][1] = y + entries[i].count * dir[1]; + edges_num++; + break; + case 'U': + dir[0] = 0; + dir[1] = -1; + edges[edges_num][1][0] = x; + edges[edges_num][1][1] = y; + edges[edges_num][0][0] = x + entries[i].count * dir[0]; + edges[edges_num][0][1] = y + entries[i].count * dir[1]; + edges_num++; + break; + case 'D': + dir[0] = 0; + dir[1] = 1; + edges[edges_num][0][0] = x; + edges[edges_num][0][1] = y; + edges[edges_num][1][0] = x + entries[i].count * dir[0]; + edges[edges_num][1][1] = y + entries[i].count * dir[1]; + edges_num++; + break; + } + + x += entries[i].count * dir[0]; + y += entries[i].count * dir[1]; + } + + // Find smallest and largest x and y + long long min_x = LLONG_MAX, max_x = LLONG_MIN, min_y = LLONG_MAX, max_y = LLONG_MIN; + for (int i = 0; i < edges_num; i++) { + if (edges[i][0][0] < min_x) { + min_x = edges[i][0][0]; + } + if (edges[i][1][0] > max_x) { + max_x = edges[i][1][0]; + } + if (edges[i][0][1] < min_y) { + min_y = edges[i][0][1]; + } + if (edges[i][1][1] > max_y) { + max_y = edges[i][1][1]; + } + } + + // X breakpoints + long long x_breakpoints[MAX_BREAKPOINTS], x_breakpoints_num = 0; + for (int i = 0; i < edges_num; i++) { + int found = 0; + for (int j = 0; j < x_breakpoints_num; j++) { + if (edges[i][0][0] == x_breakpoints[j]) { + found = 1; + break; + } + } + if (!found) { + x_breakpoints[x_breakpoints_num] = edges[i][0][0]; + x_breakpoints_num++; + } + found = 0; + for (int j = 0; j < x_breakpoints_num; j++) { + if (edges[i][1][0] == x_breakpoints[j]) { + found = 1; + break; + } + } + if (!found) { + x_breakpoints[x_breakpoints_num] = edges[i][1][0]; + x_breakpoints_num++; + } + } + qsort(x_breakpoints, x_breakpoints_num, sizeof(x_breakpoints[0]), &cmp); + + // Y breakpoints + long long y_breakpoints[MAX_BREAKPOINTS], y_breakpoints_num = 0; + for (int i = 0; i < edges_num; i++) { + int found = 0; + for (int j = 0; j < y_breakpoints_num; j++) { + if (edges[i][0][1] == y_breakpoints[j]) { + found = 1; + break; + } + } + if (!found) { + y_breakpoints[y_breakpoints_num] = edges[i][0][1]; + y_breakpoints_num++; + } + found = 0; + for (int j = 0; j < y_breakpoints_num; j++) { + if (edges[i][1][1] == y_breakpoints[j]) { + found = 1; + break; + } + } + if (!found) { + y_breakpoints[y_breakpoints_num] = edges[i][1][1]; + y_breakpoints_num++; + } + } + qsort(y_breakpoints, y_breakpoints_num, sizeof(y_breakpoints[0]), &cmp); + + zone_t **zones = (zone_t**)malloc((x_breakpoints_num - 1) * sizeof(zone_t*)); + for (int i = 0; i < x_breakpoints_num - 1; i++) { + zones[i] = (zone_t*)malloc((y_breakpoints_num - 1) * sizeof(zone_t)); + memset(zones[i], 0, (y_breakpoints_num - 1) * sizeof(zone_t)); + } + zone_t *curr; + + for (int i = 0; i < y_breakpoints_num - 1; i++) { + for (int j = 0; j < x_breakpoints_num - 1; j++) { + curr = &zones[j][i]; + curr->upper_left_corner[0] = x_breakpoints[j]; + curr->upper_left_corner[1] = y_breakpoints[i]; + curr->lower_right_corner[0] = x_breakpoints[j + 1]; + curr->lower_right_corner[1] = y_breakpoints[i + 1]; + } + } + + // Mark zones as outside + int found = 1; + while (found) { + found = 0; + for (int i = 0; i < y_breakpoints_num - 1; i++) { + for (int j = 0; j < x_breakpoints_num - 1; j++) { + if (zones[j][i].outside) { + continue; + } + // LEFT + long long side[2][2]; + side[0][0] = zones[j][i].upper_left_corner[0]; + side[0][1] = zones[j][i].upper_left_corner[1]; + side[1][0] = zones[j][i].upper_left_corner[0]; + side[1][1] = zones[j][i].lower_right_corner[1]; + if (j == 0 && !on_edge(edges, edges_num, side)) { + zones[j][i].outside = 1; + found = 1; + } + if (j > 0 && zones[j-1][i].outside && !on_edge(edges, edges_num, side)) { + zones[j][i].outside = 1; + found = 1; + } + // RIGHT + side[0][0] = zones[j][i].lower_right_corner[0]; + side[0][1] = zones[j][i].upper_left_corner[1]; + side[1][0] = zones[j][i].lower_right_corner[0]; + side[1][1] = zones[j][i].lower_right_corner[1]; + if (j == x_breakpoints_num - 2 && !on_edge(edges, edges_num, side)) { + zones[j][i].outside = 1; + found = 1; + } + if (j < x_breakpoints_num - 2 && zones[j+1][i].outside && !on_edge(edges, edges_num, side)) { + zones[j][i].outside = 1; + found = 1; + } + // UP + side[0][0] = zones[j][i].upper_left_corner[0]; + side[0][1] = zones[j][i].upper_left_corner[1]; + side[1][0] = zones[j][i].lower_right_corner[0]; + side[1][1] = zones[j][i].upper_left_corner[1]; + if (i == 0 && !on_edge(edges, edges_num, side)) { + zones[j][i].outside = 1; + found = 1; + } + if (i > 0 && zones[j][i-1].outside && !on_edge(edges, edges_num, side)) { + zones[j][i].outside = 1; + found = 1; + } + // DOWN + side[0][0] = zones[j][i].upper_left_corner[0]; + side[0][1] = zones[j][i].lower_right_corner[1]; + side[1][0] = zones[j][i].lower_right_corner[0]; + side[1][1] = zones[j][i].lower_right_corner[1]; + if (i == y_breakpoints_num - 2 && !on_edge(edges, edges_num, side)) { + zones[j][i].outside = 1; + found = 1; + } + if (i < y_breakpoints_num - 2 && zones[j][i+1].outside && !on_edge(edges, edges_num, side)) { + zones[j][i].outside = 1; + found = 1; + } + } + } + } + + unsigned long long sum = 0; + unsigned long long out = 0; + for (int i = 0; i < y_breakpoints_num - 1; i++) { + for (int j = 0; j < x_breakpoints_num - 1; j++) { + if (zones[j][i].outside) { + out++; + } + } + } + + for (int i = 0; i < y_breakpoints_num - 1; i++) { + for (int j = 0; j < x_breakpoints_num - 1; j++) { + if (zones[j][i].outside) { + continue; + } + sum += (zones[j][i].lower_right_corner[0] - zones[j][i].upper_left_corner[0] - 1) * (zones[j][i].lower_right_corner[1] - zones[j][i].upper_left_corner[1] - 1); + // RIGHT + long long side[2][2]; + side[0][0] = zones[j][i].lower_right_corner[0]; + side[0][1] = zones[j][i].upper_left_corner[1]; + side[1][0] = zones[j][i].lower_right_corner[0]; + side[1][1] = zones[j][i].lower_right_corner[1]; + if (!on_edge(edges, edges_num, side)) { + sum += side[1][1] - side[0][1] - 1; + } + // DOWN + side[0][1] = zones[j][i].lower_right_corner[1]; + side[0][0] = zones[j][i].upper_left_corner[0]; + side[1][0] = zones[j][i].lower_right_corner[0]; + side[1][1] = zones[j][i].lower_right_corner[1]; + if (!on_edge(edges, edges_num, side)) { + sum += side[1][0] - side[0][0] - 1; + } + // CORNER + side[0][1] = zones[j][i].lower_right_corner[1]; + side[0][0] = zones[j][i].lower_right_corner[0]; + side[1][0] = zones[j][i].lower_right_corner[0]; + side[1][1] = zones[j][i].lower_right_corner[1]; + if (!on_edge(edges, edges_num, side)) { + sum++; + } + } + } + + for (int i = 0; i < edges_num; i++) { + sum += (edges[i][1][0] - edges[i][0][0]) + (edges[i][1][1] - edges[i][0][1]); + } + + for (int i = 0; i < x_breakpoints_num - 1; i++) { + free(zones[i]); + } + free(zones); + + return sum; +} + +void decode_rgbs(entry_t entries[], int entries_num) { + for (int i = 0; i < entries_num; i++) { + char value[6], *p; + memset(value, 0, 6); + p = entries[i].rgb_string; + while(*p != '#') p++; + p++; + strncpy(value, p, 5); + sscanf(value, "%llx", &entries[i].count); + switch(entries[i].rgb_string[7]) { + case '0': + entries[i].direction = 'R'; + break; + case '1': + entries[i].direction = 'D'; + break; + case '2': + entries[i].direction = 'L'; + break; + case '3': + entries[i].direction = 'U'; + break; + } + } +} diff --git a/day18/input.txt b/day18/input.txt new file mode 100644 index 0000000..7a1c46c --- /dev/null +++ b/day18/input.txt @@ -0,0 +1,660 @@ +L 3 (#07b412) +D 5 (#713ad1) +L 2 (#11e6d2) +D 4 (#6ba7d3) +L 3 (#7cfca2) +U 5 (#0a85c3) +L 2 (#3a5282) +U 4 (#6f91a3) +L 3 (#32c2f0) +U 6 (#2dd7b3) +L 6 (#848c30) +U 7 (#077a43) +R 5 (#ba4692) +U 6 (#49b551) +R 3 (#14d162) +U 8 (#397871) +R 5 (#1c73f2) +D 8 (#7130e1) +R 4 (#c84852) +U 2 (#203b91) +R 3 (#288e30) +U 5 (#91ba91) +R 4 (#5dda70) +U 3 (#91ba93) +R 4 (#732500) +U 4 (#0676f1) +L 9 (#6701a2) +U 4 (#5c38c1) +L 7 (#0f7480) +U 4 (#921b21) +L 6 (#83d9e0) +U 2 (#28c691) +L 7 (#1b6de0) +U 2 (#02cee1) +L 4 (#5b66b0) +U 4 (#bdb093) +L 6 (#75eb20) +U 4 (#928251) +L 4 (#6bb430) +D 7 (#44ad91) +L 2 (#806b50) +U 7 (#7d1391) +L 4 (#7a3652) +U 5 (#9cbf41) +L 5 (#905712) +U 2 (#70beb3) +L 2 (#bede02) +U 7 (#70beb1) +R 3 (#a2c232) +U 5 (#7b0ad1) +R 5 (#01d012) +U 5 (#2b1901) +R 7 (#698c32) +U 4 (#a19d91) +R 4 (#7dbb92) +U 3 (#8feb41) +R 5 (#021ab2) +U 3 (#42a773) +R 6 (#99c6c2) +D 7 (#8f7b33) +R 5 (#01fd82) +D 5 (#8e7263) +R 2 (#37e492) +U 5 (#10bff3) +R 5 (#a09242) +U 7 (#126723) +R 3 (#864230) +D 8 (#70bc43) +R 5 (#7cf4a0) +D 2 (#8135d3) +R 6 (#144b70) +U 5 (#0c51e3) +L 6 (#00e590) +U 4 (#44ba73) +L 2 (#4177e2) +U 4 (#a4c5b1) +L 6 (#6f2f12) +U 3 (#9a4ce1) +L 4 (#979402) +D 7 (#2a0ce1) +L 3 (#0c1b70) +U 7 (#58ca71) +L 3 (#95d640) +U 4 (#549241) +R 10 (#a1f1b2) +U 3 (#1753b1) +L 5 (#1d32d2) +U 5 (#9a58d3) +L 5 (#4dc1b2) +U 6 (#1ab693) +L 4 (#5e8df2) +U 3 (#4dabf3) +R 6 (#972492) +U 5 (#3198c3) +R 4 (#972490) +U 3 (#54b613) +R 6 (#4a8bb2) +U 2 (#a4c5b3) +R 3 (#126042) +U 9 (#54acc3) +L 5 (#2b4682) +U 4 (#88f453) +L 4 (#2b4680) +U 8 (#4a4283) +L 2 (#8bfdf0) +U 2 (#a76851) +L 4 (#0a9b30) +U 6 (#43a141) +L 3 (#14fd80) +U 3 (#7e5391) +L 6 (#43ba40) +D 2 (#146e93) +L 4 (#9c71b0) +D 7 (#5ae483) +L 5 (#0bcd70) +U 6 (#52a1c3) +L 4 (#3307f0) +U 4 (#1da3f3) +L 3 (#7a8c80) +D 5 (#89c463) +L 2 (#2984e0) +D 2 (#828673) +L 6 (#2cf252) +U 7 (#500061) +L 4 (#a07ff2) +U 3 (#565f21) +R 3 (#09ef22) +U 3 (#a65f83) +R 5 (#410672) +U 4 (#24fe73) +L 5 (#b6ed72) +U 8 (#4574d3) +L 6 (#2e3142) +D 8 (#7ba311) +L 3 (#1bc442) +U 6 (#38b161) +L 4 (#8ada92) +U 2 (#24cdf1) +L 3 (#37b3e2) +U 3 (#3a3ec1) +R 5 (#242ea2) +U 2 (#1fe073) +R 5 (#9ad182) +U 6 (#4a9193) +R 6 (#34c480) +U 2 (#9ff123) +R 5 (#34c482) +U 4 (#08fe03) +R 3 (#46d292) +D 10 (#19fca3) +R 3 (#1ea7d2) +D 6 (#c2d531) +R 8 (#614f82) +D 6 (#c2d533) +R 6 (#777202) +D 2 (#38f573) +R 3 (#84e142) +D 3 (#036d11) +R 5 (#113352) +D 5 (#036d13) +R 3 (#7ad752) +U 4 (#969de3) +R 7 (#7887d0) +U 3 (#31aa61) +R 4 (#affca0) +U 6 (#31aa63) +R 2 (#374010) +U 6 (#574d53) +L 4 (#4edbd2) +U 2 (#2271c1) +L 7 (#595d32) +U 3 (#2271c3) +R 3 (#2c6532) +U 5 (#2754d3) +R 8 (#8b2652) +U 4 (#b27ab3) +R 6 (#824b80) +D 4 (#587173) +R 4 (#3715b0) +D 5 (#8f0b61) +R 3 (#6a2ac0) +D 3 (#1e0b21) +R 5 (#29a290) +D 3 (#8850b3) +R 5 (#9013e0) +D 3 (#24c5d3) +R 5 (#2b12d0) +U 6 (#4090a3) +R 3 (#9cddd0) +D 6 (#a93843) +R 4 (#6fff30) +D 4 (#3f1121) +L 7 (#76f2c0) +D 4 (#4f9e11) +L 3 (#76f2c2) +D 8 (#480d31) +L 6 (#694740) +D 5 (#177e81) +L 9 (#692aa2) +D 3 (#10b971) +R 9 (#42f012) +D 3 (#10b973) +R 3 (#2c6202) +D 8 (#851881) +R 3 (#04ae62) +D 2 (#470d81) +R 4 (#155e10) +U 3 (#01b053) +R 2 (#c55dd0) +U 5 (#01b051) +R 9 (#026f30) +D 2 (#113081) +R 2 (#694742) +D 4 (#22d821) +L 5 (#03eb80) +D 5 (#3bc5d1) +L 4 (#69bf90) +D 3 (#3fdce3) +L 4 (#2d1350) +D 2 (#3fdce1) +L 3 (#65f500) +U 4 (#bd7f81) +L 8 (#8382e0) +D 4 (#160053) +L 7 (#5ff9f0) +D 4 (#ab40d3) +R 6 (#5ff9f2) +D 2 (#58d1b3) +R 2 (#6bcc80) +D 6 (#b187c3) +R 6 (#73b290) +D 3 (#9fbf43) +R 4 (#630f00) +D 2 (#4f1b13) +R 7 (#543b30) +D 7 (#114c43) +R 6 (#629ac0) +D 6 (#1bedb3) +R 4 (#016f50) +D 2 (#285e31) +R 3 (#611460) +D 7 (#0dfd61) +R 2 (#75f3e0) +D 2 (#1e79b1) +R 4 (#144e90) +U 5 (#d16ff1) +R 4 (#144e92) +U 6 (#113511) +R 5 (#610450) +U 3 (#1291c1) +R 2 (#328eb0) +U 5 (#2f3f73) +R 9 (#126af2) +U 4 (#946843) +L 6 (#126af0) +U 5 (#866453) +L 7 (#352e70) +U 4 (#5f8413) +L 7 (#c618e2) +U 3 (#6c2813) +L 2 (#c618e0) +U 3 (#1d3db3) +R 8 (#37e470) +U 2 (#1705b3) +R 6 (#6ab412) +U 6 (#961873) +R 3 (#6ab410) +U 8 (#30e6f3) +R 5 (#3308e0) +U 3 (#1fc8c1) +R 3 (#3450a0) +D 8 (#9d4391) +R 3 (#6a9c70) +D 2 (#25d071) +R 4 (#3e5330) +D 6 (#401381) +R 5 (#399052) +D 3 (#ab9e81) +R 4 (#2622a2) +D 4 (#68c4c3) +R 4 (#2c5f92) +D 3 (#8021d3) +R 5 (#75bd02) +D 3 (#1885a1) +R 3 (#67b420) +D 3 (#7df001) +R 6 (#67b422) +D 2 (#5270f1) +R 3 (#2bbed2) +D 9 (#863371) +L 3 (#45ba70) +D 6 (#49f553) +L 2 (#693800) +D 6 (#49f551) +L 7 (#450b90) +D 7 (#3b7aa1) +R 5 (#399050) +D 2 (#0b37f1) +R 4 (#5cbff0) +U 4 (#573103) +R 3 (#3668c0) +U 9 (#573101) +R 4 (#7d0a50) +U 7 (#316341) +R 3 (#4cbab0) +U 8 (#5c0f21) +R 3 (#22b3a2) +U 3 (#804941) +R 4 (#22b3a0) +U 7 (#173641) +R 5 (#1b7230) +U 3 (#8a0511) +R 4 (#1a5f82) +D 5 (#52eda1) +R 4 (#1a5f80) +U 5 (#38db21) +R 5 (#2f4720) +U 2 (#2a75c1) +R 9 (#aa4d40) +U 3 (#538141) +L 3 (#7ad770) +U 5 (#66ec01) +L 5 (#53e812) +U 3 (#539a81) +L 4 (#53e810) +U 5 (#413821) +L 5 (#618330) +D 5 (#a4bf71) +L 6 (#56e4b2) +U 3 (#acf591) +L 2 (#890732) +U 8 (#2a62d1) +R 4 (#458e22) +U 5 (#2ef8e3) +R 4 (#273c60) +U 4 (#439bc3) +R 2 (#273c62) +D 4 (#64c3c3) +R 5 (#0e0c12) +D 5 (#9481d1) +R 3 (#5321d2) +U 4 (#5d6361) +R 7 (#531760) +U 7 (#068711) +R 7 (#216570) +U 7 (#a20e51) +L 3 (#216572) +D 3 (#46afb1) +L 8 (#4e8f70) +D 6 (#1261b1) +L 5 (#3840e0) +U 6 (#7b0901) +L 3 (#75cf00) +U 3 (#b56e51) +L 7 (#43b850) +U 3 (#01dfc1) +L 6 (#067e40) +U 7 (#613913) +R 5 (#30ff10) +U 7 (#285d33) +R 5 (#72e5c0) +D 7 (#285d31) +R 3 (#3fdcf0) +U 6 (#601d03) +R 4 (#312812) +U 4 (#4ea643) +R 6 (#8253e2) +D 7 (#4ea641) +R 2 (#3045d2) +U 7 (#8362b3) +R 7 (#631a70) +U 4 (#ba56c3) +R 6 (#28e520) +U 2 (#568a53) +R 3 (#c1d452) +U 2 (#3e2a33) +R 5 (#c1d450) +U 5 (#0f6e43) +R 4 (#c65ae0) +U 3 (#790e83) +R 2 (#012b40) +U 7 (#2ea6b3) +R 4 (#358722) +D 2 (#7b3bf3) +R 6 (#adbd32) +D 4 (#4f7b63) +R 5 (#0d26f2) +U 5 (#47f363) +R 2 (#4c6160) +D 5 (#70ff63) +R 5 (#284290) +D 3 (#231103) +L 7 (#540e80) +D 2 (#8b51b3) +L 5 (#662c40) +D 4 (#22e7e3) +R 7 (#1d46a0) +D 3 (#343a43) +L 6 (#4d7d90) +D 4 (#31a643) +L 10 (#4e6b30) +U 4 (#31a641) +L 4 (#5abc90) +D 3 (#799953) +L 4 (#9e4ed0) +D 5 (#3b73e3) +R 7 (#390760) +D 3 (#bd3533) +L 7 (#390762) +D 5 (#075bd3) +L 3 (#1b7350) +D 3 (#a01d23) +R 4 (#a56752) +D 2 (#6a4313) +R 5 (#529462) +D 4 (#843c43) +R 4 (#829482) +U 4 (#7914e3) +R 3 (#2f0b90) +U 7 (#5f3d53) +R 6 (#114980) +D 7 (#60b7e3) +R 4 (#b9b2f0) +D 4 (#60b7e1) +R 5 (#2143f0) +D 3 (#2f86d3) +L 7 (#5f4440) +D 4 (#366293) +L 5 (#5baae0) +U 8 (#80a9a3) +L 3 (#61f680) +D 8 (#80a9a1) +L 5 (#8bdce0) +U 4 (#46e4d1) +L 5 (#120950) +D 8 (#7c15b1) +L 4 (#641450) +D 2 (#047bf1) +L 2 (#3b00c0) +D 7 (#a18c33) +L 3 (#543b70) +D 2 (#a18c31) +L 7 (#466150) +D 4 (#5c3ad1) +R 4 (#5caa80) +D 2 (#230201) +R 6 (#955102) +D 6 (#b200c1) +R 7 (#955100) +D 3 (#1d8ff1) +R 3 (#26f9d0) +D 8 (#160d71) +R 2 (#483920) +D 4 (#4577c3) +R 8 (#92ef90) +D 5 (#a57e83) +R 7 (#0715a0) +D 3 (#1da9e3) +L 2 (#627970) +D 6 (#573ee1) +L 8 (#006f30) +D 4 (#735da1) +L 4 (#006f32) +D 4 (#266951) +R 3 (#9745a0) +D 6 (#412bb1) +R 7 (#83f8f2) +D 2 (#6c4d31) +R 4 (#6a7e72) +D 3 (#578921) +L 7 (#6c5d92) +D 2 (#5485c1) +L 5 (#300852) +D 4 (#cdf091) +L 2 (#544dd2) +D 3 (#1259f1) +L 7 (#882292) +D 6 (#03e4b1) +R 7 (#cdf192) +D 3 (#5f3c41) +R 4 (#c836b0) +D 5 (#4cfdc1) +L 2 (#36a590) +D 4 (#244753) +L 2 (#73bd60) +D 3 (#244751) +L 7 (#72cc90) +U 4 (#0e0d21) +L 5 (#21ce60) +D 4 (#523dd1) +L 9 (#041252) +D 3 (#8cfc81) +R 5 (#041250) +D 5 (#365031) +R 6 (#21ce62) +U 5 (#17b3e1) +R 5 (#75a900) +D 3 (#8d4fe1) +R 4 (#75a902) +D 3 (#342091) +R 5 (#8d5570) +D 5 (#a6f9a3) +R 5 (#59f560) +D 4 (#49ae63) +R 5 (#59f562) +D 5 (#2dc6c3) +R 4 (#8fb550) +U 6 (#884bf3) +R 3 (#17ea50) +U 4 (#560143) +R 5 (#623ad0) +D 8 (#5dfc41) +R 5 (#ca0040) +D 2 (#5bc201) +R 4 (#ca0042) +D 3 (#7008b1) +R 7 (#b87530) +U 4 (#5e8821) +R 4 (#817080) +U 7 (#69e951) +R 2 (#518e30) +U 4 (#0e9831) +R 5 (#29ea82) +D 4 (#26f041) +R 9 (#6a1862) +D 4 (#8d3971) +L 4 (#6a1860) +D 4 (#215e71) +L 5 (#29ea80) +D 3 (#282e61) +R 3 (#bc6172) +D 8 (#17c4f1) +L 6 (#1abf10) +U 5 (#1a15e1) +L 3 (#2ed960) +D 5 (#24f4f3) +L 4 (#9d6b00) +D 6 (#24f4f1) +L 2 (#704c40) +D 4 (#45b0c1) +L 5 (#93a182) +D 6 (#53b3b1) +L 5 (#5f72d2) +U 6 (#76a9f1) +L 4 (#643b62) +D 3 (#3f41f1) +L 6 (#691122) +D 2 (#606491) +L 5 (#4c5b02) +D 5 (#6d1fa1) +L 2 (#bf6472) +D 6 (#6d1fa3) +L 6 (#989bb2) +U 4 (#606493) +L 3 (#348412) +U 6 (#9e4561) +L 4 (#9b1742) +U 8 (#42a901) +L 5 (#09f8f2) +U 3 (#63a8c3) +R 8 (#591640) +U 4 (#2dcda3) +L 8 (#591642) +U 4 (#4f7803) +L 2 (#3e5fe2) +U 5 (#0b9e93) +L 3 (#cae6b2) +U 4 (#7399f3) +L 7 (#28c482) +U 6 (#d2ee83) +L 3 (#28c480) +U 6 (#2f0423) +L 3 (#320f52) +U 2 (#5f4ab1) +L 4 (#8d6672) +U 6 (#b09261) +L 6 (#718952) +D 8 (#750591) +L 4 (#33df82) +D 5 (#1052a1) +L 4 (#9a90e2) +U 6 (#8eb861) +L 2 (#0c1e92) +U 4 (#53b871) +L 4 (#0739f2) +U 4 (#76cfb1) +L 6 (#9b6922) +U 7 (#76cfb3) +L 5 (#846eb2) +D 4 (#53b873) +L 3 (#6b7ae2) +D 4 (#59dd21) +L 2 (#60b0b2) +D 6 (#a53b01) +R 5 (#767632) +D 4 (#6c6bb1) +L 4 (#b3a932) +D 3 (#0660a1) +L 5 (#12b390) +U 4 (#9c9d01) +L 4 (#12b392) +U 3 (#910691) +L 4 (#8dec12) +U 6 (#65ba53) +L 3 (#1e02b2) +U 2 (#b05803) +L 2 (#1e02b0) +U 8 (#8a5d93) +L 2 (#3bea42) +U 5 (#032da3) +R 8 (#0aabc2) +U 3 (#4a0a13) +L 8 (#9f1c02) +U 4 (#58a0f3) +L 3 (#9f1c00) +D 3 (#3a2cf3) +L 7 (#169b22) +D 2 (#004253) +L 2 (#841fd2) +D 9 (#0b8473) +L 4 (#3f85a2) +D 6 (#134bd3) +L 2 (#17f832) +D 5 (#8870f3) +L 2 (#87cf62) +D 3 (#8b9fa3) +L 2 (#6ca082) +D 3 (#9a6ea3) +L 7 (#60cbc2) +D 4 (#9a6ea1) +L 2 (#296752) +D 3 (#b0d5c3) +L 8 (#0e0100) +D 5 (#218503) +L 6 (#36a620) +D 7 (#071463) +L 3 (#669dd0) +D 3 (#3099a1) +L 7 (#385d40) +D 5 (#3099a3) +L 7 (#3c66b0) +D 3 (#8fec33) +L 2 (#4ce142) +D 4 (#4b7051) +L 8 (#55b322) +D 3 (#4b7053) +L 7 (#38cd62) +D 3 (#668b13) +L 4 (#36a622) +D 2 (#581f83) +L 4 (#0e0102) +D 7 (#356bd3) +L 5 (#3eb472) +D 3 (#4ca003) +L 3 (#6afe62) +D 5 (#4ca001) +L 5 (#536dd2) +U 8 (#978bb3) +L 5 (#6118d2) +U 7 (#aec403) diff --git a/day18/sample.txt b/day18/sample.txt new file mode 100644 index 0000000..fc7612e --- /dev/null +++ b/day18/sample.txt @@ -0,0 +1,14 @@ +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)