Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
マインクラフトのコマンド圧縮の効率化を考えたら、40年前の論文のアルゴリズムを実装することになった話
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
kurisaki kazuma
June 25, 2024
Technology
220
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
マインクラフトのコマンド圧縮の効率化を考えたら、40年前の論文のアルゴリズムを実装することになった話
kurisaki kazuma
June 25, 2024
More Decks by kurisaki kazuma
See All by kurisaki kazuma
新規開発と並走したリファクタリング戦略.
kult0922
0
29
Next13 動的クエリ、 Server component で実装するか?Client component で実装するか?
kult0922
0
240
Web workerを使ってUXを向上させようとした話
kult0922
1
520
Other Decks in Technology
See All in Technology
使いこなすために知っておきたい Azure SRE Agent アンチパターン
torumakabe
2
430
SDDの運用にめげずに向き合った話
sansantech
PRO
1
140
DevelopersIO 2026 知識の地図を描く ─ オントロジーとは何か?
ishikawa_satoru
1
1.2k
ビジネスを止めない技術的負債の返済のための戦略とその手法 - 技術的負債と向き合う / Complexity and Simplicity
soudai
PRO
3
680
並行性の問題を防げ!実践トランザクション入門
occhi
0
280
カンファレンスに参加した後の浮遊感とセルフケア
pauli
0
320
UniFi(ユニファイ)AIカメラの現場活用
ludicmind
1
380
メルペイ 会計システム概要と歴史
mewuto
0
200
freeeらしさをAIとともに作る / Creating the freee Experience with AI
ymrl
0
220
AI駆動開発、viviONの1年 ── うまくいったこと・いかなかったこと
vivion
0
280
二歩目のフロントエンド・ウェブアクセシビリティ
camiha
2
250
LLM機能を自作して分かるSnowflake Cortex AIの強み
nayuts
0
340
Featured
See All Featured
Mind Mapping
helmedeiros
1
400
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
570
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.1k
Exploring anti-patterns in Rails
aemeredith
4
530
The Spectacular Lies of Maps
axbom
PRO
1
1.1k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
920
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3.3k
The Cult of Friendly URLs
andyhume
79
7k
How STYLIGHT went responsive
nonsquared
100
6.3k
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! • オーバーエンジニアリングによって得られる学びもある 面白そうなことは利益度外視でやっていきたい 💪