Paste: aoc9

Author: jonenst
Mode: factor
Date: Sun, 9 Dec 2018 20:37:21
Plain Text |
: link ( node1 node2 -- ) [ prev<< ] [ swap next<< ] 2bi ;
: insert-normal ( node i -- node' )
  f f <dlist-node> [
  over next>> dupd
  [ link ] 2bi@ ] keep ;
: unlink ( node -- )
  [ [ prev>> ] [ next>> ] bi link ]
  [ f >>prev f >>next drop ] bi ;

:: marble-score ( marbles players -- score )
0 :> player!
0 :> marble!
0 f f <dlist-node> dup >>next dup >>prev :> node!
H{ } clone :> scores
marbles [
  marble 1 + marble!
  player 1 + players mod player!
  marble 23 mod zero? [
    node 7 [ prev>> ] times :> tmpnode
    tmpnode next>> node!
    tmpnode node-value :> bonus
    tmpnode unlink  
    marble bonus + player scores at+
  ] [
    node next>> marble insert-normal node!
  ] if
] times
scores values supremum ;

New Annotation

Summary:
Author:
Mode:
Body: