(Arne Babenhauserheide)
2013-12-03: base60 decode seems to work. base60 decode seems to work.
diff --git a/examples/kit-encode.w b/examples/kit-encode.w old mode 100644 new mode 100755 --- a/examples/kit-encode.w +++ b/examples/kit-encode.w @@ -7,11 +7,44 @@ define base60chars define : base60encode number let moddown : (base60 "") (quotient number) if : < quotient 60 - string-append (string-ref base60chars quotient) base60 - moddown - string-append : string-ref base60chars : floor-remainder quotient 60 - floor-quotient quotient 60 + string-append (substring base60chars quotient (+ 1 quotient)) base60 + let : : remainder : floor-remainder quotient 60 + moddown + string-append + substring base60chars remainder : + 1 remainder + . base60 + floor-quotient quotient 60 define : base60decode string - display string + let decode : (number 0) (rest string) + if : = 1 : string-length rest + + (* number 60) : string-index base60chars : string-ref rest 0 + decode + + (* number 60) : string-index base60chars : string-ref rest 0 + string-drop rest 1 +define testnumbers + let + : start : list 0 1 10 60 59 61 100 1000 1e4 1e5 1e6 1e7 1e8 1e9 64 128 + multiplesof256 1000 + let loop : (numbers start) (exponent 1) + if : > exponent multiplesof256 + . numbers + loop + append numbers : list : expt 256 exponent + + 1 exponent + + +define : displaywithnewline foo + display foo + newline +; map displaywithnewline +; map base60encode +; map inexact->exact testnumbers +; map displaywithnewline +; map base60decode +; map base60encode +; map inexact->exact testnumbers + +displaywithnewline + base60encode : list-ref testnumbers : - (length testnumbers) 1