CSES - Laskut

Annettuna on merkkijono, jonka osana voi olla seuraavan muotoisia laskuja:

  • add(x,y): laske yhteen luvut x ja y
  • mul(x,y): kerro toisillaan luvut x ja y

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