Figuras semelhantes
Dois retângulos são semelhantes se as proporções dos lados forem iguais.
Considere estes dois retângulos; um retângulo com 5 linhas de altura e 11 caracteres de largura:
===========
===========
===========
===========
===========
e um retângulo com 10 linhas de altura e 22 caracteres de largura:
======================
======================
======================
======================
======================
======================
======================
======================
======================
======================
Essas formas são semelhantes porque as proporções de seus lados são as mesmas. Para colocá-lo formalmente (com sendo o lado mais curto sendo o lado mais longo):
Você também pode fazer:
O desafio
Escreva um programa ou função que use um retângulo "principal" e alguns "outros" retângulos e imprima quais de "outros" são semelhantes a "principal".
A entrada
Uma forma e uma lista de formas. Cada forma consiste em 2 números inteiros positivos diferentes de zero, que indicam a largura e a altura do retângulo. Por exemplo, isto:
(4,2), (3,9)
denota dois retângulos, um 4x2 e um 3x9. O formato exato da entrada pode ser o que você desejar.
A saída
Os índices das "outras" formas que são semelhantes a "principal". Você pode escolher se os índices são baseados em 0 ou 1, bem como o formato e a ordem exatos da saída.
Programa de exemplo
Em 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
Entrada e saída de amostra
Entrada:
(1, 2)
[(1, 2), (2, 4)]
Saída:
set([0, 1])
Entrada:
(1, 2)
[(1, 9), (2, 5), (16, 8)]
Saída:
set([2])
Ganhando
Isso é código-golfe, então a submissão mais curta vence.
Notas
- Isso deve ser óbvio, mas as brechas padrão são proibidas .
- Nenhum componente interno para localizar figuras semelhantes pode ser usado. (Eu nem sei se isso existe, mas não ficaria surpreso!)
[(1,2), (2,4), (1,9), (2,5), (16,8)]
, é apenas [0,1,4]
e [1,2,5]
permitido, ou poderíamos também produzir [1,1,0,0,1]
ou [(1,2), (2,4), (16,8)]
?
[1.0 2.0]
um formato de entrada aceitável?