import com.sun.tools.javac.util.Assert;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.concurrent.atomic.AtomicInteger;
@SuppressWarnings({"UnnecessaryUnboxing", "WeakerAccess", "BooleanConstructorCall",
"UnnecessaryBoxing", "UnnecessaryContinue", "StringConcatenationInLoop"})
public class Main {
Assert.check(high_and_low(t1).equals("1, 8"));
System.
out.
println(t1
+ " \nresult: "+high_and_low
(t1
));
Assert.check(high_and_low(t2).equals("-4, 9"));
System.
out.
println(t2
+ " \nresult: "+high_and_low
(t2
));
Assert.check(high_and_low(t3).equals("-2, 8"));
System.
out.
println(t3
+ " \nresult: "+high_and_low
(t3
)); }
String low
= sort
(splitBy
(stringToTest,
',')).
get(0);
int size = sort(splitBy(stringToTest, ',')).size();
String high
= sort
(splitBy
(stringToTest,
',')).
get(size
-1);
ret+=c;
}
ret +=',';
ret +=' ';
ret+=c;
}
return ret;
}
boolean[] whereTheCommasAre = charBoolArray(s,charToFind);
ArrayList<String> numbers = new ArrayList<>(1);
int idx = -1;
for (int i = 0; i < whereTheCommasAre.length; i++) {
if(new Boolean(whereTheCommasAre
[i
]).
booleanValue()){ String number
= s.
substring(idx
+1,i
); numbers.add(number);
idx = i;
}
}
String number
= s.
substring(idx
+1); numbers.add(number);
return numbers;
}
/**
* @param s the String to test
* @param charToFind the char to find
* @return boolean[] true where the char is
*/
boolean[] commas = new boolean[s.length()];
int idx = 0;
for (int i = 0; i < s.length(); i++) {
if(c.equals(charToFind)){
commas[idx] = c.equals(charToFind);
idx++;
} else {
idx++;
}
}
return commas;
}
public static ArrayList<String> sort(ArrayList<String> numbers){
while(!isSorted(new ArrayList<>(numbers))){
numbers = trySort(numbers);
}
return numbers;
}
public static boolean isSorted(ArrayList<String> numbers){
long min
= Long.
MIN_VALUE; if(l
<new Long(min
)) return false; else min = l;
}
return true;
}
public static ArrayList<String> trySort(ArrayList<String> numbers){
HashSet<String> failed_combos = new HashSet<>(1);
for (int i = 0; ; i++) {
try {
Long li
= failed_combos.
contains(i
+ " " + 0) ? 0 : Long.
parseLong(numbers.
get(i
));
boolean swapped = false;
for (int j = 0; j < numbers.size(); j++) {
try {
if (i > j) {
failed_combos.add(i + " " + j);
throw new Exception("i cant be bigger then j"); }
Long lj
= failed_combos.
contains(i
+ " " + j
) ? 0 : Long.
parseLong(numbers.
get(j
)); if (li > lj && !failed_combos.contains(i + " " + j) && !swapped) {
numbers = swap(numbers, new AtomicInteger(i), new AtomicInteger(j));
swapped = true;
} else {
failed_combos.add(i + " " + j);
}
failed_combos.add(i + " " + j);
}
}
break;
}
}
return numbers;
}
private static ArrayList<String> swap(ArrayList<String> numbers, AtomicInteger a, AtomicInteger b) {
if(a.equals(b)) return numbers;
ArrayList<String> swapped = new ArrayList<>(1);
for (int i = 0; i < numbers.size(); i++) {
if(i == a.get()){
swapped.add(numbers.get(b.get()));
}
if(i == b.get()){
swapped.add(numbers.get(a.get()));
}
if(i != a.get() && i != b.get()) {
swapped.add(numbers.get(i));
}
}
return swapped;
}
}
aW1wb3J0IGNvbS5zdW4udG9vbHMuamF2YWMudXRpbC5Bc3NlcnQ7CgppbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwppbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuYXRvbWljLkF0b21pY0ludGVnZXI7CgpAU3VwcHJlc3NXYXJuaW5ncyh7IlVubmVjZXNzYXJ5VW5ib3hpbmciLCAiV2Vha2VyQWNjZXNzIiwgIkJvb2xlYW5Db25zdHJ1Y3RvckNhbGwiLAogICAgIlVubmVjZXNzYXJ5Qm94aW5nIiwgIlVubmVjZXNzYXJ5Q29udGludWUiLCAiU3RyaW5nQ29uY2F0ZW5hdGlvbkluTG9vcCJ9KQpwdWJsaWMgY2xhc3MgTWFpbiB7CgogIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24gewoKICAgIFN0cmluZyB0MSA9ICIxLDYsMiw4LDMiOwogICAgU3RyaW5nIHQyID0gIjEsOCw0LDksLTQsMiwyIjsKICAgIFN0cmluZyB0MyA9ICI0LDcsMSw4LC0yIjsKCiAgICBBc3NlcnQuY2hlY2soaGlnaF9hbmRfbG93KHQxKS5lcXVhbHMoIjEsIDgiKSk7CiAgICBTeXN0ZW0ub3V0LnByaW50bG4odDEgKyAiIFxucmVzdWx0OiAiK2hpZ2hfYW5kX2xvdyh0MSkpOwoKICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOwogICAgQXNzZXJ0LmNoZWNrKGhpZ2hfYW5kX2xvdyh0MikuZXF1YWxzKCItNCwgOSIpKTsKICAgIFN5c3RlbS5vdXQucHJpbnRsbih0MiArICIgXG5yZXN1bHQ6ICIraGlnaF9hbmRfbG93KHQyKSk7CgogICAgU3lzdGVtLm91dC5wcmludGxuKCk7CiAgICBBc3NlcnQuY2hlY2soaGlnaF9hbmRfbG93KHQzKS5lcXVhbHMoIi0yLCA4IikpOwogICAgU3lzdGVtLm91dC5wcmludGxuKHQzICsgIiBcbnJlc3VsdDogIitoaWdoX2FuZF9sb3codDMpKTsKICB9CgogIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGhpZ2hfYW5kX2xvdyhTdHJpbmcgc3RyaW5nVG9UZXN0KXsKCiAgICBTdHJpbmcgbG93ID0gc29ydChzcGxpdEJ5KHN0cmluZ1RvVGVzdCwgJywnKSkuZ2V0KDApOwoKICAgIGludCBzaXplID0gc29ydChzcGxpdEJ5KHN0cmluZ1RvVGVzdCwgJywnKSkuc2l6ZSgpOwogICAgU3RyaW5nIGhpZ2g9IHNvcnQoc3BsaXRCeShzdHJpbmdUb1Rlc3QsICcsJykpLmdldChzaXplLTEpOwoKICAgIFN0cmluZyByZXQgPSAiIjsKICAgIGZvciAoQ2hhcmFjdGVyIGMgOiBsb3cudG9DaGFyQXJyYXkoKSl7CiAgICAgIHJldCs9YzsKICAgIH0KICAgIHJldCArPScsJzsKICAgIHJldCArPScgJzsKICAgIGZvciAoQ2hhcmFjdGVyIGMgOiBoaWdoLnRvQ2hhckFycmF5KCkpewogICAgICByZXQrPWM7CiAgICB9CiAgICByZXR1cm4gcmV0OwogIH0KCiAgcHVibGljIHN0YXRpYyBBcnJheUxpc3Q8U3RyaW5nPiBzcGxpdEJ5KFN0cmluZyBzLENoYXJhY3RlciBjaGFyVG9GaW5kKXsKICAgIGJvb2xlYW5bXSB3aGVyZVRoZUNvbW1hc0FyZSA9IGNoYXJCb29sQXJyYXkocyxjaGFyVG9GaW5kKTsKICAgIEFycmF5TGlzdDxTdHJpbmc+IG51bWJlcnMgPSBuZXcgQXJyYXlMaXN0PD4oMSk7CiAgICBpbnQgaWR4ID0gLTE7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHdoZXJlVGhlQ29tbWFzQXJlLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmKG5ldyBCb29sZWFuKHdoZXJlVGhlQ29tbWFzQXJlW2ldKS5ib29sZWFuVmFsdWUoKSl7CiAgICAgICAgU3RyaW5nIG51bWJlciA9IHMuc3Vic3RyaW5nKGlkeCsxLGkpOwogICAgICAgIG51bWJlcnMuYWRkKG51bWJlcik7CiAgICAgICAgaWR4ID0gaTsKICAgICAgfQogICAgfQogICAgU3RyaW5nIG51bWJlciA9IHMuc3Vic3RyaW5nKGlkeCsxKTsKICAgIG51bWJlcnMuYWRkKG51bWJlcik7CiAgICByZXR1cm4gbnVtYmVyczsKICB9CgogIC8qKgogICAqIEBwYXJhbSBzIHRoZSBTdHJpbmcgdG8gdGVzdAogICAqIEBwYXJhbSBjaGFyVG9GaW5kIHRoZSBjaGFyIHRvIGZpbmQKICAgKiBAcmV0dXJuIGJvb2xlYW5bXSB0cnVlIHdoZXJlIHRoZSBjaGFyIGlzCiAgICovCiAgcHVibGljIHN0YXRpYyBib29sZWFuW10gY2hhckJvb2xBcnJheShTdHJpbmcgcyxDaGFyYWN0ZXIgY2hhclRvRmluZCl7CiAgICBib29sZWFuW10gY29tbWFzID0gbmV3IGJvb2xlYW5bcy5sZW5ndGgoKV07CiAgICBpbnQgaWR4ID0gMDsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IHMubGVuZ3RoKCk7IGkrKykgewogICAgICBDaGFyYWN0ZXIgYyA9IHMudG9DaGFyQXJyYXkoKVtpXTsKICAgICAgaWYoYy5lcXVhbHMoY2hhclRvRmluZCkpewogICAgICAgIGNvbW1hc1tpZHhdID0gYy5lcXVhbHMoY2hhclRvRmluZCk7CiAgICAgICAgaWR4Kys7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWR4Kys7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBjb21tYXM7CiAgfQoKICBwdWJsaWMgc3RhdGljIEFycmF5TGlzdDxTdHJpbmc+IHNvcnQoQXJyYXlMaXN0PFN0cmluZz4gbnVtYmVycyl7CiAgICB3aGlsZSghaXNTb3J0ZWQobmV3IEFycmF5TGlzdDw+KG51bWJlcnMpKSl7CiAgICAgIG51bWJlcnMgPSB0cnlTb3J0KG51bWJlcnMpOwogICAgfQogICAgcmV0dXJuIG51bWJlcnM7CiAgfQoKICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNTb3J0ZWQoQXJyYXlMaXN0PFN0cmluZz4gbnVtYmVycyl7CiAgICBsb25nIG1pbiA9IExvbmcuTUlOX1ZBTFVFOwogICAgZm9yKFN0cmluZyBudW1iZXIgOiBudW1iZXJzKXsKICAgICAgTG9uZyBsID0gTG9uZy5wYXJzZUxvbmcobnVtYmVyKTsKICAgICAgaWYobDxuZXcgTG9uZyhtaW4pKSByZXR1cm4gZmFsc2U7CiAgICAgIGVsc2UgbWluID0gbDsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgcHVibGljIHN0YXRpYyBBcnJheUxpc3Q8U3RyaW5nPiB0cnlTb3J0KEFycmF5TGlzdDxTdHJpbmc+IG51bWJlcnMpewogICAgSGFzaFNldDxTdHJpbmc+IGZhaWxlZF9jb21ib3MgPSBuZXcgSGFzaFNldDw+KDEpOwoKICAgIGZvciAoaW50IGkgPSAwOyA7IGkrKykgewogICAgICB0cnkgewogICAgICAgIExvbmcgbGkgPSBmYWlsZWRfY29tYm9zLmNvbnRhaW5zKGkgKyAiICIgKyAwKSA/IDAgOiBMb25nLnBhcnNlTG9uZyhudW1iZXJzLmdldChpKSk7CgogICAgICAgIGJvb2xlYW4gc3dhcHBlZCA9IGZhbHNlOwogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnVtYmVycy5zaXplKCk7IGorKykgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYgKGkgPiBqKSB7CiAgICAgICAgICAgICAgZmFpbGVkX2NvbWJvcy5hZGQoaSArICIgIiArIGopOwogICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oImkgY2FudCBiZSBiaWdnZXIgdGhlbiBqIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgTG9uZyBsaiA9IGZhaWxlZF9jb21ib3MuY29udGFpbnMoaSArICIgIiArIGopID8gMCA6IExvbmcucGFyc2VMb25nKG51bWJlcnMuZ2V0KGopKTsKICAgICAgICAgICAgaWYgKGxpID4gbGogJiYgIWZhaWxlZF9jb21ib3MuY29udGFpbnMoaSArICIgIiArIGopICYmICFzd2FwcGVkKSB7CiAgICAgICAgICAgICAgbnVtYmVycyA9IHN3YXAobnVtYmVycywgbmV3IEF0b21pY0ludGVnZXIoaSksIG5ldyBBdG9taWNJbnRlZ2VyKGopKTsKICAgICAgICAgICAgICBzd2FwcGVkID0gdHJ1ZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBmYWlsZWRfY29tYm9zLmFkZChpICsgIiAiICsgaik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgIGZhaWxlZF9jb21ib3MuYWRkKGkgKyAiICIgKyBqKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH1jYXRjaCAoSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKXsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bWJlcnM7CiAgfQoKICBwcml2YXRlIHN0YXRpYyBBcnJheUxpc3Q8U3RyaW5nPiBzd2FwKEFycmF5TGlzdDxTdHJpbmc+IG51bWJlcnMsIEF0b21pY0ludGVnZXIgYSwgQXRvbWljSW50ZWdlciBiKSB7CiAgICBpZihhLmVxdWFscyhiKSkgcmV0dXJuIG51bWJlcnM7CiAgICBBcnJheUxpc3Q8U3RyaW5nPiBzd2FwcGVkID0gbmV3IEFycmF5TGlzdDw+KDEpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJzLnNpemUoKTsgaSsrKSB7CiAgICAgIGlmKGkgPT0gYS5nZXQoKSl7CiAgICAgICAgc3dhcHBlZC5hZGQobnVtYmVycy5nZXQoYi5nZXQoKSkpOwogICAgICB9CiAgICAgIGlmKGkgPT0gYi5nZXQoKSl7CiAgICAgICAgc3dhcHBlZC5hZGQobnVtYmVycy5nZXQoYS5nZXQoKSkpOwogICAgICB9CiAgICAgIGlmKGkgIT0gYS5nZXQoKSAmJiBpICE9IGIuZ2V0KCkpIHsKICAgICAgICBzd2FwcGVkLmFkZChudW1iZXJzLmdldChpKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBzd2FwcGVkOwogIH0KfQo=