Prologin⚓︎
Prologin1 propose des exercices en ligne d'algorithmique pour les étudiants. Certains sont accessibles en NSI.
Vous trouverez là un peu d'aide pour démarrer sur ces exercices que l'on peut résoudre par récursivité. Les liens donnés sur cette page renvoient sur le site externe de Prologin.
Niveau 1, 2003 - Nombres impairs⚓︎
Aide
Il est possible créer une fonction récursive simple pour cet exercice.
🐍 Script Python
"""
author : Votre nom
problem: https://prologin.org/train/2003/semifinal/nombres_impairs
"""
def nombres_impairs(n: int, m: int) -> list[int]:
"""Renvoie la liste des nombres impairs entre `n` et `m` inclus.
>>> nombres_impairs(42, 51)
[43, 45, 47, 49, 51]
>>> nombres_impairs(42, 52)
[43, 45, 47, 49, 51]
>>> nombres_impairs(43, 51)
[43, 45, 47, 49, 51]
>>> nombres_impairs(43, 52)
[43, 45, 47, 49, 51]
"""
... # À compléter
import doctest
doctest.testmod()
n, m = map(int, input().split())
impairs = nombres_impairs(n, m)
for k in impairs:
print(k, end=" ")
Niveau 1, 2004 - Netiquette⚓︎
Aide
On conseille de créer une fonction qui affiche directement le texte, ligne par ligne avec une largeur variable. On garantit qu'il n'y a aucun mot plus large qu'une ligne.
🐍 Script Python
"""
author: Votre nom
problem: https://prologin.org/train/2004/semifinal/netiquette
"""
def netiquette(texte: str, largeur=80):
"""Affiche le texte formaté sur plusieurs lignes,
avec une largeur maximale définie, 80 par défaut.
>>> nétiquette("123 12 1", 4)
123
12 1
"""
... # à compléter
# vos tests
import doctest
doctest.testmod()
# entrée
longueur = int(input())
parchemin = input()
# sortie
netiquette(parchemin)
Niveau 1, 2004 - Addition binaire⚓︎
Aide
🐍 Script Python
"""
author: Votre nom
problem: https://prologin.org/train/2004/semifinal/addition_binaire
"""
def addition_binaire(nb_bits: int, nombre_1: str, nombre_2: str) -> str:
"""Renvoie la somme de deux nombres écrits en binaire sur nb_bits.
Le débordement est perdu.
>>> addition_binaire(3, "111", "101")
'100'
"""
...
def somme_binaire(nb_bits: int, nombres: list) -> str:
"""Renvoie la somme des nombres donnés sur nb_bits,
le débordement est perdu.
>>> nombres = ["1010", "1111", "1001"]
>>> somme_binaire(4, nombres)
'0010'
>>> nombres = ["001", "001", "100"]
>>> somme_binaire(3, nombres)
'110'
"""
... # à compléter
# Tests
import doctest
doctest.testmod()
# Entrée
nb_bits = int(input())
nb_nombres = int(input())
nombres = []
for i in range(nb_nombres):
nombre_en_binaire = input()
assert nb_bits == len(nombre_en_binaire), f"Erreur avec le {i}e nombre"
nombres.append(nombre_en_binaire)
# Sortie
print(somme_binaire(nb_bits, nombres))
Niveau 1, 2011 - Décryptage⚓︎
Aide
🐍 Script Python
"""
author: Votre nom
problem: https://prologin.org/train/2011/semifinal/decryptage
"""
def est_extrait(texte:str, partie: str) -> bool:
"""Renvoie True ou False selon que
`partie` est un extrait de `texte`
>>> est_extrait("Un morceau complet", "U orc cplt")
True
>>> est_extrait("Un morceau complet", "Z")
False
>>> est_extrait("Un morceau complet", "nU")
False
>>> est_extrait("J'ai dit ho", "diiit")
False
"""
... # à compléter
# Tests
import doctest
doctest.testmod()
# Entrée
taille_message_chien = int(input())
message_chien = input()
taille_message_test = int(input())
message_test = input()
# Sortie
print("1" if est_extrait(message_chien, message_test) else "0")
Niveau 3, 2013 - Reverse Alchemying⚓︎
Aide
🐍 Script Python
"""
author: Votre nom
problem: https://prologin.org/train/2013/semifinal/reverse_alchemying
"""
# Tests
import doctest
doctest.testmod()
# Entrée
# Sortie