73 lines
1.8 KiB
Plaintext
73 lines
1.8 KiB
Plaintext
/*
|
|
TASK BASIC-EMBEBIDO de HOPPER
|
|
|
|
onechar("WB",objetivo)
|
|
deja un único carcater de todos los que encuentre consecutivamente,
|
|
de la lista de caracteres "WB".
|
|
|
|
índice:=()
|
|
copia el valor de la función entre paréntesis en "índice", pero
|
|
deja ese valor en el stack de trabajo, para ser asignado a "largo".
|
|
|
|
poschar(INICIO, v, objetivo)
|
|
entrega la posición donde el caracter dado "v" deja de repetirse
|
|
(por eso se resta 1 al resultado).
|
|
|
|
objetivo+=sublargo
|
|
borra los primeros sublargo-ésimo caracteres.
|
|
|
|
#basic{...} / #(...)
|
|
BASIC embebido de Hopper.
|
|
*/
|
|
|
|
#include <basico.h>
|
|
|
|
#define INICIO 1
|
|
#proto codificar(_X_,_Y_,_Z_)
|
|
#proto decodificar(_X_,_Y_)
|
|
|
|
principal {
|
|
|
|
índice="", largo=0, codificado="", decodificado=""
|
|
objetivo = "WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW"
|
|
|
|
decimales '0', fijar separador 'NULO'
|
|
|
|
#basic{
|
|
largo = len(índice:=( onechar("WB",objetivo) ) )
|
|
print ("Original =",objetivo,NL)
|
|
|
|
codificado = codificar(objetivo, índice, largo)
|
|
decodificado = decodificar(codificado, índice)
|
|
|
|
print ("Codificado =",codificado,"\nDecodificado =",decodificado,NL)
|
|
}
|
|
terminar
|
|
}
|
|
|
|
subrutinas
|
|
|
|
codificar( o, i, l)
|
|
v="", sublargo=0
|
|
para cada caracter ( v, i, l )
|
|
/* deja ésto en el stack de trabajo: */
|
|
#( sublargo := (poschar(INICIO, v, o) - 1 ) ), 'v'
|
|
o+=sublargo
|
|
siguiente
|
|
unir esto
|
|
retornar
|
|
|
|
decodificar(c, i)
|
|
v="", posición=0, l=0
|
|
#( l=len(i) )
|
|
para cada caracter ( v, i, l )
|
|
#basic{
|
|
posición = find(v, c)-1
|
|
/* deja ésto en el stack de trabajo: */
|
|
replicate(v, number(copy(posición,1,c)) )
|
|
}
|
|
++posición,c+=posición
|
|
siguiente
|
|
unir esto
|
|
retornar
|