Run-length encoding: Difference between revisions
Content added Content deleted
Not a robot (talk | contribs) (Add SETL) |
|||
Line 383: | Line 383: | ||
Encode input: 12W1B12W3B24W1B14W |
Encode input: 12W1B12W3B24W1B14W |
||
Decode output: WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW |
Decode output: WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW |
||
</pre> |
|||
=={{header|Amazing Hopper}}== |
|||
<syntaxhighlight lang="c"> |
|||
/* |
|||
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 |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
Original =WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW |
|||
Codificado =12W1B12W3B24W1B14W |
|||
Decodificado =WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW |
|||
</pre> |
</pre> |
||