iniciar-programa
  define-nueva-instruccion gd como
  repetir 3 veces gira-izquierda;
  define-nueva-instruccion mv como
  repetir 2 veces gira-izquierda;
  define-nueva-instruccion pasa como
  inicio
  si frente-libre entonces avanza
  sino
  inicio
   mv;
   mientras frente-libre hacer avanza;
   gira-izquierda;
   avanza;
   gira-izquierda;
  fin;
  fin;
  define-nueva-instruccion barre-oeste(N) como
  inicio
   si no(frente-bloqueado y derecha-bloqueada) entonces
   inicio
    si junto-a-zumbador entonces
    inicio
     gira-izquierda;
     si frente-libre entonces
     inicio
      avanza;
      si no junto-a-zumbador entonces
      inicio
       mv;
       avanza;
       gira-izquierda;
       pasa;
       barre-oeste(sucede(N))
      fin
      sino
      inicio
       mv;
       avanza;
       gira-izquierda;
       pasa;
       barre-oeste(N);
      fin;
     fin
     sino
     inicio
     gd;
     pasa;
     barre-oeste(N);
     fin;
    fin
    sino
    inicio
     pasa;
     barre-oeste(N);
    fin;
   fin
   sino
   inicio
   mv;
   mientras frente-libre hacer avanza;
   gd;
   mientras frente-libre hacer avanza;
   gd;
   mientras junto-a-zumbador hacer coge-zumbador;
   repetir N veces deja-zumbador;
   fin;
  fin;
  define-nueva-instruccion barre-sur(N) como
  inicio
    si no(frente-bloqueado y derecha-bloqueada) entonces
   inicio
    si junto-a-zumbador entonces
    inicio
     mv;
     si frente-libre entonces
     inicio
      avanza;
      si no junto-a-zumbador entonces
      inicio
       mv;
       avanza;
       pasa;
       barre-sur(sucede(N))
      fin
      sino
      inicio
       mv;
       avanza;
       pasa;
       barre-sur(N);
      fin;
     fin
     sino
     inicio
     mv;
     pasa;
     barre-sur(N);
     fin;
    fin
    sino
    inicio
     pasa;
     barre-sur(N);
    fin;
   fin
   sino
   inicio
   si junto-a-zumbador entonces
   inicio
   mv;
   si frente-libre entonces avanza;
   si no-junto-a-zumbador entonces
   inicio
   mientras frente-libre hacer avanza;
   gd;
   mientras frente-libre hacer avanza;
   gd;
   barre-oeste(sucede(N));
   fin
   sino
   inicio
   mientras frente-libre hacer avanza;
   gd;
   mientras frente-libre hacer avanza;
   gd;
   barre-oeste(N);
   fin;
   fin
   sino
   inicio
   mv;
   mientras frente-libre hacer avanza;
   gd;
   mientras frente-libre hacer avanza;
   gd;
   barre-oeste(N);
   fin;
   fin;
  fin;
  define-nueva-instruccion barre-este(N) como
  inicio
   si no(frente-bloqueado y derecha-bloqueada) entonces
   inicio
    si junto-a-zumbador entonces
    inicio
     gd;
     si frente-libre entonces
     inicio
      avanza;
      si no junto-a-zumbador entonces
      inicio
       mv;
       avanza;
       gd;
       pasa;
       barre-este(sucede(N))
      fin
      sino
      inicio
       mv;
       avanza;
       gd;
       pasa;
       barre-este(N);
      fin;
     fin
     sino
     inicio
     gira-izquierda;
     pasa;
     barre-este(N);
     fin;
    fin
    sino
    inicio
     pasa;
     barre-este(N);
    fin;
   fin
   sino
   inicio
   mv;
   mientras frente-libre hacer avanza;
   gd;
   mientras frente-libre hacer avanza;
   gd;
   barre-sur(N);
   fin;
  fin;
  define-nueva-instruccion barre-norte(N) como
  inicio
   si no(frente-bloqueado y derecha-bloqueada) entonces
   inicio
    si junto-a-zumbador entonces
    inicio
     si frente-libre entonces
     inicio
      avanza;
      si no junto-a-zumbador entonces
      barre-norte(sucede(N))
      sino
      barre-norte(N);
     fin
     sino
     inicio
     pasa;
     barre-norte(N);
     fin;
    fin
    sino
    inicio
     pasa;
     barre-norte(N);
    fin;
   fin
   sino
   inicio
   mv;
   mientras frente-libre hacer avanza;
   gd;
   mientras frente-libre hacer avanza;
   gd;
   barre-este(N);
   fin;
  fin;
    inicia-ejecucion
      mientras no orientado-al-sur hacer gira-izquierda;
      repetir 2 veces
      inicio
      mientras frente-libre hacer avanza;
      gd;
      fin;
      barre-norte(0);
        apagate;
    termina-ejecucion
finalizar-programa
