/** * * * * * */ function* countPropagate(initialNumber, infectedRate, uptoMinute=Number.MAX_SAFE_INTEGER) { let minute = 0; let f = initialNumber ; while(minute <= uptoMinute) { yield [minute, Number.parseInt(f.toFixed()), f]; f = f * infectedRate; ++minute; } } function showInfectedState(state, target) { const stateAsString = state.join(" ") + "\n"; const tmp = target.innerText; target.innerText = stateAsString + tmp; } function calculate(target) { const LAST_MINUTE = 10; const initial = Number.parseInt(document.getElementById("init").value); const rate = Number.parseFloat(document.getElementById("rate").value); const cashOrCrash = countPropagate(initial, rate); for( let i = 0; i <= LAST_MINUTE; ++i ) { const infectedState = cashOrCrash.next() showInfectedState(infectedState.value, target); } return cashOrCrash; } document.addEventListener("DOMContentLoaded", () => { const target = document.getElementById("state"); let cashOrCrash = calculate(target); document.getElementById("reset").addEventListener("click", ()=> { target.innerText = ""; cashOrCrash = calculate(target); }); document.getElementById("more").addEventListener("mousedown", () => { const nextState = cashOrCrash.next(); if(nextState.done) { console.log("DONE"); } else { showInfectedState(nextState.value, target); } }); });