commit d0ff801e7df4f7f53675a85e4a389063f61f206a Author: Ryan Date: Sun Dec 7 22:19:45 2025 -0500 Init diff --git a/day01/run.pl b/day01/run.pl new file mode 100755 index 0000000..3362474 --- /dev/null +++ b/day01/run.pl @@ -0,0 +1,4802 @@ +#!/usr/bin/perl +use strict; + +my @arry = (50..99, 0..49); +my $zeros = 0; +my $part2 = 0; +while(my $line=) { + my($dir,$num)=$line=~/^(.)(\d+)/; + + if($dir eq 'L') { + for(my $i=0; $i<$num; $i++) { + my $t = pop @arry; + unshift @arry, $t; + $part2++ if($arry[0] == 0); + } + } elsif($dir eq 'R') { + for(my $i=0; $i<$num; $i++) { + my $t = shift @arry; + push @arry, $t; + $part2++ if($arry[0] == 0); + } + } else { + die; + } + print "Currently pointed at $arry[0]\n"; + if($arry[0] == 0) { + $zeros++; + } +} + +print "Pointed to zero $zeros times\n"; +print "Part 2 is $part2\n"; + +__DATA__ +R6 +R18 +L39 +L36 +L11 +L24 +R3 +L47 +L11 +R5 +L49 +L12 +L7 +R39 +L9 +R50 +R4 +L30 +L19 +L44 +R43 +R16 +L40 +L19 +L3 +R27 +R10 +R5 +R7 +R41 +R16 +L12 +R27 +R22 +R4 +R28 +R46 +L42 +R29 +R17 +L31 +L12 +R34 +R43 +R32 +L16 +R44 +L37 +R31 +L21 +R74 +L56 +L47 +L97 +L43 +L45 +L12 +R48 +R10 +L58 +L70 +L30 +R45 +L45 +L10 +L18 +L72 +R14 +R97 +L55 +L56 +L99 +L5 +L73 +L36 +R13 +L75 +L25 +L13 +L87 +R59 +R41 +R19 +R4 +R58 +L81 +L97 +L3 +L79 +R26 +L39 +R92 +L13 +L30 +R80 +L17 +R4 +L24 +L66 +R37 +L33 +L38 +R90 +R78 +R32 +R154 +L54 +L11 +L89 +R91 +L829 +L44 +L18 +L759 +R42 +L83 +R93 +R349 +R58 +R859 +L94 +L65 +R1 +L1 +R760 +L68 +L33 +L59 +L97 +L403 +L32 +L868 +L59 +R10 +L13 +L30 +L31 +L90 +R327 +R58 +L88 +L84 +R13 +L32 +L81 +L78 +L22 +L91 +R235 +L87 +R67 +L24 +L4 +R4 +L45 +R88 +L69 +L391 +R87 +L604 +L562 +L204 +L87 +L48 +L79 +L10 +L76 +R89 +R93 +L47 +L35 +R34 +L109 +L461 +L53 +R404 +L15 +R953 +R47 +R47 +L33 +R28 +R22 +R39 +R69 +L872 +R28 +R72 +R950 +R250 +L893 +R51 +L358 +R631 +R327 +R21 +R63 +R34 +L76 +R96 +L63 +R67 +L92 +R46 +R46 +R88 +R95 +L96 +R56 +R57 +R187 +R52 +L795 +L44 +R68 +L12 +R96 +R81 +L33 +R83 +L19 +R39 +L41 +L36 +L924 +R89 +L6 +R26 +L11 +L377 +R77 +R59 +L67 +L88 +L83 +L38 +L843 +L140 +L297 +L34 +L90 +R60 +L2 +L52 +R15 +R54 +L45 +L81 +R45 +L73 +L9 +R2 +L127 +L386 +L61 +R81 +R82 +R18 +L24 +R24 +L44 +R644 +R39 +L65 +L74 +R80 +L80 +L62 +L38 +R598 +R52 +R561 +R31 +R1 +R502 +L63 +L9 +L52 +R79 +L5 +L92 +R598 +L1 +R63 +R12 +L38 +R80 +L73 +R91 +R56 +L24 +L90 +L90 +L56 +R31 +L66 +R4 +L33 +R70 +L96 +R59 +L205 +R5 +L89 +L77 +L44 +L985 +L44 +L450 +L11 +R36 +L48 +R58 +R54 +L18 +L810 +R70 +R22 +R168 +L32 +R70 +L70 +R33 +L13 +L56 +R631 +L27 +L94 +L74 +R54 +R63 +L17 +L10 +L790 +R13 +R53 +L442 +L24 +R55 +R45 +R78 +L69 +L9 +L175 +R30 +L86 +R631 +L17 +R87 +R79 +R51 +L19 +R19 +L9 +R9 +R9 +R33 +L41 +R499 +L57 +L33 +L37 +R73 +R48 +L27 +R62 +R371 +L79 +L59 +R44 +R298 +R85 +R824 +R66 +L79 +R70 +R29 +L96 +L68 +R89 +L54 +L470 +R78 +R39 +R4 +L555 +R634 +L68 +R42 +L74 +R87 +L39 +R52 +L55 +R80 +R75 +R1 +L1 +R62 +L49 +L17 +L96 +L21 +R130 +R91 +R92 +R76 +R32 +R69 +R731 +R4 +R89 +L82 +R73 +R16 +L44 +L56 +L280 +L96 +L412 +R988 +L28 +R928 +L435 +R55 +R844 +L90 +L50 +L224 +R47 +R53 +L23 +R617 +R43 +R72 +L77 +L32 +R412 +R288 +L46 +L53 +R99 +R76 +R59 +L35 +L239 +L55 +R494 +L16 +L624 +L14 +R54 +L45 +L42 +R87 +L62 +L404 +L26 +R86 +L80 +R479 +L15 +L778 +R52 +L552 +L44 +L56 +L1 +L81 +L18 +R98 +R54 +R9 +L61 +L72 +L728 +R82 +L99 +R96 +L974 +R95 +L18 +R18 +R78 +L3 +L76 +R1 +L24 +L76 +L223 +R54 +L94 +L85 +L98 +R62 +L16 +R30 +L55 +R25 +L17 +L99 +L784 +L778 +R88 +R83 +R7 +R59 +R15 +R29 +R58 +R39 +R221 +R79 +R82 +R18 +R58 +R42 +R5 +R95 +R33 +L33 +L81 +L99 +R54 +L74 +R976 +R12 +R160 +L216 +L615 +L17 +L798 +L288 +R49 +L63 +L65 +L602 +R67 +L59 +L24 +L17 +R30 +L56 +R31 +L5 +R111 +L158 +L53 +L664 +R64 +L53 +R79 +R743 +L671 +L98 +L70 +R70 +R19 +L89 +R670 +L83 +L57 +L44 +L45 +L71 +L63 +L37 +R96 +L82 +R40 +L86 +L405 +R76 +L39 +R56 +L277 +R2 +L550 +L31 +L544 +L563 +R51 +R769 +R91 +L72 +L635 +L896 +R12 +L97 +R956 +L385 +L87 +L94 +R94 +R55 +L90 +L65 +R79 +L79 +R83 +R517 +L227 +L81 +L109 +L8 +R30 +L5 +L93 +L1 +R94 +R59 +L26 +L72 +L61 +R77 +R67 +L29 +R85 +R95 +L98 +L97 +R20 +L32 +R591 +L275 +L38 +L18 +L2 +R32 +R82 +R40 +L69 +L9 +L16 +L6 +L46 +L12 +L42 +R59 +R59 +L18 +R890 +L89 +L27 +L55 +L979 +L40 +R230 +L30 +L3 +L79 +R82 +L29 +L719 +L52 +L41 +L59 +L80 +R81 +R549 +R64 +L61 +L794 +L959 +R80 +L154 +R25 +L79 +R84 +R94 +L50 +R17 +L48 +L11 +R189 +L1 +L5 +R28 +R31 +R96 +R804 +R909 +L431 +R22 +L68 +L32 +R907 +L7 +L713 +L67 +L69 +L535 +R73 +L3 +L24 +L77 +L96 +R14 +R1 +R96 +R87 +R13 +L16 +R42 +L26 +R38 +R62 +L298 +R98 +R19 +L446 +R80 +R62 +R82 +R12 +L14 +R31 +L99 +R73 +R424 +R76 +R76 +R276 +L54 +L698 +R20 +R15 +L11 +L138 +R28 +R586 +R39 +L39 +L31 +L69 +R65 +R56 +R79 +R86 +R71 +R32 +R11 +R31 +R69 +R97 +R284 +R19 +L44 +L756 +L49 +R49 +R208 +L97 +R389 +L725 +R748 +R47 +R20 +L90 +L8 +R33 +L25 +R9 +L58 +L51 +L68 +L28 +L41 +R37 +L51 +L49 +R14 +L14 +L569 +L86 +R55 +L73 +L33 +L36 +R53 +R89 +L11 +R8 +L94 +L3 +L8 +L52 +R27 +L67 +R689 +L89 +L290 +R30 +R60 +R85 +L85 +R86 +R14 +R45 +L49 +R4 +R29 +R9 +R441 +L685 +L746 +L18 +L37 +L47 +R54 +L58 +L242 +R27 +R67 +L22 +R1 +R27 +R21 +L43 +L78 +R40 +L14 +R74 +L3 +L53 +R75 +L19 +R82 +L82 +R38 +R93 +R94 +L14 +R88 +L99 +R65 +R35 +L88 +R12 +L4 +L20 +R25 +R13 +R62 +L39 +L62 +L13 +L606 +L227 +R47 +R47 +R53 +L31 +R58 +R73 +R91 +L16 +L73 +R47 +R51 +R21 +L721 +R90 +R27 +R24 +R19 +R24 +L16 +R32 +L208 +R13 +L222 +L332 +L51 +L35 +L29 +R949 +L684 +R99 +R38 +L38 +R662 +L45 +L49 +R732 +R29 +L83 +R51 +R59 +L821 +L735 +L49 +L49 +R75 +L336 +R966 +L350 +R43 +L95 +R77 +R69 +L515 +L98 +R56 +R106 +L101 +L60 +L42 +L3 +L94 +R437 +R63 +L84 +R84 +L54 +L46 +R93 +R7 +L581 +R181 +R854 +L686 +L88 +R33 +R87 +R83 +R48 +L231 +L63 +R63 +R7 +R93 +R885 +R15 +R47 +L70 +L54 +R1 +L93 +L31 +L90 +L110 +L7 +R27 +R73 +R365 +L58 +L65 +L525 +L10 +R30 +R9 +L429 +R90 +L39 +L28 +L33 +L3 +L597 +L69 +L108 +L54 +L63 +R98 +L5 +R215 +L282 +L32 +R946 +R45 +R48 +L39 +L154 +R484 +L29 +R442 +L11 +R80 +L12 +L68 +R168 +R20 +R98 +R78 +L96 +L27 +R23 +R80 +L376 +R598 +R88 +R26 +L89 +R294 +R85 +L102 +L82 +L18 +R44 +R41 +R56 +L91 +R50 +L60 +R60 +R471 +R529 +R60 +L60 +R66 +L62 +L346 +L94 +L64 +L57 +L2 +R97 +L73 +R235 +R96 +L15 +R619 +R14 +R80 +L67 +R73 +L45 +L55 +L37 +R37 +R4 +R96 +R790 +L13 +R23 +L43 +L57 +R77 +L77 +R87 +L787 +L2 +L598 +R59 +L24 +R65 +L644 +L47 +L51 +R586 +R34 +L21 +L45 +L24 +R33 +L5 +R84 +L731 +L69 +R52 +R48 +R30 +L48 +L582 +R16 +L310 +R94 +R10 +L19 +L91 +R4 +L14 +R510 +R11 +R71 +L482 +R47 +L47 +L10 +L56 +L24 +L74 +R64 +R80 +R87 +R16 +R229 +R94 +R29 +R25 +L5 +L55 +L1 +L536 +L63 +L6 +L933 +L66 +R18 +R56 +R31 +L28 +R28 +R70 +R30 +L83 +R183 +L378 +R878 +R93 +R50 +L8 +R60 +R705 +L25 +L33 +L42 +L99 +R62 +R37 +R911 +R50 +R94 +L55 +L106 +R52 +R40 +L86 +R87 +R437 +L49 +L35 +L13 +L88 +R45 +R46 +L62 +L68 +L55 +L67 +L94 +R19 +L3 +L25 +R45 +R80 +L67 +L806 +R76 +L86 +L27 +R55 +L76 +R31 +L45 +L10 +L45 +R312 +R88 +R93 +L2 +L91 +R827 +L27 +L291 +R33 +R78 +L42 +L78 +L786 +L680 +R53 +R15 +L50 +L37 +R75 +L60 +L81 +R51 +L74 +L26 +R34 +R66 +L82 +L18 +R67 +L925 +L49 +R150 +L1 +L18 +L59 +L65 +L48 +L78 +L60 +L82 +R68 +L78 +L5 +R83 +R7 +L7 +L96 +R96 +R64 +L664 +L42 +R42 +R83 +L49 +R92 +R94 +L20 +R38 +L74 +L447 +R99 +R784 +L11 +R854 +L43 +L3 +L64 +R7 +R38 +R74 +R51 +L3 +L41 +L14 +R55 +R64 +L464 +L977 +L313 +L6 +R92 +R4 +L34 +R34 +R542 +R61 +L90 +L60 +L53 +L93 +R94 +R137 +R78 +R42 +L19 +R94 +L833 +R967 +R333 +R80 +L80 +L87 +R21 +R756 +R17 +R72 +R1 +L219 +R75 +R35 +L60 +R94 +L10 +R105 +L50 +L421 +L29 +R47 +L11 +L36 +L74 +L338 +L93 +L26 +L69 +L723 +L77 +L83 +L17 +L82 +R41 +R61 +R7 +L80 +R8 +R58 +R87 +R34 +L36 +R2 +L18 +R24 +L63 +L48 +L35 +R44 +R96 +L84 +L73 +L43 +L88 +L12 +L48 +L889 +L63 +L65 +L80 +L23 +L32 +R397 +R616 +L36 +R76 +L35 +L18 +L16 +R409 +R196 +R11 +L926 +R62 +L867 +L47 +L94 +L56 +L94 +R22 +R827 +R73 +L87 +R71 +L87 +R44 +L37 +L3 +R403 +R27 +R69 +R45 +L45 +R41 +R1 +L443 +R701 +R15 +R8 +R77 +L73 +L27 +L70 +L9 +L436 +L61 +L8 +L68 +R63 +L71 +R8 +L48 +L306 +R87 +L68 +L68 +R83 +L97 +R45 +L64 +R88 +R259 +R894 +L53 +R695 +L95 +L43 +L57 +R16 +R36 +R49 +R736 +R50 +L70 +L479 +R11 +R16 +L134 +L49 +R21 +L387 +L16 +R63 +R37 +L73 +L81 +R554 +L17 +R36 +R451 +R30 +R31 +R51 +L42 +L140 +L82 +L18 +L11 +L5 +L84 +R929 +R71 +L715 +L33 +R848 +L91 +L82 +L27 +R227 +L12 +R82 +R77 +R26 +L45 +R45 +R757 +R43 +R97 +R3 +R901 +L1 +R11 +L10 +L831 +L26 +R56 +R55 +R36 +L85 +L77 +R38 +L45 +L22 +L271 +L933 +R63 +L97 +R55 +L65 +L80 +L265 +R13 +L15 +L78 +L27 +L77 +R90 +L68 +R85 +R70 +L64 +R64 +L44 +L26 +L90 +R60 +L70 +R70 +L15 +R21 +L39 +L46 +L24 +L43 +L66 +L5 +R17 +R43 +R657 +L92 +R40 +R63 +R88 +L99 +R78 +L88 +L13 +R81 +R90 +L738 +R13 +R52 +R215 +R59 +R13 +L695 +R63 +R70 +L61 +L20 +R68 +L287 +L80 +R24 +R556 +L226 +R426 +R67 +L291 +R24 +L594 +L6 +L41 +L38 +L21 +R386 +L10 +R1 +R35 +L39 +R23 +R72 +R32 +R57 +L598 +L8 +L51 +L753 +R53 +L3 +R58 +L529 +R95 +L93 +L95 +R93 +L826 +R52 +R54 +R94 +R23 +R82 +R95 +R489 +R29 +L18 +R28 +R72 +R435 +R743 +L78 +R59 +L669 +L42 +R58 +R87 +L93 +R94 +R72 +R34 +R35 +R65 +R77 +R83 +R940 +L35 +R35 +R78 +L978 +R49 +R29 +L80 +L43 +R45 +L18 +R3 +R15 +R331 +L180 +R16 +R210 +R27 +R196 +L891 +L9 +L52 +L85 +L34 +R91 +R821 +R59 +R84 +L8 +R62 +R8 +L46 +L7 +R77 +L70 +L136 +L860 +R1 +R709 +R40 +L96 +L58 +R613 +L10 +L68 +L51 +R159 +L43 +L176 +R42 +L843 +R77 +R988 +L788 +L82 +R82 +L191 +R91 +L898 +R98 +L31 +L69 +R97 +R3 +R24 +L61 +L16 +L84 +R37 +R63 +L79 +R16 +L613 +L10 +R23 +R96 +L91 +L31 +L92 +L23 +L459 +R39 +L522 +L577 +R87 +R73 +R57 +R90 +R92 +L14 +L25 +R38 +R86 +L24 +R77 +L178 +L99 +L98 +L94 +R43 +L69 +L82 +L80 +L42 +R6 +L28 +L56 +L16 +L761 +L23 +L98 +R98 +R38 +R94 +L532 +R28 +R90 +L18 +L62 +R548 +L8 +L87 +L83 +L34 +R87 +L97 +L86 +R443 +R79 +L501 +R1 +R13 +R52 +R33 +L98 +R46 +L466 +R96 +L76 +L582 +R82 +R47 +R53 +R8 +R18 +L57 +R31 +R865 +L65 +L70 +L94 +R59 +L43 +R48 +L19 +L54 +L13 +L6 +R72 +L855 +R75 +R784 +L29 +L66 +R478 +L613 +L51 +L18 +R4 +R68 +R85 +R13 +L44 +L711 +R531 +R51 +R36 +R87 +R19 +L24 +R97 +R76 +R30 +R28 +R69 +R1 +R99 +R34 +L68 +L51 +R629 +L95 +R811 +R140 +L94 +R77 +L47 +R95 +R169 +L90 +L10 +L77 +L45 +R87 +L65 +R77 +L99 +R78 +L73 +L83 +L93 +L7 +L89 +L92 +L1 +R58 +L76 +R67 +L67 +L68 +L48 +R16 +L174 +L84 +R58 +L51 +R51 +R845 +R25 +L487 +R628 +R19 +R470 +R35 +L45 +R910 +L7 +L31 +R738 +R789 +R24 +L6 +L81 +R2 +L57 +R75 +R48 +L160 +R30 +L29 +R81 +R584 +L36 +R736 +L77 +R61 +L84 +L665 +R34 +R31 +L687 +L113 +L47 +L41 +L76 +L76 +L241 +R354 +R45 +R14 +L32 +L47 +L253 +L28 +R28 +L60 +L40 +R923 +L60 +L163 +R399 +L16 +R17 +R72 +L72 +L6 +L60 +R66 +R96 +L23 +R28 +L1 +R81 +L1 +R68 +L67 +L32 +L20 +R213 +R25 +R33 +R270 +L70 +R425 +L48 +L377 +L25 +L42 +L33 +R104 +L85 +L19 +R669 +R331 +R57 +L40 +L217 +L63 +R15 +L98 +L18 +L55 +L384 +L69 +L85 +L72 +R429 +R45 +L45 +L52 +L62 +R44 +R56 +R414 +L876 +L224 +R641 +R9 +R11 +R78 +R1 +R496 +R98 +R17 +R49 +L506 +R590 +L862 +R93 +R39 +L5 +R51 +R238 +L38 +L644 +R999 +L61 +L94 +R691 +R4 +L55 +L60 +L780 +L481 +R33 +R65 +R83 +R22 +L22 +L430 +R1 +R29 +R83 +R817 +R93 +L14 +L76 +L903 +R39 +R94 +L3 +L43 +L729 +R65 +R12 +R237 +R28 +L12 +L37 +R30 +R65 +R43 +L31 +R42 +L68 +L8 +R72 +R13 +L9 +R73 +L97 +L176 +L584 +L15 +R950 +L629 +R98 +L59 +L61 +R2 +R519 +L227 +L4 +L80 +R90 +R85 +R89 +L767 +R45 +L34 +R65 +R617 +R371 +R29 +L48 +L52 +L214 +R293 +L7 +R28 +L39 +L61 +L56 +L63 +R590 +L6 +R35 +L73 +L327 +R99 +L399 +R827 +R30 +L21 +L636 +R88 +R5 +L70 +R680 +L111 +R8 +L35 +R40 +L5 +L70 +R38 +R46 +L90 +L88 +R19 +R71 +R14 +R60 +R51 +R30 +R319 +L97 +L49 +R46 +L44 +L556 +L90 +L10 +R88 +R12 +R86 +R13 +L88 +R89 +R926 +L26 +R57 +L492 +L65 +R623 +L46 +L72 +R1 +L46 +L60 +L80 +L20 +L40 +L46 +R914 +R361 +R94 +R11 +R33 +L51 +R86 +R692 +L754 +L74 +R174 +R683 +R17 +R91 +L45 +R54 +L55 +R55 +L84 +R98 +R86 +L154 +R62 +L535 +L73 +L354 +L38 +L8 +R97 +L69 +R72 +L30 +R330 +R57 +L81 +L59 +L96 +R24 +R37 +L51 +L31 +R71 +R80 +L24 +R373 +R485 +L85 +R19 +L150 +R31 +L660 +R760 +L63 +R23 +L279 +R63 +R56 +L988 +R2 +L35 +R70 +R91 +L440 +R49 +R13 +R34 +R19 +R31 +L387 +L478 +L81 +R73 +R27 +R38 +R12 +R36 +L86 +R55 +L160 +R5 +R51 +R45 +R59 +R96 +L49 +R98 +R95 +R694 +R11 +L10 +L14 +L839 +R97 +R98 +L532 +R75 +R16 +R71 +L88 +L49 +R75 +L55 +R55 +R53 +R21 +L55 +L19 +L48 +R20 +L68 +L5 +R1 +L35 +L48 +R83 +R61 +R439 +R35 +R65 +L65 +R25 +R957 +L871 +R54 +L37 +R42 +L14 +R65 +R44 +L54 +L19 +R96 +R177 +L98 +R98 +R51 +L75 +L76 +R9 +L3 +R628 +R24 +L43 +R67 +R189 +L189 +R43 +R270 +R80 +R20 +R62 +L49 +R94 +R19 +R579 +R3 +R97 +L625 +L32 +L578 +R90 +L55 +R10 +L83 +L33 +R61 +L98 +R74 +L90 +L41 +R534 +L84 +R305 +R45 +R21 +L621 +L1 +R29 +R72 +R44 +L44 +R65 +L41 +R76 +L256 +L44 +R33 +R67 +R37 +R63 +R95 +L95 +R8 +L208 +R85 +R867 +R48 +L95 +R36 +R556 +L47 +R8 +L58 +L84 +L116 +L56 +R56 +L93 +R43 +L15 +R31 +L26 +L40 +R10 +L10 +R19 +L63 +L656 +R57 +L91 +L57 +L87 +R13 +R85 +R171 +R57 +L68 +R20 +L22 +R264 +L31 +L11 +L38 +L50 +L12 +R947 +R53 +R203 +R86 +L17 +R17 +L89 +L41 +R89 +L6 +R58 +R46 +R54 +L26 +L308 +R76 +L42 +L58 +L27 +L37 +R22 +L789 +R64 +R86 +R809 +L30 +L291 +L12 +R363 +L61 +L39 +R65 +R98 +R26 +L45 +R56 +L748 +R22 +L20 +R50 +L4 +L76 +R76 +R685 +R29 +L68 +L64 +L82 +L49 +L71 +L190 +L290 +R887 +R49 +R85 +R16 +R11 +R12 +L62 +R2 +R91 +L880 +R30 +L64 +L677 +L12 +L84 +R82 +L24 +R48 +R65 +R33 +R92 +L27 +L472 +R712 +R87 +L26 +R26 +R19 +R81 +L82 +R94 +R36 +L48 +R77 +L287 +R78 +R421 +L176 +L86 +L27 +L98 +R586 +R79 +L67 +R20 +R74 +R33 +L78 +R17 +L43 +L815 +L827 +R19 +L488 +L95 +L17 +R176 +R24 +R51 +L451 +L72 +R71 +L41 +R42 +R32 +R67 +L99 +L49 +R154 +R54 +R96 +R45 +R11 +R89 +R363 +L646 +R83 +R95 +R69 +R375 +R61 +L53 +R91 +L13 +L66 +L959 +L9 +R46 +R13 +L66 +R12 +L66 +R70 +R96 +L496 +L647 +R47 +L60 +L63 +R23 +L94 +L6 +L4 +L96 +L74 +R74 +L1 +L99 +R2 +R86 +L47 +R84 +L17 +L8 +L78 +L670 +L52 +R6 +R94 +L95 +L36 +L3 +R50 +R16 +R68 +R28 +L99 +L34 +R5 +L49 +L82 +L57 +R81 +L18 +L49 +R74 +R32 +L32 +R579 +R34 +R62 +R51 +R99 +L62 +L79 +R6 +R30 +L920 +L23 +L26 +L49 +L602 +L52 +L70 +L78 +R70 +R12 +L52 +L90 +R73 +R4 +L33 +L76 +R470 +L78 +L56 +R56 +L29 +R94 +R97 +L81 +L81 +L272 +L76 +L72 +L344 +R864 +L76 +R53 +L77 +L43 +R43 +L9 +L5 +L52 +L88 +R35 +R42 +L75 +R794 +R58 +R180 +R51 +R469 +L41 +L29 +L430 +L449 +L77 +L74 +R89 +R55 +R56 +R680 +R99 +R21 +R2 +L402 +R218 +L6 +R99 +R989 +L10 +L577 +R56 +L69 +L1 +R701 +R191 +L1 +R510 +R7 +R93 +L14 +R14 +R42 +L124 +R776 +R44 +L67 +R29 +L753 +R53 +L92 +R71 +R83 +R315 +R95 +L23 +L70 +R47 +R307 +R46 +L17 +L862 +R95 +L34 +L61 +L14 +L467 +R81 +R4 +R38 +R58 +L92 +L18 +L790 +L5 +L83 +R488 +L369 +R529 +L75 +R43 +R72 +R57 +L457 +L65 +R67 +L659 +R81 +L824 +L540 +R40 +R7 +L19 +L88 +L57 +L68 +L75 +L60 +L725 +L15 +L550 +L59 +R902 +R190 +L1 +L4 +L78 +L35 +L190 +L75 +R71 +L70 +R370 +L78 +R233 +L22 +R96 +R42 +R258 +R58 +L82 +R24 +L740 +R613 +R7 +R81 +L66 +L95 +L79 +L17 +L25 +L79 +R83 +L49 +R36 +L34 +R764 +R99 +L99 +R61 +R858 +R81 +L82 +R7 +L25 +R40 +R55 +R53 +L30 +R86 +R96 +L94 +L6 +R12 +L82 +L68 +L62 +L33 +L96 +L71 +R79 +L97 +R18 +R73 +L62 +R588 +R18 +L17 +R99 +R63 +R938 +L70 +R8 +R62 +R9 +L71 +R6 +R256 +R24 +R83 +L22 +R4 +L99 +R99 +R15 +L56 +L44 +L90 +L14 +L105 +L95 +R2 +R99 +R32 +R25 +L77 +R19 +L80 +R88 +R92 +R19 +R25 +L92 +R41 +R6 +L63 +R30 +L66 +R52 +R624 +L985 +L30 +R694 +L88 +R333 +R52 +L52 +L62 +L38 +R83 +R7 +L90 +R94 +L63 +R66 +L197 +L776 +L33 +L52 +L39 +L68 +L935 +R31 +R49 +L69 +R992 +L43 +L12 +R194 +R25 +R16 +R320 +L228 +R26 +R826 +R29 +L52 +L2 +R34 +R67 +R34 +R53 +R213 +R78 +L298 +R20 +R20 +L96 +R91 +R85 +L61 +L39 +R988 +L72 +L16 +L69 +L507 +R76 +L280 +L25 +L33 +L62 +R8 +L8 +R42 +L42 +R98 +L7 +L4 +R97 +R6 +R410 +R54 +R63 +R683 +L28 +L72 +R70 +R30 +R31 +R69 +L66 +L34 +R45 +R555 +L71 +L24 +L36 +L481 +L139 +L31 +L18 +R50 +L50 +L96 +L968 +L659 +L68 +R15 +L82 +L764 +L96 +R18 +R16 +R11 +R73 +L8 +R14 +L506 +R136 +L22 +L31 +R70 +R11 +R21 +L785 +L15 +L785 +R61 +R39 +L68 +R68 +R39 +R69 +R92 +R99 +R41 +L50 +R89 +L79 +L88 +R88 +L25 +R63 +R26 +R48 +L471 +R620 +L59 +R12 +R54 +L30 +L2 +R64 +L97 +R97 +R939 +L24 +L815 +R392 +R69 +L61 +R67 +R86 +L53 +R81 +L81 +L841 +R8 +R133 +L105 +L26 +R14 +R47 +R70 +L149 +R28 +R25 +R96 +L95 +R84 +R760 +R51 +R60 +L33 +R408 +R69 +L94 +R90 +L646 +R46 +L61 +R27 +R24 +R16 +L5 +L301 +R718 +R5 +R77 +L305 +L95 +L92 +L8 +L5 +L87 +R75 +L20 +L334 +L5 +L24 +L5 +R5 +R858 +L38 +L20 +L68 +R67 +L31 +L99 +R70 +L39 +R36 +L336 +R92 +R8 +L51 +R51 +R25 +L525 +L88 +L12 +L35 +L31 +L58 +L2 +R26 +R54 +R52 +L32 +R20 +R992 +L1 +R15 +R30 +R76 +R12 +L31 +L828 +L67 +R8 +L239 +R39 +L13 +R13 +L39 +L61 +R88 +L15 +L73 +L98 +R277 +R121 +L553 +L22 +R50 +R29 +L66 +R662 +R83 +R18 +L42 +R41 +R38 +L71 +R55 +L22 +L94 +L659 +L52 +R5 +L543 +R48 +L9 +R10 +R12 +L95 +L201 +R178 +R921 +R86 +L7 +L22 +L724 +R46 +L49 +L68 +R17 +L67 +L992 +R42 +R17 +R92 +L27 +R35 +L76 +R13 +L61 +L41 +R79 +L17 +R73 +R112 +R73 +R779 +L88 +L193 +R252 +L35 +R57 +L27 +R862 +R38 +L70 +R69 +L45 +L14 +R46 +R14 +L33 +R273 +R94 +L14 +R17 +R63 +L74 +R857 +L127 +R44 +L79 +R714 +L35 +R470 +R72 +L72 +L877 +R2 +R90 +R434 +L74 +R373 +R29 +R53 +L250 +R24 +R26 +R285 +L85 +L55 +L3 +L70 +L975 +R819 +L16 +R19 +R11 +R340 +L70 +R87 +L78 +R64 +R27 +R20 +R80 +R72 +R69 +R43 +L84 +R949 +L149 +R390 +R12 +R5 +R12 +R281 +R61 +L70 +L91 +L53 +R76 +R54 +L25 +L47 +L25 +R54 +R77 +R8 +R5 +R78 +R17 +R55 +L82 +R40 +L432 +L17 +L481 +R16 +L90 +L76 +L52 +R30 +R4 +L35 +L25 +R326 +R83 +L73 +L10 +R49 +L21 +R972 +L15 +L49 +L336 +L4 +R64 +R440 +L28 +R128 +L3 +L97 +L82 +R23 +R59 +R53 +R36 +L608 +L26 +L93 +R281 +L317 +R74 +L99 +L13 +L27 +R481 +R58 +L49 +R49 +R74 +R26 +R913 +L15 +R19 +L72 +L89 +R90 +R922 +L23 +R50 +L48 +R682 +R74 +L20 +R98 +L381 +R704 +L152 +L652 +L21 +L11 +R13 +R6 +R5 +R90 +R28 +L36 +L63 +R672 +R91 +R326 +L84 +R477 +R56 +L49 +R839 +R85 +R76 +R23 +L26 +L10 +L66 +L21 +R40 +R64 +L95 +R89 +R59 +L57 +R70 +L513 +R43 +L32 +L93 +L36 +R37 +R360 +L60 +L68 +L80 +R32 +R64 +L10 +L14 +L1 +R73 +L69 +L77 +L549 +R2 +R73 +R48 +L532 +R32 +L472 +L628 +R99 +R855 +L54 +L67 +R10 +L865 +L89 +R962 +L66 +R98 +L983 +L91 +R42 +L752 +R96 +R66 +L61 +L42 +R32 +R12 +L39 +R83 +L46 +L80 +L50 +R30 +R42 +L42 +L33 +R33 +R48 +R52 +R44 +R56 +R33 +R79 +R88 +L81 +L396 +R77 +L94 +L27 +L20 +L59 +R42 +L77 +L963 +L2 +L85 +R24 +R276 +L5 +L10 +R93 +R7 +R37 +R937 +L37 +L37 +L31 +L69 +R921 +L21 +L14 +L919 +R933 +R62 +R35 +L90 +R670 +R23 +R78 +R22 +R54 +L74 +R782 +L324 +R62 +L16 +R4 +L88 +R23 +R577 +R528 +L35 +L53 +R360 +L8 +L89 +R97 +L5 +R5 +L33 +L879 +L188 +R29 +L93 +L9 +L61 +R53 +R81 +R82 +L937 +R76 +R79 +R78 +R20 +R502 +L19 +R19 +R29 +R71 +R57 +L28 +R38 +R262 +L34 +L46 +L49 +L27 +R27 +R320 +L8 +L78 +R66 +L80 +L20 +L35 +L18 +L536 +L11 +L4 +R65 +L61 +L33 +R862 +R92 +R76 +R3 +L21 +L79 +L139 +R45 +R694 +R94 +R671 +R130 +R34 +L29 +R22 +L22 +R94 +L94 +L37 +L23 +L69 +R4 +R62 +L44 +R7 +R65 +L84 +L12 +L97 +L43 +R71 +L13 +R15 +L38 +R43 +R44 +L26 +L25 +L31 +L69 +L451 +R409 +R41 +L69 +R57 +L87 +L65 +R65 +L631 +R831 +R59 +L86 +R3 +L81 +L46 +L478 +L171 +R60 +L960 +L51 +R151 +L597 +L3 +L48 +R50 +L30 +L68 +R523 +L66 +R37 +R216 +L14 +L20 +R90 +L70 +R58 +L22 +R116 +L166 +L80 +L83 +R77 +R226 +L98 +R72 +R14 +L63 +L92 +R54 +L25 +R2 +R10 +L94 +R670 +L44 +R68 +L82 +R363 +R293 +R29 +L60 +L11 +R41 +R2 +L87 +R40 +R96 +R280 +L92 +R888 +R434 +L34 +R26 +L726 +L58 +L73 +R131 +R319 +L93 +L74 +R85 +R29 +R34 +R38 +R62 +L97 +R97 +R36 +R171 +L91 +L765 +R179 +R70 +L21 +R93 +L27 +L345 +R48 +L208 +L17 +R16 +R3 +R16 +L98 +R4 +L235 +L29 +R48 +R885 +L1 +L20 +L12 +R40 +R49 +R511 +L5 +L25 +L70 +R80 +L73 +L64 +L78 +R933 +L4 +L94 +L23 +R45 +L12 +L38 +R28 +R803 +L6 +R3 +L65 +R2 +R73 +R17 +L1 +L26 +R20 +L20 +R79 +L64 +L17 +L98 +R95 +R87 +L82 +L6 +R30 +R39 +R62 +L11 +L32 +R51 +L90 +L65 +R22 +L66 +L34 +L68 +R90 +R26 +L137 +L73 +R519 +R43 +L49 +R81 +L60 +L1 +R96 +L48 +L22 +L56 +L11 +R70 +R96 +L78 +L2 +L40 +L247 +R69 +R81 +R37 +L16 +L199 +R192 +R52 +R55 +L87 +R55 +R32 +R64 +R36 +R326 +R66 +R17 +L9 +L88 +L89 +L23 +L3 +R3 +R56 +L856 +R71 +R29 +R23 +R52 +L270 +R7 +L75 +L37 +R95 +L26 +R10 +R58 +L29 +L52 +L218 +L38 +R4 +L47 +R943 +R75 +R44 +L23 +R55 +R49 +L8 +R56 +L48 +L51 +R37 +R81 +R33 +L49 +R47 +L98 +L14 +R14 +R57 +R432 +R25 +R418 +L32 +R71 +L25 +R54 +R53 +L353 +R56 +L5 +R14 +L65 +L46 +R23 +R723 +L87 +L69 +L44 +L39 +L61 +L72 +L58 +L86 +L484 +L71 +L84 +L145 +L74 +R48 +L174 +L929 +R93 +R642 +R56 +R938 +L95 +R42 +R45 +R14 +R49 +R34 +L89 +L66 +R20 +L54 +L550 +R454 +L474 +R70 +L83 +R93 +L46 +R36 +L46 +L54 +L4 +R42 +L804 +L237 +R488 +L885 +L569 +R85 +L182 +L12 +R48 +L70 +L748 +L52 +L69 +L31 +R826 +L35 +L71 +L886 +R66 +R43 +R9 +R48 +L977 +R42 +L29 +L97 +R61 +L7 +L90 +R95 +R32 +L13 +R83 +L49 +L95 +R95 +L351 +R7 +R50 +R66 +L3 +L20 +R162 +L62 +L87 +L13 +R52 +R48 +L658 +R63 +L5 +L24 +R32 +L40 +R32 +L11 +R13 +R97 +L30 +R31 +L21 +R68 +R49 +R560 +L89 +L55 +L60 +L52 +R625 +R751 +L54 +R95 +L94 +R677 +L88 +R45 +R565 +R25 +L3 +L170 +L98 +L13 +R37 +R56 +R9 +L451 +R86 +R85 +R30 +L15 +L96 +L118 +L5 +R869 +L92 +R49 +L7 +L131 +L44 +R75 +R58 +R63 +R279 +R75 +L80 +L95 +L25 +R37 +L68 +R156 +R116 +R24 +L190 +R51 +R193 +L47 +R30 +R78 +L590 +R87 +L52 +L92 +R192 +L43 +L14 +L943 +L6 +R6 +L91 +L9 +L271 +L56 +R27 +L977 +L74 +R96 +R55 +R57 +L89 +L78 +L90 +L57 +L57 +R14 +L26 +R93 +L66 +L1 +R27 +R62 +R11 +R72 +R28 +L60 +R52 +R821 +L96 +R83 +L634 +R34 +L48 +R705 +R95 +R48 +L951 +L85 +L81 +R202 +L85 +L718 +R57 +L28 +L777 +L40 +R45 +R61 +R29 +L29 +L809 +L44 +R54 +R16 +L20 +R103 +L78 +L59 +R37 +R95 +R71 +R72 +R25 +R37 +R896 +R37 +L33 +R58 +R42 +L93 +L941 +L92 +R41 +L74 +L73 +R68 +R64 +R82 +L70 +R88 +L973 +L772 +L82 +R33 +R636 +L42 +R8 +L27 +L43 +L81 +L57 +L43 +L28 +L22 +R56 +L735 +R10 +L38 +R60 +L30 +R79 +L294 +R85 +R275 +L15 +R34 +R6 +L8 +R8 +L726 +L74 +R77 +L88 +R27 +L371 +L30 +L3 +L549 +R10 +L740 +R64 +L97 +R82 +L82 +L131 +R31 +L85 +L4 +R18 +L229 +L55 +R59 +L4 +L337 +L63 +R877 +R567 +R56 +R84 +L243 +L19 +R1 +R777 +R58 +R42 +R21 +L21 +L61 +L39 +L315 +R92 +R23 +R28 +L528 +R13 +R87 +L61 +R4 +L143 +L80 +R80 +R517 +L54 +R37 +R60 +R40 +R96 +L28 +L45 +L79 +L75 +R35 +L68 +L36 +R1 +R99 +R7 +L7 +R76 +L73 +R2 +R17 +R207 +L81 +R15 +R34 +R3 +L16 +L684 +R54 +R960 +R86 +R946 +R69 +R85 +L67 +R773 +R61 +R87 +R32 +R14 +L869 +L855 +L69 +R33 +R85 +L741 +R82 +L34 +R70 +R50 +R48 +L71 +R15 +R56 +R26 +R79 +L16 +L70 +R81 +R794 +L76 +R14 +R83 +L515 +R92 +L69 +L23 +R74 +R1 +L77 +R2 +L62 +L38 +R37 +R63 +L140 +L853 +R493 +R390 +R26 +L16 +R98 +L183 +R85 +R58 +R889 +R53 +L26 +L96 +R33 +R1 +R88 +L23 +L277 +L66 +R507 +R19 +R18 +R977 +R45 +R93 +L684 +L96 +L78 +L35 +R74 +R26 +R39 +L22 +L38 +L79 +R24 +R354 +L78 +L677 +R22 +L56 +L289 +L13 +R14 +L58 +L43 +L503 +R19 +R16 +L32 +R65 +L68 +L99 +L67 +L31 +R460 +L73 +L87 +L2 +L98 +R91 +R9 +L379 +R79 +L68 +R28 +R242 +R66 +L4 +R66 +L33 +L71 +R31 +L57 +L2 +R90 +R69 +L57 +L86 +R71 +L737 +L80 +R232 +R79 +L179 +R52 +L20 +R77 +L67 +L42 +L8 +R97 +R40 +L29 +R4 +L59 +L53 +R16 +L62 +L67 +R21 +L346 +L93 +R48 +L96 +R998 +L45 +L85 +R32 +L23 +R70 +R40 +R51 +R97 +L7 +L41 +R53 +L153 +R474 +L10 +L764 +L36 +L14 +L22 +L152 +R24 +L80 +L23 +R503 +L80 +R11 +L24 +R38 +L813 +L103 +L29 +R70 +R69 +R21 +L202 +R479 +R63 +R125 +L780 +R45 +L790 +L36 +L64 +L48 +L52 +R22 +L432 +L84 +L13 +R70 +R17 +R20 +R4 +L207 +L565 +L85 +R53 +L28 +R11 +R25 +R31 +R61 +L87 +R987 +R60 +L60 +L14 +L75 +R60 +L71 +L780 +R17 +R55 +L92 +L464 +L87 +R28 +L83 +R96 +R610 +R681 +L21 +R50 +L10 +L86 +L88 +R39 +R835 +L32 +L68 +R304 +R14 +L29 +R547 +L89 +R53 +R616 +L16 +L51 +L29 +L56 +R136 +L1 +R301 +R923 +R777 +R813 +L413 +R5 +L791 +R86 +R63 +L19 +L97 +R82 +L29 +L53 +L35 +L645 +R245 +R351 +R2 +L65 +L99 +R35 +L38 +L98 +L9 +L91 +R80 +L94 +R44 +R387 +L73 +L55 +R729 +R63 +L805 +L76 +L306 +L474 +R29 +L422 +R78 +R995 +R248 +R56 +R96 +R2 +R66 +L77 +R71 +L293 +L269 +R24 +L64 +R940 +R48 +R967 +L48 +L65 +L2 +R3 +L78 +R460 +L73 +R62 +L74 +L11 +L76 +L90 +L63 +L61 +R129 +L28 +L797 +L15 +R21 +R6 +L15 +R99 +R1 +L61 +L5 +L8 +L726 +L69 +L703 +R1 +R58 +L721 +L83 +L75 +L83 +R75 +L2 +R64 +R736 +R52 +L30 +R378 +R750 +L85 +R37 +L13 +L224 +R37 +R29 +L55 +R826 +L273 +L51 +R56 +L83 +R51 +R22 +L74 +L48 +L82 +R2 +R80 +R555 +L45 +L10 +R555 +L66 +L88 +L20 +L781 +L609 +R44 +R65 +L575 +L25 +L34 +R31 +L87 +R93 +R97 +R73 +R33 +L5 +R999 +L2 +L16 +L2 +L80 +R66 +R2 +L18 +L28 +R78 +L798 +R798 +L94 +L980 +L22 +R99 +R85 +R77 +R7 +L39 +R67 +R36 +R84 +R80 +L973 +L754 +R27 +L30 +R3 +R7 +L71 +L13 +R4 +L92 +L240 +L80 +R52 +L40 +R96 +L28 +R96 +R19 +R17 +R913 +R387 +R19 +R62 +L36 +L26 +L419 +L34 +L87 +R36 +L703 +R88 +R59 +L59 +R13 +R13 +L26 +R44 +L344 +L98 +L88 +R201 +R50 +R21 +L17 +L20 +L49 +L17 +L83 +R14 +L14 +R169 +R85 +R46 +L7 +R7 +R719 +R5 +R15 +L39 +R640 +R60 +R573 +R592 +L65 +R74 +R26 +R59 +L59 +L4 +R64 +L60 +R370 +R71 +R59 +L30 +R30 +L14 +R414 +R29 +L561 +R32 +L64 +R64 +L42 +R24 +L482 +L89 +L11 +R86 +L69 +R24 +L5 +R76 +R88 +R61 +L61 +L16 +R816 +R56 +L96 +L460 +R60 +L14 +R76 +R49 +R888 +L59 +R71 +R29 +R53 +R347 +L90 +L10 +R35 +R88 +L635 +L5 +L637 +L16 +L30 +R89 +L59 +R70 +R99 +L305 +L22 +R82 +R599 +R33 +L582 +R96 +R931 +L231 +R51 +R78 +R11 +L40 +L42 +R85 +R568 +R618 +R921 +R50 +L68 +R68 +L52 +R52 +R5 +L5 +R8 +L53 +L60 +L27 +L51 +R34 +R53 +L4 +L26 +R72 +R148 +R35 +R68 +R103 +R55 +L14 +R59 +L136 +L54 +L93 +L17 +R64 +L8 +R88 +R556 +R12 +R38 +R50 +L73 +R79 +L824 +R418 +R53 +R761 +R786 +L513 +L87 +L65 +R7 +R1 +R22 +L65 +L17 +L86 +R858 +R12 +R12 +L696 +L2 +L81 +L26 +L74 +R86 +L4 +R18 +L38 +L62 +R94 +R6 +L95 +R56 +L61 +R36 +L94 +L47 +R98 +R7 +R41 +R59 +R30 +R54 +R16 +R69 +R31 +L88 +R11 +R86 +R91 +L30 +R30 +R6 +L6 +L94 +L6 +R93 +R67 +L61 +R1 +L84 +R84 +R81 +R37 +R34 +L87 +L62 +L65 +L30 +L8 +L97 +R15 +L22 +R9 +R28 +L16 +R44 +R30 +L2 +L6 +R1 +R36 +L27 +L28 +R23 +L4 +R39 +L46 +R40 +R13 +L28 +R1 +R45 +L37 +R6 +R18 +R37 +L6 +L41 +L27 +R11 +R13 +L12 +R40 +R18 +R46 +R49 +R46 +L29 +R35 +R48 +L10 +R10 +R16 +R40 +L26 +R42 +R6 +R30 +R19 +L43 \ No newline at end of file diff --git a/day02/run.pl b/day02/run.pl new file mode 100755 index 0000000..2f634f1 --- /dev/null +++ b/day02/run.pl @@ -0,0 +1,50 @@ +#!/usr/bin/perl +use strict; + +my $input = ; +chomp($input); +my @ranges = split(/,/,$input); + +my $sum = 0; +my $sum2 = 0; +foreach my $range (@ranges) { + my($first,$last)=split(/-/, $range); + + for(my $i=$first; $i<=$last; $i++) { + my $l = length "$i"; + if($l % 2 == 0) { + if(substr($i, 0, $l/2) eq substr($i, $l/2, $l/2)) { + print "Invalid: $i\n"; + $sum += $i; + $sum2 += $i; + next; + } + } + + for(my $len = 1; $len <= (length "$i")/2; $len++) { + my $str = substr($i, 0, $len); + my $working = $str . $str; + while(length $working < length $i) { + $working .= $str; + } + if($working == $i) { + print "Invalid2: $i\n"; + $sum2 += $i; + } + } + } +} + +print "Sum is $sum\n"; +print "Sum2 is $sum2\n"; + + + + + + + + +__DATA__ +10327-17387,74025-113072,79725385-79874177,964628-1052240,148-297,3-16,126979-227778,1601-2998,784-1207,831289-917268,55603410-55624466,317-692,602197-750430,17-32,38-58,362012-455626,3622441-3647505,883848601-883920224,62-105,766880-804855,9184965756-9185005415,490073-570277,2929273115-2929318135,23251-48475,9696863768-9697013088,229453-357173,29283366-29304416,4526-8370,3095-4389,4400617-4493438 +11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124 diff --git a/day03/run.pl b/day03/run.pl new file mode 100755 index 0000000..18437b2 --- /dev/null +++ b/day03/run.pl @@ -0,0 +1,230 @@ +#!/usr/bin/perl +use strict; + +my $sum = 0; + +while(my $line = ) { + chomp($line); + my @digits=split(//, $line); + + my $largest = 0; + + for(my $i = 0; $i < @digits-1; $i++) { + for(my $j = $i+1; $j < @digits; $j++) { + my $jolts = "$digits[$i]$digits[$j]"; + $jolts -= 0; + if($jolts > $largest) { + $largest = $jolts; + } + } + } + + print "Bank largest is $largest\n"; + $sum += $largest; +} + +print "Sum is $sum\n"; + + + +__DATA__ +6483266694748235893324353634344523834567333718239477213324541343624714732212276727733744455653544463 +2543337317334342631273222374427553353272735227457653731534224733335623431363332212323533535333423775 +1171775673654754637242647675223455221523371731424421454256532546527447416736647162614542361475612389 +7567565743232354274324358254636933332327665424362432136332633378463931143733733333654177443634254225 +3667833563742535642357424443583444433164255464664643343695632444543476364514454626548444625765354499 +2729241222329123457422528225142242286297497441472728464675615243626217526319294335298622221564523151 +2325333232221221424422233712312233332414242223244343332373222423342332223232222224323113324424134121 +3544334476455533445454545534445436354424551344431543444135385564453544474354339443944434454242338755 +6923523553724555826545455454545465563455525532385543558554555555235643434455534555456645559345424222 +3713331131214132232632357628271236732756335334225557312633533322223433322332227173323322633433254922 +5542244352122346423342223444284353436224323233344224255121322454331242716436354234143274135135334244 +7162743447536295246796527676468385557236589519624462613223526836654621342279883474452325226263273139 +4471332775232839457784856429322785267271415576235256224744379223362354163425322422353251335223748294 +4346211424422222426522412332342223124232433521222212522622224522222322922122242321289322241212612248 +3933333344435332633335343333326333324324321343333324332323334233633323232443433333433133293233343433 +6585685274872474256868558658651539948458889788546584884556944395687334789354443387445242654964945955 +3444423533535542244342273333734333465764442334363243233342554334835822354446554325635232363334544548 +2563356752365526724855523276722277363574179457365743447387745757634578562526634617646444554863768526 +2242522423343223422432453234862232223322221132313423324224232226324222322292214127211224412315341423 +2225142225732522238462261322432443222172541743212222131225232222324223225172352623222125222226242212 +2323363432242323342311333232252133323413248233531234343423351422344524534342435211444332343233439442 +3124262532255282347432332294321135222362424972252223112182152324318322321252222112253222225322411222 +2245334552331524253681344534348345442133513353454238459543534745465382334735454123343442423442443934 +3322422222222223122222222222224221222112222232222222223522323121222213122222121223422232122222131232 +7236535664653565535465635366422265436332242234453634547553232665533563443734353355633544265445562333 +3362228222422133327322222772233322323532313242322212322242351322234225224213233542333144332333732232 +5342533334512341534142525424221433122414422241514334245311143541342335344222332112111535425322226789 +2222243214211225332122232722325213322322423225222332422243224322212131234322342411431242521333111132 +2431332622213122222213323233222342233233313224232242324234213522233121413222432153323432413214232234 +2632254426445554463233675543663354252364264273442465369374465344265346322555224345426232653752624455 +2224252122263212222122242313222322625222114243221342222222324122326121222213253142212212212332122364 +5674534466565636646662676545665534646635666365564665664467564666456654668593362444446744666554554766 +2454222496229621242121264211225262657254244599227752543642596753262384425725522523262558272113785222 +4333432323883373233343244735353323242136522336393337312342133733333737585447336353334312334233239323 +3332433332632332242243333552322345444322433333345334432744333233323424132333334222323463833284523413 +3225241811225112222441225224646162357422421132224244342443617633253321224223252264222625752131322232 +4142322221482422527722132262152123222226422234241226221372232422324226232222221444222443222222442221 +2122112112142212212211232121221222211222212222312234222222211232222222223222222322212322121221222122 +2222222124223222212223224331223222222326242213312222222222212213224221233221321222322222212132351222 +2215272212212212522332314222232521222232222521242222212531222352522312512221122423322312132252251622 +5436526445378684424444568445542446553648689488566256934745476233465425455768458459649634966485652754 +1422422222243422422522234212312441122422233132242233322231331227221441425221242224221242222412312228 +8231222334221221741123232222232152322232315112422323221722322421322352323271121232312214124212232323 +3325242234162322342135122233155454333332422322233455243222233323823223332142212313335332223241223333 +4355434445222544414334245223344754544163753444544243558755432234535445443344142335537441342345446474 +1336312223124525222322223222222213232342243323253221361234446112263212426251322332225112221253222233 +5367888866834536575377596677847443874839579585537663878498345777388579874847657388547557778388818978 +2222213321112122221111232422112222122223221312311222222131322332212322122322131232232132131222232123 +3319333223232123222212223528122362522252273222226227732322322223232422222422522322431371432222222232 +4355789657548436447545456596283356475869755625945566544654679445655355546846875533957745363857553589 +5235225434349223431221222424313242712267423544361221222222432412229272243123723224342524222212632342 +2232231222122221223724222422222125252223122321222232251223222222222224322222453212121222223341222221 +5335333343343333323223232734333333233333332333333333311333333333443133231163334332323332333334323463 +4255625361645633666646124144326161525216345554523444653556146322361311515343261335365113243661233789 +7638667436624684272673416624275555636244728456452876428697425422424259567247763874791543766747372775 +3141123121222122233433211221222322221415211223222232222112221323222222214312412312222222224222232225 +3263325433434645353436644264134498453455335834345444242346367354926234874355635644547423347374434443 +1332323273353313234322223334314333332133731353332373323223327333323323333626322347333682322332333333 +6463656765552554543425465563446455656563555455545563554535554853535655545655553548556745535538457455 +3342333133334332433231323232223333333232392232332442322331233333322132423632422282238312383323333223 +2239121232221122222221642224222152222112223221122212232325422521124212442231223242222313522422121283 +2222162222222172222222221221112262132323112222323212421222222132226231222222212223222222244222123222 +3187737233433234335276133212333147245233337362234333126333243134333353227422213242224252522627332123 +4532432376547655675765547764667466877716765473677694554655366743365573554745575736644564576556965855 +5336333374522244425439832113542436353233123232543534342335224132212125323322653232232223233343633562 +3632763655342634236354433162354345234437531354343564134386374437451476636364473437247454232643345433 +2231322422125242242122214222222172122214222122312252221222122224422124322222221124232222222223323411 +4343242244223252454116323222222111124322221422152322522621242252333283221223253422441354223225232353 +4733234344423243544433655552447441554644654354445433232534534522144534453434484123596594534564235243 +2242324335312322343323333334222223513523322413323133534352324433233334433334523233232323522432213223 +5664154336445666586466665822868667436646448646574566655654531564345646667566564366565356566454565463 +2243624221242162522322171325223532451332126472211123222274224334222223233422226221632322231422123222 +2121232232222332233332222222232212222222112242252122322422123222231132122222112341222122231211212221 +2222222223222113222232322222312221142322223333121222322232313322424222322123223422112223222233222313 +3351253554553235543435435432424433436649153196594374552542143345255545443494452444446455436234367546 +3241224772334661376724457242123523612145222752236442126633762256448232425611684252244225134252684324 +2569464654525636566535646646266655647666486763585683566656464486544667656654644644156667676243666586 +2382324222332222244447232233322572322223243222221422219222231322231222825162123922527332212224313325 +4633421245214332232234444426324243423431225513232342433322223132534212323224133342293321242423313354 +3323223252712538235234333613421472592337232341221333327923237322346131321733378124233222143331214389 +3441456554443634514434423348343244343334414934354346374444442443564645424565443953442444433244236443 +2226222221322152342212272622211121325743254222221223332232112221342243132232216242223232624232232422 +3232342241212243222423423313121222234241243233523322353433163322325322332323213232233223322232321413 +3221652432352232564241242242231524222224261231215352244222532554255152242567243221427245211124252222 +2221222142213111212222222424162222132252224222122225222284322224321162524312222211122221122142222221 +5335313543133432353344723323322346313732352334545142262332335133633433644233333634335235333543323354 +5434564663455635666754354454454453465541545545544555553554533454535435555364353343555566354544455145 +5252551148532423644724269592229555342433225273533524123134724325552532324348213234824252373335427325 +5856686513557539652366563544665675566443674579553566479656787777665534667354446457256657667864556465 +1251222232221231222223222222233222213331222222322211322222212221223222322322222212122222233322212422 +8458546645558756745657566656465566564565865555466745554556556676565786666556555665553658656585655556 +3432323239345643435333333333332353333337432343243633334253752353233342224334553333233313333393533553 +3421422362212422252232633328842222332323633222322233112336322321234523223222522222222424222233334231 +2123625336322625334512112243442224543555521424235253452532153223126465623551122254443224432523453525 +4122221543722232275516326144842223112823224222231222221122124222222262152221411322244125746222356778 +2322422222224122243424226322344835262425252111121223451222223234432162221226222212242213222633127233 +8434432236341443628422391263414236223173333438544421383847216542247624123365692613327333754535435243 +2652624354532763656244344355474341443223256424648253744256344172555215334857439454543663333134287743 +7357546615466634433443573336674233554454227313242344244643244344333737543646731174537524373356531242 +3882559275526542566532556564565255286724325665653727346734533476221733134455246561852322323591516576 +3324342323323336353363233333732313323231313334372252133122122234113412132333334313332222532323223225 +5648657452244467531938536766623967836658674751368875384543688794429466647543224146436626426786644693 +2411225564532222522462422431622243322531264124234153152144352424234215122353341233123232124224322412 +4222244444245423522434212441442345545135432342122442441444525244242542243333244443342525244434443233 +5465435555966664455444553336236556663724633434394665343662439454644352635444663948624664445224246545 +1432453433446393425346434245514432413453343353335242445434336552234231531543533443435374425324412252 +4336572233323134323444342354334334547453436543544333344444244423543543446437732361245333334265334454 +2676766556687553276876274579178576652387264737666476787497543476721452354347415279755657774467276664 +3344333322223432324242213231632223223333213221422323132323234522231323442233323232652233323314343254 +5563746886467958543795793558734554479385547744827467647476986636777562776695684678649689788685475659 +4422233522213432344333343133223123212233443434622344344322413411423122322312245323212232213242242334 +3344622322422423222243244224214432442336424334262521443223343322633135324463233412322314233512534242 +3232321712232121212212223232262552223244112235142362365223332222223233326336552241222145222222346264 +3644565538765869435533562635188694756636566645546767565399364946666665237666774651366664976963675667 +3945556445535346464334234433543343373464435445544534644436433274645292244533433356524354433344444545 +7645578859533418887755944347764436445126484186538387754736853734354838367544543436534748684774783975 +3786228343532223264261123222243523734242633532221216324264146232126342128444245322552455433862432252 +3251222222232911232222524222252222712222233112242222616232212123322221232313232223322352121221323322 +2322412234122243452551332442313522545253525222141114353732322522222362422214234542222221526225248214 +7565676654727668574665556666175766566653667465455626664555633676543465675755666645565566654645555666 +4745721722122215757215622524727444256942348717545353274725745555453234444732572254326652534437222662 +2434234123332521432433543122343412453334142442174323244323362343446443234344334334354343424444332232 +3232225263124251225251532224272298324231133226834123663224252253227733325232824571222312832152243222 +4443433336334445343343443432444434233334443432343675433321474334363243423234444421427442373432424444 +2528622135624531665357334382325366524622274846326245252623632442931344344686553345516652263563563344 +2233212123232112331212212222223222322132233322232222333122212232232213252322223342152221232232153323 +3133337557443333234243434633433322467325333343756334453343333343334453353334535324423334573349344364 +8497925152935233732523223852696633133816242673326874262931173827238284722131232527573292228932314729 +3242443243122343443133222435222312213214254283123234336231616434325123223631342644222542343253421533 +6443257368735277857353954743366633958737346734243626663752259329635337635643425367875165555749634736 +3433332441231132312432441432211144132311432432231312123131111112123341214231141341112433433331156789 +2622332343221232241335222222343332212234322252243322233242346312122233223332323222522223321422422322 +3972265296526213223133522588332357758222292253177621632572233246643332363736661578228493422762563226 +3494543445353433344448833521556833234423324452636533255257543455344342646458333443532535343444535334 +4676538343538565343353455455553967756631663666538333674336345766835335653396563345373429866382636544 +1222122232121223223233122132331222283232113222252242322332231112122222233223213322222122233232223222 +3134225414344236633244332422122644572337356413663633373234446446364474243446624549545245762435276634 +4222142222214222251664242724292122312222212123222222225421642233224112222741229323222124224111122122 +2373328274625382475124241922213111252123435232222322722252219331232224234142526234272123515129242232 +5544543358645255454724445444345446544442344445352244347365654443463433245543454444353535644445224224 +4446655724343346755425544416598555246352254245425544865646452382644844876664355544234743251446442933 +2112222232125222222222321222222125222221332222221122211221222122222223422211322222222222122542221222 +3222323622235231222312323333133223323222322422321333122322213732212322322123221122222212222223232213 +1122224322322232223221622226223121122452222542523122322252222432123323412223212242132353212222222222 +4333425336554443454458124553525366364236624352255426246366354563663525636534335863554452324546366625 +2146233244324244314449343222474432322242443224532323142483226244332354232334122548734374243933442774 +1332324245522322224234221212322221322283263213352122222222223521262222512212512222243231281223322222 +1223143223364224122222353333332422222225222432243232332343223239233333211222333322223223324321124224 +3464487424246534432675344132562554213223266443252443444444574323726424344834421627245244334534456235 +2223221222123311232222721212232421222222242241226222232312215222231223124321332442545132213222223222 +2232342333222225413224224234232122232222332332233823312322233222233423321322333232321622333132226212 +4233234343136422333221334434324433422433423224244234622242332313427433524233223522242345255442443343 +5887315931336232922652422972482265594294593395515537627975525242715825417429226928725375224464921127 +6656885665436489796564766657452646775784788585557613664375576543655367345676363664456676364565656665 +2322423242232241161422432223231221222221621422252222222322338333221232122213331212249343212133328423 +7543345463444634356562266635446632182453232355315333571457578355735657643433234412544433664576626623 +3234222143232332434132232223223222432233233224332212442243323242222433423323322332227222624354421352 +2132422513522232316232332233232532324232635222425433224522251242225332211222621455223212442432451421 +5326232325252326521226524346423521176572132222254322754222123162226227224426253652326256245561222565 +3442424243423144141423336561332225163336641334145422622623522532559424623252225433152324126546235233 +3422321224221314732123313232523126612213222122324334223423342252222433232133212323322223142322221242 +8264442752223446994865726277726727756343878473857483728256427474473632713865355533668957575367786675 +2354836226222532428425542623362343536646226212222532351332434562123232223452424227655641632221762233 +5664534552344446442444537443454546344244645454436456146563415422332464433456443445643424314646346634 +6463565542544255264485555545353644246556635644484654644555446454435673446655443555732565945656567236 +6355655665527692545684584653566652554819768774545765878425567322656664568624656574587564574572366385 +3234635425722737232252335242266522272537232322282236835677286645635172541234473773221373163223424634 +2242354522559228525413357172723135198226136232442322256572434325143963523321922328233243342344645272 +1222322222223222132223222153211223323222212133524121121132122221225322222223345222222325225212222522 +1233232223244415224123423222313272242282263533254422322211232222221522232222232231321222432222132322 +4554634644453466369563686376545543644474635669644434556646363654657434543464664436534656334934456564 +2759365842345327331433223323933692623533364924333372274833594632288683535939326332224122731332325133 +2236245252222212216122226252225422322222929211213522328122221622222332223222211312251262422221363711 +2322219151212838742722222831242221612121221442128322212621262222224222272222212241214121228225222235 +8654666752657568667665843686673568558727666766668546662365484318268665555864884585768766545657476766 +4323662222424553233338223355533524329375214455362223863532553356156646364581336234636322666463164321 +2251222221132121212222222222323221122212227212222112232522512212211125221121232222222222121512222222 +8335363283543566442636253665533444335323131413453535433332353253126334234443246535465333443767534445 +4351244143435244333421443343412434324224347231545244278455457334255232446544244442334345864522323554 +6423477564644426547555464455945555345254457454754445593334544343756445554584764334355754436735534375 +3326244234233341332632432332423551339222222343325373415334342321533123222323332331523632331924343233 +2322222212222425432122222232222221624312222223233121124222221222122333222222334233224222124122222242 +8251448334422852181781163234764634754342482156661134615731214484221431832655823545764714858131321319 +6665545676626665656565454566656674652665656532943465954566556559666556665444696669565976665645666566 +1421443224322321222223232132222322523422273223221226324223622234313152242214232212214122122122223122 +5723366361747394534563454393673232443632544354432566235442477666343636365464734433344454232365277632 +4326724434644345272343434636222544564528544653524234333435432725367686233125243347543233538354734535 +6413258266442636453636253232443235232151532243562512524323414232335225232525322536245321442222433234 +3344315434434335222444645333534323252552525223654424445134123324235475533333754254334434412464433436 +2322363422225726126633232313332242431333635246316294232723332253223524432225353672642232346223452424 +3324142234845637532347244733333464724844532372247332342332534454443223343733332451453641733332337247 +7337536327433333523313232233333335663462235342527341215333333312353133231533355312234437581223433313 +6864534546668468595746496547766759676656466556436588644845499637688686773646793563465569745692643655 +3355252311225229253132526372333323468222222462232352123343323153225532334523432412324422225412324253 +4741456744554566558585637656545845844939484345384344956545565448427473734546453346746455365647546644 +4322411232232333223322333242422422422349221123222244332252135132232321363391342331221133233242112322 +9474349344693856956976575499438338936763458744948576959895532598674748534597986884674856393374467595 +1523633734318365434557152166343555421587416555334154526346464574453744545413624314233574254324333338 +7434822223365329743422655982332652199724488556213687413364776632715225357925244447743972634262467445 +3311715122232222222352222253152252223212121622212222224127222252241242312142212272222325636223122112 \ No newline at end of file diff --git a/day03/run2.pl b/day03/run2.pl new file mode 100755 index 0000000..b82b64e --- /dev/null +++ b/day03/run2.pl @@ -0,0 +1,243 @@ +#!/usr/bin/perl +use strict; + +my $sum = 0; + +while(my $line = ) { + chomp($line); + my @digits=split(//, $line); + my @p; + my $largest = nextpartR([], \@digits); + print "Bank largest is $largest\n"; + $sum += $largest; +} +print "Sum is $sum\n"; + + + +sub nextpartR { + my($ref, $remain)=@_; + + if(@$ref == 12) { + my $num=join('',@$ref); + return $num-0; + } elsif(@$ref + @$remain < 12) { + return undef; + } + + for(my $largest = 9; $largest > 0; $largest--) { + my @cp = @$remain; + my $result = 0; + while(@cp) { + my $num = shift(@cp); + next unless($num == $largest); + my $r = nextpartR([@$ref,$largest], [@cp]); + if($r > $result) { + $result = $r; + } + } + return $result if($result>0); + } +} + +__DATA__ +6483266694748235893324353634344523834567333718239477213324541343624714732212276727733744455653544463 +2543337317334342631273222374427553353272735227457653731534224733335623431363332212323533535333423775 +1171775673654754637242647675223455221523371731424421454256532546527447416736647162614542361475612389 +7567565743232354274324358254636933332327665424362432136332633378463931143733733333654177443634254225 +3667833563742535642357424443583444433164255464664643343695632444543476364514454626548444625765354499 +2729241222329123457422528225142242286297497441472728464675615243626217526319294335298622221564523151 +2325333232221221424422233712312233332414242223244343332373222423342332223232222224323113324424134121 +3544334476455533445454545534445436354424551344431543444135385564453544474354339443944434454242338755 +6923523553724555826545455454545465563455525532385543558554555555235643434455534555456645559345424222 +3713331131214132232632357628271236732756335334225557312633533322223433322332227173323322633433254922 +5542244352122346423342223444284353436224323233344224255121322454331242716436354234143274135135334244 +7162743447536295246796527676468385557236589519624462613223526836654621342279883474452325226263273139 +4471332775232839457784856429322785267271415576235256224744379223362354163425322422353251335223748294 +4346211424422222426522412332342223124232433521222212522622224522222322922122242321289322241212612248 +3933333344435332633335343333326333324324321343333324332323334233633323232443433333433133293233343433 +6585685274872474256868558658651539948458889788546584884556944395687334789354443387445242654964945955 +3444423533535542244342273333734333465764442334363243233342554334835822354446554325635232363334544548 +2563356752365526724855523276722277363574179457365743447387745757634578562526634617646444554863768526 +2242522423343223422432453234862232223322221132313423324224232226324222322292214127211224412315341423 +2225142225732522238462261322432443222172541743212222131225232222324223225172352623222125222226242212 +2323363432242323342311333232252133323413248233531234343423351422344524534342435211444332343233439442 +3124262532255282347432332294321135222362424972252223112182152324318322321252222112253222225322411222 +2245334552331524253681344534348345442133513353454238459543534745465382334735454123343442423442443934 +3322422222222223122222222222224221222112222232222222223522323121222213122222121223422232122222131232 +7236535664653565535465635366422265436332242234453634547553232665533563443734353355633544265445562333 +3362228222422133327322222772233322323532313242322212322242351322234225224213233542333144332333732232 +5342533334512341534142525424221433122414422241514334245311143541342335344222332112111535425322226789 +2222243214211225332122232722325213322322423225222332422243224322212131234322342411431242521333111132 +2431332622213122222213323233222342233233313224232242324234213522233121413222432153323432413214232234 +2632254426445554463233675543663354252364264273442465369374465344265346322555224345426232653752624455 +2224252122263212222122242313222322625222114243221342222222324122326121222213253142212212212332122364 +5674534466565636646662676545665534646635666365564665664467564666456654668593362444446744666554554766 +2454222496229621242121264211225262657254244599227752543642596753262384425725522523262558272113785222 +4333432323883373233343244735353323242136522336393337312342133733333737585447336353334312334233239323 +3332433332632332242243333552322345444322433333345334432744333233323424132333334222323463833284523413 +3225241811225112222441225224646162357422421132224244342443617633253321224223252264222625752131322232 +4142322221482422527722132262152123222226422234241226221372232422324226232222221444222443222222442221 +2122112112142212212211232121221222211222212222312234222222211232222222223222222322212322121221222122 +2222222124223222212223224331223222222326242213312222222222212213224221233221321222322222212132351222 +2215272212212212522332314222232521222232222521242222212531222352522312512221122423322312132252251622 +5436526445378684424444568445542446553648689488566256934745476233465425455768458459649634966485652754 +1422422222243422422522234212312441122422233132242233322231331227221441425221242224221242222412312228 +8231222334221221741123232222232152322232315112422323221722322421322352323271121232312214124212232323 +3325242234162322342135122233155454333332422322233455243222233323823223332142212313335332223241223333 +4355434445222544414334245223344754544163753444544243558755432234535445443344142335537441342345446474 +1336312223124525222322223222222213232342243323253221361234446112263212426251322332225112221253222233 +5367888866834536575377596677847443874839579585537663878498345777388579874847657388547557778388818978 +2222213321112122221111232422112222122223221312311222222131322332212322122322131232232132131222232123 +3319333223232123222212223528122362522252273222226227732322322223232422222422522322431371432222222232 +4355789657548436447545456596283356475869755625945566544654679445655355546846875533957745363857553589 +5235225434349223431221222424313242712267423544361221222222432412229272243123723224342524222212632342 +2232231222122221223724222422222125252223122321222232251223222222222224322222453212121222223341222221 +5335333343343333323223232734333333233333332333333333311333333333443133231163334332323332333334323463 +4255625361645633666646124144326161525216345554523444653556146322361311515343261335365113243661233789 +7638667436624684272673416624275555636244728456452876428697425422424259567247763874791543766747372775 +3141123121222122233433211221222322221415211223222232222112221323222222214312412312222222224222232225 +3263325433434645353436644264134498453455335834345444242346367354926234874355635644547423347374434443 +1332323273353313234322223334314333332133731353332373323223327333323323333626322347333682322332333333 +6463656765552554543425465563446455656563555455545563554535554853535655545655553548556745535538457455 +3342333133334332433231323232223333333232392232332442322331233333322132423632422282238312383323333223 +2239121232221122222221642224222152222112223221122212232325422521124212442231223242222313522422121283 +2222162222222172222222221221112262132323112222323212421222222132226231222222212223222222244222123222 +3187737233433234335276133212333147245233337362234333126333243134333353227422213242224252522627332123 +4532432376547655675765547764667466877716765473677694554655366743365573554745575736644564576556965855 +5336333374522244425439832113542436353233123232543534342335224132212125323322653232232223233343633562 +3632763655342634236354433162354345234437531354343564134386374437451476636364473437247454232643345433 +2231322422125242242122214222222172122214222122312252221222122224422124322222221124232222222223323411 +4343242244223252454116323222222111124322221422152322522621242252333283221223253422441354223225232353 +4733234344423243544433655552447441554644654354445433232534534522144534453434484123596594534564235243 +2242324335312322343323333334222223513523322413323133534352324433233334433334523233232323522432213223 +5664154336445666586466665822868667436646448646574566655654531564345646667566564366565356566454565463 +2243624221242162522322171325223532451332126472211123222274224334222223233422226221632322231422123222 +2121232232222332233332222222232212222222112242252122322422123222231132122222112341222122231211212221 +2222222223222113222232322222312221142322223333121222322232313322424222322123223422112223222233222313 +3351253554553235543435435432424433436649153196594374552542143345255545443494452444446455436234367546 +3241224772334661376724457242123523612145222752236442126633762256448232425611684252244225134252684324 +2569464654525636566535646646266655647666486763585683566656464486544667656654644644156667676243666586 +2382324222332222244447232233322572322223243222221422219222231322231222825162123922527332212224313325 +4633421245214332232234444426324243423431225513232342433322223132534212323224133342293321242423313354 +3323223252712538235234333613421472592337232341221333327923237322346131321733378124233222143331214389 +3441456554443634514434423348343244343334414934354346374444442443564645424565443953442444433244236443 +2226222221322152342212272622211121325743254222221223332232112221342243132232216242223232624232232422 +3232342241212243222423423313121222234241243233523322353433163322325322332323213232233223322232321413 +3221652432352232564241242242231524222224261231215352244222532554255152242567243221427245211124252222 +2221222142213111212222222424162222132252224222122225222284322224321162524312222211122221122142222221 +5335313543133432353344723323322346313732352334545142262332335133633433644233333634335235333543323354 +5434564663455635666754354454454453465541545545544555553554533454535435555364353343555566354544455145 +5252551148532423644724269592229555342433225273533524123134724325552532324348213234824252373335427325 +5856686513557539652366563544665675566443674579553566479656787777665534667354446457256657667864556465 +1251222232221231222223222222233222213331222222322211322222212221223222322322222212122222233322212422 +8458546645558756745657566656465566564565865555466745554556556676565786666556555665553658656585655556 +3432323239345643435333333333332353333337432343243633334253752353233342224334553333233313333393533553 +3421422362212422252232633328842222332323633222322233112336322321234523223222522222222424222233334231 +2123625336322625334512112243442224543555521424235253452532153223126465623551122254443224432523453525 +4122221543722232275516326144842223112823224222231222221122124222222262152221411322244125746222356778 +2322422222224122243424226322344835262425252111121223451222223234432162221226222212242213222633127233 +8434432236341443628422391263414236223173333438544421383847216542247624123365692613327333754535435243 +2652624354532763656244344355474341443223256424648253744256344172555215334857439454543663333134287743 +7357546615466634433443573336674233554454227313242344244643244344333737543646731174537524373356531242 +3882559275526542566532556564565255286724325665653727346734533476221733134455246561852322323591516576 +3324342323323336353363233333732313323231313334372252133122122234113412132333334313332222532323223225 +5648657452244467531938536766623967836658674751368875384543688794429466647543224146436626426786644693 +2411225564532222522462422431622243322531264124234153152144352424234215122353341233123232124224322412 +4222244444245423522434212441442345545135432342122442441444525244242542243333244443342525244434443233 +5465435555966664455444553336236556663724633434394665343662439454644352635444663948624664445224246545 +1432453433446393425346434245514432413453343353335242445434336552234231531543533443435374425324412252 +4336572233323134323444342354334334547453436543544333344444244423543543446437732361245333334265334454 +2676766556687553276876274579178576652387264737666476787497543476721452354347415279755657774467276664 +3344333322223432324242213231632223223333213221422323132323234522231323442233323232652233323314343254 +5563746886467958543795793558734554479385547744827467647476986636777562776695684678649689788685475659 +4422233522213432344333343133223123212233443434622344344322413411423122322312245323212232213242242334 +3344622322422423222243244224214432442336424334262521443223343322633135324463233412322314233512534242 +3232321712232121212212223232262552223244112235142362365223332222223233326336552241222145222222346264 +3644565538765869435533562635188694756636566645546767565399364946666665237666774651366664976963675667 +3945556445535346464334234433543343373464435445544534644436433274645292244533433356524354433344444545 +7645578859533418887755944347764436445126484186538387754736853734354838367544543436534748684774783975 +3786228343532223264261123222243523734242633532221216324264146232126342128444245322552455433862432252 +3251222222232911232222524222252222712222233112242222616232212123322221232313232223322352121221323322 +2322412234122243452551332442313522545253525222141114353732322522222362422214234542222221526225248214 +7565676654727668574665556666175766566653667465455626664555633676543465675755666645565566654645555666 +4745721722122215757215622524727444256942348717545353274725745555453234444732572254326652534437222662 +2434234123332521432433543122343412453334142442174323244323362343446443234344334334354343424444332232 +3232225263124251225251532224272298324231133226834123663224252253227733325232824571222312832152243222 +4443433336334445343343443432444434233334443432343675433321474334363243423234444421427442373432424444 +2528622135624531665357334382325366524622274846326245252623632442931344344686553345516652263563563344 +2233212123232112331212212222223222322132233322232222333122212232232213252322223342152221232232153323 +3133337557443333234243434633433322467325333343756334453343333343334453353334535324423334573349344364 +8497925152935233732523223852696633133816242673326874262931173827238284722131232527573292228932314729 +3242443243122343443133222435222312213214254283123234336231616434325123223631342644222542343253421533 +6443257368735277857353954743366633958737346734243626663752259329635337635643425367875165555749634736 +3433332441231132312432441432211144132311432432231312123131111112123341214231141341112433433331156789 +2622332343221232241335222222343332212234322252243322233242346312122233223332323222522223321422422322 +3972265296526213223133522588332357758222292253177621632572233246643332363736661578228493422762563226 +3494543445353433344448833521556833234423324452636533255257543455344342646458333443532535343444535334 +4676538343538565343353455455553967756631663666538333674336345766835335653396563345373429866382636544 +1222122232121223223233122132331222283232113222252242322332231112122222233223213322222122233232223222 +3134225414344236633244332422122644572337356413663633373234446446364474243446624549545245762435276634 +4222142222214222251664242724292122312222212123222222225421642233224112222741229323222124224111122122 +2373328274625382475124241922213111252123435232222322722252219331232224234142526234272123515129242232 +5544543358645255454724445444345446544442344445352244347365654443463433245543454444353535644445224224 +4446655724343346755425544416598555246352254245425544865646452382644844876664355544234743251446442933 +2112222232125222222222321222222125222221332222221122211221222122222223422211322222222222122542221222 +3222323622235231222312323333133223323222322422321333122322213732212322322123221122222212222223232213 +1122224322322232223221622226223121122452222542523122322252222432123323412223212242132353212222222222 +4333425336554443454458124553525366364236624352255426246366354563663525636534335863554452324546366625 +2146233244324244314449343222474432322242443224532323142483226244332354232334122548734374243933442774 +1332324245522322224234221212322221322283263213352122222222223521262222512212512222243231281223322222 +1223143223364224122222353333332422222225222432243232332343223239233333211222333322223223324321124224 +3464487424246534432675344132562554213223266443252443444444574323726424344834421627245244334534456235 +2223221222123311232222721212232421222222242241226222232312215222231223124321332442545132213222223222 +2232342333222225413224224234232122232222332332233823312322233222233423321322333232321622333132226212 +4233234343136422333221334434324433422433423224244234622242332313427433524233223522242345255442443343 +5887315931336232922652422972482265594294593395515537627975525242715825417429226928725375224464921127 +6656885665436489796564766657452646775784788585557613664375576543655367345676363664456676364565656665 +2322423242232241161422432223231221222221621422252222222322338333221232122213331212249343212133328423 +7543345463444634356562266635446632182453232355315333571457578355735657643433234412544433664576626623 +3234222143232332434132232223223222432233233224332212442243323242222433423323322332227222624354421352 +2132422513522232316232332233232532324232635222425433224522251242225332211222621455223212442432451421 +5326232325252326521226524346423521176572132222254322754222123162226227224426253652326256245561222565 +3442424243423144141423336561332225163336641334145422622623522532559424623252225433152324126546235233 +3422321224221314732123313232523126612213222122324334223423342252222433232133212323322223142322221242 +8264442752223446994865726277726727756343878473857483728256427474473632713865355533668957575367786675 +2354836226222532428425542623362343536646226212222532351332434562123232223452424227655641632221762233 +5664534552344446442444537443454546344244645454436456146563415422332464433456443445643424314646346634 +6463565542544255264485555545353644246556635644484654644555446454435673446655443555732565945656567236 +6355655665527692545684584653566652554819768774545765878425567322656664568624656574587564574572366385 +3234635425722737232252335242266522272537232322282236835677286645635172541234473773221373163223424634 +2242354522559228525413357172723135198226136232442322256572434325143963523321922328233243342344645272 +1222322222223222132223222153211223323222212133524121121132122221225322222223345222222325225212222522 +1233232223244415224123423222313272242282263533254422322211232222221522232222232231321222432222132322 +4554634644453466369563686376545543644474635669644434556646363654657434543464664436534656334934456564 +2759365842345327331433223323933692623533364924333372274833594632288683535939326332224122731332325133 +2236245252222212216122226252225422322222929211213522328122221622222332223222211312251262422221363711 +2322219151212838742722222831242221612121221442128322212621262222224222272222212241214121228225222235 +8654666752657568667665843686673568558727666766668546662365484318268665555864884585768766545657476766 +4323662222424553233338223355533524329375214455362223863532553356156646364581336234636322666463164321 +2251222221132121212222222222323221122212227212222112232522512212211125221121232222222222121512222222 +8335363283543566442636253665533444335323131413453535433332353253126334234443246535465333443767534445 +4351244143435244333421443343412434324224347231545244278455457334255232446544244442334345864522323554 +6423477564644426547555464455945555345254457454754445593334544343756445554584764334355754436735534375 +3326244234233341332632432332423551339222222343325373415334342321533123222323332331523632331924343233 +2322222212222425432122222232222221624312222223233121124222221222122333222222334233224222124122222242 +8251448334422852181781163234764634754342482156661134615731214484221431832655823545764714858131321319 +6665545676626665656565454566656674652665656532943465954566556559666556665444696669565976665645666566 +1421443224322321222223232132222322523422273223221226324223622234313152242214232212214122122122223122 +5723366361747394534563454393673232443632544354432566235442477666343636365464734433344454232365277632 +4326724434644345272343434636222544564528544653524234333435432725367686233125243347543233538354734535 +6413258266442636453636253232443235232151532243562512524323414232335225232525322536245321442222433234 +3344315434434335222444645333534323252552525223654424445134123324235475533333754254334434412464433436 +2322363422225726126633232313332242431333635246316294232723332253223524432225353672642232346223452424 +3324142234845637532347244733333464724844532372247332342332534454443223343733332451453641733332337247 +7337536327433333523313232233333335663462235342527341215333333312353133231533355312234437581223433313 +6864534546668468595746496547766759676656466556436588644845499637688686773646793563465569745692643655 +3355252311225229253132526372333323468222222462232352123343323153225532334523432412324422225412324253 +4741456744554566558585637656545845844939484345384344956545565448427473734546453346746455365647546644 +4322411232232333223322333242422422422349221123222244332252135132232321363391342331221133233242112322 +9474349344693856956976575499438338936763458744948576959895532598674748534597986884674856393374467595 +1523633734318365434557152166343555421587416555334154526346464574453744545413624314233574254324333338 +7434822223365329743422655982332652199724488556213687413364776632715225357925244447743972634262467445 +3311715122232222222352222253152252223212121622212222224127222252241242312142212272222325636223122112 \ No newline at end of file diff --git a/day04/run.pl b/day04/run.pl new file mode 100755 index 0000000..a365ad0 --- /dev/null +++ b/day04/run.pl @@ -0,0 +1,189 @@ +#!/usr/bin/perl +use strict; + +my $totalsum = 0; +my @rows; +while(my $line=) { + chomp $line; + my @row = split(//,$line); + push @row, '.'; + unshift @row, '.'; + push @rows, \@row; +} + +my $tr = $rows[0]; + +push @rows, [ map { '.' } @$tr ]; +unshift @rows, [ map { '.' } @$tr ]; + +for(;;) { + my @remove; + my $sum = 0; + + for(my $y=1; $y<@rows-1; $y++) { + my $uprow = $rows[$y-1]; + my $row = $rows[$y]; + my $downrow = $rows[$y+1]; + + for(my $x=1; $x<@{$rows[0]}-1; $x++) { + next if($row->[$x] ne '@'); + + my @n = (@{$uprow}[$x-1,$x,$x+1], @{$row}[$x-1,$x+1], @{$downrow}[$x-1,$x,$x+1]); + my $count = grep { $_ eq '@' } @n; + if($count < 4) { + $sum++; + push @remove, [$y, $x]; + } + } + } + $totalsum += $sum; + if($sum == 0) { + last; + } + foreach my $ref (@remove) { + my($y,$x)=@$ref; + $rows[$y][$x]='.'; + } + print "Found $sum\n"; +} + +print "Got a total of $totalsum\n"; + +__DATA__ +@@@@@.@@@@@@@.@.@@@.@@@..@@@@@@...@...@@...@@@@@@@@.@@@@@@@@@@@@@@@@@...@@@..@@@.....@..@@@@@.@@@@...@@@@@@@@@@@@.@@@@@@.@..@@@@@..@.@@.. +...@@@.@@@..@@@@..@.@..@@....@@.@@@.@...@.@@@...@@.@@@..@@@.@@@..@.@@.@.@.@@..@@@@@..@@@@.@@@@.@@.@@@@..@@.@@.@@.@@@@.@@.@@@@@@@@.@.@..@@ +@@.@@@@@@..@@..@@@@@@.@@@@@.@..@@@@@@@.@.@@.@..@..@@@@.@@.@@@..@@.@@.@@.@.@@@.@@@.@@@@@@@@.@.@@@@..@@@..@@@.@.@.@@@@.@@@@@@@@@@..@...@@.@ +.@@@@.@@.@@@.@@@@@@@@@..@.@@@.@@@.@@@@@@.@@@@.@...@@@..@@....@@@@.@.@.@@...@.@@@..@@@.@@@@@@@@@@@......@.@@@@.@@@@@@.@..@@@@.@.@.@.@@@@@. +@@@@@@@.@@..@@@@@@.@@@@@.@@@..@.@@@@.@@@@@..@@@@@@@@@@@@.@@@.@@@.@@@.@@@.@.@.@@.@..@@..@@@@..@.@@.@.@@......@@@.@.@.@@...@@@@@.@@@@@@@.@. +.@...@..@@@..@@@@@@@@.@.@.@.@.@@.@.@.@@.@.@@...@..@.@.@@@.@@@..@@@@@@.@@@@..@@.@.@@.@..@.@@@@@.@@.@..@@@@..@@@@@.@@@@@.@.@@.@@@..@...@@.@ +.@.@@.@..@.@.@.@@@@@.@.@@@@.@.@@@@..@@..@..@.@@@.@@@.@@@.@.@@@.@..@@@@@@@@@.@@@@@@.@@@@@@..@.@@@@...@.@@@@@@.@.@@@@@@@@@@@@@@@.@@..@@@@@. +@@@...@.@@@.@@@@@@.@@@@..@@..@@.@.@@.@..@@.@...@@@.@@@.@@@.@.@@@@..@@@@.@@.@@@.@@@.@.@..@@.@@..@@@@@@@....@@@@@@@@@@@.@..@@.@.@@@@@.@@@.. +@@@.@@.@@...@@@@@@@@@@@.@...@.@...@@@@...@@@@@@@.@@....@.@@.@..@@.@.@.@.@...@@.@....@@..@..@.@@@@@..@@@@.@@@@@@..@@.@@.@..@@@@@@@@@.@@.@@ +@@...@@@@@@.@.....@@@.@@@@@@..@.@.@.@@@.@..@@@@@@.@@@@@@@@.@@@@@.@@.@.@..@...@....@@@.@@@..@@@@@@@@...@..@@@@@@.@@@@@@.@@@..@@@@@@..@.@@. +@@...@@..@@@@@...@@@@@.@..@.@..@@.@.@...@.@@@@@@@@@@.@...@@..@@@.@@@@..@@..@...@@@...@...@.@.@.@@..@@@.@@.@@@@@@@@.@@@@@@@@...@.@.@@.@@@@ +.@@...@@.@.@@.@@@.@.@@@..@@@@@@.@.@@..@@...@@.@..@@..@.@@@.@@@@@@@@.@@.@@.@@@@@@@..@@@.@@..@@@@.@.@.@.@@@@.@@.@.@@@@@@@@..@@@@.@@@@..@.@@ +@.@.@@@@@.@..@@.@@....@.@@.@@@@@@@@@@.@.@@@.......@@@@.@@..@@.@@.@@@.@@@@@@@@.@.@.@.@@@.@@@@..@....@.@@@@....@...@.@@.@@@@..@......@@..@. +@....@@@@@@@@@@@@@@@@@@.@...@@.@@.@@@@@@@@.@.@@@@@@@.@@@@@@.@@@@@@..@..@@..@....@..@@@@..@@@..@@@@.@.@@@.@.@....@@.@@...@@.@.@.@@@@.@@@.@ +@.@@@@@.@@@@..@@..@@@@...@@.@@@@@..@@.@@@@@@@@@@.@@@@@@@.@..@.@@.@@..@@@@.@@@@.@@@.@.@..@@@.@..@@@.@.@@@.@@.@@.@@..@@@@@.@..@@@@@@@@@@@@. +@@@@.@@@@@.@@.@@@@@.@@@.@@@.@@..@@@@.@@@..@.@.@@@@...@@.@@@.@@.@.@@@@@@.@.@@@@@@@..@@@@@@..@@@.....@.@.@@@@@....@.@@..@.@@..@@@@@@.@@@@.. +@.@@.@@@@.@@@@@.@@.@@@@@.@...@@@.@@@@.@.@.@@@@@.@.@@.@@@@...@...@..@.@.@@@.@@@@@.@@@@.@.@@@.@@@@@@.@@@.@.@@@.@@@@..@@@.@@.@@@@@@@.@@@@@@@ +...@.@@.@@@@.@@.@@@.@@@.@..@..@@..@@@.@@@.@.@.@.@@@..@.@@@@.@@.@@@@@@@@@..@@.@@@@@..@@@@..@@..@.@@.@@.@@.@@@..@.@@@@.@@@@@..@@.@@.@@@@.@@ +.@@@....@...@@@@.@.@.@.@@@..@..@@@@@.@@@..@.@@.@@@@@@.@@@@@@@@@@@..@.@@...@@.@..@....@.@@.@@@..@..@@@@@.@.@.@.@.....@@.@@.@@@@.@.@@@@@@@. +.@@.@.@..@@.@..@..@@@.@@@@@@.@@@@@@.@.@.@@.@@@.@..@..@@..@@.....@@@....@@@@@..@@@@@@....@@@...@@.@...@@@.@@@@.@.@@@@.@@@@@.@.@@..@.@@@.@. +.@@@@.@@.@.@......@@@@@@@.@@.@@..@@@@.@@.@@@@@@..@@@.@@@..@@..@.@@@@@..@......@..@.@.@..@@.@@@.@.@@@.@@@.@@@..@@@@@@..@@@@@@...@@@@@@@.@@ +..@@.@@..@@@..@...@@.@@@@...@@@.@@@@.@@@..@@@.@@@.@@@@.@.@...@@@@@.@@...@@.@@@.@@@@.@@@@@..@.@@@@@@@@@@@..@@@@@@..@@@.@@.@.@.@@@@..@..@@@ +.@@@@.@..@.@@@..@@.@..@.@@@.@@.@@.@.@..@@.@..@@.@.@@..@@@@...@.@@@..@.@.@.@@@.@@.@@.@@@..@@@@@@@@@@@@.@@.@@@@.@@.@@@@@.@@.@..@@....@@@@.. +@..@@.@@@@@.@@@@.@.@@@@@...@@@@..@@@@@.@.@@@..@@@@....@@@@.@@..@@@.@.@@.@@@@@@@@@.@..@..@@.@@@.@@@.@@..@.@@.@@..@@..@@@@@.@..@@.@@@@@@.@. +@@@@@@@@....@.@.@@@.@....@@@..@.@....@@@...@@.@.@@...@@...@.@.@@@@@@....@@@@.@@..@@@@@@.@@@@..@.@@@@@@@@@.@@.@@@.@.@@@..@.@@..@@@@..@@.@@ +@...@@@@@@@@.@@@@@@@..@.@.@@@@@...@@.@..@.@@@@...@@@...@@@@@@@@@@@.@@@@.@@@@@@.@@.@@@@@@@.@@@.@.@@.@@.@@@@@@.@..@@@.@.@.@...@@@........@. +@@@.@@.@.@.@@.@@@@..@@.@@.@@@..@@@...@@@@..@.@@@@.@.@.@.@@@.@@@@.@@...@@@@@.@.@@.@.@@@.@.@@.@@@.@@@.@@.@@@@.@...@..@@@.....@@@.@@@.@@.@.@ +@.@.@@..@@.@@@@@@.@@@@@@@@.@..@@@@..@@.@@..@@@@@@..@...@@.@@.@.@.@.@@@@..@..@..@@@.@..@..@@@@@.@.@.@@@@@.@@@@@.@.@@..@@@@@.@@@..@@@@@.@.@ +@@..@@@.@..@..@@..@@@@.@@@@.@.@@@..@.@@..@@@.@.@@..@.@@.@@@.@.@@@@.@..@@..@@@..@@@..@@@...@@.@@@@..@@@@@@@@.@@..@...@@@..@@@.@.@@.@@...@@ +@...@@@.....@@@@@.@.@.@@..@@....@@@@@.@@@..@.@@@@@@@@.@@@.@@@.@@@@@.@.@.@@.@@.@.@..@..@@.@.@@@@@@@@.@@.@@@@..@@@@.@@@@...@...@@@@@..@@@@@ +@@@.@.@@...@.@.@.@@@@@@@....@@@@@@@.@@@@.@@.@@.@.@...@..@@.@.@@@@@@@@@@@.@.@.@@@@@@.@....@@@.@@@@@@@@@@..@@@.@@.@@..@.@@.@.@..@.@@@@@@@@. +.@....@@@.@.@@@@@.@..@.@@@.....@.@@@.@.@.@@@.@@@.@..@...@.@.@@@@@@.@@.@.@..@.@@..@@@@.@@@.@@@@@..@..@@@@@..@@@@@.@..@@.@@@@......@@@.@@.@ +@.@...@@@@@@@.@..@....@@@@..@@..@@@@.@.@@@@@@@@@.@.@.@.@@.@@@.@..@@@@@@...@@..@@@.@.@@@@.@@@@..@@.@.@...@..@..@.@@@...@@@@@@.@..@@@@@@... +@@@@@..@..@.@.@@.@@@@@.@@@..@.@@@..@@..@@.@@.@@@@.@@.@...@@@..@.@@@.@@@.@@@@@@@@@.@@.@@.@@@@..@@@@@..@@@@@..@..@@.@@@@@@@..@@.@@.@@..@.@. +@@@@@..@@@@@.@@@@@.@@@@@@@.@@@@@@@@@@@.@.@@@@@.@.@@@....@@@@.@.@..@.@@..@.@..@@.@@@..@@@@@.@@@.@.@.@@@@.@@@.@@@@...@.@@@.@.@@.@@.@.@...@@ +@@@.@.@@.@@@@@.@.@.@...@@@.@@@..@@@@@@@@@.@@@@@@@@@@@@@@@@...@..@..@.@@.@..@@.@@@...@..@.@@.@@@@.@@@@@..@.@@@.@@@..@@@..@@.@@.@@@..@..@@@ +.@@@.@.@@@@@@.@@.@@.@@...@.@.@@@@...@.@.@@...@@.@@..@.@.@@....@@@.@..@@.@@@.@.@..@..@@@@@.@@..@....@@@@@@.@@@@@.@@@@@@.@@..@@@@@..@@@.@@@ +..@.@@@@.@@@..@@@@.@@@.@@@..@@@.@..@@@@@@.@@..@..@@.@@..@.@@.@@@@@@.@@@.@...@@@@.@..@.@@@.@@.@@.@..@@@.@..@.@@.@..@@@@@.@.@@.@@@@@@@.@@.. +@@@@.@@@@@..@..@@@.@..@@@@@.@@@.@@@@..@.@@.@@@@.@@@@@.@.@.@@@@@.@@@@..@@.@@..@@@..@@..@@@@@@.@.@.@...@..@@.@.@@.@..@@@@@@.@..@@.@.@@@@@.. +@@@.@@@@@.@@@.@@@@@@@@@@@@@@@@..@@..@@..@@@@@@@@..@@@.@@@@...@..@.@@@@@.@.@@...@.@..@.@@@@@@.@@@@..@...@@@.@.@..@@@@.@@@@@@@@@@.@@.@@.@@@ +@.@@@@.@.....@@@@@.@@......@@@.@@...@.@@@@@.@.@@@@..@...@..@@..@@.@.@@..@..@..@.@@@.@@@@@@.@@@.@@@.@@..@.@@.@.@@....@.@..@...@@.@.@@@@@.@ +@@@@.@@@@@@..@@.@.@@.@@.@....@@@...@.@@@@@.@..@@@.@@@@@@@@@@@@@@.@.@@@.@.@@@.@.@@.@@.@@@@..@@@@.@@..@@@..@...@..@@.@@@@@@@@.@@@@@.@@@@@@. +.@@...@.@....@@@@..@@.@@@@@@..@@@@@.@@@@@@@...@....@@@@@.@@.@@.@..@@@@@@.@...@@@@.@@@.@@@@..@@.@.@.@.@@@.@..@@@...@@@@@@.@@@@..@...@@..@@ +.@...@@@@..@@@@@..@@@..@@@@@@@.@.@@..@..@@.@..@@@@@.@.@@.@..@@@@@..@...@@.@@@.@@.@@@@@@..@....@...@@@@@@@.@@@@@.@@@@@@.@......@@.@.@..@.. +@.@@.@.@@@@@@.@.@@@.@@...@.@..@@@@@.@@@.@.@@..@.@.@@@.@@.@@@@@@.@@@@@@..@@.@..@.@...@@.@@@@@.@@@@.@@.@@@@@..@@.@@@@@@@@@..@@@@.@@.@@@@@@. +@@.@.@.@@@.@@@.@@@...@@@@@@.@.@@@@@.@@@@@.@..@@.@..@.@@.@@@.@@@@..@@@@...@..@@@..@@@@@.@@@@@@@.@...@@.@@.@@@@..@@@@....@@@.@.@.@@.@@..@@@ +.@.@@@@.@.@..@@@@.@@@@..@@@@@.@@.@...@@@@.@.@.@@@@.@.@@@.@@..@@.@@.@.@.@..@..@@@@@.@.@..@@@@.@@..@.@@.@..@.@@.@@@@@@@@@@@@@@@@@@..@@@@@@. +@@@@@.@@.@@@@.@@@@@.@.@@@@.@..@@@@@.@@@.@@...@@.@@..@@@@.@@@@@.@@@.@@.@.@@@@@@.@@@.@@@@@.@@@@.@.@@@@@..@.@@@@@@@..@@...@@@.@...@@@...@..@ +@@@@@....@.@..@@@.@@@.@..@..@...@.@@.@@@@@@@.@@@@.@@@.@@@@@@...@@@@.@@.@..@@@@.....@@@.@.@@@...@@@.@@.@@@.@..@..@@@@.@@..@@...@@@....@@@. +.@@@@@@@..@.@.@.@..@@@@@@@@@@.@@@@.@@@@@@@.@@@@@..@@@..@..@@..@@..@@@@@@..@@@.@@@@.@@...@..@.@.@@@@@@@@@@.@@@@.@@@@@.@@@@..@@..@@@@@@@@.. +@@@.....@@.@@@@@@..@@@...@@@@.@@..@@@@@@...@@@@@@..@.@@@@.@@@@.@@.@@..@@@@..@..@.@@.@...@@@@...@..@@@.@@.....@@@@@@@@@.@@@@.@.@@@@@.@@@@. +@@@@..@@@@@@@@@..@@@@.@@@@@@@@.@@@@@@@@.@@@@@@@@@.@@.@.@@@.@@@.@@.@.@....@@@@.@...@.@@@.@.@.@.@@.@@@@.@@@@@@@@@@@@@.@.@@@.@@@@.@@@.@@@@.. +.@@@.@.@@..@@.@@@@..@@@@@..@.@.....@.@....@@@@@@@@.@.@@@@.@...@..@....@@@@@.@@@@@@.@.@@@.@....@@@@@@@@@.@.@@.@@@@@@.@@.@...@..@@@@@@@..@. +@@@....@@.@@@@@@@@.@@@@.@@@@@@..@@.@@@@..@.@.@@@@@@...@@@.@@.@..@.@.@.@.@@.@.@@@@@.@@@@@...@.@.@@.@@@@@@@@.@@@..@@@.@.@@.@@@@@@@@@.@@@@@@ +.@@..@@.@..@@..@@.@@@@@@....@.@@@.@@.@@@@@@@.@...@@@@@@@@.@@@@@@.@@@@@@@@@...@@...@@@@.@.@@.@.@@...@@@@@@@@@@...@@@@.@@@@@@..@@@@@.@.@@.. +@.@@@..@...@@.@@@@@.@@@.@....@@@@@@..@@.@@@@@@@@@@.@@@.....@.@@@@@@@.@.@...@@@.@....@@@@@@@@@@.@@@@.@@.@@@.@.@.....@.@.@.@@@.@@@.@.@@@@@@ +@@.@.@@@...@@@@@@.@@...@.@.@.@@@@@@@@@@@@@@...@@@@@@@@@@.@.@@@..@.@@.@@@@@@@@@@@@.@.@.@@.@..@@@@@@@@@@..@.@@@@@.@@.@.@.@.@.@@@..@@.@@@@@. +@@..@@.@@@.@@@@@@..@@@.@.@@.@@@.@.@@.@.@@@@@..@@@.@@@.@@.@@@.@@@@...@@@@@.@.@@@.@@@@@..@@@@.@@@@@@@@@.@@@@.@@..@@@@@.@@.@@@..@.@@@@@@@..@ +@@@@@@@@@@@@@@@.@@.@@@@.@.@.@@@...@@.@@@.@...@@@@@.@.@@.@@@@.@.@@@.@@.@.@@@.@.@@@.@@..@.@@.@@@.@@..@@@@..@@.@@@.@.@.@@.....@.@..@.@@@@@.@ +.@@@....@.@...@@@..@.@@@@.@.@@@@@@.@@@.@.@..@.@..@...@@.@@@@@@..@...@.@.@@@.@@.@.@.@.@@.@@@.@@@....@@@@.@@@..@..@@.@@..@..@@@@.@@.@..@@@@ +@@@.@...@@@@@.@@.@@.@..@.@...@@@.@@@@@@@..@@@@@.@@@.@@..@.@@@@@.@.@..@@@@@@..@@@@@@..@@@@.@@.@@.@.@@@.@@..@.@.@..@..@@@....@@@.@@..@.@.@. +.@@@@@@@@@.@@@.@@@@....@@@@@..@@..@@@@@@@@@....@@@@@@@..@..@.@...@@@@@@@@@@@@@@.@@@@..@.@.@.@@@@@@@@@.@@@@@@...@@@@.@@.@.@..@.@.@.@.@.@@@ +.@@@@@..@@@@.@@@@.@@@@@@@@@@@@@..@...@@@@..@.@@.@@@@@@.@..@@@@..@@@@@@.@.@@@@@@@@@@@@.....@@@@@@.@@@@@@@@.@@@@@@@@@@@@.@.@@@..@@@@..@...@ +@.@...@@@......@@@.@@.@@.@.@@@..@@.@.@..@@@..@.@@@@@.@@@...@@...@..@.@..@@@@....@@..@.@@..@.@.@@..@@@@@.@@@@.@@@.@.@@.@.@@.....@@.@@@@@@@ +@@@@.@@@....@@@@@.@@@.@@@@@.@@@...@.@@@@.@.@@@.@@@@@@@@.@@@@@.@@@@@.@....@.@@@@..@.@..@@.@.@@.@@.@@.@.@..@@@@.@.@@.@@@@@@@@@@.@.@.@@.@.@@ +@@@@.@.@.@@@@...@@@.@.@@@@@@@@@@.@@.@@@@.@@@.@@@..@@@...@@@@@..@@@.@@@@@.@..@......@@..@.@@@@@@..@@.@.@@@.@@@@@@@@@@..@..@@@@@.@@.@@.@..@ +@@.@@@@@.@.@@@@@@@.@..@@@@@@.@.@.@@@.@@@@@@@.@@@@.@@@@.@.@@.@@@.@@@.@@@.@@@.@@@.@@@.@@@@.@@..@.@..@@@.@.@.@@@@@@@@...@@@@@@...@.@@@@@.@@. +@@@@@..@@.@..@....@@@@@@@.@@@@@@.@@@@@@@@@.@@.@@@@.@@@@@.@..@@@@@@@@.@....@@@@.@@@@..@.@@..@@@@@@...@@.@@@@...@.@.@.@@@@@@@..@@@@@@@@@@@@ +@@.@@@...@@.@@.@.@@@@@@@@.@@.@@.@...@@@@@@..@@.@@@...@@@.@@@@@@.@@@@.@@@.@@..@@@@@@@@@@@@.....@..@@...@.@@@@@@@..@..@.@.@@@@@@.@.@@.@@..@ +.@@@@.@@.@@.@@@@.@@@@.@@.@.@...@.@@......@@.@@@@@@.@@@@@@@@@@@@@@..@@@@.@@@@@@.@@@@..@@.@@.@.@..@@@..@@..@@@.@@@@.@@@@.@@.@@.@....@@@..@. +@@@@.@.@.@@@@@.@...@@@@@@.@@@.@@@..@@@@.@.@@@@@@@@.@..@@...@@.@.@@@@..@@@@@@...@..@@.@@@@...@@@.@@@@@.@@@.@@.@@.@@@@.@@@@...@@@@..@@..@@. +@....@.@.@@@@@@@......@@..@.@..@@.@@...@.@.@@.@@@.@@@@..@@.@@@@@..@.@.@@@@@.@@@@@.@@@@@.@.@@@@..@...@..@.@@@@@@@@@@@.@@.@@.@@@@@@@@@.@@@. +@@@@..@@@@@.@@@@.@.@@@.@.@...@@@@@.@@.@.@..@@.@@@.@@..@@.@@@@..@@.@@@.@@@.@@@@@@.@.@@@@@@.@..@.@..@@@@.@.@@@@@.@@.@.@@@@@@..@@@@.@@..@@@@ +@@@.@@@....@@.@@.@@@@@@@@@.@@@..@@@@.@.@.@@@.@.@@@@@@.@.@..@@.@@@@.@@@@@@@@@@@@.@@@.@@@@@.@@@@@@@.@.@@.....@@@@@..@...@@...@@@@@@..@@@@@. +@.@@@@@...@@.@@@@@.@@@.@.@.@.@..@@@...@..@@@@.@@@...@..@@@.@..@.@...@@@@@@.@@@@@.@@@@@..@.@@...@@@@@.@.@.@.@@@@@@@@@@.@@.@@@.@.@.@@.@.@@@ +.@.@.@.@@.@@@.@@@.@@@@@.@@...@.@@.@@@@@@@@@@@@@@@@@.@@@@@@..@.@@@@@@@.@.@@@@@@@@.@@..@@@@.@.@.@@.@@.@@.@.@@@@@...@..@@@..@@@@@.@.@.@@@@@@ +.@@@@@..@@@@@@.@.@.@@@@@@@.@.@@@@@@@.@.@.@.@.@@@@.@@.@@@@@@@@.@@@@@@@.@@@@@@@@.@..@@@@.@@..@@@@.@@@.@@@.@@..@@@@.@@@@.@.@.@@@@..@@@@..@.@ +@@@@@@@@@@@@@.@.@@..@.....@.@@@.@.@...@....@.@@@@@@.@...@.@@@@@.@@@@@...@@@...@..@@..@@.....@@@.@@.@@@@@.@.@@.@@@.@@.@@@@@...@@.@@....@@. +.@@@..@.@@@..@.@@.@..@@@@.@..@@@@..@@.@@@@@.@@@@.@.@...@@@@.@..@@@@@@.@@@.@@@.@.@......@@@@@@@@@.@.@@.@@@@@..@@.@@.@....@@@@@..@@@@.@@@@. +@@@@@.@.@.@@..@@.@@@@@.@@@@@@.@@@@@@@@@..@@@@.@@.@@@.@.@@.@..@..@@@@.@@@@@.@@@@@@@@@@@.@@....@.@.@@@@.@@..@@@@....@.@@@..@@@.@.@@.@@.@.@@ +@.@@.@.@@@.@@@@.@@..@.@@@@@.@@.@@@@@@@@.@@@.@@..@@@@@@@@@..@@.@@@.@.@.@...@@..@@@....@....@@.@@@@.@.@@@.@@..@@@..@@@@.@@.@.@@@.@@@@@@@@.@ +@@@@.@@@@..@@.@.@@@..@@@@...@@@@.@@@@.@@@@..@@@@@@.@@@@@@.@@@@@@@.@@@.@.@@..@.@@@.@@@.@@.@..@@@.@..@@.@@@@@@@.@@@@@@@.@@..@@..@@@@..@@.@. +.@.@@@@@@.....@.@.@@..@.@.@@@@.@@.@@...@.@..@@@.@..@@@@.@@@@@.@@@@..@@@@.@.@@@@..@@@@@@@@@.....@.@@@..@@.@@.@.@@...@@@@.@@.@@@.@@.@@.@.@@ +@@.@@.@@@...@.@.@@@@..@@@..@@.@@@..@.@@..@.@.@@@@@@@..@@@....@.@.@@@@@@@@.@.@.@@.@.@.@@@@@..@@.@@@..@@@@@...@@..@..@@@.@.@.@..@@@..@@@@@@ +@..@@.@.@.@.@.@.@@@@@@@@.@@@@@@@@@@@@@@@@@@.@@@@.@@@@..@.@..@.@..@@@..@@@@@@.@@@@..@@.@@.@@@@@@@@.@@@@@..@@@@@@.@.@....@@.@@@@.@@@@.@@... +.@@@@@.....@@.@.@@.@@@@@.@.@@...@.@.@.@@@..@.@.@.@.@.@@@@@@@@.@@@@..@@@.@@@@@@@.@.@.@@@.@@..@@@@@.@@....@@@@.@@@.@.@@.@.@@..@.@.@@@.@@.@. +@.@@..@@.@@@@@.@@@..@@@@@..@@..@@@.@@@@@@@.@@.@..@@@@.@@@@@.@@@@@@..@@@@@@@...@.@@..@.@@@.@@.@@.@@..@...@@.@@..@@.@...@..@@.@@.@@@@@.@@@. +@@..@@@@.@@@@@@@@@@@@@@@.@@.@@@@@@@@@...@@@@...@@.@.@.@@@...@.@@@..@@@@.@@@@@@@@@@@@@@...@..@@.@@@@..@.@@@.@...@@@@@@.@@@@@..@..@@.@.@@@@ +@.@@@@.@@@@@..@@@.@@..@@@.@@@@@..@@.@@@...@..@.@.@.@@@.@@@.@@@@@.@@@@..@@@.@@@.@.@.@@@@..@@@@@@.@@@..@.@.@@@..@.@.@.@@@.@@@@@.@@@.@@...@@ +@.@@...@..@@@.@.@..@@@@@..@..@@@@@@@@.@..@.@@.@@@@.@...@.@@@@@..@.@@..@.@..@@@@@@.@.@.@@.@@@.@@@@@@@@@@@@@@@@@@@@@@@.@...@@@@@@@..@@..@@. +@@@..@@.@..@@...@@.@@@@@@@...@@.@@@@@@@..@...@.@@@@.@@@@.@@@@@.@@.@@@...@@@.@...@...@@..@.@@@@.@.@.@@@..@@@@.@@@@..@@..@...@..@@@@..@@@@@ +@.@@@..@@...@@@@@@@@@@@@@.@@..@@@@...@@@@@@@...@@@@@.@..@@@@@.@@.@@.@@@@@@@@..@.@.@@@.@@@@@@@@@@@@@@@@.@.@..@@.@@.@.@@.@@.@@@.@@@.@.@.@.@ +..@.@@@@@@@.@.@@..@...@@@..@@@..@@@.@@@@@@.@.@@.@@.@@@@@@@.@@.@@@@@@..@.@@@@@@@.@@.@@@@@@@@@@@@@@.@@..@@@.@.@..@..@@@..@@@@@@@@@...@@@@@@ +@@@@@@@.@@@@@@.@..@..@@@@@@..@@@@.@@..@@@@.@.@.@@.@@@@@.@.@.@@@@@@@@...@@@@@.@@.@.@@@.@@@.@@.@.@@@@@@@@@@@.....@.....@.@@@@@.@@@@@@@....@ +@.@@@@@@.@@.@..@@@@.@@.@@.@@@.@.@@@@@.@..@@@@.@...@@..@.@.@@@@.@...@..@.@.@..@@@@.@@@.@@@.@@@@.......@@@.@.@@@...@@.@@.....@.@...@.@@@..@ +@@@@....@.@.@.@@.@@@.@@@@.@@@@@@@.@@@@@.@.@@@.@@@@.@@@@@@@.@@@@@@.@@@@.@..@@.@@@@...@@..@@.@..@.@..@.@@@@..@@.@@@..@.@@@@@@@@@.@@@@@.@@@@ +@@@@@@@@@@@@@....@@@@@..@@@.@.@@@@@@@@..@.@@.@@@@@@.@@@.@@.@....@..@@@@@@.@@@@..@@@@.@@@.@...@@@.@..@@.@.@@@..@@@.@@@@@.@..@@@@@.@@.@...@ +@.@@@@@..@@.@@.@@@@@.....@....@.@@@..@@.@@@@@.@@@@@@@@@@@@.@@@..@.@@.@@..@@@...@@..@.@@@@@@@@@@@..@@..@.@@...@@@@.@.@@@.@..@@..@@@.@@@@@. +@@@.@@.@@@@@@@@..@.@..@@@@@.....@.@.@@@@@@.@@@@@.@.@@.@@@@.@.@.@@@@@@..@@@@.@@@@...@@@@....@@@.@@.@@@.@.@@@.@@@@.@@@....@@@@.@@@@@.@@@..@ +@.@@@...@@...@.@@@..@@@@@...@@.@@.@..@@@.@.@..@@.@@@@@@..@@...@@@@.@.@@..@..@..@@@.@.@@@@@..@.@@@.@..@.@@..@....@@@@@@@@@@@@@@.@@..@.@.@@ +@@@@@@.@@@...@.@.@@@@.@@@.@..@@@@@@.@.@@@@@@@@.@.@.@.@..@@@@..@@.@@..@@@.@@@@@.@@@@.@@@@@...@@...@@@..@@@@@.@@@.@@..@.@...@.@.@@..@..@@.@ +@...@@@@.@@@..@@@@.@@.@@.@....@.@...@@...@@.@@@.@.@.@@@...@..@.@@@.@@@@.@@@@..@@..@@@@.@.@@@..@@@.@..@....@@.@..@@@.@@@@@@.@@@@.@.@@@@@@. +@.@@@.@@@@@@@.@@.@@@@@@@@@@@@@.@@@@@.@@@.@@.@.@@@.@.@.@.@.@@@@.@@.@..@@@@.@@@.@.@@@@@.@@@@...@.@...@.@.@@.@@@...@...@@.@.@.@@@@@...@@@.@. +@@.@.@.@....@@..@...@@@.@@.@@@@..@@@@@@@.@@.@@...@..@..@....@@@@.@@@@@@..@.@..@@@@.@.@@@@@.@..@@@@@@@..@@.@...@@@@@.@@@@.@@..@@@.@@.@.@.@ +.@@@@@@@@.....@@@.@.@@@@.@.@@.@@.@@@.@@..@.@@@@@@@@....@@@@@@@@.@@.@@@.@.@....@..@.@@@@@@.@..@.@@.@..@.@.@@@@@..@@@..@.@@.@@@.@@@@@.@...@ +..@@.@@@..@@.@.@@@.@@@.@...@@@@@@.@..@@@.@..@@@@@.@@.@@@@@@@.@@@.@..@@..@@@@.@@@..@@@@..@.@@@@.@@@@@...@@....@@@@@.@@@...@@..@@@@.@@@@.@@ +@@@@@@..@.@@.@..@@.@@@@@@@..@@@@..@@@@@.@@@@@@.@@@@.@@@@@.@@@.@@...@@@@.@@@...@@@@@@.@.@@@..@@.@@@@....@@@@.@@@@.@@.@..@.@@@.@@@@.@@@...@ +......@@@@@@@@...@@@@@@@@...@@@@@.@@@@@.@@@@...@.@@@.@@.@...@@@.@...@.@@@@.@@@@..@...@@@......@@.@@@@@.@.@@@@.@.@@@@.@@@@.@..@@@.@@.@@..@ +....@...@@@.@@@@...@..@@@.@...@@@.@.@@..@@@@@@.@..@@@@@.@@@@@.@@@@@.@@.....@@@@@@...@@.@.@@@@@@@@..@@@@@@@@@.@@@..@.@...@@.@@@@@@..@@.@.@ +..@@@.@@@.@.@...@@@@.@@@@....@...@@@@@@.@@@@@@@@.@@.@@.@@@@@@@@@.@@@@@@..@@@@.@..@@.@@@.@@@.@@@@@....@...@@...@@.@..@@@@@@..@@...@@@.@.@. +@@@@.@@@...@@.@.@@.@@.@@@@@@@.@@@@@.@@@..@...@.@.@.@.@@@@.@@....@@@@@.@@@@..@@@@@@@.@...@@@.@@..@..@.@..@@..@.@@@@@..@@.@@.@@@.@@@@.@@.@@ +.@.@@.@@@@@@..@@@@..@@..@@@.@..@@@@.@@@@..@@.@@@@@.@.@@.@@@@@@..@@@..@....@@@@@@@@@@@@@@.@@.@..@@@@..@@.@@@@@@.@.@.@.@@@@.@@.@....@.@@@@@ +@.@@@@@@.@@.@...@@.@@.@@@@@.@.@@@@@@.@@@...@@.@@@..@@..@..@@.@@@.@@.@@@..@@@..@..@.@@@.@@@.@....@.@@@@@..@@@.@@@.@.@@@@@@...@.@@..@@@@@@. +.@@@.@@@@@@.@..@.@@@@@@.@@@@.@@@...@@@.@..@..@@.@.@...@.@@@@..@@@.@@@@...@@@.@@.@@@@@@.@@@.@@@.@.@..@..@..@...@@@@@@.@..@@..@@@@@@.@@.@@@ +.@@@@@.@@@.@.@.@@@.@..@.@...@@@@@..@@.@@@@.@.@@@.@@.@@@..@@@@..@@.@@@@@@@@.@@.@@@@..@@@.@@.@.@@.@.@.@@.@.@.@@.@.@@@.@@@.@@..@@@@..@..@.@@ +@@@@.@.@@.@@@..@@@@..@@@@@@@.@.@..@...@@..@.@@@.@@@@.@@..@.@@@@@...@.@..@.@.@@@.....@@.@@@@@@@.@@@@.@@.@@@@@@.@.@@..@@@@.@@..@@@.@@@.@@@. +.@@....@@..@@@@@.@@@..@..@@@@@@@@@@.@@@.@@@@.@@@@@@@@..@@.@@@@..@@....@@..@.@@@@@..@@@@.@@@@@.@.@.@..@@@@..@@..@...@.@@...@.@.@@@@.@@..@. +.@.@@@@.@@..@@@..@..@@.@@.@@@.@@.@...@..@.@.@@@@.@..@@..@.@@@..@@@...@@@@@.@@@@@@@.@@..@.@..@@@@@.@@@..@@@@@@@@@@@.@..@@@.@@..@..@@@...@@ +@...@.@.@@@@@@@@@@@@.@@.@.@.@@..@@@.@.@.@@...@@@@.@@.@@.@@@@@@...@@..@@@@.@@@@@..@@@@@@@.@@@@.@@..@@@@@@@@@@@@..@@..@.@@.@.@.@@@.@.@@@@@@ +@..@@@.@..@@@.@@@@@@.@@.@@.@@@..@@@..@@@.@.@@.@..@@@@@@.@...@@.@@...@@@@.@.@@@@.@@@@.@.@@@@@@@...@.@@@.@.....@.@.@@.@.@.@@@@@@@.@.@.@@@@. +@.@@@.@@@.@@@@@@@@@@@.@@@@@@@@@..@@@@.@@..@@@@@...@@@....@@@@..@@..@@@@@.@@.@@.@.@.@@.@@@@.@.@..@@....@@..@.@@.@@@@..@.....@@@..@@.@..@.. +.@@...@...@.@@.@.@.@.@....@@@@@.@@..@.@..@@@..@@.@@@@@@...@.@@@.@.@@@@@@..@@.@.@...@.@@@..@@.@..@.@@.@....@@.@@.@@@...@@..@...@@@.@@.@@.@ +@@.@.@@@@...@@@@@@@@.@@....@.@...@.@.@.@@@@....@.@@.@@@..@@.@@@@@@@.@@@@@.@@.@@@.@.@@@.@.@..@@@.@@.@..@@.@@@.@@.@@@@@@@.@@@@@@..@..@@.@@. +....@..@@@....@@@@.@@.@.@.@.@@@@.@.@@@.@..@@.@.@@@.@@@@..@@@.@..@...@@@..@@@@..@@@@@@..@@.@.@@@@@@@@...@@.@@..@...@.@.@@..@..@.@@.@@..@.@ +@@@@.@@@@@@@@@.@@@..@@..@..@.@..@@@.@.@.@@@@@...@@@@.@...@@@@@@@@.@.@..@@.@@@@@@@......@..@@@@.@@@..@.@@.@@.@.@@@...@@@@.@.@..@.@@@.@@@.. +@@.@@@@@.@@@.@@@@@..@...@@...@.@.@.@..@.@@@.@.@.@.@@.@@@@.@@@..@@@@...@@.@@.@@@@@@@.@@.@@.@@@.@@@.@@@@.@@@@@@.@.@@.@@@.@..@@.@@@@.@@@..@. +@@@..@@.@.@.@@..@..@.@...@@@.@@@.@.@..@..@@@@@@@.@@.@@..@.@.@@@@.@.@..@.@.@@@...@.@.@@.@@@@..@.@@@@@.@@@..@@.@@@@@@@..@@@.@@@@@@@.@@@@@.@ +@@.@@...@@@.@@@@@@.@.@@.@@@@@@.@@@..@@.@@@.@@..@.@@.@..@@@@@@.@@@.....@.@@@@@.@@..@@..@@..@@.@.@@@@@@.@@.@.@@.@...@@@@@@.@.@@@...@@@.@@@@ +@@..@@@@.@.@.@@@@@@@@.@@.@.@@@.@@@@..@..@@@@@@.@@...@@.@@..@.@@..@@.@@@@.@@.@.@@@@@@@.@@@...@..@.@@...@@@@.@@..@.@@@@@@@@@.@@.@.@.@.@@@.@ +.@.@@..@@@@@....@@@.@@@.@@.@@...@.@@...@@@@@.@@@....@.@@.@@@@.@@@.@@@@@@..@@@@.@@@...@..@@@@@.@....@@@@.@.@.@.@@@@.@.@@@..@@.@@...@....@@ +@.@.@@...@@.@@...@.@..@..@@@...@.@@@.@@@@@@.@@@.@@@@@@@@...@@@.@..@...@..@@.@@@.@..@.@@@..@@@...@@@..@.@@@@@.@..@@.@..@@.@@@@@@@@.@..@.@@ +@@@..@.@..@.@@.@@@@@@.@@@.@@@....@@.@@@.@@@....@..@.@...@@..@@@@@@@@@@...@@.@@@.@@@.@@@@@@.@@.@...@.@@.@@@....@@.@@@.@.@@.@...@.@@@@.@@@@ +.@@@@..@@@.@.@.@@@.@..@@.@@.@.@@@@@@.@@@@.@@...@@@@.@@..@.@@.@@@@@@@@@..@@@@.@@@@.@.@@@....@@.@.@@.@@@@@@...@@@@@@@.@..@..@..@@.@.@.@.... +.@@@@@.@.@@.@.@@@@@@..@.@@.@@...@@.@@@@.@.@.@@@.@@@@....@.@@@@@@.@@@@.@@@@.@@.@@@@@@@@.@.@..@.@@@.@@@@@...@@.@..@.@@@.@.@@@@.....@.@.@@.@ +.@@.@@@.@@@.@@.@...@@...@@@@..@@.@@@..@.@@.@@.@.@@@@.@@@@.@..@@@@.@@@@@@.@.@@.@.@@..@@@@@@@@@.@@@@@.@@@@..@@@.@@.@@.@.@@@@@.@@@@@.@....@. +@@.@@@.@@@@.....@@@.@.@@.@.@@.@@..@@@@@@..@@@@@@@@@@.@@@@@@@.@@..@@@@..@@..@@@.....@.@..@@@@.@@.@.@..@@..@@.@@..@.....@@.@@@...@.@.@.@@@@ +@..@@@@.@.@@@@.@.@.@.@.@..@.@..@@@@@.@@@.@@.@...@@@@.@@.@@@@@@@@..@@@@.@@@@.@@@@..@@@..@.@@.@@@@@@@@@.@.@@.@@@.@.@@@.@@.@@..@.@@@@@@..@.@ \ No newline at end of file diff --git a/day05/run.pl b/day05/run.pl new file mode 100755 index 0000000..3f7e1e9 --- /dev/null +++ b/day05/run.pl @@ -0,0 +1,1237 @@ +#!/usr/bin/perl +use strict; + +my @ranges; +my $largest = 0; +my $lowest = undef; + +while(my $line=) { + chomp($line); + last unless(length $line); + my($start,$end)=split(/-/,$line,2); + push @ranges,[$start,$end]; + if($end > $largest) { + $largest = $end; + } + if(!defined $lowest || $start < $lowest) { + $lowest=$start; + } +} + +my $fresh=0; + +while(my $line=) { + chomp($line); + + foreach my $ref (@ranges) { + if($line >= $ref->[0] && $line <= $ref->[1]) { + $fresh++; + last; + } + } +} +print "Found $fresh fresh items\n"; + +@ranges = sort { $a->[0] <=> $b->[0] || $b->[1] <=> $a->[1] } @ranges; + +my $totalids = 0; +my $id = 0; +while(@ranges) { + my $ref = shift(@ranges); + print "At $id, considering $ref->[0],$ref->[1]...\n"; + + if($ref->[0] > $id) { + $id = $ref->[0]; + print "\tAdvancing to $id...\n"; + } + + if($ref->[1] >= $id) { + my $diff = $ref->[1] - $id + 1; + $totalids += $diff; + $id = $ref->[1] + 1; + print "\tAdding $diff, and advancing to $id...\n"; + } +} + + +print "Found $totalids total fresh ids\n"; + +__DATA__ +435767821145222-437542065836164 +40922560379023-45361625965897 +433483051103449-435226969759467 +103879172354475-104083984552668 +143976141047070-149704968501856 +324338045724310-328005549841074 +317812869521516-321234660027768 +397962755552251-400192369703711 +171983076544055-171983076544055 +339945164807007-340633491305409 +279531392826505-279816734544586 +104990055572338-105107856306124 +328005549841075-329765621391064 +127991253754465-129951653343840 +355857878124764-358385606402119 +272731198580506-273246390457576 +70689854028220-78685047535521 +503352690049488-510560297161322 +102666171522443-103087576432901 +45361625965899-47427458143925 +369584312491857-371478017113317 +166211926567052-168331663906491 +106589199166428-106855458935099 +434763225748311-436503773108745 +171983076544055-177666782634599 +336575032463200-337080425428790 +225399387289088-226765651103365 +303723977826912-310292761333116 +151716851447006-155777680308567 +373316997145833-378453387481395 +534257831069231-534942781913367 +55718522314941-59870310846522 +382776255223298-387983994862059 +545052205755978-548923584157338 +368703642646505-370315253155496 +203692803417388-207889028754216 +458391796034147-460530373521337 +279008627456494-279366788894712 +452914619117074-458391796034145 +223568241072271-225026875318602 +540902490370585-541380689797219 +101697389842376-101950138071699 +283654728568734-288365806620047 +537872412027744-538423113080634 +260128529637136-260128529637136 +367360333289059-368912498940132 +139399741684678-139399741684678 +295771658641023-298067904329585 +141639793951694-146283515082581 +100602126462801-101179459980295 +288365806620048-288365806620048 +361982642431803-363879017843927 +74756502764290-76233752675094 +90965560321456-95371287170236 +122881380221199-125199536212134 +275014603871430-275812887089541 +273103025911361-273570669932717 +106418002021065-106589199166428 +11745995299669-11745995299669 +124523626647373-126751395783808 +102435256803916-102932918026407 +83797828825790-86111533566344 +22161113737564-25972619829376 +440165185930827-442088040512483 +404481195497081-411224792598851 +276285431852154-277117047790836 +272731198580506-273570669932717 +478780287245640-478780287245640 +540530670795229-540902490370585 +313823078327954-317812869521514 +83797828825790-86111533566344 +23556556778726-29187005843328 +121107915266238-123538438773612 +437231558664452-438846442311148 +335167642847972-335634169923343 +277578392966716-278376655488219 +102666171522443-103384934895611 +335634169923343-335909768680093 +109440561717184-109761022873644 +540530670795229-540712817972731 +229438095543824-230776110869564 +212069653871013-215677245888467 +125901549997827-128418039487586 +109117611219417-109761022873644 +107128479457351-107710734047382 +338674583812156-339436601998066 +345856555614293-345856555614293 +277858240495680-278156054921895 +523966588797071-528978213722247 +375933845592089-380734874862247 +486887966676223-491793947094996 +277578392966716-278376655488219 +224358763814124-226073900519063 +514639405707727-518326621626485 +111624376324086-119527049205991 +226508442746523-227966191717636 +271531800312167-271729868649407 +394799458263786-400192369703711 +293532338521233-300835928122097 +274258438596817-274892942217584 +242685346581906-242685346581906 +345856555614294-347856476654039 +432669297148941-434294988354370 +553798970066387-562410961054321 +232645398124000-239916382901420 +227582044514096-229034220429771 +533959769928955-534382423735152 +556784562882017-558454643755254 +334879464471433-335167642847972 +438003966941549-439922463093597 +274892942217584-275014603871430 +414075202192991-416811985301625 +182232686906027-188624170379212 +161757984000523-168331663906491 +222460791158185-223854739707238 +464025806637756-471787626088320 +104083984552668-104990055572338 +131364789778337-139399741684677 +493166077035015-493166077035015 +263163889131547-269808128896144 +332968751899179-333098211249400 +207889028754216-207889028754216 +339670331728617-340167478115742 +382776255223298-387983994862059 +242685346581907-247085667609343 +535884186380042-536102928344477 +411224792598851-411224792598851 +11745995299669-15721067146153 +364645113373755-366424522180809 +275014603871430-275583157442485 +448488159020814-448488159020814 +221249882779056-222988386595182 +533488952386831-533600046578083 +35482028197832-39330429165927 +335381138397722-335634169923343 +280010389397759-280566503484177 +545052205755978-548923584157338 +424334073670888-426795712691178 +111624376324085-111624376324085 +516394886932129-521689487076122 +228248372510385-229805912641855 +534382423735152-534942781913367 +263163889131547-265359299903853 +334470148562007-334537399246852 +51691752110650-59870310846522 +103087576432901-103879172354475 +334879464471433-335167642847972 +493166077035016-501717729781761 +426795712691179-429879651403988 +271531800312167-271729868649407 +538214615548914-538954182236366 +486887966676223-486887966676223 +64824035810845-66190876358299 +280010389397759-280910119852589 +255492299630700-260128529637135 +473845241725276-478780287245640 +192639868633313-197236433584270 +66190876358299-66190876358299 +363428036716457-365133095712881 +536648325966451-537421096069860 +215677245888469-220330732637379 +182232686906027-188624170379212 +155777680308568-159264754647393 +90965560321456-97612705983695 +506571009977349-510560297161322 +446166394206788-448488159020813 +234078582767538-237985451060652 +274892942217584-275583157442485 +303723977826912-303723977826912 +273570669932717-274130802069627 +464025806637756-467399192298796 +366074048906354-367696424741637 +414075202192991-421839427601155 +439377900587045-441122105358866 +32448406634242-35482028197831 +332347185359689-333098211249400 +3789428842004-5709991969284 + +146852967135975 +72729956782516 +525090724716743 +317398893581904 +423447450902771 +490278214367495 +187561144360562 +394503929094073 +478519396671559 +30557236923281 +384263924979333 +441227547923939 +114286576258395 +98448318819642 +266350782408226 +221228892022511 +538263558006444 +361416449579749 +127819171563196 +247175247416286 +102590081542143 +457681782260838 +270394365862812 +148867198583924 +479043524366255 +484788566967743 +434979026188407 +299909743192323 +217112916553337 +84482947018908 +488875874564834 +290066261705822 +118046077275747 +159079771824872 +423825532701525 +407384530480343 +343146905013190 +272582021388631 +324995999627647 +212018811856069 +103280145754542 +99745675968053 +151453284099697 +375608546050655 +521443430704215 +410098957670635 +443428083097092 +299213700399083 +229095187404850 +31713118767163 +454314340726852 +28272159024708 +362025718169591 +320031114377696 +170806799132197 +465760321985951 +10684037320849 +211724964555693 +293202226071871 +13977042672472 +245021767778753 +535897058013516 +149254647065883 +191837409683808 +405315804113918 +174619894160472 +125558214504730 +26092028821075 +396377473556601 +127944788897502 +173993773319312 +29603843733251 +419855263586880 +466769310921357 +456102868398560 +383117263458918 +560954014848688 +85415016488924 +419621798233072 +527765045465840 +166041781713571 +382996490390835 +236962898990762 +173747297885581 +380198246368658 +424400531981169 +504213128988828 +367601202056449 +523698676069366 +272926854759120 +480999480122167 +35147715875684 +376283030635072 +556434192025665 +172402491881666 +4296095966220 +230052233883489 +145363378785218 +556874496664175 +538838696448214 +505895419176354 +444823187701226 +31048766974891 +24554267776598 +212130578391186 +58879645806626 +74747030982905 +419957510781129 +24553867137822 +163573482372487 +397353461334796 +185352700911903 +384677712660335 +442623044870590 +348240357755893 +406149917158836 +168807066893084 +239053821455525 +358084807197135 +9519300030723 +88028698537584 +201068217699866 +526765655929639 +159260199931572 +411372905108732 +89975061841112 +189280673696707 +344447578165931 +196051771174260 +519264635715846 +99453947141250 +561534129768877 +176648202715645 +374500810321186 +401332027495638 +117598431769046 +129062673670961 +221080793387061 +424404791782106 +494320939361750 +304364362916585 +328341529014392 +381956757031980 +49585659659296 +156164424066756 +42021020208078 +56469570771540 +266754690783635 +331639926653110 +120862572536093 +138328112412473 +314586859111805 +343413290653935 +526713589637350 +198759316318709 +319734023283944 +257216677840008 +77742812995926 +461359538717295 +545266468141049 +178837181286377 +64472894978814 +472383983145553 +227554946332444 +394746092751516 +147890694299124 +355316167088159 +85242851082117 +37626434398085 +515402424313039 +443591857461959 +188081310465256 +144943902804073 +141868124692681 +95596428236373 +95397127540044 +494186655567724 +388065146187598 +96012411662025 +165693863693440 +88996157611610 +487759543681431 +373458690962494 +416224235471198 +90795465141930 +218049219376411 +236343699096529 +62978412682397 +253019340474678 +73881584360453 +280050709166515 +329842873674001 +472890253392025 +6588364110439 +243604577364054 +336474741235608 +200709634922087 +286038759064581 +68928320836592 +422276699889094 +215709669267367 +365560142836041 +45279945849327 +118255611524872 +508836227903701 +53396673041401 +530273499795325 +241870056637049 +24301152757439 +188476791255922 +306743667980769 +542653486452726 +396855385269092 +296397073519065 +248243347453466 +113428052152533 +465530307274700 +185568888344468 +283740778516164 +369223507022554 +346030173794194 +403968415674793 +421670514027300 +2582225790194 +379466916571521 +455119249432832 +117288764605225 +28476504196774 +407315160861635 +297721073048835 +530927781732424 +25760609505894 +383246442522148 +118039838121825 +1004628765722 +472341110471034 +148181306715977 +190846160792203 +198186677228715 +516042618344432 +113492958559628 +227609957670463 +382217770473133 +525376104356278 +491024687549314 +233443939239217 +551737298919134 +103003777544690 +47059945353618 +228804015776599 +52719958349929 +384118713680697 +20827016799929 +9224347298753 +192345298599638 +243182340406566 +19306569095085 +174746899279949 +282165588685014 +96894402490936 +409498249049734 +520639885074903 +205743816975053 +530500319881379 +504521130795047 +292734104178276 +14775162291256 +470305727708976 +487843701623973 +379551448630190 +16435524430831 +536637437298681 +192822623139812 +287073287091156 +68795714051394 +293701410434494 +452843414395767 +426791355422807 +462324039764768 +294225690346861 +175100842816206 +147240524707553 +418950053639328 +237508623408946 +137732203543087 +107232758109799 +36488783959162 +55994075548283 +295189130176523 +341795811561385 +49461999024850 +324699592057226 +457560673764578 +521457633795100 +246118000529438 +376830687458693 +482090916110178 +225101153701675 +306030341620229 +330773000533071 +176707547451533 +483572553619823 +67396501087926 +357314257978434 +337280978374 +499573659294715 +510984394891869 +245553961771052 +489561513912546 +467799799868418 +26832356899497 +44002573496017 +196756240612905 +73931239235267 +144387645599421 +270690475299479 +130693264427411 +274186644757929 +390289426688035 +385283827504604 +321253950877901 +458976023133001 +3526394811629 +450880110513354 +393084952148204 +439168966100671 +335936336962745 +427580372506436 +386001793152214 +504798058839786 +102054807024872 +146726026690116 +289303391153447 +434232937501242 +383443074546688 +183768169855360 +408179944639178 +188498914646929 +447824060230629 +30212119010583 +215947618613906 +421570858542972 +209419039013734 +464999672499636 +490994678045971 +380260212049225 +480208739547171 +235190353691099 +187000873644724 +415191398767066 +521669655163565 +193142997802576 +53863637873667 +318341646938576 +493978243896570 +117391929865454 +165543599725782 +536533305332948 +320700132799522 +486655997989734 +263531230838530 +228881685511428 +231571815354720 +163658666048170 +307279829040456 +258385705043952 +382657181265800 +275258247335161 +307637984796048 +400973191354474 +193211686318563 +277162396764937 +479617117078143 +184052641618630 +456703310958237 +508150613245646 +62203442021053 +183685425400040 +108961074296109 +312028284541929 +339460994997266 +183853544230654 +473071975502005 +505841437570999 +195468293803965 +134980738631879 +21856233677705 +559687105804565 +379061557317500 +143953569042949 +343620488545646 +265222367828598 +478220225443047 +266418668623809 +488729187328188 +207869641444960 +232503984110836 +322298431471519 +260001615944882 +391384279447670 +219308013616500 +104096585439072 +504022899387654 +455285871279974 +156911330616532 +61225234990558 +306816527293115 +216875336198070 +521472379618333 +476353109679312 +458134144921097 +4241888354484 +129546147829626 +19750436953251 +335368581445418 +207643535567395 +43544783289684 +339502790512219 +14206240269603 +414165477045941 +242878406863144 +26356686701726 +336344411716316 +218495615528949 +411801401685116 +230877210757197 +494263694030823 +47174379985968 +337398067909502 +73667244796839 +230040892919543 +516069290409115 +201359001845526 +515552750609335 +35608029894572 +240858551930082 +78318065341182 +444591845939709 +417854408133155 +162909854263526 +493916499138396 +386154670030654 +303958677133856 +104563978005303 +228596917605131 +167042424336420 +510751698863216 +524349492542130 +435982803153812 +200770516732985 +33978872133617 +19978210516235 +6746842241382 +351147543315088 +355872116204723 +489552990319824 +34192023241304 +49163043499963 +463955348407404 +292499081621900 +40865368889951 +138550153037914 +2487449652404 +518665018321958 +310149315337954 +428061810288478 +433358988799042 +353454727150809 +253971158326244 +260793918590548 +374328223963558 +142889552315336 +452196297561073 +310270166416459 +174304093863587 +169746364451 +448899990003864 +153280896016707 +351793183294678 +211735226442659 +5688602226006 +163039154705107 +183347939363624 +469584112839095 +493610348358554 +82216305325837 +207585972841584 +187144206686602 +3407475159113 +123979154243571 +93219130577988 +469211754132898 +550513568998170 +23379962802357 +497477219771656 +506010849066536 +470409550861121 +281110806796253 +322304577464637 +242420551462681 +155121637061429 +561024375137369 +93448878486342 +530869208654855 +415075445026968 +64751986418884 +173462351993273 +230064430533502 +100270428901002 +144660616237212 +324529636327871 +238190427476080 +514869437922406 +463705757130738 +421502305937001 +287114283392312 +540578981008471 +519834418826746 +448572314946876 +190740396127385 +417630036131079 +404901672642470 +118502102752438 +247870851507489 +526625894459434 +515552603604162 +127549268155882 +195935778302829 +90328443420165 +441568179332183 +523900700241973 +392464175418744 +111642953586143 +516973350762988 +378516757511192 +544967031287861 +480704221362288 +379786846828458 +397704835253979 +91027488749732 +510389759439622 +215368790845134 +380973192337882 +257863929828298 +301772530632024 +176720182555708 +50544005238009 +172280174809453 +141069783004125 +296020381733397 +377606406509817 +123438695967430 +346760135255449 +137573635916510 +363363289771576 +354395810180420 +307643395236633 +369118211851568 +313931155764669 +522898106114697 +340629560986570 +230991827524623 +134158440086955 +19535971752309 +474399898741336 +146385121932866 +174813313239963 +481582398277081 +208325493619987 +231297881056276 +222156721978030 +447991764412447 +551560511554338 +321206003206549 +356225305826043 +324571463181461 +116623602891138 +328110490245646 +310181996288216 +528266235108270 +233347486810255 +539736154412012 +159963600279941 +235518823233448 +443994976011973 +511474900202923 +298322890749085 +469410746079718 +528943013049222 +553641548955309 +456514068859911 +489046518687954 +214000220224451 +238751103250953 +51472790776443 +455626051626704 +121858944791579 +76283539714531 +443949789006762 +388856410977302 +200299647216260 +242020148393522 +287432365410554 +42759311876071 +148907205166790 +229515221190112 +454925663782143 +274670918298637 +99451359192993 +17585209407060 +479072059123583 +350911237965732 +99058617405685 +487243825192121 +120284979422688 +198111537273030 +93051339370004 +115576598934367 +396084362111447 +525370497804898 +553581230270824 +38749992713322 +410538358086896 +456971081294745 +372569612497177 +78631188527500 +246369777688257 +210593104378627 +15321061909315 +252668464725919 +235949127052354 +119199959663636 +361164694016612 +395678146662519 +74480358253620 +394349248743649 +53511819718430 +378553216211185 +199224329302105 +445482126945366 +163667615793737 +506525838015708 +530028251887042 +105019909208467 +307846494149108 +311385966043449 +398282232001871 +91574332754268 +14232735574945 +213306049859201 +394850984385000 +297250985585109 +320113362711689 +253591809468331 +552178661234734 +77873367786017 +135132185215949 +296083924169000 +551214942744531 +12455146620562 +399425695024887 +114043564502961 +272653364643789 +96729765768644 +39405173654222 +56574501856647 +323296487162086 +487941980565032 +82779212063379 +179353428493811 +496028854928237 +161634150662315 +212424462490152 +209709105860774 +349213150039411 +241608046613411 +13917448199656 +216951716006925 +162853480295270 +47424934617071 +556784382038799 +4131392155873 +372619688955424 +340638540084789 +545919548789814 +247517877561929 +276799299590280 +332310622117128 +291469028925580 +530745331374991 +269971957295453 +362861384163316 +20723912219049 +227152480316913 +84483684794236 +375920389201290 +162083431192899 +334461307078861 +15184759641663 +135867874469188 +229287899680636 +122128152877692 +89573850528147 +56522438251524 +8933998818010 +241100686034852 +160456195827915 +379228337103499 +457996059117216 +186276298197564 +65028612212608 +334018752539264 +464623886921994 +128317494197533 +209078085615132 +28628734886143 +550565367505798 +114631027673083 +45956061863043 +396270905211405 +484825429049141 +454116266363337 +479215692800962 +370366828242447 +228549463913727 +74987264304425 +86034661562157 +123072786924967 +8131174813756 +504480318716597 +500703149412524 +282361402542941 +376080989964879 +95609543057354 +5795347771239 +495086837682053 +70092241113664 +133371240307945 +97320942224784 +415843799630401 +527897045349709 +9515000745895 +210818211157640 +116865809587050 +55149987419440 +152804947462676 +171365804766319 +92762851858970 +536279916063194 +41144595658920 +479457328846379 +255028795634214 +416092511477509 +396033041748034 +398805635824240 +16845591461490 +452012457898923 +413996306418735 +439351571871055 +264804158416801 +432741233593355 +264655745619782 +395405137579449 +117191869998636 +172821359475888 +294437192805620 +516556929432702 +178972756693216 +300167888388516 +94424574732970 +123381715581340 +382378588970022 +158036900758185 +34124705092259 +342572710558822 +508582709056545 +387318621201662 +331767303972558 +184194976559684 +510703712563468 +174821300702573 +238023145064884 +249991077692898 +207523231498478 +83072060730268 +397844306427590 +99452165503373 +209861762710134 +253118528673706 +467235408553592 +284185408930235 +448013363994314 +288623100872152 +162957613059561 +289751178418308 +332440420886720 +294095963193668 +485279069870041 +515975985236018 +536200286819689 +453065083584277 +551404409206709 +511782553157142 +394328261249286 +174215424887582 +167678410345614 +464735672810060 +456825933118441 +362094800544060 +462077458522333 +192900637642003 +215332277537738 +255538349970494 +195932003363553 +217549953216336 +118274154010282 +327943896934125 +369833494864835 +514120314606779 +228792616212193 +524933378511605 +162063321853599 +533409210591587 +536420238897970 +311338833480420 +114590390676194 +20295319480770 +312575698190565 +480885358150830 +193642872552659 +37349367387812 +281863082981530 +409247157904107 +380683151917030 +170725296789170 +240517461666877 +106643455479041 +221600948853033 +311367125088949 +500857596407897 +428263225599066 +489188616751048 +132076638524268 +337255380973577 +263777334840657 +402227204654904 +232969227952256 +455683079262174 +435272043895079 +361435261788232 +436514366287959 +129193130197329 +120229654187137 +83608831337393 +308749892578368 +449384290675903 +51567344599261 +325802220467656 +282085948473024 +553166655153316 +73244805199001 +541702258833499 +354438362733834 +499166995187289 +385451007618701 +132603954358840 +182273066822023 +382707943753519 +21124498562399 +274565901684727 +198111944809824 +208798615871557 +95471335494553 +193370679322913 +4945522626230 +382469793005898 +98007092240367 +403040376052035 +92703607610459 +428100273156096 +172777849149619 +3503171784825 +260002062756955 +112613235868830 +545884888063607 +140270350219528 +333028688538458 +326411343917014 +117082433185788 +405099323240640 +52695877398143 +444624728217745 +143663999346795 +499225009107808 +222996501766465 +521313448402793 +247460635119835 +251268355236854 +362728016819885 +296912263791019 +109724569307291 +429908475579545 +162854825607960 +192243741623498 +472494196376618 +402597737076435 +233023288821577 +232578824660749 +412296879388604 +16257845457430 +293212135675448 +432122073119167 +7567131731506 +82129819448483 +58428672447354 +31627761915415 +232520133497186 +72460391784614 +224611014377358 +260649041871593 +1181203161475 +297588886647948 +408565902321578 +439598207090735 +469509361979285 +46137301114751 +305916986453468 +13723914867531 +84463391678193 +557760280174857 +135301351573716 +9779942571181 +281513767441576 +547135126528767 +403164419085294 +415013834401318 +105464643925931 +530305047406665 +62393318792172 +508754519072374 +373109670747622 +87089122084244 +446361637318717 +406383438512558 +397028723491024 +512874288019608 +40105090451613 +224933169143517 +558039938589826 +512738033310830 +397097158438331 +271428135116205 +357485810391033 +526263586947189 +90363521341251 +15392331613613 +442172755693495 +258622412892938 +22324604472927 +255329603466277 +193101423911677 +556981296565560 +301913465796358 +257251562480078 +148267107678534 +188434180566800 +267423067333788 +399902196677164 +556944884989014 +102241422525352 +123315121848197 +27397709065215 +125675962197311 +188570074425826 +236351016220019 +465347698494332 +538178902597511 +244048120935113 +408246565513725 +125298226378374 +133008287853400 +237903917222427 +379975669770287 +117607634117563 +464365887691891 +73927323128214 +216732489333093 +164697745937833 +295966077840404 +281910592336844 +416159619281427 +134797872195476 +451754665170074 +436854496202220 +18927156265007 +441220631701983 +248148100473311 +519963057433744 +417898467004034 +513635430305496 \ No newline at end of file diff --git a/day06/run.pl b/day06/run.pl new file mode 100755 index 0000000..3ec01b3 --- /dev/null +++ b/day06/run.pl @@ -0,0 +1,101 @@ +#!/usr/bin/perl +use strict; +use bigint; + +my @problems; +my @operations; +my @solutions; +my @lines; +while(my $line=) { + chomp($line); + push @lines, $line; + + + $line=~s/^\s+//; + $line=~s/\s+$//; + my @parts = split(/\s+/, $line); + #print join(',',@parts) . "\n"; + + if($parts[0] eq '+' || $parts[0] eq '*') { + @operations = @parts; + last; + } + + if(!@problems) { + @problems = map { [$_] } @parts; + } else { + for(my $i=0; $i<@problems; $i++) { + push @{ $problems[$i] }, $parts[$i]; + } + } +} + +my $total; +for(my $i=0; $i<@operations; $i++) { + my $ref = $problems[$i]; + my $op = $operations[$i]; + + my $working = shift(@$ref); + while(@$ref) { + if($op eq '+') { + $working+=shift(@$ref); + } else { + $working*=shift(@$ref); + } + } + $solutions[$i]=$working; + $total+=$working; +} + +print "Total is $total\n"; + +my $opstr = pop(@lines); +my @nums; +my $op; +$total=0; +my $last; +for(;;) { + my $t_op = substr($opstr, 0, 1, ''); + if($t_op ne ' ') { + my $res = undef; + while(my $num=shift(@nums)) { + print "Num is '$num'\n"; + next unless($num=~/\d/); + $num=~s/\s//g; + if($op eq '+') { + $res += $num; + } elsif($op eq '*' && !defined $res) { + $res = $num; + } elsif($op eq '*') { + $res *= $num; + } + } + + print "$res\n"; + $total+=$res; + $op = $t_op; + @nums=(); + last if($last); + } + + my $col; + for(my $i=0; $i<@lines; $i++) { + $col .= substr($lines[$i], 0, 1, ''); + } + push @nums, $col; + + if(!length $opstr) { + $last=1; + } +} + +print "Part 2 total is $total\n"; + + + +__DATA__ +563 334 22 38 2624 77 49 73 39 49 85 2 98 977 98 581 73 7 91 84 965 78 93 5932 67 4 965 8739 21 232 272 32 19 351 9 11 58 71 416 226 149 5234 2799 334 739 136 256 857 34 35 591 778 758 587 38 6 38 688 126 96 44 8763 3 9 15 84 619 856 635 52 2 345 91 42 96 597 996 8 649 25 88 6 814 63 77 644 3 627 43 6 15 31 82 93 355 22 48 63 8513 19 255 518 35 92 244 51 5 889 66 5 241 2468 24 47 77 5 5 332 5 6276 762 68 231 369 959 16 45 3552 376 14 47 68 23 467 7 984 33 49 348 51 516 687 163 83 8718 742 58 32 484 74 8 1 95 72 65 322 4464 6294 655 76 5153 7923 4459 33 6275 5159 84 752 17 9595 69 63 858 7715 554 42 8 5 39 75 74 17 4 929 48 897 158 9 29 516 2269 21 2 4 481 451 11 455 38 33 187 59 616 765 69 88 12 15 739 462 41 39 7 15 361 4 73 96 6 13 94 97 7 72 71 92 849 59 739 52 5 3 47 86 59 2 24 6 611 882 35 576 391 2452 2 1746 32 9 252 56 955 977 7838 92 7461 434 9 98 429 71 4 12 12 26 8395 911 57 78 168 14 934 525 28 37 64 79 31 539 552 3 593 329 3958 796 75 844 6 57 7686 971 9 1 9 58 36 176 7938 7 22 295 68 8968 99 9 62 43 3 5894 61 48 216 7994 52 3 234 97 779 9 87 34 96 756 846 138 2 65 696 93 5 36 14 85 58 4 12 9 23 262 23 47 89 41 7 6953 294 614 913 4 8 2 21 469 78 3 4 51 3 18 335 43 899 359 33 19 954 841 7 3 146 318 97 357 3623 7 2 8 17 417 63 68 563 655 397 67 5 75 17 1 2 4 4822 624 859 18 17 4 7388 59 25 151 4 9343 7 3 8441 7 64 36 2 69 389 34 85 63 43 38 29 43 44 77 97 453 86 48 387 57 635 79 4 226 4 215 413 462 215 646 3 9 4652 39 49 31 5 64 788 59 5533 6 8 27 555 417 929 455 421 43 2 56 7 5 9 12 4 47 3 881 41 59 5 922 88 298 684 7 39 7177 41 16 59 7 343 2 8515 78 432 711 97 39 54 369 923 64 874 749 9 238 19 753 5437 87 15 6 3 342 21 35 38 3 26 21 599 82 697 4 565 165 58 67 429 1 46 54 64 4 96 25 9337 5 65 988 47 643 72 112 1 352 6726 915 814 8 8 41 389 81 441 2828 76 86 64 1 87 549 851 5 3 517 36 73 1 95 4 868 1633 2424 37 58 84 7698 6614 5 75 79 321 723 151 692 53 4184 151 27 2 34 9 18 77 23 7 51 432 97 984 35 18 72 8 834 816 29 14 7 83 9 769 9 126 59 66 15 24 43 3896 7 8942 6744 8 5 12 1472 73 15 71 93 592 151 23 74 49 66 873 8 72 5 286 727 217 28 514 95 376 2 8593 875 71 39 7 138 692 91 91 66 37 148 19 869 17 15 1 78 62 78 1 37 7 1 97 344 345 25 956 6 86 48 15 88 7457 82 95 4 391 521 36 67 154 4 65 6836 911 1225 34 14 412 8 15 213 84 27 84 321 141 4 6 988 7 33 47 44 8 9298 764 54 223 627 1 14 77 72 6667 8134 5341 41 314 55 812 153 48 41 8671 1 3 31 3 649 91 494 5 56 766 84 41 25 44 35 56 1449 71 42 58 21 65 6 62 1 531 869 67 64 371 53 9217 77 8 3 16 23 692 46 16 9 528 831 15 9 57 1272 8 9 43 11 782 495 3134 311 125 719 3 5619 859 7 468 1979 1 96 77 6 531 5 46 84 2 119 5 4 91 135 26 57 535 69 14 66 3187 82 45 5 641 897 2 1955 8424 586 2778 13 383 9 3849 879 347 84 93 29 22 4984 22 376 45 4 243 283 5 11 145 957 76 686 18 4 12 379 22 69 132 31 55 6 4 646 492 392 8 63 68 92 584 9652 758 1461 43 689 68 8 15 141 13 896 29 7 7167 92 231 45 2 647 7 84 4 585 823 9461 31 4695 134 112 296 15 4 2 54 8 216 3484 64 246 814 5 955 97 261 27 975 92 686 7 5 8285 3 44 69 94 741 89 19 71 97 579 42 8361 695 72 8 18 27 9453 849 5 544 62 64 99 1 26 7 293 8 23 23 537 65 4 22 92 95 92 524 42 68 835 23 79 23 83 432 16 72 686 248 39 8 7264 8 195 91 834 545 42 71 729 6 6318 81 334 535 29 31 997 8 83 7255 1 48 356 189 135 6273 1 275 658 48 65 32 8 +396 6981 61 88 8878 496 22 56 189 23 58 934 89 78 74 587 87 47 52 837 792 9199 34 4329 15 5 767 2593 54 252 673 76 79 191 3 472 53 69 128 419 7978 8749 3714 276 382 476 458 183 57 216 364 77 76 774 82 69 64 42 762 67 17 1661 3 74 38 22 962 437 624 898 7 928 69 22 65 119 8764 23 637 49 59 75 387 95 27 164 6 573 5 19 2 55 99 19 899 55 36 236 1827 71 535 177 36 34 195 52 96 565 17 751 986 5514 17 62 57 46 73 158 2 7413 396 228 475 749 832 76 16 6381 446 236 4 211 788 642 9 995 28 744 423 34 429 34 814 23 6734 225 34 982 639 36 69 77 465 27 75 72 1458 4194 349 71 2653 1885 619 85 6466 7585 336 385 92 2126 28 341 593 7242 184 13 732 28 739 22 314 368 27 797 61 91 191 76 49 924 7167 738 46 85 621 715 762 767 68 94 124 69 229 348 63 61 77 93 867 658 21 43 3 28 132 7 32 64 7 281 42 498 125 37 53 61 549 61 312 19 45 9 67 65 29 372 58 3 1679 741 31 732 547 2693 137 5645 817 44 573 26 352 444 9195 75 6522 264 65 92 822 87 496 4 85 34 6916 459 18 6694 478 33 244 595 36 59 762 13 98 526 527 277 72 283 9177 794 28 696 18 283 1529 631 23 34 6 18 694 249 377 28 33 369 39 5746 67 35 69 32 771 9879 96 83 121 2225 88 73 616 96 938 51 421 86 25 748 872 388 337 74 716 563 4 99 93 53 254 4 67 67 58 848 724 84 78 3 69 111 792 537 385 7 75 82 378 565 12 94 451 57 3 26 355 85 682 867 38 478 32 972 5 63 1162 75 63 325 9775 8 65 9 7137 513 94 83 86 679 221 77 67 55 25 24 827 6 4982 356 986 2863 81 3 553 177 75 748 7 6657 4 12 1572 4 63 76 85 66 837 79 75 56 17 82 24 85 74 36 451 79 88 28 658 97 352 533 3 924 59 98 884 495 963 442 28 49 4481 38 46 77 89 83 8559 63 1787 3 34 17 845 3788 632 186 475 34 45 21 11 636 61 91 3 792 2 258 11 15 4 378 59 847 785 25 49 866 46 28 787 341 528 73 6817 51 458 778 25 45 28 1416 234 15 963 131 2 865 59 13 3167 765 38 64 93 223 37 18 6349 4 272 78 9134 132 363 793 315 11 76 57 626 76 63 871 42 32 8938 795 4197 6 12 9 74 92 256 529 26 417 3384 872 289 43 465 487 568 54 327 9195 268 33 67 35 84 178 338 52 1 268 6595 465 2 23 41 543 1385 1697 24 21 16 3917 9122 31 43 39 798 357 911 698 93 5892 344 55 44 1724 74 97 483 558 152 17 543 49 595 83 86 14 8 955 862 9169 85 5 45 127 964 58 278 11 33 439 15 14 4581 89 254 8391 8 64 75 2883 42 11 27 261 223 978 28 58 74 72 465 94 43 12 553 737 912 265 432 1 226 49 654 736 59 67 76 523 986 47 52 69 26 499 34 27 38 52 71 96 99 4 15 97 24 4 33 985 647 44 191 4 79 56 337 865 3121 71 34 9 227 496 74 965 115 3 76 8241 259 2937 54 57 984 99 69 9219 98 67 35 783 239 9 16 663 16 74 46 54 15 2827 524 12 123 53 35 91 33 232 2865 3212 3495 74 849 65 163 1387 847 93 4113 19 3 46 28 769 19 753 7 79 678 28 36 65 28 557 413 2553 79 84 37 96 839 74 43 5 234 649 38 525 92 78 1864 39 1 4 92 85 638 41 54 17 338 498 35 22 66 2886 25 9 55 562 681 216 2574 947 396 983 632 4662 739 24 48 5684 2 4 4357 5 925 4 43 14 86 24 38 21 49 96 47 77 815 62 16 9 1172 43 14 34 827 611 52 5746 2635 136 5443 11 996 4 2653 485 376 37 46 59 15 7239 353 725 55 43 155 847 76 19 658 271 84 441 38 28 14 336 88 25 871 611 4 43 73 459 998 326 79 72 628 776 323 4119 182 3675 53 68 827 49 29 287 12 5546 11 79 7423 91 233 65 1 438 45 44 49 877 41 5329 64 7984 899 928 351 58 39 7 6 62 135 134 26 823 383 16 536 11 517 684 414 39 13 32 7 787 2 23 622 71 216 93 72 76 31 843 58 859 378 75 2 52 545 4994 795 2 432 96 16 586 44 54 6 729 12 8868 86 459 51 7 6672 55 96 66 682 62 732 727 45 57 92 22 26 76 15 233 584 19 97 8584 9 237 92 971 965 81 98 927 3 9937 14 426 936 28 45 664 4 44 342 19 936 569 223 937 991 134 857 493 11 11 55 28 +287 3485 83 17 3576 929 26 31 133 49 42 912 7 77 3 477 16 1449 16 145 52 1593 91 1745 34 43 76 4991 82 23 2 86 34 81 33 343 82 27 662 232 9188 593 8421 178 917 41 688 561 8 254 157 17 1 693 8 848 92 99 148 47 25 7314 28 513 37 6 946 92 185 1577 4937 37 4 93 42 159 6525 22 48 15 661 69 45 848 63 973 46 157 2 52 9 24 11 38 743 35 93 414 7349 31 45 56 457 57 878 12 47 313 21 549 852 277 72 86 55 6624 639 763 94 7174 882 756 71 447 481 11 93 6553 4573 1835 1 332 932 235 64 83 43 365 774 52 928 83 12 22 7954 36 756 5272 858 28 611 82 157 65 48 6 575 571 157 54 2812 259 323 16 6364 1376 297 868 39 18 33 1492 997 85 112 71 4165 112 584 316 183 884 153 351 23 29 163 128 673 167 5286 853 92 85 611 496 991 321 7 63 393 72 226 627 76 38 21 99 981 796 1 62 12 228 78 42 48 65 9 834 27 7625 7723 63 48 646 99 14 851 53 367 97 54 92 58 481 57 46 3649 346 69 34 969 1217 686 581 425 227 932 88 997 689 4768 61 622 751 26 375 73 81 711 3 78 6 1999 811 84 2175 669 2 53 523 65 86 571 42 21 448 31 581 4 597 9782 262 12 958 87 4263 392 377 86 826 94 46 658 798 791 31 41 764 96 9615 43 52 35 51 772 934 4695 1 295 86 816 52 481 34 92 58 583 97 31 664 984 515 279 67 18 283 24 3 28 18 2934 31 68 68 17 572 751 19 94 2 68 981 154 89 186 58 13 74 361 6794 21 68 581 73 93 77 51 323 996 844 62 985 95 212 98 826 6213 17 942 63 482 1 34 17 1553 1 599 87 16 55 477 4 53 1 93 39 218 35 822 387 74 7311 966 71 144 1637 81 688 18 9365 8 31 1951 875 36 11 25 89 767 12 41 18 82 296 86 75 67 39 498 57 66 952 352 53 31 215 21 423 44 94 744 148 268 269 52 171 5419 86 81 348 74 87 5596 36 745 84 127 47 937 9351 679 772 17 14 35 78 96 156 24 91 75 673 45 69 55 5 861 3 74 13 64 78 46 575 98 4125 245 145 618 597 5584 1 965 345 32 9 83 9814 6 446 815 561 17 55 45 63 7376 768 38 97 94 775 98 2 9176 42 395 65 7864 466 554 496 392 58 2194 25 694 21 98 763 85 33 4344 122 9679 222 15 9 25 6 317 526 51 59 636 99 821 36 696 259 62 78 167 8493 194 55 414 679 11 379 538 32 66 858 7347 541 87 33 92 694 717 359 96 42 16 517 8269 69 21 28 576 576 235 78 797 1597 728 16 87 9596 53 34 926 288 687 1 295 57 79 62 43 63 54 771 4117 8497 22 76 56 981 252 616 12 57 11 886 45 88 2221 423 516 576 71 783 14 7377 39 54 82 364 148 296 97 94 39 18 24 75 93 68 26 466 987 754 8 8 385 638 654 125 35 97 13 192 516 277 54 84 89 823 48 43 87 86 87 83 54 9 388 39 79 58 56 434 747 76 26 57 99 96 994 5289 8665 17 73 48 298 234 731 617 351 624 42 1234 92 937 7 65 578 967 187 4781 24 984 45 29 457 89 63 8 518 77 99 26 32 478 158 34 124 65 87 66 38 759 6429 277 7571 564 65 86 58 6591 872 129 753 89 8 91 81 788 28 367 82 15 55 12 67 77 13 3537 812 6434 42 92 2839 89 764 79 42 84 276 45 59 915 74 61 944 68 55 93 5 55 982 74 64 34 287 7419 16 646 78 9412 54 91 82 617 25 854 9969 682 296 688 995 344 9339 28 78 9378 28 6 6685 6 719 96 1161 681 45 63 51 84 69 14 83 1 617 1 57 8 6199 97 2467 839 788 374 92 55 94 595 345 936 6824 64 3733 143 94 133 31 98 54 3694 941 963 38 64 115 155 855 329 314 859 448 469 12 73 57 292 22 87 424 5775 6 438 57 663 457 933 37 42 7656 961 7 9384 589 589 71 68 597 99 17 266 47 3274 84 88 676 43 5 35 9 36 68 73 319 884 45 191 18 972 691 218 213 11 56 79 5 22 37 454 32 37 926 76 53 18 83 612 585 8 49 168 243 969 1 75 927 44 87 78 15 275 67 315 71 613 579 88 45 88 735 436 1 44 879 81 49 457 413 6 26 215 53 1154 34 251 843 192 7845 2762 46 21 81 416 194 155 24 49 61 26 79 58 187 546 43 76 189 467 97 991 29 5 396 94 38 648 24 4964 2 464 26 224 45 19 253 51 612 92 2164 9758 141 942 52 5588 215 691 78 43 99 155 +655 4247 97 83 257 518 33 78 634 552 54 596 4 9 8 347 17 4926 84 975 2 5732 892 49 12 76 71 3211 87 9 4 6 57 4 66 247 5 92 981 268 1935 139 758 86 476 17 436 974 1 652 774 32 7 615 2 831 74 4 763 18 3 37 51 3741 2 2 323 41 644 5638 8931 66 6 33 35 231 7234 28 1 35 946 58 98 225 48 8 51 6 5 386 8 81 8 61 16 9488 65 134 2172 2 55 12 723 97 66 7 58 272 9 443 767 9 63 28 1 6675 262 187 23 211 693 518 3 3 259 9 68 223 2931 2831 4 977 128 136 68 31 89 691 491 23 75 93 71 86 522 23 813 6798 75 6 126 46 872 93 23 9 446 299 82 2 37 23 993 45 498 65 434 65 5 1 41 2858 592 15 896 54 8294 5257 956 526 235 982 925 821 71 82 19 837 869 65 927 334 53 176 382 241 172 573 7 6 83 4 272 1 14 78 62 32 26 131 4 19 9728 673 6 99 48 97 33 113 9 7892 7575 4 29 188 4 83 639 9 314 97 57 48 87 561 8 29 9553 6 27 5 73 3546 635 73 655 197 918 3 1 57 3765 61 57 6 92 471 45 83 547 5 93 7 595 393 2 2998 847 1 4 399 39 65 951 72 8 264 89 892 3 766 61 165 82 45 34 5443 155 92 89 663 96 39 728 36 7 69 75 51 35 4435 35 76 21 95 6329 97 1772 4 127 7 692 672 33 49 59 75 644 83 235 844 582 177 318 6 6 229 55 9 89 1 3785 97 31 59 24 669 395 54 52 4 47 7 88 52 447 84 38 58 433 9843 95 81 998 4 44 6 2 362 1 17 1 514 8 8765 29 112 9446 4 485 3 756 19 34 997 8317 4 651 12 1 58 62 7 26 8 3 61 551 75 98 8 4 5867 379 27 559 3553 7 124 51 913 48 64 135 892 14 25 76 49 9 88 1 93 26 226 85 22 76 44 781 9 112 831 91 5 89 919 61 489 47 5 456 173 74 134 38 416 64 93 8 341 85 79 5687 83 32 81 836 82 911 5331 82 24 38 83 83 92 34 959 363 59 51 218 48 19 46 5 655 7 9 9 33 15 7 634 616 8376 931 736 958 965 967 1 43 525 76 7 88 3866 5 634 642 95 46 4 96 9 2391 299 46 14 99 237 42 3 6281 87 1439 75 9758 131 81 762 167 8 1914 3 855 75 79 578 15 37 7134 792 325 424 9 7 66 4 227 31 551 36 38 31 444 99 5229 317 41 75 491 366 854 31 255 972 96 925 24 55 26 43 2432 611 26 23 27 48 63 65 17 39 43 93 22 41 4 68 579 957 649 7 976 5 453 23 54 3677 39 9 834 7843 167 1 242 32 11 84 92 66 53 6195 7362 8389 7 41 71 672 796 284 5 4 83 8787 76 8 4855 485 56 684 14 512 5 278 86 4 27 835 6 23 72 7 627 78 28 89 2 54 1 73 3 6339 5 5 912 984 861 79 8 24 268 925 99 397 567 52 18 63 12 97 3 39 56 9 56 5 972 2 95 86 61 461 781 1 12 38 26 38 979 6975 833 8 74 87 671 49 648 358 32 342 3 814 38 753 6 9 89 737 748 4943 96 1688 73 87 162 86 84 5 374 25 31 466 1943 83 376 653 56 9 69 37 1 743 89 53 16 882 1 67 89 8594 626 253 92 75 34 48 87 722 1 289 65 9 44 13 25 13 51 3568 271 3211 96 8 8488 34 813 26 95 83 33 4 4 336 49 73 75 88 44 159 7 86 561 45 43 89 93 4616 66 328 96 16 45 92 41 943 41 362 437 72 571 774 884 58 8381 66 45 89 27 5 1467 99 791 81 7139 5578 24 9 57 34 21 7 187 8 768 6 16 1 8551 37 1539 229 421 3 62 23 21 855 41 999 4795 13 84 13 79 165 7 72 23 2 627 39 16 215 185 44 385 216 755 24 847 51 96 12 12 24 8 1 359 7156 5 719 64 23 647 153 65 87 2848 286 7 8455 837 82 49 9 292 71 1 474 5 9336 66 29 157 6 4 21 11 14 77 6 474 289 33 94 4 83 183 95 278 9 19 77 6 79 52 78 67 99 8 39 24 32 7 775 49 5 3 531 578 511 59 23 794 22 15 84 48 363 83 5331 8 81 692 5 85 59 598 687 1 99 896 5 7 694 551 4 68 72 17 3623 59 6 491 827 2732 3721 66 93 72 676 156 6 95 11 44 46 22 4 323 74 91 8 315 34 12 3 1 8 194 34 11 1 47 5538 1 79 9 152 27 46 329 5 314 86 5955 1963 53 799 41 1292 814 91 49 46 95 429 +* + * + + * * + + + + * * * * * * + * + * + * + + * * + + * + * * * + * * + * * + + + + * * * * + * * * * * * + * + * + * + * + + * * * + + + + + * + * + + * * + + * * * + + * + * + + * * + + * * + * + + * * + * + * * + * + * + + + + * * + * * * + * * * + + + * * * * + + * + + + * * + * + * * + + * * * + + + * + + * * + + + + + + * * * + + + * + * * + + * * * * * + + * * + * * + + * + * * * * * * + * + * + * * * * * + * + + * + * + + * * + + + * + * * * * * + + + + + + + + * * * * + * + + * + * * * + + + + * * * * * * + + + + * + + * + + * * + + * * * * * * + + + + + + + * + * + * * + + * * * + + + + + * + + + * * + * + * * * * * + * * * + * + * * * * + * + * + * * * * * * + + + * * * + + * + + * * * + * + * + * * + + + + * * + * * + + * * * + + + + * + * * * * * * + * + * * + + * + + * * * + * * + + + * * * + * + + * * * + + * * * * * * + * + * + * * * * * * * * + * + * * * + * + * + + + + * * + * * * * + + * + * * * * + + * * * * * * + * + + + * * + * * * * * * + * + * * * * + * + + * + * * + + + * + * + * * + + * + * * + + + * + + * + * * + * + * * + * + * * * + * * * + + + + * + + + * + * * + + * + + * + + * + * + + * * + + + + + + + * + + + * + + + * * * + * + * + * + + + + * + * * + + * + + + + + + + + + + * + + * * * + * + * * + * * + * * * + + * + * * + + + + * * + * * * * * + * * * * * * + * + + * * * * * * * + * + + + + * * * + * * * * + + * + * * * * + + * + * * * * + * * + * * + + + + * + * + * * + + + * + * * + * + + * + + * * * * * * + * * * * + * + * * + + * + + * * * + * * + + * * + + * * * * + * + * + * + * * + + * + + + * * + + + * + + + + + * * * + + * * * * * + * * * + + * + * + * * * + + + + + * + + + * * + * * + + * + * * * * * * * * + + + + * * + + + + * + * * + * + * + + * + * + + * * * * + + + + * + * * + * * * + * * + + * + * + + * * + * + * + * * + + * + * + * * + * * + * + + * * * + * * + + + * * + * + + * * * * + + * * + + * + * + + * + + * + * * + + * * + * + * + + * * + + * * * + * * + * * + * + * * + * * * + + + + * + + + * * * + + * \ No newline at end of file diff --git a/day07/run.pl b/day07/run.pl new file mode 100755 index 0000000..928794a --- /dev/null +++ b/day07/run.pl @@ -0,0 +1,232 @@ +#!/usr/bin/perl +use strict; +use Config; +$Config{useithreads} or + die('Recompile Perl with threads to run this program.'); +use threads; +use Thread::Queue; + + +my @lines; +{ + my $splits=0; + my %positions; + my %nextpositions; + while(my $line=) { + chomp($line); + push @lines, $line; + for(my $i=0; $inew(); +my @threads; + +$queue->enqueue($startpos); +for(my $i=0; $i<$numworkers; $i++) { + push @threads, threads->create(\&process); +} + +foreach my $thread (@threads) { + my $count=$thread->join(); + print "Joined thread with $count ends\n"; + $ends+=$count; +} +print "$ends total ends\n"; + +sub process { + my $ends = 0; + while(my $pos=$queue->dequeue_timed(5)) { + my($x,$y)=@$pos; + + for(;;) { + $y++; + if($y == @{ $rows[$x] }) { + $ends++; + last; + } elsif($rows[$x][$y] eq '^') { + $queue->enqueue([$x-1, $y]); + $queue->enqueue([$x+1, $y]); + last; + } + } + } + return $ends; +} + + + +__DATA__ +......................................................................S...................................................................... +............................................................................................................................................. +......................................................................^...................................................................... +............................................................................................................................................. +.....................................................................^.^..................................................................... +............................................................................................................................................. +....................................................................^.^.^.................................................................... +............................................................................................................................................. +...................................................................^...^.^................................................................... +............................................................................................................................................. +..................................................................^.^...^.^.................................................................. +............................................................................................................................................. +.................................................................^...^.^.^.^................................................................. +............................................................................................................................................. +................................................................^.^.........^................................................................ +............................................................................................................................................. +...............................................................^.^...^.^.^.^.^............................................................... +............................................................................................................................................. +..............................................................^.^.^.^.^.^.....^.............................................................. +............................................................................................................................................. +.............................................................^.^.....^...^.^.^.^............................................................. +............................................................................................................................................. +............................................................^...^.....^.^...^.^.^............................................................ +............................................................................................................................................. +...........................................................^.....^.^.^.^.^.^.^.^.^........................................................... +............................................................................................................................................. +..........................................................^...^...^.....^.^...^.^.^.......................................................... +............................................................................................................................................. +.........................................................^.^.....^.^.....^.^.^.^.^.^......................................................... +............................................................................................................................................. +........................................................^...^.^.^.^...^.^.....^.....^........................................................ +............................................................................................................................................. +.......................................................^.^.^.^.^.^.....^.....^.^.^.^.^....................................................... +............................................................................................................................................. +......................................................^.^.....^.^.^.....^.^...^...^.^.^...................................................... +............................................................................................................................................. +.....................................................^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^..................................................... +............................................................................................................................................. +....................................................^.^.^...^.^.^.^.^.^.^.^...^...^.^.^.^.................................................... +............................................................................................................................................. +...................................................^.^...^.^.^.^.^.^...^.^.^.^.^...^...^.^................................................... +............................................................................................................................................. +..................................................^.^.^.^...^.^.^.^.^.^.^...^.^...^.^...^.^.................................................. +............................................................................................................................................. +.................................................^.^.^.^...^.^.......^.^.^.^.....^.^.^.^.^.^................................................. +............................................................................................................................................. +................................................^...^.^.^.^.^.^.^.^.^.^.....^.^.^...^.^.^...^................................................ +............................................................................................................................................. +...............................................^.....^...^.^.^.^.^...^...^.^.^.^.^.^.^.^...^.^............................................... +............................................................................................................................................. +..............................................^...^.^...^.^...^.....^.^.^.^.^.^...^.^.^.......^.............................................. +............................................................................................................................................. +.............................................^.^.^.^.^...^.^.^.^.^.^...^.....^.^.....^.^.^...^.^............................................. +............................................................................................................................................. +............................................^.^.^.^.^.^.^.^.^.^.^...^.^.....^...^.^...^.^.^.^...^............................................ +............................................................................................................................................. +...........................................^.^.....^.^.....^.^.^.^.^.^.^.^.^.^...^.^...^.^.^.....^........................................... +............................................................................................................................................. +..........................................^.^.^...^.....^.^.^.^.^...^.^.....^.^.^.^...^...^.^...^.^.......................................... +............................................................................................................................................. +.........................................^.^...^.^.^.^.^.^.^.^.^.^.^.....^.....^.^.^.^.^.^.^.^.^.^.^......................................... +............................................................................................................................................. +........................................^.....^.^...^.^.^.^.....^.^.^.^...^...^.^.^.^.^...^.^...^.^.^........................................ +............................................................................................................................................. +.......................................^.^.^.^.....^.^.^.......^.^.........^...^.^.^.^.....^.^.....^.^....................................... +............................................................................................................................................. +......................................^.^.....^.^.^...^.^...^.^.......^.^...^.^.^.^.^.^...^.....^.^...^...................................... +............................................................................................................................................. +.....................................^.^.^...^.^.^.^.^.....^.^...^.....^.....^...^.^...^.......^.^.^.^.^..................................... +............................................................................................................................................. +....................................^.^.^...^...^.^.^...^.^...^.^.^.^.......^.....^.....^.^.......^.^.^.^.................................... +............................................................................................................................................. +...................................^.^.^.^.^...^...^.^.^.^.^.^.^.^.^.^.......^.^...^.^...^.^.^.^.^...^.^.^................................... +............................................................................................................................................. +..................................^...^.^.^.^...^.......^.^.^...^.^.......^.^.^.....^...^...^.^.^...^.^...^.................................. +............................................................................................................................................. +.................................^...^.......^.^.^.....^.^...^.^...^.^.^.^.^.^.....^.^...^...^.^.^...^...^.^................................. +............................................................................................................................................. +................................^.^.^...^.^.^.^.^.^.^...^...^.^.......^.^...^.^.^...^.^...^.^.^.^.^...^...^.^................................ +............................................................................................................................................. +...............................^.^.....^.^.^...^.^.^.^...^.........^.^.^.^.........^.^.^...........^.^.^.^...^............................... +............................................................................................................................................. +..............................^.^...^.^...^...^...^...^.^.^.^.^.^...^.^.^...^.^.^...^.....^.^.^...^...^.^.^...^.............................. +............................................................................................................................................. +.............................^.^.^.^.^.^.^.....^.^.^.^.^.^.....^...^.^.^.......^.^.^.^.....^.........^.^.^.....^............................. +............................................................................................................................................. +............................^...^...^.^.^...^...^.^.^.^.^.^.^.^.^.^.......^.^.......^.^.....^.^.^.^...^.^...^...^............................ +............................................................................................................................................. +...........................^.^.^...^.^.^.....^.....^.^.......^.^.^.....^.^.^...^.....^...^.^.^.^.....^.^.^.^.^.^.^........................... +............................................................................................................................................. +..........................^.....^.....^.^...^.^.^.^.^.^...^.^.^.^.^.^...^.^...^.^.^...^.^.^.....^.^.^...^.^...^...^.......................... +............................................................................................................................................. +.........................^.^...^.^.^.^...^.^...^.^.........^.......^.^.^.^.^.^...^.^.^.^.^.^.^...^.^.^...^.^.^.^...^......................... +............................................................................................................................................. +........................^...^.^.^.^...^.^...^...^.^...^.^.^...^.^.^.^.^.^...^.^.^...^.......^.^.^.^.^...^.....^...^.^........................ +............................................................................................................................................. +.......................^.^.^...^.^.^.....^.^...^.^.^...^...^.^.^...^.^.^...^.^.....^.^.^.^.^...^.^.........^.^.^.^.^.^....................... +............................................................................................................................................. +......................^.^.^.^...^.^.^.^.^.....^.^.^.....^.^.^.^.^...^.^.^.....^.^.....^...^.^.^.^.....^...........^.^.^...................... +............................................................................................................................................. +.....................^.^.^.^.^.^...^.^.^.^.^.....^.^...^...^...^.^.^.^.^.....^.^.^.....^.^...^.......^.^.^.....^.^.^.^.^..................... +............................................................................................................................................. +....................^...^.^.......^.^.^.^.^.^.........^.^.^.^.......^.^...^.^.^.^.^.^.^.^.^...^.^.^.....^.^.^.^.^.^.^.^.^.................... +............................................................................................................................................. +...................^.^.......^.^...^.^.^.^.^.^...^.^...^.^...^.....^.^.^...^.^...^.^.^.^.^...^...^.^.....^.^...^.^.^.^.^.^................... +............................................................................................................................................. +..................^.^.........^.^.^...^.^...^...^.^.^.^.^.^.^.^.^.^.^.^...^.^.^.^.^.^.^.^.^.^.^...^.^.^.^.^...^.....^...^.^.................. +............................................................................................................................................. +.................^.^.^...^.^.^.^.^.......^.^.....^.^...^.^.^...^.^.^...^.^.^.^.^...^.......^.^...^.^.^.........^.^...^.^.^.^................. +............................................................................................................................................. +................^.....^.^.^...^.^.^.^.^...^.^.^.^.^.^.^.^...^.^.^.^.^.^.^...^...^.^...^.^.^.^...^.^.^.^.^.^.....^...^.....^.^................ +............................................................................................................................................. +...............^.....^.^.^.^.^.^.^.^.^.^...^.^...^...^...^...^...^.^.^.^.........^.^.^.^.^...^.....^.^.......^...^...^.^.^.^.^............... +............................................................................................................................................. +..............^.^.^.^.^.^.^...^.^.^.^.^.^.^.^...^.^.^.^...^.^...^.^.^.^.^...^.^.^.^.^.^.^.^.....^.^...^.^.^.^.^...^.....^.....^.............. +............................................................................................................................................. +.............^.^...^.^.....^.......^.....^.....^.^...^.^.^.^.....^.^.....^.....^.^...^.^.^.^.^...^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^............. +............................................................................................................................................. +............^.^...^.^.....^.^.^.^.^.^.^.^...^...^.^.^.^.^.^.^.^.^.^.^...^.....^.^...^...^.........^.^...^.^...^.^.^.^.^.^.^.^...^............ +............................................................................................................................................. +...........^...^.^.^...^.^...^...^.^...^...^.^.^.^...^.^.^...^.^.^.^.^...^.^.^.^.^.^.^.^.^.^.^.^.....^.^.^.^.^...^.^.^.....^.^.^.^........... +............................................................................................................................................. +..........^.^.........^.^...^.....^.^.^.^.^.^.^.^...^...^...^.^.^.^.^...^.^.^...^...^...^.^.^...^.^.^.^...^.^.^.^...^.....^...^...^.......... +............................................................................................................................................. +.........^.^.^.^...^...^.^.^.^...^.^.^.^.^.^.....^...^.^.....^.^...^...^.^...^.^.^.^...^.^...^...^.^.^.^...^...^.....^.^.^...^...^.^......... +............................................................................................................................................. +........^...^.^.^.^...^.^.^.^.^.^.^...^.^.^.........^...^.^.^.^.....^.^...^.^.^.^.^.....^.^.^.^.^.^.^.^.^.^...^.^.^.....^.^.....^.^.^........ +............................................................................................................................................. +.......^.......^.^.^.^...^.^...^.^...^.^.^.^.^.^.^.^.^...^.^.^...^...^...^.^.^...^.^.^...^.^.^.^.^.^.^...^.^.....^.^.^...^.^.^...^.^.^....... +............................................................................................................................................. +......^...^...^.^.....^.^.^.^.^.^.^...^.^.^.^...^.^.^...^.^.^.....^.^.^.....^.^.^.^.^...^.^.^.^.....^.^.^...^.^.^.....^.^.^.^.^.^...^.^...... +............................................................................................................................................. +.....^.....^.^.^.^.^...^.........^.....^.......^.^.^...^.^.......^.^.^.^...^.^.^.^.^...^.^.^.^.^.^.^...^...^.^.^...^...^.^...^.^.....^.^..... +............................................................................................................................................. +....^.^.^.^...^.^.^.^.^.^.^...^.^.^.^.....^.^.^.....^.^.^.^...^.....^.^.....^...^.^...^.^.^.^.^.^.^.^.^.^.^.^.^.^...^.^.^...^.^.^...^...^.... +............................................................................................................................................. +...^...^.^.^.^.^.^...^.^.^.^.^.^.^.^.....^...^.^.^.^.^.^.....^.^.^.^.^.^...^.......^.^...^...^.^.^.^...^.^.^...^.^.^.^.^.^.^.^...^.^.^...^... +............................................................................................................................................. +..^.^.^.^...^.^.^.^.^...^.....^...^.^.^...^...^.^.^.^...^...^.^.^...^...........^.^.^.^.......^...^...^.^.^.^.^.^.^.^.^.^.^...^.^.^.^.^.^.^.. +............................................................................................................................................. +.^.^.^.^.^.^.^.^.^.^.^.......^.^.^.^.^.^.^.^...^.^...^.^.^.^.^.^.^...^.^.^.^.^.^.^.^.^.^.....^.^.......^.^.^.^.^...^...^.^.^.^.......^.....^. +............................................................................................................................................. \ No newline at end of file