iniciar-programa
define-nueva-instruccion gira(n) como
inicio
repetir n veces
gira-izquierda;
fin;
define-nueva-instruccion deja-si-es-cero(n) como
inicio
si si-es-cero(n) entonces
inicio
mientras no-orientado-al-sur hacer
gira(1);
mientras frente-libre hacer avanza;
gira(2);
apagate;
fin;
fin;

define-nueva-instruccion elm(n) como
inicio
    repetir n veces
    inicio

        si frente-bloqueado y orientado-al-este y izquierda-bloqueada entonces
        inicio
        gira(3);
        mientras frente-libre hacer avanza;
        gira(1);
        fin;
        si frente-bloqueado y orientado-al-oeste y derecha-bloqueada entonces
        inicio
        gira(1);
        mientras frente-libre  y derecha-bloqueada hacer avanza;
        gira(3);
        fin;
        si frente-bloqueado y orientado-al-este y derecha-bloqueada entonces
        inicio
        gira(1);
        mientras frente-libre hacer avanza;
        gira(3);
        fin;
        si frente-bloqueado y orientado-al-oeste y izquierda-bloqueada entonces
        inicio
        gira(3);
        mientras frente-libre hacer avanza;
        gira(1);
        fin;
        si frente-libre entonces
        avanza;
    fin;

gira(2);

deja-si-es-cero(n);
elm(precede(n)) ;

deja-zumbador;

fin;

define-nueva-instruccion cuenta(n) como
inicio
si frente-libre  y orientado-al-este entonces
inicio
avanza;
cuenta(sucede(n));
fin;
si izquierda-libre y frente-bloqueado entonces
inicio
gira(1);
mientras frente-libre hacer avanza;
si frente-bloqueado entonces gira(3);
si frente-libre entonces
avanza;
cuenta(sucede(n));
fin;
si frente-bloqueado y derecha-libre entonces
inicio
gira(3);
mientras izquierda-bloqueada y frente-libre hacer
avanza;
gira(1);
si frente-libre entonces
inicio
cuenta(n);
fin
sino
inicio
gira(2);
elm(n);
fin;
fin;


si frente-bloqueado y izquierda-bloqueada y derecha-bloqueada entonces
inicio
gira(2);
elm(n);
fin;
fin;


    inicia-ejecucion
    mientras no-orientado-al-este hacer gira(1);
   cuenta(0);
        apagate;
    termina-ejecucion
finalizar-programa
