iniciar-programa
define-nueva-instruccion gira(k) como
repetir k veces gira-izquierda;
define-nueva-instruccion medio(n) como inicio
    si frente-libre entonces inicio
        si frente-libre entonces avanza;
        si frente-libre entonces avanza;
        medio(sucede(n));
    fin sino inicio
        gira(2);
        repetir n veces avanza;
    fin;
fin;
define-nueva-instruccion cubo(p) como inicio
    si frente-libre entonces inicio
        avanza;
        cubo(sucede(p));
    fin sino inicio
        gira(2);
        repetir p veces avanza;
       si orientado-al-este entonces gira-izquierda;
       si orientado-al-norte y izquierda-bloqueada entonces gira(3);
    fin;
    si no si-es-cero(p) entonces inicio
       repetir sucede(p) veces deja-zumbador;
       avanza;
   fin;
fin;
define-nueva-instruccion cuenta como inicio
    si frente-libre entonces inicio
        avanza;
        cuenta;
    fin sino gira(2);
    mientras frente-libre y (orientado-al-sur o orientado-al-oeste) hacer avanza;
    si junto-a-zumbador y orientado-al-oeste entonces inicio
        gira(2);
        avanza;
    fin;
    deja-zumbador;
fin;
define-nueva-instruccion compara(k) como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        compara(sucede(k));
    fin sino inicio
        avanza;
        repetir k veces
        si junto-a-zumbador entonces coge-zumbador;
        si junto-a-zumbador entonces gira(2);
        si no junto-a-zumbador entonces gira(3);
        si junto-a-zumbador entonces
        mientras junto-a-zumbador hacer coge-zumbador;
    fin;
fin;
define-nueva-instruccion vuelta(k) como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        vuelta(sucede(k));
    fin sino inicio
        repetir 4 veces inicio
        si no junto-a-zumbador entonces inicio
        repetir precede(k) veces avanza;
        gira(2);
        fin;
            repetir 2 veces inicio
            repetir precede(k) veces inicio
            avanza;
               repetir k veces deja-zumbador;
            fin;
            fin;
          gira(1);
        fin;
        si derecha-libre entonces inicio
 repetir precede(k) veces avanza;
 gira(3);
 avanza;
 gira(3);
        fin;
    fin;
fin;
    inicia-ejecucion
    mientras no orientado-al-norte hacer gira-izquierda;
    cuenta;
    gira-izquierda;
    cuenta;
    gira(2);
    compara(0);
    medio(0);
    cubo(0);
    deja-zumbador;
   si derecha-libre entonces inicio
   gira(2);
    avanza;
    gira(3);
   mientras derecha-libre hacer vuelta(0);
   fin;
        apagate;
    termina-ejecucion
finalizar-programa
 