satellite/docs/problem_statement.md

65 lines
2.7 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.

# Problem Statement
You are a member of the flight software team at Umbra and are responsible
for writing code that manages the satellites propulsion system.
Firing the propulsion system involves waiting for a certain period of time before ignition.
The following is an example usage of this system:
* At absolute time t = 0, send a command to the computer to fire the propulsion in 15 seconds
* At absolute time t = 2, send a command to the computer to fire the propulsion in 30 seconds
* At absolute time t = 32, the computer begins firing the propulsion
The flight computer should accept a command with a relative time of when to fire
the propulsion - once that time has elapsed, the program should print out “firing now!”.
If another command is received before the propulsion is fired then the most recently
received relative time should overwrite any existing commands.
More formally, if a command _A_ is waiting to fire and another command _B_ is received
before A has fired, then B should replace _A_ as the pending command and _A_ should never fire.
If a time of -1 is given, any outstanding commands to fire the propulsion are cancelled.
Note that the flight computer should be able to fire the thruster multiple times in a
single execution of the program.
You may use exactly one of the following interfaces for getting data into and out of your program:
* Standard input/standard output
* TCP
You can use whichever is more convenient - we note that some languages make asynchronous
IO with standard input/standard output cumbersome and have thus included TCP.
If you do choose to use TCP, please have your server listen on port `8124`.
A sample TCP client, `propulsion_tcp_client.py`, is provided that plumbs standard input
to TCP writes and likewise plumbs TCP reads to standard output.
Commands should be delineated by newlines.
A sample _complete_ execution of your program using standard input and output is shown below
```
./your_program
15
30
firing now!
```
# Submitting your code
You may complete this assignment in any programming language that you wish.
We're most familiar with Rust and Python at Umbra, but we always enjoy learning
new languages and seeing solutions with different tools!
Your final submission for this exercise should be a zip file including:
* The source code of your program.
* A brief README with a description of your approach and instructions on how to
build and run the program.
* Any libraries or frameworks needed to run your program, or instructions for installing them.
Please ensure that your code is clear and legible before submitting.
While we don't expect you to write production-quality code for this exercise,
readability goes a long way in helping us review your submission.