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 ve-1-1 como inicio
      sur;
      al-frente;
      oeste;
      al-frente;
  fin;
  define-nueva-instruccion toma como inicio
      mientras junto-a-zumbador hacer inicio
          coge-zumbador;
      fin;
  fin;
  define-nueva-instruccion copia(n) como inicio
      si junto-a-zumbador entonces inicio
          coge-zumbador;
          copia(sucede(n));
      fin sino inicio
          repetir n veces inicio
              deja-zumbador;
          fin;
          este;
          avanza;
          avanza;
          avanza;
          repetir n veces inicio
              deja-zumbador;
          fin;
      fin;
  fin;
  define-nueva-instruccion recupera como inicio
      si junto-a-zumbador entonces inicio
          coge-zumbador;
          recupera;
          deja-zumbador;
      fin sino inicio
          oeste;
          repetir 3 veces avanzA;
      fin;
  fin;
  define-nueva-instruccion subelo como inicio
      si junto-a-zumbador entonces inicio
          coge-zumbador;
          subelo;
          deja-zumbador;
      fin sino inicio
          norte;
          avanza;
      fin;
  fin;
  define-nueva-instruccion divide(n) como inicio
      si junto-a-zumbador entonces inicio
          repetir precede(n) veces inicio
              si junto-a-zumbador entonces coge-zumbador;
          fin;
          si junto-a-zumbador entonces inicio
              coge-zumbador;
              norte;
              avanza;
              deja-zumbador;
              sur;
              avanza;
              este;
              divide(n);
          fin sino inicio
              divide(n);
              deja-zumbador;
          fin;
      fin;
  fin;
  define-nueva-instruccion mcm(n) como inicio
      copia(0);
      oeste;
      avanza;
      avanza;
      copia(0);
      oeste;
      al-frente;
      este;
      si junto-a-zumbador entonces coge-zumbador;
      si junto-a-zumbador entonces inicio
          deja-zumbador;
              divide(n);
              si no-junto-a-zumbador entonces inicio
                  este;
                  avanza;
                  divide(n);
                  si no-junto-a-zumbador entonces inicio
                      este;
                      avanza;
                      repetir n veces deja-zumbador;
                      norte;
                      avanza;
                      oeste;
                      al-frente;
                      este;
                      mcm(n);
                  fin sino inicio
                      toma;
                      norte;
                      avanza;
                      toma;
                      sur;
                      avanza;
                      este;
                      repetir 3 veces avanza;
                      recupera;
                      este;
                      avanza;
                      repetir n veces deja-zumbador;
                      oeste;
                      avanza;
                      subelo;
                      oeste;
                      al-frente;
                      este;
                      mcm(n);
                  fin;
              fin sino inicio
                  este;
                  avanza;
                  divide(n);
                  si no-junto-a-zumbador entonces inicio
                      oeste;
                      avanza;
                      este;
                      toma;
                      norte;
                      avanza;
                      toma;
                      sur;
                      avanza;
                      este;
                      repetir 3 veces avanza;
                      recupera;
                      subelo;
                      sur;
                      avanza;
                      este;
                      avanza;
                      avanza;
                      repetir n veces deja-zumbador;
                      norte;
                      avanza;
                      oeste;
                      al-frente;
                      este;
                      mcm(n);
                  fin sino inicio
                      oeste;
                      avanza;
                      toma;
                      norte;
                      avanza;
                      toma;
                      sur;
                      avanza;
                      este;
                      repetir 3 veces avanza;
                      recupera;
                      este;
                      avanza;
                      toma;
                      norte;
                      avanza;
                      toma;
                      sur;
                      avanza;
                      este;
                      repetir 3 veces avanza;
                      recupera;
                      oeste;
                      al-frente;
                      este;
                      mcm(sucede(n));
                  fin;
              fin;
      fin sino inicio
          este;
          avanza;
          si junto-a-zumbador entonces coge-zumbador;
          si junto-a-zumbador entonces inicio
              deja-zumbador;
              este;
                  divide(n);
                  si no-junto-a-zumbador entonces inicio
                      este;
                      avanza;
                      repetir n veces deja-zumbador;
                      norte;
                      avanza;
                      oeste;
                      al-frente;
                      este;
                      mcm(n);
                  fin sino inicio
                      toma;
                      norte;
                      avanza;
                      toma;
                      sur;
                      avanza;
                      este;
                      repetir 3 veces avanza;
                      recupera;
                      este;
                      oeste;
                      al-frente;
                      este;
                      mcm(sucede(n));
                  fin;

          fin sino inicio
              este;
              avanza;
              deja-zumbador;
          fin;
      fin;
  fin;
  define-nueva-instruccion cuenta(n) como inicio
      si junto-a-zumbador entonces inicio
          coge-zumbador;
          cuenta(n);
          repetir n veces deja-zumbador;
      fin;
  fin;
  define-nueva-instruccion multiplica(n) como inicio
      si junto-a-zumbador entonces inicio
          coge-zumbador;
          multiplica(sucede(n));
      fin sino inicio
          avanza;
          cuenta(n);
      fin;
  fin;
    inicia-ejecucion
        ve-1-1;
        mcm(2);
        sur;
        mientras frente-libre hacer inicio
            multiplica(0);
        fin;
        apagate;
    termina-ejecucion
finalizar-programa
