This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// i | |
// j | |
// 4 2 1 3 6 0 | |
// i | |
// j | |
// 4 2 1 3 6 0 | |
// 2 4 1 3 6 0 # 2 < 4 | |
// i |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
// Reference: https://bit.ly/2yjWDeY | |
// Time complexity: O(n log n) on average or O(n^2) for worst-case | |
// Space complexity: O(n) | |
function quickSort(list) { | |
if (list.length < 2) return list; | |
const left = []; | |
const right = []; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3 | |
// http://es5.github.io/#x11.9.3 | |
// Abstract/ loose equality comparison will do type coercion | |
// While strict equality comparison will compare the types | |
null == undefined; // true |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function bsr(arr, m) { | |
let l = 0; | |
let r = arr.length - 1; | |
while (l <= r) { | |
const mid = (l + (r - l) / 2) | 0; | |
const val = arr[mid]; | |
if (val === m) return mid; | |
if (m > val) l = mid + 1; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function bfs<T>(tree: BSTNode<T>, fn: (n: T) => void) { | |
const queue = [tree]; | |
while (queue.length) { | |
const cur = queue.shift(); | |
if (cur.left) queue.push(cur.left); | |
if (cur.right) queue.push(cur.right); | |
fn(cur.value); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* This was intended for checking that an ASCII character is in range. | |
* But this turns out to be a function that can be used for checking if a number is in range too. | |
* | |
* Assuming, `MIN` and `MAX` are hardcoded to the code point of the character 'a' and | |
* the character 'z', respectively, the following equation will always return positive integers | |
* in the difference of the `MIN` and the `MAX`: | |
* | |
* (MAX - x) and (x - MIN) must always be positive for any of the results. | |
* |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** See https://bit.ly/2gvCcqe to learn more about UUID v4 for browsers */ | |
function uuidv4() { | |
if (window.crypto && window.crypto.getRandomValues) { | |
return ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, c => | |
(c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)); | |
} | |
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => { | |
const r = Math.random() * 16 | 0; | |
const v = c == 'x' ? r : (r & 0x3 | 0x8); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** .iter() */ | |
Object.defineProperty(Array.prototype, 'iter', { | |
value: function arrayIter() { | |
const ctx = this; | |
return ctx.values(); | |
}, | |
}); | |
/** .sum() after calling .iter() */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* ```json | |
* e.g. 10:21:02 GMT+0700 (インドシナ時間) | |
* format {time} {timezone} ({timezone_name}) | |
* ``` | |
* | |
* Note that `timezone_name` will follow the system language but | |
* that does not affect our purpose here as we only need `time` | |
* and `timezone`. | |
* |