世界を動かす技術を、日本語で。

失敗するまで動物をリストアップする

概要

  • 動物名 を挙げることで 制限時間 が延長されるゲーム
  • 重複する用語 は得点や時間加算の対象外
  • 視覚的な要素 は無視し、動物名の入力に集中
  • WikipediaWikidata の情報を活用、手動で最適化
  • バグ報告や質問 などは開発者まで連絡

ゲームの基本ルール

  • 動物名を入力するごとに 制限時間が延長 されるシステム
  • タイマーがゼロ になるとゲーム終了
  • 異なる動物種 を多く挙げることが高得点の鍵

重複用語の扱い

  • 同じ語句の重複 (例:bear と polar bear)は2つ目以降は無効
  • 異なる種類の同じ動物グループ (例:grizzly bear)は得点対象
  • 入力順序 に関係なく重複は無効

ゲームプレイのポイント

  • 視覚的な演出や余計な情報 は無視
  • 動物名の入力 に集中することが重要
  • 幅広い動物知識 が有利

技術的背景

  • WikipediaWikidata のデータを参照
  • LLM(大規模言語モデル) は未使用
  • 手動調整 による精度向上

サポート・連絡先

  • バグ報告、質問、要望、感想 は開発者へ連絡可能
  • 迅速な対応 を目指すサポート体制

Hackerたちの意見

みんな気になってるかもしれないけど、これは基本的なテキスト解析とキー・バリューのルックアップテーブルに基づいてるだけで、AIは全く関与してないよ。テーブルはこちらだよ: https://rose.systems/animalist/lower_title_to_id.js

別のテーブルがあるに違いない。「dingo」には「オーストラリア人ですか?」が出て、「cicada」には「彼らの歌が好きじゃないの?」が出たよ。編集: https://rose.systems/animalist/eggs.js

「weasel」に言及してる長いインドネシア語の文字列があったけど、変だね。https://www.wikidata.org/wiki/Q28521 編集: 誰かが今まさにそれを削除したみたい!紹介: https://www.wikidata.org/w/index.php?diff=2353193943 - ただのランダムな落書きだと思う。

おそらくこのツイートに触発されたんだろうね: https://x.com/Fredward3948576/status/1763363909669388588

それと多分Sporcleもね。「{group Y}からXを名前を挙げて」っていうのは、すごく人気のあるクイズのスタイルだよ。https://www.sporcle.com/games/jjjjlapine2nd/name-every-anima...

LLMを使ってないのはすごいね。「drop bear」も認識してるし。上手いことやったね。

オーストラリア博物館もそれを認識してるよ: https://australian.museum/learn/animals/mammals/drop-bear/ もっとすごいのは、bungarraも認識してるけど、他の地域の動物の似たような言葉では止まっちゃって失敗するんだよね。

ハハハ、絶望的な瞬間に「ユニコーン」って入れたら、その反応に大爆笑しちゃった。

「ハギス」もいい反応があるよ。

データセットはウィキデータから取得されてるよ: (ドロップベア) https://www.wikidata.org/wiki/Q4819356

「JavaScriptがオフになってる」っていうメッセージが面白いサイトの一つだね。> このゲームにはJavaScriptが必要です。もしセンスがあるなら、ペンと紙を取り出して動物の名前を書き始めてみて。

それは優しい侮辱のつもりだと思うけど、意図した通りの効果があってよかった!

Lazy daisy: (async () => { for (c of '赤 黒 白 茶 青 緑 黄 金 灰 北極 山 森 斑点 縞'.split(' ')) for (a of 'クマ ライオン トラ オオカミ キツネ ワシ サメ クジラ ヘビ カエル ネコ イヌ ウマ コウモリ ネズミ モグラ フクロウ タカ アヒル カニ アリ ハチ クモ シカ ペンギン ゾウ ウサギ'.split(' ')) { guessbox.value = c + ' ' + a; uncomment(); attempt(); await new Promise(r => setTimeout(r, 75)); } })();

(async(s=new Set(Object.values(PARENT)))=>{for(i in ID_TO_TITLE)if(!s.has(i)){guessbox.value=ID_TO_TITLE[i];uncomment();attempt();await new Promise(requestAnimationFrame)}})() これは内部の動物データベースのすべてを推測して、「親」を避けることで最高得点を得るための簡潔でかなり単純な方法だね。どれくらいのポイントが得られるかはわからないけど、完了するのに3時間くらいかかるだろうね。でも、いくつかの追加情報を分析することで、得点をもっと良くできるよ。(以下の数字は、重複するセットや調査/理解の異なる段階で記録したため、少しずれているかもしれないけど、かなり近いよ)ゲームには379,729の動物がリストにあって(ID_TO_TITLE)、768,743の入力文字列(LOWER_TITLE_TO_ID)からマッピングされてる。52,546は他の動物の親だから、そこはスキップした方がいいね。「鳥」を最初に推測してから「ワシ」を推測すると、ワシはポイントにならない。もし…まあ、その話は後で!4,485行は「特定しすぎ」と見なされてる。例えば、モルデリステナの下には462種いるけど、ゲームは「いや、モルデリステナで十分特定されてる」と言ってる。3,127は重複で、同じ種だけど異なる時代の名前がついてる。例えば、メガキレハルスは1853年に発見されたけど、1879年にメガキレコルダタに改名された。ゲームはこれを一度だけカウントする。3,116は…変なやつで、これは主に入力パーサーが異なるIDに推測をリダイレクトしてしまったエラーによるものだと思う。パーサーはテキストを「正しい」IDにマッピングするけど、異なる、もしかしたら似たIDをクレジットしないことがある。例えば、イエローテイルのエントリーがあるけど、これはイエローテイルモスの重複で、「イエローテイル」は「イエローテイル」と解析されて、魚のカンパチにマッピングされることになる。時々、分類のランクを飛ばすこともあって、例えば、ネオモルデリステナ・パルブーラは直接亜科にマッピングされて、系統を確認するために必要な属レベルを飛ばしてしまうことがある。時々、ある属から別の属に再分類されたものもあるし、時々は家族が属にマッピングされる行もある(ディロフォサウルス科 -> ディロフォサウルス)。28行は到達不可能で、カールアポストロフィが必要だけど、パーサーはそれをストレートアポストロフィに置き換えちゃう。ストレートバージョンの23は別の動物にマッピングされる。例えば、「バディンのツコツコ」(カール)はバディンのツコツコにマッピングされるけど、正規化後は「バディンのツコツコ」(ストレート)になって、赤っぽいツコツコにマッピングされる。5つはカールアポストロフィを持つキーがあって、ストレートバージョンはデータベースに全く存在しない。動物リストの中に「ゾース」(シマウマと馬のハイブリッド)があるけど、この推測は明示的に拒否される。なぜなら、独自のウィキペディアページがないから(そのウィキペディアページは「ゼブロイド」へのリダイレクト)。これで最大得点は316,457になるけど、文字列マッピングテーブルには生の動物テーブルに現れない722のエントリーがあって、他のブロックされた動物にマッピングできる。例えば、モンゴリアンウルフ。この動物は存在していて得点になるけど、「モンゴリアンウルフ」と入力するとヒマラヤンウルフにマッピングされて、その得点を得ることになる。でも、「ウーリーウルフ」のマッピングも含まれていて、モンゴリアンウルフの得点が得られる。これで実際の最大得点は317,179になる。そして、これらの10,034の到達不可能なリーフノード(動物リストの非親行)のおかげで、時々親の子供たちが全て到達不可能になるから、子供たちの得点を一度も獲得していないので、親の得点を獲得できる。これで5,561ポイントが追加される。これで322,740になる。最大の30回の推測を1秒あたり行う(ゲームのティックレートが30fpsに制限されている)と、すべての動物を提出するのに絶対的に最低3時間かかる。ちょっと注意だけど、カウントダウンタイマーは1分からカウントダウンするけど、正しい推測ごとに6秒が追加される。だから、終わる頃にはカウントダウンタイマーは22.6日になる。これが経過するまでゲームは「勝利」とはならない。視覚効果をいくつか取り除けば、12msの間に推測をスパムして、4msの間にブラウザがレンダリングできるように一時停止することで、タブを応答させることができる。でも、推測は時間とともに遅くなる。ゲームのコードにO(N²)アルゴリズムがあるから、現在の推測をリスト(JSの配列構造)に対してチェックするから、O(N)のチェックがN回実行されて、全体としてO(N²)のパフォーマンスヒットがある。関数をパッチして、リストの代わりにセットに対してチェックするようにすればO(1)に保てる。M2 MBPでは、ゲームロジックを変更せずに30秒以内にハイスコアを達成できる。でも、視覚効果は良かったし、作者の芸術的ビジョンなしでは少し無味乾燥だね。それを戻して、すべてをレンダリングするのに必要な6msを与えると、30秒から退屈な5分に遅くなる。ゲームロジックを98%の時間実行して、レンダリングを2%の時間行うこともできるけど、ブラウザが推測を入力ボックスから提出するたびにページレイアウト(DOM)を再計算しなければならないので、まだ少し遅すぎる。だから、実際の入力ボックスをスキップすることもできる。これで最高得点を得るのに素晴らしい20秒に減らせる!それから、メモ化やUIを良く見せるためのちょっとした調整、進捗メーターの追加、HN投稿用の攻撃的な最適化を行って、最終的なスクリプトは16.5秒で実行される。ゲームに勝つためには、カウントダウンタイマーが切れるまで22.75日待たなければならない。ゲームのロジックや勝利条件を実際に変更したくなかったから、それを編集するのは読者の課題として残しておくよ! :)

ジェリーフィッシュとポルトガルマンオワールを追加したんだけど、マンオワールは受け入れられたのに、ジェリーフィッシュは「もっと曖昧な用語を追加した」って消されちゃった。でも、ジェリーフィッシュとマンオワールは別の生き物なんだよね。マンオワールは動物群からなるコロニーのシフォノフォアで、ジェリーフィッシュは単独の海洋生物。どっちも刺胞動物門に属してるし、もしそれを入れてたらもっと曖昧な用語になってたはず。

うん、いろいろ間違いが多いよね。ボブキャットを追加したら、リンクスが受け入れられなかった。あ、77、さっき起きたばかり。コーヒーなし。

それは疑問を投げかけるね。協力して働く個体のコロニー(この場合はゾイド)を、一つの動物と呼べるのか?生物学者たちは「はい」と言うと思うけど、面白い分類の境界だよね。

それって、トマトは生物学の論文では果物って言うのと同じだね。実用的には、見た目がクラゲで、刺して、クラゲみたいに振る舞うなら、顕微鏡でどう見えるかなんて関係ない、クラゲだよ。

変だね。セクレタリアトを試してみたけど、確かに動物だし、ウィキペディアのページもあるのに、受け入れられなかった。

リアルでのトークン/タイプの二項対立。昨日それについて読んでたよ^^。

時間がなくなって、ハゲタカや象、大型猫について言うのを忘れた自分を叩いてる。日曜日の最初にこれを試すのはダメだね。

他に「知ってるUbuntuのバージョン名を全部挙げて、それから始めようかな?」って思った人いる?

すごく楽しかった!カウントダウンタイマーのゲームメカニクスが、プレイをもっと良くしてくれた。青いボトルがマンオブウォーに置き換わったのには驚いたよ。バミューダではマンオブウォーって名前で知られてるけど、青いボトルは家のハエって呼ぶかな。