Ähnliche Figuren
Zwei Rechtecke sind ähnlich, wenn die Seitenverhältnisse gleich sind.
Betrachten Sie diese beiden Rechtecke. Ein Rechteck mit 5 Zeilen Höhe und 11 Zeichen Breite:
===========
===========
===========
===========
===========
und ein 10 Zeilen großes und 22 Zeichen breites Rechteck:
======================
======================
======================
======================
======================
======================
======================
======================
======================
======================
Diese Formen sind ähnlich, weil die Seitenverhältnisse gleich sind. Formal ausgedrückt (wobei die kürzeste und die längste Seite ist):
Sie können auch tun:
Die Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die ein "Haupt" -Rechteck und einige "andere" Rechtecke verwendet und druckt, welche der "anderen" ähnlich wie "Haupt" sind.
Die Eingabe
Eine Form und eine Liste von Formen. Jede Form besteht aus 2 positiven Ganzzahlen ungleich Null, die die Breite und Höhe des Rechtecks angeben. Zum Beispiel das:
(4,2), (3,9)
bezeichnet zwei Rechtecke, ein 4x2 und ein 3x9. Das genaue Format der Eingabe kann beliebig sein.
Die Ausgabe
Die Indizes der "anderen" Formen, die "main" ähnlich sind. Sie können wählen, ob die Indizes 0- oder 1-basiert sind, sowie das genaue Format und die Reihenfolge der Ausgabe.
Beispielprogramm
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
Sample Ein- und Ausgabe
Eingang:
(1, 2)
[(1, 2), (2, 4)]
Ausgabe:
set([0, 1])
Eingang:
(1, 2)
[(1, 9), (2, 5), (16, 8)]
Ausgabe:
set([2])
Gewinnen
Dies ist Code-Golf, also gewinnt die kürzeste Einsendung.
Anmerkungen
- Dies sollte selbstverständlich sein, aber Standardlücken sind verboten .
- Es dürfen keine Builtins zum Auffinden ähnlicher Figuren verwendet werden. (Ich weiß nicht einmal, ob das existiert, aber ich wäre nicht überrascht!)
[(1,2), (2,4), (1,9), (2,5), (16,8)]
, ist nur [0,1,4]
und [1,2,5]
erlaubt, oder könnten wir auch ausgeben [1,1,0,0,1]
oder [(1,2), (2,4), (16,8)]
?
[1.0 2.0]
ein akzeptables Eingabeformat?