JSFiddle - React, Tailwind, and code Playground

by ivanovsuper

HTML

<script src="http://ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js"></script>
Ширина: <input type="number" id="N" value="14"/>
Высота: <input type="number" id="M" value="15"/> 
<button id="getcount">Получить количество ходов</button><br/>

<textarea id="log"></textarea>

CSS

#log {width:99%;height:600px;display:block}

JavaScript

function d(msg, empty) {
    if (empty) $("#log").val('');
    $("#log").val($("#log").val() + '\n' + msg);
};
$("#getcount").click(function() {
    var r = {
        "0,0": 1
    };
    var N = parseInt($("#N").val()),
        M = parseInt($("#M").val());
    for (var k = 0; k < N + M; k++) {
        var j;
        for (var i = 0; i < N; i++) {
            j = k - i;
            if (j < 0 || j >= M) continue;
            if (j - 2 >= 0) {
                if (i - 1 >= 0) {
                    r[i + "," + j] = (r[i + "," + j] || 0) + (r[(i - 1) + "," + (j - 2)] || 0);
                }
                if (i + 1 < N) {
                    r[i + "," + j] = (r[i + "," + j] || 0) + (r[(i + 1) + "," + (j - 2)] || 0);
                }
            }
            if (i - 2 >= 0) {
                if (j - 1 >= 0) {
                    r[i + "," + j] = (r[i + "," + j] || 0) + (r[(i - 2) + "," + (j - 1)] || 0);
                }
                if (j + 1 < M) {
                    r[i + "," + j] = (r[i + "," + j] || 0) + (r[(i - 2) + "," + (j + 1)] || 0);
                }
            }
        }
    }
    d(r[(N - 1) + "," + (M - 1)]);
});