どんな画像も謎ノ美兎になる「謎ノ美兎ソート」を作った【スターリンソート・並行世界ソートもあるよ】

謎ノ美兎ソートのアイキャッチ
謎ノ美兎技術部 / NZM-001

好きな画像を入れると、4つのソートが同時に走り出して、全部が謎ノ美兎になります。まずは下で試してみてください。

  • 画像を読み込む:スマホの写真でも、イラストでもOK。画像はブラウザの中だけで処理され、送信されません
  • 4つのプルダウン:それぞれの画面のアルゴリズムを選べます
  • 速さ:1コマで何手進めるか。4つとも同じ速さなので、純粋に手数の勝負です
  • 音で聞く:赤い枠の画像を音にして鳴らします。下に出るスペクトログラム(音の周波数の図)にも、並べ替えの途中の画像が流れ、最後は謎ノ美兎の顔になります
  • 動画保存:最初から最後までを動画にできます
ミコンスキー

まずは自分の写真やお気に入りのイラストで遊んでみてください。何を入れても、最後は同じ顔になります。

目次

作ったきっかけ

ミコンスキー

前に、画像を並べ替えて謎ノ美兎にするツールを作ったら、「淡々とした恐怖がある」と言われたんです。

ミコンスキー

その「淡々と」の正体は、たぶん手順が機械的で、結末に例外がないこと。それなら、並べ替えの手順そのもの(ソートアルゴリズム)を見せたら、もっと淡々とするはず…と思って作りました。

謎ノ美兎ソートとは

ソートは「2つを比べて、順番が逆なら入れ替える」の繰り返しです。謎ノ美兎ソートは、この比べ方だけを変えています。

元の画像の1行に行き先の番号を振り、番号順に並べ替えると謎ノ美兎の明暗の並びになる図
1行だけを取り出した例。赤い数字(行き先)の順に並べ替えると、謎ノ美兎の同じ行と明るさの並びがそろう
  1. 画像を96×96に縮めて、横1行ずつに分けます
  2. 行ごとに、元の画像の画素を暗い順に並べます。謎ノ美兎の同じ行も、暗い順に並べます
  3. 同じ順位どうしを対応させて、それぞれの画素に「行き先の列」の番号を振ります
  4. あとは、その番号の小さい順にソートするだけです
ミコンスキー

ソート自体は普通のソートです。「何を正しい順番とするか」を謎ノ美兎にしただけなんです。

ミコンスキー

並べ終わったときの並びは1通りしかないので、どのアルゴリズムを使っても結果は必ず同じになります。

アルゴリズムで「過程」がまったく違う

結果は同じでも、途中の見た目はアルゴリズムごとにまったく違います。同じ画像を4つのアルゴリズムで並べ替えて、途中経過を並べました。

バブル・挿入・クイック・マージの4つのソートで、0%から100%までの途中経過を並べた図
左から進み具合0%→100%。過程はバラバラなのに、右端は全部同じ顔
  • バブルソート:右端から少しずつ確定していく。いちばん遅い
  • 挿入ソート:左側から並びが整っていく
  • クイックソート:ブロックごとに一気に確定していく
  • マージソート:縦の帯が倍々に広がっていく
ミコンスキー

マージソートの途中(50%〜75%)が、顔の破片が縦にずれて並んでいて一番不気味でした。

入っている7つのアルゴリズム

手数は、サンプル画像(模様)を96×96で並べ替えたときの実測値です。

アルゴリズムやっていること比較の回数見どころ
バブルソートとなり同士を比べて入れ替え続ける423,707右端から顔が確定していく
挿入ソート左から順に、正しい位置へ差し込む246,435左側から並びが整っていく
クイックソート基準より小さいか大きいかで分け続ける72,575ブロック単位で一気に確定
マージソート小さな列を整列済みにして合体させる64,512縦の帯が倍々に広がる
スターリンソート順番を乱すものを消す9,120最速。ただし画素がほぼ消える
並行世界ソート整列していない世界をすべて破棄する—一瞬で終わる(ことになっている)
ボゴソートランダムに並べ直して、偶然そろうのを待つ終わらない永遠にノイズ
ミコンスキー

下の3つは、ネットで生まれたジョークのアルゴリズムです。せっかくなので全部入れました。

スターリンソート:順番を乱すものは粛清する

スターリンソートの例。ひとつ前より小さい数字に赤いバツが付き、残った数字だけが並ぶ
ひとつ前より小さいものは、その場で消す。1回なめるだけなので最速

左から順に見ていき、ひとつ前より小さいものが出てきたら消してしまいます。並んではいますが、残ったものしか並びません。

画像で実際に走らせると、9,216個の画素のうち8,628個(約94%)が粛清されました。残った588個だけが正しい位置に並ぶので、暗闇に輪郭だけがうっすら浮かびます。

ミコンスキー

レースでは毎回1着です。ほとんど何も残らないのに。

並行世界ソート:整列していない世界を破棄する

今の並びから無数の世界に分かれ、整列していない世界にバツが付き、謎ノ美兎の世界だけが残る図
「量子ボゴソート」とも呼ばれるジョーク

並べ方がランダムに分かれた世界のうち、整列していない世界をすべて破棄すれば、残った世界では最初から整列している、という理屈です。96×96の画像だと、1行の並べ方は96!通りで、それが96行あります。破棄する世界は約10の14,400乗個です。

ミコンスキー

もちろん本当に宇宙は破棄できないので、0.9秒ほど「破棄している演出」を見せたあと、整列済みの結果を表示しています。そこは正直に書いておきます。

ボゴソート:終わりません

挿入・マージ・ボゴ・クイックを同時に走らせた途中の画面。ボゴソートだけがノイズのまま
ほかの3つは顔になりつつあるのに、ボゴソート(左下)だけはずっとノイズ

ランダムに並べ直して、偶然そろうのを待ちます。全部の行が一度にそろう確率は、だいたい10の14,400乗分の1です。画面には「終わりません」と表示され、本当に終わりません。

ミコンスキー

宇宙が終わるほうが先です。

4つ同時に走らせると、順位がおかしい

最初に並んでいる4つ(バブル・クイック・スターリン・並行世界)を、同じ速さで走らせた結果です。

4つのソートが同時に進んでいる途中の画面
途中。バブルソートの赤い線は「いま比べている場所」
4つのソートがすべて終わった画面
全員ゴール。スターリンソート(左下)だけ、ほとんど何も残っていない
比較の回数と、ゴールまでの時間の棒グラフ
左:比較の回数。右:同時に走らせたときのゴールまでの時間
順位アルゴリズムかかった時間
1着スターリンソート0.08秒(ほぼ全部消したので)
2着並行世界ソート0.91秒(世界を破棄したので)
3着クイックソート1.40秒
4着バブルソート5.03秒

時間は手元の環境(速さ「15手/コマ」)での一例です。端末の描画速度で変わりますが、順位は変わりません。

ミコンスキー

まじめに並べたアルゴリズムが3着と4着。ズルをしたものほど速い、という結果になりました。

うまくいかない画像もあります

夕焼けの画像で並べ替えた結果。顔の形がほとんど分からない
夕焼けで試した結果。上のほうが青、下のほうがオレンジのまま残り、顔はほとんど読めない

夕焼けの空のように、横1行の明るさがほぼ同じ画像は苦手です。並べ替えは同じ行の中でしか起きないので、その行に暗い画素がなければ、謎ノ美兎の暗い部分(目や髪)を作れません。

同じ行の画素を暗い順に並べた帯。謎ノ美兎の行は黒から白まであるが、夕焼けの行はほぼ一色
同じ行の画素を暗い順に並べたもの。夕焼けの行には暗い画素が1つもない
ミコンスキー

画素を「入れ替える」だけで、色を「塗り替えない」のがこのソートのルールなので、ここは直さずにそのままにしています。

うまくいくのは、1行の中に明るいところと暗いところが混ざっている画像です。柄の多い写真、人物、イラストなどは、だいたい顔になります。

なぜ「淡々と」怖いのか

作りながら考えた答えは、手順に感情がなく、結末に例外がないからです。

  • どの画像を入れても、同じ手順で、同じ顔に行き着く
  • カウンターは比較の回数を数えるだけで、何も言わない
  • 終わっても演出はなく、順位と秒数だけが出る
ミコンスキー

演出を足すより、削るほうが不気味になる。今回いちばんの発見はそこでした。

いかがでしたか?

ミコンスキー

自分の画像で試したら、ぜひ動画保存してX(Twitter)で見せてください。スターリンソートの粛清率が高い画像を見つけた人がいたら教えてほしいです。

まとめ

  • 謎ノ美兎ソートは、「比べ方」を謎ノ美兎にしただけの、普通のソート
  • ゴールの並びが1通りなので、どのアルゴリズムでも結果は同じ
  • 過程はアルゴリズムごとにまったく違う(マージソートの途中がいちばん不気味)
  • スターリンソートは最速だが、画素の約94%を粛清する
  • 並行世界ソートは、約10の14,400乗個の世界を破棄して2着
  • ボゴソートは終わらない
  • 行ごとの明るさが一様な画像(空など)は苦手

音を周波数の図にすると謎ノ美兎が浮かぶ「謎ノ美兎スペクトログラム」も作りました。あわせてどうぞ。

※ 謎ノ美兎のファン作品(二次創作)です。

謎ノ美兎ソートのアイキャッチ

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次