dojo-mars-rover/README.md
2025-10-14 20:42:45 +02:00

121 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🛰️ Mars Rover
![Build](https://github.com/appsoluut/dojo-mars-rover/actions/workflows/ci.yml/badge.svg) [![codecov](https://codecov.io/gh/appsoluut/dojo-mars-rover/branch/main/graph/badge.svg)](https://codecov.io/gh/appsoluut/dojo-mars-rover) [![DeepSource](https://app.deepsource.com/gh/appsoluut/dojo-mars-rover.svg/?label=code+coverage&show_trend=true&token=UmCazOJ6A2-UkVOMKafStlYo)](https://app.deepsource.com/gh/appsoluut/dojo-mars-rover/) [![DeepSource](https://app.deepsource.com/gh/appsoluut/dojo-mars-rover.svg/?label=active+issues&show_trend=true&token=UmCazOJ6A2-UkVOMKafStlYo)](https://app.deepsource.com/gh/appsoluut/dojo-mars-rover/) [![DeepSource](https://app.deepsource.com/gh/appsoluut/dojo-mars-rover.svg/?label=resolved+issues&show_trend=true&token=UmCazOJ6A2-UkVOMKafStlYo)](https://app.deepsource.com/gh/appsoluut/dojo-mars-rover/)
## 🚀 Features
- 🔧 Gradle wrapper included
- 🧹 Ktlint & Detekt code quality checks
- 🧪 Unit testing with JUnit
- 📊 Code coverage via JaCoCo
- 🤖 CI/CD with GitHub Actions
- ☁️ Codecov integration
- ☁️ DeepSource integration
## 🧰 Setup
```bash
# Clone and enter project
git clone https://github.com/appsoluut/dojo-mars-rover
cd Rover
# Build and test
./gradlew build test
# Run Detekt and Ktlint checks
./gradlew detekt ktlintCheck
```
## Problem
NASA is landing a robotic rover on a rectangular plateau on Mars.
This plateau must be explored systematically so that the rovers on-board cameras can survey the terrain and send images back to Earth.
A rovers position is represented by:
- Two integers (**X**, **Y**) indicating its coordinates, and
- A letter indicating its current heading:
- **N** (North)
- **E** (East)
- **S** (South)
- **W** (West)
The plateau is divided into a grid, and the rover moves across it based on simple navigation commands.
For example, a position of `0 0 N` means the rover is at the bottom-left corner, facing North.
---
## Instructions
NASA can send the following commands to the rover:
- `L` ➔ Turn 90 degrees **left** without moving from the current spot.
- `R` ➔ Turn 90 degrees **right** without moving from the current spot.
- `M` ➔ Move **forward** one grid point in the direction it is facing.
> **Important**:
> Moving North from `(x, y)` goes to `(x, y+1)`.
> Moving East from `(x, y)` goes to `(x+1, y)`, and so on.
---
## Input
The input consists of:
1. **First parameter**: The rovers **starting position**: two integers and a letter (e.g., `1 2 N`).
2. **Second parameter**: A string of **movement instructions** (e.g., `LMLMLMLMM`).
The rover processes all instructions in sequence.
---
## Output
After executing all the commands, the rover reports its **final coordinates and heading**.
---
## Example
| Starting Position | Instructions | Expected Output |
|:------------------|:-------------|:----------------|
| 1 2 N | | 1 2 N |
| 1 2 N | L | 1 2 W |
| 1 2 W | L | 1 2 S |
| 1 2 S | L | 1 2 E |
| 1 2 E | L | 1 2 N |
| 1 2 N | R | 1 2 E |
| 1 2 E | R | 1 2 S |
| 1 2 S | R | 1 2 W |
| 1 2 W | R | 1 2 N |
| 1 2 N | M | 1 3 N |
| 1 2 E | M | 2 2 E |
| 1 2 S | M | 1 1 S |
| 1 2 W | M | 0 2 W |
| 1 2 N | LMLMLMLMM | 1 3 N |
| 3 3 E | MMRMMRMRRM | 5 1 E |
---
# 🎯 Your Mission
You have been given a **working but fragile** codebase that controls a **single** rover.
Your goal:
- **Refactor** the code to make it clean, expressive, and easy to maintain.
- Prepare the code for **future enhancements**.
- Eliminate technical debt, improve readability, and structure it to allow **easily adding new features** later.
> 🧠 **Hint**:
> Future missions may require **handling multiple rovers** at once.
> Your design should naturally evolve toward making this possible.
**Do not change the existing behavior.**
**All existing tests must continue to pass.**
---
# 🌟 Good luck, engineer of Mars!
Craft code that's ready for exploration... and evolution! 🚀