CSES - Robotin lista

Annettuna on lista, jossa on kokonaislukuja. Mikään luku ei esiinny listalla useammin kuin kerran.

Robotti aloittaa kohdasta 00 ja kerää listan luvut pienimmästä suurimpaan. Tehtäväsi on laskea, montako askelta robotti liikkuu yhteensä.

Esimerkiksi kun lista on [42,1337,1,109][42, 1337, 1, 10^9], robotti liikkuu seuraavasti:

  • 22 askelta oikealle (luku 11)
  • 22 askelta vasemmalle (luku 4242)
  • 11 askel oikealle (luku 13371337)
  • 22 askelta oikealle (luku 10910^9)

Tässä tapauksessa robotti liikkuu yhteensä 2+2+1+2=72+2+1+2=7 askelta.

Toteuta tiedostoon robolist.py funktio count_steps, jolle annetaan lista lukuja. Funktion tulee palauttaa robotin askelmäärä.

Sinun tulee toteuttaa funktio niin, että se laskee askelmäärän tehokkaasti myös suurelle listalle. Funktion tulee antaa vastaus välittömästi myös tehtäväpohjan viimeisessä testissä.

def count_steps(numbers):
    # TODO

if __name__ == "__main__":
    print(count_steps([1])) # 0
    print(count_steps([1, 2, 3])) # 2
    print(count_steps([3, 2, 1])) # 4
    print(count_steps([42, 1337, 1, 10**9])) # 7
    print(count_steps([1, 3, 5, 7, 8, 6, 4, 2])) # 28
    print(count_steps([10**6, 10**8, 10**7, 10**9])) # 5

    numbers = [(x * 999983) % 10**9 + 1 for x in range(10**5)]
    print(count_steps(numbers)) # 4871908997