/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
static void selectionSort(int[] arr, int n) {
for (int i = 0; i < n - 1; i++) {
int min = i;
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[min]) {
min = j;
}
}
int tmp = arr[i];
arr[i] = arr[min];
arr[min] = tmp;
}
}
static int[] getRange
(String input,
boolean inclusiveEnd
) { int[] temp = new int[100];
int index = 0;
String[] ranges
= input.
split(",\\s*"); String[] parts
= range.
split("-"); int start
= Integer.
parseInt(parts
[0]); int end
= Integer.
parseInt(parts
[1]); for (int j = start; inclusiveEnd ? j <= end : j < end; j++) {
temp[index++] = j;
}
}
return Arrays.
copyOf(temp, index
); }
static String arrToString
(int[] boundArr,
int boundLen,
int[] busyArr,
int busyLen
) { boolean inFreeSlot = false;
int freeStart = 0;
for (int i = 0; i < boundLen; i++) {
int hour = boundArr[i];
boolean isBusyHour = false;
for (int j = 0; j < busyLen; j++) {
if (hour == busyArr[j]) isBusyHour = true;
}
if (!isBusyHour && !inFreeSlot) {
freeStart = hour;
inFreeSlot = true;
}
if (isBusyHour && inFreeSlot) {
result += freeStart + "-" + hour + ", ";
inFreeSlot = false;
}
}
if (inFreeSlot) {
result += freeStart + "-" + boundArr[boundLen - 1];
}
return result;
}
int[] boundArr = getRange("0-24", true);
int[] busyArr = getRange("2-4, 8-10, 15-18", false);
int busyLen = busyArr.length;
int boundLen = boundArr.length;
return arrToString(boundArr, boundLen, busyArr, busyLen);
}
public static void main
(String[] args
) { String busySlots
= "3-10, 2-4, 15-18";
System.
out.
print(findFreeSlots
(busySlots, boundary
)); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwogCmltcG9ydCBqYXZhLnV0aWwuKjsKaW1wb3J0IGphdmEubGFuZy4qOwppbXBvcnQgamF2YS5pby4qOwogCi8qIE5hbWUgb2YgdGhlIGNsYXNzIGhhcyB0byBiZSAiTWFpbiIgb25seSBpZiB0aGUgY2xhc3MgaXMgcHVibGljLiAqLwpjbGFzcyBJZGVvbmUKewogICAgc3RhdGljIHZvaWQgc2VsZWN0aW9uU29ydChpbnRbXSBhcnIsIGludCBuKSB7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuIC0gMTsgaSsrKSB7CiAgICAgICAgICAgIGludCBtaW4gPSBpOwogICAgICAgICAgICBmb3IgKGludCBqID0gaSArIDE7IGogPCBuOyBqKyspIHsKICAgICAgICAgICAgICAgIGlmIChhcnJbal0gPCBhcnJbbWluXSkgewogICAgICAgICAgICAgICAgICAgIG1pbiA9IGo7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW50IHRtcCA9IGFycltpXTsKICAgICAgICAgICAgYXJyW2ldID0gYXJyW21pbl07CiAgICAgICAgICAgIGFyclttaW5dID0gdG1wOwogICAgICAgIH0KICAgIH0KIAogICAgc3RhdGljIGludFtdIGdldFJhbmdlKFN0cmluZyBpbnB1dCwgYm9vbGVhbiBpbmNsdXNpdmVFbmQpIHsKCSAgICBpbnRbXSB0ZW1wID0gbmV3IGludFsxMDBdOwoJICAgIGludCBpbmRleCA9IDA7CgkgICAgU3RyaW5nW10gcmFuZ2VzID0gaW5wdXQuc3BsaXQoIixcXHMqIik7CgkgICAgZm9yIChTdHJpbmcgcmFuZ2UgOiByYW5nZXMpIHsKCSAgICAgICAgU3RyaW5nW10gcGFydHMgPSByYW5nZS5zcGxpdCgiLSIpOwoJICAgICAgICBpbnQgc3RhcnQgPSBJbnRlZ2VyLnBhcnNlSW50KHBhcnRzWzBdKTsKCSAgICAgICAgaW50IGVuZCA9IEludGVnZXIucGFyc2VJbnQocGFydHNbMV0pOwoJICAgICAgICBmb3IgKGludCBqID0gc3RhcnQ7IGluY2x1c2l2ZUVuZCA/IGogPD0gZW5kIDogaiA8IGVuZDsgaisrKSB7CgkgICAgICAgICAgICB0ZW1wW2luZGV4KytdID0gajsKCSAgICAgICAgfQoJICAgIH0KCSAgICByZXR1cm4gQXJyYXlzLmNvcHlPZih0ZW1wLCBpbmRleCk7Cgl9CiAKIAogICAgc3RhdGljIFN0cmluZyBhcnJUb1N0cmluZyhpbnRbXSBib3VuZEFyciwgaW50IGJvdW5kTGVuLCBpbnRbXSBidXN5QXJyLCBpbnQgYnVzeUxlbikgewoJICAgIFN0cmluZyByZXN1bHQgPSAiIjsKCSAgICBib29sZWFuIGluRnJlZVNsb3QgPSBmYWxzZTsKCSAgICBpbnQgZnJlZVN0YXJ0ID0gMDsKCSAgICBmb3IgKGludCBpID0gMDsgaSA8IGJvdW5kTGVuOyBpKyspIHsKCSAgICAgICAgaW50IGhvdXIgPSBib3VuZEFycltpXTsKCSAgICAgICAgYm9vbGVhbiBpc0J1c3lIb3VyID0gZmFsc2U7CgkgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgYnVzeUxlbjsgaisrKSB7CgkgICAgICAgICAgICBpZiAoaG91ciA9PSBidXN5QXJyW2pdKSBpc0J1c3lIb3VyID0gdHJ1ZTsKCSAgICAgICAgfQoJICAgICAgICBpZiAoIWlzQnVzeUhvdXIgJiYgIWluRnJlZVNsb3QpIHsKCSAgICAgICAgICAgIGZyZWVTdGFydCA9IGhvdXI7CgkgICAgICAgICAgICBpbkZyZWVTbG90ID0gdHJ1ZTsKCSAgICAgICAgfQoJICAgICAgICBpZiAoaXNCdXN5SG91ciAmJiBpbkZyZWVTbG90KSB7CgkgICAgICAgICAgICByZXN1bHQgKz0gZnJlZVN0YXJ0ICsgIi0iICsgaG91ciArICIsICI7CgkgICAgICAgICAgICBpbkZyZWVTbG90ID0gZmFsc2U7CgkgICAgICAgIH0KCSAgICB9CgkgICAgaWYgKGluRnJlZVNsb3QpIHsKCSAgICAgICAgcmVzdWx0ICs9IGZyZWVTdGFydCArICItIiArIGJvdW5kQXJyW2JvdW5kTGVuIC0gMV07CgkgICAgfQoJICAgIHJldHVybiByZXN1bHQ7Cgl9CiAKIAogICAgc3RhdGljIFN0cmluZyBmaW5kRnJlZVNsb3RzKFN0cmluZyBidXN5LCBTdHJpbmcgYm91bmRhcnkpIHsKICAgICAgICBpbnRbXSBib3VuZEFyciA9IGdldFJhbmdlKCIwLTI0IiwgdHJ1ZSk7CgkJaW50W10gYnVzeUFyciA9IGdldFJhbmdlKCIyLTQsIDgtMTAsIDE1LTE4IiwgZmFsc2UpOwogICAgICAgIGludCBidXN5TGVuID0gYnVzeUFyci5sZW5ndGg7CiAgICAgICAgaW50IGJvdW5kTGVuID0gYm91bmRBcnIubGVuZ3RoOwogICAgICAgIHJldHVybiBhcnJUb1N0cmluZyhib3VuZEFyciwgYm91bmRMZW4sIGJ1c3lBcnIsIGJ1c3lMZW4pOwogICAgfQogCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgU3RyaW5nIGJ1c3lTbG90cyA9ICIzLTEwLCAyLTQsIDE1LTE4IjsKICAgICAgICBTdHJpbmcgYm91bmRhcnkgPSAiMC0yNCI7CiAKICAgICAgICBTeXN0ZW0ub3V0LnByaW50KGZpbmRGcmVlU2xvdHMoYnVzeVNsb3RzLCBib3VuZGFyeSkpOwogICAgfQp9