/* 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 #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