Skip to content

Instantly share code, notes, and snippets.

View shinout's full-sized avatar
🏠
Working from home

Shin Suzuki shinout

🏠
Working from home
View GitHub Profile
@shinout
shinout / newton_rahpson.coffee
Created April 28, 2014 11:43
Newton-Raphson method
newton_raphson = (f, x0)->
x0 = Math.random() if typeof x0 isnt "number"
fx0 = f(x0)
x = x0 + 0.01 # for approximating gradient
loop
fx = f(x)
gradient = (fx - fx0) / (x - x0)
delta = fx/gradient
break if Math.abs(delta) < 0.0000001
x0 = x
@shinout
shinout / deepCopy.js
Created March 5, 2014 16:51
minimal deep copy in JavaScript
function deepCopy(val) {
if (Array.isArray(val)) return val.map(deepCopy);
if (typeof val != "object" || val === null || val === undefined) return val;
var ret = {};
for (var attr in val) if (val.hasOwnProperty(attr)) ret[attr] = deepCopy(val[attr]);
return ret;
}
@shinout
shinout / select.js
Created May 10, 2013 16:45
an algorithm for selecting a certain number of elements from groups (combination)
// WW XXXX YYY ZZ -> get four characters (e.g. WXXZ)
// var G = [2, 4, 3, 2] // each stands for the number of W, X, Y, Z
// select(G, 4); // get all possible combinations
// [ [2,2,0,0], [2,1,1,0], [2,1,0,1] ... ] // each stands for the number of selected W, X, Y, Z
function sum(G) {
return G.reduce(function(t,v){return v+t},0);
}
function copy(a) {
return a.slice();
@shinout
shinout / transpose.js
Created February 21, 2013 12:44
transpose chords
/**
* transpose.js
* @author SHIN Suzuki
*
**/
/**
* function transpose
*
* @param chordStr (string): documents containing chords
@shinout
shinout / cap_cup.js
Created February 29, 2012 01:30
cap, cup
function unique(arr) {
var ret = [];
for(var i=0, l=arr.length; i<l; i++) {
for(var j=i+1; j<l; j++) {
if (arr[i] === arr[j]) j = ++i;
}
ret.push(arr[i]);
}
return ret;
};
@shinout
shinout / obj_copy.benchmark.js
Created February 26, 2012 17:05
hasOwnProperty is the fastest!!
var values = [
123, // int
"string", // short string
true, // boolean
42.195, // float
"AAAAAABBCCCCCCDDDDDDDDEEEEEEEAAAAAAAAAAAAA", // string
null
];
function passObjByValue(N, nkey, keylen) {
@shinout
shinout / README.md
Created February 23, 2012 15:45
README

LineStream.js

[Node.js] ReadableStream of lines

Installation

$ npm install linestream

OR
@shinout
shinout / watch-and-read.js
Created February 6, 2012 07:37
fs.watchFile() -> fs.read()
var fs = require('fs');
var filename = process.argv[2];
fs.open(filename, 'r', function(err, fd) {
fs.watchFile(filename, function(cstat, pstat) {
var delta = cstat.size - pstat.size;
if (delta <= 0) return;
fs.read(fd, new Buffer(delta), 0, delta, pstat.size, function(err, bytes, buffer) {
console.log("err", err, "delta", delta, "bytes", bytes, "buffer", buffer.toString());
});
var crypto = require('crypto');
var md5sum = crypto.createHash('md5');
md5sum.update('shinout', 'utf8');
console.log(md5sum.digest('hex'));
@shinout
shinout / to_kana_zenkaku.js
Last active December 25, 2020 02:15
半角カナを全角カナに変換するJavaScript
/**
* 半角カナを全角カナに変換する
* 半角スペースは変換しない
* 対応がとれない濁点、半濁点は変換しない
*/
function toKanaZenkaku(str) {
// lengthの等しい2つの文字列でkey-valueをつくる
const makeMap = (str1, str2) =>
str1
.split("")