Expressions regulars P94354


Statement
 

pdf   zip

Aquí tractem amb expressions regulars simplificades, les quals codifiquen paraules. En el que segueix, sigui PP una paraula no buida formada només amb lletres minúscules, sigui DD un dígit entre 1 i 9, i sigui S=E1,,EnS = E_1, \dots, E_n una seqüència no buida d’expressions regulars. Una expressió regular pot ser:

  • DD[PP] : codifica DD còpies de PP.

  • DD[SS] : codifica DD còpies de la concatenació de les codificacions de E1E_1, …, EnE_n.

Diversos exemples:

  • 1[hola] codifica hola.

  • 3[hi] codifica hihihi.

  • 1[1[hola]3[hi]] codifica holahihihi.

  • 2[1[hola]3[hi]] codifica holahihihiholahihihi.

Com podeu veure als exemples d’entrada, aquesta definició recursiva permet que hi hagi tants nivells com es vulgui de [ ... ].

Entrada

L’entrada consisteix en diverses expressions regulars.

Sortida

Escriviu la paraula codificada per cada expressió regular donada.

Observació

Si ss i tt són strings, i cc és un caràcter, aquestes operacions són vàlides:

    s += t; // afegeix una copia de t a la dreta d's
    s += c; // afegeix una copia de c a la dreta d's

Pista

La solució esperada és recursiva. El main() només conté:

    char c;
    while (cin >> c) cout << expressio(c) << endl;
Public test cases
  • Input

    1[hola]
    3[hi]
    1[1[hola]3[hi]]
    2[1[hola]3[hi]]
    2[1[a]3[bc]]
    2[2[1[x]2[y]]]
    1[1[2[a]1[b]3[c]]2[3[1[d]2[e]]1[f]]]
    9[y]
    2[2[2[2[2[z]]]]]
    

    Output

    hola
    hihihi
    holahihihi
    holahihihiholahihihi
    abcbcbcabcbcbc
    xyyxyyxyyxyy
    aabcccdeedeedeefdeedeedeef
    yyyyyyyyy
    zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
    
  • Information
    Author
    Maria Blesa
    Language
    Catalan
    Official solutions
    C++
    User solutions
    C++