iniciar-programa

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

define-nueva-instruccion despeja como inicio
    si junto-a-zumbador entonces inicio
    coge-zumbador;
    despeja;
    deja-zumbador;
    fin
    sino inicio
    avanza;
    mientras junto-a-zumbador hacer avanza;
    fin;
fin;

define-nueva-instruccion karelito (t) como inicio
   si frente-libre entonces inicio
      si junto-a-zumbador entonces inicio
            coge-zumbador;
            si no junto-a-zumbador entonces inicio
            karelito (sucede(t));
            fin
            sino inicio
            avanza;
            karelito (t);
            fin;
      fin
      sino inicio
          avanza;
          karelito (t);

      fin;

   fin
   sino inicio
       si junto-a-zumbador entonces inicio
          coge-zumbador;
          si no junto-a-zumbador entonces inicio
              gira (2);
              mientras frente-libre hacer avanza;
              gira (2);
              repetir sucede (t) veces deja-zumbador;
          fin

          sino inicio
              gira (2);
              mientras frente-libre hacer avanza;
              gira (2);
              repetir t veces deja-zumbador;

          fin;


       fin
       sino inicio
           gira (2);
           mientras frente-libre hacer avanza;
           repetir t veces deja-zumbador;
           gira (2);
       fin;


   fin;

fin;

define-nueva-instruccion reparto como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        reparto;
        deja-zumbador;
        avanza;
    fin;
    fin;



define-nueva-instruccion karelito2 (s) como inicio
   si frente-libre entonces inicio
      si junto-a-zumbador entonces inicio
            coge-zumbador;
            si no junto-a-zumbador entonces inicio
            karelito2 (sucede(s));
            fin
            sino inicio
            avanza;
            karelito2 (s);
            fin;
      fin
      sino inicio
          avanza;
          karelito2 (s);

      fin;

   fin
   sino inicio
       gira (2);
       si junto-a-zumbador entonces inicio
           deja-zumbador;
           avanza;
       fin;
       repetir s veces inicio
           repetir 2 veces deja-zumbador;
           avanza;

       fin;
       mientras frente-libre hacer avanza;
       gira (2);
       reparto;
       apagate;

   fin;
   fin;

    inicia-ejecucion
    mientras no orientado-al-oeste hacer gira-izquierda;
    mientras frente-libre hacer avanza;
    gira (2);
    si junto-a-zumbador entonces inicio
    despeja;
    gira (2);
    mientras frente-libre hacer avanza;
    gira (2);
    fin;
    karelito (0);
    avanza;
    karelito2 (0);
        apagate;
    termina-ejecucion
finalizar-programa
