開発環境
- 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 コメント:
コメントを投稿