cpals: add challenge 21

skip 19 and 20... not feeling interesting enough atm