Files
exercism/bash/scrabble-score/scrabble_score.sh
2021-08-08 21:11:22 +02:00

57 lines
1.1 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# V1: initial version
# V2: check for alphabetic chars only
shopt -s extglob
# set to mask to enable logs. 0: none, 255: all
(( debug=2#00000000 ))
#(( debug=2#00001111 ))
# $1: log level (mask), then strings to display.
debug () {
(( debug & $1 )) && shift && echo Line ${BASH_LINENO[0]}: "${@}" >&2
}
die () {
echo "${@}" >&2
exit 1
}
usage() {
die "usage: scrabble_score.sh word"
}
declare -A values=(
[A]=1 [E]=1 [I]=1 [O]=1 [U]=1 [L]=1 [N]=1 [R]=1 [S]=1 [T]=1
[D]=2 [G]=2
[B]=3 [C]=3 [M]=3 [P]=3
[F]=4 [H]=4 [V]=4 [W]=4 [Y]=4
[K]=5
[J]=8 [X]=8
[Q]=10 [Z]=10
)
(($# != 1)) && usage
word="${1^^}" # capitalize
[[ "$word" != +([[:upper:]]) ]] && usage # accept only alpha chars
debug 1 arg="$word"
((score=0))
for (( i=0; i<${#word}; ++i )); do
c="${word:$i:1}"
((score += ${values[$c]}))
done
echo "$score"
exit 0
# emacs/vim settings.
# Local Variables:
# sh-basic-offset: 4
# indent-tabs-mode: nil
# comment-column: 50
# fill-column: 80
# End:
# vim: set tabstop=4 expandtab: