Aller au contenu

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⚓︎

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⚓︎

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⚓︎

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⚓︎

2011 - Decrytage

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⚓︎

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