diff --git a/.travis.yml b/.travis.yml index c15462c68..7de79519d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,6 +6,7 @@ script: - "sh ./_test/ensure-stubs-compile.sh" - "sh ./_test/count-ignores.sh" - "./bin/fetch-configlet" +- "sh ./_test/ensure-readmes-are-updated.sh" - "./bin/configlet lint ." sudo: false rust: diff --git a/_test/ensure-readmes-are-updated.sh b/_test/ensure-readmes-are-updated.sh new file mode 100644 index 000000000..2ef2cce3a --- /dev/null +++ b/_test/ensure-readmes-are-updated.sh @@ -0,0 +1,40 @@ +if [ ! -x bin/configlet ]; then + echo "Improper configuration; configlet should exist in bin/ when this script is run" + echo "Ping a Rust track maintainer to fix this" + exit 1 +fi + +if [ ! -d "problem-specifications" ]; then + git clone https://github.com/exercism/problem-specifications.git problem-specifications +fi + +newline=$'\n ' + +missing_readmes="" +wrong_readmes="" +for exercise in $(git diff --name-only master..$(git rev-parse --abbrev-ref HEAD) | grep exercises/ | cut -d'/' -f2 -s | sort -fu); do + echo "Checking readme for $exercise" + readme_path="exercises/${exercise}/README.md" + if [ ! -f $readme_path ]; then + missing_readmes="$missing_readmes$newline$exercise" + else + existing_readme_checksum=$(md5sum $readme_path | cut -d' ' -f1) + # generate the new README + bin/configlet generate . --only "$exercise" --spec-path "problem-specifications" + generated_readme_checksum=$(md5sum $readme_path | cut -d' ' -f1) + + if [ $existing_readme_checksum != $generated_readme_checksum ]; then + wrong_readmes="$wrong_readmes$newline$exercise" + fi + fi +done + +if [ -n "$missing_readmes" ]; then + echo "Exercises missing README.md:$missing_readmes" +fi +if [ -n "$wrong_readmes" ]; then + echo "Exercises with out-of-date README.md:$wrong_readmes" +fi +if [ -n "$missing_readmes" -o -n "$wrong_readmes" ]; then + exit 1 +fi diff --git a/exercises/all-your-base/README.md b/exercises/all-your-base/README.md deleted file mode 100644 index dad233b61..000000000 --- a/exercises/all-your-base/README.md +++ /dev/null @@ -1,68 +0,0 @@ -# All Your Base - -Convert a number, represented as a sequence of digits in one base, to any other base. - -Implement general base conversion. Given a number in base **a**, -represented as a sequence of digits, convert it to base **b**. - -## Note - -- Try to implement the conversion yourself. - Do not use something else to perform the conversion for you. - -## About [Positional Notation](https://en.wikipedia.org/wiki/Positional_notation) - -In positional notation, a number in base **b** can be understood as a linear -combination of powers of **b**. - -The number 42, *in base 10*, means: - -(4 * 10^1) + (2 * 10^0) - -The number 101010, *in base 2*, means: - -(1 * 2^5) + (0 * 2^4) + (1 * 2^3) + (0 * 2^2) + (1 * 2^1) + (0 * 2^0) - -The number 1120, *in base 3*, means: - -(1 * 3^3) + (1 * 3^2) + (2 * 3^1) + (0 * 3^0) - -I think you got the idea! - -*Yes. Those three numbers above are exactly the same. Congratulations!* - -## Rust Installation - -Refer to the [exercism help page][help-page] for Rust installation and learning -resources. - -## Writing the Code - -Execute the tests with: - -```bash -$ cargo test -``` - -All but the first test have been ignored. After you get the first test to -pass, remove the ignore flag (`#[ignore]`) from the next test and get the tests -to pass again. The test file is located in the `tests` directory. You can -also remove the ignore flag from all the tests to get them to run all at once -if you wish. - -Make sure to read the [Modules](https://doc.rust-lang.org/book/second-edition/ch07-00-modules.html) chapter if you -haven't already, it will help you with organizing your files. - -## Feedback, Issues, Pull Requests - -The [exercism/rust](https://github.com/exercism/rust) repository on GitHub is the home for all of the Rust exercises. If you have feedback about an exercise, or want to help implement new exercises, head over there and create an issue. Members of the [rust track team](https://github.com/orgs/exercism/teams/rust) are happy to help! - -If you want to know more about Exercism, take a look at the [contribution guide](https://github.com/exercism/docs/blob/master/contributing-to-language-tracks/README.md). - -[help-page]: http://exercism.io/languages/rust -[modules]: https://doc.rust-lang.org/book/second-edition/ch07-00-modules.html -[cargo]: https://doc.rust-lang.org/book/second-edition/ch14-00-more-about-cargo.html - - -## Submitting Incomplete Solutions -It's possible to submit an incomplete solution so you can see how others have completed the exercise. diff --git a/exercises/crypto-square/README.md b/exercises/crypto-square/README.md index c1c6dba93..e02febfdc 100644 --- a/exercises/crypto-square/README.md +++ b/exercises/crypto-square/README.md @@ -107,3 +107,4 @@ J Dalbey's Programming Practice problems [http://users.csc.calpoly.edu/~jdalbey/ ## Submitting Incomplete Solutions It's possible to submit an incomplete solution so you can see how others have completed the exercise. +bogus line diff --git a/exercises/decimal/README.md b/exercises/decimal/README.md deleted file mode 100644 index af8848509..000000000 --- a/exercises/decimal/README.md +++ /dev/null @@ -1,60 +0,0 @@ -# Decimal - -Implement an arbitrary-precision `Decimal` class. - -Floating point numbers are the most common representation of non-integer real numbers in computing, and they're a common standard defined by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_754). They're very flexible and versatile, but they do have some limitations. Famously, in floating point arithmetic, [`0.1 + 0.2 != 0.3`](http://0.30000000000000004.com/). - -The solution to this issue is to find another, lossless way to model arbitrary-precision non-integer reals. This may be less efficient in terms of memory or processing speed than floating point numbers; the goal is to provide exact results. - -Despite `Decimal` being a custom type, we should still be able to treat them as numbers: the `==`, `<`, `>`, `+`, `-`, and `*` operators should all work as expected on Decimals. For expediency, you are not required to implement division, as arbitrary-precision division can very quickly get out of hand. (How do you represent arbitrary-precision `1/3`?) - -In Rust, the way to get these operations on custom types is to implement the relevant traits for your custom object. In particular, you'll need to implement at least `PartialEq`, `PartialOrd`, `Add`, `Sub`, and `Mul`. Strictly speaking, given that the decimal numbers form a total ordering, you should also implement `Eq` and `Ord`, though those traits are not checked for by these tests. - -# Note - -It would be very easy to implement this exercise by using the [bigdecimal](https://crates.io/crates/bigdecimal) crate. Don't do that; implement this yourself. - -# Hints - -- Instead of implementing arbitrary-precision arithmetic from scratch, consider building your type on top of the [num_bigint](https://crates.io/crates/num-bigint) crate. -- You might be able to [derive](https://doc.rust-lang.org/book/first-edition/traits.html#deriving) some of the required traits. -- `Decimal` is assumed to be a signed type. You do not have to create a separate unsigned type, though you may do so as an implementation detail if you so choose. - -## Rust Installation - -Refer to the [exercism help page][help-page] for Rust installation and learning -resources. - -## Writing the Code - -Execute the tests with: - -```bash -$ cargo test -``` - -All but the first test have been ignored. After you get the first test to -pass, remove the ignore flag (`#[ignore]`) from the next test and get the tests -to pass again. The test file is located in the `tests` directory. You can -also remove the ignore flag from all the tests to get them to run all at once -if you wish. - -Make sure to read the [Modules](https://doc.rust-lang.org/book/second-edition/ch07-00-modules.html) chapter if you -haven't already, it will help you with organizing your files. - -## Feedback, Issues, Pull Requests - -The [exercism/rust](https://github.com/exercism/rust) repository on GitHub is the home for all of the Rust exercises. If you have feedback about an exercise, or want to help implement new exercises, head over there and create an issue. Members of the [rust track team](https://github.com/orgs/exercism/teams/rust) are happy to help! - -If you want to know more about Exercism, take a look at the [contribution guide](https://github.com/exercism/docs/blob/master/contributing-to-language-tracks/README.md). - -[help-page]: http://exercism.io/languages/rust -[modules]: https://doc.rust-lang.org/book/second-edition/ch07-00-modules.html -[cargo]: https://doc.rust-lang.org/book/second-edition/ch14-00-more-about-cargo.html - -## Source - -Peter Goodspeed-Niklaus - -## Submitting Incomplete Solutions -It's possible to submit an incomplete solution so you can see how others have completed the exercise. diff --git a/exercises/hello-world/README.md b/exercises/hello-world/README.md index 19605ab85..bc1ec4949 100644 --- a/exercises/hello-world/README.md +++ b/exercises/hello-world/README.md @@ -52,3 +52,4 @@ This is an exercise to introduce users to using Exercism [http://en.wikipedia.or ## Submitting Incomplete Solutions It's possible to submit an incomplete solution so you can see how others have completed the exercise. +another bogus line diff --git a/exercises/rectangles/README.md b/exercises/rectangles/README.md index 16d4d07ae..71cc5c4eb 100644 --- a/exercises/rectangles/README.md +++ b/exercises/rectangles/README.md @@ -37,27 +37,27 @@ The above diagram contains 6 rectangles: ``` ```text - - + + +--+ | | +--+ ``` ```text - - + + +--+ | | +--+ ``` ```text - - ++ - ++ - - + + ++ + ++ + + ``` You may assume that the input is always a proper rectangle (i.e. the length of diff --git a/exercises/rectangles/src/mod.rs b/exercises/rectangles/src/mod.rs new file mode 100644 index 000000000..e69de29bb diff --git a/exercises/two-bucket/README.md b/exercises/two-bucket/README.md index 31638f8bf..f6620a78a 100644 --- a/exercises/two-bucket/README.md +++ b/exercises/two-bucket/README.md @@ -7,15 +7,15 @@ Since this mathematical problem is fairly subject to interpretation / individual To help, the tests provide you with which bucket to fill first. That means, when starting with the larger bucket full, you are NOT allowed at any point to have the smaller bucket full and the larger bucket empty (aka, the opposite starting point); that would defeat the purpose of comparing both approaches! Your program will take as input: -- the size of bucket one, passed as a numeric value -- the size of bucket two, passed as a numeric value -- the desired number of liters to reach, passed as a numeric value -- which bucket to fill first, passed as a Bucket (either Bucket::One or Bucket::Two) +- the size of bucket one +- the size of bucket two +- the desired number of liters to reach +- which bucket to fill first, either bucket one or bucket two Your program should determine: -- the total number of "moves" it should take to reach the desired number of liters, including the first fill - expects a numeric value -- which bucket should end up with the desired number of liters (let's say this is bucket A) - expects a Bucket (either Bucket::One or Bucket::Two) -- how many liters are left in the other bucket (bucket B) - expects a numeric value +- the total number of "moves" it should take to reach the desired number of liters, including the first fill +- which bucket should end up with the desired number of liters (let's say this is bucket A) - either bucket one or bucket two +- how many liters are left in the other bucket (bucket B) Note: any time a change is made to either or both buckets counts as one (1) move. diff --git a/exercises/two-bucket/src/mod.rs b/exercises/two-bucket/src/mod.rs new file mode 100644 index 000000000..e69de29bb