diff --git a/config.json b/config.json index 2d4bf74..29929b0 100644 --- a/config.json +++ b/config.json @@ -94,6 +94,14 @@ "practices": [], "prerequisites": [], "difficulty": 2 + }, + { + "slug": "leap", + "name": "Leap", + "uuid": "fe4c3a99-0d1e-4476-a9c6-73b676a7a427", + "practices": [], + "prerequisites": [], + "difficulty": 2 } ] }, diff --git a/exercises/practice/leap/.busted b/exercises/practice/leap/.busted new file mode 100644 index 0000000..86b84e7 --- /dev/null +++ b/exercises/practice/leap/.busted @@ -0,0 +1,5 @@ +return { + default = { + ROOT = { '.' } + } +} diff --git a/exercises/practice/leap/.docs/instructions.md b/exercises/practice/leap/.docs/instructions.md new file mode 100644 index 0000000..b14f856 --- /dev/null +++ b/exercises/practice/leap/.docs/instructions.md @@ -0,0 +1,3 @@ +# Instructions + +Your task is to determine whether a given year is a leap year. diff --git a/exercises/practice/leap/.docs/introduction.md b/exercises/practice/leap/.docs/introduction.md new file mode 100644 index 0000000..4ffd2da --- /dev/null +++ b/exercises/practice/leap/.docs/introduction.md @@ -0,0 +1,16 @@ +# Introduction + +A leap year (in the Gregorian calendar) occurs: + +- In every year that is evenly divisible by 4. +- Unless the year is evenly divisible by 100, in which case it's only a leap year if the year is also evenly divisible by 400. + +Some examples: + +- 1997 was not a leap year as it's not divisible by 4. +- 1900 was not a leap year as it's not divisible by 400. +- 2000 was a leap year! + +~~~~exercism/note +For a delightful, four-minute explanation of the whole phenomenon of leap years, check out [this YouTube video](https://www.youtube.com/watch?v=xX96xng7sAE). +~~~~ diff --git a/exercises/practice/leap/.meta/config.json b/exercises/practice/leap/.meta/config.json new file mode 100644 index 0000000..c6694c0 --- /dev/null +++ b/exercises/practice/leap/.meta/config.json @@ -0,0 +1,19 @@ +{ + "authors": [ + "glennj" + ], + "files": { + "solution": [ + "leap.moon" + ], + "test": [ + "leap_spec.moon" + ], + "example": [ + ".meta/example.moon" + ] + }, + "blurb": "Determine whether a given year is a leap year.", + "source": "CodeRanch Cattle Drive, Assignment 3", + "source_url": "https://web.archive.org/web/20240907033714/https://coderanch.com/t/718816/Leap" +} diff --git a/exercises/practice/leap/.meta/example.moon b/exercises/practice/leap/.meta/example.moon new file mode 100644 index 0000000..bb291c2 --- /dev/null +++ b/exercises/practice/leap/.meta/example.moon @@ -0,0 +1,6 @@ +leap_year = (year) -> + is_divisible_by = (num) -> year % num == 0 + + (is_divisible_by 4) and (not is_divisible_by 100) or (is_divisible_by 400) + +return leap_year diff --git a/exercises/practice/leap/.meta/spec_generator.moon b/exercises/practice/leap/.meta/spec_generator.moon new file mode 100644 index 0000000..10bdd86 --- /dev/null +++ b/exercises/practice/leap/.meta/spec_generator.moon @@ -0,0 +1,5 @@ +{ + module_name: 'is_leap_year', + generate_test: (case, level) -> + indent "assert.is_#{case.expected} is_leap_year #{case.input.year}", level +} diff --git a/exercises/practice/leap/.meta/tests.toml b/exercises/practice/leap/.meta/tests.toml new file mode 100644 index 0000000..ce6ba32 --- /dev/null +++ b/exercises/practice/leap/.meta/tests.toml @@ -0,0 +1,37 @@ +# This is an auto-generated file. +# +# Regenerating this file via `configlet sync` will: +# - Recreate every `description` key/value pair +# - Recreate every `reimplements` key/value pair, where they exist in problem-specifications +# - Remove any `include = true` key/value pair (an omitted `include` key implies inclusion) +# - Preserve any other key/value pair +# +# As user-added comments (using the # character) will be removed when this file +# is regenerated, comments can be added via a `comment` key. + +[6466b30d-519c-438e-935d-388224ab5223] +description = "year not divisible by 4 in common year" + +[ac227e82-ee82-4a09-9eb6-4f84331ffdb0] +description = "year divisible by 2, not divisible by 4 in common year" + +[4fe9b84c-8e65-489e-970b-856d60b8b78e] +description = "year divisible by 4, not divisible by 100 in leap year" + +[7fc6aed7-e63c-48f5-ae05-5fe182f60a5d] +description = "year divisible by 4 and 5 is still a leap year" + +[78a7848f-9667-4192-ae53-87b30c9a02dd] +description = "year divisible by 100, not divisible by 400 in common year" + +[9d70f938-537c-40a6-ba19-f50739ce8bac] +description = "year divisible by 100 but not by 3 is still not a leap year" + +[42ee56ad-d3e6-48f1-8e3f-c84078d916fc] +description = "year divisible by 400 is leap year" + +[57902c77-6fe9-40de-8302-587b5c27121e] +description = "year divisible by 400 but not by 125 is still a leap year" + +[c30331f6-f9f6-4881-ad38-8ca8c12520c1] +description = "year divisible by 200, not divisible by 400 in common year" diff --git a/exercises/practice/leap/leap.moon b/exercises/practice/leap/leap.moon new file mode 100644 index 0000000..454b9ee --- /dev/null +++ b/exercises/practice/leap/leap.moon @@ -0,0 +1,4 @@ +leap_year = (year) -> + error 'Implement me' + +return leap_year diff --git a/exercises/practice/leap/leap_spec.moon b/exercises/practice/leap/leap_spec.moon new file mode 100644 index 0000000..b60f7a6 --- /dev/null +++ b/exercises/practice/leap/leap_spec.moon @@ -0,0 +1,29 @@ +is_leap_year = require 'leap' + +describe 'leap', -> + it 'year not divisible by 4 in common year', -> + assert.is_false is_leap_year 2015 + + pending 'year divisible by 2, not divisible by 4 in common year', -> + assert.is_false is_leap_year 1970 + + pending 'year divisible by 4, not divisible by 100 in leap year', -> + assert.is_true is_leap_year 1996 + + pending 'year divisible by 4 and 5 is still a leap year', -> + assert.is_true is_leap_year 1960 + + pending 'year divisible by 100, not divisible by 400 in common year', -> + assert.is_false is_leap_year 2100 + + pending 'year divisible by 100 but not by 3 is still not a leap year', -> + assert.is_false is_leap_year 1900 + + pending 'year divisible by 400 is leap year', -> + assert.is_true is_leap_year 2000 + + pending 'year divisible by 400 but not by 125 is still a leap year', -> + assert.is_true is_leap_year 2400 + + pending 'year divisible by 200, not divisible by 400 in common year', -> + assert.is_false is_leap_year 1800