package com.fishercoder.solutions;

import java.util.List;

/**
 * 1237. 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.
 *
 * Example 1:
 * Input: function_id = 1, z = 5
 * Output: [[1,4],[2,3],[3,2],[4,1]]
 * Explanation: function_id = 1 means that f(x, y) = x + y
 *
 * Example 2:
 * Input: function_id = 2, z = 5
 * Output: [[1,5],[5,1]]
 * Explanation: function_id = 2 means that f(x, y) = x * y
 *
 * 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
 */
public class _1237 {

    // This is the custom function interface.
    // You should not implement it, or speculate about its implementation
    interface CustomFunction {
        // Returns f(x, y) for any given positive integers x and y.
        // Note that f(x, y) is increasing with respect to both x and y.
        // i.e. f(x, y) < f(x + 1, y), f(x, y) < f(x, y + 1)
        public int f(int x, int y);
    }

    public static class Solution1 {
        public List<List<Integer>> findSolution(CustomFunction customfunction, int z) {
            return null;
        }
    }

}

@@ -29,16 +29,69 @@
 tions;%0A%0A
+import java.util.ArrayList;%0Aimport java.util.Arrays;%0A
 import j
@@ -1535,25 +1535,30 @@
 ion%0A    
-interface
+abstract class
  CustomF
@@ -1784,16 +1784,25 @@
  public 
+abstract 
 int f(in
@@ -1857,16 +1857,101 @@
 tion1 %7B%0A
+        /**Time: O(1) since it's bound by 1 %3C= x, y %3C= 1000%0A         * Space: O(1)*/%0A
         
@@ -2046,19 +2046,343 @@
     
-return null
+List%3CList%3CInteger%3E%3E result = new ArrayList%3C%3E();%0A            for (int x = 1; x %3C= 1000; x++) %7B%0A                for (int y = 1; y %3C= 1000; y++) %7B%0A                    if (customfunction.f(x, y) == z) %7B%0A                        result.add(Arrays.asList(x, y));%0A                    %7D%0A                %7D%0A            %7D%0A            return result
 ;%0A  

add one brute force solution for 1237