iniciar-programa
define-nueva-instruccion gira-derecha como
inicio
  repetir 3 veces
    gira-izquierda;
fin;
define-nueva-instruccion mira-norte como
inicio
  mientras no-orientado-al-norte hacer
    gira-izquierda;
fin;
define-nueva-instruccion mira-este como
inicio
  mientras no-orientado-al-este hacer
    gira-izquierda;
fin;
define-nueva-instruccion mira-sur como
inicio
  mientras no-orientado-al-sur hacer
    gira-izquierda;
fin;
define-nueva-instruccion mira-oeste como
inicio
  mientras no-orientado-al-oeste hacer
    gira-izquierda;
fin;
define-nueva-instruccion paso-atras como
inicio
  repetir 2 veces
    gira-izquierda;
  avanza;
  repetir 2 veces
    gira-izquierda;
fin;
define-nueva-instruccion junta como
inicio
  si junto-a-zumbador entonces
  inicio
    coge-zumbador;
    junta;
    deja-zumbador;
  fin
  sino
  inicio
    avanza;
  fin;
fin;
define-nueva-instruccion copia como
inicio
  si junto-a-zumbador entonces
  inicio
    coge-zumbador;
    copia;
    deja-zumbador;
    paso-atras;
    deja-zumbador;
    avanza;
  fin
  sino
  inicio
    gira-derecha;
    avanza;
  fin;
fin;
define-nueva-instruccion suma(n) como
inicio
  repetir n veces
  inicio
    si junto-a-zumbador entonces
    inicio
      coge-zumbador;
    fin
    sino
      mira-este;
  fin;
fin;
define-nueva-instruccion resultado como
inicio
  si junto-a-zumbador entonces
  inicio
    coge-zumbador;
    resultado;
    deja-zumbador;
  fin
  sino
  inicio
    paso-atras;
    gira-derecha;
    avanza;
  fin;
fin;
define-nueva-instruccion residuo como
inicio
  si junto-a-zumbador entonces
  inicio
    coge-zumbador;
    residuo;
    deja-zumbador;
  fin
  sino
  inicio
    avanza;
    gira-izquierda;
    avanza;
    mira-sur;
  fin;
fin;
define-nueva-instruccion base(n) como
inicio
  si junto-a-zumbador entonces
  inicio
    coge-zumbador;
    base(sucede(N));
  fin
  sino
  inicio
    paso-atras;
    gira-derecha;
    repetir 11 veces
      avanza;
    mira-sur;
    paso-atras;
    repetir 11 veces
    inicio
      junta;
      junta;
      mira-norte;
      mientras junto-a-zumbador y orientado-al-norte hacer
      inicio
        copia;
        paso-atras;
        gira-izquierda;
        suma(n);
        si orientado-al-norte entonces
        inicio
          avanza;
          deja-zumbador;
          paso-atras;
          gira-derecha;
          avanza;
          mientras junto-a-zumbador hacer
            coge-zumbador;
          paso-atras;
          gira-izquierda;
        fin;
      fin;
      si orientado-al-este entonces
      inicio

        avanza;
        resultado;
        repetir 2 veces
          gira-izquierda;
          avanza;
        mira-norte;
      fin;
      si orientado-al-norte entonces
      inicio
        avanza;
        residuo;
      fin;
    fin;
  fin;
fin;
define-nueva-instruccion resultado2 como
inicio
  si junto-a-zumbador entonces
  inicio
    coge-zumbador;
    resultado2;
    deja-zumbador;
  fin
  sino
  inicio
    mientras frente-libre hacer
      avanza;
  fin;
fin;
    inicia-ejecucion
    repetir 3 veces
      avanza;
    base(0);
    si junto-a-zumbador entonces
    inicio
       resultado2;
    fin;
        apagate;
    termina-ejecucion
finalizar-programa
