Tracks
/
Emacs Lisp
Emacs Lisp
/
Ejercicios
/
Uniendo las piezas
Uniendo las piezas

Uniendo las piezas

Difícil

Introducción

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.

Instrucciones

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 piezas
  • border: Número de piezas del borde
  • inside: Número de piezas interiores (que no son del borde)
  • rows: Número de filas
  • columns: Número de columnas
  • aspectRatio: Relación de aspecto entre columnas y filas
  • format: 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:

  • Si la relación de aspecto es menor que 1, es portrait
  • Si es igual a 1, es square
  • Si es mayor que 1, es landscape

Tres ejemplos

Vertical

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 de 2 por 3

Cuadrado

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 de 3 por 3

Horizontal

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).

Un rompecabezas de 4 por 3

Implementación

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".

Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Emacs Lisp Exercism

¿Todo listo para empezar Uniendo las piezas?

Regístrate en Exercism para aprender y dominar Emacs Lisp con 103 ejercicios y mentoría humana real, todo gratis.