#!/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