O rei da Roma antiga está tendo dificuldades para determinar se um quadrado mágico é válido ou não, porque o quadrado mágico que ele está verificando não inclui separadores entre os números. Ele contratou um engenheiro de software para ajudá-lo a determinar se um quadrado mágico é válido ou não.
Descrição da entrada
A entrada é apresentada em argumentos STDIN ou de linha de comando. Você não pode ter a entrada pré-inicializada em uma variável (por exemplo, "este programa espera a entrada em uma variável x
"). A entrada está no seguinte formato:
<top>,<middle>,<bottom>
Cada um <top>
, <middle>
e <bottom>
é uma string que só vai conter os caracteres maiúsculos I
, V
e X
. Não conterá espaços ou outros caracteres. Cada string representa três algarismos romanos, resultando em uma matriz de números 3x3. No entanto, esses números romanos podem (mas não necessariamente) ser ambíguos . Permita-me ilustrar isso com um exemplo. Considere o exemplo de linha a seguir de três algarismos romanos, sem espaços entre cada número:
IVIIIIX
Como não há espaços entre as letras, existem duas possibilidades para os números aqui:
- 1, 8, 9 (
I VIII IX
) - 4, 3, 9 (
IV III IX
)
Quando você considera que todas as três linhas da matriz podem ser ambíguas, existe o potencial de haver muitas matrizes 3x3 diferentes a partir de uma única entrada.
Observe que seqüências como 1, 7, 1, 9 ( I VII I IX
) não são possíveis porque cada linha sempre representa três números romanos. Observe também que os números romanos devem ser válidos, portanto, seqüências como 1, 7, 8 ( I VII IIX
) também não são possíveis.
Descrição da saída
Resultado:
- Um número inteiro
A
, ondeA
é o número de matrizes 3x3 exclusivas que podem ser formadas a partir da entrada ambígua e: - Um valor verdadeiro se alguma das matrizes 3x3 únicas formar um quadrado mágico ou:
- Um valor falso se nenhuma das matrizes 3x3 únicas formar um quadrado mágico.
Os valores de verdade e falsidade devem ser consistentes. Eles são separados por uma vírgula.
Alguma explicação é necessária sobre o que é contado como único. Desde que uma matriz não tenha exatamente os mesmos números nas mesmas posições que uma matriz encontrada anteriormente, ela será contada como única. Isso significa que as reflexões etc. das matrizes encontradas anteriormente são contadas como únicas.
Exemplo de entradas e saídas
Nestes exemplos, eu uso true
como meu valor de false
verdade e como meu valor de falsidade.
Entrada: VIIIIVI,IIIVVII,IVIXII
Saída: 24,true
(O triângulo mágico é 8-1-6, 3-5-7, 4-9-2.)
Entrada: IIIXVIII,IVIII,VIIII
Saída:210,false
Extras
- Você não tem permissão para usar funções de conversão incorporadas de números romanos se o idioma escolhido tiver um.
fonte
Respostas:
Perl, 219
237Quebras de linha adicionadas para maior clareza.
Teste- me .
fonte
Prolog - 686
Ungolfed
Obviamente,
p
também pode ser definido como:Nesse caso, o ambiente diria 'Sim' ou 'Não' depois de escrever o número de quadrados.
Exemplo
Usando eclipse .
Resultados de exemplo para o segundo são colados aqui .
fonte
Python, 442 caracteres
O código primeiro cria
N
um mapeamento da sequência do número romano para o seu valor para todos os números possíveis que precisarmos. Divide cada linha em três de todas as maneiras possíveis e verifica em qual dos triplos resultantes todos têm mapeamentosN
. A finalany
vê se alguma combinação é um quadrado mágico.fonte
Haskell,
451429423 bytesUso:
Cerca de 70 bytes apenas para obter o formato de entrada e saída correto.
A função
r
converte um número romano (fornecido como uma string) em um número inteiro (se não0
for retornado um número romano válido ).s
divide uma sequência de dígitos romanos em 3 substring e mantém esses triplos com números romanos válidos e os converter
em inteiros.e
verifica se todos os números inteiros de uma lista de três elementos são iguais.p
pega três strings de dígitos romanos, divide-oss
em listas de números inteiros, combina um número inteiro de cada lista em triplos e mantém aqueles com somas iguais em todas as direções.f
calcula o número de matrizes válidas e verifica sep
retorna a lista vazia (nenhuma solução válida) ou não (existe uma solução válida). A função principali
lê a entrada de STDIN, converte-a em uma lista de strings (q
ajuda substituindo,
por\n
) e chamadasp
.fonte
R,
489474464Isso ficou muito maior do que eu queria, mas suspeito que posso jogar um pouco.
Ele usa um método de força bruta, calculando todas as combinações possíveis de números romanos e seus dígitos correspondentes.
Feito isso, ele compara a entrada com a lista de números romanos e obtém os dígitos possíveis.
A partir daí, ele passa por cada matriz de números e testa o quadrado mágico, finalmente produzindo o resultado.
Execução de teste. Aguarda a entrada uma vez colada no RGui.
fonte