/*
* 線と線の重なる長さを返す
*/
getLength: function (l1, r1, l2, r2) {
var type1 = null;
// 線2は線1より右側から始まる
if (l1 < l2) {
// 線は重なっている
if (l2 < r1) {
type1 = 'center';
}
// 線は重なってない
else {
type1 = 'right';
}
}
// 線2は線1より左側から始まる
else {
type1 = 'left';
}
var type2 = null;
// 線2の終わりは線1の開始よりも右
// 線は重なっている
if (l1 < r2) {
// 線2の終わりは、線1の終わりよりも右
if (r1 < r2) {
type2 = 'right';
}
// 線2の終わりは、線1の終わりよりも左
else {
type2 = 'center'
}
}
// 線は重なってない
else {
type2 = 'left'
}
// 結果
if (type1 === 'right') { return 0; }
if (type2 === 'left') { return 0; }
if (type1 === 'center') {
// 線2は全て含まれる
if (type2 === 'center') { return r2 - l2; }
// 線2は一部含まれる
if (type2 === 'right') { return r1 - l2; }
}
if (type1 === 'left') {
// 線2は線1を全て含む(線1の長さが重なっている)
if (type2 === 'right') { return r1 - l1; }
// 線2は一部含まれる
if (type2 === 'center') { return r2 - l1; }
}
},
何をやっているのかというと、2つの線が重なってる量を取得する関数を作ってるだけ。いかに長い無駄なプログラムをかけるか競っていた訳ではありません。
/*
* 線と線の重なる長さを返す
*/
getLength: function (l1, r1, l2, r2) {
return Math.max(Math.min(r1, r2) - Math.max(l1, l2), 0);
},
で書ける。恥ずかしい。途中で気づいた。
無駄っぷりが半端ないので、残しておく。