CSES - Kone

Koneessa on näyttöruutu, jossa on alussa luku 11. Lisäksi koneessa on kaksi nappia: vasen nappi lisää lukuun 33 ja oikea nappi kertoo luvun 22:lla.

Tavoitteesi on saada aikaan luku xx nappeja painamalla. Mikä on pienin mahdollinen painallusten määrä?

Esimerkiksi kun x=17x=17, paras ratkaisu on seuraava:

  • Luku on alussa 11.
  • Painat vasenta nappia, jolloin luvusta tulee 44.
  • Painat vasenta nappia, jolloin luvusta tulee 77.
  • Painat oikeaa nappia, jolloin luvusta tulee 1414.
  • Painat vasenta nappia, jolloin luvusta tulee 1717.

Tässä tapauksessa pienin mahdollinen painallusten määrä on 44.

Toteuta tiedostoon machine.py funktio min_steps, joka etsii pienimmän painallusten määrän luvulle xx. Jos ratkaisua ei ole olemassa, funktion tulee palauttaa 1-1.

Funktion tulee toimia tehokkaasti, kun xx on välillä 110001 \dots 1000.

def min_steps(x):
    # TODO

if __name__ == "__main__":
    print(min_steps(1)) # 0
    print(min_steps(2)) # 1
    print(min_steps(3)) # -1
    print(min_steps(4)) # 1
    print(min_steps(5)) # 2
    print(min_steps(17)) # 4
    print(min_steps(42)) # -1
    print(min_steps(100)) # 7
    print(min_steps(1000)) # 13