Sha256: f5d1431ace84870a0fd9ab55be727861a5761b46ac03d2a126aad57bdce2e3af

Contents?: true

Size: 1.73 KB

Versions: 262

Compression:

Stored size: 1.73 KB

Contents

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

public static class Wordy
{
    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 Answer(string question)
    {
        var parsedProblem = ParseProblem(question);
        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

262 entries across 262 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/csharp/exercises/wordy/Example.cs
trackler-2.2.1.179 tracks/csharp/exercises/wordy/Example.cs
trackler-2.2.1.178 tracks/csharp/exercises/wordy/Example.cs
trackler-2.2.1.177 tracks/csharp/exercises/wordy/Example.cs
trackler-2.2.1.176 tracks/csharp/exercises/wordy/Example.cs
trackler-2.2.1.175 tracks/csharp/exercises/wordy/Example.cs
trackler-2.2.1.174 tracks/csharp/exercises/wordy/Example.cs
trackler-2.2.1.173 tracks/csharp/exercises/wordy/Example.cs
trackler-2.2.1.172 tracks/csharp/exercises/wordy/Example.cs
trackler-2.2.1.171 tracks/csharp/exercises/wordy/Example.cs
trackler-2.2.1.170 tracks/csharp/exercises/wordy/Example.cs
trackler-2.2.1.169 tracks/csharp/exercises/wordy/Example.cs
trackler-2.2.1.167 tracks/csharp/exercises/wordy/Example.cs
trackler-2.2.1.166 tracks/csharp/exercises/wordy/Example.cs
trackler-2.2.1.165 tracks/csharp/exercises/wordy/Example.cs
trackler-2.2.1.164 tracks/csharp/exercises/wordy/Example.cs
trackler-2.2.1.163 tracks/csharp/exercises/wordy/Example.cs
trackler-2.2.1.162 tracks/csharp/exercises/wordy/Example.cs
trackler-2.2.1.161 tracks/csharp/exercises/wordy/Example.cs
trackler-2.2.1.160 tracks/csharp/exercises/wordy/Example.cs