//implemented function var possibleCombinationSum = function(arr, n) { if (arr.indexOf(n) >= 0) { return true; } if (arr[0] > n) { return false; } if (arr[arr.length - 1] > n) { arr.pop(); return possibleCombinationSum(arr, n); } var listSize = arr.length, combinationsCount = (1 << listSize) for (var i = 1; i < combinationsCount ; i++ ) { var combinationSum = 0; for (var j=0 ; j < listSize ; j++) { if (i & (1 << j)) { combinationSum += arr[j]; } } if (n === combinationSum) { return true; } } return false; }; // Code goes here var StarsFrame = React.createClass({ render: function() { var stars = []; for (var i = 0 ; i ); } return (
{stars}
) } }); var ButtonFrame = React.createClass({ render: function() { var disabled, button, correct = this.props.correct; switch(correct){ case true: button = ( ); break; case false: button = ( ); break; default: disabled = (this.props.selectedNumbers.length === 0); button = ( ); } return (
{button}
) } }); var AnswerFrame = React.createClass({ render: function() { var props = this.props; var selectedNumbers = props.selectedNumbers.map(function(i) { return ( {i} ) }); return (
{selectedNumbers}
) } }); var NumbersFrame = React.createClass({ render: function() { var numbers = [], className, selectNumber = this.props.selectNumber, selectedNumbers = this.props.selectedNumbers, usedNumbers = this.props.usedNumbers; for(var i = 1; i<10 ; i++){ className = "number selected-" + (selectedNumbers.indexOf(i) >= 0); className += " used-" + (usedNumbers.indexOf(i) >= 0); numbers.push(
{i}
); } return (
{numbers}
) } }); var DoneFrame = React.createClass({ render: function(){ return(

{this.props.doneStatus}

); } }); var Game = React.createClass({ getInitialState: function() { return {numberOfStars: this.randomNumber(), selectedNumbers: [], usedNumbers: [], redraws : 5, correct: null, doneStatus: null }; }, resetGame: function(){ this.replaceState(this.getInitialState()); }, randomNumber: function() { return Math.floor(Math.random()*9) + 1 }, selectNumber: function(clickedNumber) { if (this.state.selectedNumbers.indexOf(clickedNumber) < 0){ this.setState( { selectedNumbers: this.state.selectedNumbers.concat(clickedNumber), correct: null } ); } }, unselectNumber: function(clickedNumber){ var selectedNumbers = this.state.selectedNumbers, indexOfNumber = selectedNumbers.indexOf(clickedNumber); selectedNumbers.splice(indexOfNumber,1); this.setState({ selectedNumbers: selectedNumbers, correct: null}); }, sumOfSelectedNumbers: function (){ return this.state.selectedNumbers.reduce(function (p,n){ return p+n; },0); }, checkAnswer : function(){ var correct = (this.state.numberOfStars === this.sumOfSelectedNumbers()); this.setState({correct: correct}); }, acceptAnswer: function() { var usedNumbers = this.state.usedNumbers.concat(this.state.selectedNumbers); this.setState({ selectedNumbers: [], usedNumbers: usedNumbers, correct: null, numberOfStars: this.randomNumber() }, function() { this.updateDoneStatus(); }); }, redraw: function() { if(this.state.redraws > 0){ this.setState({ numberOfStars: this.randomNumber(), correct: null, selectedNumbers: [], redraws: this.state.redraws - 1 },function() { this.updateDoneStatus() }); } }, possibleSolution: function() { var numberOfStars = this.state.numberOfStars, usedNumbers = this.state.usedNumbers, possibleNumbers = []; for(var i = 1 ; i <= 9 ; i++){ if(usedNumbers.indexOf(i) < 0){ possibleNumbers.push(i); } } return possibleCombinationSum(possibleNumbers, numberOfStars) }, updateDoneStatus: function(){ if(this.state.usedNumbers.length === 9){ this.setState({ doneStatus: '성공! 잘하셨어요!'}); return; } if(!this.possibleSolution() && this.state.redraws === 0){ this.setState({ doneStatus: '게임오버 ㅠㅠ'}); return; } }, render: function() { var selectedNumbers = this.state.selectedNumbers, usedNumbers = this.state.usedNumbers, numberOfStars = this.state.numberOfStars, correct = this.state.correct, redraws = this.state.redraws, doneStatus = this.state.doneStatus, bottomFrame; if(doneStatus){ bottomFrame = ; } else { bottomFrame = } return (

play game


{bottomFrame}
) } }); ReactDOM.render( , document.getElementById('example') );