Easy As ABC, também conhecido como "End View", é um quebra-cabeça em que você recebe uma grade vazia com letras ao seu redor; você deve preencher parcialmente a grade para que exatamente uma de cada letra esteja em cada linha e coluna; além disso, as letras no final de uma linha (ou coluna) devem ser a primeira letra visível nessa linha (ou coluna) dessa direção. Seu objetivo neste código de golfe será resolver um quebra-cabeça Easy As ABC.
Por exemplo, aqui está um quebra - cabeça Easy As ABC da MIT Mystery Hunt deste ano usando as letras MIC:
A solução é:
(Desculpe pelos artefatos no Cs; tentei editar as informações irrelevantes do resto do quebra-cabeça.)
I / O
A entrada será uma matriz de seqüências de caracteres ou possivelmente com delimitadores. Ele começará no canto superior esquerdo e vai no sentido horário. Por exemplo, o quebra-cabeça acima pode ser inserido assim:
".CMM.M|....IM|.....I|C.ICI."
A saída deve ser a grade resolvida, com ou sem a borda. Pode ser como uma matriz de caracteres, matriz de seqüências de caracteres ou qualquer outro formato conveniente. O mesmo caractere "em branco" deve ser aceito como entrada e exibido como saída, mas esse caractere em branco pode ser qualquer coisa. Se forem cadeias simples, entrada e saída devem ter o mesmo separador (entre os lados para entrada e linhas para saída) ou nenhum separador.
Para quebra-cabeças insolúveis, você deve produzir algo que não seja confundível com uma solução. Você pode assumir que nenhum quebra-cabeça tem mais de uma solução.
Você deve permitir qualquer número de letras e qualquer grade de tamanho; todas as letras usadas aparecerão na borda da grade.
Este é o código-golfe : como sempre, o código mais curto vence!
Casos de teste
"T.AA..|.T.TSS|..TST.|A...SS"
"R.RU..|B.B..B|.UR.UB|UR..B."
"N...NK|E.NK.K|..KK..|....EK"
"CA..DBD|.B..CC.|.D.DEB.|DB.A..A"
"...DDEBE|DC..EBBD|BA..ABF.|E..FECDE"
fonte
Respostas:
PHP, 1111 bytes
menos os bytes removendo novas linhas
A versão online funciona apenas com os casos de teste com um comprimento de 6
solução curta
faça todas as permutações
preencha 2 matrizes com as permutações $ x $ y
mude entre duas funções até que exista apenas 1 solução na matriz x para cada linha
função i: encontre interseções na grade e solte permutações
função c: verifique as colunas em cada matriz de caracteres exclusivos e remova permutações nas outras linhas das matrizes $ xe $ y
fonte