# Kakuro, Logic and Computer Science

To be a good computer scientist you have to enjoy problem solving. That is
what it's all about: working out the best way to do things.
You also have to be able to think in a logical way: be a bit of a Vulcan.
But what does that mean? It just means being able to think
precisely, extracting all the knowledge
possible from a situation just by pure reasoning. It's about being able to say
what is
definitely the case given what is already known...and it's fun to do. That's why
there is a Suduko craze going on as I write. Suduko are just pure logical
thinking puzzles. Personally I like Kakuro better. They are similar to Soduko,
but with a crossword format.

## What is a Kakuro?

A Kakuro is a crossword-like grid, but where each square has to be filled
in with a digit from 1-9 not a letter. Each horizontal or vertical block of digits must add
up to the number given to the left or above, respectively. All the digits
in each such block must be different. That part is similar to Soduko, though unlike Soduko,
numbers can be repeated on a line as long as they are in different blocks.
Also, unlike Soduko, you aren't given any starting numbers, just a blank grid.

Where does logic come into it? Take the following fragment:

There is a horizontal block of two cells that must add
up to 16. Ways that could be done using digits 1-9 are 9+7, 8+8 or 7+9.
But it can't be 8+8 as that needs two 8s in a block which is not allowed
so we are left with just two possibilities: 9+7 or 7+9. Now look at the
vertical blocks. One of them consists of two cells that add up to 17.
That can only be 9+8 or 8+9. That doesn't seem to have got us very far
as we still don't know any numbers for sure. But now think about the
top corner. We know from across that it is definiteley 9 or 7 and from down that
it is definitely
9 or 8. That means it must be 9 as that is the only way to satisfy both restrictions.

## A Kakuro for you to try

Here is a full Kakuro to try. There is also a printer friendly
pdf version.
Check your answer when you are done.

Being able to think logically is important because computer
programming is about coming up with precise solutions that
even a dumb computer can follow. To do that you have
to make sure all the possibilities have been covered.
Reasoning very much like in a Kakuro is needed to convince
yourself and others that a program does do what it is
supposed to.