Come scienziati informatici, probabilmente conoscerete tutti le operazioni di base dell'elenco pop e push . Queste sono semplici operazioni che modificano un elenco di elementi. Tuttavia, hai mai sentito parlare del flop dell'operazione ? (come nel flip- flop di )? È abbastanza semplice Dato un numero n , inverti i primi n elementi dell'elenco. Ecco un esempio:
>>> 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 cosa interessante dell'operazione flop è che puoi usarla per fare cose interessanti in un elenco, come ordinarlo . Faremo qualcosa di simile con i flop:
Dato un elenco di numeri interi, "Neighbor". In altre parole, ordinalo in modo che ogni elemento duplicato appaia consecutivamente.
Questo può essere fatto con i flop! Ad esempio, prendi il seguente elenco:
>>> 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]
Questo ci porta alla definizione della sfida di oggi:
Dato un elenco di numeri interi, genera qualsiasi set di flop che comporterà la vicinanza dell'elenco.
Usando l'ultimo elenco come esempio, dovresti produrre:
4
3
6
perché floppando l'elenco di 4, quindi di 3, quindi di 6 si otterrà un elenco vicino. Tieni presente che non è necessario stampare l'elenco più breve possibile di flop che confina con un elenco. Se avessi stampato:
4
4
4
3
1
1
6
2
2
invece, questo sarebbe comunque un output valido. Tuttavia, è possibile che non venga mai emesso un numero maggiore della lunghezza dell'elenco. Questo perché per un elenco a = [1, 2, 3]
, la chiamata non ha a.flop(4)
senso.
Ecco alcuni esempi:
#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]
Tenere presente che in ciascuno di questi esempi, l'output fornito è solo un potenziale output valido. Come ho detto prima, qualsiasi set di flop che confina con la lista data è un output valido . È possibile utilizzare questo script Python per verificare se un determinato elenco di flop configura correttamente un elenco.
È possibile accettare input e output in qualsiasi formato ragionevole. Ad esempio, sono validi argomenti di funzione / valore di ritorno, STDIN / STDOUT, lettura / scrittura di un file, ecc. Come al solito, questo è code-golf , quindi fai il programma più corto che puoi e divertiti! :)