--000e0cd2e7601fc70b046bc625f8
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
There were a great many solutions to the quiz this week. Let's dive in!
Robert Dober, along with others, had the shortest quine at zero bytes.
Robert also had the longest quine. His quine has methods, including a
module, clean formatting, and is even self checking! It checks its
output by reading the file in $0 to make sure it matches.
Matthew Williams had an interesting take: use Ruby2Ruby to handle
translating a class into text.
require 'rubygems'
require 'ruby2ruby'
class Quine < Object
def initialize
puts "require 'rubygems'\nrequire
'ruby2ruby'\n\n#{Ruby2Ruby.translate self.class}\nQuine.new\n"
end
end
Quine.new
There were also several classic solutions. Pascal Bourguignon was the
first to submit one and it is a great example:
q4;printf a 4;printf a
%s%c,q,a,q;puts",q,a,q;puts
The `q4` is a double quote character. The string containing the
program is stored in `a`. Then that string is given to `printf` and
expanded and quoted here: `a
%s%c`. The shortest classic solution
was 28 bytes, submitted by Matthew Williams:
a
;puts a%%a";puts a%a
All of the classic solutions pass the piping test, suggested by Brian Candler:
cat quine.rb | ruby
This eliminates tricks with __FILE__ and $0. Speaking of tricks with
__FILE__ and $0 there were also many solutions that used those tricks
effectively. Jorrel submitted a good example of this kind of quine:
puts File.readlines __FILE__
It's not the shortest but it illustrates the principles nicely.
James Gray demonstrated an interesting use of `DATA`:
DATA.rewind
puts DATA.read
__END__
A solution using $0 comes from Sebastian Hungerecker:
system"cat",$0
The advantage here is that it doesn't matter if the filename has
spaces or not, but like all of the quines in this category it fails
the piping test because the file is not available for the piped input
stream to read.
And finally, there are the extremely short quines. These usually make
some assumptions about being run on *NIX possibly with some special
setup before hand.
Martin DeMello gets one in at 10 bytes, if you alias `cat` to `c`, 12
bytes if you don't. His solution also requires calling ruby with the
-p option. It also does not pipe successfully but still quite
inventive.
> echo | ruby -p quine.rb
$_
#$0`
Joshua Ballanco, in a beautiful abuse of the rules, gets down to 8
bytes, and it successfully pipes. There is some setup involved, and it
assumes *NIX, so it is unlikely to work 'out of the box' on most
machines.
> cat a
$><<`a`
> ruby a
$><<`a`
> cat a | ruby | ruby
$><<`a`
> which a
/usr/local/bin/a
> cat `which a`
#!/usr/bin/env ruby
puts '$><<`a`'
The environment in which a program reproduces is not easily separable
from the program. When you include all of the implicit assumptions the
requisites for self perpetuation quickly add up. You need version of
Ruby, an operating system with certain features, a file that the code
exists in... In order for a program to truly reproduce it may need to
include a runtime environment, an operating system, maybe even the
hardware to run on. In any case there is not always a dividing line
that can be drawn between an reproducing entity and its environment
without severing reproducibility and that line is usually arbitrary.
I hope you all enjoyed exploring quines this week!
--000e0cd2e7601fc70b046bc625f8
Content-Type: application/x-gzip; name="207.tar.gz"
Content-Disposition: attachment; filename="207.tar.gz"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_fvo2qpts0
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
UEMNNdRQQ7+f/g+uyzJXAHgAAA --000e0cd2e7601fc70b046bc625f8--