数学 (Mathematics)

创建时间:
2014-01-27 15:09
最近更新:
2018-07-07 01:09

Resource

  1. 最全数学各个分支简介
  2. 如何计算圆周率 Pi

24点

  1. 关于 24 点的事实
  2. 24点计算器 - ip138.com

http://www.ip138.com/24dian/ 源码分析

所有源码集中在 http://www.ip138.com/static/script/24dian/index.js 中,该文件完整备份如下,所有注释均由 Tony 补充:

(function(){
    //Core function:
    function calc24(){
        var expression = [].slice.call(arguments).sort();
        //Now "expression" is [1, 3, 5, 7] if user input 1, 3, 5, 7:
        var operator = ['+','-','*','/'],result = [],hash = {};
        (function(expression){
            var len = expression.length;
            //Now "len" is 4.
            var group_str = expression.slice(0).sort().toString();
            //Now "group_str" is '1,3,5,7'.
            if(!hash[group_str]){
                hash[group_str] = true;
                if(len>1){
                    for(var i=0;i<len-1;i++){
                        for(var j=i+1;j<len;j++){
                            var sort_expression = expression.slice(0);
                            var exp1 = sort_expression.splice(j,1)[0];
                            //Now "exp1" is 3.
                            var exp2 = sort_expression.splice(i,1)[0];
                            //Now "exp2" is 1.
                            for(var n=0;n<4;n++){
                                var new_expression = sort_expression.slice(0);
                                //Now "new_expression" is [5, 7].
                                new_expression.splice(0,0,n>1||len==2?exp1+operator[n]+exp2:'('+exp1+operator[n]+exp2+')');
                                //recursion (递归)
                                arguments.callee(new_expression);
                                if(exp1!=exp2&&n%2){
                                    new_expression.splice(0,1,n>1||len==2?exp2+operator[n]+exp1:'('+exp2+operator[n]+exp1+')');
                                    //recursion (递归)
                                    arguments.callee(new_expression);
                                }
                            }
                        }
                    }
                }else if(Math.abs(eval(expression[0])-24)<1e-6){
                    //Gain 1 solution:
                    result.push(expression[0]);
                }
            }
        })(expression);
        return result;
    }

    //Get 4 inputs:
    var $inputs = DOMUtil.getElementsByClassName('input-text');
    //Button click event handler:
    DOMUtil.getElementsByClassName('input-button')[0].onclick = function(){
        //Get user input, if not then 0:
        var num1 = +($inputs[0].value)|| 0;
        var num2 = +($inputs[1].value)|| 0;
        var num3 = +($inputs[2].value)|| 0;
        var num4 = +($inputs[3].value)|| 0;
        //Calculate 24 point:
        var arr = calc24(num1,num2,num3,num4);
        //Message for no solution:
        var str = arr.length?'':'不能够计算得到!';
        //One line per solution:
        for(var i = arr.length;i--;){
            str += arr[i]+'\n';
        }
        //Output:
        document.getElementsByTagName('TEXTAREA')[0].value = str;
    }
})();

BBC纪录片 数学的故事 The Story of Maths 共四集

  1. bilibili - 1宇宙语言 2东方奇才 3空间边界 4超越无限
  1. 宇宙语言 - 57m06s
  2. 东方奇才 - 56m16s
  3. 空间边缘 - 57m41s
  4. 超越无限 - 57m30s

10 部关于数学的顶级纪录片

10 部关于数学的顶级纪录片

  1. BBC - the joy of stats (统计的乐趣) - 59m15s
  2. 终极密码: 数字 - 49m29s
  3. 约翰纳什 - 伟大的疯狂 - 53m07s
  4. 生活中无处不在的斐波那契数列 数学大迷思 - 02m50s
  5. 数学大迷思 The Great Math Mystery - 53m50s
  6. BBC 逻辑的乐趣 - 02m02s
  7. BBC 逻辑的乐趣 - 59m28s
  8. BBC 一根绳子的长度 - 29m54s
  9. 寻找隐藏的维度 - 54m25s
  10. 维度 数学漫步 - 10集
  11. 神秘的混沌理论 - 59m13s