Better code

- Add custom exceptions
- Use sets to govern loop
- Use generator plus list() to create result at once
- Clip shrapnel to boundaries
- Add doctests to show input and output