Tu mejor amigo ha empezado a coleccionar puzles y quiere crear un catálogo detallado de su colección: registrar información como el número total de piezas, el número de filas y columnas, el número de piezas del borde y del interior, la relación de aspecto y el formato del puzle. Incluso combinando tus poderes con los de tu amigo, se tarda varias horas en resolver un solo puzle de mil piezas, y luego aún tienes que contar las filas y las columnas y calcular a mano los números restantes. Los puzles aún más grandes, con miles de piezas, ahora parecen bastante abrumadores. «¡Tiene que haber una forma mejor!», exclamas y te sientas delante de tu ordenador para resolver el problema.
Dada información parcial sobre un puzle, añade las piezas que faltan.
Si la información no es suficiente para completar los detalles, o si las partes proporcionadas se contradicen, hay que avisar al usuario.
La información completa sobre el puzle consta de las siguientes partes:
pieces: Número total de piezasborder: Número de piezas de bordeinside: Número de piezas interiores (no de borde)rows: Número de filascolumns: Número de columnasaspectRatio: Relación de aspecto entre columnas y filasformat: Formato del puzle, que puede ser portrait, square o landscape
Para este ejercicio, puedes suponer que las piezas son cuadradas, de modo que el formato se puede derivar de la relación de aspecto:
portrait
square
landscape
Un puzle vertical de 6 piezas, todas ellas piezas de borde y ninguna interior. Tiene 2 columnas y 3 filas. La relación de aspecto es 0,666666... (2/3).
Un puzle cuadrado de 9 piezas, todas ellas piezas de 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 puzle horizontal de 12 piezas, 10 de las cuales son piezas de borde y 2 son interiores. Tiene 4 columnas y 3 filas. La relación de aspecto es 1,333333... (4/3).
Si la información proporcionada no basta para determinar un único puzle, indica un error con el mensaje "Insufficient data".
Si la información proporcionada es contradictoria, indica 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.