Select Git revision
previous-compilation-data.bin
Forked from
COUETOUX Basile / FirefighterStarter
Source project has a limited visibility.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
main.py 2.84 KiB
# rendu de Quentin Hartman
from itertools import chain
import matplotlib.pyplot as plt
class TabletteChocolat:
def __init__(self, m: int, n: int):
'''
On instancie une tablette en fonction de sa taille m*n
'''
if not (isinstance(m, int) and isinstance(n, int)):
raise TypeError('given values must be integers')
self.m = m
self.n = n
def __str__(self) -> str:
return 'Tablette de chocolat de ' + str(self.m) + 'x' + str(self.n)
# __repr__ n'est pas surchargé car à priori dans notre cas __str__ suffit
def coups_possibles(self):
'''
renvoie un générateur des coups possibles
'''
result = []
for i in range(1, self.m):
result.append((i, 0))
for j in range(1, self.n):
result.append((0, j))
return chain(result)
def est_possible(self, couple: tuple) -> bool:
'''
renvoie si oui ou non un coup est possible sur la tablette courante
'''
return couple in list(self.coups_possibles())
def coupe(self, couple: tuple):
'''
renvoie la tablette qui résulte de la coupe donnée sur la tablette courante
'''
return TabletteChocolat(self.m - couple[0], self.n - couple[1])
def plot(self):
plt.gca().set_aspect('equal')
plt.axis('off')
plt.fill([0, self.m, self.m, 0], [0, 0, self.n, self.n], color='#D5B799')
for i in range(self.m):
for j in range(self.n):
plt.plot([i+0.1, i+0.9, i+0.9, i+0.1, i+0.1], [j+0.1, j+0.1, j+0.9, j+0.9, j+0.1], color='#554739')
plt.fill([self.m-0.9, self.m-0.1, self.m-0.1, self.m-0.9], [0.1, 0.1, 0.9, 0.9], color='#554739')
plt.show()
def demander_coup(self):
coup = ''
taille_coupe = -1
while not coup in ['l', 'c']:
print('il faut choisir quoi couper :')
coup = str(input('Couper des lignes (l) ou des colonnes (c) ? '))
if coup == 'l':
print('voici les coups possibles : ', ', '.join(str(i) + ' lignes' for i in range(1, self.n)))
while not 1 <= taille_coupe <= self.n-1:
taille_coupe = int(input('combien de lignes couper ? '))
return self.coupe((0, taille_coupe))
if coup == 'c':
print('voici les coups possibles : ', ', '.join(str(i) + ' colonnes' for i in range(1, self.m)))
while not 1 <= taille_coupe <= self.m-1:
taille_coupe = int(input('combien de lignes couper ? '))
return self.coupe((taille_coupe, 0))
A = TabletteChocolat(1, 2)
B = TabletteChocolat(4, 8)
print(A)
print(B)
print(list(B.coups_possibles()))
print(B.coups_possibles())
print(B.est_possible((3, 0)))
print(B.est_possible((3, 2)))
print(B.coupe((0, 5)))
print(B.coupe((2, 0)))
B.plot()
B.demander_coup().plot()