開発環境
- macOS Sierra - Apple (OS)
- Emacs (Text Editor)
- JavaScript (プログラミング言語)
- JavaScript Library
- Safari(Web browser)
- 参考書籍
- JavaScript 第6版 (David Flanagan(著)、村上 列(翻訳)、オライリージャパン)
- JavaScriptリファレンス 第6版(David Flanagan(著)、木下 哲也(翻訳)、オライリージャパン)
アルゴリズムパズル(Anany Levitin (著)、Maria Levitin (著)、黒川 洋 (翻訳)、松崎 公紀 (翻訳)、オライリージャパン)の中級パズル、62.(硬貨拾い(Picking Up Coins))をJavaScriptで。
コード(Emacs)
HTML5
<label for="row0">行数 n = </label> <input id="row0" type="number" min="1" step="1" value="5"> <label for="col0">列数 m = </label> <input id="col0" type="number" min="1" step="1" value="6"> 硬貨の最大枚数: <span id="coins0"></span>枚 <div id="output0"></div> <script src="matrix.js"></script> <script src="sample62.js"></script>
JavaScript
'use strict';
let div_output = document.querySelector('#output0'),
input_row = document.querySelector('#row0'),
input_col = document.querySelector('#col0'),
inputs = [input_row, input_col],
span_coins = document.querySelector('#coins0');
let randomMatrix = (row, col) => {
let m = new Matrix(row, col);
for (let i = 1; i <= row; i += 1) {
for (let j = 1; j <= col; j += 1) {
let elem = Math.random() < 0.5 ? 0 : 1;
m.setElement(i, j, elem);
}
}
return m;
};
let robot = (matrix, row, col) => {
let m = new Matrix(row, col);
for (let i = 1; i <= row; i += 1) {
for (let j = 1; j <= col; j += 1) {
if (i === 1 && j === 1) {
m.setElement(i, j, matrix.getElement(i, j));
} else if (i === 1) {
m.setElement(i, j,
m.getElement(i, j - 1) +
matrix.getElement(i, j));
} else if (j === 1) {
m.setElement(i, j,
m.getElement(i - 1, j) +
matrix.getElement(i, j));
} else {
let elem0 = m.getElement(i, j - 1),
elem1 = m.getElement(i - 1, j),
elem = Math.max(elem0, elem1) + matrix.getElement(i, j);
m.setElement(i, j, elem);
}
}
}
return m;
};
let output = () => {
let row = parseInt(input_row.value, 10),
col = parseInt(input_col.value, 10),
m0 = randomMatrix(row, col),
m1 = robot(m0, row, col);
div_output.innerHTML = `${m0} ${m1}`;
span_coins.innerText = m1.getElement(row, col);
};
inputs.forEach((input) => input.onchange = output);
output();
硬貨の最大枚数: 枚
0 コメント:
コメントを投稿