Tu mejor amigo ha empezado a coleccionar rompecabezas y quiere armar un catálogo detallado de su colección, donde registre información como el número total de piezas, la cantidad de filas y columnas, el número de piezas del borde y del interior, la relación de aspecto y el formato del rompecabezas. Incluso con tus poderes combinados, resolver un solo rompecabezas de mil piezas toma varias horas, y luego todavía tienes que contar las filas y las columnas y calcular a mano los números que faltan. Los rompecabezas aún más grandes, de miles de piezas, ahora sí que parecen intimidantes. «¡Tiene que haber una forma mejor!», exclamas, y te sientas frente a tu computadora para resolver el problema.
Dada información parcial sobre un rompecabezas, agrega las piezas que faltan.
Si la información no es suficiente para completar los detalles, o si las partes proporcionadas se contradicen, se debe notificar al usuario.
La información completa sobre el rompecabezas contiene las siguientes partes:
pieces: Número total de piezasborder: Número de piezas del bordeinside: Número de piezas interiores (que no son del borde)rows: Número de filascolumns: Número de columnasaspectRatio: Relación de aspecto entre columnas y filasformat: Formato del rompecabezas, que puede ser portrait, square o landscape
Para este ejercicio, puedes asumir que las piezas son cuadradas, de modo que el formato se puede derivar de la relación de aspecto:
portrait
square
landscape
Un rompecabezas vertical de 6 piezas, todas las cuales son piezas del borde y ninguna es una pieza interior. Tiene 2 columnas y 3 filas. La relación de aspecto es 0.666666... (2/3).
Un rompecabezas cuadrado de 9 piezas, todas las cuales son piezas del borde excepto la del centro, que es una pieza interior. Tiene 3 columnas y 3 filas. La relación de aspecto es 1.0 (3/3).
Un rompecabezas horizontal de 12 piezas, 10 de las cuales son piezas del borde y 2 son piezas interiores. Tiene 4 columnas y 3 filas. La relación de aspecto es 1.333333... (4/3).
Si la información dada no alcanza para determinar un único rompecabezas, señala un error con el mensaje "Insufficient data".
Si la información dada es contradictoria, señala un error con el mensaje "Contradictory data".
Regístrate en Exercism para aprender y dominar Emacs Lisp con 103 ejercicios y mentoría humana real, todo gratis.