Figure simili
Due rettangoli sono simili se i rapporti dei loro lati sono gli stessi.
Considera questi due rettangoli; un rettangolo alto 5 righe e largo 11 caratteri:
===========
===========
===========
===========
===========
e un rettangolo alto 10 righe e largo 22 caratteri:
======================
======================
======================
======================
======================
======================
======================
======================
======================
======================
Queste forme sono simili perché i rapporti dei loro lati sono gli stessi. Per dirla formalmente (con come lato più corto e come lato più lungo):
Puoi anche fare:
La sfida
Scrivi un programma o una funzione che accetta un rettangolo "principale" e alcuni rettangoli "altri" e stampa quali degli "altri" sono simili a "principali".
L'input
Una forma e un elenco di forme. Ogni forma è composta da 2 numeri interi positivi diversi da zero, che indicano la larghezza e l'altezza del rettangolo. Ad esempio, questo:
(4,2), (3,9)
indica due rettangoli, un 4x2 e un 3x9. Il formato esatto dell'input può essere come desideri.
L'output
Gli indici delle "altre" forme simili a "principali". È possibile scegliere se gli indici sono basati su 0 o 1, nonché il formato e l'ordine esatti dell'output.
Programma di esempio
In 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
Input e output di esempio
Ingresso:
(1, 2)
[(1, 2), (2, 4)]
Produzione:
set([0, 1])
Ingresso:
(1, 2)
[(1, 9), (2, 5), (16, 8)]
Produzione:
set([2])
vincente
Questo è code-golf, quindi vince l'invio più breve.
Gli appunti
- Ciò dovrebbe essere ovvio, ma le scappatoie standard sono vietate .
- Non è possibile utilizzare builtin per individuare figure simili. (Non so nemmeno se esiste, ma non sarei sorpreso!)
[(1,2), (2,4), (1,9), (2,5), (16,8)]
, è solo [0,1,4]
e [1,2,5]
consentito, oppure potremmo anche produrre [1,1,0,0,1]
o [(1,2), (2,4), (16,8)]
?
[1.0 2.0]
un formato di input accettabile?