| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- const NB_PLAYERS= 418,
- LAST_MARBLE= 70769 * 100;
- function Node(val, next) {
- this.prev = next ? next.prev : this;
- this.next = next || this;
- this.prev.next = this;
- this.next.prev = this;
- this.val = val;
- }
- Node.prototype.print = function() {
- var i = this,
- arr = [];
- do {
- arr.push(i.val);
- i = i.next;
- } while (i !== this);
- console.log(arr);
- }
- Node.prototype.removeNext = function() {
- var val = this.next;
- this.next = this.next.next;
- this.next.prev = this;
- return val;
- }
- Node.prototype.removePrev = function() {
- var val = this.prev;
- this.prev = this.prev.prev;
- this.prev.next = this;
- return val;
- }
- function Board() {
- this.scores = [];
- this.currentPos = new Node(0);
- this.turn = 0;
- for (var i =0; i < NB_PLAYERS; ++i)
- this.scores.push(0);
- }
- Board.prototype.nextTurn = function() {
- var currentPlayer = this.turn %NB_PLAYERS,
- currentMarple = ++this.turn;
- if (currentMarple % 23) {
- this.currentPos = new Node(currentMarple, this.currentPos.next.next);
- } else {
- this.currentPos = this.currentPos.prev.prev.prev.prev.prev.prev;
- this.scores[currentPlayer] += this.currentPos.removePrev().val;
- this.scores[currentPlayer] += currentMarple;
- }
- }
- Board.prototype.find = function(val) {
- var i = this.currentPos;
- do {
- if (i.val === val)
- return i;
- i = i.next;
- } while (i !== this);
- }
- Board.prototype.maxScore = function() {
- return Array.from(this.scores).sort()[this.scores.length -1];
- }
- function run() {
- var board = new Board();
- while (board.turn < LAST_MARBLE)
- board.nextTurn();
- console.log(board.maxScore());
- }
- run();
|