iniciar-programa
define-nueva-instruccion karel-esquina-norte como
inicio
si orientado-al-norte entonces
     inicio
       repetir 2 veces gira-izquierda;
       mientras frente-libre hacer avanza;
       repetir 3 veces gira-izquierda;
       mientras frente-libre hacer avanza;
       repetir 3 veces gira-izquierda;
     fin;
     si orientado-al-sur entonces
     inicio
       repetir 3 veces gira-izquierda;
       mientras frente-libre hacer avanza;
       repetir 3 veces gira-izquierda;
     fin;
     si orientado-al-este entonces
     inicio
       repetir 3 veces gira-izquierda;
       mientras frente-libre hacer avanza;
       repetir 3 veces gira-izquierda;
       mientras frente-libre hacer avanza;
       repetir 3 veces gira-izquierda;
     fin;
     si orientado-al-oeste entonces
     inicio
        gira-izquierda;
        mientras frente-libre hacer avanza;
        repetir 2 veces gira-izquierda;
     fin;
     fin;
    inicia-ejecucion

     mientras frente-libre hacer avanza;
     karel-esquina-norte;

     si algun-zumbador-en-la-mochila entonces deja-zumbador;
     mientras junto-a-zumbador hacer
     inicio
       si frente-libre entonces avanza;
       mientras derecha-libre hacer
       inicio
       repetir 3 veces gira-izquierda;
       si frente-libre entonces avanza;
       si algun-zumbador-en-la-mochila entonces deja-zumbador;
       gira-izquierda;
       si frente-libre entonces avanza;
       fin;
       si frente-bloqueado y derecha-bloqueada entonces
       inicio
         repetir 2 veces gira-izquierda;
         mientras frente-libre hacer avanza;
         repetir 2 veces gira-izquierda;
       fin;
       si algun-zumbador-en-la-mochila entonces deja-zumbador;
       mientras junto-a-zumbador hacer
       inicio
       si frente-libre entonces avanza;

       si izquierda-libre entonces
       inicio

         gira-izquierda;
         si frente-libre y derecha-bloqueada entonces
       inicio
        mientras frente-libre hacer avanza;

       fin;
         si frente-libre entonces avanza;
         si junto-a-zumbador y frente-libre entonces
         inicio
         mientras frente-libre hacer avanza;
         si frente-bloqueado entonces
         inicio
            repetir 2 veces gira-izquierda;
            si algun-zumbador-en-la-mochila entonces deja-zumbador;
            mientras frente-libre hacer
            inicio
             si junto-a-zumbador entonces avanza;
             si no-junto-a-zumbador entonces
             inicio
               si algun-zumbador-en-la-mochila entonces deja-zumbador;
             fin;
            fin;
         fin;
         si algun-zumbador-en-la-mochila entonces
         inicio
         si no-junto-a-zumbador entonces deja-zumbador;
         fin;
         fin;
         si derecha-libre entonces
         inicio
         si algun-zumbador-en-la-mochila y no-junto-a-zumbador  entonces deja-zumbador;
         fin;
         si orientado-al-oeste y derecha-libre entonces
         inicio
         si derecha-libre entonces repetir 3 veces gira-izquierda;

         fin;
         fin;
       fin;
       si frente-bloqueado y derecha-bloqueada y orientado-al-oeste entonces
     inicio
     si algun-zumbador-en-la-mochila entonces deja-zumbador;
     gira-izquierda;
     mientras junto-a-zumbador hacer
     inicio

     si frente-libre entonces avanza;
     gira-izquierda;
     avanza;
     si junto-a-zumbador entonces
     inicio
       gira-izquierda;
       mientras frente-libre hacer avanza;
       repetir 2 veces gira-izquierda;
       mientras frente-libre hacer
       inicio
           si algun-zumbador-en-la-mochila entonces
           inicio
           si no-junto-a-zumbador entonces deja-zumbador;
           fin;
           si frente-libre entonces
           inicio
           avanza;
           si no-junto-a-zumbador entonces deja-zumbador;
           fin;
           si frente-bloqueado entonces apagate;
       fin;

     fin;

     repetir 3 veces gira-izquierda;
     si no-junto-a-zumbador entonces deja-zumbador;
     fin;
     gira-izquierda
     fin;
     fin;


    termina-ejecucion
finalizar-programa
