"Code Challenge: Change Dispenser"より、0.37ドルがコインだと何枚になるかカウントするロジック。
function makeChange (money) {
var i, num,
output = [],
coins = [
[100, "dollar", "dollars" ],
[25, "quarter", "quarters"],
[10, "dime", "dimes" ],
[5, "nickel", "nickels" ],
[1, "penny", "pennies" ]
];
money = money * 100; // avoid float precision issues
for (i = 0; i < coins.length; i++) {
num = Math.floor(money / coins[i][0]);
money -= num * coins[i][0];
if (num) {
output.push(num + " " + coins[i][num > 1 ? 2 : 1]);
}
}
return output.join(", ");
}
makeChange(0.37); // "1 quarter, 1 dime, 2 pennies"
ポイントは、コインが複数のときは単位を複数形にするところですね。
これを応用して、日本のお金で。
日本円の場合、複数になっても単語が複数形にならないから、若干楽かも。
function makeChange (money) {
var i, num,
output = [],
coins = [
[10000, "1万円札"],
[5000, "5000円札"],
[2000, "2000円札" ],
[1000, "1000円札" ],
[500, "500円玉" ],
[100, "100円玉" ],
[50, "50円玉" ],
[10, "10円玉" ],
[5, "5円玉" ],
[1, "1円玉" ]
];
for (i = 0; i < coins.length; i++) {
num = Math.floor(money / coins[i][0]);
money -= num * coins[i][0];
if (num) {
output.push(coins[i][1]+ " × " + num );
}
}
return output.join(", ");
}
makeChange(12057); // "1万円札 × 1, 2千円札 × 1, 50円玉 × 1, 5円玉 × 1, 1円玉 × 2"
だからどうしたってロジックですね。