mirror of
https://github.com/correl/elm.git
synced 2024-12-22 19:17:27 +00:00
Merge pull request #156 from exercism/generate-readme
Generate static exercise README templates
This commit is contained in:
commit
3a2621af3a
33 changed files with 1928 additions and 0 deletions
16
config/exercise_readme.go.tmpl
Normal file
16
config/exercise_readme.go.tmpl
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
# {{ .Spec.Name }}
|
||||||
|
|
||||||
|
{{ .Spec.Description -}}
|
||||||
|
{{- with .Hints }}
|
||||||
|
{{ . }}
|
||||||
|
{{ end }}
|
||||||
|
{{- with .TrackInsert }}
|
||||||
|
{{ . }}
|
||||||
|
{{ end }}
|
||||||
|
{{- with .Spec.Credits -}}
|
||||||
|
## Source
|
||||||
|
|
||||||
|
{{ . }}
|
||||||
|
{{ end }}
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
65
exercises/accumulate/README.md
Normal file
65
exercises/accumulate/README.md
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
# Accumulate
|
||||||
|
|
||||||
|
Implement the `accumulate` operation, which, given a collection and an
|
||||||
|
operation to perform on each element of the collection, returns a new
|
||||||
|
collection containing the result of applying that operation to each element of
|
||||||
|
the input collection.
|
||||||
|
|
||||||
|
Given the collection of numbers:
|
||||||
|
|
||||||
|
- 1, 2, 3, 4, 5
|
||||||
|
|
||||||
|
And the operation:
|
||||||
|
|
||||||
|
- square a number (`x => x * x`)
|
||||||
|
|
||||||
|
Your code should be able to produce the collection of squares:
|
||||||
|
|
||||||
|
- 1, 4, 9, 16, 25
|
||||||
|
|
||||||
|
Check out the test suite to see the expected function signature.
|
||||||
|
|
||||||
|
## Restrictions
|
||||||
|
|
||||||
|
Keep your hands off that collect/map/fmap/whatchamacallit functionality
|
||||||
|
provided by your standard library!
|
||||||
|
Solve this one yourself using other basic tools instead.
|
||||||
|
|
||||||
|
Lisp specific: it's perfectly fine to use `MAPCAR` or the equivalent,
|
||||||
|
as this is idiomatic Lisp, not a library function.
|
||||||
|
|
||||||
|
## Elm Installation
|
||||||
|
|
||||||
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||||
|
installation and learning resources.
|
||||||
|
|
||||||
|
## Writing the Code
|
||||||
|
|
||||||
|
The first time you start an exercise, you'll need to ensure you have the
|
||||||
|
appropriate dependencies installed.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
Automatically run tests again when you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||||
|
calls from each test until you get them all passing!
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
Conversation with James Edward Gray II [https://twitter.com/jeg2](https://twitter.com/jeg2)
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
67
exercises/allergies/README.md
Normal file
67
exercises/allergies/README.md
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
# Allergies
|
||||||
|
|
||||||
|
Given a person's allergy score, determine whether or not they're allergic to a given item, and their full list of allergies.
|
||||||
|
|
||||||
|
An allergy test produces a single numeric score which contains the
|
||||||
|
information about all the allergies the person has (that they were
|
||||||
|
tested for).
|
||||||
|
|
||||||
|
The list of items (and their value) that were tested are:
|
||||||
|
|
||||||
|
* eggs (1)
|
||||||
|
* peanuts (2)
|
||||||
|
* shellfish (4)
|
||||||
|
* strawberries (8)
|
||||||
|
* tomatoes (16)
|
||||||
|
* chocolate (32)
|
||||||
|
* pollen (64)
|
||||||
|
* cats (128)
|
||||||
|
|
||||||
|
So if Tom is allergic to peanuts and chocolate, he gets a score of 34.
|
||||||
|
|
||||||
|
Now, given just that score of 34, your program should be able to say:
|
||||||
|
|
||||||
|
- Whether Tom is allergic to any one of those allergens listed above.
|
||||||
|
- All the allergens Tom is allergic to.
|
||||||
|
|
||||||
|
Note: a given score may include allergens **not** listed above (i.e.
|
||||||
|
allergens that score 256, 512, 1024, etc.). Your program should
|
||||||
|
ignore those components of the score. For example, if the allergy
|
||||||
|
score is 257, your program should only report the eggs (1) allergy.
|
||||||
|
|
||||||
|
|
||||||
|
## Elm Installation
|
||||||
|
|
||||||
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||||
|
installation and learning resources.
|
||||||
|
|
||||||
|
## Writing the Code
|
||||||
|
|
||||||
|
The first time you start an exercise, you'll need to ensure you have the
|
||||||
|
appropriate dependencies installed.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
Automatically run tests again when you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||||
|
calls from each test until you get them all passing!
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
Jumpstart Lab Warm-up [http://jumpstartlab.com](http://jumpstartlab.com)
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
43
exercises/anagram/README.md
Normal file
43
exercises/anagram/README.md
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
# Anagram
|
||||||
|
|
||||||
|
Given a word and a list of possible anagrams, select the correct sublist.
|
||||||
|
|
||||||
|
Given `"listen"` and a list of candidates like `"enlists" "google"
|
||||||
|
"inlets" "banana"` the program should return a list containing
|
||||||
|
`"inlets"`.
|
||||||
|
|
||||||
|
## Elm Installation
|
||||||
|
|
||||||
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||||
|
installation and learning resources.
|
||||||
|
|
||||||
|
## Writing the Code
|
||||||
|
|
||||||
|
The first time you start an exercise, you'll need to ensure you have the
|
||||||
|
appropriate dependencies installed.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
Automatically run tests again when you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||||
|
calls from each test until you get them all passing!
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
Inspired by the Extreme Startup game [https://github.com/rchatley/extreme_startup](https://github.com/rchatley/extreme_startup)
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
64
exercises/atbash-cipher/README.md
Normal file
64
exercises/atbash-cipher/README.md
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
# Atbash Cipher
|
||||||
|
|
||||||
|
Create an implementation of the atbash cipher, an ancient encryption system created in the Middle East.
|
||||||
|
|
||||||
|
The Atbash cipher is a simple substitution cipher that relies on
|
||||||
|
transposing all the letters in the alphabet such that the resulting
|
||||||
|
alphabet is backwards. The first letter is replaced with the last
|
||||||
|
letter, the second with the second-last, and so on.
|
||||||
|
|
||||||
|
An Atbash cipher for the Latin alphabet would be as follows:
|
||||||
|
|
||||||
|
```plain
|
||||||
|
Plain: abcdefghijklmnopqrstuvwxyz
|
||||||
|
Cipher: zyxwvutsrqponmlkjihgfedcba
|
||||||
|
```
|
||||||
|
|
||||||
|
It is a very weak cipher because it only has one possible key, and it is
|
||||||
|
a simple monoalphabetic substitution cipher. However, this may not have
|
||||||
|
been an issue in the cipher's time.
|
||||||
|
|
||||||
|
Ciphertext is written out in groups of fixed length, the traditional group size
|
||||||
|
being 5 letters, and punctuation is excluded. This is to make it harder to guess
|
||||||
|
things based on word boundaries.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
- Encoding `test` gives `gvhg`
|
||||||
|
- Decoding `gvhg` gives `test`
|
||||||
|
- Decoding `gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt` gives `thequickbrownfoxjumpsoverthelazydog`
|
||||||
|
|
||||||
|
## Elm Installation
|
||||||
|
|
||||||
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||||
|
installation and learning resources.
|
||||||
|
|
||||||
|
## Writing the Code
|
||||||
|
|
||||||
|
The first time you start an exercise, you'll need to ensure you have the
|
||||||
|
appropriate dependencies installed.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
Automatically run tests again when you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||||
|
calls from each test until you get them all passing!
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
Wikipedia [http://en.wikipedia.org/wiki/Atbash](http://en.wikipedia.org/wiki/Atbash)
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
48
exercises/bob/README.md
Normal file
48
exercises/bob/README.md
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
# Bob
|
||||||
|
|
||||||
|
Bob is a lackadaisical teenager. In conversation, his responses are very limited.
|
||||||
|
|
||||||
|
Bob answers 'Sure.' if you ask him a question.
|
||||||
|
|
||||||
|
He answers 'Whoa, chill out!' if you yell at him.
|
||||||
|
|
||||||
|
He says 'Fine. Be that way!' if you address him without actually saying
|
||||||
|
anything.
|
||||||
|
|
||||||
|
He answers 'Whatever.' to anything else.
|
||||||
|
|
||||||
|
## Elm Installation
|
||||||
|
|
||||||
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||||
|
installation and learning resources.
|
||||||
|
|
||||||
|
## Writing the Code
|
||||||
|
|
||||||
|
The first time you start an exercise, you'll need to ensure you have the
|
||||||
|
appropriate dependencies installed.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
Automatically run tests again when you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||||
|
calls from each test until you get them all passing!
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
Inspired by the 'Deaf Grandma' exercise in Chris Pine's Learn to Program tutorial. [http://pine.fm/LearnToProgram/?Chapter=06](http://pine.fm/LearnToProgram/?Chapter=06)
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
49
exercises/difference-of-squares/README.md
Normal file
49
exercises/difference-of-squares/README.md
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
# Difference Of Squares
|
||||||
|
|
||||||
|
Find the difference between the square of the sum and the sum of the squares of the first N natural numbers.
|
||||||
|
|
||||||
|
The square of the sum of the first ten natural numbers is
|
||||||
|
(1 + 2 + ... + 10)² = 55² = 3025.
|
||||||
|
|
||||||
|
The sum of the squares of the first ten natural numbers is
|
||||||
|
1² + 2² + ... + 10² = 385.
|
||||||
|
|
||||||
|
Hence the difference between the square of the sum of the first
|
||||||
|
ten natural numbers and the sum of the squares of the first ten
|
||||||
|
natural numbers is 3025 - 385 = 2640.
|
||||||
|
|
||||||
|
## Elm Installation
|
||||||
|
|
||||||
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||||
|
installation and learning resources.
|
||||||
|
|
||||||
|
## Writing the Code
|
||||||
|
|
||||||
|
The first time you start an exercise, you'll need to ensure you have the
|
||||||
|
appropriate dependencies installed.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
Automatically run tests again when you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||||
|
calls from each test until you get them all passing!
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
Problem 6 at Project Euler [http://projecteuler.net/problem=6](http://projecteuler.net/problem=6)
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
81
exercises/etl/README.md
Normal file
81
exercises/etl/README.md
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
# Etl
|
||||||
|
|
||||||
|
We are going to do the `Transform` step of an Extract-Transform-Load.
|
||||||
|
|
||||||
|
### ETL
|
||||||
|
Extract-Transform-Load (ETL) is a fancy way of saying, "We have some crufty, legacy data over in this system, and now we need it in this shiny new system over here, so
|
||||||
|
we're going to migrate this."
|
||||||
|
|
||||||
|
(Typically, this is followed by, "We're only going to need to run this
|
||||||
|
once." That's then typically followed by much forehead slapping and
|
||||||
|
moaning about how stupid we could possibly be.)
|
||||||
|
|
||||||
|
### The goal
|
||||||
|
We're going to extract some scrabble scores from a legacy system.
|
||||||
|
|
||||||
|
The old system stored a list of letters per score:
|
||||||
|
|
||||||
|
- 1 point: "A", "E", "I", "O", "U", "L", "N", "R", "S", "T",
|
||||||
|
- 2 points: "D", "G",
|
||||||
|
- 3 points: "B", "C", "M", "P",
|
||||||
|
- 4 points: "F", "H", "V", "W", "Y",
|
||||||
|
- 5 points: "K",
|
||||||
|
- 8 points: "J", "X",
|
||||||
|
- 10 points: "Q", "Z",
|
||||||
|
|
||||||
|
The shiny new scrabble system instead stores the score per letter, which
|
||||||
|
makes it much faster and easier to calculate the score for a word. It
|
||||||
|
also stores the letters in lower-case regardless of the case of the
|
||||||
|
input letters:
|
||||||
|
|
||||||
|
- "a" is worth 1 point.
|
||||||
|
- "b" is worth 3 points.
|
||||||
|
- "c" is worth 3 points.
|
||||||
|
- "d" is worth 2 points.
|
||||||
|
- Etc.
|
||||||
|
|
||||||
|
Your mission, should you choose to accept it, is to transform the legacy data
|
||||||
|
format to the shiny new format.
|
||||||
|
|
||||||
|
### Notes
|
||||||
|
|
||||||
|
A final note about scoring, Scrabble is played around the world in a
|
||||||
|
variety of languages, each with its own unique scoring table. For
|
||||||
|
example, an "E" is scored at 2 in the Māori-language version of the
|
||||||
|
game while being scored at 4 in the Hawaiian-language version.
|
||||||
|
|
||||||
|
## Elm Installation
|
||||||
|
|
||||||
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||||
|
installation and learning resources.
|
||||||
|
|
||||||
|
## Writing the Code
|
||||||
|
|
||||||
|
The first time you start an exercise, you'll need to ensure you have the
|
||||||
|
appropriate dependencies installed.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
Automatically run tests again when you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||||
|
calls from each test until you get them all passing!
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
The Jumpstart Lab team [http://jumpstartlab.com](http://jumpstartlab.com)
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
41
exercises/gigasecond/README.md
Normal file
41
exercises/gigasecond/README.md
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
# Gigasecond
|
||||||
|
|
||||||
|
Calculate the moment when someone has lived for 10^9 seconds.
|
||||||
|
|
||||||
|
A gigasecond is 10^9 (1,000,000,000) seconds.
|
||||||
|
|
||||||
|
## Elm Installation
|
||||||
|
|
||||||
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||||
|
installation and learning resources.
|
||||||
|
|
||||||
|
## Writing the Code
|
||||||
|
|
||||||
|
The first time you start an exercise, you'll need to ensure you have the
|
||||||
|
appropriate dependencies installed.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
Automatically run tests again when you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||||
|
calls from each test until you get them all passing!
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
Chapter 9 in Chris Pine's online Learn to Program tutorial. [http://pine.fm/LearnToProgram/?Chapter=09](http://pine.fm/LearnToProgram/?Chapter=09)
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
72
exercises/grade-school/README.md
Normal file
72
exercises/grade-school/README.md
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
# Grade School
|
||||||
|
|
||||||
|
Given students' names along with the grade that they are in, create a roster
|
||||||
|
for the school.
|
||||||
|
|
||||||
|
In the end, you should be able to:
|
||||||
|
|
||||||
|
- Add a student's name to the roster for a grade
|
||||||
|
- "Add Jim to grade 2."
|
||||||
|
- "OK."
|
||||||
|
- Get a list of all students enrolled in a grade
|
||||||
|
- "Which students are in grade 2?"
|
||||||
|
- "We've only got Jim just now."
|
||||||
|
- Get a sorted list of all students in all grades. Grades should sort
|
||||||
|
as 1, 2, 3, etc., and students within a grade should be sorted
|
||||||
|
alphabetically by name.
|
||||||
|
- "Who all is enrolled in school right now?"
|
||||||
|
- "Grade 1: Anna, Barb, and Charlie. Grade 2: Alex, Peter, and Zoe.
|
||||||
|
Grade 3…"
|
||||||
|
|
||||||
|
Note that all our students only have one name. (It's a small town, what
|
||||||
|
do you want?)
|
||||||
|
|
||||||
|
|
||||||
|
## For bonus points
|
||||||
|
|
||||||
|
Did you get the tests passing and the code clean? If you want to, these
|
||||||
|
are some additional things you could try:
|
||||||
|
|
||||||
|
- If you're working in a language with mutable data structures and your
|
||||||
|
implementation allows outside code to mutate the school's internal DB
|
||||||
|
directly, see if you can prevent this. Feel free to introduce additional
|
||||||
|
tests.
|
||||||
|
|
||||||
|
Then please share your thoughts in a comment on the submission. Did this
|
||||||
|
experiment make the code better? Worse? Did you learn anything from it?
|
||||||
|
|
||||||
|
## Elm Installation
|
||||||
|
|
||||||
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||||
|
installation and learning resources.
|
||||||
|
|
||||||
|
## Writing the Code
|
||||||
|
|
||||||
|
The first time you start an exercise, you'll need to ensure you have the
|
||||||
|
appropriate dependencies installed.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
Automatically run tests again when you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||||
|
calls from each test until you get them all passing!
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
A pairing session with Phil Battos at gSchool [http://gschool.it](http://gschool.it)
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
64
exercises/grains/README.md
Normal file
64
exercises/grains/README.md
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
# Grains
|
||||||
|
|
||||||
|
Calculate the number of grains of wheat on a chessboard given that the number
|
||||||
|
on each square doubles.
|
||||||
|
|
||||||
|
There once was a wise servant who saved the life of a prince. The king
|
||||||
|
promised to pay whatever the servant could dream up. Knowing that the
|
||||||
|
king loved chess, the servant told the king he would like to have grains
|
||||||
|
of wheat. One grain on the first square of a chess board. Two grains on
|
||||||
|
the next. Four on the third, and so on.
|
||||||
|
|
||||||
|
There are 64 squares on a chessboard.
|
||||||
|
|
||||||
|
Write code that shows:
|
||||||
|
- how many grains were on each square, and
|
||||||
|
- the total number of grains
|
||||||
|
|
||||||
|
|
||||||
|
## For bonus points
|
||||||
|
|
||||||
|
Did you get the tests passing and the code clean? If you want to, these
|
||||||
|
are some additional things you could try:
|
||||||
|
|
||||||
|
- Optimize for speed.
|
||||||
|
- Optimize for readability.
|
||||||
|
|
||||||
|
Then please share your thoughts in a comment on the submission. Did this
|
||||||
|
experiment make the code better? Worse? Did you learn anything from it?
|
||||||
|
|
||||||
|
## Elm Installation
|
||||||
|
|
||||||
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||||
|
installation and learning resources.
|
||||||
|
|
||||||
|
## Writing the Code
|
||||||
|
|
||||||
|
The first time you start an exercise, you'll need to ensure you have the
|
||||||
|
appropriate dependencies installed.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
Automatically run tests again when you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||||
|
calls from each test until you get them all passing!
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
JavaRanch Cattle Drive, exercise 6 [http://www.javaranch.com/grains.jsp](http://www.javaranch.com/grains.jsp)
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
72
exercises/hamming/README.md
Normal file
72
exercises/hamming/README.md
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
# Hamming
|
||||||
|
|
||||||
|
Calculate the Hamming difference between two DNA strands.
|
||||||
|
|
||||||
|
A mutation is simply a mistake that occurs during the creation or
|
||||||
|
copying of a nucleic acid, in particular DNA. Because nucleic acids are
|
||||||
|
vital to cellular functions, mutations tend to cause a ripple effect
|
||||||
|
throughout the cell. Although mutations are technically mistakes, a very
|
||||||
|
rare mutation may equip the cell with a beneficial attribute. In fact,
|
||||||
|
the macro effects of evolution are attributable by the accumulated
|
||||||
|
result of beneficial microscopic mutations over many generations.
|
||||||
|
|
||||||
|
The simplest and most common type of nucleic acid mutation is a point
|
||||||
|
mutation, which replaces one base with another at a single nucleotide.
|
||||||
|
|
||||||
|
By counting the number of differences between two homologous DNA strands
|
||||||
|
taken from different genomes with a common ancestor, we get a measure of
|
||||||
|
the minimum number of point mutations that could have occurred on the
|
||||||
|
evolutionary path between the two strands.
|
||||||
|
|
||||||
|
This is called the 'Hamming distance'.
|
||||||
|
|
||||||
|
It is found by comparing two DNA strands and counting how many of the
|
||||||
|
nucleotides are different from their equivalent in the other string.
|
||||||
|
|
||||||
|
GAGCCTACTAACGGGAT
|
||||||
|
CATCGTAATGACGGCCT
|
||||||
|
^ ^ ^ ^ ^ ^^
|
||||||
|
|
||||||
|
The Hamming distance between these two DNA strands is 7.
|
||||||
|
|
||||||
|
# Implementation notes
|
||||||
|
|
||||||
|
The Hamming distance is only defined for sequences of equal length. This means
|
||||||
|
that based on the definition, each language could deal with getting sequences
|
||||||
|
of equal length differently.
|
||||||
|
|
||||||
|
## Elm Installation
|
||||||
|
|
||||||
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||||
|
installation and learning resources.
|
||||||
|
|
||||||
|
## Writing the Code
|
||||||
|
|
||||||
|
The first time you start an exercise, you'll need to ensure you have the
|
||||||
|
appropriate dependencies installed.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
Automatically run tests again when you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||||
|
calls from each test until you get them all passing!
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
The Calculating Point Mutations problem at Rosalind [http://rosalind.info/problems/hamm/](http://rosalind.info/problems/hamm/)
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
51
exercises/hello-world/README.md
Normal file
51
exercises/hello-world/README.md
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
# Hello World
|
||||||
|
|
||||||
|
The classical introductory exercise. Just say "Hello, World!".
|
||||||
|
|
||||||
|
["Hello, World!"](http://en.wikipedia.org/wiki/%22Hello,_world!%22_program) is
|
||||||
|
the traditional first program for beginning programming in a new language
|
||||||
|
or environment.
|
||||||
|
|
||||||
|
The objectives are simple:
|
||||||
|
|
||||||
|
- Write a function that returns the string "Hello, World!".
|
||||||
|
- Run the test suite and make sure that it succeeds.
|
||||||
|
- Submit your solution and check it at the website.
|
||||||
|
|
||||||
|
If everything goes well, you will be ready to fetch your first real exercise.
|
||||||
|
|
||||||
|
## Elm Installation
|
||||||
|
|
||||||
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||||
|
installation and learning resources.
|
||||||
|
|
||||||
|
## Writing the Code
|
||||||
|
|
||||||
|
The first time you start an exercise, you'll need to ensure you have the
|
||||||
|
appropriate dependencies installed.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
Automatically run tests again when you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||||
|
calls from each test until you get them all passing!
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
This is an exercise to introduce users to using Exercism [http://en.wikipedia.org/wiki/%22Hello,_world!%22_program](http://en.wikipedia.org/wiki/%22Hello,_world!%22_program)
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
50
exercises/largest-series-product/README.md
Normal file
50
exercises/largest-series-product/README.md
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
# Largest Series Product
|
||||||
|
|
||||||
|
Given a string of digits, calculate the largest product for a contiguous
|
||||||
|
substring of digits of length n.
|
||||||
|
|
||||||
|
For example, for the input `'1027839564'`, the largest product for a
|
||||||
|
series of 3 digits is 270 (9 * 5 * 6), and the largest product for a
|
||||||
|
series of 5 digits is 7560 (7 * 8 * 3 * 9 * 5).
|
||||||
|
|
||||||
|
Note that these series are only required to occupy *adjacent positions*
|
||||||
|
in the input; the digits need not be *numerically consecutive*.
|
||||||
|
|
||||||
|
For the input `'73167176531330624919225119674426574742355349194934'`,
|
||||||
|
the largest product for a series of 6 digits is 23520.
|
||||||
|
|
||||||
|
## Elm Installation
|
||||||
|
|
||||||
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||||
|
installation and learning resources.
|
||||||
|
|
||||||
|
## Writing the Code
|
||||||
|
|
||||||
|
The first time you start an exercise, you'll need to ensure you have the
|
||||||
|
appropriate dependencies installed.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
Automatically run tests again when you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||||
|
calls from each test until you get them all passing!
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
A variation on Problem 8 at Project Euler [http://projecteuler.net/problem=8](http://projecteuler.net/problem=8)
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
63
exercises/leap/README.md
Normal file
63
exercises/leap/README.md
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
# Leap
|
||||||
|
|
||||||
|
Given a year, report if it is a leap year.
|
||||||
|
|
||||||
|
The tricky thing here is that a leap year in the Gregorian calendar occurs:
|
||||||
|
|
||||||
|
```plain
|
||||||
|
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.
|
||||||
|
|
||||||
|
If your language provides a method in the standard library that does
|
||||||
|
this look-up, pretend it doesn't exist and implement it yourself.
|
||||||
|
|
||||||
|
## 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
|
||||||
|
|
||||||
|
## Elm Installation
|
||||||
|
|
||||||
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||||
|
installation and learning resources.
|
||||||
|
|
||||||
|
## Writing the Code
|
||||||
|
|
||||||
|
The first time you start an exercise, you'll need to ensure you have the
|
||||||
|
appropriate dependencies installed.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
Automatically run tests again when you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||||
|
calls from each test until you get them all passing!
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
JavaRanch Cattle Drive, exercise 3 [http://www.javaranch.com/leap.jsp](http://www.javaranch.com/leap.jsp)
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
40
exercises/list-ops/README.md
Normal file
40
exercises/list-ops/README.md
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
# List Ops
|
||||||
|
|
||||||
|
Implement basic list operations.
|
||||||
|
|
||||||
|
In functional languages list operations like `length`, `map`, and
|
||||||
|
`reduce` are very common. Implement a series of basic list operations,
|
||||||
|
without using existing functions.
|
||||||
|
|
||||||
|
## Elm Installation
|
||||||
|
|
||||||
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||||
|
installation and learning resources.
|
||||||
|
|
||||||
|
## Writing the Code
|
||||||
|
|
||||||
|
The first time you start an exercise, you'll need to ensure you have the
|
||||||
|
appropriate dependencies installed.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
Automatically run tests again when you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||||
|
calls from each test until you get them all passing!
|
||||||
|
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
63
exercises/nucleotide-count/README.md
Normal file
63
exercises/nucleotide-count/README.md
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
# Nucleotide Count
|
||||||
|
|
||||||
|
Given a DNA string, compute how many times each nucleotide occurs in the string.
|
||||||
|
|
||||||
|
DNA is represented by an alphabet of the following symbols: 'A', 'C',
|
||||||
|
'G', and 'T'.
|
||||||
|
|
||||||
|
Each symbol represents a nucleotide, which is a fancy name for the
|
||||||
|
particular molecules that happen to make up a large part of DNA.
|
||||||
|
|
||||||
|
Shortest intro to biochemistry EVAR:
|
||||||
|
|
||||||
|
- twigs are to birds nests as
|
||||||
|
- nucleotides are to DNA and RNA as
|
||||||
|
- amino acids are to proteins as
|
||||||
|
- sugar is to starch as
|
||||||
|
- oh crap lipids
|
||||||
|
|
||||||
|
I'm not going to talk about lipids because they're crazy complex.
|
||||||
|
|
||||||
|
So back to nucleotides.
|
||||||
|
|
||||||
|
DNA contains four types of them: adenine (`A`), cytosine (`C`), guanine
|
||||||
|
(`G`), and thymine (`T`).
|
||||||
|
|
||||||
|
RNA contains a slightly different set of nucleotides, but we don't care
|
||||||
|
about that for now.
|
||||||
|
|
||||||
|
## Elm Installation
|
||||||
|
|
||||||
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||||
|
installation and learning resources.
|
||||||
|
|
||||||
|
## Writing the Code
|
||||||
|
|
||||||
|
The first time you start an exercise, you'll need to ensure you have the
|
||||||
|
appropriate dependencies installed.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
Automatically run tests again when you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||||
|
calls from each test until you get them all passing!
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
The Calculating DNA Nucleotides_problem at Rosalind [http://rosalind.info/problems/dna/](http://rosalind.info/problems/dna/)
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
45
exercises/pangram/README.md
Normal file
45
exercises/pangram/README.md
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
# Pangram
|
||||||
|
|
||||||
|
Determine if a sentence is a pangram. A pangram (Greek: παν γράμμα, pan gramma,
|
||||||
|
"every letter") is a sentence using every letter of the alphabet at least once.
|
||||||
|
The best known English pangram is:
|
||||||
|
> The quick brown fox jumps over the lazy dog.
|
||||||
|
|
||||||
|
The alphabet used consists of ASCII letters `a` to `z`, inclusive, and is case
|
||||||
|
insensitive. Input will not contain non-ASCII symbols.
|
||||||
|
|
||||||
|
## Elm Installation
|
||||||
|
|
||||||
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||||
|
installation and learning resources.
|
||||||
|
|
||||||
|
## Writing the Code
|
||||||
|
|
||||||
|
The first time you start an exercise, you'll need to ensure you have the
|
||||||
|
appropriate dependencies installed.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
Automatically run tests again when you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||||
|
calls from each test until you get them all passing!
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
Wikipedia [https://en.wikipedia.org/wiki/Pangram](https://en.wikipedia.org/wiki/Pangram)
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
64
exercises/phone-number/README.md
Normal file
64
exercises/phone-number/README.md
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
# Phone Number
|
||||||
|
|
||||||
|
Clean up user-entered phone numbers so that they can be sent SMS messages.
|
||||||
|
|
||||||
|
The **North American Numbering Plan (NANP)** is a telephone numbering system used by many countries in North America like the United States, Canada or Bermuda. All NANP-countries share the same international country code: `1`.
|
||||||
|
|
||||||
|
NANP numbers are ten-digit numbers consisting of a three-digit Numbering Plan Area code, commonly known as *area code*, followed by a seven-digit local number. The first three digits of the local number represent the *exchange code*, followed by the unique four-digit number which is the *subscriber number*.
|
||||||
|
|
||||||
|
|
||||||
|
The format is usually represented as
|
||||||
|
```
|
||||||
|
(NXX)-NXX-XXXX
|
||||||
|
```
|
||||||
|
where `N` is any digit from 2 through 9 and `X` is any digit from 0 through 9.
|
||||||
|
|
||||||
|
Your task is to clean up differently formated telephone numbers by removing punctuation and the country code (1) if present.
|
||||||
|
|
||||||
|
For example, the inputs
|
||||||
|
- `+1 (613)-995-0253`
|
||||||
|
- `613-995-0253`
|
||||||
|
- `1 613 995 0253`
|
||||||
|
- `613.995.0253`
|
||||||
|
|
||||||
|
should all produce the output
|
||||||
|
|
||||||
|
`6139950253`
|
||||||
|
|
||||||
|
**Note:** As this exercise only deals with telephone numbers used in NANP-countries, only 1 is considered a valid country code.
|
||||||
|
|
||||||
|
## Elm Installation
|
||||||
|
|
||||||
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||||
|
installation and learning resources.
|
||||||
|
|
||||||
|
## Writing the Code
|
||||||
|
|
||||||
|
The first time you start an exercise, you'll need to ensure you have the
|
||||||
|
appropriate dependencies installed.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
Automatically run tests again when you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||||
|
calls from each test until you get them all passing!
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
Event Manager by JumpstartLab [http://tutorials.jumpstartlab.com/projects/eventmanager.html](http://tutorials.jumpstartlab.com/projects/eventmanager.html)
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
54
exercises/raindrops/README.md
Normal file
54
exercises/raindrops/README.md
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
# Raindrops
|
||||||
|
|
||||||
|
Convert a number to a string, the contents of which depend on the number's factors.
|
||||||
|
|
||||||
|
- If the number has 3 as a factor, output 'Pling'.
|
||||||
|
- If the number has 5 as a factor, output 'Plang'.
|
||||||
|
- If the number has 7 as a factor, output 'Plong'.
|
||||||
|
- If the number does not have 3, 5, or 7 as a factor,
|
||||||
|
just pass the number's digits straight through.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
- 28's factors are 1, 2, 4, **7**, 14, 28.
|
||||||
|
- In raindrop-speak, this would be a simple "Plong".
|
||||||
|
- 30's factors are 1, 2, **3**, **5**, 6, 10, 15, 30.
|
||||||
|
- In raindrop-speak, this would be a "PlingPlang".
|
||||||
|
- 34 has four factors: 1, 2, 17, and 34.
|
||||||
|
- In raindrop-speak, this would be "34".
|
||||||
|
|
||||||
|
## Elm Installation
|
||||||
|
|
||||||
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||||
|
installation and learning resources.
|
||||||
|
|
||||||
|
## Writing the Code
|
||||||
|
|
||||||
|
The first time you start an exercise, you'll need to ensure you have the
|
||||||
|
appropriate dependencies installed.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
Automatically run tests again when you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||||
|
calls from each test until you get them all passing!
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
A variation on a famous interview question intended to weed out potential candidates. [http://jumpstartlab.com](http://jumpstartlab.com)
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
55
exercises/rna-transcription/README.md
Normal file
55
exercises/rna-transcription/README.md
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
# Rna Transcription
|
||||||
|
|
||||||
|
Given a DNA strand, return its RNA complement (per RNA transcription).
|
||||||
|
|
||||||
|
Both DNA and RNA strands are a sequence of nucleotides.
|
||||||
|
|
||||||
|
The four nucleotides found in DNA are adenine (**A**), cytosine (**C**),
|
||||||
|
guanine (**G**) and thymine (**T**).
|
||||||
|
|
||||||
|
The four nucleotides found in RNA are adenine (**A**), cytosine (**C**),
|
||||||
|
guanine (**G**) and uracil (**U**).
|
||||||
|
|
||||||
|
Given a DNA strand, its transcribed RNA strand is formed by replacing
|
||||||
|
each nucleotide with its complement:
|
||||||
|
|
||||||
|
* `G` -> `C`
|
||||||
|
* `C` -> `G`
|
||||||
|
* `T` -> `A`
|
||||||
|
* `A` -> `U`
|
||||||
|
|
||||||
|
## Elm Installation
|
||||||
|
|
||||||
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||||
|
installation and learning resources.
|
||||||
|
|
||||||
|
## Writing the Code
|
||||||
|
|
||||||
|
The first time you start an exercise, you'll need to ensure you have the
|
||||||
|
appropriate dependencies installed.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
Automatically run tests again when you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||||
|
calls from each test until you get them all passing!
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
Rosalind [http://rosalind.info/problems/rna](http://rosalind.info/problems/rna)
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
64
exercises/robot-simulator/README.md
Normal file
64
exercises/robot-simulator/README.md
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
# Robot Simulator
|
||||||
|
|
||||||
|
Write a robot simulator.
|
||||||
|
|
||||||
|
A robot factory's test facility needs a program to verify robot movements.
|
||||||
|
|
||||||
|
The robots have three possible movements:
|
||||||
|
|
||||||
|
- turn right
|
||||||
|
- turn left
|
||||||
|
- advance
|
||||||
|
|
||||||
|
Robots are placed on a hypothetical infinite grid, facing a particular
|
||||||
|
direction (north, east, south, or west) at a set of {x,y} coordinates,
|
||||||
|
e.g., {3,8}, with coordinates increasing to the north and east.
|
||||||
|
|
||||||
|
The robot then receives a number of instructions, at which point the
|
||||||
|
testing facility verifies the robot's new position, and in which
|
||||||
|
direction it is pointing.
|
||||||
|
|
||||||
|
- The letter-string "RAALAL" means:
|
||||||
|
- Turn right
|
||||||
|
- Advance twice
|
||||||
|
- Turn left
|
||||||
|
- Advance once
|
||||||
|
- Turn left yet again
|
||||||
|
- Say a robot starts at {7, 3} facing north. Then running this stream
|
||||||
|
of instructions should leave it at {9, 4} facing west.
|
||||||
|
|
||||||
|
## Elm Installation
|
||||||
|
|
||||||
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||||
|
installation and learning resources.
|
||||||
|
|
||||||
|
## Writing the Code
|
||||||
|
|
||||||
|
The first time you start an exercise, you'll need to ensure you have the
|
||||||
|
appropriate dependencies installed.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
Automatically run tests again when you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||||
|
calls from each test until you get them all passing!
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
Inspired by an interview question at a famous company.
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
79
exercises/roman-numerals/README.md
Normal file
79
exercises/roman-numerals/README.md
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
# Roman Numerals
|
||||||
|
|
||||||
|
Write a function to convert from normal numbers to Roman Numerals.
|
||||||
|
|
||||||
|
The Romans were a clever bunch. They conquered most of Europe and ruled
|
||||||
|
it for hundreds of years. They invented concrete and straight roads and
|
||||||
|
even bikinis. One thing they never discovered though was the number
|
||||||
|
zero. This made writing and dating extensive histories of their exploits
|
||||||
|
slightly more challenging, but the system of numbers they came up with
|
||||||
|
is still in use today. For example the BBC uses Roman numerals to date
|
||||||
|
their programmes.
|
||||||
|
|
||||||
|
The Romans wrote numbers using letters - I, V, X, L, C, D, M. (notice
|
||||||
|
these letters have lots of straight lines and are hence easy to hack
|
||||||
|
into stone tablets).
|
||||||
|
|
||||||
|
```
|
||||||
|
1 => I
|
||||||
|
10 => X
|
||||||
|
7 => VII
|
||||||
|
```
|
||||||
|
|
||||||
|
There is no need to be able to convert numbers larger than about 3000.
|
||||||
|
(The Romans themselves didn't tend to go any higher)
|
||||||
|
|
||||||
|
Wikipedia says: Modern Roman numerals ... are written by expressing each
|
||||||
|
digit separately starting with the left most digit and skipping any
|
||||||
|
digit with a value of zero.
|
||||||
|
|
||||||
|
To see this in practice, consider the example of 1990.
|
||||||
|
|
||||||
|
In Roman numerals 1990 is MCMXC:
|
||||||
|
|
||||||
|
1000=M
|
||||||
|
900=CM
|
||||||
|
90=XC
|
||||||
|
|
||||||
|
2008 is written as MMVIII:
|
||||||
|
|
||||||
|
2000=MM
|
||||||
|
8=VIII
|
||||||
|
|
||||||
|
See also: http://www.novaroma.org/via_romana/numbers.html
|
||||||
|
|
||||||
|
## Elm Installation
|
||||||
|
|
||||||
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||||
|
installation and learning resources.
|
||||||
|
|
||||||
|
## Writing the Code
|
||||||
|
|
||||||
|
The first time you start an exercise, you'll need to ensure you have the
|
||||||
|
appropriate dependencies installed.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
Automatically run tests again when you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||||
|
calls from each test until you get them all passing!
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
The Roman Numeral Kata [http://codingdojo.org/cgi-bin/index.pl?KataRomanNumerals](http://codingdojo.org/cgi-bin/index.pl?KataRomanNumerals)
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
60
exercises/run-length-encoding/README.md
Normal file
60
exercises/run-length-encoding/README.md
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
# Run Length Encoding
|
||||||
|
|
||||||
|
Implement run-length encoding and decoding.
|
||||||
|
|
||||||
|
Run-length encoding (RLE) is a simple form of data compression, where runs
|
||||||
|
(consecutive data elements) are replaced by just one data value and count.
|
||||||
|
|
||||||
|
For example we can represent the original 53 characters with only 13.
|
||||||
|
|
||||||
|
```
|
||||||
|
"WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWB" -> "12WB12W3B24WB"
|
||||||
|
```
|
||||||
|
|
||||||
|
RLE allows the original data to be perfectly reconstructed from
|
||||||
|
the compressed data, which makes it a lossless data compression.
|
||||||
|
|
||||||
|
```
|
||||||
|
"AABCCCDEEEE" -> "2AB3CD4E" -> "AABCCCDEEEE"
|
||||||
|
```
|
||||||
|
|
||||||
|
For simplicity, you can assume that the unencoded string will only contain
|
||||||
|
the letters A through Z (either lower or upper case) and whitespace. This way
|
||||||
|
data to be encoded will never contain any numbers and numbers inside data to
|
||||||
|
be decoded always represent the count for the following character.
|
||||||
|
|
||||||
|
## Elm Installation
|
||||||
|
|
||||||
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||||
|
installation and learning resources.
|
||||||
|
|
||||||
|
## Writing the Code
|
||||||
|
|
||||||
|
The first time you start an exercise, you'll need to ensure you have the
|
||||||
|
appropriate dependencies installed.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
Automatically run tests again when you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||||
|
calls from each test until you get them all passing!
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
Wikipedia [https://en.wikipedia.org/wiki/Run-length_encoding](https://en.wikipedia.org/wiki/Run-length_encoding)
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
99
exercises/say/README.md
Normal file
99
exercises/say/README.md
Normal file
|
@ -0,0 +1,99 @@
|
||||||
|
# Say
|
||||||
|
|
||||||
|
Given a number from 0 to 999,999,999,999, spell out that number in English.
|
||||||
|
|
||||||
|
## Step 1
|
||||||
|
|
||||||
|
Handle the basic case of 0 through 99.
|
||||||
|
|
||||||
|
If the input to the program is `22`, then the output should be
|
||||||
|
`'twenty-two'`.
|
||||||
|
|
||||||
|
Your program should complain loudly if given a number outside the
|
||||||
|
blessed range.
|
||||||
|
|
||||||
|
Some good test cases for this program are:
|
||||||
|
|
||||||
|
- 0
|
||||||
|
- 14
|
||||||
|
- 50
|
||||||
|
- 98
|
||||||
|
- -1
|
||||||
|
- 100
|
||||||
|
|
||||||
|
### Extension
|
||||||
|
|
||||||
|
If you're on a Mac, shell out to Mac OS X's `say` program to talk out
|
||||||
|
loud.
|
||||||
|
|
||||||
|
## Step 2
|
||||||
|
|
||||||
|
Implement breaking a number up into chunks of thousands.
|
||||||
|
|
||||||
|
So `1234567890` should yield a list like 1, 234, 567, and 890, while the
|
||||||
|
far simpler `1000` should yield just 1 and 0.
|
||||||
|
|
||||||
|
The program must also report any values that are out of range.
|
||||||
|
|
||||||
|
## Step 3
|
||||||
|
|
||||||
|
Now handle inserting the appropriate scale word between those chunks.
|
||||||
|
|
||||||
|
So `1234567890` should yield `'1 billion 234 million 567 thousand 890'`
|
||||||
|
|
||||||
|
The program must also report any values that are out of range. It's
|
||||||
|
fine to stop at "trillion".
|
||||||
|
|
||||||
|
## Step 4
|
||||||
|
|
||||||
|
Put it all together to get nothing but plain English.
|
||||||
|
|
||||||
|
`12345` should give `twelve thousand three hundred forty-five`.
|
||||||
|
|
||||||
|
The program must also report any values that are out of range.
|
||||||
|
|
||||||
|
### Extensions
|
||||||
|
|
||||||
|
Use _and_ (correctly) when spelling out the number in English:
|
||||||
|
|
||||||
|
- 14 becomes "fourteen".
|
||||||
|
- 100 becomes "one hundred".
|
||||||
|
- 120 becomes "one hundred and twenty".
|
||||||
|
- 1002 becomes "one thousand and two".
|
||||||
|
- 1323 becomes "one thousand three hundred and twenty-three".
|
||||||
|
|
||||||
|
## Elm Installation
|
||||||
|
|
||||||
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||||
|
installation and learning resources.
|
||||||
|
|
||||||
|
## Writing the Code
|
||||||
|
|
||||||
|
The first time you start an exercise, you'll need to ensure you have the
|
||||||
|
appropriate dependencies installed.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
Automatically run tests again when you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||||
|
calls from each test until you get them all passing!
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
A variation on JavaRanch CattleDrive, exercise 4a [http://www.javaranch.com/say.jsp](http://www.javaranch.com/say.jsp)
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
74
exercises/scrabble-score/README.md
Normal file
74
exercises/scrabble-score/README.md
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
# Scrabble Score
|
||||||
|
|
||||||
|
Given a word, compute the scrabble score for that word.
|
||||||
|
|
||||||
|
## Letter Values
|
||||||
|
|
||||||
|
You'll need these:
|
||||||
|
|
||||||
|
```plain
|
||||||
|
Letter Value
|
||||||
|
A, E, I, O, U, L, N, R, S, T 1
|
||||||
|
D, G 2
|
||||||
|
B, C, M, P 3
|
||||||
|
F, H, V, W, Y 4
|
||||||
|
K 5
|
||||||
|
J, X 8
|
||||||
|
Q, Z 10
|
||||||
|
```
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
"cabbage" should be scored as worth 14 points:
|
||||||
|
|
||||||
|
- 3 points for C
|
||||||
|
- 1 point for A, twice
|
||||||
|
- 3 points for B, twice
|
||||||
|
- 2 points for G
|
||||||
|
- 1 point for E
|
||||||
|
|
||||||
|
And to total:
|
||||||
|
|
||||||
|
- `3 + 2*1 + 2*3 + 2 + 1`
|
||||||
|
- = `3 + 2 + 6 + 3`
|
||||||
|
- = `5 + 9`
|
||||||
|
- = 14
|
||||||
|
|
||||||
|
## Extensions
|
||||||
|
- You can play a double or a triple letter.
|
||||||
|
- You can play a double or a triple word.
|
||||||
|
|
||||||
|
## Elm Installation
|
||||||
|
|
||||||
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||||
|
installation and learning resources.
|
||||||
|
|
||||||
|
## Writing the Code
|
||||||
|
|
||||||
|
The first time you start an exercise, you'll need to ensure you have the
|
||||||
|
appropriate dependencies installed.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
Automatically run tests again when you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||||
|
calls from each test until you get them all passing!
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
Inspired by the Extreme Startup game [https://github.com/rchatley/extreme_startup](https://github.com/rchatley/extreme_startup)
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
57
exercises/series/README.md
Normal file
57
exercises/series/README.md
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
# Series
|
||||||
|
|
||||||
|
Given a string of digits, output all the contiguous substrings of length `n` in
|
||||||
|
that string.
|
||||||
|
|
||||||
|
For example, the string "49142" has the following 3-digit series:
|
||||||
|
|
||||||
|
- 491
|
||||||
|
- 914
|
||||||
|
- 142
|
||||||
|
|
||||||
|
And the following 4-digit series:
|
||||||
|
|
||||||
|
- 4914
|
||||||
|
- 9142
|
||||||
|
|
||||||
|
And if you ask for a 6-digit series from a 5-digit string, you deserve
|
||||||
|
whatever you get.
|
||||||
|
|
||||||
|
Note that these series are only required to occupy *adjacent positions*
|
||||||
|
in the input; the digits need not be *numerically consecutive*.
|
||||||
|
|
||||||
|
## Elm Installation
|
||||||
|
|
||||||
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||||
|
installation and learning resources.
|
||||||
|
|
||||||
|
## Writing the Code
|
||||||
|
|
||||||
|
The first time you start an exercise, you'll need to ensure you have the
|
||||||
|
appropriate dependencies installed.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
Automatically run tests again when you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||||
|
calls from each test until you get them all passing!
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
A subset of the Problem 8 at Project Euler [http://projecteuler.net/problem=8](http://projecteuler.net/problem=8)
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
54
exercises/space-age/README.md
Normal file
54
exercises/space-age/README.md
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
# Space Age
|
||||||
|
|
||||||
|
Given an age in seconds, calculate how old someone would be on:
|
||||||
|
|
||||||
|
- Earth: orbital period 365.25 Earth days, or 31557600 seconds
|
||||||
|
- Mercury: orbital period 0.2408467 Earth years
|
||||||
|
- Venus: orbital period 0.61519726 Earth years
|
||||||
|
- Mars: orbital period 1.8808158 Earth years
|
||||||
|
- Jupiter: orbital period 11.862615 Earth years
|
||||||
|
- Saturn: orbital period 29.447498 Earth years
|
||||||
|
- Uranus: orbital period 84.016846 Earth years
|
||||||
|
- Neptune: orbital period 164.79132 Earth years
|
||||||
|
|
||||||
|
So if you were told someone were 1,000,000,000 seconds old, you should
|
||||||
|
be able to say that they're 31 Earth-years old.
|
||||||
|
|
||||||
|
If you're wondering why Pluto didn't make the cut, go watch [this
|
||||||
|
youtube video](http://www.youtube.com/watch?v=Z_2gbGXzFbs).
|
||||||
|
|
||||||
|
## Elm Installation
|
||||||
|
|
||||||
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||||
|
installation and learning resources.
|
||||||
|
|
||||||
|
## Writing the Code
|
||||||
|
|
||||||
|
The first time you start an exercise, you'll need to ensure you have the
|
||||||
|
appropriate dependencies installed.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
Automatically run tests again when you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||||
|
calls from each test until you get them all passing!
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
Partially inspired by Chapter 1 in Chris Pine's online Learn to Program tutorial. [http://pine.fm/LearnToProgram/?Chapter=01](http://pine.fm/LearnToProgram/?Chapter=01)
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
70
exercises/strain/README.md
Normal file
70
exercises/strain/README.md
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
# Strain
|
||||||
|
|
||||||
|
Implement the `keep` and `discard` operation on collections. Given a collection
|
||||||
|
and a predicate on the collection's elements, `keep` returns a new collection
|
||||||
|
containing those elements where the predicate is true, while `discard` returns
|
||||||
|
a new collection containing those elements where the predicate is false.
|
||||||
|
|
||||||
|
For example, given the collection of numbers:
|
||||||
|
|
||||||
|
- 1, 2, 3, 4, 5
|
||||||
|
|
||||||
|
And the predicate:
|
||||||
|
|
||||||
|
- is the number even?
|
||||||
|
|
||||||
|
Then your keep operation should produce:
|
||||||
|
|
||||||
|
- 2, 4
|
||||||
|
|
||||||
|
While your discard operation should produce:
|
||||||
|
|
||||||
|
- 1, 3, 5
|
||||||
|
|
||||||
|
Note that the union of keep and discard is all the elements.
|
||||||
|
|
||||||
|
The functions may be called `keep` and `discard`, or they may need different
|
||||||
|
names in order to not clash with existing functions or concepts in your
|
||||||
|
language.
|
||||||
|
|
||||||
|
## Restrictions
|
||||||
|
|
||||||
|
Keep your hands off that filter/reject/whatchamacallit functionality
|
||||||
|
provided by your standard library! Solve this one yourself using other
|
||||||
|
basic tools instead.
|
||||||
|
|
||||||
|
## Elm Installation
|
||||||
|
|
||||||
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||||
|
installation and learning resources.
|
||||||
|
|
||||||
|
## Writing the Code
|
||||||
|
|
||||||
|
The first time you start an exercise, you'll need to ensure you have the
|
||||||
|
appropriate dependencies installed.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
Automatically run tests again when you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||||
|
calls from each test until you get them all passing!
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
Conversation with James Edward Gray II [https://twitter.com/jeg2](https://twitter.com/jeg2)
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
51
exercises/sublist/README.md
Normal file
51
exercises/sublist/README.md
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
# Sublist
|
||||||
|
|
||||||
|
Given two lists determine if the first list is contained within the second
|
||||||
|
list, if the second list is contained within the first list, if both lists are
|
||||||
|
contained within each other or if none of these are true.
|
||||||
|
|
||||||
|
Specifically, a list A is a sublist of list B if by dropping 0 or more elements
|
||||||
|
from the front of B and 0 or more elements from the back of B you get a list
|
||||||
|
that's completely equal to A.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
* A = [1, 2, 3], B = [1, 2, 3, 4, 5], A is a sublist of B
|
||||||
|
* A = [3, 4, 5], B = [1, 2, 3, 4, 5], A is a sublist of B
|
||||||
|
* A = [3, 4], B = [1, 2, 3, 4, 5], A is a sublist of B
|
||||||
|
* A = [1, 2, 3], B = [1, 2, 3], A is equal to B
|
||||||
|
* A = [1, 2, 3, 4, 5], B = [2, 3, 4], A is a superlist of B
|
||||||
|
* A = [1, 2, 4], B = [1, 2, 3, 4, 5], A is not a superlist of, sublist of or equal to B
|
||||||
|
|
||||||
|
## Elm Installation
|
||||||
|
|
||||||
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||||
|
installation and learning resources.
|
||||||
|
|
||||||
|
## Writing the Code
|
||||||
|
|
||||||
|
The first time you start an exercise, you'll need to ensure you have the
|
||||||
|
appropriate dependencies installed.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
Automatically run tests again when you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||||
|
calls from each test until you get them all passing!
|
||||||
|
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
48
exercises/sum-of-multiples/README.md
Normal file
48
exercises/sum-of-multiples/README.md
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
# Sum Of Multiples
|
||||||
|
|
||||||
|
Given a number, find the sum of all the multiples of particular numbers up to
|
||||||
|
but not including that number.
|
||||||
|
|
||||||
|
If we list all the natural numbers up to but not including 20 that are
|
||||||
|
multiples of either 3 or 5, we get 3, 5, 6 and 9, 10, 12, 15, and 18.
|
||||||
|
|
||||||
|
The sum of these multiples is 78.
|
||||||
|
|
||||||
|
Given a number, find the sum of the multiples of a given set of numbers,
|
||||||
|
up to but not including that number.
|
||||||
|
|
||||||
|
## Elm Installation
|
||||||
|
|
||||||
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||||
|
installation and learning resources.
|
||||||
|
|
||||||
|
## Writing the Code
|
||||||
|
|
||||||
|
The first time you start an exercise, you'll need to ensure you have the
|
||||||
|
appropriate dependencies installed.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
Automatically run tests again when you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||||
|
calls from each test until you get them all passing!
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
A variation on Problem 1 at Project Euler [http://projecteuler.net/problem=1](http://projecteuler.net/problem=1)
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
56
exercises/triangle/README.md
Normal file
56
exercises/triangle/README.md
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
# Triangle
|
||||||
|
|
||||||
|
Determine if a triangle is equilateral, isosceles, or scalene.
|
||||||
|
|
||||||
|
An _equilateral_ triangle has all three sides the same length.<br/>
|
||||||
|
An _isosceles_ triangle has at least two sides the same length. (It is sometimes
|
||||||
|
specified as having exactly two sides the same length, but for the purposes of
|
||||||
|
this exercise we'll say at least two.)<br/>
|
||||||
|
A _scalene_ triangle has all sides of different lengths.
|
||||||
|
|
||||||
|
## Note
|
||||||
|
|
||||||
|
For a shape to be a triangle at all, all sides have to be of length > 0, and
|
||||||
|
the sum of the lengths of any two sides must be greater than or equal to the
|
||||||
|
length of the third side. See [Triangle Inequality](https://en.wikipedia.org/wiki/Triangle_inequality).
|
||||||
|
|
||||||
|
## Dig Deeper
|
||||||
|
|
||||||
|
The case where the sum of the lengths of two sides _equals_ that of the
|
||||||
|
third is known as a _degenerate_ triangle - it has zero area and looks like
|
||||||
|
a single line. Feel free to add your own code/tests to check for degenerate triangles.
|
||||||
|
## Elm Installation
|
||||||
|
|
||||||
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||||
|
installation and learning resources.
|
||||||
|
|
||||||
|
## Writing the Code
|
||||||
|
|
||||||
|
The first time you start an exercise, you'll need to ensure you have the
|
||||||
|
appropriate dependencies installed.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
Automatically run tests again when you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||||
|
calls from each test until you get them all passing!
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
The Ruby Koans triangle project, parts 1 & 2 [http://rubykoans.com](http://rubykoans.com)
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
49
exercises/word-count/README.md
Normal file
49
exercises/word-count/README.md
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
# Word Count
|
||||||
|
|
||||||
|
Given a phrase, count the occurrences of each word in that phrase.
|
||||||
|
|
||||||
|
For example for the input `"olly olly in come free"`
|
||||||
|
|
||||||
|
```plain
|
||||||
|
olly: 2
|
||||||
|
in: 1
|
||||||
|
come: 1
|
||||||
|
free: 1
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Elm Installation
|
||||||
|
|
||||||
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||||
|
installation and learning resources.
|
||||||
|
|
||||||
|
## Writing the Code
|
||||||
|
|
||||||
|
The first time you start an exercise, you'll need to ensure you have the
|
||||||
|
appropriate dependencies installed.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
Automatically run tests again when you save changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||||
|
calls from each test until you get them all passing!
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
This is a classic toy problem, but we were reminded of it by seeing it in the Go Tour.
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
Loading…
Reference in a new issue