iniciar-programa
define-nueva-instruccion norte como mientras no-orientado-al-norte hacer gira-izquierda;
define-nueva-instruccion sur como mientras no-orientado-al-sur hacer gira-izquierda;
define-nueva-instruccion este como mientras no-orientado-al-este hacer gira-izquierda;
define-nueva-instruccion oeste como mientras no-orientado-al-oeste hacer gira-izquierda;

define-nueva-instruccion revisa como
inicio
  avanza;
  si no-junto-a-zumbador entonces apagate;
  avanza;
  si no-junto-a-zumbador entonces apagate;
fin;

define-nueva-instruccion duplica(n) como
inicio
  si junto-a-zumbador entonces
    inicio
      coge-zumbador;
      duplica(sucede(n));
    fin
  sino
    inicio
      repetir n veces deja-zumbador;
      avanza;
      repetir n veces deja-zumbador;
    fin;
fin;

define-nueva-instruccion resta(n) como
inicio
  si junto-a-zumbador entonces
    inicio
      coge-zumbador;
      resta(sucede(n));
    fin
  sino
    inicio
      norte;
      avanza;
      repetir n veces
        inicio
         si junto-a-zumbador entonces coge-zumbador
         sino apagate;
        fin;
    fin;
fin;

define-nueva-instruccion marca(n) como
inicio
  si junto-a-zumbador y orientado-al-norte entonces
    inicio
      coge-zumbador;
      marca(sucede(n));
        si junto-a-zumbador entonces
        inicio
          coge-zumbador;
          norte;
          avanza;
          este;
          mientras junto-a-zumbador y frente-libre hacer avanza;
          repetir sucede (n) veces deja-zumbador;
          oeste;
          mientras frente-libre hacer avanza;
          sur;
          avanza;
        fin;
    fin
  sino
    inicio
      sur;
      avanza;
      este;
    fin;
fin;

define-nueva-instruccion multiplica2(n) como
inicio
  si junto-a-zumbador entonces
    inicio
       coge-zumbador;
       multiplica2(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
      si frente-libre entonces avanza;
      si junto-a-zumbador entonces multiplica2(n)
      sino
        inicio
          sur;
          mientras frente-libre hacer avanza;
          oeste;
          mientras frente-libre hacer avanza;
          repetir n veces deja-zumbador;
        fin;
    fin;
fin;



    inicia-ejecucion
        revisa;
        duplica(0);
        sur;
        avanza;
        avanza;
        resta(0);
        si no-junto-a-zumbador entonces
          inicio
            sur;
            mientras frente-libre hacer avanza;
            deja-zumbador;
            apagate;
          fin;
        avanza;
        marca(0);
        norte;
        avanza;
        este;
        mientras orientado-al-este  hacer
          inicio
            multiplica(0);
          fin;
        apagate;
    termina-ejecucion
finalizar-programa
