Learn, experiment, code with, and compare performance of common data structures and algorithms in a fun, collaborative, and challenging context. In class, students will solve or play and discuss several types of logic puzzles and strategy games. In small teams they will explore the deductive, strategic, and tactical decisions involved, select appropriate data structures & algorithms to develop efficient program solutions to automate playing, solving, generating, or analyzing puzzles & games. Techniques used include analysis of efficiency (Big-O, Big-theta), recursion, minimax, Monte Carlo Tree Search, client/server network communications, deterministic vs non-deterministic algorithms. Structures used include arrays, matrices, hash tables, stacks, various trees, network graphs, and custom structures.