c4se記:さっちゃんですよ☆

.。oO(さっちゃんですよヾ(〃l _ l)ノ゙☆)

.。oO(此のblogは、主に音樂考察Programming に分類されますよ。ヾ(〃l _ l)ノ゙♬♪♡)

音樂は SoundCloud に公開中です。

考察は現在は主に Scrapbox で公表中です。

Programming は GitHub で開發中です。

#fibbuzz #FibonacciBuzz と #buzzfib #js

FibBuzz (not FizzBuzz) in JavaScript

[FizzBuzz は時代遅れらしいので FibBuzz を発案します | cod.note http://codnote.net/2011/10/13/fibbuzz/ ]


buzzfib()


fibbuzz()

(function (scope) {
'use strict';

var _fibmemo = [0, 1];

function _fib (num) {
    var i;

    if (_fibmemo[num] === void 0) {
        for (i = _fibmemo.length; i <= num; i += 1) {
            _fibmemo[i] = _fibmemo[i - 2] + _fibmemo[i - 1];
        }
    }
    return _fibmemo[num];
}


function _FibIter (num) {
    if (!(this instanceof _FibIter)) {
        return new _FibIter();
    }
    this.idx = Number(num) || 0;
    if (this.idx < 0) {
        throw Error('arguments[0] must larger then +0.');
    }
}

_FibIter.prototype = {
    current: function () {
        return _fib(this.idx);
    },
    next: function () {
        this.idx += 1;
        return this.current();
    }
}


function buzzfib (num) {
    var result = [],
        i,
        p,
        iter = new _FibIter(1);

    for (i = 1; i <= num; i += 1) {
        p = '';
        i === iter.current() && (p += 'Fib');
        i % 5 || (p += 'Buzz');
        result.push(p || i);
        while (iter.current() <= i) {
            iter.next();
        }
    }
    return result;
}


function fibbuzz (num) {
    var result = [],
        i,
        p,
        iter = new _FibIter(1);

    for (i = 0; i < num; i += 1, iter.next()) {
        p = '';
        iter.current() % 3 || (p += 'Fib');
        iter.current() % 5 || (p += 'Buzz');
        result.push(p || i);
    }
    return result;
}

scope.buzzfib = buzzfib;
scope.fibbuzz = fibbuzz;
}(this));

console.log(buzzfib(100));
console.log(fibbuzz(100));

効率あんま気にしてない。きちゃない。イテレータ作る意味がわかってない。