anchor.diff:      return null;
     }
   
  +  Cell _findFreeCell(Card card) {
  +    for (Cell cell in tableau.cells) {
  +      if (cell.canAccept(card))
  +        return cell;
  +    }
  +    assert(false);
  +    return null;
  +  }
  +
     void _willRemoveFromPile(Card card) {
       CardCoordinator.instance.viewForCard(card).willRemoveFromPile();
     }
  
positive.code: 
    void _performMove(Move move) {
      if (move.count > 1)
        throw "Oops, need fancier logic";
  
      Pile source = _sourcePile(move);
      Card card = source.cards.last;
      Pile destination = _destiniationPile(move, card);
  
      assert(source.canTake(card));
      assert(destination.canAccept(card));
  
  
negative.code:   int _nextMove = 0;
    Completer _completer = new Completer();
  
    static final _moveDelay = new Duration(milliseconds: 500);
  
    SolutionPlayer(this.tableau, this.solution);
  
    Future play() {
      new Timer.periodic(_moveDelay, (timer) {
        if (_nextMove >= solution.moves.length) {
          timer.cancel();
          _completer.complete();
          return;
        }
  