Picross 3D[tm] Solver
What is Picross 3D[tm]?
Picross 3D[tm] is a logic puzzle game for the Nintendo DS. It presents you a 3D block consisting of many small cubes. On each face, there are written some numbers possibly circled or inside a rectangle) on some of the cubes.
Your goal is to remove all of the unneeded/illegal small cubes that violate the rules, and in the end a more or less recognizable object results. The rules are:
- behind each number, there may only be that many cubes as the number says
- behind non-circled numbers, these cubes must be coherent
- behind circled numbers, they must be in exactly two coherent groups
- behind numbers in a square, the cubes must be in two or more coherent groups
What is this tool?
I've written a solving tool for these kinds of puzzles; you type in the size of the puzzle, and for each or the three faces (top and bottom are identical, same for left/right, front/back), and the solver will show you the solution of the puzzle, plane for plane (starting from the front face).
It has been originally written for Turbo C on a HP 200LX, which features DOS running on a 8MHz 286-CPU. Thus, the coding priority was more like making it fast than anything else :).
Compiling is as easy as throwing the C file at your favourite C compiler. No additional libraries are needed.
The tool accepts a file name as optional command line parameter. If the file exists, it reads the puzzle from the file, the only user interaction will be to view the result.
If the file does not exist, it's created and the puzzle is written into that file.
Entering the puzzle
At first, you must enter the dimensions of the puzzle: xlen, ylen and zlen. Enter the number and hit return.
Then, you must enter front (xlen x ylen), side (zlen x ylen) and top (xlen x zlen) face: Line by line, enter the numbers. If in the raster there is no number given, enter a space instead. If a number is circled or in a square, you must type in a "o" or "p", respectively, after the number.
Note: Under linux, the echo will probably garble the layout; also, you might have to confirm with the return key.
Interpreting the result
The result will be displayed slice by slice, starting by the front face, slicing through until the back face is reached. A "0" means that the cube must be removed, any other number means that the cube needs to stay there.
This code should work under any reasonably recent system.
Here you can find the original version I've written in Turbo Pascal on the HP200LX. It relies on some nonstandard features, there is no reason to use it.