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 divide como
inicio
      si frente-libre entonces
      inicio
            avanza;
      si frente-libre entonces
      inicio
            avanza;
            fin;
      si frente-libre entonces
      inicio
            divide;
            fin
      sino inicio
            media-vuelta;
            fin;
      si orientado-al-oeste entonces
      inicio
            avanza;
            fin;
            fin;
            fin;
define-nueva-instruccion doble como
inicio
      mientras derecha-bloqueada y orientado-al-este y frente-libre hacer
      inicio
            avanza;
            fin;
      si frente-bloqueado y derecha-bloqueada entonces
      inicio
            apagate;
            fin;
      si derecha-libre y orientado-al-este entonces
      inicio
            gira-derecha;
            avanza;
      si orientado-al-sur y derecha-bloqueada y izquierda-bloqueada entonces
      inicio
            gira-izquierda;
            fin;
            fin;
            fin;
define-nueva-instruccion autopista como
inicio
      si orientado-al-sur y derecha-libre entonces
      inicio
            gira-derecha;
            fin;
      mientras orientado-al-este y frente-libre hacer
      inicio
            divide;
      si orientado-al-oeste y frente-libre entonces
      inicio
           deja-zumbador;
           fin;
           fin;
      mientras orientado-al-oeste y frente-libre hacer
      inicio
            avanza;
      si frente-bloqueado y orientado-al-oeste y izquierda-libre entonces
      inicio
            gira-izquierda;
            avanza;
      si derecha-bloqueada y orientado-al-sur entonces
      inicio
            gira-izquierda;
            fin;
            fin;
            fin;
      si frente-bloqueado y orientado-al-este entonces
      inicio
            gira-derecha;
      si orientado-al-sur y derecha-libre entonces
      inicio
            gira-derecha;
            fin;
      mientras orientado-al-oeste y frente-libre hacer
      inicio
            avanza;
      si frente-bloqueado y derecha-bloqueada entonces
      inicio
            media-vuelta;
            fin;
            fin;
      si orientado-al-sur y derecha-bloqueada y izquierda-bloqueada
      y frente-bloqueado entonces
      inicio
            deja-zumbador;
            apagate;
            fin;
      si orientado-al-sur y derecha-bloqueada y izquierda-bloqueada
      y frente-libre entonces
      inicio
            deja-zumbador;
            avanza;
            gira-izquierda;
            fin;
            fin;
      mientras orientado-al-oeste y frente-libre hacer
      inicio
            avanza;
      si frente-bloqueado y orientado-al-oeste y derecha-bloqueada
      y izquierda-libre entonces
      inicio
            media-vuelta;
            fin;
            fin;
      si frente-bloqueado y orientado-al-oeste y izquierda-bloqueada entonces
      inicio
            media-vuelta;
            doble;
            fin;
      si frente-bloqueado y orientado-al-oeste y izquierda-libre entonces
      inicio
            gira-izquierda;
            avanza;
            fin;
      si derecha-bloqueada y izquierda-libre y orientado-al-sur entonces
      inicio
            gira-izquierda;
            fin;
      si derecha-libre y orientado-al-sur entonces
      inicio
            gira-derecha;
      mientras orientado-al-oeste y frente-libre hacer
      inicio
            avanza;
      si frente-bloqueado y orientado-al-oeste entonces
      inicio
            media-vuelta;
            fin;
            fin;
            fin;
            autopista;
            fin;




    inicia-ejecucion
     si orientado-al-sur y derecha-bloqueada y izquierda-bloqueada
      y frente-libre entonces
      inicio
            deja-zumbador;
            avanza;
            gira-izquierda;
            fin;
    si orientado-al-sur y derecha-libre y izquierda-libre entonces
    inicio
          gira-derecha;
          fin;
    si orientado-al-este entonces
    inicio
          media-vuelta;
          fin;
    si orientado-al-este y frente-bloqueado entonces
    inicio
          media-vuelta;
          fin;
    si orientado-al-sur y izquierda-libre entonces
    inicio
          gira-izquierda;
          fin;
    si orientado-al-norte entonces
    inicio
          gira-izquierda;
          fin;
    si orientado-al-sur y derecha-libre entonces
    inicio
          gira-derecha;
          fin;
    mientras orientado-al-oeste y frente-libre hacer
    inicio
          avanza;
          fin;
    si orientado-al-oeste entonces
    inicio
          media-vuelta;
          fin;


          autopista;



        apagate;
    termina-ejecucion
finalizar-programa
