UNPKG

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
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