iniciar-programa
  define-nueva-instruccion norte como inicio
      mientras no-orientado-al-norte hacer inicio
          gira-izquierda;
      fin;
  fin;
  define-nueva-instruccion oeste como inicio
      mientras no-orientado-al-oeste hacer inicio
          gira-izquierda;
      fin;
  fin;
  define-nueva-instruccion sur como inicio
      mientras no-orientado-al-sur hacer inicio
          gira-izquierda;
      fin;
  fin;
  define-nueva-instruccion este como inicio
      mientras no-orientado-al-este hacer inicio
          gira-izquierda;
      fin;
  fin;
  define-nueva-instruccion al-frente como inicio
      mientras frente-libre hacer inicio
          avanzA;
      fin;
  fin;
  define-nueva-instruccion zum como inicio
      mientras frente-libre y no-junto-a-zumbador hacer inicio
          avanza;
      fin;
  fin;
  define-nueva-instruccion marcar-casas como inicio
      si frente-libre o junto-a-zumbador entonces inicio
          si junto-a-zumbador entonces inicio
              coge-zumbador;
              marcar-casas;
              avanza;
          fin sino inicio
              zum;
              si junto-a-zumbador entonces inicio
                  coge-zumbador;
                  marcar-casas;
                  deja-zumbador;
                  repetir 2 veces gira-izquierda;
                  al-frente;
                  repetir 2 veces gira-izquierda;
              fin sino inicio
                  marcar-casas;
              fin;
          fin;
      fin sino inicio
          repetir 2 veces gira-izquierda;
          al-frente;
          repetir 2 veces gira-izquierda;
      fin;
  fin;
  define-nueva-instruccion espacio-menor(n) como inicio
      si frente-libre o junto-a-zumbador entonces inicio
          si no-junto-a-zumbador entonces inicio
              avanza;
              espacio-menor(sucede(n));
          fin sino inicio
              norte;
              avanzA;
              repetir sucede(n) veces inicio
                  deja-zumbador;
              fin;
              avanzA;
              repetir sucede(n) veces inicio
                  deja-zumbador;
              fin;
              sur;
              al-frente;
              este;
          fin;
      fin;
  fin;
  define-nueva-instruccion espacio(n) como inicio
      oeste;
      al-frente;
      este;
      zum;
      si frente-libre entonces avanza;
      si frente-libre o junto-a-zumbador entonces inicio
          espacio-menor(0);
      fin;
      mientras frente-libre hacer inicio
          si frente-libre entonces avanzA;
          si frente-libre o junto-a-zumbador entonces inicio
              espacio-menor(0);
          fin;
      fin;
  fin;
  define-nueva-instruccion recoge(n) como inicio
      si no-orientado-al-este entonces inicio
          si frente-libre o junto-a-zumbador entonces inicio
              si junto-a-zumbador entonces inicio
                  coge-zumbador;
                  recoge(sucede(n));
              fin;
              si orientado-al-norte entonces inicio
                  sur;
                  avanza;
                  oeste;
              fin;
              zum;
              si no si-es-cero (n) y no-orientado-al-este entonces inicio
                  si junto-a-zumbador entonces inicio
                      repetir n veces inicio
                          si junto-a-zumbador entonces coge-zumbador;
                      fin;
                      si no-junto-a-zumbador entonces inicio
                          norte;
                          avanza;
                          recoge(0);
                      fin sino inicio
                          mientras junto-a-zumbador hacer inicio
                              coge-zumbador;
                          fin;
                          recoge(n);
                      fin;
                  fin sino inicio
                      si no-orientado-al-este y frente-bloqueado entonces inicio
                          sur;
                          al-frente;
                          oeste;
                          al-frente;
                          mientras junto-a-zumbador hacer inicio
                              coge-zumbador;
                          fin;
                          repetir n veces inicio
                              deja-zumbador;
                          fin;
                          este;
                          al-frente;
                          mientras junto-a-zumbador hacer inicio
                              coge-zumbador;
                          fin;
                          repetir n veces inicio
                              deja-zumbador;
                          fin;
                      fin;
                  fin;
              fin sino inicio
                  recoge(n);
              fin;
          fin;
      fin;
  fin;
  define-nueva-instruccion compara como inicio
      este;
      al-frente;
      norte;
      avanza;
      oeste;
      zum;
      recoge(0);
  fin;
    inicia-ejecucion
        este;
        zum;
        si junto-a-zumbador entonces inicio
            coge-zumbador;
            marcar-casas;
            deja-zumbador;
        fin sino inicio
            marcar-casas;
        fin;
        espacio(0);
        norte;
        avanza;
        oeste;
        recoge(0);
        apagate;
    termina-ejecucion

finalizar-programa
