# Let us create a sonnet quine! [closed]

There are programs that will output its source code to standard output and do nothing else. They also access no external output. This type of program is known as a quine, and is a common code challenge.

There are poems that have the rhyme scheme a-b-a-b, c-d-c-d, e-f-e-f, g-g. They have 14 lines. They are usually recited in iambic pentameter. They are called sonnets.

You are to write a program/poem that is both a quine and a sonnet.

1. When saying lines, it is recommended that you only say all characters except for: whitespace and ,()[]_"'. This is flexible depending on the language though.
2. Iambic Pentameter means 10 syllables, starting unstressed, and then alternating between stressed and unstressed. This is optional, but will mean more votes.
3. Comments are discouraged, especially to complete rhymes (although comments are very much encouraged if they can be incorporated with the code in the poem in a way that produces dramatic effect.)
4. Cruft is discouraged.

Voters, use the four above guidelines when voting. This is a popularity contest, so the program with the most votes wins.

• This is too easy for languages like Javascript, which (function(){return'('+arguments.callee+')()';})() is a quine. Adding garbage after the return is enough. – Ismael Miguel Mar 16 '14 at 1:04
• I was going to attempt this one, but the restrictions imposed by creating a quine (in most languages) make it too difficult to output any kind of meaningful sonnet. Therefore the question isn't very interesting, since the sonnet will just be rhyming characters such as / and - (slash and dash). – grovesNL Mar 16 '14 at 1:27
• @grovesNL You could create a different sonnet challenge. – PyRulez Mar 16 '14 at 2:02
• @IsmaelMiguel That isn't considered a quine, since you are accessing an external resource (namely, the source code.) – PyRulez Mar 16 '14 at 2:03
• @PyRulez I wasn't trying to be rude. I'm just offering some feedback, which may especially relevant if there aren't many responses for that reason. – grovesNL Mar 16 '14 at 2:08

# Ruby

s = [[/t{1}he_way/,'to_a'],[/\*j{1}ewel/,'*rule']].to_a
puts <<'-'.*(2).tap { |code| s.each { |rule| code.sub! *rule } }, '-'
s = [[/t{1}he_way/,'to_a'],[/\*j{1}ewel/,'*rule']].the_way
puts <<'-'.*(2).tap { |code| s.each { |rule| code.sub! *jewel } }, '-'
-
s = [[/t{1}he_curse/,'reverse'],[/\*c{1}raze/,'*phrase']].reverse
puts <<'-'.*(2).tap { |code| s.each { |phrase| code.sub! *phrase } }, '-'
s = [[/t{1}he_curse/,'reverse'],[/\*c{1}raze/,'*phrase']].the_curse
puts <<'-'.*(2).tap { |code| s.each { |phrase| code.sub! *craze } }, '-'
-
s = [[/r{1}eject/,'collect'],[/\*b{1}ird/,'*word']].collect
puts <<'-'.*(2).tap { |code| s.each { |word| code.sub! *word } }, '-'
s = [[/r{1}eject/,'collect'],[/\*b{1}ird/,'*word']].reject
puts <<'-'.*(2).tap { |code| s.each { |word| code.sub! *bird } }, '-'
-
puts <<'-'.*(2).tap { |code| [[/\*l{1}augh/,'*half']].each { |half| code.sub! *half } }, '-'
puts <<'-'.*(2).tap { |code| [[/\*l{1}augh/,'*half']].each { |half| code.sub! *laugh } }, '-'
-


Don't pronounce the dashes, they're just there to delimit stanzas. Scansion's not perfect but decent.

• +1 "Reverse the Curse!" would be a catchy title. I'm not crazy about the phrasing, but I got more than half a laugh out of this. – Scott Leadley Aug 22 '14 at 3:36