(Arne Babenhauserheide)
2013-12-03: kittify works. Now we only need to implement unkittity. kittify works. Now we only need to implement unkittity.
diff --git a/examples/kit-encode.w b/examples/kit-encode.w
--- a/examples/kit-encode.w
+++ b/examples/kit-encode.w
@@ -1,7 +1,10 @@
#!./wisp-multiline.sh
; !#
-define base60chars
+use-modules
+ srfi srfi-1
+
+define base60chars
. "0123456789ABCDEFGHJKLMNPQRSTUVWXYZ_abcdefghijkmnopqrstuvwxyz"
define : base60encode number
@@ -9,42 +12,138 @@ define : base60encode number
if : < quotient 60
string-append (substring base60chars quotient (+ 1 quotient)) base60
let : : remainder : floor-remainder quotient 60
- moddown
- string-append
+ moddown
+ string-append
substring base60chars remainder : + 1 remainder
. base60
floor-quotient quotient 60
-define : base60decode string
+define : base60decode string
let decode : (number 0) (rest string)
if : = 1 : string-length rest
+ (* number 60) : string-index base60chars : string-ref rest 0
- decode
+ decode
+ (* number 60) : string-index base60chars : string-ref rest 0
string-drop rest 1
-define testnumbers
- let
+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
+ loop
append numbers : list : expt 256 exponent
+ 1 exponent
-
+
define : displaywithnewline foo
display foo
newline
-; map displaywithnewline
-; map base60encode
+; map displaywithnewline
+; map base60encode
; map inexact->exact testnumbers
-; map displaywithnewline
-; map base60decode
-; map base60encode
+; map displaywithnewline
+; map base60decode
+; map base60encode
; map inexact->exact testnumbers
-displaywithnewline
- base60encode : list-ref testnumbers : - (length testnumbers) 1
+define kitlogo "
+
+ ...... ................. ............... ...................................
+ ............. ................. ............... ...................................
+ . ............. ................. ............... ...................................
+ ........ ............ ................. ............... ...................................
+ ............. ........... ................. ............... ...................................
+ ............... ........... ................. ............... ...................................
+ .............. .......... ................. ............... ...............
+ ............. ......... .................. ............... ...............
+ ... ............ ......... ................. ............... ...............
+ ........ ............ ........ ............... ............... ...............
+ ............ ........... ....... ............. ............... ...............
+ ................. .. ....... ....... ............. ............... ...............
+ ..................... ......... ...... ............... ............... ...............
+ ................... ........ ...... ................. ............... ...............
+ ................. ........ ..... ................. ............... ...............
+ .............. ....... .... ................. ............... ...............
+ .. ............ ...... .... ................. ............... ...............
+ ........... .......... ..... ... ................. ............... ...............
+ ...................... ....... ... .. ................. ............... ...............
+ ................................ ..... .. .. ................. ............... ...............
+ .......................................... . . . ................. ............... ...............
+ ...................................................... ................. ............... ...............
+
+"
+define kitlogosmall "
+ ... .... .... .... ........
+ ... ... .... .... ........
+ .... .. ....... .... ....
+ .... .. ....... .... ....
+.... .... . .... .... ....
+.............. .... .... ....
+Karlsruher Institut fuer Technologie
+
+"
+
+define : kittify numbers
+ . "Display a list of numbers as Text in a KIT Logo."
+ let*
+ : base60numbers : map base60encode numbers
+ requiredletters : + (length base60numbers) : apply + : map string-length base60numbers
+ logo kitlogosmall
+ charsinlogo : string-count logo #\.
+ requiredlogos : ceiling-quotient requiredletters charsinlogo
+ text : xsubstring logo 0 : * requiredlogos : string-length logo
+ let logofyer
+ : kittified "" ; the new logo with the numbers
+ rawlogo text ; the template
+ nums base60numbers ; the numbers to add to the logo
+ justadded #f ; did I just add a number, in that case, keep one .
+ if : equal? rawlogo ""
+ . kittified
+ let : : s : substring rawlogo 0 1
+ if : not : equal? s "."
+ logofyer
+ string-append kittified s
+ string-drop rawlogo 1
+ . nums
+ . justadded
+ ; else: we have a .
+ if justadded ; need one more . to separate numbers
+ logofyer
+ string-append kittified s
+ string-drop rawlogo 1
+ . nums
+ . #f
+ if : = 0 : length nums ; no more numbers to add, just add a .
+ logofyer
+ string-append kittified s
+ string-drop rawlogo 1
+ . nums
+ . #f
+ ; check whether the last number was completely
+ ; added. In that case drop the number and note that
+ ; we just added a number
+ if : = 0 : string-length : list-ref nums 0
+ logofyer
+ . kittified
+ . rawlogo
+ drop nums 1
+ . #t
+ ; otherwise add the first char of the number to
+ ; kittified and take it away from the number.
+ let : : firstnum : list-ref nums 0
+ logofyer
+ string-append kittified : substring firstnum 0 1
+ string-drop rawlogo 1
+ append (list (string-drop firstnum 1)) : drop nums 1
+ . #f ; not yet done
+
+
+
+
+display : kittify : map inexact->exact testnumbers
+newline
+
+; TODO: unkittify: first take out "Karlsruher Institut fuer Technologie" and all spaces, then split by . and base60decode the result.