iniciar-programa
   define-nueva-instruccion acomodate como inicio
       mientras no-orientado-al-oeste hacer inicio
           gira-izquierda;
       fin;
       mientras frente-libre hacer inicio
           avanza;
       fin;
       gira-izquierda;
       gira-izquierda;
    fin;

     define-nueva-instruccion karelitas(m) como inicio
       mientras frente-libre y orientado-al-este hacer inicio
          si junto-a-zumbador entonces inicio
              coge-zumbador;
              si no-junto-a-zumbador entonces inicio
                 deja-zumbador;
                 avanza;
                fin sino inicio
                  coge-zumbador;
                  avanza;
                  karelitas(sucede(m));
              fin;
           fin sino inicio
             avanza;
           fin;
       fin;
       si junto-a-zumbador y orientado-al-este entonces inicio
              coge-zumbador;
              si junto-a-zumbador entonces inicio
                 coge-zumbador;
                 karelitas(sucede(m));
              fin sino inicio
                  deja-zumbador;
              fin;
       fin;
       mientras no-orientado-al-oeste hacer inicio
           gira-izquierda;
       fin;
       si si-es-cero(m)entonces inicio
          apagate;
       fin sino inicio
          deja-zumbador;
          deja-zumbador;
          avanza;
       fin;
    fin;


    define-nueva-instruccion deja-hombre(h) como inicio
       si si-es-cero(h) entonces inicio
           acomodate;
           fin sino inicio
          deja-zumbador;
          si frente-libre entonces inicio
             avanza;
          fin;
          deja-hombre(precede(h));
       fin;
    fin;


    define-nueva-instruccion karelitos(a)como inicio
    mientras frente-libre hacer inicio
       si junto-a-zumbador entonces inicio
             coge-zumbador;
             si no-junto-a-zumbador entonces inicio
                 karelitos(sucede(a));
             fin sino inicio
                deja-zumbador;
             fin;
       fin;
       si frente-libre entonces inicio
          avanza;
       fin;

    fin;
    si junto-a-zumbador entonces inicio
             coge-zumbador;
             si no-junto-a-zumbador entonces inicio
                    karelitos(sucede(a));
             fin sino inicio
                deja-zumbador;
             fin;
    fin;
    si frente-bloqueado y orientado-al-este entonces inicio
            acomodate;
    fin;
    si si-es-cero(a) entonces inicio
    fin sino inicio
       deja-hombre(a);
    fin;
    karelitas(0);

    fin;




    inicia-ejecucion
    acomodate;
    karelitos(0);





        apagate;
    termina-ejecucion
finalizar-programa
