Project : Only ciphertext attack of M209 cryptogrammes 
Summary  of the positive and negative points (end of June 2026)
===============================================================
Overall, I failed to implement G. Lasry's algorithm. Furthermore, 
I was unable to solve problem 12 of my M209 challenge.

Of course, the situation is more nuanced.

The most glaring negative points:
---------------------------------
- I couldn't understand George's algorithm. I was forced to 
propose an alternative, very similar but not identical.

- I couldn't reproduce my feat of finding the key to a 550-
character message using the known plaintext attack. I had 
succeeded with a program written in Python that used another 
of George's algorithms (HC_KPA: Hill Climbing, Known Plain-
text Attack). Moreover, my Python program managed to find 
the key in less than 10 minutes and with a single thread. 
I think the main reason is that I have one (or more) bugs 
in the creation of Lugs configurations containing overlaps.

The positives ones:
-------------------
- I discovered the Go language and I find it simple, 
efficient, and allows me to write readable programs.

- My Go program is 10 times more successful at decryption 
than my Python program. In short, it's 10 times faster. 
The reasons are partly related to the Go language (which 
is about 4 times faster) and the optimizations I made in 
the decryption program.

- I had some successes (breaking cryptograms), but overall 
they were similar to those I had with my Python program, 
with one exception (see below).

- I managed to break a long message without any overlaps 
(see my benchmark.txt file).

Possible path forward:
----------------------
I think that, in addition to diagnosing the problems I 
encountered (Bug related to the management of lug 
configurations with overlaps), I could use Rafael's approach. 
Indeed, it generated a huge file containing valid Lugs 
configurations. This approach has many advantages:

- We can be certain of compliance with certain criteria 
(for example, adherence to a version of the M209 manual).

- We can very easily implement dual parallelism: both on a 
single machine and across multiple machines. We can create 
a web server that provides configurations to a pool of 
clients (Web services) on the same machine or distributed 
across multiple machines.

- We can pause searches and resume them later.

- We can create and test benchmarks where we know the 
results in advance.

