Browse Source

Leap year

master
Julio Biason 3 years ago
parent
commit
f4af7cc147
  1. 26
      racket/leap/.exercism/config.json
  2. 1
      racket/leap/.exercism/metadata.json
  3. 39
      racket/leap/HELP.md
  4. 47
      racket/leap/README.md
  5. 19
      racket/leap/leap-test.rkt
  6. 22
      racket/leap/leap.rkt

26
racket/leap/.exercism/config.json

@ -0,0 +1,26 @@
{
"blurb": "Given a year, report if it is a leap year.",
"authors": [
"arguello"
],
"contributors": [
"mbertheau",
"PurityControl",
"robertpostill",
"timotheosh",
"yurrriq"
],
"files": {
"solution": [
"leap.rkt"
],
"test": [
"leap-test.rkt"
],
"example": [
".meta/example.rkt"
]
},
"source": "JavaRanch Cattle Drive, exercise 3",
"source_url": "http://www.javaranch.com/leap.jsp"
}

1
racket/leap/.exercism/metadata.json

@ -0,0 +1 @@
{"track":"racket","exercise":"leap","id":"282753f427d94beda313070ecdb17f3b","url":"https://exercism.org/tracks/racket/exercises/leap","handle":"JBiason","is_requester":true,"auto_approve":false}

39
racket/leap/HELP.md

@ -0,0 +1,39 @@
# Help
## Running the tests
To run the test through DrRacket, simply open the test file and click the 'Run' button in the upper right.
To run the test from the command line, run the test from the exercise directory with the following command:
```
raco test <exercise>-test.rkt
```
where `<exercise>` should be replaced with the exercise's slug.
## Submitting your solution
You can submit your solution using the `exercism submit leap.rkt` command.
This command will upload your solution to the Exercism website and print the solution page's URL.
It's possible to submit an incomplete solution which allows you to:
- See how others have completed the exercise
- Request help from a mentor
## Need to get help?
If you'd like help solving the exercise, check the following pages:
- The [Racket track's documentation](https://exercism.org/docs/tracks/racket)
- [Exercism's support channel on gitter](https://gitter.im/exercism/support)
- The [Frequently Asked Questions](https://exercism.org/docs/using/faqs)
Should those resources not suffice, you could submit your (incomplete) solution to request mentoring.
To get help if you're having trouble, you can use one of the following resources:
- [The Racket Reference](http://docs.racket-lang.org/reference/index.html)
- [/r/racket](https://www.reddit.com/r/racket) is the Racket subreddit.
- [StackOverflow](http://stackoverflow.com/questions/tagged/racket) can be used to search for your problem and see if it has been answered already. You can also ask and answer questions.

47
racket/leap/README.md

@ -0,0 +1,47 @@
# Leap
Welcome to Leap on Exercism's Racket Track.
If you need help running the tests or submitting your code, check out `HELP.md`.
## Instructions
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
## Source
### Created by
- @arguello
### Contributed to by
- @mbertheau
- @PurityControl
- @robertpostill
- @timotheosh
- @yurrriq
### Based on
JavaRanch Cattle Drive, exercise 3 - http://www.javaranch.com/leap.jsp

19
racket/leap/leap-test.rkt

@ -0,0 +1,19 @@
#lang racket/base
(require "leap.rkt")
(module+ test
(require rackunit rackunit/text-ui)
(define suite
(test-suite
"leap tests"
(test-eqv? "vanilla-leap-year" (leap-year? 1996) #t)
(test-eqv? "any-old-year" (leap-year? 2015)#f)
(test-eqv? "non-leap-even-year" (leap-year? 1998) #f)
(test-eqv? "century" (leap-year? 2100)#f)
(test-eqv? "not an exceptional-century" (leap-year? 1800) #f)
(test-eqv? "exceptional-century" (leap-year? 2000) #t)))
(run-tests suite))

22
racket/leap/leap.rkt

@ -0,0 +1,22 @@
#lang racket
(provide leap-year?)
(define (div-by-4 year)
(= 0 (remainder year 4))
)
(define (not-div-by-100 year)
(not (= 0 (remainder year 100)))
)
(define (div-by-400 year)
(= 0 (remainder year 400))
)
(define (leap-year? year)
(and (div-by-4 year)
(or (div-by-400 year)
(not-div-by-100 year))
)
)
Loading…
Cancel
Save