Johnny está tentando criar palavras cruzadas, mas está tendo dificuldades para fazer as palavras se encaixarem.
Ele criou vários retângulos simples de palavras: ou seja, grupos de palavras que formam um retângulo onde todos os caminhos horizontais e verticais formam uma palavra.
//2x2
PA
AM
//2x3
GOB
ORE
//3x3
BAG
AGO
RED
//3x4
MACE
AGES
WEES
No entanto, para fazer um bom quebra-cabeça, ele precisa de alguns retângulos de palavras um pouco maiores que 3x4. Em vez de agonizar as cartas de arranjo por horas, Johnny preferiria ter um programa que faça isso por ele - e no menor número possível de caracteres, porque longos blocos de código são extremamente intimidadores para programadores casuais como Johnny.
Dado
- um dicionário de arquivo de texto em que as palavras são separadas por novas linhas em ordem alfabética,
- entrada especificando o número de linhas e colunas no retângulo de palavras (que pode ser fornecido, porém, é mais conveniente na sua linguagem de programação preferida)
gere pelo menos um retângulo de palavras. Se não for possível gerar um retângulo de palavras com o léxico e as dimensões fornecidos, o programa não precisará ter um comportamento definido. Não é necessário que o programa possa gerar retângulos que contenham mais de 64 letras ou que tenham dimensões que excedam 8 em qualquer direção. O programa deve ser concluído em um período de tempo razoável, digamos, em trinta minutos ou menos.
EDIT: Se você estiver executando um retângulo NxN, poderá usar um arquivo de dicionário menor que contenha apenas palavras com um comprimento de N letras.