################################################################################
#             Exercices à rendre au plus tard le 27/09/2026 à 20h              #
#                                  Correction                                  #
################################################################################

###########################################
# Exercice 11. Distance SNCF
###########################################

def dist_SNCF(p1,p2):
    """dist_SNCF(p1: float,p2: float) -> float"""
    x1,y1 = p1
    x2,y2 = p2
    if abs(x1*y2 - x2*y1) <= 10**(-10):
        return ((x1-x2)**2 + (y1-y2)**2)**0.5
    else:
        return (x1*x1 + y1*y1)**0.5 + (x2*x2 + y2*y2)**0.5

### Tests:

# print(dist_SNCF((2,1), (1,1)))
# print(dist_SNCF((2,1), (4,2)))

###########################################
# Exercice 12. Visite au musée
###########################################

# Cette fonction renvoie True si lundi au vendredi.
# On ne teste pas si c'est un vrai jour de semaine
def est_jour_semaine(jour):
    """est_jour_semaine(jour: str) -> bool"""
    return jour == 'lundi' or\
        jour == 'mardi' or\
        jour == 'mercredi' or\
        jour == 'jeudi' or\
        jour == 'vendredi'

def meilleur_tarif(age, heure_arrivee, etudiant, jour):
    """
    age: int
    heure_arrivee: float
    etudiant: bool
    jour: str
    Return: float
    """
    if age < 10:
        return 3
    bool_semaine = est_jour_semaine(jour)
    if age >= 60 and bool_semaine:
        return 4.9
    if heure_arrivee >= 16:
        return 6.7
    if etudiant:
        return 7.9
    if age >= 60:
        return 9
    return 11

### Tests:

# print(meilleur_tarif(9, 8., False, 'lundi'))
# print(meilleur_tarif(22, 17.5, True, 'dimanche'))
# print(meilleur_tarif(30, 12., True, 'samedi'))
# print(meilleur_tarif(65, 10.5, False, 'lundi'))
# print(meilleur_tarif(65, 10., False, 'samedi'))
# print(meilleur_tarif(50, 15.5, False, 'lundi'))

###########################################
# Exercice 13. Fléchettes (exercice facultatif)
###########################################

def afficher_cible(nbLettres):
    """afficher_cible(nbLettres: int) -> NoneType"""
    assert 1 <= nbLettres and nbLettres <= 26
    lettres = "abcdefghijklmnopqrstuvwxyz"
    n = 2*nbLettres-1
    for i in range(n):
        for j in range(n):
            k = min(i,j,n-1-i,n-1-j)
            print(lettres[k], end = '')
        print()

### Tests:

# # afficher_cible(0)
# # afficher_cible(27)
# afficher_cible(1)
# print()
# afficher_cible(4)
# print()
# afficher_cible(5)
# print()
# afficher_cible(26)