iniciar-programa
define-nueva-instruccion d(x) como inicio
mientras junto-a-zumbador y derecha-bloqueada y orientado-al-norte y frente-libre hacer inicio
si junto-a-zumbador entonces coge-zumbador; si junto-a-zumbador entonces d(sucede(x));
si derecha-bloqueada y orientado-al-norte    entonces inicio
mientras no-orientado-al-norte hacer gira-izquierda;
    mientras frente-libre hacer avanza;
    gira-izquierda; mientras frente-libre hacer avanza;
    gira-izquierda;
    fin;
fin;

    mientras no-junto-a-zumbador hacer inicio
    repetir x veces deja-zumbador;
    si frente-libre entonces avanza; d(precede(x));
       fin;
       si frente-bloqueado y junto-a-zumbador y orientado-al-norte y derecha-libre entonces inicio
    repetir 2 veces gira-izquierda;
    avanza; repetir 3 veces gira-izquierda;  avanza;si junto-a-zumbador entonces apagate; repetir x veces deja-zumbador; avanza;d(precede(x)); fin;
   si frente-bloqueado y junto-a-zumbador y orientado-al-este y derecha-libre entonces inicio
    repetir 2 veces gira-izquierda;
    avanza; repetir 3 veces gira-izquierda;  avanza;si junto-a-zumbador entonces apagate; repetir x veces deja-zumbador; avanza;d(precede(x)); fin;
    si frente-bloqueado y junto-a-zumbador y orientado-al-oeste entonces inicio
    repetir 2 veces gira-izquierda;
    avanza; repetir 3 veces gira-izquierda;  avanza; si junto-a-zumbador entonces apagate;repetir x veces deja-zumbador; avanza;d(precede(x)); fin;
    si frente-bloqueado y junto-a-zumbador y orientado-al-sur y derecha-libre entonces inicio
    repetir 2 veces gira-izquierda;
    avanza; repetir 3 veces gira-izquierda; avanza;si junto-a-zumbador entonces apagate; repetir x veces deja-zumbador; avanza;d(precede(x));  fin;
    si junto-a-zumbador y frente-libre entonces inicio
    repetir 2 veces gira-izquierda;
    avanza; repetir 3 veces gira-izquierda;
    avanza; si junto-a-zumbador entonces apagate; repetir x veces deja-zumbador; avanza;d(precede(x));
    fin;
    si frente-bloqueado entonces inicio gira-izquierda; si frente-libre entonces avanza; repetir x veces deja-zumbador; avanza;d(precede(x));
    fin;
     si frente-libre entonces avanza;

   fin;

define-nueva-instruccion h(x) como inicio
mientras frente-libre y derecha-libre hacer inicio
si frente-libre entonces avanza; h(sucede(x));
fin;
si frente-bloqueado y orientado-al-norte entonces inicio repetir 3 veces gira-izquierda; si frente-libre entonces avanza;
repetir 3 veces gira-izquierda; mientras frente-libre hacer avanza; repetir 2 veces gira-izquierda;
fin;
si no-junto-a-zumbador y derecha-bloqueada entonces repetir x veces deja-zumbador;
fin;
define-nueva-instruccion c(x) como inicio
mientras frente-libre y no-junto-a-zumbador hacer inicio
si frente-libre entonces avanza;
si frente-libre entonces c(sucede(x));
fin;
si frente-bloqueado entonces repetir x veces deja-zumbador; si frente-bloqueado entonces gira-izquierda;
fin;

inicia-ejecucion
si izquierda-bloqueada y derecha-bloqueada y frente-bloqueado entonces inicio
deja-zumbador;   apagate; fin;
mientras no-orientado-al-sur hacer gira-izquierda;
    mientras frente-libre hacer avanza;
    repetir 3 veces gira-izquierda; mientras frente-libre hacer avanza;
    repetir 3 veces gira-izquierda;
    h(1); mientras frente-libre hacer avanza; repetir 2 veces gira-izquierda;
    c(1); gira-izquierda; mientras frente-libre hacer avanza; repetir 2 veces gira-izquierda; c(1);
    d(1);


        apagate;
    termina-ejecucion
finalizar-programa
