-
Notifications
You must be signed in to change notification settings - Fork 3
/
1237-find-positive-integer-solution-for-a-given-equation.js
147 lines (123 loc) · 4.1 KB
/
1237-find-positive-integer-solution-for-a-given-equation.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
// 1237. Find Positive Integer Solution for a Given Equation
// https://leetcode.com/problems/find-positive-integer-solution-for-a-given-equation/
/*
Given a function f(x, y) and a value z, return all positive integer pairs x and
y where f(x,y) == z.
The function is constantly increasing, i.e.:
- f(x, y) < f(x + 1, y)
- f(x, y) < f(x, y + 1)
The function interface is defined like this:
```
interface CustomFunction {
public:
// Returns positive integer f(x, y) for any given positive integer x and y.
int f(int x, int y);
};
```
For custom testing purposes you're given an integer function_id and a target z
as input, where function_id represent one function from an secret internal list,
on the examples you'll know only two functions from the list.
You may return the solutions in any order.
Constraints:
- 1 <= function_id <= 9
- 1 <= z <= 100
- It's guaranteed that the solutions of f(x, y) == z will be on the range 1 <=
x, y <= 1000
- It's also guaranteed that f(x, y) will fit in 32 bit signed integer if 1 <=
x, y <= 1000
*/
import { deepStrictEqual } from 'assert';
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Runtime: 64 ms, faster than 47.22% of JavaScript online submissions
// Memory Usage: 41.4 MB, less than 100.00% of JavaScript online submissions
// /**
// * // This is the CustomFunction's API interface.
// * // You should not implement it, or speculate about its implementation
// * function CustomFunction() {
// *
// * @param {integer, integer} x, y
// * @return {integer}
// * this.f = function(x, y) {
// * ...
// * };
// *
// * };
// */
// /**
// * @param {CustomFunction} customfunction
// * @param {integer} z
// * @return {integer[][]}
// */
// const findSolution = (customfunction, z) => {
// const res = [...new Array(z ** 2).keys()]
// .map((n, idx, arr) => [Math.trunc(n / z) + 1, arr[z - (idx % z) - 1] + 1])
// .filter(([x, y]) => z === customfunction.f(x, y));
// // console.log(res);
// return res;
// };
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Runtime: 72 ms, faster than 31.25% of JavaScript online submissions
// Memory Usage: 41.5 MB, less than 100.00% of JavaScript online submissions
// /**
// * // This is the CustomFunction's API interface.
// * // You should not implement it, or speculate about its implementation
// * function CustomFunction() {
// *
// * @param {integer, integer} x, y
// * @return {integer}
// * this.f = function(x, y) {
// * ...
// * };
// *
// * };
// */
// /**
// * @param {CustomFunction} customfunction
// * @param {integer} z
// * @return {integer[][]}
// */
// const findSolution = (customfunction, z) =>
// [...new Array(z ** 2).keys()]
// .map((n, idx, arr) => [Math.trunc(n / z) + 1, arr[z - (idx % z) - 1] + 1])
// .filter(([x, y]) => z === customfunction.f(x, y));
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Runtime: 68 ms, faster than 33.33% of JavaScript online submissions
// Memory Usage: 39.6 MB, less than 100.00% of JavaScript online submissions
/**
* // This is the CustomFunction's API interface.
* // You should not implement it, or speculate about its implementation
* function CustomFunction() {
*
* @param {integer, integer} x, y
* @return {integer}
* this.f = function(x, y) {
* ...
* };
*
* };
*/
/**
* @param {CustomFunction} customfunction
* @param {integer} z
* @return {integer[][]}
*/
const findSolution = (customfunction, z) =>
new Array(z ** 2)
.fill()
.map((_, idx) => [Math.trunc(idx / z) + 1, (idx % z) + 1])
.filter(([x, y]) => z === customfunction.f(x, y));
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Example 1:
deepStrictEqual(findSolution({ f: (x, y) => x + y }, 5), [
[1, 4],
[2, 3],
[3, 2],
[4, 1],
]);
// Explanation: function_id = 1 means that f(x, y) = x + y
// Example 2:
deepStrictEqual(findSolution({ f: (x, y) => x * y }, 5), [
[1, 5],
[5, 1],
]);
// Explanation: function_id = 2 means that f(x, y) = x * y