The Twelve Days of Christmas: Difference between revisions
(don't nit pick case distinctions either) |
m (→{{header|REXX}}: adjusted capitalizations. -- ~~~~) |
||
Line 227: | Line 227: | ||
::::* adds a comma after each item in the list |
::::* adds a comma after each item in the list |
||
::::* adds a period at the end of each verse |
::::* adds a period at the end of each verse |
||
::::* |
::::* doesn't capitalize the word '''Twelfth''' |
||
::::* capitalizes the '''French''' word (French hen) |
::::* capitalizes the '''French''' word (French hen) |
||
::::* capitalized '''True Love''' as it refers to |
::::* capitalized '''True Love''' as it refers to a deity |
||
::::* moved the '''and''' (for the last gift) to the last line (as that's the way it's sung) |
::::* moved the '''and''' (for the last gift) to the last line (as that's the way it's sung) |
||
::::* added indentation to make verses look like a poem |
::::* added indentation to make verses look like a poem |
||
Line 236: | Line 236: | ||
pad = left('',20) |
pad = left('',20) |
||
d.1 = 'a partridge in a pear-tree' |
d.1 = 'a partridge in a pear-tree' |
||
d.2 = 'two |
d.2 = 'two Turtle Doves' |
||
d.3 = 'three French |
d.3 = 'three French Hens' |
||
d.4 = 'four |
d.4 = 'four Calling Birds' |
||
d.5 = 'five |
d.5 = 'five Golden Rings' |
||
d.6 = 'six geese a-laying' |
d.6 = 'six geese a-laying' |
||
d.7 = 'seven swans a-swimming' |
d.7 = 'seven swans a-swimming' |
||
Line 248: | Line 248: | ||
d.12 = 'twelve drummers drumming' |
d.12 = 'twelve drummers drumming' |
||
do day=1 for 12 |
do day=1 for 12 |
||
say pad 'On the' word(Nth,day)||word('th',1+(day<4)) ' |
say pad 'On the' word(Nth,day)||word('th',1+(day<4)) 'day of Christmas' |
||
say pad 'My True Love gave to me:' |
say pad 'My True Love gave to me:' |
||
Line 260: | Line 260: | ||
'''output''' |
'''output''' |
||
<pre style="height:55ex;overflow:scroll"> |
<pre style="height:55ex;overflow:scroll"> |
||
On the first |
On the first day of Christmas |
||
My True Love gave to me: |
My True Love gave to me: |
||
A partridge in a pear-tree. |
A partridge in a pear-tree. |
||
On the second |
On the second day of Christmas |
||
My True Love gave to me: |
My True Love gave to me: |
||
Two |
Two Turtle Doves, |
||
And a partridge in a pear-tree. |
And a partridge in a pear-tree. |
||
On the third |
On the third day of Christmas |
||
My True Love gave to me: |
My True Love gave to me: |
||
Three French |
Three French Hens, |
||
Two |
Two Turtle Doves, |
||
And a partridge in a pear-tree. |
And a partridge in a pear-tree. |
||
On the fourth |
On the fourth day of Christmas |
||
My True Love gave to me: |
My True Love gave to me: |
||
Four |
Four Calling Birds, |
||
Three French |
Three French Hens, |
||
Two |
Two Turtle Doves, |
||
And a partridge in a pear-tree. |
And a partridge in a pear-tree. |
||
On the fifth |
On the fifth day of Christmas |
||
My True Love gave to me: |
My True Love gave to me: |
||
Five |
Five Golden Rings, |
||
Four |
Four Calling Birds, |
||
Three French |
Three French Hens, |
||
Two |
Two Turtle Doves, |
||
And a partridge in a pear-tree. |
And a partridge in a pear-tree. |
||
On the sixth |
On the sixth day of Christmas |
||
My True Love gave to me: |
My True Love gave to me: |
||
Six geese a-laying, |
Six geese a-laying, |
||
Five |
Five Golden Rings, |
||
Four |
Four Calling Birds, |
||
Three French |
Three French Hens, |
||
Two |
Two Turtle Doves, |
||
And a partridge in a pear-tree. |
And a partridge in a pear-tree. |
||
On the seventh |
On the seventh day of Christmas |
||
My True Love gave to me: |
My True Love gave to me: |
||
Seven swans a-swimming, |
Seven swans a-swimming, |
||
Six geese a-laying, |
Six geese a-laying, |
||
Five |
Five Golden Rings, |
||
Four |
Four Calling Birds, |
||
Three French |
Three French Hens, |
||
Two |
Two Turtle Doves, |
||
And a partridge in a pear-tree. |
And a partridge in a pear-tree. |
||
On the eighth |
On the eighth day of Christmas |
||
My True Love gave to me: |
My True Love gave to me: |
||
Eight maids a-milking, |
Eight maids a-milking, |
||
Seven swans a-swimming, |
Seven swans a-swimming, |
||
Six geese a-laying, |
Six geese a-laying, |
||
Five |
Five Golden Rings, |
||
Four |
Four Calling Birds, |
||
Three French |
Three French Hens, |
||
Two |
Two Turtle Doves, |
||
And a partridge in a pear-tree. |
And a partridge in a pear-tree. |
||
On the ninth |
On the ninth day of Christmas |
||
My True Love gave to me: |
My True Love gave to me: |
||
Nine ladies dancing, |
Nine ladies dancing, |
||
Line 326: | Line 326: | ||
Seven swans a-swimming, |
Seven swans a-swimming, |
||
Six geese a-laying, |
Six geese a-laying, |
||
Five |
Five Golden Rings, |
||
Four |
Four Calling Birds, |
||
Three French |
Three French Hens, |
||
Two |
Two Turtle Doves, |
||
And a partridge in a pear-tree. |
And a partridge in a pear-tree. |
||
On the tenth |
On the tenth day of Christmas |
||
My True Love gave to me: |
My True Love gave to me: |
||
Ten lords a-leaping, |
Ten lords a-leaping, |
||
Line 339: | Line 339: | ||
Seven swans a-swimming, |
Seven swans a-swimming, |
||
Six geese a-laying, |
Six geese a-laying, |
||
Five |
Five Golden Rings, |
||
Four |
Four Calling Birds, |
||
Three French |
Three French Hens, |
||
Two |
Two Turtle Doves, |
||
And a partridge in a pear-tree. |
And a partridge in a pear-tree. |
||
On the eleventh |
On the eleventh day of Christmas |
||
My True Love gave to me: |
My True Love gave to me: |
||
Eleven pipers piping, |
Eleven pipers piping, |
||
Line 353: | Line 353: | ||
Seven swans a-swimming, |
Seven swans a-swimming, |
||
Six geese a-laying, |
Six geese a-laying, |
||
Five |
Five Golden Rings, |
||
Four |
Four Calling Birds, |
||
Three French |
Three French Hens, |
||
Two |
Two Turtle Doves, |
||
And a partridge in a pear-tree. |
And a partridge in a pear-tree. |
||
On the twelfth |
On the twelfth day of Christmas |
||
My True Love gave to me: |
My True Love gave to me: |
||
Twelve drummers drumming, |
Twelve drummers drumming, |
||
Line 368: | Line 368: | ||
Seven swans a-swimming, |
Seven swans a-swimming, |
||
Six geese a-laying, |
Six geese a-laying, |
||
Five |
Five Golden Rings, |
||
Four |
Four Calling Birds, |
||
Three French |
Three French Hens, |
||
Two |
Two Turtle Doves, |
||
And a partridge in a pear-tree. |
And a partridge in a pear-tree. |
||
</pre> |
</pre> |
Revision as of 03:13, 20 December 2013
Write a program that outputs the lyrics of the Christmas carol The Twelve Days of Christmas. The lyrics can be found here. (You must reproduce the words in the correct order, but case, format, and punctuation are left to your discretion.)
ActionScript
This program outputs the lyrics to a TextField object. The text field can be scrolled using the mouse wheel (Windows only) or by using the up/down arrow keys on the keyboard.
(Although the code can work in Flash Player 9 by replacing the Vectors with Arrays)
<lang ActionScript>package {
import flash.display.Sprite; import flash.events.Event; import flash.events.KeyboardEvent; import flash.events.MouseEvent; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.text.TextFormat; import flash.ui.Keyboard; public class TwelveDaysOfChristmas extends Sprite { private var _textArea:TextField = new TextField(); public function TwelveDaysOfChristmas() { if ( stage ) _init(); else addEventListener(Event.ADDED_TO_STAGE, _init); } private function _init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, _init); _textArea = new TextField(); _textArea.x = 10; _textArea.y = 10; _textArea.autoSize = TextFieldAutoSize.LEFT; _textArea.wordWrap = true; _textArea.width = stage.stageWidth - 20; _textArea.height = stage.stageHeight - 10; _textArea.multiline = true; var format:TextFormat = new TextFormat(); format.size = 14; _textArea.defaultTextFormat = format; var verses:Vector.<String> = new Vector.<String>(12, true); var lines:Vector.<String>; var days:Vector.<String> = new Vector.<String>(12, true); var gifts:Vector.<String> = new Vector.<String>(12, true); days[0] = 'first'; days[1] = 'second'; days[2] = 'third'; days[3] = 'fourth'; days[4] = 'fifth'; days[5] = 'sixth'; days[6] = 'seventh'; days[7] = 'eighth'; days[8] = 'ninth'; days[9] = 'tenth'; days[10] = 'eleventh'; days[11] = 'twelfth'; gifts[0] = 'A partridge in a pear tree'; gifts[1] = 'Two turtle doves'; gifts[2] = 'Three french hens '; gifts[3] = 'Four calling birds'; gifts[4] = 'Five golden rings'; gifts[5] = 'Six geese a-laying'; gifts[6] = 'Seven swans a-swimming'; gifts[7] = 'Eight maids a-milking'; gifts[8] = 'Nine ladies dancing'; gifts[9] = 'Ten lords a-leaping'; gifts[10] = 'Eleven pipers piping'; gifts[11] = 'Twelve drummers drumming'; var i:uint, j:uint, k:uint, line:String, gift:String; for ( i = 0; i < 12; i++ ) { lines = new Vector.<String>(i + 2, true); lines[0] = "On the " + days[i] + " day of Christmas, my true love gave to me"; j = i + 1; k = 0; while ( j-- > 0 ) { gift = gifts[j]; lines[++k] = gift; } verses[i] = lines.join('\n'); if ( i == 0 ) gifts[0] = 'And a partridge in a pear tree'; } var song:String = verses.join('\n\n'); _textArea.text = song; addChild(_textArea); _textArea.addEventListener(MouseEvent.MOUSE_WHEEL, _onMouseWheel); stage.addEventListener(KeyboardEvent.KEY_DOWN, _onKeyDown); } private function _onKeyDown(e:KeyboardEvent):void { if ( e.keyCode == Keyboard.DOWN ) _textArea.y -= 40; else if ( e.keyCode == Keyboard.UP ) _textArea.y += 40; } private function _onMouseWheel(e:MouseEvent):void { _textArea.y += 20 * e.delta; } }
}</lang>
C#
<lang csharp>using System;
public class TwelveDaysOfChristmas {
public static void Main() {
string[] days = new string[12] { "first", "second", "third", "fourth", "fifth", "sixth", "seventh", "eighth", "ninth", "tenth", "eleventh", "twelfth", };
string[] gifts = new string[12] { "A partridge in a pear tree", "Two turtle doves", "Three french hens ", "Four calling birds", "Five golden rings", "Six geese a-laying", "Seven swans a-swimming", "Eight maids a-milking", "Nine ladies dancing", "Ten lords a-leaping", "Eleven pipers piping", "Twelve drummers drumming" };
for ( int i = 0; i < 12; i++ ) {
Console.WriteLine("On the " + days[i] + " day of Christmas, my true love gave to me");
int j = i + 1; while ( j-- > 0 ) { Console.WriteLine(gifts[j]); }
Console.WriteLine();
if ( i == 0 ) gifts[0] = "And a partridge in a pear tree"; }
}
}</lang>
J
<lang j>require 'strings' NB. not necessary for versions > j6
days=: ;:'first second third fourth fifth sixth seventh eighth ninth tenth eleventh twelfth'
gifts=: <;.2 ] 0 : 0 And a partridge in a pear tree. Two turtle doves, Three french hens, Four calling birds, Five golden rings, Six geese a-laying, Seven swans a-swimming, Eight maids a-milking, Nine ladies dancing, Ten lords a-leaping, Eleven pipers piping, Twelve drummers drumming, )
firstline=: 'On the ' , ,&(' day of Christmas, my true love gave to me',LF)
chgFirstVerse=: rplc&('nd a';)&.>@{. , }.
makeVerses=: [: chgFirstVerse (firstline&.> days) ,&.> [: <@;@|.\ gifts"_
singCarol=: LF joinstring makeVerses</lang>
Perl 6
<lang perl6>my @days = <first second third fourth fifth sixth seventh eighth ninth tenth eleventh twelfth>;
my @gifts = lines q:to//;
And a partridge in a pear tree. Two turtle doves, Three french hens, Four calling birds, Five golden rings, Six geese a-laying, Seven swans a-swimming, Eight maids a-milking, Nine ladies dancing, Ten lords a-leaping, Eleven pipers piping, Twelve drummers drumming,
sub nth($n) { say "On the @days[$n] day of Christmas, my true love gave to me:" }
nth(0); say @gifts[0].subst('nd a',);
for 1 ... 11 -> $d {
say ; nth($d); say @gifts[$_] for $d ... 0;
}</lang>
REXX
This version:
- capitalizes the first word of each verse line
- adds a comma after each item in the list
- adds a period at the end of each verse
- doesn't capitalize the word Twelfth
- capitalizes the French word (French hen)
- capitalized True Love as it refers to a deity
- moved the and (for the last gift) to the last line (as that's the way it's sung)
- added indentation to make verses look like a poem
<lang rexx>/*REXX program displays the verses of song "The 12 days of Christmas". */ Nth = 'first second third four fif six seven eigh nin ten eleven twelf' pad = left(,20)
d.1 = 'a partridge in a pear-tree' d.2 = 'two Turtle Doves' d.3 = 'three French Hens' d.4 = 'four Calling Birds' d.5 = 'five Golden Rings' d.6 = 'six geese a-laying' d.7 = 'seven swans a-swimming' d.8 = 'eight maids a-milking' d.9 = 'nine ladies dancing' d.10 = 'ten lords a-leaping' d.11 = 'eleven pipers piping' d.12 = 'twelve drummers drumming' do day=1 for 12 say pad 'On the' word(Nth,day)||word('th',1+(day<4)) 'day of Christmas' say pad 'My True Love gave to me:'
do j=day to 1 by -1; and=word('and', 1+(j\==1 | day==1)) p=space(and d.j || substr(',.', 1+(j==1), 1)) say pad translate(left(p,1))||substr(p,2) end /*j*/ say end /*day*/ /*stick a fork in it, we're done.*/</lang>
output
On the first day of Christmas My True Love gave to me: A partridge in a pear-tree. On the second day of Christmas My True Love gave to me: Two Turtle Doves, And a partridge in a pear-tree. On the third day of Christmas My True Love gave to me: Three French Hens, Two Turtle Doves, And a partridge in a pear-tree. On the fourth day of Christmas My True Love gave to me: Four Calling Birds, Three French Hens, Two Turtle Doves, And a partridge in a pear-tree. On the fifth day of Christmas My True Love gave to me: Five Golden Rings, Four Calling Birds, Three French Hens, Two Turtle Doves, And a partridge in a pear-tree. On the sixth day of Christmas My True Love gave to me: Six geese a-laying, Five Golden Rings, Four Calling Birds, Three French Hens, Two Turtle Doves, And a partridge in a pear-tree. On the seventh day of Christmas My True Love gave to me: Seven swans a-swimming, Six geese a-laying, Five Golden Rings, Four Calling Birds, Three French Hens, Two Turtle Doves, And a partridge in a pear-tree. On the eighth day of Christmas My True Love gave to me: Eight maids a-milking, Seven swans a-swimming, Six geese a-laying, Five Golden Rings, Four Calling Birds, Three French Hens, Two Turtle Doves, And a partridge in a pear-tree. On the ninth day of Christmas My True Love gave to me: Nine ladies dancing, Eight maids a-milking, Seven swans a-swimming, Six geese a-laying, Five Golden Rings, Four Calling Birds, Three French Hens, Two Turtle Doves, And a partridge in a pear-tree. On the tenth day of Christmas My True Love gave to me: Ten lords a-leaping, Nine ladies dancing, Eight maids a-milking, Seven swans a-swimming, Six geese a-laying, Five Golden Rings, Four Calling Birds, Three French Hens, Two Turtle Doves, And a partridge in a pear-tree. On the eleventh day of Christmas My True Love gave to me: Eleven pipers piping, Ten lords a-leaping, Nine ladies dancing, Eight maids a-milking, Seven swans a-swimming, Six geese a-laying, Five Golden Rings, Four Calling Birds, Three French Hens, Two Turtle Doves, And a partridge in a pear-tree. On the twelfth day of Christmas My True Love gave to me: Twelve drummers drumming, Eleven pipers piping, Ten lords a-leaping, Nine ladies dancing, Eight maids a-milking, Seven swans a-swimming, Six geese a-laying, Five Golden Rings, Four Calling Birds, Three French Hens, Two Turtle Doves, And a partridge in a pear-tree.