Applied Algebra: Codes, Ciphers, and Discrete Algorithms