iniciar-programa
define-nueva-instruccion regresa como
inicio
  coge-zumbador;
  si junto-a-zumbador entonces
  inicio
    coge-zumbador;
    si junto-a-zumbador entonces
    inicio
       coge-zumbador;
       si junto-a-zumbador entonces
       inicio
          coge-zumbador;
          mientras no orientado-al-oeste hacer
         gira-izquierda;
         mientras frente-libre hacer
            avanza;
         repetir 2 veces
            gira-izquierda;
       fin
       sino
       inicio
          mientras no-orientado-al-oeste hacer
             gira-izquierda;
          avanza;
          regresa;
          repetir 3 veces
            deja-zumbador;
          si frente-libre entonces
             avanza;
       fin;
    fin
    sino
    inicio
       mientras no-orientado-al-sur hacer
         gira-izquierda;
       avanza;
       regresa;
       repetir 2 veces
         deja-zumbador;
        si frente-libre entonces
     avanza;
    fin;
 fin
 sino
 inicio
     mientras no-orientado-al-este hacer
        gira-izquierda;
     avanza;
     regresa;
     deja-zumbador;
     si frente-libre entonces
     avanza;
  fin;
fin;
define-nueva-instruccion pon como
inicio
   si orientado-al-oeste entonces
      deja-zumbador
   sino
   si orientado-al-norte entonces
   inicio
     repetir 2 veces
        deja-zumbador;
   fin
   sino
   si orientado-al-este entonces
   inicio
     repetir 3 veces
        deja-zumbador;
   fin
fin;
   define-nueva-instruccion busca(n) como
   inicio
      repetir 4 veces
      inicio
         si frente-libre y no-orientado-al-sur entonces
         inicio
            avanza;
            si no-junto-a-zumbador entonces
            inicio
               pon;
               si no si-es-cero(n) entonces
                   busca(precede(n));
                mientras junto-a-zumbador hacer
                     coge-zumbador;
            fin;
            gira-izquierda;
            gira-izquierda;
            avanza;
            gira-izquierda;
            gira-izquierda;
         fin
         sino
            si frente-bloqueado y orientado-al-norte entonces
            inicio
               regresa;
               apagate;
            fin;
         gira-izquierda;
      fin;

   fin;
   define-nueva-instruccion mide(n) como
   inicio
      si frente-libre entonces
      inicio
         avanza;
         mide(sucede(n));
      fin
      sino
      inicio
         gira-izquierda;
         gira-izquierda;
         mientras no-junto-a-zumbador hacer
            avanza;
         coge-zumbador;
         repetir 3 veces
            gira-izquierda;
         repetir 4 veces
            deja-zumbador;
         busca(n);
      fin;
   fin;
    inicia-ejecucion
        deja-zumbador;
        mientras no orientado-al-oeste hacer
            gira-izquierda;
        mientras frente-libre hacer
           avanza;
        repetir 2 veces
           gira-izquierda;
        mide(1);
        apagate;
    termina-ejecucion
finalizar-programa
