alf:"abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQ-RSTUVWXYZáéíóúÁÉÍÓÚ0123456789 ,.;:";
codi_numerica(alf,msj):=block(
[extra],
if stringp(msj) then (
extra:makelist(mod(sposition(charat(msj,i),alf),slength(alf)),i,1,slength(msj))
)
else
(
extra:"",
for i in msj do extra:concat(extra,alf[i-1])
),
extra
)$
hacer_clave(clave,longitud):=block(
[solucion],
solucion:"",
for i:0 thru longitud do (
solucion:concat(solucion,clave[mod(i,slength(clave))])
),
solucion
);
/*funcion vigenere*/
vigenere(alfabeto, mensaje, clave):=block(
[modulo, secuencia, secuencia_clave, longitud_clave, longitud_mensaje, solucion, secuencia_solucion],
modulo:slength(alfabeto),
secuencia:codi_numerica(alfabeto, mensaje),
longitud_clave:slength(clave),
longitud_mensaje:slength(mensaje),
secuencia_clave:codi_numerica(alfabeto, hacer_clave(clave, longitud_mensaje)),
secuencia_solucion:makelist(mod(secuencia[i]-secuencia_clave[i], modulo),i,1,longitud_mensaje),
solucion:codi_numerica(alfabeto,secuencia_solucion),
solucion
);
/*ejecutar la funcion*/
vigenere(alf,":DoqqO67ogwegvwñAUgÑi6rodo:qWxjyKxYhVfÍeoi,:rlhujplCDR2;o6Bavz:fú6ndw", "G1-01: 2 de enero");
codi_numerica(alf,msj):=block(
[extra],
if stringp(msj) then (
extra:makelist(mod(sposition(charat(msj,i),alf),slength(alf)),i,1,slength(msj))
)
else
(
extra:"",
for i in msj do extra:concat(extra,alf[i-1])
),
extra
)$
hacer_clave(clave,longitud):=block(
[solucion],
solucion:"",
for i:0 thru longitud do (
solucion:concat(solucion,clave[mod(i,slength(clave))])
),
solucion
);
/*funcion vigenere*/
vigenere(alfabeto, mensaje, clave):=block(
[modulo, secuencia, secuencia_clave, longitud_clave, longitud_mensaje, solucion, secuencia_solucion],
modulo:slength(alfabeto),
secuencia:codi_numerica(alfabeto, mensaje),
longitud_clave:slength(clave),
longitud_mensaje:slength(mensaje),
secuencia_clave:codi_numerica(alfabeto, hacer_clave(clave, longitud_mensaje)),
secuencia_solucion:makelist(mod(secuencia[i]-secuencia_clave[i], modulo),i,1,longitud_mensaje),
solucion:codi_numerica(alfabeto,secuencia_solucion),
solucion
);
/*ejecutar la funcion*/
vigenere(alf,":DoqqO67ogwegvwñAUgÑi6rodo:qWxjyKxYhVfÍeoi,:rlhujplCDR2;o6Bavz:fú6ndw", "G1-01: 2 de enero");