Il est conseillé de les avoir résolus avant d'aborder celui-ci.
Un marcheur effectue une randonnée autour d'un quartier d'affaire d'une grande ville. Celui-ci comporte de nombreux immeubles disposés le long de rues perpendiculaires.
Les hauteurs des immeubles, en nombre d'étages, sont données dans une liste de listes de nombres entiers positifs. Certains blocs ne comportent pas d'immeubles et ont alors une hauteur de 0.
On fournit ci-dessous un exemple de petit quartier ainsi que la liste de listes le représentant :
Hauteurs des immeubles
quartier=[[1,2,3,4],[5,2,6,1],[3,2,0,5]]
Alors qu'il effectue le tour du quartier, le randonneur observe les façades des immeubles alignés le long de chaque rue. Certaines sont visibles, d'autres sont cachées par les précédents... Tous les immeubles étant bien « alignés » le long de leur rue, chaque façade ne peut être observée que d'un seul point de vue.
En considérant par exemple le petit quartier ci-dessus :
en observant la rue la plus au sud depuis l'ouest, on aperçoit 2 façades ;
en observant la rue la plus à l'est depuis le sud, on aperçoit 1 façade.
Une fois le tour complet du quartier effectué, le randonneur a au total observé 24 façades.
Les façades visibles
Nord
2 1 2 2
v v v v
4 > [1, 2, 3, 4] < 1
Ouest 2 > [5, 2, 6, 1] < 2 Est
2 > [3, 2, 0, 5] < 1
^ ^ ^ ^
2 1 1 1
Sud
Écrire la fonction nb_facades_visibles qui prend en paramètre la liste de listes hauteurs et renvoie le nombre de façades observées lors d'un tour complet du quartier.
On propose dans cette version de décomposer le problème :
On définit tout d'abord une fonction visibles_rue qui compte le nombre de façades visibles le long d'une rue.
On organise la fonction principale autour de deux boucles : l'une parcourant la grille horizontalement, l'autre verticalement.
Dans chaque boucle, on étudie les hauteurs des bâtiments de chaque rue dans les deux directions. On utilise pour ce faire des listes en compréhensions.
###(Dés-)Active le code après la ligne # Tests (insensible à la casse) (Ctrl+I)
Entrer ou sortir du mode "deux colonnes" (Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran" (Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
# Tests(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)