Posted to tcl by aspect at Fri Jan 06 00:52:55 GMT 2017view raw

  1. #!/usr/bin/env tclsh
  2. #
  3.  
  4. package require zlib
  5.  
  6. set algos {
  7. "compress 9" decompress
  8. "deflate 9" inflate
  9. "gzip -level 9" gunzip
  10. }
  11.  
  12. set output [read stdin]
  13.  
  14. set sizes [dict map {c _} $algos {
  15. string length [zlib {*}[linsert $c 1 $output]]
  16. }]
  17.  
  18. set sizes [lsort -stride 2 -index 1 -integer $sizes]
  19.  
  20. set c [lindex $sizes 0]
  21. set d [dict get $algos $c]
  22.  
  23. set b64cstr [binary encode base64 [zlib {*}[linsert $c 1 $output]]]
  24.  
  25. set pgm "package require zlib\n"
  26. append pgm "puts \[zlib $d \[binary decode base64 [list $b64cstr]\]\]"
  27. puts "# [string length $pgm] bytes (excluding final newline):"
  28. puts $pgm
  29.  
  30. # output for the old lady:
  31. # # 384 bytes (excluding final newline):
  32. # package require zlib
  33. # puts [zlib inflate [binary decode base64 5ZCxTsQwEET7fMV016B8B3RIRKLey/psg/Ge7Jys/D3ei0+5oBRUCERn7T7PzszgTDIolEEREhiBeEZxglwoBCmGQTiFuQe6J7DEw4T3KKUyM7Izd9zkaFL0oaLPJjk6ZyUOIYC96btu+NaxfPZskooMKliStzboJjLunm/t7WOuPKq0Wnz54sg0OUyCkabRXWfN5M/kOfrEKvFYj9AxXxKrmUa0/b513WyNr938wqD17PXYB1kfzaK6SVqB/aDjQq6+b539+U5YrCq8qhrBid02Utf7jfBCrq5buf+pOycpm5u3+pEhJ4xyqdO++wQ=]]
  34.