Gravity
Niveau 2
Joseph Marchand marche dans la rue. Il neige. En fin observateur, il remarque que plus la neige tombe, plus le niveau monte ! Ainsi, comme Newton 3 siècles avant lui, il s'interroge sur le mystérieux phénomène de la gravité (bien qu'il n'y ait pas de rapport avec le fait que le niveau de la neige monte).
Il décide donc de mener une petite expérience, à savoir placer plusieurs blocs dans une pièce non soumise à la gravité, puis de simuler la gravité afin d'obtenir le même résultat (la chute correcte des blocs) qu'avec la « vraie » gravité.
L'entrée standard contient lignes :
.
représentant une absence de bloc.Vous devez écrire lignes sur la sortie standard : la même grille avec les blocs tombés en bas.
Exemple d'entrée
1 1 a
Exemple de sortie
a
Exemple d'entrée
3 4 tr.. ...y .d..
Exemple de sortie
.... .r.. td.y
Il sera judicieux de fabriquer une fonction qui prend une liste ou une chaîne de caractères et qui renvoie une liste ou une chaîne avec les .
en tête. Un peu comme :
>>> gravite('a.zer..ty') '...azerty'
""" auteur : Franck CHAMBON Régional 2013 - Problème 5 - Gravity https://prologin.org/train/2013/semifinal/gravity """ def gravite(chaîne): """Renvoie la chaîne avec les '.' au début. >>> gravite('a.zer..ty') '...azerty' """ # on construit une liste sans les '.' chute = [] for x in chaîne: if x != '.': chute.append(x) # variante fonctionnelle des 4 lignes précédentes chute = [x for x in chaîne if x != '.'] # n : la quantité de '.' manquants n = len(chaîne) - len(chute) # on ajoute au début les '.' manquants chute = ['.' for _ in range(n)] + chute # join : pour obtenir une chaîne collée return "".join(chute) # 1. Test des fonctions import doctest doctest.testmod() # 2. Lecture de l'entrée nb_lignes, nb_colonnes = map(int, input().split()) grille = [list(input()) for _ in range(nb_lignes)] # 3. Résolution grille_sortie = [['.' for _ in range(nb_colonnes)] for _ in range(nb_lignes)] for j in range(nb_colonnes): colonne_j = [grille[i][j] for i in range(nb_lignes)] # la colonne_j va subir la gravité colonne_j = gravite(colonne_j) for i in range(nb_lignes): grille_sortie[i][j] = colonne_j[i] # 4. Écriture de la sortie for ligne in grille_sortie: print("".join(ligne))