const ASSIGNMENT = 'assignment'; const ANSWER = 'answer'; const ALGORITHM_CHECKBOX = 'algorithm'; const CONTAINER_NULL_CHARACTER=0; const INSTRUCTION_FROM='from'; const INSTRUCTION_MOVE='move'; const INSTRUCTION_TO='to'; const NEWLINE_CHARACTER = '\n'; /** * Main function */ window.onload = function() { document.getElementById(ASSIGNMENT).addEventListener("input", calculateAnswer); document.getElementById(ALGORITHM_CHECKBOX).addEventListener("click", calculateAnswer); } /** * Listener function for input in assignment field. * @param event the onInput event */ function calculateAnswer(event) { console.info("Calculating answer for input..."); let assignment = document.getElementById(ASSIGNMENT).value; let allAtOnce = document.getElementById(ALGORITHM_CHECKBOX).checked; let answer = algorithm(assignment, allAtOnce); document.getElementById(ANSWER).innerText = answer; } /** * Calculate the answer to assignment. * @param assignment the input from the assignment. * @param allAtOnce should all containers be moved at once. * @return string the answer */ function algorithm(assignment, allAtOnce) { let lines = assignment.split(NEWLINE_CHARACTER); let containerPlan = Array.from({length:(lines[0].length+1)/4}, () => []) console.info("Linecount:" + lines.length); let parsec = true; for(let i=0; i 0) { let container = containerPlan[instruction.from].shift(); containerPlan[instruction.to].unshift(container); instruction.move--; movecount++; } console.debug("moved:" + movecount); } else { let splicedContainers = containerPlan[instruction.from].splice(0, instruction.move); containerPlan[instruction.to].unshift(...splicedContainers); } //console.table(containerPlan); } } let result=""; for(let k=0; k