20 lines
663 B
Plaintext
20 lines
663 B
Plaintext
# Input is the string to be encoded, st is the initial symbol table (an array)
|
|
# Output: the encoded string (an array)
|
|
def m2f_encode(st):
|
|
reduce explode[] as $ch
|
|
( [ [], st]; # state: [ans, st]
|
|
(.[1]|index($ch)) as $ix
|
|
| .[1] as $st
|
|
| [ (.[0] + [ $ix ]), [$st[$ix]] + $st[0:$ix] + $st[$ix+1:] ] )
|
|
| .[0];
|
|
|
|
# Input should be the encoded string (an array)
|
|
# and st should be the initial symbol table (an array)
|
|
def m2f_decode(st):
|
|
reduce .[] as $ix
|
|
( [ [], st]; # state: [ans, st]
|
|
.[1] as $st
|
|
| [ (.[0] + [ $st[$ix] ]), [$st[$ix]] + $st[0:$ix] + $st[$ix+1:] ] )
|
|
| .[0]
|
|
| implode;
|