Popis problému
Celý popis zadania sa nacháza – Hackerrank.
Riešenie
Vytvoríme si 2 súčty – jeden pre diagonálu od ľavého horného rohu po pravý dolný, druhý pre diagonálu od pravého horného rohu po ľavý dolný roh. Urobíme ich rozdiel.
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 |
object DiagonalDifference extends App { val lines = io.Source.stdin.getLines().toList val n = lines.head.toInt val matrix = lines.tail.toArray.map(_.split(" ").map(_.toInt)) var leftRight = 0 var rightLeft = 0 (0 until n).foreach { i => leftRight += (matrix(i))(i) rightLeft += (matrix(i)(n - i - 1)) } println((leftRight - rightLeft).abs) } |
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import java.util.Scanner; public class DiagonalDifference { public static void main(String[] args) { Scanner stdin = new Scanner(System.in); int n = Integer.parseInt(stdin.nextLine()); long sumLeftRight = 0; long sumRightLeft = 0; for(int i = 0; i < n; i++) { String[] elements = stdin.nextLine().split(" "); sumLeftRight += Long.parseLong(elements[i]); sumRightLeft += Long.parseLong(elements[n - i - 1]); } System.out.println(Math.abs(sumLeftRight - sumRightLeft)); stdin.close(); } } |
JavaScript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
function processData(input) { var lines = input.split('\n'); var n = parseInt(lines[0]); var sumLeftRight = 0; var sumRightLeft = 0; for(var i = 0; i < n; i++) { var elements = lines[i + 1].split(" ").map(function(s) {return parseInt(s)}); sumLeftRight += elements[i]; sumRightLeft += elements[n - i - 1]; } console.log(Math.abs(sumLeftRight - sumRightLeft)); } process.stdin.resume(); process.stdin.setEncoding("ascii"); _input = ""; process.stdin.on("data", function (input) { _input += input; }); process.stdin.on("end", function () { processData(_input); }); |
Ruby
1 2 3 4 5 6 7 8 9 10 |
n = gets.to_i leftRight = 0 rightLeft = 0 n.times do |i| row = gets.to_s.split(" ").map { |s| s.to_i} leftRight += row[i] rightLeft += row[n - i - 1] end puts (leftRight - rightLeft).abs |