ABC079C - Train Ticket

atcoder.jp

2 * 2 * 2 = 8 通りしかないので、総当たりで OK。今回は C# らしく LINQ で。クエリ式ならネスト深くならないし、途中の計算結果を let で保持できて、これはこれで便利。

using System;
using System.Linq;

namespace ABC079C
{
    class Program
    {
        static void Main(string[] args)
        {
            var input = Console.ReadLine();
            var A = input[0] - '0';
            var B = input[1] - '0';
            var C = input[2] - '0';
            var D = input[3] - '0';

            var op = new[] { '+', '-' };
            var answer = (
                from op1 in op
                from op2 in op
                from op3 in op
                let AB = op1 == '+' ? A + B : A - B
                let ABC = op2 == '+' ? AB + C : AB - C
                let ABCD = op3 == '+' ? ABC + D : ABC - D
                where ABCD == 7
                select $"{A}{op1}{B}{op2}{C}{op3}{D}=7"
            ).FirstOrDefault();

            Console.WriteLine(answer);
        }
    }
}