iniciar-programa
define-nueva-instruccion corta-vigas como
inicio
si frente-libre entonces
inicio
si junto-a-zumbador entonces
coge-zumbador;
avanza;
si junto-a-zumbador entonces
coge-zumbador;
corta-vigas;
si frente-libre entonces avanza;
si junto-a-zumbador entonces
coge-zumbador;
fin
sino
inicio
mientras no-orientado-al-norte hacer
gira-izquierda;
fin;
fin;
define-nueva-instruccion revisa-vigas como
inicio
 mientras frente-libre hacer
 inicio
mientras no orientado-al-oeste hacer
gira-izquierda;
si frente-libre entonces
avanza;
mientras no-junto-a-zumbador y frente-libre hacer
 avanza;
    si junto-a-zumbador entonces
     inicio
     mientras no-orientado-al-norte hacer
     gira-izquierda;
     si frente-libre entonces
     inicio
      avanza;
      si no-junto-a-zumbador entonces
        inicio
         mientras no-orientado-al-sur hacer
         gira-izquierda;
         avanza;
         si frente-libre entonces
          inicio
          corta-vigas;
          fin
          sino
          inicio
          coge-zumbador;
          fin;
          mientras no-orientado-al-oeste hacer
          gira-izquierda;
         fin
         sino
         inicio
         mientras no-orientado-al-sur hacer
         gira-izquierda;
         avanza;
        fin;
        fin;
        si frente-bloqueado entonces
        inicio
        mientras no-orientado-al-sur hacer
        gira-izquierda;
        corta-vigas;
        fin;
        fin;
        mientras no-orientado-al-oeste hacer
        gira-izquierda;
        fin;
mientras no-orientado-al-sur hacer
gira-izquierda;
mientras frente-libre hacer
avanza;
mientras no-orientado-al-oeste hacer
gira-izquierda;
fin;
define-nueva-instruccion revisa-altura como
inicio
mientras no-orientado-al-norte hacer
gira-izquierda;
mientras junto-a-zumbador y frente-libre hacer
avanza;
si frente-bloqueado y junto-a-zumbador entonces
inicio
mientras no-orientado-al-oeste hacer
gira-izquierda;
fin
sino
inicio
mientras no-orientado-al-sur hacer
gira-izquierda;
si frente-libre entonces
avanza;
fin;
mientras no-orientado-al-oeste hacer
gira-izquierda;
si junto-a-zumbador entonces
inicio
revisa-vigas;
fin
sino
inicio
mientras no-orientado-al-oeste hacer
gira-izquierda;
mientras frente-libre hacer
avanza;
mientras no-orientado-al-este hacer
gira-izquierda;
fin;
fin;

define-nueva-instruccion cuenta(n) como
si frente-libre entonces
inicio
avanza;
cuenta(sucede(n));
mientras no-orientado-al-este hacer
gira-izquierda;
repetir  n veces
avanza;
revisa-altura;
fin;
define-nueva-instruccion cuenta-vigas como
inicio
    si junto-a-zumbador y frente-libre entonces
    inicio
    coge-zumbador;
    avanza;
    cuenta-vigas;
    deja-zumbador;
    fin;
    si no-junto-a-zumbador y frente-libre entonces
    inicio
    avanza;
    cuenta-vigas;
    fin;
fin;
    define-nueva-instruccion esparce como inicio
    si junto-a-zumbador entonces inicio
    coge-zumbador;
    esparce;
    deja-zumbador;
    si frente-libre entonces avanza;
    fin sino
    inicio
    gira-izquierda;
    fin;
    fin;
    define-nueva-instruccion regresa como inicio
    repetir 2 veces gira-izquierda;
    mientras frente-libre hacer inicio
    avanza;
    fin;
    gira-izquierda;
    si frente-libre entonces inicio
    avanza;
    fin;
    fin;
    define-nueva-instruccion deposita como inicio
    si junto-a-zumbador entonces inicio
    coge-zumbador;
    deposita;
    deja-zumbador;
    fin sino
    inicio
    mientras no-orientado-al-oeste hacer inicio
    gira-izquierda;
    fin;
    mientras frente-libre hacer inicio
    avanza;
    fin;
    fin;
    fin;
    inicia-ejecucion
    mientras no-orientado-al-oeste hacer
    gira-izquierda;
    mientras frente-libre hacer
    avanza;
    mientras no-orientado-al-este hacer
    gira-izquierda;
    mientras frente-libre hacer inicio
    esparce;
    regresa;
    mientras frente-libre y no-junto-a-zumbador hacer inicio
    avanza;
    fin;
    fin;
    si frente-bloqueado y junto-a-zumbador entonces inicio
    esparce;
    regresa;
    mientras frente-libre y no-junto-a-zumbador hacer inicio
    avanza;
    fin;
    fin;
    mientras frente-libre hacer inicio
    avanza;
    fin;
    repetir 2 veces gira-izquierda;
    mientras no-junto-a-zumbador hacer inicio
    avanza;
    fin;
    repetir 2 veces gira-izquierda;
    si frente-libre entonces inicio
    avanza;
    fin;
    repetir 2 veces gira-izquierda;
    cuenta(0);
    mientras no-orientado-al-este hacer inicio
    gira-izquierda;
    fin;
    mientras frente-libre hacer inicio
    avanza;
    fin;
    si junto-a-zumbador entonces inicio
    revisa-altura;
    fin;
    mientras frente-bloqueado hacer inicio
    repetir 2 veces gira-izquierda;
    fin;
    cuenta-vigas;
    deposita;
         apagate;
    termina-ejecucion
finalizar-programa
