mirror of
https://codeberg.org/andyscott/ziglings.git
synced 2024-12-22 06:03:09 -05:00
99 lines
3 KiB
Bash
Executable file
99 lines
3 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# ziglings takes one parameter: the exercise number to jump to
|
|
jump_to=${1:-0}
|
|
|
|
echo
|
|
echo " _ _ _ "
|
|
echo " ___(_) __ _| (_)_ __ __ _ ___ "
|
|
echo " |_ | |/ _' | | | '_ \ / _' / __| "
|
|
echo " / /| | (_| | | | | | | (_| \__ \ "
|
|
echo " /___|_|\__, |_|_|_| |_|\__, |___/ "
|
|
echo " |___/ |___/ "
|
|
echo
|
|
|
|
# Capture terminal escape sequences (ANSI) for formatting
|
|
fmt_err=$( tput setaf 1 ) # red foreground
|
|
fmt_yay=$( tput setaf 2 ) # green foreground
|
|
fmt_off=$( tput sgr0 ) # reset colors/effects
|
|
|
|
exercise_num=0
|
|
|
|
function check_it {
|
|
source_file=$1
|
|
correct_output=$2
|
|
hint=$3
|
|
|
|
# If the current exercise is less than the requested one, skip it
|
|
let exercise_num+=1
|
|
if [[ $exercise_num -lt $jump_to ]]
|
|
then
|
|
return
|
|
fi
|
|
|
|
# Compile/run the source and capture the result and exit value
|
|
cmd="zig run $source_file"
|
|
echo "$ $cmd"
|
|
result=$($cmd 2>&1)
|
|
result_status=$?
|
|
|
|
# Echo the result to the screen so user can see what their program does
|
|
echo "$result"
|
|
if [[ $result_status -ne 0 ]]
|
|
then
|
|
echo
|
|
printf "${fmt_err}Uh oh! Looks like there was an error.${fmt_off}\n"
|
|
if [[ ! -z "$hint" ]]
|
|
then
|
|
echo "$hint"
|
|
fi
|
|
echo
|
|
echo "Edit '$source_file' and run me again."
|
|
echo
|
|
exit 1
|
|
fi
|
|
|
|
# Wildcards to be lenient with anything AROUND the correct output
|
|
if [[ "$result" == *$correct_output* ]]
|
|
then
|
|
printf "${fmt_yay}** PASSED **${fmt_off}\n"
|
|
else
|
|
printf "${fmt_err}It seems to compile, but I wanted to see '$correct_output'.${fmt_off}\n"
|
|
if [[ ! -z "$hint" ]]
|
|
then
|
|
echo "$hint"
|
|
fi
|
|
echo
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
|
|
check_it 01_hello.zig "Hello world" "Note the error: the source file has a hint for fixing 'main'."
|
|
check_it 02_std.zig "Standard Library"
|
|
check_it 03_assignment.zig "55 314159 -11" "There are three mistakes in this one!"
|
|
check_it 04_arrays.zig "Fourth: 7, Length: 8" "There are two things to complete here."
|
|
check_it 05_arrays2.zig "LEET: 1337, Bits: 100110011001" "Fill in the two arrays."
|
|
check_it 06_strings.zig "d=d ha ha ha Major Tom" "Each '???' needs something filled in."
|
|
check_it 07_strings2.zig "Ziggy" "Please fix the lyrics!"
|
|
check_it 08_quiz.zig "Program in Zig" "See if you can fix the program!"
|
|
check_it 09_if.zig "Foo is 1!"
|
|
check_it 10_if2.zig "price is \$17"
|
|
check_it 11_while.zig "n=1024" "You probably want a 'less than' condition."
|
|
check_it 12_while2.zig "n=1024" "It might help to look back at the previous exercise."
|
|
check_it 13_while3.zig "1 2 4 7 8 11 13 14 16 17 19"
|
|
check_it 14_while4.zig "n=4"
|
|
check_it 15_for.zig "A Dramatic Story: :-) :-) :-( :-| :-) The End."
|
|
check_it 16_for2.zig "13"
|
|
|
|
echo
|
|
echo " __ __ _ "
|
|
echo " \ \ / __ _ _ _| | "
|
|
echo " \ V / _' | | | | | "
|
|
echo " | | (_| | |_| |_| "
|
|
echo " |_|\__,_|\__, (_) "
|
|
echo " |___/ "
|
|
echo
|
|
echo "You've completed all of the Ziglings exercises!"
|
|
echo " (That have been written so far.)"
|
|
echo
|