I think TrueAbility is one of cool projects I've seen lately, I really love its model!
For professionals, you can "improve your skills through technical walkthroughs and practice what you have learned on a real server"!
On the other hand, for employers or companies that want to hire system admins/engineer/devops can "Reduce time-to-hire by spending more time with the candidates who have proven their ability to do the job"!
So, you can do it for fun, improve/test your skills ... or to find a good job! One of recently challenges was "Linux Showdown 8", I love scripting and it was really cool :D
You can find more info about "Round 1", and this was my -quick and dirty- solution :-)
#! /bin/bash
#
# You can find more info about this competition at following url:
# https://community.trueability.com/t/the-sub-par-assembler-round-1/911
#
#Main section.
spasm_dir_path="."
#spasm_dir_path="/var/lib/spasm"
print_error () {
echo "Operation is not supported or syntax error!"
}
#Check if there is any syntax error.
if ! [[ $(echo "$1" | grep -P "\b(mov|add|sub|mul|eq|lt|gt)\b") ]]; then
print_error
exit 1
elif ! [[ $(echo "$2" | grep -P "\bR(1|2|3|4)\b") ]]; then
print_error
exit 1
elif [[ ! $(echo "$3" | grep -P "(R(1|2|3|4)\b|%\b)") ]]; then
print_error
exit 1
fi
#Get target number.
target_number=$(cat ${spasm_dir_path}/$2 | grep -P -o "\d+")
#Get value number.
if [[ $(echo "$3" | grep -P "\bR(1|2|3|4)\b") ]]; then
value_number=$(cat ${spasm_dir_path}/$3 | grep -P -o "\d+")
elif [[ $(echo "$3" | grep -P "%\b") ]]; then
value_number=$(echo "$3" | grep -P -o "\d+")
fi
#Check Operations.
case $1 in
mov)
echo $value_number > ${spasm_dir_path}/$2
;;
add)
[[ -f ${spasm_dir_path}/$2 ]] && echo $(( $target_number + $value_number )) > ${spasm_dir_path}/$2 || print_error; exit 1
;;
sub)
[[ -f ${spasm_dir_path}/$2 ]] && echo $(( $target_number - $value_number )) > ${spasm_dir_path}/$2 || print_error; exit 1
;;
mul)
[[ -f ${spasm_dir_path}/$2 ]] && echo $(( $target_number * $value_number )) > ${spasm_dir_path}/$2 || print_error; exit 1
;;
eq)
[[ $target_number -eq $value_number ]] && echo -n "0" > ${spasm_dir_path}/CP || echo -n "1" > ${spasm_dir_path}/CP
;;
lt)
[[ $target_number -lt $value_number ]] && echo -n "0" > ${spasm_dir_path}/CP || echo -n "1" > ${spasm_dir_path}/CP
;;
gt)
[[ $target_number -gt $value_number ]] && echo -n "0" > ${spasm_dir_path}/CP || echo -n "1" > ${spasm_dir_path}/CP
;;
esac