aoc2025

Advent of Code solutions for 2025 in Common Lisp
Log | Files | Refs | README

commit dcb86cd87323d1732984e4572d7a7ede53536601
parent 8da2e0f37281873aa2e9c0ad91a76e3eb75cea65
Author: Martin Ashby <martin@ashbysoft.com>
Date:   Wed, 10 Dec 2025 21:24:06 +0000

Day 1 part 1

Diffstat:
A01.input | 4754+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
M01.lisp | 81+++++++++++++------------------------------------------------------------------
A01.sample.input | 11+++++++++++
3 files changed, 4778 insertions(+), 68 deletions(-)

diff --git a/01.input b/01.input @@ -0,0 +1,4753 @@ +R29 +R6 +L43 +L6 +R28 +L42 +L34 +L32 +L13 +L15 +R29 +L50 +R1 +L26 +L28 +L16 +L23 +R11 +L41 +L37 +R48 +R21 +L48 +L15 +L14 +L2 +L29 +L30 +R18 +L6 +R6 +R7 +R20 +L23 +L47 +L11 +L2 +R34 +L14 +L7 +L33 +R10 +R16 +L9 +R30 +L49 +R17 +R35 +L20 +R49 +L65 +R65 +R29 +R10 +R14 +L54 +L83 +L75 +L41 +R44 +L44 +R54 +R69 +R43 +R98 +R36 +R43 +L43 +R50 +R50 +L85 +R61 +R24 +R97 +L97 +R96 +R72 +R32 +R45 +L45 +R84 +L84 +R37 +R63 +L28 +R13 +L28 +L39 +L18 +L21 +R50 +L69 +L49 +L21 +R36 +L26 +L21 +R5 +L84 +R41 +R304 +R29 +L68 +L6 +R33 +R89 +L14 +R718 +L54 +R74 +L14 +L32 +L757 +R62 +R16 +L21 +L1 +L99 +L63 +L829 +R24 +L32 +L16 +R95 +L79 +R14 +R491 +R7 +L153 +R3 +L62 +L247 +R43 +L770 +R49 +R30 +R236 +R770 +L51 +R41 +R99 +L90 +R90 +R36 +R64 +L95 +R95 +R25 +R99 +L94 +R736 +L314 +R48 +R11 +L6 +L5 +R26 +L26 +L77 +R77 +L180 +L20 +L92 +L8 +L33 +R33 +L10 +R10 +R79 +R73 +L24 +L70 +L29 +L69 +L28 +R68 +R45 +L12 +R66 +L26 +R5 +L478 +L21 +L679 +L70 +L99 +L30 +L1 +R60 +R38 +L30 +R32 +L35 +L12 +L19 +L789 +L45 +R33 +L802 +L75 +L10 +L21 +L4 +R44 +R55 +L940 +L56 +L9 +L28 +R77 +L20 +R10 +R402 +R233 +L889 +R60 +L92 +R5 +L84 +L78 +L11 +L86 +L214 +R59 +R41 +R22 +L22 +L28 +L12 +R24 +R52 +L41 +L94 +L32 +L69 +R34 +R66 +L49 +L51 +R9 +R91 +L68 +R73 +L81 +R694 +R15 +R9 +L9 +L33 +R86 +R190 +R320 +L73 +R12 +R14 +L95 +L545 +R36 +L27 +R94 +R347 +R56 +L51 +L64 +R46 +L73 +R44 +L17 +L83 +R2 +L65 +R46 +L74 +R35 +L91 +R36 +L6 +L780 +R34 +R74 +L43 +L85 +R82 +R18 +L46 +L26 +L41 +L89 +L16 +L39 +R31 +R8 +L682 +R359 +R138 +R63 +L692 +L12 +R722 +R38 +L17 +L99 +R86 +L886 +L69 +R69 +L61 +R33 +R28 +R29 +R71 +L937 +L967 +L96 +L84 +R95 +R89 +L49 +R965 +R84 +R194 +L11 +L12 +R29 +R850 +R50 +R3 +L703 +L74 +L26 +R35 +L135 +R8 +L71 +R88 +R31 +R402 +R42 +R67 +R81 +L48 +R84 +R37 +R390 +R89 +L77 +R47 +L85 +L35 +L7 +R31 +R26 +R84 +R16 +L603 +R17 +R545 +R76 +L82 +L16 +L16 +R612 +R67 +R793 +R15 +L8 +L46 +L27 +L75 +R94 +L15 +L62 +L69 +R37 +L278 +R41 +R2 +L21 +L81 +R13 +R97 +R43 +L135 +R98 +R27 +L26 +R83 +L94 +R940 +L340 +R39 +R55 +L58 +R58 +R10 +R21 +R78 +L328 +R119 +R30 +R66 +L740 +L84 +R90 +L62 +L92 +L8 +L38 +R138 +R375 +R33 +L8 +L40 +R11 +R25 +L28 +L68 +R17 +R52 +R75 +L444 +L92 +L337 +R29 +R386 +R14 +L48 +L52 +R44 +L22 +L22 +L531 +R52 +R35 +R58 +R48 +L62 +R59 +L75 +R17 +L1 +L7 +R36 +L11 +R71 +R11 +L99 +L554 +R76 +R51 +L18 +R44 +L94 +L6 +R639 +R37 +R72 +L84 +R12 +R72 +L64 +R16 +R35 +R765 +L92 +R92 +R24 +R14 +L38 +R523 +R84 +L698 +R591 +R74 +L649 +R75 +R82 +R80 +R538 +L32 +R84 +R79 +L328 +R823 +R974 +R96 +R668 +R55 +R29 +R52 +R45 +L45 +L64 +L36 +L696 +R96 +R65 +R56 +L94 +L27 +R26 +R74 +R77 +R823 +L32 +L3 +L843 +R78 +L54 +R75 +L81 +L88 +R948 +L17 +R44 +R73 +R87 +L6 +R93 +L71 +R47 +L12 +R963 +L51 +R83 +L90 +R14 +L57 +R19 +R92 +R189 +R93 +L93 +R75 +R25 +R31 +R524 +L984 +L71 +R68 +R85 +L53 +R209 +R86 +R5 +R21 +L27 +R97 +R248 +L58 +R65 +L32 +R84 +R76 +R26 +L10 +L290 +L68 +R68 +R8 +R79 +R23 +L410 +L993 +R46 +R715 +R32 +R18 +L10 +L749 +R241 +R286 +R14 +R63 +R97 +L60 +R92 +L392 +L91 +R91 +L1 +R11 +L49 +L61 +L36 +L90 +L74 +L38 +R38 +L8 +L69 +L89 +R35 +R31 +R97 +R63 +R40 +R11 +R93 +R980 +R64 +L548 +L62 +R62 +R80 +R78 +L39 +L19 +R996 +R862 +L536 +L64 +R13 +L51 +L50 +L70 +L59 +L920 +L321 +R81 +R19 +L85 +L10 +L27 +L54 +R76 +R84 +R79 +R46 +R376 +L17 +R94 +L79 +R317 +L9 +L91 +L80 +L920 +L52 +L48 +L28 +L72 +L20 +L745 +L24 +R89 +L37 +R137 +R161 +L361 +L22 +L848 +R70 +R73 +L79 +L94 +L37 +L583 +L80 +L537 +R637 +L6 +L94 +R698 +L976 +R78 +R4 +R773 +L77 +R12 +R43 +R18 +L73 +R85 +L756 +L44 +R21 +R82 +L623 +R3 +R90 +L4 +L13 +L91 +L350 +L54 +L46 +L70 +R27 +L62 +R501 +L32 +L64 +R3 +R68 +L71 +L769 +R31 +L62 +R812 +R57 +L69 +L62 +R43 +R558 +R61 +L177 +L83 +R760 +L36 +L66 +R50 +R53 +L35 +L569 +R39 +L36 +R57 +L57 +L55 +L31 +R32 +R54 +R99 +R89 +L88 +R45 +R55 +R35 +L90 +R716 +L14 +L647 +R74 +L379 +L27 +L85 +L333 +R650 +L1 +L99 +L80 +L44 +R54 +R70 +L2 +R2 +L8 +R964 +L62 +R106 +L71 +R22 +R20 +L63 +L49 +R47 +L6 +R59 +L27 +R68 +R32 +L89 +L13 +L79 +R41 +L92 +R51 +R49 +R11 +R689 +L12 +R12 +L71 +L61 +L875 +L81 +L12 +R908 +L8 +L38 +R38 +R56 +R62 +R933 +R49 +L2 +L326 +R28 +R773 +L71 +R282 +L165 +L22 +L97 +L788 +L50 +R814 +L10 +R34 +L88 +R95 +R743 +R577 +R92 +L71 +L48 +R44 +L44 +L3 +R3 +R71 +L690 +R19 +L8 +R31 +L38 +L49 +L558 +L46 +R988 +L1 +R22 +L41 +L89 +L635 +L80 +R88 +L58 +R56 +L68 +R86 +R76 +R24 +L98 +R82 +R270 +R227 +R79 +L65 +R16 +L11 +L4 +R17 +R82 +L95 +R31 +R92 +R97 +R80 +L13 +L92 +R65 +L60 +R51 +R49 +R38 +L38 +L84 +L716 +R21 +L721 +R59 +R741 +R59 +L75 +R8 +L192 +R599 +L99 +R10 +R90 +L676 +R76 +L745 +L55 +L349 +L73 +L78 +L40 +R43 +R42 +L46 +R87 +R76 +R68 +L30 +R79 +R23 +R98 +L10 +R54 +R59 +L81 +L74 +R49 +R34 +L825 +R52 +R242 +R58 +L58 +R89 +R28 +L17 +L35 +R83 +L13 +R65 +L72 +R72 +L98 +R34 +L49 +R13 +L9 +R9 +R14 +L73 +L41 +L81 +R81 +L18 +R818 +L21 +R21 +R69 +L4 +L34 +L4 +R91 +R42 +L461 +R559 +L58 +L60 +R24 +R36 +L46 +R33 +R766 +L53 +L839 +R39 +R37 +L937 +R59 +R41 +L29 +L81 +L90 +R832 +L40 +R8 +R87 +L694 +R7 +R64 +R90 +R43 +L97 +L11 +R911 +L75 +R175 +R5 +L22 +L83 +L449 +R662 +L13 +L61 +L50 +R77 +L21 +R55 +L62 +R36 +R34 +R14 +L49 +R21 +L673 +R72 +L93 +R84 +R16 +L59 +L41 +L75 +L46 +R52 +R83 +R7 +L21 +L48 +L22 +R70 +L78 +R778 +R50 +R71 +L25 +R83 +R21 +R47 +L198 +L28 +R503 +L85 +R623 +R50 +R88 +L624 +L896 +R20 +R94 +L94 +R84 +R16 +R12 +R288 +L77 +R5 +R27 +L3 +L203 +R51 +L23 +L508 +L13 +L10 +R54 +L1 +R1 +R48 +L9 +R34 +L94 +R21 +L81 +R968 +R13 +R91 +L91 +R48 +L15 +R499 +L34 +L98 +R167 +L19 +R76 +L22 +R98 +L48 +R48 +R43 +L2 +L29 +R12 +R24 +R35 +R17 +R90 +L90 +R917 +R39 +L71 +L885 +R35 +L35 +R47 +L88 +L55 +L33 +L571 +L389 +R3 +R47 +R29 +L59 +L28 +R56 +L259 +R405 +R95 +L4 +R93 +L89 +R67 +L93 +L269 +L47 +L58 +R54 +L60 +R6 +L40 +R91 +L51 +L79 +R804 +R74 +L46 +R16 +L80 +L46 +L43 +L90 +R25 +L35 +R78 +L78 +R48 +L98 +R723 +R27 +R71 +R42 +R87 +L341 +L59 +R29 +R4 +R64 +R42 +R68 +L79 +L9 +R54 +L618 +L71 +R916 +L97 +L3 +R10 +L10 +L37 +L58 +L46 +R28 +L66 +L63 +R33 +R770 +L4 +R43 +L26 +R59 +R83 +R84 +R18 +L35 +R23 +R94 +L85 +L15 +R52 +R60 +L332 +L98 +L51 +L29 +L47 +R5 +L60 +L5 +R705 +R7 +R10 +L5 +L77 +L60 +R83 +R542 +L2 +R2 +R29 +R71 +R79 +R292 +L49 +R18 +L99 +R459 +L13 +R13 +L91 +L7 +L2 +L44 +R44 +L98 +L643 +L40 +L19 +L40 +L12 +R52 +R26 +R18 +L41 +L3 +R64 +L64 +R841 +L164 +L437 +R60 +L87 +L10 +R865 +R84 +L952 +L4 +R4 +L62 +R34 +L18 +R37 +R76 +L37 +L30 +L86 +R84 +R83 +R19 +L82 +R82 +R398 +R2 +R19 +R81 +R82 +R290 +R80 +L52 +L5 +L95 +L87 +L37 +R24 +L60 +R60 +L71 +L29 +L32 +R32 +R66 +L47 +L21 +R902 +L18 +L12 +R30 +L43 +L22 +R39 +L74 +R62 +R38 +L77 +L22 +L662 +R46 +R15 +L31 +L69 +R47 +L575 +R82 +L54 +L36 +L40 +R76 +R70 +R30 +L93 +L27 +R20 +L28 +R14 +L822 +L53 +L11 +L46 +L54 +R57 +L157 +R347 +R96 +L88 +R45 +R11 +L81 +L35 +L88 +R66 +R68 +R36 +L83 +L78 +L98 +L18 +R42 +L680 +R273 +L66 +R31 +R81 +L75 +L52 +R94 +L5 +L43 +R1 +R52 +L49 +L69 +R229 +L650 +L95 +L19 +L490 +R92 +R50 +R25 +L77 +L2 +R55 +L87 +R34 +R99 +R101 +R225 +L225 +R181 +R86 +L67 +L14 +L44 +R58 +L72 +R36 +L57 +R693 +L55 +R255 +R857 +L57 +L41 +L59 +L66 +L603 +R69 +L66 +L81 +L45 +L94 +R85 +L999 +R84 +R58 +R58 +L44 +R53 +L17 +L11 +L81 +L868 +L932 +L72 +R43 +R6 +L77 +L29 +L25 +L64 +R82 +L21 +L43 +L1 +R54 +R398 +L14 +R46 +R17 +R16 +L80 +R64 +L362 +L53 +L74 +R18 +L29 +R47 +R77 +R83 +R95 +R898 +R27 +R97 +L89 +L37 +L84 +L14 +L99 +L5 +R41 +L910 +R73 +R33 +L37 +L96 +R94 +R6 +L14 +R43 +R90 +R57 +R6 +R18 +R68 +R419 +R21 +L23 +L85 +L51 +L12 +L37 +L70 +R485 +L44 +R95 +R34 +R51 +L351 +R64 +L64 +R130 +L309 +L821 +R64 +R27 +R109 +R33 +L33 +R59 +R69 +L29 +L55 +L416 +L55 +R90 +L63 +R42 +L942 +R658 +R70 +L28 +R2 +L402 +L48 +R90 +R58 +L332 +L43 +L4 +L85 +R46 +L682 +R65 +R35 +L22 +L30 +L5 +R57 +L22 +R522 +R781 +R519 +L830 +L259 +L11 +L53 +L3 +L99 +L41 +R11 +L83 +R568 +L88 +L512 +L78 +L96 +L44 +R18 +R6 +R94 +R618 +L244 +L74 +L10 +R66 +R87 +R27 +L70 +L50 +L90 +L62 +L27 +L85 +R70 +R441 +L97 +R23 +R84 +R473 +L44 +L379 +L6 +L541 +L42 +L34 +R451 +L16 +R88 +L30 +L27 +L3 +L86 +L66 +R1 +L37 +R737 +L64 +L57 +L844 +R19 +L53 +L9 +R682 +L20 +R51 +L51 +L84 +L6 +R93 +R52 +R45 +L692 +R68 +L67 +R944 +R824 +R23 +R943 +R67 +L27 +L196 +R23 +R84 +L91 +L447 +L793 +L211 +R48 +L134 +L66 +L50 +L50 +L778 +L49 +L5 +R48 +L16 +R191 +R75 +R22 +R98 +R652 +R62 +R22 +L690 +R68 +L9 +L7 +R16 +L93 +R93 +R945 +R55 +L86 +R68 +L25 +L27 +L7 +L23 +L93 +L64 +L166 +L76 +R99 +L13 +L31 +R10 +L24 +L51 +R89 +R20 +R16 +L16 +R15 +R19 +R79 +R48 +L339 +L22 +L742 +R621 +R21 +L24 +L18 +R13 +R29 +R18 +L16 +L2 +L19 +L421 +L78 +L82 +L12 +R12 +R36 +R61 +L97 +R88 +L99 +R75 +R36 +L19 +L81 +R49 +R22 +L73 +L33 +R35 +L88 +L12 +R31 +R39 +L70 +L73 +L27 +R32 +R186 +R67 +L797 +L601 +R57 +L46 +R36 +L48 +R14 +L45 +L12 +L43 +L867 +L44 +L89 +R30 +R865 +R305 +R42 +L481 +R39 +R508 +L990 +L15 +R570 +L898 +L4 +R29 +R56 +R724 +R40 +L120 +L33 +R831 +L27 +R29 +L51 +L349 +L91 +L94 +R65 +R220 +R8 +L65 +R57 +L6 +L94 +L32 +L68 +R67 +R33 +R711 +R96 +L807 +R9 +R76 +R315 +L69 +L31 +R88 +L61 +R87 +R86 +R32 +L48 +R10 +L13 +R51 +L27 +L58 +L74 +L47 +R69 +L39 +R34 +L85 +R289 +L54 +L49 +L771 +R50 +R279 +R60 +L9 +R37 +L76 +L776 +L47 +R57 +R87 +R85 +R33 +R663 +L781 +L43 +R51 +R759 +L15 +R631 +L465 +R67 +L15 +L252 +L266 +R66 +L18 +R818 +R684 +L19 +R235 +L46 +L46 +L5 +R77 +R20 +L85 +L1 +L27 +R6 +L67 +R74 +L58 +R77 +L79 +L7 +R24 +R79 +L25 +R54 +L8 +R6 +L794 +R82 +L86 +L65 +L24 +R224 +R9 +R91 +L24 +R824 +L458 +R58 +L934 +L19 +L62 +L85 +L82 +L18 +L68 +L353 +R35 +L14 +R35 +L35 +R62 +R4 +R59 +L15 +R42 +R48 +R49 +R51 +R86 +R55 +L85 +L90 +L83 +L89 +L451 +L23 +L68 +L52 +L78 +R48 +R746 +L16 +R604 +R658 +L62 +R40 +R223 +L86 +R23 +R20 +L56 +L683 +L81 +R227 +R71 +L279 +L33 +L80 +R12 +R82 +R880 +R20 +R17 +R83 +R821 +R79 +R59 +R72 +L42 +L93 +L96 +R378 +L78 +R89 +L89 +R65 +L465 +L80 +L20 +L811 +R57 +L67 +R21 +L62 +R390 +R70 +L57 +L41 +L7 +L93 +R74 +R93 +L70 +R3 +R54 +R96 +R50 +L47 +L53 +L124 +L45 +L65 +R34 +L25 +R31 +R994 +R34 +L20 +L514 +L198 +R98 +L50 +R50 +L502 +R97 +R91 +L47 +L25 +L14 +R57 +R43 +L42 +L40 +R282 +R26 +L26 +R64 +L64 +L57 +L35 +R14 +L22 +R60 +R813 +L57 +R53 +R187 +R632 +R4 +L86 +L67 +L63 +L41 +L11 +R976 +R44 +R141 +L85 +R34 +L34 +R15 +L9 +R88 +L57 +R92 +R171 +L54 +L34 +R364 +L23 +L19 +L16 +L46 +R40 +R4 +R52 +L68 +R78 +L24 +R46 +R4 +L4 +R311 +R89 +R46 +L646 +L66 +R2 +R5 +R78 +R45 +R704 +L57 +L77 +L34 +L95 +L42 +L95 +R32 +R60 +L74 +L26 +L60 +L814 +L71 +L15 +R68 +R68 +L57 +L79 +R975 +R99 +L31 +R66 +R91 +R39 +R521 +R40 +R155 +R332 +R11 +R8 +L40 +L33 +L38 +R48 +L71 +R61 +R67 +L26 +R21 +R67 +R38 +L56 +L44 +R23 +R677 +R11 +L6 +R440 +R6 +R72 +R66 +R43 +L66 +R37 +L76 +L27 +L50 +R50 +R75 +L97 +L26 +L89 +R37 +R45 +L29 +L16 +L12 +R85 +L90 +L183 +R10 +L10 +R76 +L93 +L783 +R40 +L231 +L78 +L229 +R98 +L85 +R63 +R48 +L26 +L74 +L80 +R106 +L52 +R475 +R25 +L813 +R93 +L78 +R30 +R68 +L36 +L44 +R82 +L81 +R52 +R26 +R94 +R11 +R96 +R66 +R12 +L42 +R27 +R35 +R74 +L625 +L96 +L55 +L31 +R35 +R73 +R46 +R587 +R94 +R19 +L19 +L46 +R393 +L39 +R91 +R44 +L99 +R20 +R77 +R17 +L82 +R454 +L85 +L133 +L57 +L863 +R8 +L39 +R15 +R21 +L155 +R80 +L485 +R63 +L50 +R79 +R971 +R405 +R42 +R59 +R994 +L202 +L10 +R42 +R391 +R801 +R82 +R76 +L52 +L64 +R444 +R90 +L97 +L756 +R38 +R1 +L84 +L82 +R82 +R70 +L852 +R19 +L6 +R75 +R25 +R57 +R13 +L83 +L18 +L2 +L698 +L67 +L33 +L308 +L946 +L46 +L28 +R28 +L803 +L91 +R94 +R28 +R22 +R50 +R91 +L73 +R20 +R723 +L40 +L21 +L76 +L52 +L72 +L364 +R64 +L987 +R87 +L20 +L60 +L20 +R78 +L353 +L25 +R85 +L73 +L12 +R70 +L470 +L26 +R26 +R96 +R53 +L49 +R439 +L14 +L14 +R1 +R96 +R992 +R29 +R71 +R468 +L93 +L19 +L26 +L25 +L91 +R86 +R118 +R82 +L17 +R450 +R7 +L440 +L628 +L52 +R80 +L25 +L33 +L42 +L559 +L929 +L67 +R97 +L54 +L88 +R83 +L14 +R80 +R851 +R41 +R58 +L399 +R625 +L97 +R7 +R65 +R75 +L675 +L75 +R75 +R372 +L74 +L68 +L30 +L84 +R84 +L79 +L921 +L91 +L553 +L41 +R85 +L42 +R71 +R71 +R54 +R699 +R96 +L41 +L8 +R12 +L34 +L90 +L93 +L53 +L38 +L42 +R38 +L41 +L98 +R89 +R50 +R396 +R42 +R62 +L9 +L112 +R75 +L54 +L49 +R20 +R71 +R585 +L22 +R10 +L614 +R1 +L221 +L65 +L307 +L9 +L447 +L925 +L63 +L65 +R99 +L99 +L39 +R346 +L207 +R58 +L758 +R37 +R766 +L638 +L525 +L40 +L9 +L85 +L596 +L706 +L19 +L22 +L91 +L14 +L25 +L20 +L713 +R343 +L43 +R2 +L68 +R41 +R68 +R22 +L333 +R968 +R80 +L63 +L73 +R56 +L89 +R889 +L317 +R17 +L62 +R129 +R780 +L64 +L94 +R11 +R78 +R78 +L67 +L8 +R37 +L70 +R12 +R62 +L922 +L28 +R33 +R95 +R20 +R80 +L80 +L40 +R69 +L49 +L46 +R61 +L15 +R20 +L20 +L81 +R81 +R89 +R11 +L65 +L75 +L50 +L10 +L78 +R78 +R38 +R94 +L732 +R914 +R86 +L79 +L21 +L11 +R107 +R704 +R54 +R46 +L669 +L79 +R130 +L82 +L28 +R628 +L63 +L18 +L19 +R26 +R74 +L13 +R13 +L65 +R9 +R756 +L33 +L67 +L178 +R298 +L914 +L91 +L915 +R25 +L31 +R20 +R51 +R517 +L82 +L16 +R85 +R31 +R35 +L35 +R91 +L43 +L67 +L81 +R888 +L5 +L18 +L76 +L757 +L32 +R99 +R92 +R9 +R489 +L89 +L20 +R120 +R54 +L77 +L41 +L39 +L97 +L64 +L6 +L30 +L27 +L47 +L26 +L867 +R67 +R123 +L23 +R77 +R980 +R69 +L94 +L84 +L48 +R446 +L19 +R24 +L51 +R13 +R187 +R555 +R545 +R97 +L63 +L639 +R105 +L95 +L45 +R40 +R99 +L16 +R17 +R538 +R53 +L123 +L873 +L95 +L46 +R46 +R7 +R622 +L348 +R33 +L76 +L38 +R82 +R829 +L34 +L29 +L48 +L453 +L25 +R78 +R986 +R14 +R17 +R13 +L55 +R625 +L8 +L92 +L23 +R23 +L56 +R56 +L53 +R732 +L10 +L4 +R28 +L93 +R60 +L60 +R82 +R14 +R98 +R813 +L380 +L1 +L426 +L80 +R28 +L48 +R47 +L49 +R2 +L69 +L31 +R897 +R47 +L7 +L37 +L413 +R30 +L65 +R55 +R457 +R83 +L590 +R16 +R96 +L99 +R92 +L11 +L51 +R541 +R59 +R664 +R16 +R3 +R742 +L70 +L95 +R238 +L598 +R743 +R57 +L83 +L3 +R86 +L35 +R35 +L89 +R98 +L9 +L27 +L474 +R7 +R94 +R13 +L75 +R27 +L28 +L17 +L17 +R56 +L4 +R8 +R76 +R61 +R1 +L1 +R20 +R80 +L15 +R49 +L67 +R33 +L4 +R4 +L9 +R9 +R252 +L52 +R83 +L83 +R598 +L98 +L89 +L256 +R90 +R72 +R92 +L9 +R74 +L396 +L84 +L86 +R230 +L99 +L47 +R8 +L78 +L6 +R38 +R46 +L39 +R98 +R66 +L25 +L31 +R26 +L995 +L11 +L85 +L123 +L32 +R954 +R7 +R25 +L779 +L71 +L498 +L87 +R93 +R467 +L81 +R6 +L895 +R281 +L634 +L21 +R184 +L79 +R305 +L758 +R736 +L46 +L7 +L673 +L3 +L77 +L98 +R36 +R85 +R20 +R5 +L28 +L18 +L47 +R47 +L12 +R12 +L837 +L96 +R33 +R49 +L890 +R6 +L65 +R93 +L2 +L24 +L55 +L35 +R48 +L63 +R38 +R37 +R325 +R126 +L94 +R6 +L91 +R919 +R460 +L94 +L631 +L63 +R20 +R6 +R473 +L55 +L51 +L636 +R143 +L692 +R92 +R444 +L16 +R52 +L6 +R40 +L596 +R23 +L58 +L83 +R802 +R98 +L67 +L62 +L13 +R28 +R229 +R547 +R695 +L57 +R87 +L47 +R60 +R65 +L87 +L278 +R76 +R24 +L79 +R823 +L83 +R2 +L27 +L5 +L31 +R19 +L339 +L80 +R63 +R37 +R92 +R755 +L30 +L97 +L686 +R49 +L83 +R84 +R16 +L27 +L58 +L24 +R9 +L48 +L716 +L13 +R30 +R47 +R30 +R13 +R43 +L34 +R748 +R134 +L25 +R54 +R37 +L60 +R22 +R38 +R69 +L75 +L81 +L13 +L3 +R22 +R96 +L68 +R15 +L62 +L65 +L835 +R36 +R64 +L20 +L80 +L70 +R70 +L22 +L878 +L38 +R38 +L63 +L13 +L158 +R34 +L43 +R43 +L29 +L244 +R73 +R952 +L52 +R14 +R35 +R53 +L2 +R50 +L538 +L59 +L53 +R40 +R38 +R22 +R396 +R66 +R38 +R764 +R36 +R19 +L496 +L23 +R33 +R65 +L989 +R699 +L89 +L34 +R59 +R53 +R80 +R59 +L36 +R41 +R73 +R79 +R70 +R27 +L90 +L62 +L38 +R27 +L16 +R830 +L90 +R479 +L14 +R81 +L30 +R831 +L98 +R819 +R81 +R89 +R41 +L14 +R82 +R702 +R60 +L60 +L1 +L7 +R8 +L88 +R788 +L999 +R20 +L24 +R80 +R23 +L58 +R58 +R43 +L143 +L680 +L45 +L51 +R88 +L44 +R71 +R960 +L99 +R336 +R6 +L891 +R14 +R34 +R4 +L3 +R217 +R78 +L302 +L329 +L264 +R835 +R34 +L53 +R5 +L99 +R9 +R386 +R494 +R24 +L77 +R42 +L382 +L634 +L84 +L36 +L64 +R86 +L93 +L626 +L343 +R96 +L20 +R65 +R33 +L98 +R68 +L67 +R8 +R91 +R43 +L46 +R303 +R2 +L2 +R26 +L90 +R57 +R307 +L17 +R717 +R731 +L31 +L206 +R6 +L284 +R84 +R92 +R8 +R1 +L1 +R188 +R89 +L55 +L22 +L98 +L2 +R93 +R77 +L52 +R48 +R5 +L71 +L80 +L97 +R40 +L345 +R82 +R27 +R3 +R59 +R11 +L48 +L352 +R23 +R209 +L930 +L102 +R34 +R70 +R96 +R15 +R50 +L78 +R59 +L46 +L73 +L27 +L28 +L272 +L35 +R16 +R19 +L78 +R278 +R76 +R22 +L98 +R91 +R24 +L307 +R92 +L29 +L20 +L71 +R87 +L438 +R534 +L63 +L778 +R16 +L838 +R664 +L84 +L221 +R8 +L367 +R630 +L33 +R34 +L61 +R30 +R48 +R52 +R12 +R58 +R30 +R64 +R732 +L50 +L21 +R47 +L372 +L75 +L959 +L66 +L848 +R629 +L81 +L792 +R92 +R4 +L4 +L64 +L99 +L37 +R51 +R749 +R854 +R146 +L89 +R10 +R48 +R11 +R620 +R226 +L624 +L81 +L21 +R26 +L96 +R93 +L58 +R63 +R19 +L510 +L7 +L68 +R83 +L25 +R86 +L306 +L22 +R67 +L45 +L86 +R614 +R31 +R268 +L3 +R86 +R290 +L83 +R87 +L90 +L741 +R9 +L90 +L44 +R27 +L275 +R7 +L7 +L76 +R76 +L78 +L71 +L51 +R15 +L43 +R62 +R66 +R25 +L3 +R78 +L13 +R77 +L64 +L65 +L16 +L39 +R4 +L14 +L56 +L81 +L33 +R39 +R56 +L95 +L77 +R28 +R19 +L174 +L58 +R50 +L88 +R4 +R21 +L72 +R401 +R13 +L99 +R39 +L607 +L698 +L84 +L723 +R94 +R39 +L57 +L39 +L98 +R266 +R98 +L46 +L547 +R63 +R32 +L90 +L10 +L86 +R76 +L64 +L434 +L92 +L70 +L39 +L92 +R1 +L77 +L39 +L95 +R911 +R5 +L803 +L19 +R29 +R118 +R90 +R880 +L65 +R678 +R87 +R11 +R89 +L51 +R51 +R12 +L364 +R652 +R245 +R55 +L1 +L72 +R142 +L34 +L757 +L78 +L333 +R33 +R70 +R30 +R42 +L342 +R96 +R85 +L81 +L455 +R39 +L18 +R98 +R21 +R49 +L34 +R25 +R75 +R64 +R71 +R89 +R76 +R5 +R30 +R65 +R90 +R33 +L23 +R9 +R22 +R536 +R669 +R64 +L22 +R53 +L66 +L65 +R88 +R12 +L49 +R11 +R16 +L989 +R11 +L89 +R41 +R73 +R75 +L476 +R731 +L455 +R1 +L51 +R50 +L61 +R86 +L29 +R804 +R45 +L45 +R695 +R55 +L66 +L93 +L291 +R71 +L40 +L131 +R16 +L4 +L894 +L61 +R80 +R63 +R431 +R169 +R68 +R46 +R86 +L66 +L34 +L46 +R46 +R15 +L15 +R9 +L30 +L79 +R49 +R951 +R15 +L15 +L75 +L20 +L3 +L502 +L27 +R56 +R3 +R83 +L15 +R79 +R23 +R5 +L7 +R856 +R44 +R397 +L92 +R68 +L39 +L34 +R67 +R38 +R95 +R54 +L64 +L8 +L98 +R67 +R15 +L460 +L44 +R38 +R126 +R90 +R57 +L30 +R33 +L76 +R8 +L63 +L45 +R92 +R8 +R74 +R26 +R37 +L73 +L17 +L20 +L27 +L79 +L340 +R68 +R26 +R25 +R65 +L65 +R146 +R21 +L25 +L934 +L88 +L520 +R36 +L36 +L76 +L24 +R25 +L25 +L65 +L22 +L57 +L44 +R18 +R670 +L61 +R61 +L49 +L65 +L86 +L46 +L22 +R6 +R162 +R497 +L46 +L51 +L95 +R55 +R40 +R796 +L4 +R36 +L28 +R18 +L18 +R43 +R29 +L72 +R42 +R358 +R67 +L1 +R34 +L31 +R31 +R86 +R72 +L69 +R89 +R28 +L370 +L3 +R67 +R53 +L25 +R75 +L47 +L776 +L358 +L4 +L53 +L47 +L418 +L88 +L12 +L954 +R193 +R661 +R71 +R44 +R68 +L14 +L369 +R38 +L140 +R37 +L35 +L23 +R3 +R20 +L64 +R70 +L6 +L51 +R285 +R89 +L53 +R83 +L453 +L810 +L1 +R602 +L3 +L88 +R96 +L17 +L379 +R95 +R29 +R55 +L79 +L282 +R40 +R42 +R439 +L74 +L56 +R52 +R78 +L39 +R96 +R77 +L873 +L41 +L50 +R91 +L48 +L361 +R59 +R12 +L71 +L822 +L85 +R90 +R26 +R50 +R3 +R12 +L765 +L98 +L58 +R68 +R83 +L8 +L82 +R58 +L68 +L94 +L33 +L80 +L588 +R1 +L101 +R29 +R59 +L151 +L37 +L69 +R40 +R29 +L383 +L58 +L95 +L264 +L26 +R79 +L88 +R5 +L37 +L98 +R65 +L26 +L58 +L16 +R67 +R366 +R991 +R39 +R37 +R34 +L91 +L143 +R58 +R46 +R96 +L833 +R820 +L733 +R46 +L142 +L683 +R25 +L86 +L56 +R65 +R83 +R27 +L16 +L1 +L16 +R3 +R36 +R361 +R42 +L52 +L90 +L93 +R49 +R44 +R91 +L91 +R65 +L65 +L577 +L953 +L754 +R98 +L83 +L577 +L54 +L686 +L921 +R7 +L31 +R81 +R930 +L52 +L14 +L714 +L99 +L401 +R64 +L359 +L18 +L79 +L16 +R8 +L33 +L67 +R11 +R4 +L649 +L392 +R73 +L254 +R85 +L78 +R52 +L67 +R33 +R99 +R83 +L33 +R833 +L43 +L94 +L70 +R7 +R548 +R53 +L4 +R12 +L12 +R458 +R45 +L97 +R95 +R2 +L36 +R36 +L80 +R516 +R97 +R23 +L43 +R58 +R257 +R19 +L79 +L63 +R95 +L34 +L17 +L7 +L81 +L61 +R87 +R13 +R65 +R72 +R5 +R95 +L74 +R768 +R3 +L13 +L50 +R81 +R96 +R51 +R1 +L82 +L18 +L1 +R952 +R2 +R964 +L13 +R96 +L93 +R28 +R79 +L975 +L10 +R571 +L40 +L33 +L410 +R501 +L53 +L86 +R4 +R17 +R98 +L47 +R94 +L45 +L3 +R3 +R9 +L53 +L56 +R454 +L32 +R78 +R68 +R927 +L595 +R186 +R219 +R85 +L690 +R52 +L49 +R97 +L40 +R40 +R61 +R339 +L54 +R54 +L25 +R120 +R5 +R79 +R21 +R52 +L63 +R55 +R94 +L838 +R84 +L67 +L37 +L45 +L756 +L6 +L15 +L58 +L39 +R39 +L52 +L48 +R59 +R84 +R57 +L601 +R446 +L22 +R27 +R50 +L83 +L17 +L43 +L30 +R11 +R9 +R28 +L10 +R16 +L994 +L87 +R509 +L39 +R68 +R24 +R326 +L788 +L84 +L662 +R80 +R67 +R231 +L32 +R47 +L75 +L5 +R34 +R14 +L24 +L25 +L14 +R65 +R34 +L678 +L673 +L92 +R54 +R95 +L64 +R59 +L77 +R34 +L16 +R42 +L533 +R53 +L659 +L96 +L59 +R63 +R96 +R819 +R81 +L35 +R93 +L58 +R54 +R43 +R3 +L1 +L70 +L60 +L1 +L97 +L71 +R24 +R68 +R48 +L14 +R74 +R51 +R49 +R27 +L18 +R59 +L68 +R133 +L36 +L97 +L35 +L30 +R54 +L38 +R67 +L46 +L61 +L740 +L55 +R915 +R551 +R18 +R88 +R12 +R77 +R23 +L47 +L45 +R15 +L144 +R43 +L85 +R48 +L85 +L67 +L33 +L70 +L99 +L45 +L5 +L70 +R39 +L50 +L98 +R329 +L67 +R36 +R47 +L47 +L98 +L437 +R63 +R86 +R86 +L55 +L45 +R74 +L56 +L6 +L6 +L97 +R715 +L24 +L12 +R73 +L59 +L2 +L7 +L93 +R53 +R47 +L499 +L3 +L77 +R27 +L3 +L12 +L33 +R52 +R30 +R18 +L39 +R4 +L665 +R56 +L77 +L90 +R711 +L77 +L65 +R547 +R895 +L41 +L59 +R42 +R32 +R726 +R27 +L564 +R65 +R94 +L297 +L25 +L10 +L89 +R99 +R1 +R99 +L58 +L71 +R95 +L66 +R29 +R72 +L1 +R19 +L994 +R604 +R71 +L72 +L11 +R21 +L83 +R954 +L9 +L541 +L59 +R58 +L66 +L92 +R67 +L67 +L11 +R70 +L268 +R63 +R59 +L74 +L39 +L66 +R66 +L567 +L33 +L698 +R437 +L894 +L645 +L6 +L28 +L66 +L9 +R44 +L603 +L32 +R69 +L69 +R70 +L970 +L59 +L41 +R92 +L8 +L77 +L7 +L29 +L271 +L88 +L48 +R12 +L99 +L77 +L32 +L68 +R9 +L9 +L69 +R48 +L476 +R897 +L88 +L49 +R40 +R897 +L355 +R655 +L11 +L16 +L73 +L92 +L8 +L88 +R88 +R28 +L82 +R54 +L69 +R69 +R94 +R43 +R88 +L117 +L8 +L7 +R81 +L86 +R24 +L782 +L79 +R88 +L918 +L21 +R356 +L56 +R96 +R98 +R706 +R81 +L81 +R19 +L519 +L724 +R97 +R27 +L20 +R56 +L9 +R454 +R19 +L70 +R64 +L94 +R37 +R63 +R69 +L625 +R56 +R19 +R481 +L52 +R52 +R42 +R1 +R90 +R67 +R35 +R612 +L747 +L50 +R50 +L17 +L83 +L71 +L29 +L38 +L71 +R9 +L69 +L177 +R48 +L2 +L10 +L26 +R36 +L74 +L26 +L17 +R43 +L726 +L734 +R37 +L3 +R45 +L88 +R76 +R67 +R36 +R37 +R84 +L78 +R21 +R34 +R66 +R81 +L75 +L606 +L466 +R21 +R35 +L90 +L94 +R94 +R5 +R901 +L6 +L414 +R70 +L92 +L12 +L53 +R205 +R896 +R59 +L60 +R1 +R232 +L932 +R454 +R2 +L56 +R943 +L1 +R594 +R64 +R3 +R363 +L34 +L32 +R22 +R97 +L19 +R42 +L42 +L17 +L49 +R462 +L1 +L716 +L79 +R12 +L24 +R12 +L398 +R898 +R3 +R97 +R57 +L73 +R52 +R43 +R6 +R15 +L70 +R68 +R35 +R41 +R26 +L57 +L44 +R93 +R8 +R95 +R5 +R57 +L14 +L29 +L84 +L35 +L937 +R92 +L20 +L75 +L55 +R74 +R26 +L18 +R18 +R5 +R60 +L65 +L142 +L23 +R684 +L19 +R34 +L34 +R65 +L467 +L98 +R48 +L35 +L150 +L74 +R11 +R74 +L61 +R9 +R378 +R41 +L44 +L85 +L8 +L20 +L96 +R12 +R61 +L99 +R37 +R32 +R27 +L33 +R75 +L97 +L63 +L353 +L78 +L44 +L14 +R549 +R53 +R24 +L77 +R84 +L84 +R31 +R14 +L57 +L88 +L53 +L47 +L754 +L46 +L9 +L3 +L601 +L87 +L556 +L33 +L411 +L11 +L89 +R276 +L276 +R94 +R354 +L47 +L82 +R84 +L76 +R28 +R609 +R39 +R510 +L13 +L76 +L80 +L993 +R725 +R81 +L32 +L25 +R78 +L78 +L709 +L97 +L85 +L75 +L279 +L42 +R50 +R7 +R30 +R481 +L81 +R39 +L85 +L54 +L55 +R55 +L73 +L38 +L389 +L899 +L1 +L515 +L85 +R711 +L72 +L11 +L72 +L59 +R94 +R9 +R88 +L88 +L90 +R25 +R15 +R50 +R84 +R93 +L4 +L63 +L10 +R424 +R968 +R31 +L23 +L29 +R666 +R32 +R3 +L72 +L59 +R59 +L19 +L335 +L89 +L77 +L42 +R62 +L9 +R93 +R66 +R24 +R31 +L5 +R47 +R14 +R23 +R16 +L513 +R88 +L75 +R14 +R94 +L68 +L56 +R16 +L853 +L17 +L80 +L67 +L24 +R89 +L58 +R310 +R59 +L135 +R41 +R35 +R560 +R40 +R29 +L51 +R404 +R28 +R15 +L25 +L946 +L54 +R59 +L51 +R226 +R40 +L537 +R51 +R34 +R20 +R58 +L36 +L22 +R58 +L52 +R552 +R41 +L632 +R81 +R10 +R42 +L27 +R13 +R69 +R50 +L47 +R48 +L70 +R85 +L5 +R42 +L44 +L56 +R47 +R53 +L8 +L85 +L84 +L96 +L227 +R347 +R58 +L5 +L62 +L56 +L82 +L663 +R20 +R943 +R45 +R215 +R40 +L67 +R38 +L506 +R37 +L2 +L10 +L59 +R819 +L10 +L91 +L14 +L992 +L25 +L424 +L970 +R76 +R43 +L83 +R12 +L72 +L774 +L39 +R13 +R42 +R4 +R79 +R521 +L46 +L95 +R54 +L159 +R67 +R33 +L181 +R97 +R584 +L20 +R25 +R33 +R62 +R78 +L730 +L448 +R43 +L47 +R204 +L7 +R79 +R39 +L12 +R1 +L18 +L82 +R74 +R33 +L45 +R45 +L886 +L75 +R1 +R57 +L4 +L51 +R451 +R53 +L54 +R1 +R19 +R81 +L503 +L70 +R44 +R3 +L29 +L42 +R97 +L11 +R56 +R55 +R50 +L66 +L84 +R31 +L31 +R822 +L28 +R436 +R70 +R71 +L59 +R30 +R56 +R2 +R6 +L6 +R32 +L19 +R187 +R989 +R11 +L1 +L73 +R31 +R453 +R60 +L92 +R64 +R63 +L5 +L88 +L12 +L495 +L5 +R10 +L510 +R76 +L489 +L87 +R80 +L80 +L16 +L84 +L21 +R48 +L1 +L25 +L3 +L15 +L83 +L620 +R420 +R92 +R18 +R60 +R29 +L812 +L50 +L56 +R70 +R49 +L3 +L97 +R59 +L40 +L763 +R87 +L95 +R52 +L77 +R271 +L94 +L52 +R70 +R50 +R32 +L46 +R3 +L57 +R14 +R35 +L49 +R58 +R158 +R18 +L38 +L96 +R73 +R70 +L43 +R881 +L250 +R37 +L16 +L79 +R27 +R63 +R830 +R64 +L50 +R93 +R7 +R94 +L1 +L63 +R14 +R6 +R38 +R303 +L26 +L972 +R37 +R17 +R46 +L33 +R33 +L21 +R413 +L92 +R95 +L95 +L83 +R37 +L76 +L78 +L66 +L734 +R74 +R615 +L58 +L94 +R84 +L47 +L630 +L99 +L45 +R22 +R78 +L963 +L37 +R56 +R44 +L5 +L858 +R63 +L76 +L24 +R82 +L96 +R82 +L25 +R771 +R86 +L54 +L46 +R73 +R27 +L23 +L67 +R61 +R29 +R132 +R608 +R92 +L22 +L10 +R79 +L79 +L6 +R706 +L49 +R46 +L1 +R4 +L7 +R33 +L8 +R85 +L821 +R6 +L64 +L974 +L16 +R14 +L48 +L50 +L28 +L72 +L50 +L76 +R3 +R413 +L40 +L61 +L43 +R4 +L68 +L7 +R62 +R31 +R1 +L19 +L63 +R25 +L90 +L92 +L73 +L5 +R31 +R26 +L97 +R38 +L73 +L4 +L13 +L10 +R83 +L2 +R19 +L27 +L70 +L96 +R20 +L27 +R91 +R91 +L37 +L50 +L95 +R58 +R42 +L96 +R51 +R31 +L86 +R41 +R79 +L76 +L83 +R39 +R45 +R46 +R8 +L50 +L40 +R31 +R3 +L6 +L33 +R25 +R7 +R30 +L10 +R48 +L44 +R15 +L49 +L34 +L44 +R3 +R32 +R16 +L28 +L50 +L19 +R42 +R49 +R27 +L40 +L20 +R3 +L11 +L35 +R11 +R44 +L29 +R20 +L16 +R50 +L14 +L17 +L27 +L3 +R19 +R24 +R42 +R45 +L2 +R27 +L41 +L46 +R16 +R30 +R2 +\ No newline at end of file diff --git a/01.lisp b/01.lisp @@ -1,67 +1,12 @@ -(defvar *db* nil) - -(defun add-record (cd) - (push cd *db*)) - -(defun make-cd (title artist rating ripped) - (list :title title :artist artist :rating rating :ripped ripped)) - -(defun dump-db () - (dolist (cd *db*) - (format t "~{~a:~10t~a~%~}~%" cd))) - -(defun prompt-read (prompt) - (format *query-io* "~a: " prompt) - (force-output *query-io*) - (read-line *query-io*)) - -(defun prompt-for-cd () - (make-cd - (prompt-read "Title") - (prompt-read "Artist") - (or (parse-integer (prompt-read "Rating") :junk-allowed t) 0) - (y-or-n-p "Ripped [y/n]: "))) - -(defun add-cds () - (loop (add-record (prompt-for-cd)) - (if (not (y-or-n-p "Another? [y/n]: ")) (return)))) - -(defun save-db (filename) - (with-open-file (out filename :direction :output :if-exists :supersede) - (with-standard-io-syntax - (print *db* out)))) - -(defun load-db (filename) - (with-open-file (in filename) - (with-standard-io-syntax - (setf *db* (read in))))) - -(defun select (selector) - (remove-if-not - selector - *db*)) - -(defun artist-selector (artist) - #'(lambda (cd) (equal (getf cd :artist) artist))) - -(defun update (selector-fn &key title artist rating (ripped nil ripped-p)) - (setf *db* - (mapcar - #'(lambda (row) - (when (funcall selector-fn row) - (if title (setf (getf row :title) title)) - (if artist (setf (getf row :artist) artist)) - (if rating (setf (getf row :rating) rating)) - (if ripped-p (setf (getf row :ripped) ripped))) - row) *db*))) - - -(defun make-comparison-expr (field value) - `(equal (getf cd ,field) ,value)) - -(defun make-comparisons-list (fields) - (loop while fields - collecting (make-comparison-expr (pop fields) (pop fields)))) - -(defmacro where (&rest clauses) - `#'(lambda (cd) (and ,@(make-comparisons-list clauses)))) -\ No newline at end of file +(defun day1 (input-file) + (with-open-file (s input-file) + (let ((dial 50) + (zeroes 0)) + (do ((line (read-line s nil) (read-line s nil))) + ((equal line nil) zeroes) + (let* ((n (parse-integer (subseq line 1))) + (is-r (equal "R" (subseq line 0 1))) + (op (if is-r #'+ #'-))) + (setf dial (mod (funcall op dial n) 100)) + (if (equal 0 dial) + (setf zeroes (1+ zeroes)))))))) +\ No newline at end of file diff --git a/01.sample.input b/01.sample.input @@ -0,0 +1,10 @@ +L68 +L30 +R48 +L5 +R60 +L55 +L1 +L99 +R14 +L82 +\ No newline at end of file