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:
2026-04-20 16:12:15 +02:00
parent ef5029b76f
commit e507aa80ac
8 changed files with 119 additions and 29 deletions

22
TODO.md
View File

@@ -17,17 +17,17 @@
## 3. Bash Scripts
- [ ] **`cow_kindergarten`**
- [ ] Cow says numbers 1 to 10, 1-second pause between each, sticks out tongue at the end.
- [ ] **`cow_primaryschool`**
- [ ] Cow says numbers 1 to `n` (argument).
- [ ] **`cow_highschool`**
- [ ] Cow says squares (1, 4, 9, ..., `n^2`) (argument).
- [ ] **`cow_college`**
- [ ] Cow says Fibonacci sequence up to `n`.
- [ ] **`cow_university`**
- [ ] Cow says prime numbers up to `n`.
- [ ] **`smart_cow`**
- [x] **`cow_kindergarten`**
- [x] Cow says numbers 1 to 10, 1-second pause between each, sticks out tongue at the end.
- [x] **`cow_primaryschool`**
- [x] Cow says numbers 1 to `n` (argument).
- [x] **`cow_highschool`**
- [x] Cow says squares (1, 4, 9, ..., `n^2`) (argument).
- [x] **`cow_college`**
- [x] Cow says Fibonacci sequence up to `n`.
- [x] **`cow_university`**
- [x] Cow says prime numbers up to `n`.
- [x] **`smart_cow`**
- [ ] Cow says a simple arithmetic expression (e.g., "3+11"), eyes show the result.
- [ ] **`crazy_cow`**
- [ ] Create a "crazy arithmetic cow" script with something unusual or complex.

View File

@@ -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
View 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

View 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
View 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"