Codex instance 220cec06a9 solver: prune unplaceable large squares
A skyline may retain enough total empty area while no longer containing a box for its largest remaining square. Scan for the required consecutive low columns and reject such monotonic dead states.

Keep each pruning combination independently measurable and record the small public-path gain, the direct-order-9 regression, and the rejected periodic schedule.

Tests: Debug CTest (13 passed)

Tests: ASan+UBSan CTest (13 passed)

Refs: #15
2026-07-31 08:25:36 +01:00
2025-08-31 17:40:43 +01:00
2025-09-01 19:51:02 +02:00
2026-07-30 17:40:17 +01:00

Partridge

The inspiration for this project is Stand-up Maths' YouTube video The impossible 2025 puzzle with over a million solutions.

In the video Matt Parker shows solutions to the 8th and 9th Partridge problems, and claims that solutions exist for all Partridge problems from size eight and above. (There are no solutions to Partridge problems when N < 8).

Whilst I could see how you can get from a solution to the 2N-th problem to the (2N+1)th problem I couldn't immediately see that a solution to the 8th & 9th problems indicate that there would be a solution to the 10th or 12th.

So I set out to write some code that finds a solution to the Partridge problem.

Originally I wrote an OCaml version of the code. However, my estimate of how long it would take to calculate a solution to the 10th Partridge problem was around 36 hours on my Macbook Air. So I moved to C++ which seems to be providing a 3x speed-up just by doing a straight translation of the code. There are some further optimisations in the C++ source which suggest finding a solution to the 10th Partridge problem will take around 6 hours.

Some results can be seen in results.md

This code is copyright 2025 Matthew Gretton-Dann. Licensed under the Apache-2.0 license.

Running the code

Prerequisites

You must have git, cmake, make and a compiler capable of compiling C++20 code on your path.

Code checkout and setup.

It is strongly recommended that you make a Release build as shown in the instructions below. The code is extremely slow in debug builds.

git clone https://gitea.gretton-dann.org.uk/mgrettondann/partridge-cpp.git
cmake -B build -S partridge-cpp -DCMAKE_BUILD_TYPE=Release

Building

cmake --build build

Executing

N=9 # Set N to largest size of square.
./build/partridge_cpp $N

Testing

See TESTING.md for CTest, Debug, and sanitizer instructions.

Performance measurements use the separate opt-in suite described in BENCHMARKING.md.

The research-only OR-Tools comparison is optional and documented in CP_SAT_REFERENCE.md. It does not affect the native build or its dependencies.

S
Description
C++ Solutions to the Partridge problem
Readme Apache-2.0
362 KiB
Languages
C++ 69.2%
Python 29.2%
CMake 1.6%