Problema Libro Aho, Hopcroft y Ullman: Example 2.2

Post date: Mar 14, 2013 5:45:21 PM

Implementar una función own_print usando la siguiente plantilla:

def own_print(s):
    """
    Given a string s made from the characters in
        a,b,...,y,z,A,B,...,Y,Z,#,@
    return the string resulting from s by interpreting the characters '#' and '@'
    as described in the Aho, Hopcroft, and Ullman book, example 2.2.
    """
    r,a = '',Stack()
    
     ...
    
    return r

Restricciones

  1. Las únicas variables que puede usar la función own_print son a y r, tal como se declaran en la plantilla anterior. Los fuentes de la clase Stack hacen parte del archivo adjunto a este mensaje.
  2. Adicionalmente el orden de complejidad de own_print(s) debe ser O(n), en donde n es la longitud del parámetro s.

A modo de sugerencia para comenzar la implementación, creen un nuevo archivo en el directorio de Stack.test.py y con el mismo encabezado (from ... import ...) de este último. Este nuevo archivo, además del encabezado, debe contener únicamente la definición de la función own_print y, posiblemente, algunas pruebas (ver más adelante).

Pruebas

Pueden utilizar las siguientes pruebas para validar la implementación hecha:

print(own_print('abc'))
print(own_print('abc#'))
print(own_print('abc##'))
print(own_print('abc###'))
try:
  print(own_print('abc####'))
except ValueError:
  print('Error')
print(own_print('a#b#c'))
print(own_print('a#b#c#q'))
print(own_print(''))
print(own_print('@'))
print(own_print('@ayt@'))
try:
  print(own_print('@ayt@#a'))
except ValueError:
  print('Error')
print(own_print('@ay#t@q'))
print(own_print('@@@@@@@'))

El resultado debe ser el siguiente:

abc
ab
a
Error
c
q
Error
q

Note que hay 5 lineas en blanco, específicamente, las lineas 4, 8, 9, 10 y 13.