20/05/2015

TrueAbility Linux Showdown 8 - Round 1.

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
Powered by Blogger.

Hello, my name is Ahmed AbouZaid and this is my "lite" technical blog!

I'm a passionate DevOps, Linux system administrator, RedHat Certified Engineer (RHCE), AWS SysOps/Solutions Architect, Free/Open source geek, author, interested in environment, calligraphy, and I believe that “Details Matter”!

Automation, data, and metrics are my preferred areas. I have a built-in monitoring chip, and too lazy to do anything manually :D

Popular Posts