normalian blog

Let's talk about Microsoft Azure, ASP.NET and Java!

どう書くお題を解いてみた件について

doukaku.orgにて、「LL Gold Hole 8 − 横向きのピラミッドを作る」にチャレンジしました。アルゴリズムの候補としては候補として以下の3つがあると考え作業を行いました。

  1. 2重forループ
  2. Enumerableで要素生成
  3. 再帰

最初に再帰アルゴリズムで実装しましたが、型付言語ではかえって冗長なコードになると思い廃棄*1。力技コーダを脱却する為、二重forループは避けてEnumerableで要素生成を行いましたが、結局以下のコードに落ち着きました。
やはりLL系の言語と比べると、型付言語はCollection関係の操作が弱いですね…。

using System;
class L
{
  static void Main(string[] a)
  {
    int n = int.Parse(a[0]);
    foreach (int m in System.Linq.Enumerable.Range(-n, n * 2)) Console.WriteLine(new string('*', n - Math.Abs(m)));
  }
}

*1:C#ではデフォルト引数が使えない点も問題でした