"이치 탄다 에- (1 탄다 A)"에서 "치탄다 에어"까지를 생성한다

10009 단어 Groovy
「이치 탄다 에」, 즉 「1 탄다 A」로부터 시작해, 「니 탄다 비 (2 탄다 B)」, 「미 탄다 시 (3 탄다 C)」라고 계속해 간다 (Z까지 오면 A로 돌아가 순환)과 , 1000에서는 요네자와 호신의 추리 소설인 「<고전부> 시리즈」의 메인 히로인, 「치탄다」가 된다고 합니다.

「이치탄다 에-, 니탄다 비-,… 트윗이 아침부터 돌아 왔기 때문에 정말로 그렇게 될지 프로그램을 달린 결과 ぃ tp : ///와 ぃt피 c. 이 m/b8q90b
http://twitpic.com/b8q90b
htps : // 라고 해서 r. 이 m/_ 곰팡이 x/s 타츠 s/263229881435971584

「나, 신경이 쓰입니다!」라고 하는 것으로, Groovy로 써 보았습니다. 정책은 다음과 같이 했습니다.
  • 한 숫자의 시작은 1, 히라가나 표기의 알파벳의 시작은 0이므로 eachWithIndex를 사용하여 각 배열의 인덱스로 만들었습니다.
  • 보다 범용적으로, 천 이상의 숫자에도 대응
  • 위의 표현변환은 '1100천'까지와 '만억조…'의 2단계로 나뉘어 변환되었습니다
  • 변환하는 값의 자리수의 검출은, 값을 캐릭터 라인으로 변환하고 나서 문자수를 얻는 것으로 실시했습니다.
  • def alphabetList = ["えー", "びー", "しー", "でぃー", "いー", "えふ", "じー", "えいち", "あい", "じぇい", "けー", "える", "えむ", "えぬ", "おー", "ぴー", "きゅー", "あーる", "えす", "てぃー", "ゆー", "ぶい", "だぶりゅー", "えっくす", "わい", "ぜっと"]
    
    def range = 1..1000
    range.eachWithIndex {num, i->
        println "${arabicNumToKanjiNum(num)}反田${alphabetList[i%alphabetList.size()]}"
    }
    
    // アラビア数字を漢数字に変換します
    def arabicNumToKanjiNum(long num){
        def kanjiNumUnit = ["", "万", "億", "兆", "京"]
        // 4桁ごとのブロックの数
        int blockIndex = num.toString().size() / 4
        def kanji = ""
        while (blockIndex >= 0) {
            // ブロックの値のみを残す
            int value = num / (10000 ** blockIndex)
            int blockNum = value % 10000
            // ブロックの値が1以上のとき
            if (blockNum >= 1) {
                kanji = "${kanji}${arabicNumToKanjiNumSub(blockNum)}${kanjiNumUnit[blockIndex]}"
            }
            blockIndex--
        }
        kanji
    }
    
    // 一万未満のアラビア数字を漢数字に変換します
    def arabicNumToKanjiNumSub(int num){
        def kanjiNum = ["", "一", "二", "三", "四", "五", "六", "七", "八", "九" ]
        def kanjiNumSubUnit = ["", "十", "百", "千"]
        // 数字の桁数
        int digitIndex = num.toString().size() - 1
        def kanji = ""
        while (digitIndex >= 0) {
            // 指定した桁の値のみを残す
            int value = num / (10 ** digitIndex)
            int numIndex = value % 10
            // 桁の数字が2以上(「一百」などを避ける)
            // または1桁目の数字(1桁目は「一」を表示)の場合
            if (numIndex >= 2 || digitIndex == 0) { // 
                // 漢数字を追加
                kanji = "${kanji}${kanjiNum[numIndex]}"
            }
            // 桁の数字が1以上のとき
            if(numIndex >= 1) {
                // 百などを表示
                kanji = "${kanji}${kanjiNumSubUnit[digitIndex]}"
            }
            digitIndex--
        }
        kanji
    }
    

    Groovy 코드는 파일에 저장하고 groovy 명령으로 실행해도 좋지만 GroovyConsole에 붙여 넣으면 쉽게 실행할 수 있습니다. 실행 결과는 「치탄다 에루」가 되었습니다!

    좋은 웹페이지 즐겨찾기