Consider integer coordinates x
, y
in the Cartesian plane and three functions f
, g
, h
defined by:
f: 1 <= x <= n, 1 <= y <= n --> f(x, y) = min(x, y) g: 1 <= x <= n, 1 <= y <= n --> g(x, y) = max(x, y) h: 1 <= x <= n, 1 <= y <= n --> h(x, y) = x + y
where n
is a given integer (n >= 1
, guaranteed) and x
, y
are integers.
In the table below you can see the value of f(n)
where n = 6
.
The challenge is to calculate the sum of f(x, y)
, g(x, y)
, and h(x, y)
for all integers x
and y
such that (1 <= x <= n, 1 <= y <= n)
The function sumin
(sum of f
) will take n
as a parameter and return the sum of min(x, y)
in the domain 1 <= x <= n
, 1 <= y <= n
. The function sumax (sum of g
) will take n as a parameter and return the sum of max(x, y)
in the same domain. The function sumsum
(sum of h) will take n
as a parameter and return the sum of x + y
in the same domain.
sumin(6) --> 91 sumin(45) --> 31395 sumin(999) --> 332833500 sumin(5000) --> 41679167500 sumax(6) --> 161 sumax(45) --> 61755 sumax(999) --> 665167500 sumax(5000) --> 83345832500 sumsum(6) --> 252 sumsum(45) --> 93150 sumsum(999) --> 998001000 sumsum(5000) --> 125025000000
Hints:
- Try to avoid nested loops.
- Note that
h
=f + g
Good luck!
This challenge comes from g964 on CodeWars. Thank you to CodeWars, who has licensed redistribution of this challenge under the 2-Clause BSD License!
Want to propose a challenge idea for a future post? Email yo+challenge@dev.to with your suggestions!
Top comments (2)
No loops required!
I'll put my thought process here because those equations look pretty arbitrary.
From that example grid of values of f, you can see the sum is 1*(n2 - (n-1)2) + 2 * ((n-1)2 - (n-2)2) + ... when you expand that out you get the sum of the first n squares. Which is the formula in
summin
(that Google lead me to).For g, you can produce a chart of its value by taking an nxn square of n's, then subtracting the area of each square smaller than that. e.g. n*n*n - (n - 1)2 - (n - 2)2 -... which is the same as n*n*n - summin (n-1)
sumsum could be just the sum of the other two functions, but that's too simple. if you math it out, you get n*n*n + n*n. Much better.
Elegant challenge. We can notice that f and g are complementary to each other. We can draw the grid for f and g and notice, that sum of these grids is equal to sum of the gride of size n*n with (n+1) value is each cell. So the sum of f and g is equal to n*n*(n+1). The sum h is also equal to f + g.