2017年2月28日 (火)

階乗計算

/* 階乗計算 */
var factorial = function(n) {
  if (n > 0) return n*factorial(n-1);
  return 1;
};

| | コメント (0)

2017年1月12日 (木)

intval, floatval

var intval = function(s, b) {
  var n = parseInt(s, b || 10);
  return isNaN(n) ? 0 : n;
};

var floatval = function(s) {   var n = parseFloat(s);   return isNaN(n) ? 0 : n; };

| | コメント (2)

2016年12月 7日 (水)

配列の差を計算する

/*  配列の差を計算する */
Array.prototype.diff = function(arr) {
  for (var i = this.length-1; i >= 0; i--)
    if (arr.indexOf(this[i]) != -1)
      this.splice(i, 1);
  return this;
};

| | コメント (0)

2016年3月15日 (火)

画像をぐるぐる切り替える

/* use <canvas> */
jQuery.fn.extend({
  guruguru: function(mach, step) {
    var ctx = this.get(0).getContext('2d');
    var imgs = [], len = parseInt(360/step);
    var self = this, cnt = 0;
    this.hide();
    this.css('cursor', 'pointer');
    for (var i = 0; i < len; i++) {
      var src = ('0000'+i).slice(-4);
      imgs[i] = new Image;
      imgs[i].src = 'images/'+mach+'_'+src+'.jpg';
      imgs[i].onload = function() {
        cnt++;
        if (cnt == len) {
          ctx.drawImage(imgs[0], 0, 0);
          self.fadeIn(1000);
          self.__guruguru(ctx, 30, imgs, len);
        }
      };     
    }
  },
  __guruguru: function(ctx, px, imgs, len) {
    var flag = false, x = 0, no = 0;
    this.on('mousedown', function(e) {
      flag = true;
      x = e.clientX;
      $(this).css('cursor', 'move');
    });
    this.on('mouseup mouseout', function(e) {
      if (flag) {  
        flag = false;
        $(this).css('cursor', 'pointer');
      }
    });
    this.on('mousemove', function(e) {
      if (flag) {
        var cx = e.clientX;
        var t = Math.round(10*len+no+(cx-x)/px)%len;
        if (t != no) {
          ctx.drawImage(imgs[t], 0, 0);
          x = cx;
          no = t;
        }
      }
    });
  }
});

| | コメント (0)

2015年4月25日 (土)

最大公約数を求める

if (!Math.gcd) {
  Math.gcd = function() {
    var len = arguments.length;
    if (len == 0) return null;
    var x = arguments[0];
    for (var i = 1; i < len; i++) {
      var y = arguments[i];
      x = (function(a, b) {
        var r;
        while ((r = a%b) != 0) {
          a = b; b = r;
        }
        return b;
      })(x, y);
    }
    return Math.abs(x);
  };
}

| | コメント (0)

«今日が期間内かどうか