Lisp till C

Problem ID: lisp2cTime limit: 1 secondMemory limit: 1024 MB

Difficulty

2.8

C är ett gammalt programmeringsspråk från 70-talet, som trots dess ålder är väldigt välanvänt. I språket skrivs funktionsanrop till en funktion med namnet namn på formen namn(parameter1, parameter2, ..., parameterN). En parameter kan antingen vara en variabel (som i vårt fall består av en sekvens av tecken a-z), eller ett funktionsanrop i sig. T.ex. kan ett fullständigt funktionsanrop se ut på följande vis:

a(b, c(d), e(f, g(h, i, j)))

Ett funktionsanrop utan parametrar skrivs som funktion().

Lisp är ett annat programmeringsspråk från 50-talet. I språket skrivs funktionsanrop till en funktion med namnet namn på formen (namn parameter1 parameter2 ... parameter N). Återigen kan en parameter i sig vara en variabel eller ett funktionsanrop. Funktionsanropet i C som beskrivs ovan kan istället skrivas

(a b (c d) (e f (g h i j)))

Ett funktionsanrop utan parametrar skrivs som (funktion).

Varför denna språkhistoria? Jo, det visar sig att domaren Simon gillar C, men inte Lisp. Domaren Johan, å andra sidan, gillar Lisp, men inte C.

Simon blev därför väldigt sur när Johan programmerade alla sina exempellösningar i Lisp, och vill konvertera Johans program till C. Hjälp Simon med detta, genom att skriva ett program som, givet ett funktionsanrop i Lisp konverterar det till ett funktionsanrop i C.

Indata

Indatan består av en rad med ett korrekt formaterat funktionsanrop i Lisp-format, högst $100\, 000$ tecken lång. Alla parametrar kommer att vara separerade med exakt ett blanksteg, och det finns inga extra blanksteg där det inte behövs.

Utdata

Skriv ut en enda rad, med funktionsanropet konverterat till C-format. Inkludera ett blanksteg efter varje kommatecken, som i exempelfallen.

Poängsättning

Din lösning kommer att testas på en mängd testfallsgrupper. För att få poäng för en grupp så måste du klara alla testfall i gruppen.

Grupp

Poängvärde

Begränsningar

1

16

Ingen parameter i indatan är ett funktionsanrop.

2

27

Anropen är nästlade högst två nivåer: (a (b) (c)) och (a (b c)) kan förekomma, men inte (a (b (c))).

3

15

Alla anrop har minst en parameter, och att alla variabler och funktionsnamn består av enbart en bokstav.

4

28

Indatan är högst $100$ tecken lång.

5

14

Inga speciella begränsningar.

Sample Input 1 Sample Output 1
(a b (c d) (e f (g h i j)))
a(b, c(d), e(f, g(h, i, j)))
Sample Input 2 Sample Output 2
(min alfa beta)
min(alfa, beta)
Sample Input 3 Sample Output 3
(prog (olymp (onlinekval)))
prog(olymp(onlinekval()))

Download the sample data files

Author: Johan Sannemo. Source: Programmeringsolympiadens onlinekval 2018. License: Creative Commons License (cc by-sa)