Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        private Token?TryRead(TokenSpec spec)
        {
            var token = Peek();

            if (!spec.Fold(a => a == token.Kind, b => b == token))
            {
                return(null);
            }
            _reader.Read();
            return(token);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
 public abstract bool GradeToken(TokenSpec spec, string token);
Esempio n. 9
0
 private static TokenSpec ToTokenSpec(Token token)
 {
     return(TokenSpec.B(token));
 }
Esempio n. 10
0
 private static TokenSpec ToTokenSpec(TokenKind kind)
 {
     return(TokenSpec.A(kind));
 }
Esempio n. 11
0
 public override bool GradeToken(TokenSpec spec, string token)
 {
     return(Normalize(spec?.Value) == Normalize(token));
 }
Esempio n. 12
0
 public override bool GradeToken(TokenSpec spec, string token)
 {
     return(Normalize(spec.Value).Split('|').Contains(Normalize(token)));
 }