public override bool GradeToken(TokenSpec spec, string token) { var normalizedCorrectValue = new string(spec.Value.ToCharArray().Where(c => char.IsLetterOrDigit(c) && c < 128).ToArray()); var normalizedSubmittedValue = new string(token.ToCharArray().Where(c => char.IsLetterOrDigit(c) && c < 128).ToArray()); return(Normalize(normalizedSubmittedValue) == Normalize(normalizedCorrectValue)); }
public override bool GradeToken(TokenSpec spec, string token) { if (ProblemContext.Flag.GradeCommand.IsEmpty()) { throw new GradeCommandEmptyException(); } File.WriteAllText( Path.Combine(ProblemContext.ProblemFolder, ProblemContext.Flag.GradeInputFlag), token ); if (ProblemContext.Flag.GradeInputFile.NotEmpty()) { File.WriteAllText( Path.Combine(ProblemContext.ProblemFolder, ProblemContext.Flag.GradeInputFile), ProblemContext.Flag.GradeInputData ); } var process = Process.Start( new ProcessStartInfo { FileName = Options.Command, Arguments = string.Format( Options.CommandArgs, ProblemContext.ChallengeFolder, ProblemContext.ProblemFolder, ProblemContext.Flag.GradeImage, ProblemContext.Flag.GradeCommand ) } ); Logger.LogDebug(process.StartInfo.Arguments); int timeout = ProblemContext.Flag.GradeCommandTimeout > 0 ? ProblemContext.Flag.GradeCommandTimeout : Options.MaxScriptSeconds; process.WaitForExit(timeout * 1000); if (!process.HasExited) { process.Kill(); throw new ProblemGradingTimeoutException(); } var fileName = Path.Combine(ProblemContext.ProblemFolder, ProblemContext.Flag.GradeOutputFile); if (File.Exists(fileName)) { return(Normalize(File.ReadAllText(fileName)) == Normalize(spec.Value)); } return(false); }
private Token?TryRead(TokenSpec spec) { var token = Peek(); if (!spec.Fold(a => a == token.Kind, b => b == token)) { return(null); } _reader.Read(); return(token); }
private Token Read(TokenSpec spec) { var token = TryRead(spec); if (token == null) { throw new FormatException( string.Format(@"Unexpected token '{0}' where '{1}' was expected.", Token.ToString(Peek().Kind), Token.ToString(spec.AsTokenKind))); } return(token.Value); }
private Token Read(TokenSpec spec) { var token = TryRead(spec); if (token == null) { throw new FormatException( string.Format(@"Unexpected token {{{0}}} where {{{1}}} was expected.", Peek().Kind, spec)); } return(token.Value); }
public override bool GradeToken(TokenSpec spec, string token) { bool match = true; var value = Normalize(token); Normalize(spec.Value).Split('|').ToList().ForEach(v => { match &= value.Contains(v); }); return(match); }
private OptionalToken TryRead(TokenSpec spec) { var token = Peek(); if (spec.IsTokenKind && spec.AsTokenKind != token.Kind) { return(null); } if (!spec.IsTokenKind && spec.AsToken != token) { return(null); } _reader.Read(); return(token); }
public abstract bool GradeToken(TokenSpec spec, string token);
private static TokenSpec ToTokenSpec(Token token) { return(TokenSpec.B(token)); }
private static TokenSpec ToTokenSpec(TokenKind kind) { return(TokenSpec.A(kind)); }
public override bool GradeToken(TokenSpec spec, string token) { return(Normalize(spec?.Value) == Normalize(token)); }
public override bool GradeToken(TokenSpec spec, string token) { return(Normalize(spec.Value).Split('|').Contains(Normalize(token))); }