anchor.diff:      [{c, _, #vstate{o = C}}] = ets:lookup(Ets, c),
       [{d, _, #vstate{o = D}}] = ets:lookup(Ets, d),
       [{tpos, OldPos}] = ets:lookup(Ets, tpos),
  +    Delta = abs(clamp(round(5*(D-C)), -4, 4)),
  +    [{delta, X}] = ets:lookup(Ets, delta),
  +    ets:insert(Ets, {delta, X + Delta}),
       RawPos = OldPos + clamp(round(5*(D-C)), -4, 4),
       if RawPos < 0 ->
               NewPos = RawPos + ?AREA_WIDTH;
  
positive.code:     ets:insert(Ets, {fitness, 0}),
      Res = genetica_utils:repeatedly(?NOF_BLOCKS, fun () -> block_run(Ets) end),
  %    io:format("~p~n", [Res]),
      ets:delete(Ets),
      Res.
  
  
negative.code: %    io:format("~P~n~n", [ets:match_object(Ets, '_'), 100]),
      nil.
  
  reset_tracker(Ets) ->
      ets:insert(Ets,
                 [case ets:lookup(Ets, V) 
                      of [{X, Y, _}] ->
                          {X, Y, #vstate{}}
                  end || V <- [a, b, c, d]]).
  
  block_run(Ets) ->
      new_block(Ets),
      genetica_utils:repeatedly(?AREA_HEIGHT, fun() -> step(Ets) end),
      sense(Ets),
      Sensed = ets:select(Ets, ?ETS_INTEGERS),
      reset_tracker(Ets),
      case ets:lookup(Ets, block) of
          [#block{size=S, y=0, x=_}] ->
              if S >= ?TRACKER_SIZE ->
                      {avoid, math:pow(lists:sum(Sensed)/?TRACKER_SIZE, 2)};
                 S < ?TRACKER_SIZE ->
                      {capture, math:pow(lists:sum(Sensed)/S, 2)}
              end
      end.
  
  simulate_run(G) ->
  %    io:format("whole:~n~p~n~n", [G]),
      Ets = ets:new(x, [set]),
      ets:insert(Ets, {delta, 0}),
      Firsts = lists:zip([#edge{from=F, to=T} || T <- [a, b],
                                                 F <- [1, 2, 3, 4, 5, a, b]],
                         lists:sublist(G, 2*7)),
  