Annettuna on merkkijono, jonka osana voi olla seuraavan muotoisia laskuja:
add(x,y)
: laske yhteen luvutx
jay
mul(x,y)
: kerro toisillaan luvutx
jay
Luvut x
ja y
ovat positiivisia kokonaislukuja. Sinun tulee käsitellä vain laskut, jotka ovat tarkalleen tässä muodossa.
Tehtäväsi on luoda uusi merkkijono, jossa jokainen lasku on korvattu sen vastauksella ja muut merkit ovat ennallaan. Esimerkiksi merkkijono abadd(123,456)mulxmul(3,13)
tulee muuttaa muotoon ab579mulx39
.
Toteuta tiedostoon addmul.py
funktio evaluate
, jolle annetaan parametrina merkkijono. Funktion tulee palauttaa merkkijono, jossa kaikki laskut on korvattu niiden vastauksilla.
Funktion tulee toimia tehokkaasti pitkilläkin merkkijonoilla. Hyvä testi on tehtäväpohjan viimeinen testi, jossa merkkijonossa on 10^5 kertaa lasku mul(6,7)
. Funktiosi tulee pystyä käsittelemään tämäkin syöte tehokkaasti.
def evaluate(data): # TODO if __name__ == "__main__": print(evaluate("add(1,2)")) # 3 print(evaluate("aybabtu")) # aybabtu print(evaluate("mul(6,7),mul(7,191)")) # 42,1337 print(evaluate("abadd(123,456)mulxmul(3,13)")) # ab579mulx39 print(evaluate("mul()mul(13)mul(0,1)")) # mul()mul(13)mul(0,1) data = "mul(6,7)"*10**5 result = evaluate(data) print(len(result)) # 200000 print(result[:20]) # 42424242424242424242