iniciar-programa
define-nueva-instruccion regresa como inicio
repetir 2 veces gira-izquierda;
mientras frente-libre hacer avanza;
repetir 3 veces gira-izquierda;
mientras izquierda-bloqueada hacer avanza;
gira-izquierda;
avanza;
gira-izquierda;
mientras frente-libre hacer avanza;
repetir 3 veces gira-izquierda;
mientras frente-libre hacer avanza;
repetir 2 veces gira-izquierda;
fin;

define-nueva-instruccion salta-barda como inicio
mientras no-orientado-al-norte hacer gira-izquierda;
mientras derecha-bloqueada hacer avanza;
repetir 3 veces gira-izquierda;
avanza;
repetir 3 veces gira-izquierda;
mientras frente-libre hacer avanza;
gira-izquierda;
fin;

define-nueva-instruccion cuenta(n) como inicio
coge-zumbador;
si junto-a-zumbador entonces inicio
cuenta(n);
fin sino inicio
mientras frente-libre hacer avanza;
salta-barda;
repetir n veces avanza;
fin;
deja-zumbador;
fin;

define-nueva-instruccion cuenta-espacios(n) como inicio
si frente-libre y no junto-a-zumbador entonces inicio
avanza;
cuenta-espacios(sucede (n));
fin sino inicio
si frente-bloqueado y no-junto-a-zumbador entonces inicio
apagate;
fin sino inicio
cuenta(n);
regresa;
fin;
fin;                             
fin;


    inicia-ejecucion
    mientras no-orientado-al-este hacer gira-izquierda;
    mientras frente-libre hacer inicio
    cuenta-espacios(0);
    fin;
    si frente-bloqueado entonces inicio
    si junto-a-zumbador entonces inicio
        cuenta-espacios(0);
        fin sino inicio
        apagate;
        fin;
    fin;
        apagate;
    termina-ejecucion
finalizar-programa
