Intérprete P33564


Statement
 

pdf   zip

thehtml

Hacer un programa que simule la ejecución de un programa escrito en un cierto lenguaje ensamblador (Apodado cariñosamente Rourix en honor a su inventor). En este lenguaje, se dispone exclusivamente de 100 variables de tipo entero, x0x99, todas inicialmente con el valor 1. Las instrucciones del programa se encuentran guardadas consecutivamente en posiciones etiquetadas 000, 001, 002, … (hasta un máximo de 999). El conjunto de instrucciones posibles es:

||
stop ‍ ‍ ‍ ‍detiene el programa.
endl ‍ ‍ ‍ ‍escribe un salto de línea.
prin i ‍ ‍ ‍ ‍escribe, precedido de un espacio, el contenido de xi.
stor i v ‍ ‍ ‍ ‍guarda el valor v en la variable xi (xi:=v).
copy i j ‍ ‍ ‍ ‍copia xj en xi (xi:=xj).
acum i j ‍ ‍ ‍ ‍acumula xj en xi (xi:=xi+xj).
subs i j ‍ ‍ ‍ ‍resta xj de xi (xi:=xixj).
prod i j ‍ ‍ ‍ ‍multiplica xi por xj (xi:=xi * xj).
goto ℓ ‍ ‍ ‍ ‍salta a la instrucción de la posición ℓ.
jzer i ℓ ‍ ‍ ‍ ‍salta a la instrucción de la posición ℓ sólo si xi = 0.
jneg i ℓ ‍ ‍ ‍ ‍salta a la instrucción de la posición ℓ sólo si xi < 0.
||

El programa siempre se empieza a ejecutar desde la posición 000. Después de ejecutar la instrucción de una posición p, se pasa a ejecutar la siguiente instrucción (la de la posición p + 1, la cual si se ha de ejecutar siempre existirá), excepto como es lógico con stop, goto, y jzer o jneg cuando las condiciones para saltar son ciertas.

Todas las i y j del programa estarán entre 0 y 99. Todas las ℓ son líneas de programa válidas. Al ejecutar un programa, siempre se encontrará un stop en algún momento.

Entrada

La entrada consiste en un programa correcto en ensamblador, de entre 1 y 1000 líneas. Cada línea empieza con tres dígitos redundantes que indican su número empezando por 000, seguidos de un espacio, y de la instrucción correspondiente a esa línea. Los campos de cada instrucción también están separados por un espacio. Todas las direcciones de salto ℓ tienen exactamente tres dígitos.

Salida

Hay que escribir lo mismo que escribiría el programa en ensamblador.

Pista

Es suficiente con tener una tabla para almacenar las 100 variables, otra tabla para almacenar el programa, y un índice que indica cual es la instrucción que se ha de ejecutar a continuación.

Public test cases
  • Input

    000 prin 0
    001 acum 0 0
    002 prin 0
    003 endl
    004 stor 1 23
    005 prod 0 1
    006 stor 3 -9876
    007 copy 4 3
    008 prin 1
    009 prin 0
    010 prin 3
    011 prin 4
    012 endl
    013 stop
    

    Output

     1 2
     23 46 -9876 -9876
    
  • Input

    000 stor 8 999
    001 goto 003
    002 prin 0
    003 prin 8
    004 endl
    005 stop
    006 prin 0
    007 endl
    008 stop
    009 prin 0
    

    Output

     999
    
  • Input

    000 stor 99 -10
    001 prin 99
    002 acum 99 0
    003 jzer 99 005
    004 goto 001
    005 endl
    006 stop
    

    Output

     -10 -9 -8 -7 -6 -5 -4 -3 -2 -1
    
  • Input

    000 stor 0 95
    001 stor 1 25
    002 prin 0
    003 prin 1
    004 endl
    005 subs 0 1
    006 jzer 0 014
    007 jneg 0 009
    008 goto 002
    009 acum 0 1
    010 copy 2 0
    011 copy 0 1
    012 copy 1 2
    013 goto 002
    014 endl
    015 prin 1
    016 endl
    017 stop
    

    Output

     95 25
     70 25
     45 25
     20 25
     25 20
     5 20
     20 5
     15 5
     10 5
     5 5
    
     5
    
  • Information
    Author
    Omer Giménez
    Language
    Spanish
    Other languages
    English
    Official solutions
    C++
    User solutions
    C++ Haskell