Sha256: 0b77b60ba310fc6efdcd1c51aaf96e95da702d777221359b12b76fb89c1b1d0c

Contents?: true

Size: 1.72 KB

Versions: 115

Compression:

Stored size: 1.72 KB

Contents

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;

public class WordProblem
{
    private static readonly Regex VariableAndOperatorGroupsRegex =
        new Regex(string.Format(@"{0} {1} {0}\s*{1}*\s*{0}*", @"(-?\d+)", "(plus|minus|multiplied by|divided by)"));
    private static readonly Dictionary<string, Func<int, int, int>> Operations = new Dictionary<string, Func<int, int, int>>
        {
            { "plus", (x, y) => x + y },
            { "minus", (x, y) => x - y },
            { "multiplied by", (x, y) => x * y },
            { "divided by", (x, y) => x / y },
        };

    public static int Solve(string problem)
    {
        var parsedProblem = ParseProblem(problem);
        var firstPass = Operations[parsedProblem.Operation1](parsedProblem.X, parsedProblem.Y);
        if (parsedProblem.Operation2.Length == 0)
            return firstPass;
        return Operations[parsedProblem.Operation2](firstPass, parsedProblem.Z);
    }

    private static ParsedProblem ParseProblem(string problem)
    {
        var match = VariableAndOperatorGroupsRegex.Match(problem);

        if (match.Groups.Count < 6)
            throw new ArgumentException("Invalid problem");

        return new ParsedProblem
            {
                X = int.Parse(match.Groups[1].Value),
                Operation1 = match.Groups[2].Value,
                Y = int.Parse(match.Groups[3].Value),
                Operation2 = match.Groups[4].Value,
                Z = match.Groups[5].Success ? int.Parse(match.Groups[5].Value) : 0
            };
    }

    private class ParsedProblem
    {
        public int X;
        public string Operation1;
        public int Y;
        public string Operation2;
        public int Z;
    }
}

Version data entries

115 entries across 115 versions & 1 rubygems

Version Path
trackler-2.0.8.14 tracks/csharp/exercises/wordy/Example.cs
trackler-2.0.8.13 tracks/csharp/exercises/wordy/Example.cs
trackler-2.0.8.12 tracks/csharp/exercises/wordy/Example.cs
trackler-2.0.8.11 tracks/csharp/exercises/wordy/Example.cs
trackler-2.0.8.10 tracks/csharp/exercises/wordy/Example.cs
trackler-2.0.8.9 tracks/csharp/exercises/wordy/Example.cs
trackler-2.0.8.8 tracks/csharp/exercises/wordy/Example.cs
trackler-2.0.8.7 tracks/csharp/exercises/wordy/Example.cs
trackler-2.0.8.6 tracks/csharp/exercises/wordy/Example.cs
trackler-2.0.8.5 tracks/csharp/exercises/wordy/Example.cs
trackler-2.0.8.4 tracks/csharp/exercises/wordy/Example.cs
trackler-2.0.8.3 tracks/csharp/exercises/wordy/Example.cs
trackler-2.0.8.2 tracks/csharp/exercises/wordy/Example.cs
trackler-2.0.8.1 tracks/csharp/exercises/wordy/Example.cs
trackler-2.0.7.0 tracks/csharp/exercises/wordy/Example.cs
trackler-2.0.6.44 tracks/csharp/exercises/wordy/Example.cs
trackler-2.0.6.43 tracks/csharp/exercises/wordy/Example.cs
trackler-2.0.6.42 tracks/csharp/exercises/wordy/Example.cs
trackler-2.0.6.41 tracks/csharp/exercises/wordy/Example.cs
trackler-2.0.6.40 tracks/csharp/exercises/wordy/Example.cs