Skip to content

Instantly share code, notes, and snippets.

View kirilloid's full-sized avatar

Kirill Sukhomlin kirilloid

View GitHub Profile
@kirilloid
kirilloid / jsPrimitiveCompare
Last active August 27, 2022 04:59
JavaScript primitive (non-strict) comparison table
// italics for objects
(function (values) {
function toString(x) {
var v = x;
v = (v || v === "") ? JSON.stringify(v) : String(v);
if (typeof x === 'object') v = v.italics();
return v;
}
function describe (i,j) {
var v1 = values[i],
@kirilloid
kirilloid / json_diff
Created January 16, 2014 19:36
simple object diff: less than 300 bytes compressed
(function diff(a,b) {
var c = JSON.stringify,
i = function (x) {return x==null||typeof x!='object'};
return (function d(a, b, p) {
var s, k, t='';
if (i(a)||i(b))
return a !==b ? p+'-'+c(b)+p+'+'+c(a) : '';
for (k in a)
t += (k in b)
? ((s = d(a[k], b[k], p+' ')) ? p+k+':'+s : '')
@kirilloid
kirilloid / solver.js
Created April 21, 2015 17:32
Triangle puzzle
/*
0
1 1
1 1 1
1 1 1 1
1 1 1 1 1
|
v
@kirilloid
kirilloid / main.js
Created April 21, 2015 17:33
Randnomizer
(function (n, m) {
if (typeof m === 'undefined') { m = 1; }
if (typeof n === 'undefined') { throw new TypeError("Provide at least first number"); }
function randSort () {
return Math.random() * 2 - 1;
}
function getArr(n) {
var a = [];
for (var i = 1; i <= n; i++) { a.push(i); }
@kirilloid
kirilloid / main.js
Created April 21, 2015 17:34
lz77-alike
(function decompress (s) {
var i, c, out = "", len, offset;
for (i = 0; i < s.length; i++) {
c = s.charCodeAt(i);
if (c >= 256 && c <= 288) {
len = c - 256;
offset = s.charCodeAt(++i);
out += out.substr(-offset, len);
} else {
out += s.charAt(i);
@kirilloid
kirilloid / factory.js
Created March 18, 2016 16:52
es6 patterns
class Shape {
constructor (type, ...args) {
super();
switch (type) {
case 'rect':
return new Rectangle(...args);
case 'circle':
return new Circle(...args);
}
}
@kirilloid
kirilloid / walk-tree.js
Created March 31, 2016 20:15
Cormen 10.4.5
/**
* @param {Node} node
* @template T
*/
function Node (key, left, right) {
/** @property {T} key */
this.key = key;
if (left) left.parent = this;
if (right) right.parent = this;
/** @property {Node<T>} left */
@kirilloid
kirilloid / type.js
Last active July 29, 2022 19:42
getType
function getType (value) {
let type = typeof value;
if (type === 'object') {
return value ? Object.prototype.toString.call(value).slice(8, -1) : 'null';
}
return type;
}
[NaN, 0, 1, Infinity, // numbers
null, undefined, false, 'str', // other primitives
@kirilloid
kirilloid / assign.js
Created October 6, 2016 16:24
immutable
function assingImmutable(obj, toAdd) {
if (!_.isObjectLike(toAdd)) {
return toAdd;
}
key = _.first(path);
if (_.isArray(obj)) {
copy = _.slice(obj);
toAdd.forEach(function (value, idx) {
copy[idx] = assingImmutable(obj[idx], value);
});
function pascalize(string) {
return string.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
}
function normalize(value) {
if (/^(null|true|false)$/.test(value)) {
return JSON.parse(value);
}
return value;
}