This commit is contained in:
Rorik Star Platinum 2025-12-10 20:05:31 +03:00
parent 9ea786eda5
commit 418484b415
7 changed files with 267 additions and 0 deletions

View file

@ -0,0 +1,50 @@
{
"authors": [
"EduardoBautista"
],
"contributors": [
"andrewclarkson",
"andy5995",
"ashleygwilliams",
"ClashTheBunny",
"coriolinus",
"cwhakes",
"darnuria",
"EduardoBautista",
"efx",
"Emerentius",
"ErikSchierboom",
"hunger",
"IanWhitney",
"JIghtuse",
"jonasbn",
"kytrinyx",
"leoyvens",
"lutostag",
"mkantor",
"navossoc",
"nfiles",
"petertseng",
"pminten",
"rofrol",
"sshine",
"stringparser",
"xakon",
"ZapAnton"
],
"files": {
"solution": [
"src/lib.rs",
"Cargo.toml"
],
"test": [
"tests/leap.rs"
],
"example": [
".meta/example.rs"
]
},
"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"
}

2
rust/leap/.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
/target
Cargo.lock

9
rust/leap/Cargo.toml Normal file
View file

@ -0,0 +1,9 @@
[package]
name = "leap"
version = "0.1.0"
edition = "2024"
# Not all libraries from crates.io are available in Exercism's test runner.
# The full list of available libraries is here:
# https://github.com/exercism/rust-test-runner/blob/main/local-registry/Cargo.toml
[dependencies]

89
rust/leap/HELP.md Normal file
View file

@ -0,0 +1,89 @@
# Help
## Running the tests
Execute the tests with:
```bash
$ cargo test
```
All but the first test have been ignored. After you get the first test to
pass, open the tests source file which is located in the `tests` directory
and remove the `#[ignore]` flag from the next test and get the tests to pass
again. Each separate test is a function with `#[test]` flag above it.
Continue, until you pass every test.
If you wish to run _only ignored_ tests without editing the tests source file, use:
```bash
$ cargo test -- --ignored
```
If you are using Rust 1.51 or later, you can run _all_ tests with
```bash
$ cargo test -- --include-ignored
```
To run a specific test, for example `some_test`, you can use:
```bash
$ cargo test some_test
```
If the specific test is ignored, use:
```bash
$ cargo test some_test -- --ignored
```
To learn more about Rust tests refer to the online [test documentation][rust-tests].
[rust-tests]: https://doc.rust-lang.org/book/ch11-02-running-tests.html
## Submitting your solution
You can submit your solution using the `exercism submit src/lib.rs Cargo.toml` 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 [Rust track's documentation](https://exercism.org/docs/tracks/rust)
- The [Rust track's programming category on the forum](https://forum.exercism.org/c/programming/rust)
- [Exercism's programming category on the forum](https://forum.exercism.org/c/programming/5)
- The [Frequently Asked Questions](https://exercism.org/docs/using/faqs)
Should those resources not suffice, you could submit your (incomplete) solution to request mentoring.
## Rust Installation
Refer to the [exercism help page][help-page] for Rust installation and learning
resources.
## Submitting the solution
Generally you should submit all files in which you implemented your solution (`src/lib.rs` in most cases). If you are using any external crates, please consider submitting the `Cargo.toml` file. This will make the review process faster and clearer.
## Feedback, Issues, Pull Requests
Head to [the forum](https://forum.exercism.org/c/programming/rust/) and create a post to provide feedback about an exercise or if you want to help implement new exercises.
Members of the rust track team are happy to help!
The GitHub [track repository][github] is the home for all of the Rust exercises.
If you want to know more about Exercism, take a look at the [contribution guide].
## Submitting Incomplete Solutions
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
[help-page]: https://exercism.org/tracks/rust/learning
[github]: https://github.com/exercism/rust
[contribution guide]: https://exercism.org/docs/community/contributors

68
rust/leap/README.md Normal file
View file

@ -0,0 +1,68 @@
# Leap
Welcome to Leap on Exercism's Rust Track.
If you need help running the tests or submitting your code, check out `HELP.md`.
## 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).
~~~~
## Instructions
Your task is to determine whether a given year is a leap year.
You may use the [`arithmetic remainder` operator](https://doc.rust-lang.org/book/appendix-02-operators.html) to test for divisibility.
## Source
### Created by
- @EduardoBautista
### Contributed to by
- @andrewclarkson
- @andy5995
- @ashleygwilliams
- @ClashTheBunny
- @coriolinus
- @cwhakes
- @darnuria
- @EduardoBautista
- @efx
- @Emerentius
- @ErikSchierboom
- @hunger
- @IanWhitney
- @JIghtuse
- @jonasbn
- @kytrinyx
- @leoyvens
- @lutostag
- @mkantor
- @navossoc
- @nfiles
- @petertseng
- @pminten
- @rofrol
- @sshine
- @stringparser
- @xakon
- @ZapAnton
### Based on
CodeRanch Cattle Drive, Assignment 3 - https://web.archive.org/web/20240907033714/https://coderanch.com/t/718816/Leap

3
rust/leap/src/lib.rs Normal file
View file

@ -0,0 +1,3 @@
pub fn is_leap_year(year: u64) -> bool {
(0 == year % 4) && (0 != year % 100 || 0 == year % 400)
}

46
rust/leap/tests/leap.rs Normal file
View file

@ -0,0 +1,46 @@
use leap::*;
#[test]
fn year_not_divisible_by_4_in_common_year() {
assert!(!is_leap_year(2015));
}
#[test]
fn year_divisible_by_2_not_divisible_by_4_in_common_year() {
assert!(!is_leap_year(1970));
}
#[test]
fn year_divisible_by_4_not_divisible_by_100_in_leap_year() {
assert!(is_leap_year(1996));
}
#[test]
fn year_divisible_by_4_and_5_is_still_a_leap_year() {
assert!(is_leap_year(1960));
}
#[test]
fn year_divisible_by_100_not_divisible_by_400_in_common_year() {
assert!(!is_leap_year(2100));
}
#[test]
fn year_divisible_by_100_but_not_by_3_is_still_not_a_leap_year() {
assert!(!is_leap_year(1900));
}
#[test]
fn year_divisible_by_400_is_leap_year() {
assert!(is_leap_year(2000));
}
#[test]
fn year_divisible_by_400_but_not_by_125_is_still_a_leap_year() {
assert!(is_leap_year(2400));
}
#[test]
fn year_divisible_by_200_not_divisible_by_400_in_common_year() {
assert!(!is_leap_year(1800));
}