func rice(k, arr) { var t =2**k arr.map {|v| ['1'* (v >> k),'0','%0*s'% (k,as_bin(v % t))].join }.join}func derice(k, str) { gather { var re =Regex('\G(1*)0(.{'+Str(k) +'})','g')while (str =~ re) {|m|take((m[0].len << k)+Num(m[1],2)) } }}for k in (2..6) { say "\nk = #{k}\n" var input = @(0..17).shuffle var enc =rice(k, input) var dec =derice(k, enc) say " input: #{input}" say " rice: #{enc}" say "decoded: #{dec}"assert_eq(dec, input)}