使われた言葉に数値をつけてみる

https://oshiete.goo.ne.jp/qa/10921080.html

使われた言葉に点数を加算していくのだが、最大値を超えないようにするには?
そんで、考えた。
あっ!光の速度はこえられない!
相対論的な速度の加算方式を利用しよっと。

<!DOCTYPE html>
<meta charset="UTF-8">
<html lang="ja">
<title>?</title>
<style>

</style>

<body>
<h1>Test</h1>
<input type="search" value="リンゴ" onblur="dic(this.value)"><br>
<textarea cols="80" rows="10"></textarea>

<body>

<script>

class R {
  constructor (key, level) {
    this.key = [ ].concat (key);
    this.level = level;
  }
  
  add (key, level) {
    this.key.push (key);
    let
      l0 = this.level,
      l1 = level;
    this.level = (l0 + l1) / (1 + l0 * l1);
    return this;
  }
  
  sort () {
    this.key.sort ((a, b) => HASH[a].level < HASH[b].level);
  }
}


let words = [
   ['苺', '赤い', 'おいしい', 'すっぱい'],
   ['リンゴ', '青森', '赤い', 'おいしい', 'すっぱい', 'シャイニーアップルジュース']
];

let HASH = { };

for (let ws of words) {
  let key = ws.shift ();
  let gain = 1 / ws.length;
  let c = 1;

  HASH[key] = new R (ws, c);
  
  for (let w of ws) {
    c *= gain;
    if (w in HASH) {
      HASH[w].add (key, c);
    }
    else {
      HASH[w] = new R (key, c);
    }
  }
}


function dic (key) {
  let mess = '知らない';
  if (key in HASH) {
    let obj = HASH[key];
    obj.sort ();
    mess = obj.key.map (s => s + '(' +HASH[s].level+ ')').join ('\n');
  }
  document.querySelector ('textarea').value = mess;
}
</script>