iniciar-programa
define-nueva-instruccion ter(x) como
inicio
      si frente-libre entonces avanza;
      si frente-libre entonces ter(sucede(x));
      si frente-bloqueado y orientado-al-este entonces
      inicio
            gira-izquierda;
            mientras derecha-bloqueada y frente-libre hacer avanza;
            repetir 3 veces gira-izquierda;
            si frente-libre entonces avanza;
            repetir 3 veces gira-izquierda;
            mientras frente-libre hacer avanza;
            repetir 2 veces gira-izquierda;
            si frente-libre entonces avanza;
            repetir 3 veces gira-izquierda;
            repetir x veces si frente-libre entonces avanza;
            repetir 2 veces gira-izquierda;
            mientras no junto-a-zumbador y frente-libre hacer avanza;
            mientras junto-a-zumbador hacer
            inicio
                  mientras junto-a-zumbador hacer
                  inicio
                  coge-zumbador;
                  gira-izquierda;
                  si frente-libre entonces avanza;
                  deja-zumbador;
                  repetir 2 veces gira-izquierda;
                  si frente-libre entonces avanza;
                  gira-izquierda;
                  fin;
                  mientras no junto-a-zumbador y frente-libre hacer avanza;
                  si frente-bloqueado y no junto-a-zumbador entonces gira-izquierda;
            fin;
      fin;
fin;
define-nueva-instruccion read2(x) como
inicio
      coge-zumbador;
      si junto-a-zumbador entonces read2(sucede(x));
      si orientado-al-este entonces
      inicio
       mientras frente-libre hacer avanza;
      gira-izquierda;
      mientras derecha-bloqueada hacer avanza;
      repetir 3 veces gira-izquierda;
      si frente-libre entonces avanza;
      repetir 3 veces gira-izquierda;
      mientras frente-libre hacer avanza;
      gira-izquierda;
      mientras no junto-a-zumbador hacer avanza;
      gira-izquierda;
      si frente-libre entonces avanza;
      repetir x veces deja-zumbador;
      repetir 2 veces gira-izquierda;
      si frente-libre entonces avanza;
      mientras junto-a-zumbador hacer coge-zumbador;
      repetir 3 veces gira-izquierda;
       mientras frente-libre hacer avanza;
      repetir 3 veces gira-izquierda;
      mientras izquierda-bloqueada hacer avanza;
      gira-izquierda;
      si frente-libre entonces avanza;
      gira-izquierda;
      mientras frente-libre hacer avanza;
      repetir 3 veces gira-izquierda;
      mientras frente-libre hacer avanza;
      gira-izquierda;
      fin;
fin;
define-nueva-instruccion read(x) como
inicio
si junto-a-zumbador entonces
inicio
      mientras frente-libre hacer avanza;
      gira-izquierda;
      mientras derecha-bloqueada hacer avanza;
      repetir 3 veces gira-izquierda;
      si frente-libre entonces avanza;
      repetir 3 veces gira-izquierda;
      mientras frente-libre hacer avanza;
      deja-zumbador;
      repetir 2 veces gira-izquierda;
       mientras izquierda-bloqueada hacer avanza;
      gira-izquierda;
      si frente-libre entonces avanza;
      gira-izquierda;
      mientras frente-libre hacer avanza;
      repetir 3 veces gira-izquierda;
      mientras frente-libre hacer avanza;
      gira-izquierda;
fin
      sino
      inicio
      si no junto-a-zumbador y frente-libre  entonces avanza;
      si no junto-a-zumbador y frente-libre  entonces read(sucede(x));
      si orientado-al-este y junto-a-zumbador entonces
      inicio
      mientras frente-libre hacer avanza;
      gira-izquierda;
      mientras derecha-bloqueada hacer avanza;
      repetir 3 veces gira-izquierda;
      si frente-libre entonces avanza;
      repetir 3 veces gira-izquierda;
      mientras frente-libre hacer avanza;
      gira-izquierda;
      repetir x veces si frente-libre entonces avanza;
      deja-zumbador;
      repetir 2 veces gira-izquierda;
      fin;
      si orientado-al-oeste y junto-a-zumbador entonces
      inicio
      mientras frente-libre hacer avanza;
      repetir 3 veces gira-izquierda;
      mientras izquierda-bloqueada hacer avanza;
      gira-izquierda;
      si frente-libre entonces avanza;
      gira-izquierda;
      mientras frente-libre hacer avanza;
      repetir 3 veces gira-izquierda;
      mientras frente-libre hacer avanza;
      gira-izquierda;
      fin;
fin;
fin;

    inicia-ejecucion
    mientras no orientado-al-este hacer gira-izquierda;
    mientras frente-libre o junto-a-zumbador hacer
    inicio
         si frente-libre o junto-a-zumbador entonces read(1);
         si orientado-al-sur entonces
         inicio
         gira-izquierda;
         mientras no junto-a-zumbador y frente-libre hacer avanza;
         si junto-a-zumbador entonces read2(1);
          mientras no orientado-al-este hacer gira-izquierda;
          fin;
    fin;
    repetir 2 veces gira-izquierda;
    mientras frente-libre hacer avanza;
    repetir 2 veces gira-izquierda;
    ter(1);
        apagate;
    termina-ejecucion
finalizar-programa
