initial commit
This commit is contained in:
39
other/add-binary-debug.js
Normal file
39
other/add-binary-debug.js
Normal 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
33
other/add-binary.js
Normal 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
38
other/anagrams.js
Normal 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
67
other/ascii85.js
Normal 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
49
other/brainfuck.js
Normal 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);
|
||||
|
32
other/set-pair-sum-debug.js
Normal file
32
other/set-pair-sum-debug.js
Normal 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
30
other/set-pair-sum.js
Normal 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;
|
Reference in New Issue
Block a user