diff --git a/exercises/practice/twelve-days/.meta/example.py b/exercises/practice/twelve-days/.meta/example.py index 6b24c65b1a..4bde33a40e 100644 --- a/exercises/practice/twelve-days/.meta/example.py +++ b/exercises/practice/twelve-days/.meta/example.py @@ -1,29 +1,28 @@ -GIFTS = ['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 Gold Rings', - 'four Calling Birds', - 'three French Hens', - 'two Turtle Doves', - 'a Partridge in a Pear Tree'] - -ORDINAL = [None, 'first', 'second', 'third', 'fourth', 'fifth', 'sixth', - 'seventh', 'eighth', 'ninth', 'tenth', 'eleventh', 'twelfth'] - - -def verse(day_number): - gifts = GIFTS[-day_number:] - - if len(gifts) > 1: - gifts[:-1] = [', '.join(gifts[:-1])] - - gifts = ', and '.join(gifts) - return f'On the {ORDINAL[day_number]} day of Christmas my true love gave to me: {gifts}.' - - -def recite(start, end): - return [verse(number) for number in range(start, end + 1)] +def recite(start_verse, end_verse): + gifts = ( + "a Partridge in a Pear Tree", + "two Turtle Doves", + "three French Hens", + "four Calling Birds", + "five Gold 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" + ) + ordinals = ( + "first", "second", "third", "fourth", "fifth", "sixth", + "seventh", "eighth", "ninth", "tenth", "eleventh", "twelfth" + ) + + def build_verse(n): + day = n - 1 + verse = f"On the {ordinals[day]} day of Christmas my true love gave to me: " + verse_gifts = [f"and {gifts[0]}" if i == 0 and day > 0 else gifts[i] for i in range(day, -1, -1)] + verse += ", ".join(verse_gifts) + "." + return verse + + return [build_verse(n) for n in range(start_verse, end_verse + 1)] \ No newline at end of file diff --git a/exercises/practice/twelve-days/.meta/exemplar.py b/exercises/practice/twelve-days/.meta/exemplar.py new file mode 100644 index 0000000000..4bde33a40e --- /dev/null +++ b/exercises/practice/twelve-days/.meta/exemplar.py @@ -0,0 +1,28 @@ +def recite(start_verse, end_verse): + gifts = ( + "a Partridge in a Pear Tree", + "two Turtle Doves", + "three French Hens", + "four Calling Birds", + "five Gold 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" + ) + ordinals = ( + "first", "second", "third", "fourth", "fifth", "sixth", + "seventh", "eighth", "ninth", "tenth", "eleventh", "twelfth" + ) + + def build_verse(n): + day = n - 1 + verse = f"On the {ordinals[day]} day of Christmas my true love gave to me: " + verse_gifts = [f"and {gifts[0]}" if i == 0 and day > 0 else gifts[i] for i in range(day, -1, -1)] + verse += ", ".join(verse_gifts) + "." + return verse + + return [build_verse(n) for n in range(start_verse, end_verse + 1)] \ No newline at end of file diff --git a/exercises/practice/twelve-days/read.md b/exercises/practice/twelve-days/read.md new file mode 100644 index 0000000000..7beff48756 --- /dev/null +++ b/exercises/practice/twelve-days/read.md @@ -0,0 +1,9 @@ +# Twelve Days + +Output the lyrics to 'The Twelve Days of Christmas'. + +```text +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. +... \ No newline at end of file diff --git a/exercises/practice/twelve-days/twelve_days.py b/exercises/practice/twelve-days/twelve_days.py index ed87e69c4e..4bde33a40e 100644 --- a/exercises/practice/twelve-days/twelve_days.py +++ b/exercises/practice/twelve-days/twelve_days.py @@ -1,2 +1,28 @@ def recite(start_verse, end_verse): - pass + gifts = ( + "a Partridge in a Pear Tree", + "two Turtle Doves", + "three French Hens", + "four Calling Birds", + "five Gold 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" + ) + ordinals = ( + "first", "second", "third", "fourth", "fifth", "sixth", + "seventh", "eighth", "ninth", "tenth", "eleventh", "twelfth" + ) + + def build_verse(n): + day = n - 1 + verse = f"On the {ordinals[day]} day of Christmas my true love gave to me: " + verse_gifts = [f"and {gifts[0]}" if i == 0 and day > 0 else gifts[i] for i in range(day, -1, -1)] + verse += ", ".join(verse_gifts) + "." + return verse + + return [build_verse(n) for n in range(start_verse, end_verse + 1)] \ No newline at end of file