From 02a0da74e1a7254d219944ce5c16a52bd0ed8311 Mon Sep 17 00:00:00 2001 From: BNAndras <20251272+BNAndras@users.noreply.github.com> Date: Tue, 26 Nov 2024 22:23:15 -0800 Subject: [PATCH] Add `leap` --- config.json | 8 + exercises/practice/leap/.docs/instructions.md | 3 + exercises/practice/leap/.docs/introduction.md | 16 ++ exercises/practice/leap/.meta/Example.bat | 22 +++ exercises/practice/leap/.meta/config.json | 19 +++ exercises/practice/leap/.meta/tests.toml | 37 +++++ exercises/practice/leap/Leap.bat | 10 ++ exercises/practice/leap/LeapTest.bat | 142 ++++++++++++++++++ 8 files changed, 257 insertions(+) create mode 100644 exercises/practice/leap/.docs/instructions.md create mode 100644 exercises/practice/leap/.docs/introduction.md create mode 100644 exercises/practice/leap/.meta/Example.bat create mode 100644 exercises/practice/leap/.meta/config.json create mode 100644 exercises/practice/leap/.meta/tests.toml create mode 100644 exercises/practice/leap/Leap.bat create mode 100644 exercises/practice/leap/LeapTest.bat diff --git a/config.json b/config.json index fac686b..bbc8a52 100644 --- a/config.json +++ b/config.json @@ -38,6 +38,14 @@ "prerequisites": [], "difficulty": 1 }, + { + "slug": "leap", + "name": "Leap", + "uuid": "9d73247b-7844-4111-9703-4afd78a4218e", + "practices": [], + "prerequisites": [], + "difficulty": 1 + }, { "slug": "raindrops", "name": "Raindrops", 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/Example.bat b/exercises/practice/leap/.meta/Example.bat new file mode 100644 index 0000000..6bfcf90 --- /dev/null +++ b/exercises/practice/leap/.meta/Example.bat @@ -0,0 +1,22 @@ +@echo off +setlocal enabledelayedexpansion + +set "year=%~1" + +set /a "mod4=%year% %% 4" +set /a "mod100=%year% %% 100" +set /a "mod400=%year% %% 400" + +set "result=0" + +if %mod4%==0 ( + if %mod100% neq 0 ( + set result=1 + ) else ( + if %mod400%==0 ( + set result=1 + ) + ) +) + +echo %result% diff --git a/exercises/practice/leap/.meta/config.json b/exercises/practice/leap/.meta/config.json new file mode 100644 index 0000000..e0399cb --- /dev/null +++ b/exercises/practice/leap/.meta/config.json @@ -0,0 +1,19 @@ +{ + "authors": [ + "BNAndras" + ], + "files": { + "solution": [ + "Leap.bat" + ], + "test": [ + "LeapTest.bat" + ], + "example": [ + ".meta/Example.bat" + ] + }, + "blurb": "Determine whether a given year is a leap year.", + "source": "CodeRanch Cattle Drive, Assignment 3", + "source_url": "https://coderanch.com/t/718816/Leap" +} 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.bat b/exercises/practice/leap/Leap.bat new file mode 100644 index 0000000..b161502 --- /dev/null +++ b/exercises/practice/leap/Leap.bat @@ -0,0 +1,10 @@ +@echo off +setlocal enabledelayedexpansion + +set "year=%~1" +set "result=" + +REM Your code goes here + + +echo %result% diff --git a/exercises/practice/leap/LeapTest.bat b/exercises/practice/leap/LeapTest.bat new file mode 100644 index 0000000..9bf5c97 --- /dev/null +++ b/exercises/practice/leap/LeapTest.bat @@ -0,0 +1,142 @@ +@echo off +REM --------------------------------------------------- +REM Leap Unit Testing +REM +REM sUnit Testing Framework version: 0.2 +REM +REM --------------------------------------------------- + +set isTestRunner=false +if "%1" == "test-runner" ( + set isTestRunner=true +) + +:Main + REM Initalize result variable + set "slug=Leap" + + CALL :Initialize + + REM -------------------- + REM Test Case Start \/\/ + REM Resource: https://github.com/exercism/problem-specifications/blob/main/exercises/leap/canonical-data.json + REM -------------------- + set "expected=0" + set "if_success=Test passed: year not divisible by 4 is common year." + set "if_failed=Test failed: year not divisible by 4 is common year." + CALL :Assert "2015" + + set "expected=0" + set "if_success=Test passed: year divisible by 2, not divisible by 4 is common year." + set "if_failed=Test failed: year divisible by 2, not divisible by 4 is common year." + CALL :Assert "1970" + + set "expected=1" + set "if_success=Test passed: year divisible by 4, not divisible by 100 is leap year." + set "if_failed=Test failed: year divisible by 4, not divisible by 100 is leap year." + CALL :Assert "1996" + + set "expected=1" + set "if_success=Test passed: year divisible by 4 and 5 is still a leap year." + set "if_failed=Test failed: year divisible by 4 and 5 is still a leap year." + CALL :Assert "1960" + + set "expected=0" + set "if_success=Test passed: year divisible by 100, not divisible by 400 is common year." + set "if_failed=Test failed: year divisible by 100, not divisible by 400 is common year." + CALL :Assert "2100" + + set "expected=0" + set "if_success=Test passed: year divisible by 100 but not by 3 is still not a leap year." + set "if_failed=Test failed: year divisible by 100 but not by 3 is still not a leap year." + CALL :Assert "1900" + + set "expected=1" + set "if_success=Test passed: year divisible by 400 is leap year." + set "if_failed=Test failed: year divisible by 400 is leap year." + CALL :Assert "2000" + + set "expected=1" + set "if_success=Test passed: year divisible by 400 but not by 125 is still a leap year." + set "if_failed=Test failed: year divisible by 400 but not by 125 is still a leap year." + CALL :Assert "2400" + + set "expected=0" + set "if_success=Test passed: year divisible by 200, not divisible by 400 is common year." + set "if_failed=Test failed: year divisible by 200, not divisible by 400 is common year." + CALL :Assert "1800" + + REM -------------------- + REM Test Case End /\/\/\ + REM -------------------- + + CALL :ResolveStatus + exit /b %errorlevel% +REM End of Main + +REM --------------------------------------------------- +REM Assert [..Parameters(up to 9)] +REM --------------------------------------------------- +GOTO :End REM Prevents the code below from being executed +:Assert +set "stdout=" + +REM Run the program and capture the output then delete the file +set filePath=%slug%.bat +if "%isTestRunner%"=="true" ( + set filePath=.meta\Example.bat +) +set batPath=%~dp0 +CALL %batPath%%filePath% %~1 %~2 %~3 %~4 %~5 %~6 %~7 %~8 %~9 > stdout.bin 2>&1 +set /p stdout=