iniciar-programa
define-nueva-instruccion gira-derecha como inicio
   repetir 3 veces gira-izquierda;
fin;

define-nueva-instruccion doble como inicio
   repetir 2 veces gira-izquierda;
fin;

define-nueva-instruccion bloque como inicio
    si frente-bloqueado
       entonces inicio
          gira-derecha;
       fin;
fin;

define-nueva-instruccion recursiva como inicio
    mientras frente-libre
    hacer inicio
       mientras frente-libre hacer inicio
          avanza;
       fin;
       bloque;
       si orientado-al-norte
       entonces inicio
       mientras frente-libre
       hacer avanza;
       doble;
       mientras frente-libre
       hacer avanza;
       doble;
       sal-de-instruccion;
       fin;
       recursiva;
       sal-de-instruccion;
    fin;
    si frente-bloqueado
    entonces inicio
    gira-derecha;
       recursiva;
    fin;
fin;

define-nueva-instruccion x como inicio
   deja-zumbador;
   mientras frente-libre
   hacer inicio
      avanza;
      gira-derecha;
      avanza;
      deja-zumbador;
      mientras no-orientado-al-norte
      hacer inicio gira-izquierda;
      fin;
   fin;
   si frente-bloqueado
   entonces inicio
      doble;
      mientras frente-libre
      hacer inicio avanza;
      fin;
      doble;
   fin;
   deja-zumbador;
   mientras frente-libre
   hacer inicio
      avanza;
      gira-izquierda;
      avanza;
      si no-junto-a-zumbador entonces inicio
      deja-zumbador;
      fin;
      mientras no-orientado-al-norte
      hacer inicio gira-izquierda;
      fin;
   fin;
fin;

define-nueva-instruccion contar como inicio
   si frente-libre
   entonces inicio
      si frente-libre entonces
      inicio avanza;
      fin sino inicio doble;
      fin;

      si frente-libre
      entonces inicio avanza;
      contar;
      avanza;
      fin sino inicio si frente-bloqueado
   entonces doble;
      fin;
   fin;
   si frente-bloqueado
   entonces inicio doble;
   fin;
fin;

define-nueva-instruccion mas1 como inicio
   mientras no-orientado-al-este
   hacer gira-izquierda;

   deja-zumbador;

   mientras frente-libre
   hacer inicio
      avanza;
      si no-junto-a-zumbador
      entonces inicio
      deja-zumbador;
      fin;
   fin;
fin;

define-nueva-instruccion mas2 como inicio
   si frente-bloqueado
   entonces gira-izquierda;

   mientras frente-libre
   hacer avanza;

   gira-izquierda;
   contar;
   gira-derecha;
   deja-zumbador;

   mientras frente-libre
   hacer inicio
      avanza;
      si no-junto-a-zumbador
      entonces inicio
      deja-zumbador;
      fin;
      fin;
fin;

    inicia-ejecucion
    si orientado-al-sur
    entonces inicio doble;
    fin;
      recursiva;
      x;
      mientras no-orientado-al-sur
   hacer gira-izquierda;
      contar;
      mas1;
      mas2;
        apagate;
    termina-ejecucion
finalizar-programa
