/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.stream.Collectors;
import java.util.Map;
import java.util.LinkedHashMap;
import java.util.HashMap;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
static Map
<String, Integer
> myMap
= new HashMap
<>();
static void combinationUtil(int arr[], int data[], int start,
int end, int index, int r) {
int sum = 0;
StringBuilder sb = new StringBuilder();
if (index == r) {
for (int j = 0; j < r; j++) {
sb.append(data[j]).append(",");
sum += data[j];
System.
out.
print(data
[j
] + " "); }
myMap.put(sb.toString(), sum);
sum = 0;
sb = new StringBuilder();
return;
}
for (int i = start; i <= end && end - i + 1 >= r - index; i++) {
data[index] = arr[i];
combinationUtil(arr, data, i + 1, end, index + 1, r);
}
}
static void printCombination(int arr[], int n, int r) {
int data[] = new int[r];
combinationUtil(arr, data, 0, n - 1, 0, r);
}
public static void main
(String[] args
) { int arr[] = {1,2,3,4,5,6,7,8};
int r = 3;
int n = arr.length;
printCombination(arr, n, r);
myMap = sortByValue(myMap);
System.
out.
println(searchClosest
(myMap,
14)); }
public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map) {
return map.entrySet()
.stream()
.
sorted(Map.Entry.
comparingByValue(/*Collections.reverseOrder()*/)) .collect(Collectors.toMap(
(e1, e2) -> e1,
LinkedHashMap::new
));
}
public static String searchClosest
(Map
<String, Integer
> map,
int value
) { double minDistance
= Double.
MAX_VALUE;
for (Map.
Entry<String, Integer
> entry
: map.
entrySet()) { double distance
= Math.
abs(entry.
getValue() - value
); if (distance < minDistance) {
minDistance = distance;
bestString = entry.getKey();
}
}
return bestString;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CmltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLkNvbGxlY3RvcnM7CmltcG9ydCBqYXZhLnV0aWwuTWFwOwppbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7CmltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKCi8qIE5hbWUgb2YgdGhlIGNsYXNzIGhhcyB0byBiZSAiTWFpbiIgb25seSBpZiB0aGUgY2xhc3MgaXMgcHVibGljLiAqLwpjbGFzcyBJZGVvbmUKewoJc3RhdGljIE1hcDxTdHJpbmcsIEludGVnZXI+IG15TWFwID0gbmV3IEhhc2hNYXA8PigpOwoKICAgIHN0YXRpYyB2b2lkIGNvbWJpbmF0aW9uVXRpbChpbnQgYXJyW10sIGludCBkYXRhW10sIGludCBzdGFydCwKICAgICAgICAgICAgaW50IGVuZCwgaW50IGluZGV4LCBpbnQgcikgewogICAgICAgIGludCBzdW0gPSAwOwogICAgICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwogICAgICAgIGlmIChpbmRleCA9PSByKSB7CiAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcjsgaisrKSB7CgogICAgICAgICAgICAgICAgc2IuYXBwZW5kKGRhdGFbal0pLmFwcGVuZCgiLCIpOwogICAgICAgICAgICAgICAgc3VtICs9IGRhdGFbal07CgogICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludChkYXRhW2pdICsgIiAiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBteU1hcC5wdXQoc2IudG9TdHJpbmcoKSwgc3VtKTsKICAgICAgICAgICAgc3VtID0gMDsKICAgICAgICAgICAgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8PSBlbmQgJiYgZW5kIC0gaSArIDEgPj0gciAtIGluZGV4OyBpKyspIHsKICAgICAgICAgICAgZGF0YVtpbmRleF0gPSBhcnJbaV07CiAgICAgICAgICAgIGNvbWJpbmF0aW9uVXRpbChhcnIsIGRhdGEsIGkgKyAxLCBlbmQsIGluZGV4ICsgMSwgcik7CiAgICAgICAgfQogICAgfQoKICAgIHN0YXRpYyB2b2lkIHByaW50Q29tYmluYXRpb24oaW50IGFycltdLCBpbnQgbiwgaW50IHIpIHsKICAgICAgICBpbnQgZGF0YVtdID0gbmV3IGludFtyXTsKICAgICAgICBjb21iaW5hdGlvblV0aWwoYXJyLCBkYXRhLCAwLCBuIC0gMSwgMCwgcik7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIGludCBhcnJbXSA9IHsxLDIsMyw0LDUsNiw3LDh9OwogICAgICAgIGludCByID0gMzsKICAgICAgICBpbnQgbiA9IGFyci5sZW5ndGg7CiAgICAgICAgcHJpbnRDb21iaW5hdGlvbihhcnIsIG4sIHIpOwogICAgICAgIG15TWFwID0gc29ydEJ5VmFsdWUobXlNYXApOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzZWFyY2hDbG9zZXN0KG15TWFwLCAxNCkpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgPEssIFYgZXh0ZW5kcyBDb21wYXJhYmxlPD8gc3VwZXIgVj4+IE1hcDxLLCBWPiBzb3J0QnlWYWx1ZShNYXA8SywgVj4gbWFwKSB7CiAgICAgICAgcmV0dXJuIG1hcC5lbnRyeVNldCgpCiAgICAgICAgICAgICAgICAuc3RyZWFtKCkKICAgICAgICAgICAgICAgIC5zb3J0ZWQoTWFwLkVudHJ5LmNvbXBhcmluZ0J5VmFsdWUoLypDb2xsZWN0aW9ucy5yZXZlcnNlT3JkZXIoKSovKSkKICAgICAgICAgICAgICAgIC5jb2xsZWN0KENvbGxlY3RvcnMudG9NYXAoCiAgICAgICAgICAgICAgICAgICAgICAgIE1hcC5FbnRyeTo6Z2V0S2V5LAogICAgICAgICAgICAgICAgICAgICAgICBNYXAuRW50cnk6OmdldFZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAoZTEsIGUyKSAtPiBlMSwKICAgICAgICAgICAgICAgICAgICAgICAgTGlua2VkSGFzaE1hcDo6bmV3CiAgICAgICAgICAgICAgICApKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBzZWFyY2hDbG9zZXN0KE1hcDxTdHJpbmcsIEludGVnZXI+IG1hcCwgaW50IHZhbHVlKSB7CiAgICAgICAgZG91YmxlIG1pbkRpc3RhbmNlID0gRG91YmxlLk1BWF9WQUxVRTsKICAgICAgICBTdHJpbmcgYmVzdFN0cmluZyA9IG51bGw7CgogICAgICAgIGZvciAoTWFwLkVudHJ5PFN0cmluZywgSW50ZWdlcj4gZW50cnkgOiBtYXAuZW50cnlTZXQoKSkgewogICAgICAgICAgICBkb3VibGUgZGlzdGFuY2UgPSBNYXRoLmFicyhlbnRyeS5nZXRWYWx1ZSgpIC0gdmFsdWUpOwogICAgICAgICAgICBpZiAoZGlzdGFuY2UgPCBtaW5EaXN0YW5jZSkgewogICAgICAgICAgICAgICAgbWluRGlzdGFuY2UgPSBkaXN0YW5jZTsKICAgICAgICAgICAgICAgIGJlc3RTdHJpbmcgPSBlbnRyeS5nZXRLZXkoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gYmVzdFN0cmluZzsKICAgIH0KfQ==