Figuras similares
Dos rectángulos son similares si las proporciones de sus lados son las mismas.
Considere estos dos rectángulos; un rectángulo de 5 líneas de alto y 11 caracteres de ancho:
===========
===========
===========
===========
===========
y un rectángulo de 10 líneas de alto y 22 caracteres de ancho:
======================
======================
======================
======================
======================
======================
======================
======================
======================
======================
Estas formas son similares porque las proporciones de sus lados son las mismas. Para decirlo formalmente (siendo el lado más corto el lado más largo):
También puedes hacer:
El reto
Escriba un programa o función que tome un rectángulo "principal" y algunos "otros" rectángulos e imprima cuáles de "otros" son similares a "principal".
La entrada
Una forma y una lista de formas. Cada forma consta de 2 enteros positivos distintos de cero, que denotan el ancho y la altura del rectángulo. Por ejemplo, esto:
(4,2), (3,9)
denota dos rectángulos, un 4x2 y un 3x9. El formato exacto de la entrada puede ser el que desee.
La salida
Los índices de las "otras" formas que son similares a "principal". Puede elegir si los índices están basados en 0 o 1, así como el formato exacto y el orden de la salida.
Programa de muestra
En Python:
main = eval(raw_input()) # The main rectangle.
rects = eval(raw_input()) # The list of rectangles.
similar = set()
for i, rect in enumerate(rects):
if max(main)*min(rect) == min(main)*max(rect): # Cross-multiply
# They are similar.
similar.add(i)
print similar
Muestra de entrada y salida
Entrada:
(1, 2)
[(1, 2), (2, 4)]
Salida:
set([0, 1])
Entrada:
(1, 2)
[(1, 9), (2, 5), (16, 8)]
Salida:
set([2])
Victorioso
Este es el código de golf, por lo que gana la presentación más corta.
Notas
- Esto debería ser evidente, pero las lagunas estándar están prohibidas .
- No se pueden usar constructores para localizar figuras similares. (¡Ni siquiera sé si eso existe, pero no me sorprendería!)
[(1,2), (2,4), (1,9), (2,5), (16,8)]
, es solo [0,1,4]
y [1,2,5]
permitido, ¿o también podríamos generar [1,1,0,0,1]
o [(1,2), (2,4), (16,8)]
?
[1.0 2.0]
Sería un formato de entrada aceptable?