2016年8月30日火曜日

開発環境

Pythonからはじめる数学入門 (Amit Saha (著)、黒川 利明 (翻訳)、オライリージャパン)の5章(集合と確率を操作する)、3.9(プログラミングチャレンジ)、問題5-4(トランプをよく切る)をJavaScript(とstatistics.js)で取り組んでみる。

問題5-4(トランプをよく切る)

コード(Emacs)

HTML5

<div id="output0"></div>
<button id="shuffle0">shuffle</button>

<script src="sample4.js"></script>

JavaScript

(function () {
    'use strict';
    var card,
        suits = ['clubs', 'spades', 'hurts', 'diamonds'],
        ranks,
        div_output = document.querySelector('#output0'),
        button_shuffle = document.querySelector('#shuffle0'),
        nl = '<br>',
        range,
        display;

    Array.prototype.shuffle = function () {
        var shuffled = [],
            len = this.length,
            len0,
            i;

        for (len0 = len; len0 > 0; len0 -= 1) {
            i = Math.floor(Math.random() * len0);
            shuffled.push(this[i]);
            this.splice(i, 1);
        }
        for (i = 0; i < len; i += 1) {
            this[i] = shuffled[i];
        }
    };
    card = function (suit, rank) {
        var that = {};

        that.toString = function () {
            return rank + ' of ' + suit;
        };
        return that;
    };
    range = function (start, end, step) {
        var nums = [],
            i;

        for (i = start; i < end; i += step) {
            nums.push(i);
        }
        return nums;
    };

    ranks = ['ace'].concat(range(2, 11, 1)).concat(['jack', 'queen', 'king']);

    display = function () {
        var cards = [],
            i,
            i_max,
            j,
            j_max,
            output = '';
        
        for (i = 0, i_max = suits.length; i < i_max; i += 1) {
            for (j = 0, j_max = ranks.length; j < j_max; j += 1) {
                cards.push(card(suits[i], ranks[j]));
            }
        }
        cards.shuffle();
        cards.forEach(function (card) {
            output += card + nl;
        });
        div_output.innerHTML = output;
    };

    button_shuffle.onclick = display;
    display();
}());

0 コメント:

コメントを投稿

Comments on Google+: