La Battle Dev est un concours gratuit, ouvert à tous, où vous affronterez, seul ou en équipe, d'autres développeurs. Il y a plus d'une centaine d'entreprises qui parrainent cet événement. Pour une première participation, je m'en suis sorti 313ème sur 2 030. Je suis resté bloqué sur le problème n°4.
J'avais choisi la catégorie Python 3 et le second problème demandait à ce que l'on imprime un losange suivant le nombre donné en entrée, toujours impaire.
Exemple avec le nombre 5 :
..*..
.***.
*****
.***.
..*..
Ma première solution, crade mais fonctionnelle :
import sys
n = int(next(sys.stdin))
for i in range(1, n + 1, 2):
print('{0:.^{1}}'.format('*' * i, n))
for i in range(n - 2, 0, -2):
print('{0:.^{1}}'.format('*' * i, n))
Maintenant que j'ai du temps, j'aurai pu le faire comme ça :
number = int(input())
lines = [''] * number
fmt = '{0:.^{1}}'
for idx, length in enumerate(range(1, number + 1, 2)):
lines[idx] = lines[-idx - 1] = fmt.format('*' * length, number)
print('\n'.join(lines))
Et ça donne :
$ echo 29 | python3 a2.py
..............*..............
.............***.............
............*****............
...........*******...........
..........*********..........
.........***********.........
........*************........
.......***************.......
......*****************......
.....*******************.....
....*********************....
...***********************...
..*************************..
.***************************.
*****************************
.***************************.
..*************************..
...***********************...
....*********************....
.....*******************.....
......*****************......
.......***************.......
........*************........
.........***********.........
..........*********..........
...........*******...........
............*****............
.............***.............
..............*..............
Challenge
Comment auriez-vous fait ? Des astuces, modules ou une autre façon de résoudre ce problème ?