randletter.sh (1350B)
1 #!/bin/sh 2 3 c=0 4 challenge=1 5 6 OPTS="hc:fr:" 7 LONGOPTS="help,challenge:" 8 9 parsed=$(getopt --options=$OPTS --longoptions=$LONGOPTS -- "$@") 10 eval set -- "${parsed[@]}" 11 12 while true; do 13 case "$1" in 14 -c|--challenge) 15 c=1 16 challenge=$2 17 shift;; 18 19 --) # end of arguments 20 shift 21 break 22 ;; 23 24 *) 25 printf '%sn' "Error while parsing CLI options" 1>&2 26 ;; 27 esac 28 29 shift 30 done 31 32 successes=0 33 from=0 34 til=0 35 average=0 36 37 if [ "$c" == "1" ]; then 38 clear 39 for i in {3..1}; do 40 echo "$i" 41 sleep 1 42 clear 43 done 44 fi 45 46 for i in $(seq $challenge); do 47 from=$(date "+%s") 48 49 entry=$(cat $XDG_DATA_HOME/letters | shuf -n 1) 50 51 echo $entry | awk '{ print $1 };' 52 letter=$(echo $entry | awk '{ print $2 };') 53 54 read user_input 55 56 if [ "$letter" == "$user_input" ]; then 57 echo "correcto!" 58 successes=$((successes + 1)) 59 else 60 actual="" 61 for (( j=0; j<${#letter}; j++ )); do 62 if [ "${letter:$j:1}" == "${user_input:$j:1}" ]; then 63 actual="$actual${letter:$j:1}" 64 else 65 actual="$actuale[01;31m${letter:$j:1}e[0m" 66 fi 67 done 68 echo -e $actual 69 fi 70 71 til=$(date "+%s") 72 average=$((average + (til - from))) 73 done 74 75 if [ "$c" == "1" ]; then 76 echo "average time: $((average/challenge)) s" 77 echo "total time: $average s" 78 echo "total: $successes / $challenge correct!" 79 fi