# Introduction

Here is yet another approach to hone my skills as well as others by providing a collection of quick problems and solutions that can be used as a practice ground.

The problems are categorised by estimated speed to come up with a solution. Estimated speed for one problem is indicated by the number of asterisks (*) next to the problem title e.g. Simple Factorial Problem*, Full Blown GUI Application for Patient Catalogue Database*****. One star means the problem takes the quickest time estimate to solve, and five stars takes the longest.

Many of the problems are collected from various sources. Among the obvious ones are books, internet, my head, and casual conversations. Most will hopefully be cited for external information, source web page, or related problems.

Each problem is divided into several sections. The compulsory sections are as follows:

- Problem Statement : Background information is optional, elaborates on the problem stated on the problem title page.
- Expected Solution : In order to benchmark the solution, provides an abstract description of a possible solution.
- Solution Set : Containing a set of solutions, gives short description of how to tackle the problem and provides link to solution or a set collapsible code solution.

Optional sections include, but not limited to:

- References : sources used to tackle the problem
- Design Diagrams : snapshots of design diagrams to help visualising the problem and solution.
- Algorithms
- Pseudo-codes

I must understand that as it is a Kata, it is supposed to be a set of short sequence of practices. Well, documentation (this wiki page, and efforts taken in completing the Kata wiki pages) is a part of Code Kata as well. Documentation is a "code" by itself as it is a sequence of symbols that has a meaning to a system or a perspective.

# Kata?

Yes, kata, as in Karate's Kata. The term is borrowed from Dave Thomas, co-author of "The Pragmatic Programmer". Like in Karate, Kata's can be a few movements that last two minutes, ten minutes, half an hour, or even more. The time estimate for every Kata varies for every person, obviously, as no two computer engineers are created the same. These time estimates (ratings), simply comes from a single person's point of view.