iniciar-programa
define-nueva-instruccion karelita(m)como
inicio

  mientras no-junto-a-zumbador y frente-libre hacer avanza;
  si junto-a-zumbador y frente-bloqueado entonces
  inicio
     repetir 2 veces coge-zumbador;
     karelita(sucede(m));
   fin
   sino
  si junto-a-zumbador entonces
  inicio
     repetir 2 veces coge-zumbador;
     si frente-libre entonces
     inicio
       avanza;
       karelita(sucede(m));
     fin
       sino
     inicio
     repetir 2 veces gira-izquierda;
     mientras frente-libre hacer avanza;
     repetir 2 veces gira-izquierda;
     repetir m veces
     inicio
        repetir 2 veces deja-zumbador;
        si frente-libre entonces avanza;
       fin;
     fin;
     fin;
         si frente-bloqueado y no-junto-a-zumbador entonces
     inicio
          repetir 2 veces gira-izquierda;
     mientras frente-libre hacer avanza;
     repetir 2 veces gira-izquierda;
     repetir m veces
     inicio
        repetir 2 veces si algun-zumbador-en-la-mochila entonces deja-zumbador;
        si frente-libre entonces avanza;
       fin;
      fin;
     fin;
define-nueva-instruccion karelito(n)como
inicio
   si junto-a-zumbador entonces
   inicio
      si frente-bloqueado entonces
      inicio
        coge-zumbador;
        si junto-a-zumbador entonces deja-zumbador
        sino karelito(sucede(n));
       fin ;
       si junto-a-zumbador entonces coge-zumbador;
      fin

   sino
   inicio
     si frente-libre entonces
     inicio
       avanza;
       karelito(n);
      fin
      sino
      inicio
           repetir 2 veces gira-izquierda;
         karelita(0);
         mientras frente-libre hacer avanza;
         repetir 2 veces gira-izquierda;
         repetir n veces
         inicio
            deja-zumbador;
            si frente-libre entonces avanza;
          fin;
          apagate;
         fin;
         fin;
   si no-junto-a-zumbador entonces
   inicio
   si frente-libre entonces
     inicio
       avanza;
       karelito(sucede(n));
      fin
      sino
      inicio
         repetir 2 veces gira-izquierda;
         karelita(0);
         mientras frente-libre hacer avanza;
         repetir 2 veces gira-izquierda;
         repetir n veces
         inicio
            deja-zumbador;
            avanza;
          fin;
          apagate;
         fin;
     fin
     sino
     inicio
       si algun-zumbador-en-la-mochila entonces deja-zumbador;
       si frente-libre entonces
       inicio
          avanza;
          karelito(n);
        fin
        sino
        inicio
           repetir 2 veces gira-izquierda;
         karelita(0);
         mientras frente-libre hacer avanza;
         repetir 2 veces gira-izquierda;
         repetir n veces
         inicio
            deja-zumbador;
            avanza;

          fin;
           apagate;
         fin;
        fin;
        fin;





    inicia-ejecucion
    mientras no-orientado-al-norte hacer gira-izquierda;
    si frente-bloqueado y derecha-bloqueada y izquierda-bloqueada entonces apagate;
    mientras no-orientado-al-oeste hacer gira-izquierda;
    mientras frente-libre hacer avanza;
    repetir 2 veces gira-izquierda;
    karelito(0);
        apagate;
    termina-ejecucion
finalizar-programa
