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
190
マインクラフトのコマンド圧縮の効率化を考えたら、40年前の論文のアルゴリズムを実装することになった話
kurisaki kazuma
June 25, 2024
Tweet
Share
More Decks by kurisaki kazuma
See All by kurisaki kazuma
新規開発と並走したリファクタリング戦略.
kult0922
0
20
Next13 動的クエリ、 Server component で実装するか?Client component で実装するか?
kult0922
0
220
Web workerを使ってUXを向上させようとした話
kult0922
1
470
Other Decks in Technology
See All in Technology
Scrumは歪む — 組織設計の原理原則
dashi
0
170
JAWS DAYS 2026 楽しく学ぼう!ストレージ 入門
yoshiki0705
2
180
us-east-1 に障害が起きた時に、 ap-northeast-1 にどんな影響があるか 説明できるようになろう!
miu_crescent
PRO
13
4.3k
The_Evolution_of_Bits_AI_SRE.pdf
nulabinc
PRO
0
190
楽しく学ぼう!コミュニティ入門 AWSと人が つむいできたストーリー
hiroramos4
PRO
1
190
Claude Code 2026年 最新アップデート
oikon48
12
9.7k
AI実装による「レビューボトルネック」を解消する仕様駆動開発(SDD)/ ai-sdd-review-bottleneck
rakus_dev
0
120
JAWSDAYS2026 [C02] 楽しく学ぼう!AWSとは?AWSの歴史 入門
hiragahh
0
150
最強のAIエージェントを諦めたら品質が上がった話 / how quality improved after giving up on the strongest AI agent
kt2mikan
0
180
身体を持ったパーソナルAIエージェントの 可能性を探る開発
yokomachi
1
120
20260311 技術SWG活動報告(デジタルアイデンティティ人材育成推進WG Ph2 活動報告会)
oidfj
0
330
JAWS Days 2026 楽しく学ぼう! 認証認可 入門/20260307-jaws-days-novice-lane-auth
opelab
11
2.2k
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
42
3k
So, you think you're a good person
axbom
PRO
2
2k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
220
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.4k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
410
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
240
Git: the NoSQL Database
bkeepers
PRO
432
66k
SEO for Brand Visibility & Recognition
aleyda
0
4.4k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
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! • オーバーエンジニアリングによって得られる学びもある 面白そうなことは利益度外視でやっていきたい 💪