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
160
マインクラフトのコマンド圧縮の効率化を考えたら、40年前の論文のアルゴリズムを実装することになった話
kurisaki kazuma
June 25, 2024
Tweet
Share
More Decks by kurisaki kazuma
See All by kurisaki kazuma
新規開発と並走したリファクタリング戦略.
kult0922
0
14
Next13 動的クエリ、 Server component で実装するか?Client component で実装するか?
kult0922
0
210
Web workerを使ってUXを向上させようとした話
kult0922
1
440
Other Decks in Technology
See All in Technology
AIが住民向けコンシェルジュに?Amazon Connectと生成AIで実現する自治体AIエージェント!
yuyeah
0
220
会社にデータエンジニアがいることでできるようになること
10xinc
8
1.1k
Exadata Database Service on Dedicated Infrastructure セキュリティ、ネットワーク、および管理について
oracle4engineer
PRO
1
330
メルカリIBIS:AIが拓く次世代インシデント対応
0gm
2
460
Observability for LLM Application lifecycle
ivry_presentationmaterials
1
160
工業高校で学習したとあるエンジニアのキャリアの話
shirayanagiryuji
0
120
生成AIによるデータサイエンスの変革
taka_aki
0
3.1k
ウォンテッドリーのアラート設計と Datadog 移行での知見
donkomura
0
220
Autonomous Database Serverless 技術詳細 / adb-s_technical_detail_jp
oracle4engineer
PRO
18
52k
九州の人に知ってもらいたいGISスポット / gis spot in kyushu 2025
sakaik
0
210
AIは変更差分からユニットテスト_結合テスト_システムテストでテストすべきことが出せるのか?
mineo_matsuya
5
2.7k
結局QUICで通信は速くなるの?
kota_yata
9
7.5k
Featured
See All Featured
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Building Adaptive Systems
keathley
43
2.7k
How to Think Like a Performance Engineer
csswizardry
25
1.8k
Visualization
eitanlees
146
16k
Code Review Best Practice
trishagee
69
19k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
Mobile First: as difficult as doing things right
swwweet
223
9.9k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.9k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Gamification - CAS2011
davidbonilla
81
5.4k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
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! • オーバーエンジニアリングによって得られる学びもある 面白そうなことは利益度外視でやっていきたい 💪