From f4fb8825bf6a1f2c71310cd9929e24b3bb43ff08 Mon Sep 17 00:00:00 2001 From: Onur Atas <114289826+onurat@users.noreply.github.com> Date: Thu, 26 Mar 2026 21:37:40 +0000 Subject: [PATCH 1/2] Complete all individual-shell-tools exercises --- individual-shell-tools/awk/script-01.sh | 1 + individual-shell-tools/awk/script-02.sh | 1 + individual-shell-tools/awk/script-03.sh | 1 + individual-shell-tools/awk/script-04.sh | 1 + individual-shell-tools/awk/script-05.sh | 1 + individual-shell-tools/cat/script-01.sh | 1 + individual-shell-tools/cat/script-02.sh | 1 + individual-shell-tools/cat/script-03.sh | 1 + individual-shell-tools/cat/script-04-stretch.sh | 1 + individual-shell-tools/grep/script-01.sh | 1 + individual-shell-tools/grep/script-02.sh | 1 + individual-shell-tools/grep/script-03.sh | 1 + individual-shell-tools/grep/script-04.sh | 1 + individual-shell-tools/grep/script-05.sh | 1 + individual-shell-tools/grep/script-06.sh | 1 + individual-shell-tools/grep/script-07.sh | 1 + individual-shell-tools/ls/script-01.sh | 2 +- individual-shell-tools/ls/script-02.sh | 2 +- individual-shell-tools/ls/script-03.sh | 1 + individual-shell-tools/ls/script-04.sh | 2 ++ individual-shell-tools/sed/script-01.sh | 1 + individual-shell-tools/sed/script-02.sh | 1 + individual-shell-tools/sed/script-03.sh | 1 + individual-shell-tools/sed/script-04.sh | 1 + individual-shell-tools/sed/script-05.sh | 1 + individual-shell-tools/sed/script-06.sh | 1 + individual-shell-tools/wc/script-01.sh | 1 + individual-shell-tools/wc/script-02.sh | 1 + individual-shell-tools/wc/script-03.sh | 1 + 29 files changed, 30 insertions(+), 2 deletions(-) diff --git a/individual-shell-tools/awk/script-01.sh b/individual-shell-tools/awk/script-01.sh index 8db4390af..e33ee9a5d 100755 --- a/individual-shell-tools/awk/script-01.sh +++ b/individual-shell-tools/awk/script-01.sh @@ -3,4 +3,5 @@ set -euo pipefail # TODO: Write a command to output just the names of each player in `scores-table.txt`. +awk '{print $1}' scores-table.txt # Your output should contain 6 lines, each with just one word on it. diff --git a/individual-shell-tools/awk/script-02.sh b/individual-shell-tools/awk/script-02.sh index 5956be9bd..a71a90314 100755 --- a/individual-shell-tools/awk/script-02.sh +++ b/individual-shell-tools/awk/script-02.sh @@ -3,4 +3,5 @@ set -euo pipefail # TODO: Write a command to output the names of each player, as well as their city. +awk '{print $1, $2}' scores-table.txt # Your output should contain 6 lines, each with two words on it, separated by a space. diff --git a/individual-shell-tools/awk/script-03.sh b/individual-shell-tools/awk/script-03.sh index af7c6e8b9..291e35ae9 100755 --- a/individual-shell-tools/awk/script-03.sh +++ b/individual-shell-tools/awk/script-03.sh @@ -3,5 +3,6 @@ set -euo pipefail # TODO: Write a command to output just the names of each player along with the score from their first attempt. +awk '{print $1, $3}' scores-table.txt # Your output should contain 6 lines, each with one word and one number on it. # The first line should be "Ahmed 1". diff --git a/individual-shell-tools/awk/script-04.sh b/individual-shell-tools/awk/script-04.sh index bf15703c7..65e98e76f 100755 --- a/individual-shell-tools/awk/script-04.sh +++ b/individual-shell-tools/awk/script-04.sh @@ -3,5 +3,6 @@ set -euo pipefail # TODO: Write a command to output just the names of each player in London along with the score from their last attempt. +awk '$2=="London" {print $1, $NF}' scores-table.txt # Your output should contain 3 lines, each with one word and one number on it. # The first line should be "Ahmed 4". diff --git a/individual-shell-tools/awk/script-05.sh b/individual-shell-tools/awk/script-05.sh index d1680cb02..0c95f7306 100755 --- a/individual-shell-tools/awk/script-05.sh +++ b/individual-shell-tools/awk/script-05.sh @@ -3,5 +3,6 @@ set -euo pipefail # TODO: Write a command to output just the names of each player along with the number of times they've played the game. +awk '{print $1, NF-2}' scores-table.txt # Your output should contain 6 lines, each with one word and one number on it. # The first line should be "Ahmed 3". diff --git a/individual-shell-tools/cat/script-01.sh b/individual-shell-tools/cat/script-01.sh index c85053e0f..3fdbde949 100755 --- a/individual-shell-tools/cat/script-01.sh +++ b/individual-shell-tools/cat/script-01.sh @@ -3,4 +3,5 @@ set -euo pipefail # TODO: Write a command to output the contents of the helper-1.txt file inside the helper-files directory to the terminal. +cat helper-files/helper-1.txt # The output of this command should be "Once upon a time...". diff --git a/individual-shell-tools/cat/script-02.sh b/individual-shell-tools/cat/script-02.sh index 01bbd5eab..b48b4a874 100755 --- a/individual-shell-tools/cat/script-02.sh +++ b/individual-shell-tools/cat/script-02.sh @@ -3,6 +3,7 @@ set -euo pipefail # TODO: Write a command to output the contents of all of the files inside the helper-files directory to the terminal. +cat helper-files/* # Make sure you are only calling `cat` once. # # The output of this command should be: diff --git a/individual-shell-tools/cat/script-03.sh b/individual-shell-tools/cat/script-03.sh index 37573b0c1..b6c0aa1ae 100755 --- a/individual-shell-tools/cat/script-03.sh +++ b/individual-shell-tools/cat/script-03.sh @@ -3,6 +3,7 @@ set -euo pipefail # TODO: Write a command to output the contents of the file `helper-3.txt` inside the helper-files directory to the terminal. +cat -n helper-files/helper-3.txt # This time, we also want to see the line numbers in the output. # # The output of this command should be something like: diff --git a/individual-shell-tools/cat/script-04-stretch.sh b/individual-shell-tools/cat/script-04-stretch.sh index 00fe3c48b..58609f185 100755 --- a/individual-shell-tools/cat/script-04-stretch.sh +++ b/individual-shell-tools/cat/script-04-stretch.sh @@ -5,6 +5,7 @@ set -euo pipefail # NOTE: This is a stretch exercise - it is optional. # TODO: Write a command to output the contents of all of the files in the helper-files directory to the terminal. +cat -n helper-files/* # We also want to see the line numbers in the output, but we want line numbers not to reset at the start of each file. # # The output of this command should be something like: diff --git a/individual-shell-tools/grep/script-01.sh b/individual-shell-tools/grep/script-01.sh index fb05f42f2..62b3e9e58 100755 --- a/individual-shell-tools/grep/script-01.sh +++ b/individual-shell-tools/grep/script-01.sh @@ -3,4 +3,5 @@ set -euo pipefail # TODO: Write a command to output every line in dialogue.txt said by the Doctor. +grep '^Doctor:' dialogue.txt # The output should contain 6 lines. diff --git a/individual-shell-tools/grep/script-02.sh b/individual-shell-tools/grep/script-02.sh index df6f85640..87f172ad5 100755 --- a/individual-shell-tools/grep/script-02.sh +++ b/individual-shell-tools/grep/script-02.sh @@ -3,4 +3,5 @@ set -euo pipefail # TODO: Write a command to output every line in dialogue.txt that contains the word Doctor (regardless of case). +grep -i 'Doctor' dialogue.txt # The output should contain 9 lines. diff --git a/individual-shell-tools/grep/script-03.sh b/individual-shell-tools/grep/script-03.sh index 5383fe578..c4697c24b 100755 --- a/individual-shell-tools/grep/script-03.sh +++ b/individual-shell-tools/grep/script-03.sh @@ -3,4 +3,5 @@ set -euo pipefail # TODO: Write a command to output the number of lines in dialogue.txt that contain the word Doctor (regardless of case). +grep -ic 'Doctor' dialogue.txt # The output should be exactly the number 9. diff --git a/individual-shell-tools/grep/script-04.sh b/individual-shell-tools/grep/script-04.sh index 80ee04776..b9baee6a0 100755 --- a/individual-shell-tools/grep/script-04.sh +++ b/individual-shell-tools/grep/script-04.sh @@ -3,4 +3,5 @@ set -euo pipefail # TODO: Write a command to output every line in dialogue.txt that does not contain the word "Hello" (regardless of case). +grep -vi 'Hello' dialogue.txt # The output should contain 10 lines. diff --git a/individual-shell-tools/grep/script-05.sh b/individual-shell-tools/grep/script-05.sh index 1eb538185..07ee5acc9 100755 --- a/individual-shell-tools/grep/script-05.sh +++ b/individual-shell-tools/grep/script-05.sh @@ -3,4 +3,5 @@ set -euo pipefail # TODO: Write a command to output every line in dialogue.txt that contains the string "cure", as well as the line before that line. +grep -B 1 'cure' dialogue.txt # The output should contain two pairs of two lines of text (with a separator between them). diff --git a/individual-shell-tools/grep/script-06.sh b/individual-shell-tools/grep/script-06.sh index 5670e3b6c..83f71a734 100755 --- a/individual-shell-tools/grep/script-06.sh +++ b/individual-shell-tools/grep/script-06.sh @@ -3,4 +3,5 @@ set -euo pipefail # TODO: Write a command to output the name of every `.txt` file in this directory which contains a line of dialogue said by the Doctor. +grep -l '^Doctor:' *.txt # The output should contain two filenames. diff --git a/individual-shell-tools/grep/script-07.sh b/individual-shell-tools/grep/script-07.sh index 9670ebad9..d98784834 100755 --- a/individual-shell-tools/grep/script-07.sh +++ b/individual-shell-tools/grep/script-07.sh @@ -3,4 +3,5 @@ set -euo pipefail # TODO: Write a command to output, for each `.txt` file in this directory, how many lines of dialogue the Doctor has. +grep -c '^Doctor:' *.txt # The output should show that dialogue.txt contains 6 lines, dialogue-2.txt contains 2, and dialogue-3.txt contains 0. diff --git a/individual-shell-tools/ls/script-01.sh b/individual-shell-tools/ls/script-01.sh index 241b62f5e..dd2c9af23 100755 --- a/individual-shell-tools/ls/script-01.sh +++ b/individual-shell-tools/ls/script-01.sh @@ -11,5 +11,5 @@ if [[ "${script_dir}" != "$(pwd)" ]]; then exit 1 fi -# TODO: Write a command to list the files and folders in this directory. +# TODO: Write a command to list the files and folders in this directory. ls # The output should be a list of names including child-directory, script-01.sh, script-02.sh, and more. diff --git a/individual-shell-tools/ls/script-02.sh b/individual-shell-tools/ls/script-02.sh index d0a5a10f4..c27a1cfd8 100755 --- a/individual-shell-tools/ls/script-02.sh +++ b/individual-shell-tools/ls/script-02.sh @@ -2,5 +2,5 @@ set -euo pipefail -# TODO: Write a command which lists all of the files in the directory named child-directory. +# TODO: Write a command which lists all of the files in the directory named child-directory. ls child-directory # The output should be a list of names: helper-1.txt, helper-2.txt, helper-3.txt. diff --git a/individual-shell-tools/ls/script-03.sh b/individual-shell-tools/ls/script-03.sh index 781216d21..0dc1c2f8a 100755 --- a/individual-shell-tools/ls/script-03.sh +++ b/individual-shell-tools/ls/script-03.sh @@ -3,5 +3,6 @@ set -euo pipefail # TODO: Write a command which _recursively_ lists all of the files and folders in this directory _and_ all of the files inside those folders. +ls -R # The output should be a list of names including: child-directory, script-01.sh, helper-1.txt (and more). # The formatting of the output doesn't matter. diff --git a/individual-shell-tools/ls/script-04.sh b/individual-shell-tools/ls/script-04.sh index 72f3817b3..20cf11a40 100755 --- a/individual-shell-tools/ls/script-04.sh +++ b/individual-shell-tools/ls/script-04.sh @@ -14,10 +14,12 @@ touch "${script_dir}/child-directory/helper-3.txt" echo "First exercise (sorted newest to oldest):" # TODO: Write a command which lists the files in the child-directory directory, one per line, sorted so that the most recently modified file is first. +ls -t child-directory # The output should be a list of names in this order, one per line: helper-3.txt, helper-1.txt, helper-2.txt. echo "Second exercise (sorted oldest to newest):" # TODO: Write a command which does the same as above, but sorted in the opposite order (oldest first). +ls -tr child-directory # The output should be a list of names in this order, one per line: helper-2.txt, helper-1.txt, helper-3.txt. diff --git a/individual-shell-tools/sed/script-01.sh b/individual-shell-tools/sed/script-01.sh index d592970fc..ad0620903 100755 --- a/individual-shell-tools/sed/script-01.sh +++ b/individual-shell-tools/sed/script-01.sh @@ -3,5 +3,6 @@ set -euo pipefail # TODO: Write a command to output input.txt with all occurrences of the letter `i` replaced with `I`. +sed 's/i/I/g' input.txt # The output should contain 11 lines. # The first line of the output should be: "ThIs Is a sample fIle for experImentIng wIth sed.". diff --git a/individual-shell-tools/sed/script-02.sh b/individual-shell-tools/sed/script-02.sh index abdd64d06..e7ec3f486 100755 --- a/individual-shell-tools/sed/script-02.sh +++ b/individual-shell-tools/sed/script-02.sh @@ -3,5 +3,6 @@ set -euo pipefail # TODO: Write a command to output input.txt with numbers removed. +sed 's/[0-9]//g' input.txt # The output should contain 11 lines. # Line 6 of the output should be " Alisha". diff --git a/individual-shell-tools/sed/script-03.sh b/individual-shell-tools/sed/script-03.sh index dd284a296..4be42f03b 100755 --- a/individual-shell-tools/sed/script-03.sh +++ b/individual-shell-tools/sed/script-03.sh @@ -3,4 +3,5 @@ set -euo pipefail # TODO: Write a command to output input.txt removing any line which contains a number. +sed '/[0-9]/d' input.txt # The output should contain 6 lines. diff --git a/individual-shell-tools/sed/script-04.sh b/individual-shell-tools/sed/script-04.sh index 0052ac6c4..fcac5ae0d 100755 --- a/individual-shell-tools/sed/script-04.sh +++ b/individual-shell-tools/sed/script-04.sh @@ -3,4 +3,5 @@ set -euo pipefail # TODO: Write a command to output input.txt replacing every occurrence of the string "We'll" with "We will". +sed "s/We'll/We will/g" input.txt # The output should contain 11 lines. diff --git a/individual-shell-tools/sed/script-05.sh b/individual-shell-tools/sed/script-05.sh index 2dcc91a0c..7bdf0d5c9 100755 --- a/individual-shell-tools/sed/script-05.sh +++ b/individual-shell-tools/sed/script-05.sh @@ -3,6 +3,7 @@ set -euo pipefail # TODO: Write a command to output input.txt with one change: +sed 's/^\([0-9]\+\) \(.*\)/\2 \1/' input.txt # If a line starts with a number and a space, make the line instead end with a space and the number. # So line 6 which currently reads "37 Alisha" should instead read "Alisha 37". # The output should contain 11 lines. diff --git a/individual-shell-tools/sed/script-06.sh b/individual-shell-tools/sed/script-06.sh index 0b9390170..3f4a6697b 100755 --- a/individual-shell-tools/sed/script-06.sh +++ b/individual-shell-tools/sed/script-06.sh @@ -3,6 +3,7 @@ set -euo pipefail # TODO: Write a command to output input.txt with one fix: +sed 's/,\([^ ]\)/, \1/g' input.txt # If a comma in input.txt is not followed by a space, add a space after. # If there is already a space after a comma, do not add an additional space. # The output should contain 11 lines. diff --git a/individual-shell-tools/wc/script-01.sh b/individual-shell-tools/wc/script-01.sh index c9dd6e5df..22763c02f 100755 --- a/individual-shell-tools/wc/script-01.sh +++ b/individual-shell-tools/wc/script-01.sh @@ -3,4 +3,5 @@ set -euo pipefail # TODO: Write a command to output the number of words in the file helper-files/helper-3.txt. +wc -w < helper-files/helper-1.txt # The output should include the number 19. The output should not include the number 92. diff --git a/individual-shell-tools/wc/script-02.sh b/individual-shell-tools/wc/script-02.sh index 8feeb1a62..89b61befc 100755 --- a/individual-shell-tools/wc/script-02.sh +++ b/individual-shell-tools/wc/script-02.sh @@ -3,4 +3,5 @@ set -euo pipefail # TODO: Write a command to output the number of lines in the file helper-files/helper-3.txt. +wc -l < helper-files/helper-3.txt # The output should include the number 3. The output should not include the number 19. diff --git a/individual-shell-tools/wc/script-03.sh b/individual-shell-tools/wc/script-03.sh index 6b2e9d3d1..c0f51e829 100755 --- a/individual-shell-tools/wc/script-03.sh +++ b/individual-shell-tools/wc/script-03.sh @@ -3,6 +3,7 @@ set -euo pipefail # TODO: Write a command to output the number of lines, words, and characters in all of the files inside the helper-files directory. +wc helper-files/* # The output should be something like: # 1 4 20 ../helper-files/helper-1.txt # 1 7 39 ../helper-files/helper-2.txt From 55465fc9f5ac6de456ae52826d3003806de7f16e Mon Sep 17 00:00:00 2001 From: Onur Atas <114289826+onurat@users.noreply.github.com> Date: Thu, 26 Mar 2026 22:18:28 +0000 Subject: [PATCH 2/2] Add answers to binary, decimal, and hex exercises --- number-systems/README.md | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/number-systems/README.md b/number-systems/README.md index 77a3bde94..934b5d4db 100644 --- a/number-systems/README.md +++ b/number-systems/README.md @@ -5,61 +5,61 @@ Do not convert any binary numbers to decimal when solving a question unless the The goal of these exercises is for you to gain an intuition for binary numbers. Using tools to solve the problems defeats the point. Convert the decimal number 14 to binary. -Answer: +Answer: 1110 Convert the binary number 101101 to decimal: -Answer: +Answer: 45 Which is larger: 1000 or 0111? -Answer: +Answer: 1000 Which is larger: 00100 or 01011? -Answer: +Answer: 01011 What is 10101 + 01010? -Answer: +Answer: 11111 What is 10001 + 10001? -Answer: +Answer: 100010 What's the largest number you can store with 4 bits, if you want to be able to represent the number 0? -Answer: +Answer: 1111 How many bits would you need in order to store the numbers between 0 and 255 inclusive? -Answer: +Answer: 8 bits How many bits would you need in order to store the numbers between 0 and 3 inclusive? -Answer: +Answer: 2 bits How many bits would you need in order to store the numbers between 0 and 1000 inclusive? -Answer: +Answer: 10 bits How can you test if a binary number is a power of two (e.g. 1, 2, 4, 8, 16, ...)? -Answer: +Answer: A binary number is a power of two if it has exactly one 1 and all other bits are 0. Convert the decimal number 14 to hex. -Answer: +Answer: E Convert the decimal number 386 to hex. -Answer: +Answer: 182 Convert the hex number 386 to decimal. -Answer: +Answer: 902 Convert the hex number B to decimal. -Answer: +Answer: 11 If reading the byte 0x21 as a number, what decimal number would it mean? -Answer: +Answer: 33 If reading the byte 0x21 as an ASCII character, what character would it mean? -Answer: +Answer: ! If reading the byte 0x21 as a greyscale colour, as described in "Approaches for Representing Colors and Images", what colour would it mean? -Answer: +Answer: A dark grey (33 out of 255) If reading the bytes 0xAA00FF as an RGB colour, as described in "Approaches for Representing Colors and Images", what colour would it mean? -Answer: +Answer: Red = 170, Green = 0, Blue = 255 → a purple/magenta colour If reading the bytes 0xAA00FF as a sequence of three one-byte decimal numbers, what decimal numbers would they be? -Answer: +Answer: 170, 0, 255