Koneessa on näyttöruutu, jossa on alussa luku . Lisäksi koneessa on kaksi nappia: vasen nappi lisää lukuun ja oikea nappi kertoo luvun :lla.
Tavoitteesi on saada aikaan luku nappeja painamalla. Mikä on pienin mahdollinen painallusten määrä?
Esimerkiksi kun , paras ratkaisu on seuraava:
- Luku on alussa .
- Painat vasenta nappia, jolloin luvusta tulee .
- Painat vasenta nappia, jolloin luvusta tulee .
- Painat oikeaa nappia, jolloin luvusta tulee .
- Painat vasenta nappia, jolloin luvusta tulee .
Tässä tapauksessa pienin mahdollinen painallusten määrä on .
Toteuta tiedostoon machine.py
funktio min_steps
, joka etsii pienimmän painallusten määrän luvulle . Jos ratkaisua ei ole olemassa, funktion tulee palauttaa .
Funktion tulee toimia tehokkaasti, kun on välillä .
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