From 01f0b552ac19de10cd55918dc196ef94fed60a87 Mon Sep 17 00:00:00 2001 From: caps Date: Sun, 26 Apr 2026 19:41:31 +0200 Subject: [PATCH] bash scripts done --- TODO.md | 4 +-- src/bash_scripts/crazy_cow.sh | 52 +++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 2 deletions(-) create mode 100755 src/bash_scripts/crazy_cow.sh diff --git a/TODO.md b/TODO.md index 93eb2db..742b30f 100644 --- a/TODO.md +++ b/TODO.md @@ -29,8 +29,8 @@ - [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. +- [x] **`crazy_cow`** + - [x] Create a "crazy arithmetic cow" script with something unusual or complex. --- diff --git a/src/bash_scripts/crazy_cow.sh b/src/bash_scripts/crazy_cow.sh new file mode 100755 index 0000000..d4ebe1c --- /dev/null +++ b/src/bash_scripts/crazy_cow.sh @@ -0,0 +1,52 @@ +#!/bin/bash + +# Cette crazy cow écrit une suite de chiffres tels qu'ils sont lus à l'oral +# exemple : +# etape 1 : 1 (= un 1 ) +# etape 2 : 11 (= deux 1 ) +# etape 3 : 21 (= un 2 un 1) +# etape 4 : 1211 +# .... + +read -p "nombre n de répétitions de la suite : " repetitions + +look_and_say() { + local input="$1" + local output="" + local previous_number="" + local n=0 # nombre de fois qu'on a vu le même nombre + + local i + for ((i = 0; i < ${#input}; i++)); do # on parcourt chaque chiffre de la chaine input + + local pos_number="${input:$i:1}" # représente chiffre de l'input à la position i + + if [ "$pos_number" == "$previous_number" ]; then + ((n++)) + else + if [ $n -gt 0 ]; then + output="$output$n$previous_number" # on écrit ce qu'on a compté jusqu'à présent + fi + + # fin de la boucle : on passe au chiffre suivant + + previous_number="$pos_number" + n=1 + + fi + done + + output="$output$n$previous_number" + + echo "$output" + +} + +for ((etape = 1; etape <= repetitions; etape++)); do + + current=$(look_and_say "$current") + resultat="$resultat\n etape $etape : $current" + +done + +echo -e "$resultat" | cowsay -e "oo"