From: "Brian Schröder" Date: 2005-06-06T02:56:31+09:00 Subject: Re: [QUIZ] [Solution] Whiteout (#34) Hello Group, first let me thank you for this quiz. It is a hillarious idea. Never would have come up with this by myself and it is really cool to see the sourcecode vanish and reappear as if by magic. I first thought to modify the whitout library such, that it includes a loaded program, but then came to the solution to encode the file in the whitespace. The simplest encoding / decoding routines are: # Encode a string into whitespace def encode(string) string.unpack('B*')[0].tr('01', " \n") end # Decode a whitespace encoded string def decode(string) [string.tr(" \n", '01')].pack('B*') end But these make the files quite big. So I added two thing: - Encoding into a eight-sign code with eight different whitespace symbols that ruby doesn't choke on. This may show as non-whitespace in something like an editor or "less", but using "cat" its only whitespace. - On the fly zipping of the files before encoding. The encoding of a encoded file is detected by a four byte whitespace header, so everything works out automatically. I also added a nice user interface using optparse. Though there is some optparse bashing going on at the moment I think it is really a great library. You can find my solution at: http://ruby.brian-schroeder.de/quiz/whiteout/ Have fun with the solution and please don't come after me if you have converted all your ruby code to whitespace and can't get it back. -- http://ruby.brian-schroeder.de/ Guitar chords in different tunings: http://chordlist.brian-schroeder.de/guitar/