Défis Python
Défis Python 2de>
Défis tirés de Prologin
1. La réponse à la question universelle ?
Niveau 0
Énoncé
Haruhi va observer les animaux aquatiques de la toundra africaine, pour cela elle s’équipe de jumelles, de sa tente et d’un gouter composé de biscuits et d’un peu de thé dans un thermos. Lors de ses observations elle peut observer plusieurs animaux dont : des lions, des girafes, des éléphants, des pingouins, des rhinocéros, des bébés hyènes, des zèbres, des antilopes, des mamans hyènes, des zébus, des cheetahs, des vautours, des panthères, des papas hyènes, des gnous et des lapins.
Pour tous ces animaux, Haruhi se demande quel serait le nombre idéal de pattes qu’il pourrait avoir, la réponse à cette question est toujours 42.
Ecrire un programme qui affiche 42.
Entrée
Sur la première ligne, un animal.
Sortie
La réponse universelle, 42.
Exemples d’entrée/sortie
Exemple d’entrée
CHEETAH
Exemple de sortie
42
2. Volvian, c’est mon eau
Niveau 1
Énoncé
Joseph Marchand aimerait installer un distributeur automatique d’eau déshydraté Volvian pour les voyageurs spatiaux assoiffés. Il a cependant un peu de mal à trouver un algorithme pour rendre la monnaie aux acheteurs.
Joseph souhaite que son distributeur rende le moins de billets et de pièce possible par transaction.
Aidez-le à écrire l’algorithme qui compte le nombre minimal de pièces à rendre au client.
Dans le système galactique de Joseph, la monnaie possède 8 valeurs sous forme de pièces : 200, 100, 50, 20, 10, 5, 2, 1.
Le montant m fourni par le voyageur sera toujours supérieur ou égal au prix p de la commande sur le distributeur. Les commandes n’excèdent jamais 500.
Entrée
- Sur la première ligne, un entier p qui représente le prix de l’article acheté.
- Sur la deuxième ligne, un entier m qui correspond au montant payé par le client.
Sortie
Un entier qui correspond au plus petit nombre de pièces que le distributeur doit rendre au client.
Contraintes
- 1≤p≤500
- p≤m≤500
Exemples d’entrée/sortie
Exemple d’entrée
10
40
Exemple de sortie
2
Commentaire
Le voyageur paie 40 pour une commande de 10. Il reste donc 30 à rendre. Le rendu optimal se fait via une pièce de 20 et une pièce de 10. Donc un total de 2 pièces.
Exemple d’entrée
50
50
Exemple de sortie
0
Commentaire
Le voyageur paie 50 pour une commande de 50. Il ne reste donc plus rien à rendre, c’est à dire 0 pièce.
3. Météorite, Vagues, Vent !
Niveau 1
Énoncé
Deux êtres célestes veulent se battre pour contrôler une planète. Pour ce faire, ils peuvent tous les deux effectuer une des trois actions suivantes :
Action 0 : lancer une météorite
Action 1 : créer des vagues gravitationnelles
Action 2 : envoyer des vents électromagnétiques
Chacune de ces actions a ses points forts et ses points faibles. En effet, la météorite n’est pas affectée par les vents électromagnétiques, mais étant faite de matière dense, les vagues gravitationnelles l’arrêtent net. Les vagues gravitationnelles sont donc efficaces contre les météorites, mais restent inefficaces contre les vents électromagnétiques. Ces vents électromagnétiques, malgré leurs inefficacités envers les météorites, traversent sans problème les vagues gravitationnelles.
Les deux êtres choisissent leur action en même temps. L’un sortira vainqueur, l’autre sera perdant.
Entrée
Sur la première ligne un entier S indiquant l’action de l’être céleste 1.
Sur la deuxième ligne un entier T indiquant l’action de l’être céleste 2.
Sortie
L’entier correspondant au joueur gagnant (1 ou 2), ou 0 en cas d’égalité.
Contraintes
- 0≤S≤2
- 0≤T≤2
Exemples d’entrée/sortie
Exemple d’entrée
0
2
Exemple de sortie
1
Commentaire
Les entiers donnés en entrée correspondent à la météorite et aux vents. Comme la météorite n’est pas affectée par les vents, l’être céleste 1 gagne.
Exemple d’entrée
1
2
Exemple de sortie
2
Commentaire
Les entiers donnés en entrée correspondent aux vagues et aux vents. Comme les vents traversent sans problème les vagues, l’être céleste 2 gagne.
4. Fuel
Niveau 1
Énoncé
Avant de décoller, l’équipage du vaisseau Nigolorp doit prévoir la quantité de carburant à charger afin de tenir tout le voyage. Le capitaine estime qu’il faut prévoir 60kg de carburant par personne.
Cependant, comme certains membres du vaisseau sont plus ou moins enrobés, il s’inquiète et décide de rajouter 20kg de carburant supplémentaire pour chaque personne pesant strictement plus de 90kg.
Le but de l’équipage du Nigolorp est d’écrire un programme capable de calculer la quantité de carburant à emporter en fonction des poids des différents membres de l’équipage et l’afficher.
Entrée
Sur la première ligne, un entier N représentant le nombre de membres dans l’équipage.
La deuxième ligne contient N entiers indiquant le poids P de chaque personne.
Sortie
La quantité de carburant à emporter en kg.
Contraintes
- 0≤N≤100
- 1≤P≤1000
Exemples d’entrée/sortie
Exemple d’entrée
3
67 121 88
Exemple de sortie
200
Commentaire
Ici, l’équipage est constitué de trois personnes. La première fait 67 kg, on prend donc 60 kg de carburant pour elle. La seconde fait 121 kg. Comme 121 > 90, on prend 60 + 20 kg de carburant supplémentaire pour elle. La troisième fait 88 kg, on ajoute donc 60 kg de carburant en plus. Au total, on doit prendre 200 kg de carburant.
5. Arnaque aérienne
Niveau 1
Énoncé
Comme le disait le grand-père de Joseph Marchand, « Le plus beau voyage est celui qu’on n’a pas encore fait ». New York était dans la tête de Joseph depuis plusieurs années maintenant, et il a décidé aujourd’hui d’acheter son billet d’avion.
Quelques secondes avant de cliquer sur le bouton « Acheter ! », son amie Haruhi lui envoie une liste de prix qu’elle a trouvés sur Internet. Joseph est curieux de voir si ces derniers sont moins chers que le billet qu’il s’apprêtait à acheter.
Entrée
Sur la première ligne le prix initial du billet de Joseph.
Sur la deuxième ligne un entier N, correspondant au nombre de billets envoyés par Haruhi. La ligne suivante contient les N prix trouvés par Haruhi.
Sortie
Si Haruhi a trouvé au moins 3 prix strictement moins chers que celui de Joseph, affichez « ARNAQUE ! » pour l’avertir. Sinon « Ok bon voyage, bisous, n’oublie pas de m’envoyer des photos ! ».
Contraintes
- 1≤N≤100
- 1≤prix≤2000
Exemples d’entrée/sortie
Exemple d’entrée
570
4
495 1200 540 450
Exemple de sortie
ARNAQUE !
Commentaire
Exactement 3 billets sont strictement moins chers que celui choisi par Joseph : 495, 540, et 450. Ça sent l’arnaque…
Exemple d’entrée
820
5
580 2000 970 1050 820
Exemple de sortie
Ok bon voyage, bisous, n'oublie pas de m'envoyer des photos !
Commentaire
Seul le billet à 580€ est strictement inférieur au billet de Joseph à 820€.
Solution
prix_initial = int(input())
nb_prix = int(input())
prix = list(map(int, input().split()))
nb_inf = 0
for p in prix:
if p < prix_initial:
nb_inf += 1
if nb_inf >= 3:
print("ARNAQUE !")
else:
print("Ok bon voyage, bisous, n'oublie pas de m'envoyer des photos !")
6. Le déluge
Niveau 1
Énoncé
Il y a fort longtemps, existait un continent où vivait une espèce rare : le Prolosaure. Ce continent était composé de N montagnes (numérotées de 1 à N) de différentes altitudes dans lesquelles les paisibles dinosaures vivaient en paix.
Un jour, une tempête se déchaîna et entraîna une montée globale du niveau de l’eau. Les Prolosaures se demandent si une partie de leur foyer a disparu sous les eaux.
On vous donne une liste de nombres représentant les altitudes des différentes montagnes qui composent le continent ainsi que l’altitude globale atteinte par la montée des eaux. Écrivez un programme qui indique si au moins une montagne a été submergée par les flots.
Entrée
L’entrée comprendra :
- un entier relatif h correspondant à l’altitude atteinte par la mer ;
- sur la ligne suivante, un entier naturel non nul N correspondant au nombre de montagnes ;
- sur la ligne suivante, N entiers relatifs yi séparés par des espaces, représentant l’altitude de chaque montagne.
Sortie
Vous afficherez en sortie :
- 1 si au moins une montagne a été submergée, c’est-à-dire que son altitude est strictement inférieure au niveau de la mer ;
- 0 sinon.
Contraintes
- -1 000 ≤ h ≤ 1 000 ;
- 1 ≤ N ≤ 100 ;
- -1 000 ≤ yi ≤ 1 000.
Exemples d’entrée/sortie
Exemple d’entrée
-91
13
-41 -47 -52 -57 -74 -77 -23 -14 -56 2 -74 -40 -59
Exemple de sortie
0
Commentaire
Ici, aucune montagne n’est recouverte par l’eau.
Exemple d’entrée
-42
12
-53 35 -44 -55 -47 -65 42 -25 -6 78 -7 -79
Exemple de sortie
1
Commentaire
Ici, six montagnes sont submergées.
Solution
niveau_eau = int(input())
nombre_montagnes = int(input())
montagnes = [int(i) for i in input().split()]
for hauteur in montagnes:
if hauteur < niveau_eau:
print(1)
break
else:
print(0)
7. Interferences
Niveau 2
Énoncé
L’équipage du vaisseau Nigolorp vient de perdre le contrôle du mastodonte. Très rapidement ils envoient un signal de détresse mais avec tous ces astéroïdes dans l’espace, le message devient rapidement pollué par des interférences.
Par chance, le vaisseau Prolo220 qui passait non loin capte le message mais doit d’abord se débarrasser des caractères ajoutés dus aux interférences.
Tout . dans le message doit être supprimé et lorsqu’un * est lu dans le texte, tous les caractères qui suivent sont ignoré jusqu’à ce qu’on lise à nouveau un *.
Le but de l’équipage du Prolo220 est d’écrire un programme capable de retirer les caractères polluants d’un message et d’afficher le message correct.
Entrée
Sur la première ligne, un entier N représentant la longueur du message envoyé.
Sur la deuxième ligne, la chaîne de caractères correspondant au message.
Sortie
Le message correct, épuré de tous les caractères dus aux interférences.
Contraintes
- 1≤N≤100
Exemples d’entrée/sortie
Exemple d’entrée
20
s.o*asdsad*..s.*sad*
Exemple de sortie
sos
Commentaire
Ici le message reçu fait 20 caractères, interférences comprises. Le texte reçu est : s.oasdsad…s.sad Après suppression des interférences (points et texte contenu entre des astérisques), on obtient le texte sos.
Exemple d’entrée
21
.pe..p*per.&c*a*rr.ot
Exemple de sortie
pepa
Commentaire
Ici tout le texte est ignoré entre les deux premiers * et après le troisième *.
Solution
def remove_interference(s):
fs = ""
interference = False
for c in s:
if c == '*':
interference = not interference
if c != '*' and c != '.' and not interference:
fs += c
return fs
length = int(input())
text = input()
print(remove_interference(text))
8. Flamands migrateurs
Niveau 2
Énoncé
Haruhi s’est découverte une passion pour l’ornithologie. Les flamands roses sont bien connus pour leur formation de vol en V caractéristique. Dans les dessins qui vont suivre, un 1 indique un oiseau, et un 0 un espace entre les oiseaux.
Haruhi souhaite communiquer à ses collègues les motifs qu’elle observe. Néanmoins, dupliquer tous ces croquis serait trop lourd, elle décide donc d’en distribuer une version compressée.
Pour cela, elle utilise l’algorithme du codage par plages. À chaque ligne, si elle rencontre un groupe de n
occurrences consécutives de 0, elle remplace le groupe entier par son codage n ; pareillement pour 1, avec la convention que chaque ligne de sortie débute par le codage d’un 0. Elle sépare les groupes par une espace.
En encodant quelques une de ces images, Haruhi en apprendra certainement beaucoup sur le fabuleux vol des flamands roses.
Entrée
- Sur la première ligne, un entier : n, le nombre de lignes.
- Sur la ligne suivante, un entier : m, le nombre de colonnes.
- Sur les lignes suivantes, une liste de n éléments : formation, la formation de vol des flamands roses.
- Une ligne par élément de la liste : une liste de m entiers séparés par des espaces. séparées par une espace.
Sortie
Sur la ligne i, pour 1≤i≤n, afficher l’encodage de la ligne i de la formation d’entrée.
Exemples d’entrée/sortie
Exemple d’entrée
5
9
1 0 0 0 0 0 0 0 1
0 1 0 0 0 0 0 1 0
0 0 1 0 0 0 1 0 0
0 0 0 1 0 1 0 0 0
0 0 0 0 1 0 0 0 0
Exemple de sortie
0 1 7 1
1 1 5 1 1
2 1 3 1 2
3 1 1 1 3
4 1 4
Exemple d’entrée
9
13
0 0 0 0 1 0 0 0 0 1 1 1 0
0 0 0 1 1 0 0 0 1 0 0 0 1
0 0 1 0 1 0 0 0 0 0 0 0 1
0 1 0 0 1 0 0 0 0 0 0 0 1
1 0 0 0 1 0 0 0 0 0 0 1 0
1 1 1 1 1 1 0 0 0 0 1 0 0
0 0 0 0 1 0 0 0 0 1 0 0 0
0 0 0 0 1 0 0 0 1 0 0 0 0
0 0 0 0 1 0 0 0 1 1 1 1 1
Exemple de sortie
4 1 4 3 1
3 2 3 1 3 1
2 1 1 1 7 1
1 1 2 1 7 1
0 1 3 1 6 1 1
0 6 4 1 2
4 1 4 1 3
4 1 3 1 4
4 1 3 5