initial commit

This commit is contained in:
Mahdi Dibaiee
2015-07-24 11:14:18 +04:30
commit a7e7ca0350
916 changed files with 101220 additions and 0 deletions

39
other/add-binary-debug.js Normal file
View File

@ -0,0 +1,39 @@
'use strict';
import _ from '../utils';
function addBinary(a, b) {
let c = new Array(a.length + 1),
d = new Array(c.length);
_.debug(`inputs: ${a}, ${b}`);
for (let i = c.length - 1; i >= 0; i--) {
let sum = i > 0 ? a[i - 1] + b[i - 1] + (d[i] || 0) : d[i] || 0;
_.debug(`i = ${i} sum = ${sum}`);
if (sum >= 2) {
d[i - 1] = 1;
c[i] = sum - 2;
_.debug(`sum was >= 2, d[${i - 1}] = 1 c[${i}] = ${sum - 2}`);
} else {
c[i] = sum;
_.debug(`c[${i}] = ${sum}`);
}
}
return c;
}
const argumentToArray = (arg) =>
arg.split('').map(function(el) {
return parseInt(el, 10);
});
let i1 = argumentToArray(_.args[0]),
i2 = argumentToArray(_.args[1]);
let result = addBinary(i1, i2);
_.log(result.join(''));

33
other/add-binary.js Normal file
View File

@ -0,0 +1,33 @@
'use strict';
import _ from '../utils';
function addBinary(a, b) {
let c = new Array(a.length+1),
d = new Array(c.length);
for(let i = c.length-1; i >= 0; i--) {
let sum = i > 0 ? a[i-1] + b[i-1] + (d[i] || 0) : d[i] || 0;
if(sum >= 2) {
d[i-1] = 1;
c[i] = sum - 2;
} else {
c[i] = sum;
}
}
return c;
}
const argumentToArray = (arg) =>
arg.split('').map(function(el) {
return parseInt(el, 10);
});
let i1 = argumentToArray(_.args[0]),
i2 = argumentToArray(_.args[1]);
let result = addBinary(i1, i2);
_.log(result.join(''));

38
other/anagrams.js Normal file
View File

@ -0,0 +1,38 @@
'use strict';
import _ from '../utils';
let words = _.args.length ? _.args : ['a gentleman', 'debit card',
'bad credit', 'elegant man',
'the eyes', 'they see',
'mummy', 'my mum',
'hello', 'lehol'];
function anagrams(words) {
let pairs = [];
for(let w of words) {
let matched = pairs.some(a => {
return a[0] === w || a[1] === w;
});
if(matched) continue;
let sum = sumAscii(w);
let other = words.find(a => {
return w !== a && sumAscii(a) === sum;
});
if(other) pairs.push([w, other]);
}
return pairs;
}
_.log(anagrams(words));
function sumAscii(word) {
return word.split('').reduce((a,b) => {
return a + b.charCodeAt(0);
}, 0);
}

67
other/ascii85.js Normal file
View File

@ -0,0 +1,67 @@
String.prototype.toAscii85 = function() {
var str = '';
for(var i = 0, len = this.length; i < len; i+=4) {
var bin = '';
var zeroes = 0;
for(var j = 0; j < 4; j++) {
var char = this[i+j];
bin += to8bit(char ? char.charCodeAt(0) : (zeroes++, 0));
}
var n = parseInt(bin, 2);
for(var j = 4; j >= 0; j--) {
var c = Math.floor(n / Math.pow(85, j));
n -= c*Math.pow(85, j);
str += String.fromCharCode(c + 33);
}
str = str.slice(0, zeroes > 0 ? -zeroes : undefined);
}
return '<~' + str.replace(/!{5}/g, 'z') + '~>'
}
String.prototype.fromAscii85 = function() {
var str = this.slice(2, -2).replace(/z/g, '!!!!!').replace(/\s/g, '');
var decoded = '';
for(var i = 0, len = str.length; i < len; i+=5) {
var n = 0;
var us = 0;
for(var j = 4; j >= 0; j--) {
var c = str[j+i] || (us++, 'u'),
code = c.charCodeAt(0) - 33;
n += code * Math.pow(85, Math.abs(j-4));
}
var bin = stretch(n.toString(2), 32);
for(var j = 0; j < 32; j+=8) {
var char = parseInt(bin.slice(j, j+8), 2);
decoded += String.fromCharCode(char);
}
decoded = decoded.slice(0, us > 0 ? -us : undefined);
}
return decoded;
}
function to8bit(n) {
var bin = stretch(n.toString(2), 8);
return bin;
}
function stretch(s, n) {
var r = s;
while(r.length < n) {
r = '0' + r;
}
return r;
}

49
other/brainfuck.js Normal file
View File

@ -0,0 +1,49 @@
function brainLuck(code, input) {
var output = '',
data = [],
pointer = 0,
input = input.split('');
for(var i = 0, len = code.length; i < len; i++) {
var cmd = code[i];
if(cmd === '>') ++pointer;
else if(cmd === '<') --pointer;
else if(cmd === '+') data[pointer] = ((data[pointer] || 0) + 1) % 256;
else if(cmd === '-') data[pointer] = ((data[pointer] || 0) + 255) % 256;
else if(cmd === '.') output += String.fromCharCode(data[pointer] || 0);
else if(cmd === ',') data[pointer] = (input.shift() || '').charCodeAt(0);
else if((cmd === '[' && !data[pointer]) ||
(cmd === ']' && data[pointer])) i = matchBracket(code, i);
}
return output;
}
function matchBracket(x, index) {
var dir = x[index] === ']' ? -1 : 1,
seek = 0;
if(dir === -1) {
for(var i = index; i >= 0; i--) {
var char = x[i];
if (char === ']') seek++;
else if (char === '[') seek--;
if(seek === 0) return i;
}
} else {
for(var i = index, len = x.length; i < len; i++) {
var char = x[i];
if (char === '[') seek++;
else if (char === ']') seek--;
if(seek === 0) return i;
}
}
}
var result = brainLuck('\
,>+>>>>++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++<<<<<<[>[>>>>>>+>+<<<<<<<-]>>>>>>>[<<<<<<<+>>>>>>>-]<[>++++++++++[-<-[>>+>+<<<-]>>>[<<<+>>>-]+<[>[-]<[-]]>[<<[>>>+<<<-]>>[-]]<<]>>>[>>+>+<<<-]>>>[<<<+>>>-]+<[>[-]<[-]]>[<<+>>[-]]<<<<<<<]>>>>>[++++++++++++++++++++++++++++++++++++++++++++++++.[-]]++++++++++<[->-<]>++++++++++++++++++++++++++++++++++++++++++++++++.[-]<<<<<<<<<<<<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<-[>>.>.<<<[-]]<<[>>+>+<<<-]>>>[<<<+>>>-]<<[<+>-]>[<+>-]<<<-]', '\n');
console.log(result);

View File

@ -0,0 +1,32 @@
'use strict';
let _ = require('../utils'),
mergeSort = require('../sort/merge');
let args = _.args.numbers(),
set = args.slice(0, -1),
key = args[args.length-1];
function findPair(arr, key) {
_.debug(`findPair(arr, ${key})`);
mergeSort(arr, 0, arr.length);
let i = 0,
j = arr.length-1;
for(let x = 0, len = arr.length-1; x < len; x++) {
let sum = arr[i] + arr[j];
_.debug(`sum = (arr[${i}]=${arr[i]}) + (arr[${j}]=${arr[j]}) = ${sum}`);
if(sum === key) return true;
if(sum > key) j--;
if(sum < key) i++;
}
return false;
}
if(require.main === module) {
_.log(findPair(set, key));
}
module.exports = findPair;

30
other/set-pair-sum.js Normal file
View File

@ -0,0 +1,30 @@
'use strict';
let _ = require('../utils'),
mergeSort = require('../sort/merge');
let args = _.args.numbers(),
set = args.slice(0, -1),
key = args[args.length-1];
function findPair(arr, x) {
mergeSort(arr, 0, arr.length);
let i = 0,
j = arr.length-1;
for(let x = 0, len = arr.length/2; x < len; x++) {
let sum = arr[i] + arr[j];
if(sum === x) return true;
if(sum > x) j--;
if(sum < x) i++;
}
return false;
}
if(require.main === module) {
_.log(findPair(set, key));
}
module.exports = findPair;