advent of code 2024 version unix - retour accueil
git clone git://bebou.netlib.re/aoc2024
Log | Files | Refs |
6.solve (2876B)
1 #! /bin/sh 2 3 < 6.input awk ' 4 function printboard() { 5 for(i=0;i<size;i++) { 6 for(j=0;j<size;j++) printf f[i,j] 7 printf "\n" 8 } 9 printf "\n" 10 } 11 { 12 split($0,a,"") 13 size=length(a) 14 for(i=0;i<size;i++){ 15 if(a[i+1]~ /[><^v]/ ) { startr=NR-1;startc=i } 16 f[NR-1,i]=a[i+1] 17 } 18 } 19 END { 20 curr=startr;curc=startc; 21 #print f[curr,curc] 22 #print size 23 #f[15,62]="#" 24 do { 25 #printboard() 26 if (f[curr,curc]=="^") { 27 if (f[curr-1,curc]=="#") { 28 f[curr,curc]=">" 29 } else { 30 f[curr,curc]="X" 31 curr=curr-1 32 f[curr,curc]="^" 33 } 34 } else if (f[curr,curc]==">") { 35 if (f[curr,curc+1]=="#") { 36 f[curr,curc]="v" 37 } else { 38 f[curr,curc]="X" 39 curc=curc+1 40 f[curr,curc]=">" 41 } 42 } else if (f[curr,curc]=="v") { 43 if (f[curr+1,curc]=="#") { 44 f[curr,curc]="<" 45 } else { 46 f[curr,curc]="X" 47 curr=curr+1 48 f[curr,curc]="v" 49 } 50 } else { 51 if (f[curr,curc-1]=="#") { 52 f[curr,curc]="^" 53 } else { 54 f[curr,curc]="X" 55 curc=curc-1 56 f[curr,curc]="<" 57 } 58 } 59 } while ( 0<curr && 0<curc && curr<size && curc<size ) 60 f[curr,curc]="X" 61 f[startr,startc]="^" 62 printboard() 63 } 64 ' | sed '$d' > res 65 grep -o "[X^]" res | wc -l 66 67 < res awk ' 68 function printboard() { 69 for(i=0;i<size;i++) { 70 for(j=0;j<size;j++) printf fcopy[i,j] 71 printf "\n" 72 } 73 printf "\n" 74 } 75 { 76 split($0,a,"") 77 size=length(a) 78 for(i=0;i<size;i++){ 79 if(a[i+1] ~ /[><^v]/ ) { startr=NR-1;startc=i } 80 f[NR-1,i]=a[i+1] 81 } 82 } 83 END { 84 #print f[curr,curc] 85 #print size 86 for(p=0;p<size;p++) { 87 for(l=0;l<size;l++) { 88 if (f[p,l] !~ /X/) continue 89 curr=startr;curc=startc; 90 delete fcopy 91 for(w=0;w<size;w++) { 92 for(x=0;x<size;x++) fcopy[w,x]=f[w,x] 93 } 94 block=p","l 95 print "putting block in"p","l 96 fcopy[p,l]="#" 97 count=0 98 do { 99 if (count++>500000) { print "block at "p","l;break;} 100 if (fcopy[curr,curc]=="^") { 101 if (fcopy[curr-1,curc]=="^") { print "block at "p","l ; break; } 102 if (fcopy[curr-1,curc]=="#") fcopy[curr,curc]=">" 103 else { 104 fcopy[curr,curc]="^" 105 curr=curr-1 106 fcopy[curr,curc]="^" 107 } 108 } else if (fcopy[curr,curc]==">") { 109 if (fcopy[curr,curc+1]==">") { print "block at "p","l ; break; } 110 if (fcopy[curr,curc+1]=="#") fcopy[curr,curc]="v" 111 else { 112 fcopy[curr,curc]=">" 113 curc=curc+1 114 fcopy[curr,curc]=">" 115 } 116 } else if (fcopy[curr,curc]=="v") { 117 if (fcopy[curr+1,curc]=="v") { print "block at "p","l ; break; } 118 if (fcopy[curr+1,curc]=="#") fcopy[curr,curc]="<" 119 else { 120 fcopy[curr,curc]="v" 121 curr=curr+1 122 fcopy[curr,curc]="v" 123 } 124 } else { 125 if (fcopy[curr,curc-1]=="<") { print "block at "p","l ; break; } 126 if (fcopy[curr,curc-1]=="#") fcopy[curr,curc]="^" 127 else { 128 fcopy[curr,curc]="<" 129 curc=curc-1 130 fcopy[curr,curc]="<" 131 } 132 } 133 }while ( 0<curr && 0<curc && curr<size && curc<size ) 134 } 135 } 136 } 137 ' | grep "block at" | wc -l