#!/usr/bin/env ruby puts "btoa Begin" data = $<.read n, e, s, r = data.bytesize, 0, 0, 0 (-n % 4).times { data << 0 } data.bytes do |b| e, s, r = e ^ b, (s + b + 1) & 0xffffffff, (r * 2 + r[31] + b) & 0xffffffff end data.unpack("N*").flat_map do |v| v == 0 ? [?z.ord] : (0..4).map {|i| v / 85**(4 - i) % 85 + 33 } end.pack("C*").scan(/.{1,78}/) { puts $& } puts "btoa End N %d %x E %x S %x R %x" % [n, n, e, s, r]