iniciar-programa

    define-nueva-instruccion gira(n) como inicio
      repetir n veces inicio
        gira-izquierda;
      fin;
    fin;

    define-nueva-instruccion orientate como inicio
      mientras no-orientado-al-este hacer inicio
        gira(1);
      fin;
    fin;

    define-nueva-instruccion pon(n) como inicio
      gira(1);
      avanza;
      repetir n veces inicio
        deja-zumbador;
      fin;
      gira(2);
      avanza;                                       
      gira(1);
    fin;

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

    define-nueva-instruccion valida(n) como inicio
      repetir n veces inicio
        si junto-a-zumbador entonces inicio
          si orientado-al-este entonces inicio
            coge-zumbador;
          fin sino inicio
            deja-zumbador;
          fin;
        fin sino inicio
          gira(1);
          deja-zumbador;
        fin;
      fin;
      si orientado-al-este entonces inicio
        cuenta2(n);
      fin sino inicio
        repetir n veces inicio
          si junto-a-zumbador entonces inicio
            si orientado-al-norte entonces inicio
              coge-zumbador;
            fin sino inicio
              deja-zumbador;
            fin;
          fin sino inicio
            gira(3);
            deja-zumbador;
          fin;
        fin;
        si no-orientado-al-norte entonces inicio
          pon(n);
        fin;
      fin;
    fin;

    define-nueva-instruccion cuenta1(n) como inicio
      si junto-a-zumbador entonces inicio
        coge-zumbador;
        cuenta1(sucede(n));
      fin sino inicio
        avanza;
        valida(n);
      fin;
    fin;

    define-nueva-instruccion principio como inicio
      gira(2);
      avanza;
      mientras junto-a-zumbador hacer inicio
        avanza;
      fin;
      gira(2);
      avanza;
    fin;

    define-nueva-instruccion mide(n) como inicio
      si junto-a-zumbador entonces inicio
        avanza;
        mide(sucede(n));
      fin sino inicio
        principio;
        repetir precede(n) veces inicio
          mientras junto-a-zumbador hacer inicio
            cuenta1(0);
          fin;
          avanza;
          gira(3);
          principio;
        fin;
      fin;
    fin;

    define-nueva-instruccion ponlos(n) como inicio
      si junto-a-zumbador entonces inicio
        coge-zumbador;
        ponlos(sucede(n));
      fin sino inicio
        gira(2);
        mientras frente-libre hacer inicio
          avanza;
        fin;
        gira(1);
        mientras frente-libre hacer inicio
          avanza;
        fin;
        repetir n veces inicio
          deja-zumbador;
        fin;
      fin;
    fin;

inicia-ejecucion
    orientate;
    avanza;
    mide(0);
    ponlos(0);
    apagate;
termina-ejecucion

finalizar-programa
