Flower Field est une réinterprétation bienveillante du célèbre jeu Démineur. Le but du jeu est de trouver toutes les fleurs du jardin à l'aide d'indices numériques qui indiquent combien de fleurs sont directement adjacentes (horizontalement, verticalement, en diagonale) à une case. « Flower Field » était inclus dans les versions régionales de Microsoft Windows en Italie, en Allemagne, en Corée du Sud, au Japon et à Taïwan.
Ta tâche consiste à indiquer le nombre de fleurs dans les cases vides d'un jardin Champ de fleurs terminé. Le jardin est un plateau rectangulaire composé de cases, qui sont soit vides (' '), soit occupées par une fleur ('*').
Pour chaque case vide, compte le nombre de fleurs qui lui sont adjacentes (horizontalement, verticalement ou en diagonale). Si une case vide n'a aucune fleur adjacente, laisse-la vide. Sinon, remplace-la par le nombre de fleurs adjacentes.
Par exemple, tu peux recevoir un plateau 5 x 4 comme celui-ci (ici, les cases vides sont représentées par le caractère « · » pour l'affichage à l'écran) :
·*·*·
··*··
··*··
·····
Que ton code doit transformer en ceci :
1*3*1
13*31
·2*2·
·111·
Tu remarqueras des options supplémentaires pour jq dans les tests.
run jq -s -R -c -f flower-field.jq << 'END_INPUT'
Que sont-elles ?
-s
C'est le mode « slurp ». Au lieu de traiter l'entrée comme un flux d'objets JSON, toute l'entrée sera aspirée dans un tableau.
$ seq 5 | jq -c '.'
1
2
3
4
5
$ seq 5 | jq -s -c '.'
[1,2,3,4,5]
-R
Tu as peut-être déjà vu -r, pour afficher des strings brutes (sans guillemets).
C'est l'opposé.
Chaque ligne d'entrée est considérée comme une string.
Deux exemples :
$ seq 5 | jq -R -c .
"1"
"2"
"3"
"4"
"5"
$ echo 42 | jq '. * 2' # input is a JSON number
84
$ echo 42 | jq -R '. * 2' # input is a JSON string
"4242"
Lorsque tu combines ces deux options, tu n'obtiens pas un tableau de strings : tu obtiens toute l'entrée sous forme d'une seule string, y compris les sauts de ligne.
$ seq 5 | jq -s -R -c .
"1\n2\n3\n4\n5\n"
Gérer cela fait partie du défi de cet exercice.
Inscris-toi sur Exercism pour apprendre et maîtriser jq avec 12 concepts75 exercices, et un vrai mentorat humain, le tout gratuitement.
On explore les boucles `for` imbriquées, l'utilisation astucieuse de min/max pour simplifier la vérification des bornes, les _pipelines_ fonctionnels et le recours à des matrices à deux dimensions.