iniciar-programa
define-nueva-instruccion media-vuelta como
inicio
      repetir 2 veces
      gira-izquierda;
      fin;
define-nueva-instruccion gira-derecha como
inicio
      repetir 3 veces
      gira-izquierda;
      fin;
define-nueva-instruccion pasar como
inicio
      si frente-bloqueado y ningun-zumbador-en-la-mochila y orientado-al-este entonces
      inicio
            apagate;
            fin;
    mientras orientado-al-norte y no-junto-a-zumbador hacer
    inicio
          gira-derecha;
          fin;
    mientras frente-libre y no junto-a-zumbador y orientado-al-este hacer
    inicio
          avanza;
          fin;
    mientras junto-a-zumbador y orientado-al-este hacer
    inicio
          coge-zumbador;
          fin;
    mientras derecha-bloqueada y frente-libre hacer
    inicio
          avanza;
    mientras frente-bloqueado y izquierda-libre y algun-zumbador-en-la-mochila
    y orientado-al-este hacer
    inicio
          gira-izquierda;
          fin;
          fin;
    mientras frente-bloqueado y izquierda-libre y algun-zumbador-en-la-mochila
    y orientado-al-este hacer
    inicio
          gira-izquierda;
          fin;
    mientras derecha-libre y orientado-al-norte y no-junto-a-zumbador hacer
    inicio
          gira-derecha;
          avanza;
          gira-derecha;
          fin;
    mientras orientado-al-sur y frente-libre hacer
    inicio
          avanza;
          fin;
    si orientado-al-sur y frente-bloqueado entonces
    inicio
          gira-izquierda;
          fin;
    mientras junto-a-zumbador y orientado-al-este hacer
    inicio
          avanza;
          fin;
    mientras algun-zumbador-en-la-mochila y orientado-al-este y frente-libre hacer
    inicio
          deja-zumbador;
          fin;
    si junto-a-zumbador y orientado-al-este entonces
    inicio
          media-vuelta;
    si frente-bloqueado y orientado-al-oeste entonces
    inicio
          gira-derecha;
    mientras orientado-al-oeste y junto-a-zumbador y frente-libre hacer
    inicio
          avanza;
          fin;
          fin;
          fin;
    mientras orientado-al-norte y izquierda-bloqueada hacer
    inicio
          avanza;
          fin;
    si izquierda-libre y orientado-al-norte entonces
    inicio
          gira-izquierda;
          avanza;
          gira-izquierda;
          fin;
    mientras orientado-al-sur y frente-libre hacer
    inicio
          avanza;
          fin;
    si frente-bloqueado y orientado-al-sur y izquierda-bloqueada entonces
    inicio
          gira-derecha;
          fin;
    mientras orientado-al-oeste y frente-libre hacer
    inicio
          avanza;
          fin;
    si orientado-al-oeste y frente-bloqueado entonces
    inicio
          gira-derecha;
          fin;
          pasar;
          fin;
  inicia-ejecucion
  pasar;


        apagate;
    termina-ejecucion
finalizar-programa
