Day 5: Complet P21 to P25

Signed-off-by: Pang Yan Han <pangyanhan@gmail.com>
P01 to P10 - Convert some functions to parameterized functions

Because they are generic enough to work with types other than Symbol.
These are the functions:

- compress (and compress2)
- pack (and pack2)
- encode (and encode2)

Signed-off-by: Pang Yan Han <pangyanhan@gmail.com>
p02.scala - parameterize functions

These include:
- encodeModified
- decode
- encodeDirect
- duplicate
- duplicateN
- drop
- split
- slice
- rotate (and rotate2)
- removeAt

Signed-off-by: Pang Yan Han <pangyanhan@gmail.com>
p03.scala - Parameterize functions

These include:
- insertAt
- randomSelect
- randomPermute

Signed-off-by: Pang Yan Han <pangyanhan@gmail.com>
P24: refactor lotto to use randomSelect

This is now possible because randomSelect is a parameterized function.

Signed-off-by: Pang Yan Han <pangyanhan@gmail.com>