123 lines
1.9 KiB
Markdown
123 lines
1.9 KiB
Markdown
# Turner & Townsend backend assessment
|
|
|
|
These programs need Python 3.10+ and pytest.
|
|
|
|
Original assessment: https://github.com/turner-townsend/backend-assessment
|
|
|
|
## The Collatz Conjecture
|
|
|
|
Takes numeric input and calculates the number of steps in the Collatz sequence needed to reach 1
|
|
|
|
## Usage
|
|
|
|
```shell
|
|
python collatz/collatz.py
|
|
```
|
|
|
|
### Example
|
|
|
|
```
|
|
Please enter a whole number: 1
|
|
Result: 0 steps needed to reach 1
|
|
Please enter a whole number: 3
|
|
Step #1: odd, multiply by 3 and add 1 -> 10
|
|
Step #2: even, divide by 2 -> 5
|
|
Step #3: odd, multiply by 3 and add 1 -> 16
|
|
Step #4: even, divide by 2 -> 8
|
|
Step #5: even, divide by 2 -> 4
|
|
Step #6: even, divide by 2 -> 2
|
|
Step #7: even, divide by 2 -> 1
|
|
Result: 8 steps needed to reach 3
|
|
Please enter a whole number: 0
|
|
Result: 0 steps needed to reach 0
|
|
Please enter a whole number: !£$
|
|
ERROR: integer required
|
|
```
|
|
|
|
## Tests
|
|
|
|
```bash
|
|
pytest collatz
|
|
```
|
|
|
|
## Roman Numerals
|
|
|
|
A simple Roman numerals number converter
|
|
|
|
## Usage
|
|
|
|
```shell
|
|
python roman/roman.py
|
|
```
|
|
|
|
### Example
|
|
|
|
```
|
|
Please enter some Roman numerals: I
|
|
I = 1
|
|
Please enter some Roman numerals: IV
|
|
IV = 1 + 5 = 6
|
|
Please enter some Roman numerals: MCMXCIV
|
|
MCMXCIV = 1000 + 100 + 1000 + 10 + 100 + 1 + 5 = 2216
|
|
Please enter some Roman numerals: !£$
|
|
ERROR: Invalid input
|
|
```
|
|
|
|
## Tests
|
|
|
|
```bash
|
|
pytest roman
|
|
```
|
|
|
|
## Fifth Stack
|
|
|
|
A simple stack-based language called Fifth
|
|
|
|
## Usage
|
|
|
|
```shell
|
|
python stack/stack.py
|
|
```
|
|
|
|
### Commands
|
|
|
|
- `PUSH <n>` - push integer onto stack
|
|
- `POP` - remove top element
|
|
- `SWAP` - swap top two elements
|
|
- `DUP` - duplicate top element
|
|
- `+`, `-`, `*`, `/` - arithmetic operations
|
|
- `EXIT` - quit
|
|
|
|
### Example
|
|
|
|
```
|
|
stack is []
|
|
PUSH 3
|
|
stack is [3]
|
|
PUSH 11
|
|
stack is [3, 11]
|
|
+
|
|
stack is [14]
|
|
DUP
|
|
stack is [14, 14]
|
|
PUSH 2
|
|
stack is [14, 14, 2]
|
|
*
|
|
stack is [14, 28]
|
|
SWAP
|
|
stack is [28, 14]
|
|
/
|
|
stack is [2]
|
|
+
|
|
ERROR: two numbers required
|
|
POP
|
|
stack is []
|
|
EXIT
|
|
```
|
|
|
|
## Tests
|
|
|
|
```bash
|
|
pytest stack
|
|
```
|