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 postes(x)como
inicio
  mientras junto-a-zumbador y orientado-al-oeste hacer
    inicio
      coge-zumbador;
      si no-junto-a-zumbador entonces
        inicio
          norte;
          avanza;
          este;
          mientras no-junto-a-zumbador hacer
            inicio
              deja-zumbador;
              repetir sucede(x) veces avanza;
              si izquierda-libre entonces gira-izquierda;
            fin;
        fin;
      postes(sucede(x));
    fin;
fin;

define-nueva-instruccion cuentapos como
inicio
  mientras izquierda-bloqueada o izquierda-libre y derecha-libre hacer
    inicio
      mientras no-junto-a-zumbador y frente-libre hacer avanza;
      si junto-a-zumbador entonces
        inicio
          coge-zumbador;
          si izquierda-bloqueada entonces avanza
          sino
            inicio
              si no-orientado-al-sur entonces
                inicio
                  gira-izquierda;
                  avanza;
                fin
              sino
                inicio
                  mientras frente-libre hacer avanza;
                  este;
                  avanza;
                fin;
            fin;
           cuentapos;
           si orientado-al-este entonces deja-zumbador;
        fin;
    fin;
fin;

define-nueva-instruccion mide como
inicio
  mientras izquierda-bloqueada hacer
    inicio
      avanza;
      si izquierda-libre y no-orientado-al-sur entonces
        inicio
          gira-izquierda;
          avanza;
        fin;
      mide;
      si izquierda-libre y orientado-al-sur entonces
        inicio
          mientras frente-libre hacer avanza;
          este;
          repetir 2 veces avanza;
        fin;
     deja-zumbador;
    fin;
fin;

define-nueva-instruccion malla(z) como
inicio
  mientras junto-a-zumbador y orientado-al-oeste hacer
    inicio
      coge-zumbador;
      si no-junto-a-zumbador entonces
        inicio
          este;
          repetir sucede(z) veces deja-zumbador;
          avanza;
        fin;
      malla(sucede(z));
      si orientado-al-este  y junto-a-zumbador entonces coge-zumbador;
    fin;
fin;

    inicia-ejecucion
    este;
    avanza;
    oeste;
    postes(0);
    avanza;
    cuentapos;
    oeste;
    avanza;
    norte;
    avanza;
    este;
    avanza;
    mide;
    repetir 4 veces deja-zumbador;
    oeste;
    avanza;
    malla(0);
        apagate;
    termina-ejecucion
finalizar-programa
