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
200
1
Share
マインクラフトのコマンド圧縮の効率化を考えたら、40年前の論文のアルゴリズムを実装することになった話
kurisaki kazuma
June 25, 2024
More Decks by kurisaki kazuma
See All by kurisaki kazuma
新規開発と並走したリファクタリング戦略.
kult0922
0
24
Next13 動的クエリ、 Server component で実装するか?Client component で実装するか?
kult0922
0
220
Web workerを使ってUXを向上させようとした話
kult0922
1
490
Other Decks in Technology
See All in Technology
「コーディング」しない人のための Claude Code 入門 ChatGPT の次の一歩 — 業務に組み込む 育成・共有・自動化
rfdnxbro
1
290
Platform engineering for developers, architects & the rest of us (AI agents)
danielbryantuk
0
150
Strands Agents超入門
kintotechdev
1
150
Javaコミュニティをもっと楽しむための9箇条
takasyou
0
690
TypeScript Compiler APIとPHP-Parserを活用し、TypeScriptとPHPで型を共有する
shuta13
0
240
Javaで学ぶSOLID原則
negima
1
240
AI フレンドリーなエラー監視を TypeScript で実現する
shinyaigeek
2
190
美味しいスイスチーズを作ろう🧀🐭
taigamikami
1
190
テストコードのないプロジェクトにテストを根付かせる
tttol
0
230
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
6
1.8k
OpenClawとHermesAgentでAI新入社員を作った話
takanoriyanada
0
150
20260528_生成AIを専属DSに_Howの次にすべきことを考える
doradora09
PRO
0
260
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.8k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Paper Plane (Part 1)
katiecoart
PRO
0
8.1k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
370
So, you think you're a good person
axbom
PRO
2
2k
The browser strikes back
jonoalderson
0
1.1k
Statistics for Hackers
jakevdp
799
230k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
240
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
A designer walks into a library…
pauljervisheath
211
24k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
310
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
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! • オーバーエンジニアリングによって得られる学びもある 面白そうなことは利益度外視でやっていきたい 💪