June 2018 Update
This commit is contained in:
parent
ba8067c3b7
commit
22f33d4004
5278 changed files with 84726 additions and 14379 deletions
|
|
@ -0,0 +1,48 @@
|
|||
text
|
||||
decode(list l)
|
||||
{
|
||||
integer c, e, i;
|
||||
text al, s;
|
||||
|
||||
al = "abcdefghijklmnopqrstuvwxyz";
|
||||
for (i, e in l) {
|
||||
s = insert(s, -1, c = al[e]);
|
||||
al = insert(delete(al, e), 0, c);
|
||||
}
|
||||
|
||||
s;
|
||||
}
|
||||
|
||||
list
|
||||
encode(text s)
|
||||
{
|
||||
integer c, e;
|
||||
text al;
|
||||
list l;
|
||||
|
||||
al = "abcdefghijklmnopqrstuvwxyz";
|
||||
while (c = initial(s)) {
|
||||
s = delete(s, 0);
|
||||
l.append(e = place(al, c));
|
||||
al = insert(delete(al, e), 0, c);
|
||||
}
|
||||
|
||||
l;
|
||||
}
|
||||
|
||||
integer
|
||||
main(void)
|
||||
{
|
||||
integer i;
|
||||
text s;
|
||||
|
||||
for (i, s in list("broood", "bananaaa", "hiphophiphop")) {
|
||||
list l;
|
||||
|
||||
l = encode(s);
|
||||
l.ucall(o_, 1, " ");
|
||||
o_(": ", decode(l), "\n");
|
||||
}
|
||||
|
||||
0;
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
( encode
|
||||
= string symboltable
|
||||
. !arg:(?string.?symboltable)
|
||||
& vap
|
||||
$ ( (
|
||||
= A Z i
|
||||
. !symboltable:?A [?i !arg ?Z
|
||||
& !arg !A !Z:?symboltable
|
||||
& !i
|
||||
)
|
||||
. !string
|
||||
)
|
||||
)
|
||||
& ( decode
|
||||
= indices symboltable
|
||||
. !arg:(?indices.?symboltable)
|
||||
& str
|
||||
$ ( map
|
||||
$ ( (
|
||||
= A Z symbol
|
||||
. !symboltable:?A [!arg %?symbol ?Z
|
||||
& !symbol !A !Z:?symboltable
|
||||
& !symbol
|
||||
)
|
||||
. !indices
|
||||
)
|
||||
)
|
||||
)
|
||||
& ( test
|
||||
= string symboltable encoded decoded
|
||||
. !arg:(?string.?symboltable)
|
||||
& put$str$("input:" !string ", ")
|
||||
& encode$(!string.!symboltable):?encoded
|
||||
& put$("encoded:" !encoded ", ")
|
||||
& decode$(!encoded.!symboltable):?decoded
|
||||
& put$str$("decoded:" !decoded ", ")
|
||||
& ( !string:!decoded
|
||||
& out$OK
|
||||
| out$WRONG
|
||||
)
|
||||
)
|
||||
& a b c d e f g h i j k l m n o p q r s t y v w x y z
|
||||
: ?symboltable
|
||||
& test$(broood.!symboltable)
|
||||
& test$(bananaaa.!symboltable)
|
||||
& test$(hiphophiphop.!symboltable)
|
||||
|
|
@ -10,12 +10,9 @@ type symbolTable string
|
|||
func (symbols symbolTable) encode(s string) []byte {
|
||||
seq := make([]byte, len(s))
|
||||
pad := []byte(symbols)
|
||||
c1 := []byte{0}
|
||||
for i := 0; i < len(s); i++ {
|
||||
c := s[i]
|
||||
c1[0] = c
|
||||
x := byte(bytes.Index(pad, c1))
|
||||
seq[i] = x
|
||||
for i, c := range []byte(s) {
|
||||
x := bytes.IndexByte(pad, c)
|
||||
seq[i] = byte(x)
|
||||
copy(pad[1:], pad[:x])
|
||||
pad[0] = c
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,33 @@
|
|||
function encodeMTF(str::AbstractString, symtable::Vector{Char}=collect('a':'z'))
|
||||
function encode(ch::Char)
|
||||
r = findfirst(symtable, ch)
|
||||
deleteat!(symtable, r)
|
||||
prepend!(symtable, ch)
|
||||
return r
|
||||
end
|
||||
collect(encode(ch) for ch in str)
|
||||
end
|
||||
|
||||
function decodeMTF(arr::Vector{Int}, symtable::Vector{Char}=collect('a':'z'))
|
||||
function decode(i::Int)
|
||||
r = symtable[i]
|
||||
deleteat!(symtable, i)
|
||||
prepend!(symtable, r)
|
||||
return r
|
||||
end
|
||||
join(decode(i) for i in arr)
|
||||
end
|
||||
|
||||
testset = ["broood", "bananaaa", "hiphophiphop"]
|
||||
encoded = encodeMTF.(testset)
|
||||
decoded = decodeMTF.(encoded)
|
||||
for (str, enc, dec) in zip(testset, encoded, decoded)
|
||||
println("Test string: $str\n -> Encoded: $enc\n -> Decoded: $dec")
|
||||
end
|
||||
|
||||
using Base.Test
|
||||
@testset "Decoded string equal to original" begin
|
||||
for (str, dec) in zip(testset, decoded)
|
||||
@test str == dec
|
||||
end
|
||||
end
|
||||
|
|
@ -1,17 +1,17 @@
|
|||
/*REXX program demonstrates the move─to─front algorithm encode/decode symbol table. */
|
||||
parse arg xxx; if xxx='' then xxx= 'broood bananaaa hiphophiphop' /*use the default?*/
|
||||
one=1 /*(offset) for this task's requirement.*/
|
||||
do j=1 for words(xxx); x=word(xxx, j) /*process a single word at a time. */
|
||||
do j=1 for words(xxx); x=word(xxx, j) /*process a single word at a time. */
|
||||
@= 'abcdefghijklmnopqrstuvwxyz'; @@=@ /*symbol table: the lowercase alphabet */
|
||||
$= /*set the decode string to a null. */
|
||||
do k=1 for length(x); z=substr(x, k, 1) /*encrypt a symbol in the word. */
|
||||
do k=1 for length(x); z=substr(x, k, 1) /*encrypt a symbol in the word. */
|
||||
_=pos(z, @); if _==0 then iterate /*the symbol position in symbol table. */
|
||||
$=$ _ - one; @=z || delstr(@, _, 1) /*(re-)adjust the symbol table string. */
|
||||
$=$ (_ - one); @=z || delstr(@, _, 1) /*(re─)adjust the symbol table string. */
|
||||
end /*k*/ /* [↑] the move─to─front encoding. */
|
||||
!= /*set the encode string to a null. */
|
||||
do m=1 for words($); n=word($, m) +one /*decode the sequence table string. */
|
||||
y=substr(@@, n, 1); !=! || y /*the decode symbol for the N word.*/
|
||||
do m=1 for words($); n=word($, m) + one /*decode the sequence table string. */
|
||||
y=substr(@@, n, 1); !=! || y /*the decode symbol for the N word.*/
|
||||
@@=y || delstr(@@, n, 1) /*rebuild the symbol table string. */
|
||||
end /*m*/ /* [↑] the move─to─front decoding. */
|
||||
say ' word: ' left(x, 20) "encoding:" left($, 35) word('wrong OK', 1+(!==x) )
|
||||
say ' word: ' left(x, 20) "encoding:" left($, 35) word('wrong OK', 1 + (!==x) )
|
||||
end /*j*/ /*stick a fork in it, we're all done. */
|
||||
|
|
|
|||
|
|
@ -0,0 +1,42 @@
|
|||
# Project : Move-to-front algorithm
|
||||
# Date : 2018/01/13
|
||||
# Author : Gal Zsolt (~ CalmoSoft ~)
|
||||
# Email : <calmosoft@gmail.com>
|
||||
|
||||
test("broood")
|
||||
test("bananaaa")
|
||||
test("hiphophiphop")
|
||||
|
||||
func encode(s)
|
||||
symtab = "abcdefghijklmnopqrstuvwxyz"
|
||||
res = ""
|
||||
for i=1 to len(s)
|
||||
ch = s[i]
|
||||
k = substr(symtab, ch)
|
||||
res = res + " " + (k-1)
|
||||
for j=k to 2 step -1
|
||||
symtab[j] = symtab[j-1]
|
||||
next
|
||||
symtab[1] = ch
|
||||
next
|
||||
return res
|
||||
|
||||
func decode(s)
|
||||
s = str2list( substr(s, " ", nl) )
|
||||
symtab = "abcdefghijklmnopqrstuvwxyz"
|
||||
res = ""
|
||||
for i=1 to len(s)
|
||||
k = number(s[i]) + 1
|
||||
ch = symtab[k]
|
||||
res = res + " " + ch
|
||||
for j=k to 2 step -1
|
||||
symtab[j] = symtab[j-1]
|
||||
next
|
||||
symtab[1] = ch
|
||||
next
|
||||
return right(res, len(res)-2)
|
||||
|
||||
func test(s)
|
||||
e = encode(s)
|
||||
d = decode(e)
|
||||
see "" + s + " => " + "(" + right(e, len(e) - 1) + ") " + " => " + substr(d, " ", "") + nl
|
||||
Loading…
Add table
Add a link
Reference in a new issue