# Netatmo technical test

The subject is available here: [Test Algo](./test_algo.pdf)

## TODO
- [ ] document
- [X] dumb packing 
- [ ] skyline
- [X] add raygui
- [X] resize box
- [X] delete box in gui by clicking
- [ ] wrap stb_rect_pack?
- [X] change bbox api to origin + size
- [ ] dummy A2

##  Installation

## Notes

### Question 1

This is a packing problem, as described on [Wikipedia][1].
Since this is NP-hard, we know the "exact" solution might be unreachable but we
could find a solution that is good enough for our needs.

### Question 2
### Question 3

## PNG support

I chose to support PNG files through the stb files:
[github.com/nothings/stb](https://github.com/nothings/stb).
I could have implemented basic image support with the PNM format but I think it
is nicer to support common image formats with a simple library.

stb also implements a 2D rectangle packer:
[stb_rect_pack.h](https://github.com/nothings/stb/blob/master/stb_rect_pack.h)
I added this file in the project in order to compare my implementation to
another one.

## 3rd party libraries

I use 2 external libraries for better visualization:
- stb files (for PNG)
- raylib (for GUI)

I don't rely on them for the algorithm implementation and the core of the
exercise doesn't rely on external libraries.

To avoid name collision, I created my own namespace `freling`.

## References

- [Exploring rectangle packing algorithms](https://www.david-colson.com/2020/03/10/exploring-rect-packing.html)
- [A Skyline-Based Heuristic for the 2D Rectangular Strip Packing Problem](https://www.researchgate.net/publication/221049934_A_Skyline-Based_Heuristic_for_the_2D_Rectangular_Strip_Packing_Problem)
- [New Improvements in Optimal Rectangle Packing](https://www.ijcai.org/Proceedings/09/Papers/092.pdf)

[1]: https://en.wikipedia.org/wiki/Packing_problems#Packing_of_rectangles
