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.
aoc2023/day1/day1.sh

62 lines
1.5 KiB

10 months ago
#!/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
10 months ago
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
10 months ago
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