Some solutions for the julia path
This commit is contained in:
150
julia/cars-assemble/README.md
Normal file
150
julia/cars-assemble/README.md
Normal file
@@ -0,0 +1,150 @@
|
||||
# Cars Assemble
|
||||
|
||||
Welcome to Cars Assemble on Exercism's Julia Track.
|
||||
If you need help running the tests or submitting your code, check out `HELP.md`.
|
||||
If you get stuck on the exercise, check out `HINTS.md`, but try and solve it without using those first :)
|
||||
|
||||
## Introduction
|
||||
|
||||
## Comparison operators
|
||||
|
||||
Comparison operators in Julia are similar to many other languages, though with some extra options for math-lovers.
|
||||
|
||||
For equality, the operators are `==` (equal) and `!=` or `≠` (not equal).
|
||||
|
||||
```julia
|
||||
txt = "abc"
|
||||
txt == "abc" # true
|
||||
txt != "abc" # false
|
||||
txt ≠ "abc" # false (synonym for !=)
|
||||
```
|
||||
|
||||
In addition, we have the various greater/less than operators.
|
||||
|
||||
```julia
|
||||
1 < 3 # true
|
||||
3 > 3 # false
|
||||
3 <= 3 # true
|
||||
3 ≤ 3 # true (synonym for <=)
|
||||
4 >= 3 # true
|
||||
4 ≥ 3 # true (synonym for >=)
|
||||
```
|
||||
|
||||
As often with Julia, an appropriate editor makes use of the mathematical symbol easy.
|
||||
Type `\ne`, `\le` or `\ge` then `TAB` to get `≠`, `≤` or `≥`.
|
||||
|
||||
The previous example uses only numbers, but we will see in other parts of the syllabus that various additional types have a sense of ordering and can be tested for greater/less than.
|
||||
|
||||
Comparison operators can be chained, which allows a clear and concise syntax:
|
||||
|
||||
```julia
|
||||
n = 3
|
||||
1 ≤ n ≤ 5 # true (n "between" two limits)
|
||||
```
|
||||
|
||||
The previous example is a synonym for `1 ≤ n && n ≤ 5`.
|
||||
|
||||
## Branching with `if`
|
||||
|
||||
This is the full form of an `if` statement:
|
||||
|
||||
```julia
|
||||
if conditional1
|
||||
statements...
|
||||
elseif conditional2
|
||||
statements...
|
||||
else
|
||||
statements...
|
||||
end
|
||||
```
|
||||
|
||||
There is no need for parentheses `()` or braces `{}`, and indentation is "only" to improve readability _(but readability is very important!)_.
|
||||
|
||||
Both `elseif` and `else` are optional, and there can be multiple `elseif` blocks.
|
||||
However, the `end` is required.
|
||||
|
||||
It is possible to nest `if` statements, though you might want to help readability with the thoughtful use of parentheses, indents and comments.
|
||||
|
||||
The shortest form of an `if` statement would be something like this:
|
||||
|
||||
```julia
|
||||
if n < 0
|
||||
n = 0
|
||||
end
|
||||
```
|
||||
|
||||
As a reminder: only expressions that evaluate to `true` or `false` can be used as conditionals.
|
||||
Julia deliberately avoids any concept of "truthiness", so zero values, empty strings and empty arrays are _not_ equivalent to `false`.
|
||||
|
||||
## Ternary operator
|
||||
|
||||
A simple and common situation is picking one of two values based on a conditional.
|
||||
|
||||
Julia, like many languages, has a ternary operator to make this more concise.
|
||||
|
||||
The syntax is `conditional ? value_if_true : value_if_false`.
|
||||
|
||||
So the previous example could be rewritten:
|
||||
|
||||
```julia
|
||||
n = n < 0 ? 0 : n
|
||||
```
|
||||
|
||||
Parentheses are not required by the compiler, but may improve readability.
|
||||
|
||||
## Instructions
|
||||
|
||||
In this exercise you will be writing code to analyze the production of an assembly line in a car factory.
|
||||
The assembly line's speed can range from `0` (off) to `10` (maximum).
|
||||
|
||||
At its lowest speed (`1`), `221` cars are produced each hour.
|
||||
The production increases linearly with the speed.
|
||||
So with the speed set to `4`, it should produce `4 * 221 = 884` cars per hour.
|
||||
However, higher speeds increase the likelihood that faulty cars are produced, which then have to be discarded.
|
||||
|
||||
You have three tasks.
|
||||
Each of the required functions takes a single integer parameter, the speed of the assembly line.
|
||||
|
||||
## 1. Calculate the success rate
|
||||
|
||||
Implement the `success_rate()` method to calculate the probability of an item being created without error for a given speed.
|
||||
The following table shows how speed influences the success rate:
|
||||
|
||||
- `0`: 0% success rate.
|
||||
- `1` to `4`: 100% success rate.
|
||||
- `5` to `8`: 90% success rate.
|
||||
- `9`: 80% success rate.
|
||||
- `10`: 77% success rate.
|
||||
|
||||
```julia-repl
|
||||
julia> success_rate(10)
|
||||
0.77
|
||||
```
|
||||
|
||||
## 2. Calculate the production rate per hour
|
||||
|
||||
Implement the `production_rate_per_hour()` method to calculate the assembly line's production rate per hour, taking into account its success rate.
|
||||
|
||||
```julia-repl
|
||||
julia> production_rate_per_hour(6)
|
||||
1193.4
|
||||
```
|
||||
|
||||
Note that the value returned is floating-point.
|
||||
|
||||
## 3. Calculate the number of working items produced per minute
|
||||
|
||||
Implement the `working_items_per_minute()` method to calculate how many working cars are produced per minute:
|
||||
|
||||
```julia-repl
|
||||
julia> working_items_per_minute(6)
|
||||
19
|
||||
```
|
||||
|
||||
Note that the value returned is an integer: incomplete items are not included.
|
||||
|
||||
## Source
|
||||
|
||||
### Created by
|
||||
|
||||
- @colinleach
|
||||
Reference in New Issue
Block a user