#!/bin/sh -eu find_uniq() ( printf "$1" | fold -w 1 | sort -u | tr -d '\n' ) find_dup() ( printf "$1" | fold -w 1 | sort | uniq -d ) prioritize() ( ord=$1 if [ $ord -lt 97 ] then p=$((ord - 38)) else p=$((ord - 96)) fi printf "$p" ) p1() ( sum=0 while IFS= read -r l do c1=$(find_uniq $(printf "$l" | cut -c-$((${#l} / 2)))) c2=$(find_uniq $(printf "$l" | cut -c$((${#l} / 2 + 1))-)) dup=$(find_dup "${c1}${c2}") sum=$((sum + $(prioritize $(printf "%d\n" "'$dup")))) done < input.txt printf "%s\n" "$sum" ) p2() ( sum=0 while IFS= read -r r1; IFS= read -r r2; IFS= read -r r3 do r1=$(find_uniq "$r1") r2=$(find_uniq "$r2") r3=$(find_uniq "$r3") dup=$(find_dup "${r1}${r2}") dup=$(find_dup "${dup}${r3}") sum=$((sum + $(prioritize $(printf "%d\n" "'$dup")))) done < input.txt printf "%s\n" "$sum" ) p1 p2