Migdal

Cover image for トキポナの数え方
マニー
マニー

投稿 • に更新

トキポナの数え方

🔗 デモページを見る


📁 目次


※公式に明言はされていないが、大きい数字から挙げていくことが好ましいと思われる。


🔢 十進数とトキポナの比較

数字 トキポナ
0 ala
1 wan
2 tu
3 tu wan
4 tu tu
5 luka
6 luka wan
7 luka tu
8 luka tu wan
9 luka tu tu
10 luka luka または tu luka
20 mute
100 ale または ali

🧠 数え方の種類

➕ 単純な足し算

例:333

ale ale ale mute luka luka tu wan

100 + 100 + 100 + 20 + 5 + 5 + 2 + 1

例:555

ale ale ale ale ale mute mute luka luka luka

100 + 100 + 100 + 100 + 100 + 20 + 20 + 5 + 5 + 5

特徴

  • 普及率が高い
  • 見ての通り、単純な加算による構成

メリット

  • 普及率が高い
  • 10進数を使っている人達にとってわかりやすい

デメリット

  • 同じ単語を何度も繰り返すため、冗長になりやすい

🧱 「ale, mute, luka, tu」を桁として扱う

例:333

tu wan ale mute tu luka tu wan

(2 + 1) * 100 + 20 + 2 * 5 + 2 + 1

例:555

luka ale tu mute tu wan luka

5 * 100 + 2 * 20 + (2 + 1) * 5

特徴

  • 大きい数字から順に、「ale(100)、mute(20)、luka(5)、tu(2)、wan(1)」を桁と見なして、掛け算の係数を前に置く

メリット

  • 冗長性を抑えることができる

デメリット

  • 加算的な思考の人にとっては直感的に理解しづらい可能性がある

💡 個人的見解

日本語の「一千」のような言い方を避け、これを採用するのが望ましいと考えます。理由は、足し算的思考による混乱を少しだけでも避けるためです。


💻 プログラムに実装

今回実装するのは「2. 『ale, mute, luka, tu』を桁として扱う」方式です。

🛠 実装方針

HTMLとJavaScriptで、任意の整数をトキポナで表す機能を作成します。

処理の手順:

  1. 入力値をまず「100(ale)」で割る。
  2. 余りを「20(mute)」で割る。
  3. さらに余りを「5(luka)」で割る。
  4. 次に「2(tu)」で割る。
  5. 最後に「1(wan)」で割る。
  6. 各係数もトキポナで表現する

🧾 例:入力値 = 1234

  1. 1234 ÷ 100 = 1212 * ale

    残り:1234 - 1200 = 34

  2. 34 ÷ 20 = 11 * mute

    残り:34 - 20 = 14

  3. 14 ÷ 5 = 22 * luka

    残り:14 - 10 = 4

  4. 4 ÷ 2 = 22 * tu

    残り:4 - 4 = 0

  5. 0 ÷ 1 = 00 * wan

    残り:0(完了)

数値表現:12 ale 1 mute 2 luka 2 tu

この「12」「2」「2」などの係数もトキポナで書き換える

  • 12 = tu luka tu
  • 2 = tu
  • (※今回は1を消す)

最終出力:

tu luka tu ale mute tu luka tu tu
Enter fullscreen mode Exit fullscreen mode

Image description


HTMLのコード
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <link rel="stylesheet" href="css/style.css">
        <title>整数からトキポナ変換</title>
    </head>
    <body>
        <input id="input-field" type="number">
        <div id="result-field"></div>
        <script src="js/script.js"></script>
    </body>
</html>

JavaScriptのコード
// DOM要素の取得
const $ = selector => document.querySelector(selector);
const DOM = {
    inputField: $("#input-field"),
    resultField: $("#result-field")
};

// トキポナの数字に変換
function convertToTokiponaNumber() {
    const number = Math.floor(parseFloat(DOM.inputField.value)); // 小数点はなし
    const MAX = 9999999999;

    if (isNaN(number) || number < 1) {
        DOM.resultField.textContent = "";
        return;
    }

    if (number > MAX) {
        DOM.resultField.textContent = `上限は ${MAX} までです`;
        return;
    }

    const text = toTokipona(number);
    DOM.resultField.textContent = text;
}

// トキポナ数字変換処理(再帰関数)
function toTokipona(number) {
    let text = "";

    const units = [
        { value: 100,   word: "ale" },
        { value: 20,    word: "mute" },
        { value: 5,     word: "luka" },
        { value: 2,     word: "tu" },
        { value: 1,     word: "wan" }
    ];

    for (const unit of units) {
        const count = Math.floor(number / unit.value);
        if (count > 0) {
            text += (count > 1 ? toTokipona(count) + " " : "") + unit.word + " ";
            number %= unit.value;
        }
    }

    return text.trim();
}

// イベントハンドラー
DOM.inputField.addEventListener("input", convertToTokiponaNumber);


人気順のコメント(0)