Fun challenge, here's my take :

...