#! /usr/bin/python
# -*- coding: utf-8 -*-

#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
#
"""Introduction au tri et applications
Auteur: Mettre votre nom
Date: 6-11-2025
"""

######################################
# Import des fonctions de maths      #
######################################

from math import *

######################################
# Algorithme 0:                      #
# Exemples de commandes              #
######################################

l1 = ["toto",4,[2,3],3.14]      # declaration de liste
len(l1)                         # longueur de liste
l1[0]                           # element de l1 d'indice 0
l1[1]                           # element de l1 d'indice 1
l1[2]                           # element de l1 d'indice 2: c'est une liste
l1[0],l1[1]=l1[1],l1[0]         # echange des deux premiers elements de la liste
l1+[-1 ,0]                      # concatenation de l1 et de la liste [-1,0]
3*[2 ,3 ,4]                     # repetition de liste
l1.append(42)                   # ajout d'un element a la fin de l1
l1.extend([ -1 ,0])             # ajout de plusieurs elements a la fin de l1
del(l1[6])                      # suppression de l'element d'indice 6 dans l1
l1.remove('toto')               # suppression des elements "toto" dans l1
l1.insert(4,"titi")             # insertion de "titi" en indice 4 dans l1
list(range(5))                  # liste contenant les entiers de [[0;4]]]
list(range(3 ,7))               # liste contenant les entiers de [[3;6]]]
list(range(3,11,2))             # liste contenant les entiers de [[3;10]]] avec un pas de 2
l1[0:5]                         # liste contenant les elements de l1 d'indices dans l'intervalle [[0;5]]
l1[0:5:2]                       # liste contenant les elements de l1 d'indices dans l'intervalle [[0;5]] avec un pas de 2
l1[:5]                          # liste contenant tous les elements de l1 jusqu'a l'element d'indice 5
l1[4:]                          # liste contenant tous les elements de l1 a partir de l'element d'indice 4
l1[-2:]                         # liste contenant les deux derniers elements de l1
l1[::2]                         # liste contenant tous les elements de l1 d'indice pair
l1[3]="tutu"                    # remplacement de l'element d'indice 3 de l1 par "tutu"
"toto" in l1                    # "toto" est-il dans l1?
3.14 in l1                      # 3.14 est-il dans l1?
l1.index(3.14)                  # recherche du premier indice de l'element 3.14
sum([1,3,-1])                   # renvoie la somme des éléments de la liste [1,3,-1]
prod([1,3,-1])                  # renvoie le produit des éléments de la liste [1,3,-1]
[k**2 for k in range(10)]       # renvoie la liste des dix premiers carres



######################################
# Liste des niveaux de vie medians   #
# par departements                   #
######################################

# c'est une liste de listes au format [no du departement, nom du departement, niveau en euros]
LNiveaux = [["1","Ain",24810],["2","Aisne",20920],["3","Allier",21500],["4","Alpes-de-Haute-Provence",21790],["5","Hautes-Alpes",22010],["6","Alpes-Maritimes",23460],["7","Ardèche",21990],["8","Ardennes",20850],["9","Ariège",20820],["10","Aube",21530],["11","Aude",20510],["12","Aveyron",21860],["13","Bouches-du-Rhône",22920],["14","Calvados",22840],["15","Cantal",21710],["16","Charente",22000],["17","Charente-Maritime",22810],["18","Cher",22100],["19","Corrèze",22140],["21","Côte-d'Or",23720],["22","Côtes-d'Armor",22670],["23","Creuse",20620],["24","Dordogne",21410],["25","Doubs",23890],["26","Drôme",22450],["27","Eure",22880],["28","Eure-et-Loir",23360],["29","Finistère",23220],["2A","Corse-du-Sud",23420],["2B","Haute-Corse",21460],["30","Gard",21330],["31","Haute-Garonne",24230],["32","Gers",22110],["33","Gironde",23950],["34","Hérault",21800],["35","Ille-et-Vilaine",23690],["36","Indre",21270],["37","Indre-et-Loire",23140],["38","Isère",24270],["39","Jura",23140],["40","Landes",22840],["41","Loir-et-Cher",22510],["42","Loire",21970],["43","Haute-Loire",22100],["44","Loire-Atlantique",24120],["45","Loiret",23090],["46","Lot",21910],["47","Lot-et-Garonne",21050],["48","Lozère",21580],["49","Maine-et-Loire",22500],["50","Manche",22480],["51","Marne",22830],["52","Haute-Marne",21350],["53","Mayenne",22230],["54","Meurthe-et-Moselle",23010],["55","Meuse",21890],["56","Morbihan",23140],["57","Moselle",22980],["58","Nièvre",21380],["59","Nord",21340],["60","Oise",23330],["61","Orne",21400],["62","Pas-de-Calais",20720],["63","Puy-de-Dôme",23060],["64","Pyrénées-Atlantiques",23300],["65","Hautes-Pyrénées",21530],["66","Pyrénées-Orientales",20650],["67","Bas-Rhin",24090],["68","Haut-Rhin",24470],["69","Rhône",24480],["70","Haute-Saône",21860],["71","Saône-et-Loire",22170],["72","Sarthe",22230],["73","Savoie",24270],["74","Haute-Savoie",28120],["75","Paris",29730],["76","Seine-Maritime",22340],["77","Seine-et-Marne",24640],["78","Yvelines",28130],["79","Deux-Sèvres",22220],["80","Somme",21560],["81","Tarn",21730],["82","Tarn-et-Garonne",21520],["83","Var",23120],["84","Vaucluse",21370],["85","Vendée",22790],["86","Vienne",22220],["87","Haute-Vienne",22140],["88","Vosges",21550],["89","Yonne",21940],["90","Territoire de Belfort",22920],["91","Essonne",25040],["92","Hauts-de-Seine",29720],["93","Seine-Saint-Denis",19020],["94","Val-de-Marne",24270],["95","Val-d'Oise",23290],["972","Martinique",19770],["974","La Réunion",17070]]

######################################
# Algorithme 1:                      #
# ExtraireNoms                       #
######################################

### pour test
##print(ExtraireNoms(LNiveaux))

######################################
# Algorithme 2:                      #
# TrierNiveaux                       #
######################################

### pour test
##print(TrierNiveaux(LNiveaux))

######################################
# Algorithme 3:                      #
# NiveauMin                          #
######################################

### pour test
##print(NiveauMin(LNiveaux)) 

######################################
# Algorithme 4:                      #
# DixPlusRiches                      #
######################################

### pour test
##print(DixPlusRiches(LNiveaux))

######################################
# Algorithme 5:                      #
# PremierQuartile                    #
######################################

### pour test
##print(PremierQuartile(LNiveaux))

######################################
# Algorithme 6:                      #
# SommeImpairs                       #
######################################

### pour test
##print(SommeImpairs(10))

######################################
# Algorithme 7:                      #
# Factorielle                        #
######################################

### pour test
##print(Factorielle(5))

######################################
# Algorithme 8:                      #
# Combinaisons                       #
######################################

### pour test
##print(Combinaisons(1998,2000))
