Hackerrank – Popis problému
Celý popis zadania sa nacháza – Hackerrank.
Riešenie
Vypočítame dĺžku hrany medzi každou dvojicou bodov p
vyjadrených súradnicami x
a y
.
(p0, p1), (p1, p2), ..., (pn-1, p0)
Rovnica pre dĺžku úsečky medzi dvoma bodmi:
$$l = \sqrt{{(x_1 – x_2)}^2 + {(y_1 – y_2)}^2}$$
Spočítaj dĺžky úsečiek.
Vytvoril som riešenie v týchto programovacích jazykoch:
Všetky riešenia sú dostupné aj na mojom GitHub profile.
Scala
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import scala.io.Source object ComputePolygonPerimeter extends App { val lines = Source.stdin.getLines().toList val n = lines.head.toInt val pairs = lines.tail.map(_.split(" ").map(_.toInt)).map(array => Tuple2(array(0), array(1))) println(perimeter(pairs)) def perimeter(points: List[(Int, Int)]) = { val n = points.length (0 until n).map(i => length(pairs(i % n), pairs((i + 1) % n))).sum } def length(p1: (Int, Int), p2: (Int, Int)) = { Math.sqrt((Math.pow(p2._1 - p1._1, 2)) + (Math.pow(p2._2 - p1._2, 2))) } } |