Tiếp tục trong loạt bài các phép tính nhẩm. Hôm nay tôi mô phỏng phép toán tính nhẩm nhanh một số 2 chữ số với 99. Về mặt lập trình tôi vẫn áp dụng mô hình design pattern Strategy mà mình đã giới thiệu ở bài viết Mô phỏng phép tính nhân 2 số bé hơn và gần bằng 100

Tạo ngẫu nhiên số có 2 chữ số trong phép tính nhân với 99
Mã nguồn mô phỏng phép tính bằng javascript
var ABx99 = function ()
{
    $.extend(this, new MathX());

    var number1__1, number1__1_length;
    var number1__1_1, number1__1_2;
    var n9_number1__1_1, n9_number1__1_2;        

    this.onCreateNumber = function ()
    {
        this.number1 = Core.random(100);
        while (this.number1 < 10) this.number1 = Core.random(100);
        
        this.number2 = 99;

        number1__1 = this.number1 - 1;
        number1__1_length = (number1__1 + "").length;

        number1__1_1 = (number1__1 + "").charAt(0);
        number1__1_2 = (number1__1 + "").charAt(1);

        n9_number1__1_1 = 9 - number1__1_1;
        n9_number1__1_2 = 9 - number1__1_2;
    }

    this.onCreateScripts = function (scripts)
    {            
        for (var i = 0; i <= 14; i++)
            scripts.push(this["createScript" + i]());
    }

    this.createScript0 = function ()
    {
        var $this = this; return function ()
        {
            $this.fillQuestion("data-step-1-result", number1__1);
            $this.balance(1, 3, number1__1_length);
            $this.mainForm.find("[data-step=1]").removeClass("hide");
        };
    }
    this.createScript1 = function () { var $this = this; return function () { $this.fillNumber("data-step-1-input-1", $this.number1); }; };
    this.createScript2 = function () { var $this = this; return function () { $this.fillNumber("data-step-1-input-2", 1); }; };
    this.createScript3 = function () { var $this = this; return function () { $this.fillNumber("data-step-1-result", number1__1); }; };
    this.createScript4 = function ()
    {
        var $this = this;
        return function ()
        {
            $this.fillNumber("data-result", number1__1 * 100, function (span, length, index)
            {
                switch (index)
                {
                    case 0: span.addClass("bg-crimson text-white"); break;
                    case 1: span.addClass("bg-danger text-white"); break;
                    case 2:
                    case 3: span.html("?"); break;
                }                    
            });
        };
    }
    this.createScript5 = function ()
    {
        var $this = this; return function ()
        {
            $this.fillQuestion("data-step-2-result", n9_number1__1_1);
            $this.balance(2, 2, 1);
            $this.mainForm.find("[data-step=2]").removeClass("hide");
        };
    };
    this.createScript6 = function () { var $this = this; return function () { $this.fillNumber("data-step-2-input-1", 9); }; };
    this.createScript7 = function () { var $this = this; return function () { $this.fillNumber("data-step-2-input-2", number1__1_1); }; };
    this.createScript8 = function () { var $this = this; return function () { $this.fillNumber("data-step-2-result", n9_number1__1_1); }; };
    this.createScript9 = function ()
    {
        var $this = this;
        return function ()
        {
            $this.fillNumber("data-result", number1__1 * 100 + n9_number1__1_1 * 10, function (span, length, index)
            {
                switch (index)
                {
                    case 2: span.addClass("bg-sienna text-white"); break;
                    case 3: span.html("?"); break;
                }
            });
        };
    }
    this.createScript10 = function ()
    {
        var $this = this; return function ()
        {
            $this.fillQuestion("data-step-3-result", n9_number1__1_2);
            $this.balance(3, 2, 1);
            $this.mainForm.find("[data-step=3]").removeClass("hide");
        };
    };
    this.createScript11 = function () { var $this = this; return function () { $this.fillNumber("data-step-3-input-1", 9); }; };
    this.createScript12 = function () { var $this = this; return function () { $this.fillNumber("data-step-3-input-2", number1__1_2); }; };
    this.createScript13 = function () { var $this = this; return function () { $this.fillNumber("data-step-3-result", n9_number1__1_2); }; };
    this.createScript14 = function ()
    {
        var $this = this;
        return function ()
        {
            $this.fillNumber("data-result", number1__1 * 100 + n9_number1__1_1 * 10 + n9_number1__1_2, function (span, length, index)
            {
                switch (index)
                {
                    case 3: span.addClass("bg-indianred text-white"); break;                        
                }
            });
        };
    }
};

var pageMathX = new PageMathX();
pageMathX.mathX = new ABx99();
pageMathX.start();

Sơn 20