anchor.diff:    },
     "solve": (ArgResults result) {
       bool showSteps = result["steps"];
  +    bool time = result["time"];
       String problem = result.rest[0];
       if (problem == "-") problem = stdin.readLineSync();
       SudokuBoard problemBoard = new SudokuBoard.fromString(problem);
  
positive.code: }
  
  Duration percentileDuration(Iterable<Duration> durations, double percentile) {
    if (durations.length == 1)
      return durations.first;
    double position = durations.length * percentile;
    double positionFraction = position % 1;
    if (positionFraction == 0) return durations.skip(position.floor()).first;
  
negative.code:     ..addOption("count",
          abbr: "c",
          defaultsTo: "100",
          help: "Number of problems to generate (default is 100)")
      ..addFlag("help", abbr: "h", help: "Display help", negatable: false);
    parser.addCommand("solve")
      ..addFlag("steps", abbr: "s", help: "Show solve steps")
      ..addFlag("time", abbr: "t", help: "Provide timing")
      ..addFlag("help", abbr: "h", help: "Display help", negatable: false);
    parser.addFlag("help", abbr: "h", help: "Display help", negatable: false);
    ArgResults result = parser.parse(args);
    if (result.command == null) {
      if (result["help"]) {
        writeHelp(parser, stderr);
      } else
        generateProblems(1);
    } else {
      if (result.command["help"]) {
        writeHelp(parser.commands[result.command.name], stderr);
      } else {
        CommandParser commandParser = commandParsers[result.command.name];
        commandParser(result.command);
      }
    }
  }
  