Skip to content

Instantly share code, notes, and snippets.

@vadym-vorobel
Created March 21, 2017 15:46
Show Gist options
  • Save vadym-vorobel/cb669bbe1dd15cc808f1e7e03c1ce4cd to your computer and use it in GitHub Desktop.
Save vadym-vorobel/cb669bbe1dd15cc808f1e7e03c1ce4cd to your computer and use it in GitHub Desktop.
TernopilJS. Lesson 2. Task 1. Good solution
function nextBigger(number) {
var digits = number.toString().split('').map(function(item) {
return parseInt(item, 10);
});
function swap(arr, firstIndex, secondIndex) {
var resultArr = arr.slice(0);
resultArr[secondIndex] = arr[firstIndex];
resultArr[firstIndex] = arr[secondIndex];
return resultArr;
}
function replaceDigits(arr, lastIndex) {
for (var i = lastIndex; i >= lastIndex - 1; --i) {
var start, end;
if (arr[i] < arr[lastIndex]) {
if (arr[i] === 0) {
start = arr.slice(0, i);
// first value is smallest non zero, second - zero
end = swap(arr.slice(i, arr.length).sort(), 0, 1);
} else {
arr = swap(arr, i, lastIndex);
start = arr.slice(0, lastIndex);
end = arr.slice(lastIndex, arr.length).sort();
}
return start.concat(end);
}
if (i - 1 === 0 && arr[0] < arr[lastIndex]) {
arr = swap(arr, 0, lastIndex);
start = arr.slice(0, i);
end = arr.slice(i, arr.length).sort();
return start.concat(end);
}
}
return replaceDigits(arr, --lastIndex);
}
return parseInt(replaceDigits(digits, digits.length - 1).join(''), 10);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment