Couper un jeu de cartes

Couper un jeu de cartes consiste à prendre une partie des cartes depuis le dessus du paquet pour les passer sans en modifier l'ordre sous le paquet. Ceci permet d'éviter une triche lors de la distribution des cartes. De façon analogue, nous allons couper un tableau.

La fonction coupe prend en paramètres tableau qui est un tableau de taille supérieure ou égale à 2 et nombre qui est un entier représentant le nombre de cartes mises en dessous. La fonction coupe renvoie un nouveau tableau constitué des éléments de tableau pour lesquels les nombre premiers éléments ont été transférés dans cet ordre du début du tableau à la fin.

Limitations

On garantit que tableau est de longueur n supérieure ou égale à 2, et que nombre est un entier pouvant prendre toutes les valeurs de 1 à n- 1

Contrainte

L'utilisation des tranches ("slices" en anglais) est interdite.

Exemple

Python Console Session
>>> coupe(['As ♠', '5 ♥', '2 ♠', '5 ♣', 'Dame ♠', '8 ♦', 'As ♣', 'Valet ♣'], 3)
['5 ♣', 'Dame ♠', '8 ♦', 'As ♣', 'Valet ♣', 'As ♠', '5 ♥', '2 ♠']
>>> coupe([5, 1, 8, 3, 7], 1)
[1, 8, 3, 7, 5]
>>> coupe([5, 1, 8, 3, 7], 2)
[8, 3, 7, 5, 1]
>>> coupe([5, 1, 8, 3, 7], 4)
[7, 5, 1, 8, 3]
>>> coupe([5, 3], 1)
[3, 5]
Travail à faire

Vous devez écrire la fonction coupe.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5

ENCRYPTION_TOKEN

Solution & Remarques

🐍 Proposition de correction
1
2
3
4
5
6
7
8
def coupe(tableau, nombre):
    n = len(tableau)
    nouveau = [None] * n
    for i in range(nombre):
        nouveau[n - nombre + i] = tableau[i]
    for i in range(nombre, n):
        nouveau[i - nombre] = tableau[i]
    return nouveau

Remarques :

Autre correction possible en utilisant le "modulo":

Python
def coupe(tableau, nombre):
    n = len(tableau)
    return [tableau[(i + nombre) % n] for i in range(n)]

On peut également utiliser les indices de listes négatifs :

Python
def coupe(tableau, nombre):
    n = len(tableau)
    d = nombre - n
    return [tableau[d + i] for i in range(n)]

ENCRYPTION_TOKEN