なか日記

一度きりの人生、楽しく生きよう。

C#プログラミングレッスン−どう書く?org編「与えられた文字列でピラミッド」

メルマガC#プログラミングレッスンで、どう書く?orgの「与えられた文字列でピラミッド」が紹介されてたのでやってみた。


日頃からコードに触れてないと寂しいコトになるよねという自戒の思いを込めて晒してみる。

とりあえず作ってみた結果。アクセス修飾子は…うん、まぁ。

    internal class Pyramid
    {
        private string _word;

        public Pyramid(string word)
        {
            _word = word;
        }

        internal string GetLine(int line)
        {
            string str = GetString(line);
            int space = ((_word.Length * 2 - 1) - str.Length) / 2;
            return str.PadLeft(space + str.Length).PadRight(space * 2 + str.Length);
        }

        internal string GetString(int line)
        {
            string substr = _word.Substring(_word.Length - line, line);
            string result = "";
            for (int i=0; i<substr.Length; i++)
            {
                result += substr[i];
                if (i<substr.Length-1)
                {
                    result += " ";
                }
            }
            return result;
        }

        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();

            for (int i = 0; i < _word.Length; i++)
            {
                sb.AppendLine(GetLine(i + 1));
            }
            return sb.ToString();
        }
    }

力技ですなぁ。

どう書く?orgで他の人が投稿しているのを見ると、GetStringの部分は正規表現を使うともっとスッキリするのね。

        internal string GetString(int line)
        {
            string substr = _word.Substring(_word.Length - line, line);
            return Regex.Replace(substr, "(.)(?=.)", "$1 ");
        }

「(?=.)」の意味が良くわからなかったけど、「正規表現の基本: .NET Tips: C#, VB.NET」に解説があったのでスッキリ。

で、かかった時間は…秘密><