@@ -44,6 +44,14 @@
|
||||
"practices": [],
|
||||
"prerequisites": [],
|
||||
"difficulty": 1
|
||||
},
|
||||
{
|
||||
"slug": "leap",
|
||||
"name": "Leap",
|
||||
"uuid": "ed451561-a84a-4b44-a3c9-9a0d9378667c",
|
||||
"practices": [],
|
||||
"prerequisites": [],
|
||||
"difficulty": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
24
exercises/practice/leap/.docs/instructions.md
Normal file
24
exercises/practice/leap/.docs/instructions.md
Normal file
@@ -0,0 +1,24 @@
|
||||
# Description
|
||||
|
||||
Given a year, report if it is a leap year.
|
||||
|
||||
The tricky thing here is that a leap year in the Gregorian calendar occurs:
|
||||
|
||||
```text
|
||||
on every year that is evenly divisible by 4
|
||||
except every year that is evenly divisible by 100
|
||||
unless the year is also evenly divisible by 400
|
||||
```
|
||||
|
||||
For example, 1997 is not a leap year, but 1996 is. 1900 is not a leap
|
||||
year, but 2000 is.
|
||||
|
||||
## Notes
|
||||
|
||||
Though our exercise adopts some very simple rules, there is more to
|
||||
learn!
|
||||
|
||||
For a delightful, four minute explanation of the whole leap year
|
||||
phenomenon, go watch [this youtube video][video].
|
||||
|
||||
[video]: http://www.youtube.com/watch?v=xX96xng7sAE
|
||||
13
exercises/practice/leap/.meta/config.json
Normal file
13
exercises/practice/leap/.meta/config.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"blurb": "Given a year, report if it is a leap year.",
|
||||
"authors": ["larshp"],
|
||||
"contributors": [
|
||||
],
|
||||
"files": {
|
||||
"solution": ["zcl_leap.clas.abap"],
|
||||
"test": ["zcl_leap.clas.testclasses.abap"],
|
||||
"example": [".meta/zcl_leap.clas.abap"]
|
||||
},
|
||||
"source": "JavaRanch Cattle Drive, exercise 3",
|
||||
"source_url": "http://www.javaranch.com/leap.jsp"
|
||||
}
|
||||
22
exercises/practice/leap/.meta/zcl_leap.clas.abap
Normal file
22
exercises/practice/leap/.meta/zcl_leap.clas.abap
Normal file
@@ -0,0 +1,22 @@
|
||||
CLASS zcl_leap DEFINITION PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
METHODS leap
|
||||
IMPORTING
|
||||
year TYPE i
|
||||
RETURNING
|
||||
VALUE(result) TYPE abap_bool.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS zcl_leap IMPLEMENTATION.
|
||||
|
||||
METHOD leap.
|
||||
IF year MOD 4 = 0 AND year MOD 100 <> 0.
|
||||
result = abap_true.
|
||||
ELSEIF year MOD 400 = 0.
|
||||
result = abap_true.
|
||||
ELSE.
|
||||
result = abap_false.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
16
exercises/practice/leap/zcl_leap.clas.abap
Normal file
16
exercises/practice/leap/zcl_leap.clas.abap
Normal file
@@ -0,0 +1,16 @@
|
||||
CLASS zcl_leap DEFINITION PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
METHODS leap
|
||||
IMPORTING
|
||||
year TYPE i
|
||||
RETURNING
|
||||
VALUE(result) TYPE abap_bool.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS zcl_leap IMPLEMENTATION.
|
||||
|
||||
METHOD leap.
|
||||
* add solution here
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
87
exercises/practice/leap/zcl_leap.clas.testclasses.abap
Normal file
87
exercises/practice/leap/zcl_leap.clas.testclasses.abap
Normal file
@@ -0,0 +1,87 @@
|
||||
CLASS ltcl_leap DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL.
|
||||
|
||||
PRIVATE SECTION.
|
||||
DATA cut TYPE REF TO zcl_leap.
|
||||
METHODS setup.
|
||||
METHODS test_2015 FOR TESTING.
|
||||
METHODS test_1970 FOR TESTING.
|
||||
METHODS test_1996 FOR TESTING.
|
||||
METHODS test_1960 FOR TESTING.
|
||||
METHODS test_2100 FOR TESTING.
|
||||
METHODS test_1900 FOR TESTING.
|
||||
METHODS test_2000 FOR TESTING.
|
||||
METHODS test_2400 FOR TESTING.
|
||||
METHODS test_1800 FOR TESTING.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltcl_leap IMPLEMENTATION.
|
||||
|
||||
METHOD setup.
|
||||
cut = NEW zcl_leap( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD test_2015.
|
||||
* year not divisible by 4 in common year
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = cut->leap( 2015 )
|
||||
exp = abap_false ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD test_1970.
|
||||
* year divisible by 2, not divisible by 4 in common year
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = cut->leap( 1970 )
|
||||
exp = abap_false ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD test_1996.
|
||||
* year divisible by 4, not divisible by 100 in leap year
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = cut->leap( 1996 )
|
||||
exp = abap_true ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD test_1960.
|
||||
* year divisible by 4 and 5 is still a leap year
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = cut->leap( 1960 )
|
||||
exp = abap_true ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD test_2100.
|
||||
* year divisible by 100, not divisible by 400 in common year
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = cut->leap( 2100 )
|
||||
exp = abap_false ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD test_1900.
|
||||
* year divisible by 100 but not by 3 is still not a leap year
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = cut->leap( 1900 )
|
||||
exp = abap_false ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD test_2000.
|
||||
* year divisible by 400 is leap year
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = cut->leap( 2000 )
|
||||
exp = abap_true ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD test_2400.
|
||||
* year divisible by 400 but not by 125 is still a leap year
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = cut->leap( 2400 )
|
||||
exp = abap_true ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD test_1800.
|
||||
* year divisible by 200, not divisible by 400 in common year
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = cut->leap( 1800 )
|
||||
exp = abap_false ).
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user