Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
マインクラフトのコマンド圧縮の効率化を考えたら、40年前の論文のアルゴリズムを実装することになった話
Search
kurisaki kazuma
June 25, 2024
Technology
1
170
マインクラフトのコマンド圧縮の効率化を考えたら、40年前の論文のアルゴリズムを実装することになった話
kurisaki kazuma
June 25, 2024
Tweet
Share
More Decks by kurisaki kazuma
See All by kurisaki kazuma
新規開発と並走したリファクタリング戦略.
kult0922
0
16
Next13 動的クエリ、 Server component で実装するか?Client component で実装するか?
kult0922
0
210
Web workerを使ってUXを向上させようとした話
kult0922
1
440
Other Decks in Technology
See All in Technology
20251014_Pythonを実務で徹底的に使いこなした話
ippei0923
0
190
衛星画像超解像化によって実現する2D, 3D空間情報の即時生成と“AI as a Service”/ Real-time generation spatial data enabled_by satellite image super-resolution
lehupa
0
160
Large Vision Language Modelを用いた 文書画像データ化作業自動化の検証、運用 / shibuya_AI
sansan_randd
0
150
なぜAWSを活かしきれないのか?技術と組織への処方箋
nrinetcom
PRO
4
840
Introduction to Sansan Meishi Maker Development Engineer
sansan33
PRO
0
310
Simplifying Cloud Native app testing across environments with Dapr and Microcks
salaboy
0
150
「れきちず」のこれまでとこれから - 誰にでもわかりやすい歴史地図を目指して / FOSS4G 2025 Japan
hjmkth
1
300
AWS Control Tower に学ぶ! IAM Identity Center 権限設計の第一歩 / IAM Identity Center with Control Tower
y___u
0
170
プレーリーカードを活用しよう❗❗デジタル名刺交換からはじまるイベント会場交流のススメ
tsukaman
0
140
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
12
80k
『バイトル』CTOが語る! AIネイティブ世代と切り拓くモノづくり組織
dip_tech
PRO
1
120
AWSでAgentic AIを開発するための前提知識の整理
nasuvitz
2
150
Featured
See All Featured
Context Engineering - Making Every Token Count
addyosmani
6
240
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
How to train your dragon (web standard)
notwaldorf
97
6.3k
GitHub's CSS Performance
jonrohan
1032
470k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
BBQ
matthewcrist
89
9.8k
Become a Pro
speakerdeck
PRO
29
5.5k
Java REST API Framework Comparison - PWX 2021
mraible
34
8.9k
Music & Morning Musume
bryan
46
6.8k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.5k
Writing Fast Ruby
sferik
629
62k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.7k
Transcript
マインクラフトのコマンド圧縮の効率化を考え たら、40年前の論文のアルゴリズムを実装す ることになった話 Kurisaki Kazuma Meguro LT 2024-06-25
Kurisaki Kazuma AI-Shift (CyberAgent) Frontend engineer Hobby: ♠ 🦑
💻 🚶 https://x.com/KK_sep_TT https://github.com/kult0922
マインクラフトの画像変換アプリを作っています 作成した設計図はゲーム上に自動生成が可能 https://www.minecraft-dot.pictures
コマンドで配置する /setblock (x y) block_id /setblock 0 0 plank /setblock
0 1 plank /setblock 0 2 plank /setblock 1 0 plank /setblock 1 1 plank /setblock 1 2 plank /setblock 2 0 plank … 配置するブロックの数 = 実行コマンド数
コマンドで配置する /fill (x y) (x y) block_id 指定範囲の長方形の範囲に指定ブロックを配置する 左上 右上
/fill 0 0 4 3 plank 💡fill コマンドを使うことで実行コマンド数を圧縮できる
fillは長方形の形でしか配置できない OK NG /fill (x y) (x y) block_id
つまり。。。 複合長方形の最小分割を求めたい 最少分割数 : 3
アルゴリズムの論文があった! https://cir.nii.ac.jp/crid/1050282812867071360
論文を理解して実装 アルゴリズム概要 1. 複合長方形の縮退線を求める 2. 独立な縮退線の最大マッチング を求める 3. 複合長方形の輪郭をlinked listで管理
4. 2の縮退線で分割複合長方形を分割 5. 分割された長方形をの輪郭を走査して 8つのパターン分け で 分割していく skip
できた
単純な貪欲法との比較 分割数: 8 分割数: 14 複合長方形の大きさ、形に依存するが 、小さいものでも半分ほど圧縮できる 単純貪欲: 水平方向の連結だけを見てグルーピング 論文の実装
(理論値)
大変だったこと • アルゴリズムが難解 ◦ 理解するのに1日 • 実装が鬼大変 ◦ 図形の輪郭抽出 →
linked list 化 ◦ linked listの輪郭を分断するアルゴリズム ◦ エッジの最大マッチングの実装 • アルゴリズムをガッツリ組むにはTS(JS)だと大変 ◦ console.log の出力が参照なのでデバッグが困難 ◦ 有名アルゴリズム、データ構造でもライブラリがない (or 機能が少ない) 実装まで丸一週間くらいかかりました 😇 輪郭抽出して linked list で管理
振り返り Good • 大変だったが、実装は楽しかった • TS(JS)で複雑なアルゴリズム力が付いた • コマンド圧縮の理論値を出せた • 理論値はロマン
Bad • すごい時間がかかった • コマンド圧縮によるユーザへのインパクトは少ないかも?
個人開発ならオーバーエンジニアリングは自由 • (モチベが続けば) 無限にリソースを投下してもOK! • オーバーエンジニアリングによって得られる学びもある 面白そうなことは利益度外視でやっていきたい 💪