iniciar-programa
define-nueva-instruccion gira-derecha como
inicio
  repetir 3 veces
    gira-izquierda;
fin;
define-nueva-instruccion mira-norte como
inicio
  mientras no-orientado-al-norte hacer
    gira-izquierda;
fin;
define-nueva-instruccion mira-este como
inicio
  mientras no-orientado-al-este hacer
    gira-izquierda;
fin;
define-nueva-instruccion paso-atras como
inicio
  repetir 2 veces
    gira-izquierda;
  avanza;
  repetir 2 veces
    gira-izquierda;
fin;
define-nueva-instruccion mira-sur como
inicio
  mientras no-orientado-al-sur hacer
    gira-izquierda;
fin;
define-nueva-instruccion mira-oeste como
inicio
  mientras no-orientado-al-oeste hacer
    gira-izquierda;
fin;
define-nueva-instruccion camino como
inicio
  si no-junto-a-zumbador entonces
  inicio
    repetir 2 veces
      deja-zumbador;
  fin;
  avanza;
fin;
define-nueva-instruccion largo(n) como
inicio
  si junto-a-zumbador entonces
  inicio
    avanza;
    largo(sucede(N));
    deja-zumbador;
  fin
  sino
  inicio
    paso-atras;
    repetir 2 veces
      gira-izquierda;
    mientras junto-a-zumbador hacer
      avanza;
    paso-atras;
    repetir 2 veces
      gira-izquierdA;
    mientras junto-a-zumbador hacer
    inicio
      repetir n veces
      inicio
        camino;
      fin;
      repetir 2 veces
        gira-izquierda;
      repetir n veces
        avanza;
      gira-izquierda;
      avanza;
      gira-izquierda;
    fin;
    paso-atras;
  fin;
fin;
define-nueva-instruccion ancho como
inicio
  si junto-a-zumbador entonces
  inicio
    avanza;
    ancho;
    deja-zumbador;
  fin
  sino
  inicio
    gira-derecha;
    avanza;
    gira-derecha;
    avanza;
  fin;
fin;
define-nueva-instruccion limpia como
inicio
  mientras junto-a-zumbador hacer
  inicio
    si junto-a-zumbador entonces
    inicio
      coge-zumbador;
      si junto-a-zumbador entonces
        deja-zumbador;
      avanza;
      si no-junto-a-zumbador entonces
      inicio
        repetir 2 veces
        gira-izquierda;
      mientras frente-libre hacer
        avanza;
      paso-atras;
      gira-izquierda;
      avanza;
      mira-este;
      fin;
    fin;

  fin;
fin;
define-nueva-instruccion lleva(n) como
inicio
  si junto-a-zumbador entonces
  inicio
    coge-zumbador;
    lleva(sucede(n));
    deja-zumbador;
    avanza;
  fin
  sino
  inicio
    gira-derecha;
    avanza;
    gira-izquierda;
    avanza;
  fin;
fin;
define-nueva-instruccion busca(x) como
inicio
  si junto-a-zumbador entonces
  inicio
    repetir 2 veces
      coge-zumbador;
    avanza;
    busca(sucede(x));
  fin
  sino
  inicio
    repetir 2 veces
      gira-izquierda;
    repetir x veces
      avanza;
    repetir x veces
      deja-zumbador;
    repetir 2 veces
      gira-izquierda;
   avanza;
  fin;
fin;
define-nueva-instruccion cuenta(n) como
inicio
  mientras junto-a-zumbador hacer
  inicio
    avanza;
    repetir n veces
    inicio
      busca(0);
    fin;
    gira-izquierda;
    avanza;
    gira-izquierda;
    repetir sucede(n) veces
      avanza;
    repetir 2 veces
      gira-izquierdA;
  fin;
fin;
define-nueva-instruccion checa como
inicio
  si junto-a-zumbador entonces
  inicio
    coge-zumbador;
    checa;
    deja-zumbador;
  fin
  sino
    avanza;
fin;
define-nueva-instruccion verifica(n) como
inicio
  repetir n veces
  inicio
    si junto-a-zumbador entonces
    inicio
      coge-zumbador;
    fin
    sino
    inicio
      mira-norte;
    fin;
  fin;
  si orientado-al-norte y no-junto-a-zumbador entonces
  inicio
    repetir n veces
      deja-zumbador;
  fin
  sino
  inicio
    repetir n veces
      deja-zumbador;
  fin;
fin;
define-nueva-instruccion mueve como
inicio
  si junto-a-zumbador entonces
  inicio
    coge-zumbador;
    mueve;
    deja-zumbador;
  fin
  sino
    avanza;
fin;
define-nueva-instruccion mayor(h) como
inicio
  si junto-a-zumbador entonces
  inicio
    coge-zumbador;
    mayor(sucede(h));
  fin
  sino
  inicio
    avanza;
    repetir h veces
    inicio
      si junto-a-zumbador entonces
        coge-zumbador;
    fin;
    repetir h veces
      deja-zumbador;
  fin;
fin;
define-nueva-instruccion vertical(m) como
inicio
  si no(si-es-cero(m)) entonces
  inicio
    si frente-libre entonces
    inicio
      avanza;
      vertical(m);
      avanza;
    fin
    sino
    inicio
      deja-zumbador;
      mira-norte;
    fin;
  fin
  sino
  inicio
     si frente-libre entonces
    inicio
      avanza;
      vertical(m);
      avanza;
    fin
    sino
    inicio
      mira-este;
      avanza;
      si junto-a-zumbador entonces
      inicio
        paso-atras;
        mayor(0);
        paso-atras;
      fin
      sino
      inicio
        paso-atras;
        mueve;
        paso-atras;
      fin;
      mira-norte;
    fin;
  fin;
fin;
define-nueva-instruccion horizontal(m) como
inicio

    si frente-libre entonces
    inicio
      avanza;
      horizontal(m);
      avanza;
    fin
    sino
    inicio
      mira-sur;
      vertical(m);
      mira-este;
    fin;

fin;
define-nueva-instruccion gira(m) como
inicio
  si no-orientado-al-oeste entonces
  inicio
    gira-izquierda;
    gira(m);
    gira-derecha;
  fin
  sino
  inicio
    horizontal(m);
    mira-oeste;
  fin;
fin;
define-nueva-instruccion explora como
inicio
  si frente-libre entonces
  inicio
    avanza;
    si junto-a-zumbador entonces
    inicio
    coge-zumbador;
    si no-junto-a-zumbador entonces
    inicio
      deja-zumbador;
      paso-atras;
    fin
    sino
    inicio
      coge-zumbador;
      gira(1);
      explora;
      paso-atras;
    fin;
    fin
    sino
    inicio
      paso-atras;
    fin;
  fin;
  si izquierda-libre entonces
  inicio
    gira-izquierda;
    avanza;
    si junto-a-zumbador entonces
    inicio
      coge-zumbador;
      si no-junto-a-zumbador entonces
      inicio
        deja-zumbador;
        paso-atras;
        gira-derecha;
      fin
      sino
      inicio
        coge-zumbador;
        gira(1);
        explora;
        paso-atras;
        gira-derecha;
      fin;
    fin
    sino
    inicio
      paso-atras;
      gira-derecha;
    fin;
  fin;
  si derecha-libre entonces
  inicio
    gira-derecha;
    avanza;
    si junto-a-zumbador entonces
    inicio
      coge-zumbador;
      si no-junto-a-zumbador entonces
      inicio
        deja-zumbador;
        paso-atras;
        gira-izquierda;
      fin
      sino
      inicio
        coge-zumbador;
        gira(1);
        explora;
        paso-atras;
        gira-izquierda;
      fin;
    fin
    sino
    inicio
      paso-atras;
      gira-izquierda;
    fin;
  fin;
fin;
define-nueva-instruccion repet(n) como
inicio
  si junto-a-zumbador entonces
  inicio
    coge-zumbador;
    repet(sucede(n));
  fin
  sino
  inicio
    mira-norte;
    repetir 2 veces
      avanza;
    gira-derecha;
    avanza;
    mientras junto-a-zumbador hacer
    inicio
      avanza;
      repetir n veces
      inicio
       si junto-a-zumbador entonces
       inicio
        explora;
        si junto-a-zumbador entonces
        inicio
           repetir 2 veces
             coge-zumbador;
           gira(1);
        fin;
       mira-oeste;
       horizontal(0);
       mira-este;
       fin;
       si frente-libre entonces
       inicio
         avanza;
       fin;
      fin;
      mira-oeste;
      mientras no-junto-a-zumbador hacer
        avanza;
      coge-zumbador;
      gira-derecha;
      avanza;
      gira-derecha;
    fin;
  fin;
fin;
   inicia-ejecucion
    avanza;
    gira-derecha;
    avanza;
    gira-izquierda;
    mientras junto-a-zumbador y frente-libre hacer
      avanza;
    si no-junto-a-zumbador entonces
      paso-atras;
     gira-derecha;
     largo(0);
     avanza;
     gira-izquierda;
     avanzA;
     mientras junto-a-zumbador y frente-libre hacer
       avanza;
     si no-junto-a-zumbador entonces
       paso-atras;
       mira-sur;
     ancho;
     gira-derecha;
     avanza;
     gira-izquierda;
     mientras junto-a-zumbador hacer
       avanza;
     si no-junto-a-zumbador entonces
       paso-atras;
     mira-este;
     limpia;
     repetir 2 veces
       gira-izquierda;
     avanza;
     gira-derecha;
     repetir 2 veces
         coge-zumbador;
       avanzA;
     repetir 2 veces
       coge-zumbador;
     lleva(0);
     mira-sur;
     mientras frente-libre hacer
       avanza;
     gira-derecha;
     avanza;
     repet(0);
     mira-sur;
     mientras frente-libre hacer
       avanza;
     mira-oeste;
     mueve;
       apagate;
    termina-ejecucion
finalizar-programa
