En tant qu'informaticiens, vous connaissez probablement tous les opérations de liste de base de pop and push . Ce sont des opérations simples qui modifient une liste d'éléments. Cependant, avez-vous déjà entendu parler de l'opération flop ? (comme dans bistable flop , )? C'est assez simple. Étant donné un nombre n , inversez les n premiers éléments de la liste. Voici un exemple:
>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a.flop(4)
[4, 3, 2, 1, 5, 6, 7, 8, 9, 10]
La chose intéressante à propos de l'opération de flop, c'est que vous pouvez l'utiliser pour faire des choses intéressantes sur une liste, comme le trier . Nous allons faire quelque chose de similaire avec les flops:
Étant donné une liste d'entiers, "Neighbour it". En d'autres termes, triez-le de sorte que chaque élément en double apparaisse consécutivement.
Cela peut être fait avec des flops! Par exemple, prenez la liste suivante:
>>> 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]
Cela nous amène à la définition du défi d'aujourd'hui:
Étant donné une liste d'entiers, affichez tout ensemble de flops qui entraînera le voisinage de la liste.
En utilisant la dernière liste comme exemple, vous devez sortir:
4
3
6
car flasher la liste par 4, puis par 3, puis par 6 se traduira par une liste voisine. Gardez à l'esprit que vous n'avez pas besoin d'imprimer la liste de flops la plus courte possible qui voisine une liste. Si vous aviez imprimé:
4
4
4
3
1
1
6
2
2
au lieu de cela, ce serait toujours une sortie valide. Cependant, vous ne pouvez jamais afficher un nombre supérieur à la longueur de la liste. En effet, pour une liste a = [1, 2, 3]
, appeler a.flop(4)
n'a pas de sens.
Voici quelques exemples:
#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]
Gardez à l'esprit que dans chacun de ces exemples, la sortie donnée n'est qu'une sortie potentiellement valide. Comme je l'ai déjà dit, tout ensemble de flops qui voisine la liste donnée est une sortie valide . Vous pouvez utiliser ce script python pour vérifier si une liste donnée de flops voisine correctement une liste.
Vous pouvez prendre des entrées et des sorties dans n'importe quel format raisonnable. Par exemple, les arguments de fonction / valeur de retour, STDIN / STDOUT, la lecture / écriture d'un fichier, etc. sont tous valides. Comme d'habitude, c'est du golf de code , alors faites le programme le plus court possible et amusez-vous! :)