Rating:

# Help Mars, ppc+osint

It was a programming challenge, in which we had to find the shortest set of database strings (of which there
were a few millions), that concatenated together would give target string (that we had to find on the internet
as osint part of the challenge). The strings weren't very long; around 100 characters each, and the target string
was two orders of magnitude longer. Simple brute force wouldn't work.

Instead, we opted for dynamic programming solution: for each substring of the target, we calculated the minimal
solution by brute forcing first division point and fetching subproblem solution from memoized array. This gave
us runtime of `O(N*N*M)`, where `N` is length of the target, and `M` - maximum length of database strings (with
possibly some logarithmic overhead from Python data structures). Full code attached.

Original writeup (https://github.com/p4-team/ctf/tree/master/2018-07-21-ctfzone-quals/ppc_help_mars).