「ソフトウェアエンジニアならば1時間以内に解けなければいけない5つの問題」を挑戦してみましたか?
Five programming problems every Software Engineer should be able to solve in less than 1 hour
1時間以内に解けなければプログラマ失格となってしまう5つの問題が話題に
5問目は少しタイムアップしてしまいましたが、いい頭の体操になり楽しめました。
皆さんの解答や感想を教えて下さい。
lang
1static void Main(string[] args) 2{ 3 var dt = new DataTable(); 4 // 演算子の組み合わせを列挙 5 Enumerable.Repeat(new[] { " ", "-", "+" }, 9).Aggregate(Enumerable.Repeat("", 1) 6 , (a, ca) => from s in a from c in ca select s + c).Select(x => x + " ") 7 // 1..9と組み合わせ 8 .Select(p => string.Concat(Enumerable.Range(1, 9) 9 .Select(x => "" + p[x - 1] + x)).Replace(" ", "")) 10 // 先頭が"+"は" "と同じなのでストップ & 計算結果が100のもののみ列挙 11 .TakeWhile(x => !x.StartsWith("+")).Where(x => (int)dt.Compute(x, "") == 100) 12 .ToList().ForEach(x => Console.WriteLine(x + "=100")); 13 Console.ReadKey(); 14}
出力結果
123-45-67+89=100 123-4-5-6-7+8-9=100 123+45-67+8-9=100 123+4-5+67-89=100 12-3-4+5-6+7+89=100 12+3-4+5+67+8+9=100 12+3+4+5-6-7+89=100 1+23-4+56+7+8+9=100 1+23-4+5+6+78-9=100 1+2+34-5+67-8+9=100 1+2+3-4+5+6+78+9=100 -1+2-3+4+5+6+78+9=100
ちょっと変更
- Compute使わない
- 1..9の配列使わない
lang
1static void Main(string[] args) 2{ 3 Enumerable.Repeat(new[] { " ", "-", "+" }, 9).Aggregate(Enumerable.Repeat("", 1) 4 , (a, ca) => from s in a from c in ca select s + c) 5 .Select(p => string.Concat(p.Select((x, i) => "" + x + (i + 1))).Replace(" ", "")) 6 .TakeWhile(x => !x.StartsWith("+")) 7 .Select(x => x.Replace("-", "@-").Replace("+", "@+").Split('@').Where(y => y != "")) 8 .Where(x => x.Select(int.Parse).Sum() == 100) 9 .ToList().ForEach(x => Console.WriteLine(string.Concat(x) + "=100")); 10 Console.ReadKey(); 11}
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/05/20 01:43