procrastination-sort
Version:
The world's most honest sorting method: swaps elements slowly, checks Twitter constantly, and finishes eventually. Not not prod-safe
95 lines • 3.81 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
export function procrastinationSort(array, config) {
var _a;
if (config === void 0) { config = {}; }
var defaultConfig = {
verbose: false,
procrastinationProbability: 0.85,
procrastinationActivities: [
"Googling 'how to sort arrays'",
'Watching another cat videos on YouTube',
'Checking drama on Twitter/X',
'Scrolling through Instagram',
'Binge-watching Netflix',
'Reading random articles on Medium',
'Refactoring unnecessary code',
'Learning a new technology',
],
comparator: function (a, b) { return Number(a) - Number(b); },
};
var finalConfig = __assign(__assign({}, defaultConfig), config);
var startTime = performance.now();
var sorted = false;
var coffeeCups = 0;
var swapsMade = 0;
var excuses = [];
var comparator = finalConfig.comparator || (function (a, b) { return Number(a) - Number(b); });
while (!sorted) {
if (finalConfig.verbose)
console.log('Trying to sort...');
if (Math.random() < finalConfig.procrastinationProbability) {
var activity = finalConfig.procrastinationActivities[Math.floor(Math.random() * finalConfig.procrastinationActivities.length)];
excuses.push(activity);
if (finalConfig.verbose)
console.log(activity);
coffeeCups++;
continue;
}
if (finalConfig.verbose)
console.log('Decided to actually sort!');
var didSwap = false;
for (var i = 0; i < array.length - 1; i++) {
if (comparator(array[i], array[i + 1]) > 0) {
_a = [array[i + 1], array[i]], array[i] = _a[0], array[i + 1] = _a[1];
swapsMade++;
didSwap = true;
if (finalConfig.verbose)
console.log("Swapped elements at index ".concat(i, " and ").concat(i + 1, "..."));
break;
}
}
sorted = array.every(function (_, i) { return i === array.length - 1 || comparator(array[i], array[i + 1]) <= 0; });
if (!sorted && didSwap) {
coffeeCups++;
if (finalConfig.verbose)
console.log("Taking coffee break #".concat(coffeeCups, "..."));
}
}
var timeElapsed = performance.now() - startTime;
var timeInSeconds = (timeElapsed / 1000).toFixed(3);
if (finalConfig.verbose) {
console.log("\n--- Sorting Complete! ---");
console.log("Time taken: ".concat(timeInSeconds, " seconds"));
console.log("Coffee breaks taken: ".concat(coffeeCups));
console.log("Swaps made: ".concat(swapsMade));
console.log("Excuses used:");
excuses.forEach(function (excuse, index) {
console.log(" ".concat(index + 1, ". ").concat(excuse));
});
}
return {
sortedArray: array,
timeElapsed: timeElapsed,
swapsMade: swapsMade,
coffeeCups: coffeeCups,
excusesUsed: excuses,
};
}
var unsortedArray = [6, 3, 4, 1, 2, 9, 7, 8, 5];
var result = procrastinationSort(unsortedArray);
console.log(result.sortedArray); // Output: [1, 2, 4, 5, 8, 9]
console.log(result.timeElapsed); // Output: 0.001
console.log(result.coffeeCups);
console.log(result.swapsMade);
console.log(result.excusesUsed);
//# sourceMappingURL=index.js.map