My solutions for the Advent of Code 2023
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
#!/bin/bash
replacedigits( ) {
rep = " $1 "
i = "0"
len = " ${# rep } "
ret = ""
while [ $i -lt ${ len } ] ; do
case " ${ rep : ${ i } : 1 } " in
0| 1| 2| 3| 4| 5| 6| 7| 8| 9)
ret = " ${ ret } ${ rep : ${ i } : 1 } "
i = $(( i+1))
continue
; ;
esac
#echo ${i} ${rep} ${rep:${i}:1}
#echo ${rep:${i}:3} ${rep:${i}:4} ${rep:${i}:5}
if [ ${ rep : ${ i } : 3 } = one ] ; then
ret = " ${ ret } 1 "
elif [ ${ rep : ${ i } : 3 } = two ] ; then
ret = " ${ ret } 2 "
elif [ ${ rep : ${ i } : 5 } = three ] ; then
ret = " ${ ret } 3 "
elif [ ${ rep : ${ i } : 4 } = four ] ; then
ret = " ${ ret } 4 "
elif [ ${ rep : ${ i } : 4 } = five ] ; then
ret = " ${ ret } 5 "
elif [ ${ rep : ${ i } : 3 } = six ] ; then
ret = " ${ ret } 6 "
elif [ ${ rep : ${ i } : 5 } = seven ] ; then
ret = " ${ ret } 7 "
elif [ ${ rep : ${ i } : 5 } = eight ] ; then
ret = " ${ ret } 8 "
elif [ ${ rep : ${ i } : 4 } = nine ] ; then
ret = " ${ ret } 9 "
fi
i = " $(( i+1)) "
done
echo " $ret "
}
sum = 0;
for number in $( cat " $1 " | sed s/[ ^0-9] //g) ; do
sum = $(( sum+${ number : 0 : 1 } * 10 + ${ number : ${# number } -1 : ${# number } } ))
done
printf "part 1: %d\n" $sum
sum = 0
for number in $( cat " $1 " | sed s/one/o1e/g | sed s/two/t2o/g | sed s/three/t3hee/g | sed s/four/f4ur/g | sed s/five/f5ve/g | sed s/six/s6x/g | sed s/seven/s7ven/g | sed s/eight/e8ght/g | sed s/nine/n9ne/g | sed s/[ ^0-9] //g) ; do
sum = $(( sum+${ number : 0 : 1 } * 10 + ${ number : ${# number } -1 : ${# number } } ))
done
printf "part 2 (faster alt): %d\n" $sum
sum = 0;
for line in $( cat " $1 " ) ; do
number = " $( replacedigits $line ) "
digits = " $(( 10 * ${ number : 0 : 1 } + ${ number : $(( ${# number } - 1 )) : ${# number } } )) "
#printf "%s %s %s\n" $line $number $digits
sum = $(( sum+${ digits } ))
done
printf "part 2: %d\n" $sum