もっと短く「一反田えー(1反田A)」から「千反田える(1000反田L)」までを生成する


もっと短く書けるなーと思いまして。

// 一万未満のアラビア数字を漢数字に変換します
def arabicToKanji( int num ){
    def kanjiNum = ["", "一", "二", "三", "四", "五", "六", "七", "八", "九" ]
    def kanjiOrder = ["", "十", "百", "千"]
    def order = num.toString().size()
    num.toString().collect{
        order--
        def idx = it as Integer
        ( idx>=2 || order==0 )? kanjiNum[idx]+kanjiOrder[order] : (idx==0)? "" : kanjiOrder[order]
    }.sum()
}

def alphabets = ["えー", "びー", "しー", "でぃー", "いー", "えふ", "じー", "えいち", "あい", "じぇい", "けー", "える", "えむ", "えぬ", "おー", "ぴー", "きゅー", "あーる", "えす", "てぃー", "ゆー", "ぶい", "だぶりゅー", "えっくす", "わい", "ぜっと"]

(1..1000).each{
    println "${arabicToKanji(it)}反田${alphabets[(it-1)%alphabets.size()]}"
}

toString() で文字列にしたやつを collect() で一文字ずつ処理して sum() で結合する感じで。中身の三項演算子のネストは可読性悪いね。