/* 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
= "8-10, 2-4, 15-18";
System.
out.
print(findFreeSlots
(busySlots, boundary
)); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKICAgIHN0YXRpYyB2b2lkIHNlbGVjdGlvblNvcnQoaW50W10gYXJyLCBpbnQgbikgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbiAtIDE7IGkrKykgewogICAgICAgICAgICBpbnQgbWluID0gaTsKICAgICAgICAgICAgZm9yIChpbnQgaiA9IGkgKyAxOyBqIDwgbjsgaisrKSB7CiAgICAgICAgICAgICAgICBpZiAoYXJyW2pdIDwgYXJyW21pbl0pIHsKICAgICAgICAgICAgICAgICAgICBtaW4gPSBqOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGludCB0bXAgPSBhcnJbaV07CiAgICAgICAgICAgIGFycltpXSA9IGFyclttaW5dOwogICAgICAgICAgICBhcnJbbWluXSA9IHRtcDsKICAgICAgICB9CiAgICB9CgogICAgc3RhdGljIGludFtdIGdldFJhbmdlKFN0cmluZyBpbnB1dCwgYm9vbGVhbiBpbmNsdXNpdmVFbmQpIHsKCSAgICBpbnRbXSB0ZW1wID0gbmV3IGludFsxMDBdOwoJICAgIGludCBpbmRleCA9IDA7CgkgICAgU3RyaW5nW10gcmFuZ2VzID0gaW5wdXQuc3BsaXQoIixcXHMqIik7CgkgICAgZm9yIChTdHJpbmcgcmFuZ2UgOiByYW5nZXMpIHsKCSAgICAgICAgU3RyaW5nW10gcGFydHMgPSByYW5nZS5zcGxpdCgiLSIpOwoJICAgICAgICBpbnQgc3RhcnQgPSBJbnRlZ2VyLnBhcnNlSW50KHBhcnRzWzBdKTsKCSAgICAgICAgaW50IGVuZCA9IEludGVnZXIucGFyc2VJbnQocGFydHNbMV0pOwoJCgkgICAgICAgIGZvciAoaW50IGogPSBzdGFydDsgaW5jbHVzaXZlRW5kID8gaiA8PSBlbmQgOiBqIDwgZW5kOyBqKyspIHsKCSAgICAgICAgICAgIHRlbXBbaW5kZXgrK10gPSBqOwoJICAgICAgICB9CgkgICAgfQoJICAgIHJldHVybiBBcnJheXMuY29weU9mKHRlbXAsIGluZGV4KTsKCX0KCgogICAgc3RhdGljIFN0cmluZyBhcnJUb1N0cmluZyhpbnRbXSBib3VuZEFyciwgaW50IGJvdW5kTGVuLCBpbnRbXSBidXN5QXJyLCBpbnQgYnVzeUxlbikgewoJICAgIFN0cmluZyByZXN1bHQgPSAiIjsKCSAgICBib29sZWFuIGluRnJlZVNsb3QgPSBmYWxzZTsKCSAgICBpbnQgZnJlZVN0YXJ0ID0gMDsKCQoJICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYm91bmRMZW47IGkrKykgewoJICAgICAgICBpbnQgaG91ciA9IGJvdW5kQXJyW2ldOwoJICAgICAgICBib29sZWFuIGlzQnVzeUhvdXIgPSBmYWxzZTsKCQoJICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGJ1c3lMZW47IGorKykgewoJICAgICAgICAgICAgaWYgKGhvdXIgPT0gYnVzeUFycltqXSkgaXNCdXN5SG91ciA9IHRydWU7CgkgICAgICAgIH0KCQoJICAgICAgICBpZiAoIWlzQnVzeUhvdXIgJiYgIWluRnJlZVNsb3QpIHsKCSAgICAgICAgICAgIGZyZWVTdGFydCA9IGhvdXI7CgkgICAgICAgICAgICBpbkZyZWVTbG90ID0gdHJ1ZTsKCSAgICAgICAgfQoJCgkgICAgICAgIGlmIChpc0J1c3lIb3VyICYmIGluRnJlZVNsb3QpIHsKCSAgICAgICAgICAgIHJlc3VsdCArPSBmcmVlU3RhcnQgKyAiLSIgKyBob3VyICsgIiwgIjsKCSAgICAgICAgICAgIGluRnJlZVNsb3QgPSBmYWxzZTsKCSAgICAgICAgfQoJICAgIH0KCQoJICAgIGlmIChpbkZyZWVTbG90KSB7CgkgICAgICAgIHJlc3VsdCArPSBmcmVlU3RhcnQgKyAiLSIgKyBib3VuZEFycltib3VuZExlbiAtIDFdOwoJICAgIH0KCSAgICByZXR1cm4gcmVzdWx0OwoJfQoKCiAgICBzdGF0aWMgU3RyaW5nIGZpbmRGcmVlU2xvdHMoU3RyaW5nIGJ1c3ksIFN0cmluZyBib3VuZGFyeSkgewogICAgICAgIGludFtdIGJvdW5kQXJyID0gZ2V0UmFuZ2UoIjAtMjQiLCB0cnVlKTsKCQlpbnRbXSBidXN5QXJyID0gZ2V0UmFuZ2UoIjItNCwgOC0xMCwgMTUtMTgiLCBmYWxzZSk7CgkJCiAgICAgICAgaW50IGJ1c3lMZW4gPSBidXN5QXJyLmxlbmd0aDsKICAgICAgICBpbnQgYm91bmRMZW4gPSBib3VuZEFyci5sZW5ndGg7CiAgICAgICAgcmV0dXJuIGFyclRvU3RyaW5nKGJvdW5kQXJyLCBib3VuZExlbiwgYnVzeUFyciwgYnVzeUxlbik7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIFN0cmluZyBidXN5U2xvdHMgPSAiOC0xMCwgMi00LCAxNS0xOCI7CiAgICAgICAgU3RyaW5nIGJvdW5kYXJ5ID0gIjAtMjQiOwoKICAgICAgICBTeXN0ZW0ub3V0LnByaW50KGZpbmRGcmVlU2xvdHMoYnVzeVNsb3RzLCBib3VuZGFyeSkpOwogICAgfQp9Cg==