El rey de la Antigua Roma está teniendo dificultades para determinar si un cuadrado mágico es válido o no, porque el cuadrado mágico que está revisando no incluye ningún separador entre los números. Ha contratado a un ingeniero de software para que lo ayude a determinar si un cuadrado mágico es válido o no.
Descripción de entrada
La entrada entra en STDIN o argumentos de línea de comando No puede tener la entrada preinicializada en una variable (por ejemplo, "este programa espera la entrada en una variable x
"). La entrada tiene el siguiente formato:
<top>,<middle>,<bottom>
Cada uno de <top>
, <middle>
y <bottom>
es una cadena que sólo alguna vez contendrá los caracteres en mayúscula I
, V
y X
. No contendrá espacios ni ningún otro carácter. Cada cadena representa tres números romanos, lo que resulta en una matriz de números 3x3. Sin embargo, estos números romanos pueden (pero no necesariamente) ser ambiguos . Permítanme ilustrar esto con un ejemplo. Considere la siguiente fila de ejemplo de tres números romanos, sin espacios entre cada número:
IVIIIIX
Debido a que no hay espacios entre las letras, hay dos posibilidades para los números aquí:
- 1, 8, 9 (
I VIII IX
) - 4, 3, 9 (
IV III IX
)
Cuando considera que las tres filas de la matriz pueden ser ambiguas, existe la posibilidad de que haya muchas matrices 3x3 diferentes a partir de una sola entrada.
Tenga en cuenta que secuencias como 1, 7, 1, 9 ( I VII I IX
) no son posibles porque cada fila siempre representará tres números romanos. También tenga en cuenta que los números romanos deben ser válidos, por lo que las secuencias como 1, 7, 8 ( I VII IIX
) tampoco son posibles.
Descripción de salida
Salida:
- Un número entero
A
, dondeA
es el número de matrices 3x3 únicas que se pueden formar a partir de la entrada ambigua, y: - Un valor verdadero si alguna de las matrices únicas de 3x3 forma un cuadrado mágico, o:
- Un valor falso si ninguna de las matrices únicas de 3x3 forma un cuadrado mágico.
Los valores de verdad y falsedad deben ser consistentes. Están separados por una coma.
Se requiere alguna explicación sobre lo que se cuenta como único. Mientras una matriz no tenga exactamente los mismos números en exactamente las mismas posiciones que una matriz encontrada previamente, se cuenta como única. Esto significa que las reflexiones, etc. de las matrices encontradas previamente se cuentan como únicas.
Ejemplo de entradas y salidas
En estos ejemplos, uso true
como mi valor verdadero y false
como mi valor falso.
Entrada: VIIIIVI,IIIVVII,IVIXII
Salida: 24,true
(El triángulo mágico es 8-1-6, 3-5-7, 4-9-2.)
Entrada: IIIXVIII,IVIII,VIIII
Salida:210,false
Extras
- No está permitido usar funciones de conversión de números romanos incorporadas si el idioma elegido tiene una.
fuente
Respuestas:
Perl, 219
237Saltos de línea añadidos para mayor claridad.
Ponme a prueba .
fuente
Prólogo - 686
Sin golf
Por supuesto,
p
también podría definirse como:En ese caso, el entorno diría 'Sí' o 'No' después de escribir el número de cuadrados.
Ejemplo
Usando eclipse .
Aquí se pegan resultados de ejemplo para el segundo .
fuente
Python, 442 caracteres
Primero se crea el código,
N
que es una asignación de una cadena de números romanos a su valor para todos los números posibles que podamos necesitar. Divide cada línea en tres de todas las formas posibles y comprueba en cuál de los triples resultantes todos tienen asignacionesN
. El finalany
ve si alguna combinación es un cuadrado mágico.fuente
Haskell,
451429423 bytesUso:
Aproximadamente 70 bytes solo para obtener el formato de entrada y salida correcto.
La función
r
convierte un número romano (dado como una cadena) en un entero (si no0
se devuelve un número romano válido ).s
divide una cadena de dígitos romanos en 3 subcadenas y mantiene esos triples con números romanos válidos y los convierter
a enteros.e
comprueba si todos los enteros de una lista de tres elementos son iguales.p
toma tres cadenas de dígitos romanos, las divides
en listas de enteros, combina un número entero de cada lista para triplicar y mantiene aquellos con sumas iguales en todas las direcciones.f
calcula el número de matrices válidas y comprueba sip
devuelve la lista vacía (sin solución válida) o no (existe una solución válida). La función principali
lee la entrada de STDIN, la convierte en una lista de cadenas (q
ayuda reemplazando,
con\n
) y llamadasp
.fuente
R,
489474464Esto se hizo mucho más grande de lo que quería, pero sospecho que puedo jugar un poco más.
Utiliza un método de fuerza bruta, calculando todas las combinaciones posibles de números romanos y sus dígitos correspondientes.
Una vez hecho esto, compara la entrada con la lista de números romanos y obtiene los posibles dígitos.
A partir de ahí, pasa por cada matriz de números y prueba el cuadrado mágico, finalmente genera el resultado.
Prueba de funcionamiento. Espera la entrada una vez pegada en el RGui.
fuente