2015年01月25日

C#で漢数字で九九の表

   このエントリーをはてなブックマークに追加 Clip to Evernote
どう書く?orgに感謝を込めて」シリーズ その65

■問題 (出題者: 出題:syatさん)
漢数字で九九の表を作ってください。
ただし以下の条件をつけます。

条件
一.アラビア数字(0〜9)禁止。
    プログラムにも出力結果にもアラビア数字を含んではいけない。(全角・半角とも)
二.結果の数字は、「七」とか「一○」(=10)とか「六四」(=64)のような形式とする。
三.九九の結果をそのままプログラム中に書き込んではいけない。

出力例

 一  二  三  ・・・・
 二  四  六  ・・・・
 三  六  九  ・・・・
 四  八 一二  ・・・・
 五 一〇 一五  ・・・・
 ・
 ・

アラビア数字禁止なので、どうやって 1から9の数を生成するかが問題になってきますが、 ここでは、LINQのSelectメソッドを使っています。 なお、以下の2つの制約もつけて解いてみました。

1. Length,Count プロパティも使わない。 
2. メソッド名、変数名にもアラビア数字は禁止。

制約付けないで解いたら面白くもなんともない問題ですが、制約つけることで 頭の体操になりますね。

using System;
using System.Linq;

namespace Doukaku.Org {
    class Program {
        static string KanjiString = "一二三四五六七八九";
        static void Main(string[] args) {
            var nums = KanjiString.Select((c, i) => ++i);
            foreach (var m in nums) {
                foreach (var n in nums)
                    Console.Write(ToKanji(n * m) + " ");
                Console.WriteLine();
            }
            Console.ReadLine();
        }

        static string ToKanji(int n) {
            string str = "";
            bool isOneDigit = false;
            foreach (var ch in n.ToString()) {
                str += CharToKanji(ch);
                isOneDigit = !isOneDigit;
            }
            return isOneDigit ? " " + str : str;
        }

        static char CharToKanji(char ch) {
            int n = int.Parse(ch.ToString());
            return ("〇" + KanjiString)[n];
        }
    }
}


 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/52403871