iniciar-programa
    define-nueva-instruccion norte como inicio
      mientras no-orientado-al-norte hacer
        gira-izquierda;
    fin;

    define-nueva-instruccion sur como inicio
      mientras no-orientado-al-sur hacer
        gira-izquierda;
    fin;

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

    define-nueva-instruccion oeste como inicio
      mientras no-orientado-al-oeste hacer
        gira-izquierda;
    fin;

    define-nueva-instruccion posicionate(n) como inicio
      si junto-a-zumbador entonces inicio
        coge-zumbador;
        posicionate(sucede(n));
      fin sino inicio
        este;
        repetir precede(precede(n)) veces
          avanza;
        sur;
        avanza;
        oeste;
      fin;
    fin;

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

    define-nueva-instruccion sacalos(n) como inicio
      si no si-es-cero(n) entonces inicio
        sacalos2(0);
        si frente-libre entonces
        avanza;
        sacalos(precede(n));
      fin;
    fin;

    define-nueva-instruccion cuentapersonas(n) como inicio
      si junto-a-zumbador entonces inicio
        coge-zumbador;
        cuentapersonas(sucede(n));
      fin sino inicio
        oeste;
        avanza;
        posicionate(0);
        sacalos(n);
      fin;
    fin;

    define-nueva-instruccion recorrelos2(n) como inicio
      si junto-a-zumbador entonces inicio
        coge-zumbador;
        recorrelos2(sucede(n));
      fin sino inicio
        oeste;
        mientras no-junto-a-zumbador y frente-libre hacer
          avanza;
        si frente-bloqueado y no-junto-a-zumbador entonces inicio
          repetir n veces
            deja-zumbador;
          este;
          si frente-libre entonces
            avanza;
        fin sino inicio
          este;
          avanza;
          repetir n veces
            deja-zumbador;
          si frente-libre entonces
            avanza;
        fin;
      fin;
    fin;

    define-nueva-instruccion recorrelos como inicio
      mientras frente-libre hacer inicio
        recorrelos2(0);
        mientras no-junto-a-zumbador y frente-libre hacer
          avanza;
      fin;
      recorrelos2(0);
    fin;

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

    define-nueva-instruccion reintegralos como inicio
      oeste;
      mientras frente-libre hacer
        avanza;
      norte;
      avanza;
      este;
      mientras no-junto-a-zumbador y frente-libre hacer
        avanza;
      si junto-a-zumbador entonces
        reintegralos2(0);
    fin;

    inicia-ejecucion
        norte;
        avanza;
        este;
        avanza;
        cuentapersonas(0);
        este;
        si junto-a-zumbador entonces inicio
          este;
          avanza;
        fin;
        recorrelos;
        norte;
        mientras frente-libre hacer
          reintegralos;
        oeste;
        mientras frente-libre hacer
          avanza;
        sur;
        si frente-libre entonces
          avanza;
        este;
        apagate;
    termina-ejecucion
finalizar-programa
