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 columna(i) como
inicio
  si junto-a-zumbador entonces
    inicio
      coge-zumbador;
      columna(sucede(i));
    fin
  sino
    inicio
      oeste;
      mientras frente-libre hacer avanza;
      este;
      repetir precede (i) veces avanza;
      deja-zumbador;
    fin;
fin;


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


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

      este;
      avanza;
      ancho(n);
    fin;

fin;

define-nueva-instruccion marcafin como
inicio
  oeste;
  mientras frente-libre hacer avanza;
  este;
  si izquierda-libre entonces
    inicio
      gira-izquierda;
      mientras frente-libre hacer avanza;
      este;
    fin;
  mientras izquierda-bloqueada y frente-libre hacer avanza;
  si frente-bloqueado y izquierda-bloqueada entonces
    inicio
       sur;
       mientras frente-libre hacer avanza;
       este;
       avanza;
    fin;
  deja-zumbador;
fin;

define-nueva-instruccion gol(n) como
inicio
  si frente-libre entonces
    inicio
      avanza;
      gol(sucede(n));
    fin
  sino
   inicio
     este;
     repetir n veces avanza;
     repetir precede(n) veces deja-zumbador;
   fin;
fin;

define-nueva-instruccion comprobar(n) como
inicio
  si no-junto-a-zumbador entonces
    inicio
      avanza;
      comprobar(sucede(n));
    fin
  sino
    inicio
      mientras frente-libre hacer avanza;
      oeste;
      mientras no-junto-a-zumbador hacer avanza;
      avanza;
      si no si-es-cero(n) entonces repetir precede (n) veces
        inicio
          si frente-libre y no-junto-a-zumbador entonces avanza;
        fin;
      si no-junto-a-zumbador entonces
        inicio
         este;
         mientras frente-libre hacer avanza;
         oeste;
         mientras no-junto-a-zumbador hacer avanza;
         gol(0);
        fin
      sino apagate;
    fin;
fin;

    inicia-ejecucion
        este;
        avanza;
        avanza;
        portero(0);
        marcafin;
        oeste;
        mientras frente-libre hacer avanza;
        este;
        comprobar(0);

        apagate;
    termina-ejecucion
finalizar-programa
