Como informáticos, probablemente estén familiarizados con las operaciones básicas de listas de pop y push . Estas son operaciones simples que modifican una lista de elementos. Sin embargo, ¿alguna vez has oído hablar del fracaso de la operación ? (como en flip- flop )? Es muy simple Dado un número n , invierta los primeros n elementos de la lista. Aquí hay un ejemplo:
>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a.flop(4)
[4, 3, 2, 1, 5, 6, 7, 8, 9, 10]
Lo bueno de la operación de flop es que puedes usarla para hacer algunas cosas interesantes en una lista, como ordenarla . Vamos a hacer algo similar con los flops:
Dada una lista de enteros, "Vecino". En otras palabras, ordénelo para que cada elemento duplicado aparezca consecutivamente.
¡Esto se puede hacer con flops! Por ejemplo, tome la siguiente lista:
>>> a = [3, 2, 1, 4, 3, 3, 2]
>>> a.flop(4)
[4, 1, 2, 3, 3, 3, 2]
>>> a.flop(3)
[2, 1, 4, 3, 3, 3, 2]
>>> a.flop(6)
[3, 3, 3, 4, 1, 2, 2]
Esto nos lleva a la definición del desafío de hoy:
Dada una lista de enteros, genere cualquier conjunto de flops que resulte en la lista de vecinos.
Usando la última lista como ejemplo, debe generar:
4
3
6
porque si la lista se despliega en 4, luego en 3 y luego en 6, se obtendrá una lista de vecinos. Tenga en cuenta que no necesita imprimir la lista de flops más corta posible que esté junto a una lista. Si hubiera impreso:
4
4
4
3
1
1
6
2
2
en cambio, esto todavía sería una salida válida. Sin embargo, es posible que no siempre el número de una salida mayor que la longitud de la lista. Esto se debe a que para una lista a = [1, 2, 3]
, llamar no a.flop(4)
tiene sentido.
Aquí hay unos ejemplos:
#Input:
[2, 6, 0, 3, 1, 5, 5, 0, 5, 1]
#Output
[3, 7, 8, 6, 9]
#Input
[1, 2]
#Output
<any list of integers under 3, including an empty list>
#Input
[2, 6, 0, 2, 1, 4, 5, 1, 3, 2, 1, 5, 6, 4, 4, 1, 4, 6, 6, 0]
#Output
[3, 19, 17, 7, 2, 4, 11, 15, 2, 7, 13, 4, 14, 2]
#Input
[1, 1, 1, 1, 2, 2, 2, -1, 4]
#Output
[]
#Input
[4, 4, 8, 8, 15, 16, 16, 23, 23, 42, 42, 15]
#Output
[12, 7]
Tenga en cuenta que en cada uno de estos ejemplos, la salida dada es solo una salida válida potencial. Como dije antes, cualquier conjunto de flops que sea vecino de la lista dada es una salida válida . Puede usar esta secuencia de comandos de Python para verificar si una lista dada de flops se encuentra correctamente junto a una lista.
Puede tomar entrada y salida en cualquier formato razonable. Por ejemplo, los argumentos de función / valor de retorno, STDIN / STDOUT, leer / escribir un archivo, etc. son todos válidos. Como de costumbre, este es el código de golf , ¡así que haz el programa más corto que puedas y diviértete! :)