30 lines
659 B
Plaintext
30 lines
659 B
Plaintext
procedure main(A)
|
|
every writes(s := !A, " -> [") do {
|
|
every writes(!(enc := encode(&lcase,s))," ")
|
|
writes("] -> ",s2 := decode(&lcase,enc))
|
|
write((s == s2, " (Correct)") | " (Incorrect)")
|
|
}
|
|
end
|
|
|
|
procedure encode(m,s)
|
|
enc := []
|
|
every c := !s do {
|
|
m ?:= reorder(tab(i := upto(c)),move(1),tab(0))
|
|
put(enc,i-1) # Strings are 1-based
|
|
}
|
|
return enc
|
|
end
|
|
|
|
procedure decode(m,enc)
|
|
dec := ""
|
|
every i := 1 + !enc do { # Lists are 1-based
|
|
dec ||:= m[i]
|
|
m ?:= reorder(tab(i),move(1),tab(0))
|
|
}
|
|
return dec
|
|
end
|
|
|
|
procedure reorder(s1,s2,s3)
|
|
return s2||s1||s3
|
|
end
|