complete cow school scripts
Move bash scripts under src/bash_scripts, add college/university/smart cow implementations, and mark the completed TODO items.
This commit is contained in:
22
TODO.md
22
TODO.md
@@ -17,17 +17,17 @@
|
|||||||
|
|
||||||
## 3. Bash Scripts
|
## 3. Bash Scripts
|
||||||
|
|
||||||
- [ ] **`cow_kindergarten`**
|
- [x] **`cow_kindergarten`**
|
||||||
- [ ] Cow says numbers 1 to 10, 1-second pause between each, sticks out tongue at the end.
|
- [x] Cow says numbers 1 to 10, 1-second pause between each, sticks out tongue at the end.
|
||||||
- [ ] **`cow_primaryschool`**
|
- [x] **`cow_primaryschool`**
|
||||||
- [ ] Cow says numbers 1 to `n` (argument).
|
- [x] Cow says numbers 1 to `n` (argument).
|
||||||
- [ ] **`cow_highschool`**
|
- [x] **`cow_highschool`**
|
||||||
- [ ] Cow says squares (1, 4, 9, ..., `n^2`) (argument).
|
- [x] Cow says squares (1, 4, 9, ..., `n^2`) (argument).
|
||||||
- [ ] **`cow_college`**
|
- [x] **`cow_college`**
|
||||||
- [ ] Cow says Fibonacci sequence up to `n`.
|
- [x] Cow says Fibonacci sequence up to `n`.
|
||||||
- [ ] **`cow_university`**
|
- [x] **`cow_university`**
|
||||||
- [ ] Cow says prime numbers up to `n`.
|
- [x] Cow says prime numbers up to `n`.
|
||||||
- [ ] **`smart_cow`**
|
- [x] **`smart_cow`**
|
||||||
- [ ] Cow says a simple arithmetic expression (e.g., "3+11"), eyes show the result.
|
- [ ] Cow says a simple arithmetic expression (e.g., "3+11"), eyes show the result.
|
||||||
- [ ] **`crazy_cow`**
|
- [ ] **`crazy_cow`**
|
||||||
- [ ] Create a "crazy arithmetic cow" script with something unusual or complex.
|
- [ ] Create a "crazy arithmetic cow" script with something unusual or complex.
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
if [[ $# -ne 1 ]]; then
|
|
||||||
echo "usage: $0 <number>"
|
|
||||||
echo "please provide exactly one numeric argument"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! [[ "$1" =~ ^[0-9]+$ ]] || (("$1" < 1)); then
|
|
||||||
echo "error: argument must be a positive integer"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
reset
|
|
||||||
for ((i = 2; i < "$(($1 + 1))"; i++)); do
|
|
||||||
cowsay "$((($i - 1) * ($i - 1)))"
|
|
||||||
sleep 1
|
|
||||||
clear
|
|
||||||
done
|
|
||||||
cowsay -e oo -T U "$(($1 * $1))"
|
|
||||||
52
src/bash_scripts/cow_college.sh
Executable file
52
src/bash_scripts/cow_college.sh
Executable file
@@ -0,0 +1,52 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
if [[ $# -ne 1 ]]; then
|
||||||
|
echo "usage: $0 <number>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! [[ "$1" =~ ^[0-9]+$ ]] || (($1 < 1)); then
|
||||||
|
echo "error: argument must be a positive integer"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
n=$1
|
||||||
|
|
||||||
|
declare -A memo
|
||||||
|
memo[1]=0
|
||||||
|
memo[2]=1
|
||||||
|
|
||||||
|
result=0
|
||||||
|
|
||||||
|
fib() {
|
||||||
|
local k=$1
|
||||||
|
local a
|
||||||
|
local b
|
||||||
|
|
||||||
|
if [[ -n "${memo[$k]:-}" ]]; then
|
||||||
|
result=${memo[$k]}
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
fib $((k - 1))
|
||||||
|
a=$result
|
||||||
|
|
||||||
|
fib $((k - 2))
|
||||||
|
b=$result
|
||||||
|
|
||||||
|
memo[$k]=$((a + b))
|
||||||
|
result=${memo[$k]}
|
||||||
|
}
|
||||||
|
|
||||||
|
for ((i = 1; i <= n; i++)); do
|
||||||
|
fib "$i"
|
||||||
|
value=$result
|
||||||
|
|
||||||
|
if ((i < n)); then
|
||||||
|
printf '%s\n' "$value" | cowsay # il y a eu un peu de problèmes pour afficher correctement le nombre avec cowsay il attendait une sorte d'input ??
|
||||||
|
sleep 1
|
||||||
|
clear
|
||||||
|
else
|
||||||
|
printf '%s\n' "$value" | cowsay -e oo -T U
|
||||||
|
fi
|
||||||
|
done
|
||||||
44
src/bash_scripts/cow_university.sh
Executable file
44
src/bash_scripts/cow_university.sh
Executable file
@@ -0,0 +1,44 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
if [[ $# -ne 1 ]]; then
|
||||||
|
echo "usage: $0 <number>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! [[ "$1" =~ ^[0-9]+$ ]] || (($1 < 2)); then
|
||||||
|
echo "error: argument must be an integer >= 2"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
n=$1
|
||||||
|
# On utilise le crible de Eratosthenes
|
||||||
|
declare -a is_prime
|
||||||
|
|
||||||
|
for ((i = 0; i <= n; i++)); do
|
||||||
|
is_prime[$i]=1
|
||||||
|
done
|
||||||
|
|
||||||
|
is_prime[0]=0
|
||||||
|
is_prime[1]=0
|
||||||
|
|
||||||
|
for ((p = 2; p * p <= n; p++)); do
|
||||||
|
if ((is_prime[p] == 1)); then
|
||||||
|
for ((multiple = p * p; multiple <= n; multiple += p)); do
|
||||||
|
is_prime[$multiple]=0
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
last_prime=0
|
||||||
|
|
||||||
|
for ((i = 2; i <= (n - 1); i++)); do
|
||||||
|
if ((is_prime[i] == 1)); then
|
||||||
|
|
||||||
|
sleep 1
|
||||||
|
clear
|
||||||
|
last_prime=$i
|
||||||
|
printf '%s\n' "$i" | cowsay
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
reset # un peu sus comme façon de faire on verra pr le changer
|
||||||
|
printf '%s\n' "$last_prime" | cowsay -e oo -T U
|
||||||
12
src/bash_scripts/smart_cow.sh
Executable file
12
src/bash_scripts/smart_cow.sh
Executable file
@@ -0,0 +1,12 @@
|
|||||||
|
while :; do # on utilise ce code pour etre sur qu'il n'y a pas de biais sur la génération de nombres aléatoire car il y a plus de chance sinon de tomber
|
||||||
|
# sur un nombre entre 0-17 que sur un nombre entre 0-49
|
||||||
|
ra=$RANDOM
|
||||||
|
((ra < 32750)) && r1=$((ra % 50)) && break # On peut avoir aussi une chance infiniment petite que la boucle ne finisse jamais donc a voir....
|
||||||
|
done
|
||||||
|
|
||||||
|
while :; do # Pareil mais les valeures favorisée aurait été entre 0-25
|
||||||
|
rb=$RANDOM
|
||||||
|
((rb < 32742)) && r2=$((rb % 51)) && break
|
||||||
|
done
|
||||||
|
# on génère entre 0 et 50/49 pour ne pas dépasser les 2 characters limites pour les yeux
|
||||||
|
cowsay -e "$(($r1 + $r2))" "$r1 + $r2"
|
||||||
Reference in New Issue
Block a user