21. Desordenando con criterio
Crea una función que desordene una lista (mezcle sus elementos aleatoriamente) de manera que se garantice que ningún elemento quede en su posición original.
La función debe aceptar una lista y devolver una nueva lista desordenada. Si no es posible desordenar la lista bajo esta condición (por ejemplo, si la lista tiene un solo elemento), debe manejarlo adecuadamente.
import random
def desordenar_sin_posicion_original(lista: list) -> list:
# Tu código aquí
pass
# Ejemplo (el resultado será aleatorio, pero ningún elemento estará en su posición original)
desordenar_sin_posicion_original([1, 2, 3])
# Posibles resultados: [2, 3, 1] o [3, 1, 2]
# Imposibles: [1, 3, 2] (1 está en su posición)
desordenar_sin_posicion_original(["A", "B", "C", "D"])
# Ejemplo: ["B", "C", "D", "A"]
Ratoncito
Implementa una función que intente desordenar la lista y compruebe si cumple la condición. Si no la cumple, que lo intente de nuevo. Ten en cuenta que esto podría ser ineficiente para listas grandes.
Dragón
Implementa el desorden de forma eficiente para garantizar que ningún elemento quede en su posición original (esto se conoce como "derangement"). Investiga algoritmos para derangements o técnicas de Fisher-Yates modificadas para asegurar esta propiedad.
Este trabajo está bajo una licencia Attribution-NonCommercial-NoDerivatives 4.0 International.
Apóyame en Ko-fi