$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
自作のEsolangでQuineを書いてみた
Search
ten986
July 15, 2022
Programming
0
270
自作のEsolangでQuineを書いてみた
7/15 LT 発表資料
自作のEsolang「emojifunge」でQuineを書いたことの発表です。
ten986
July 15, 2022
Tweet
Share
More Decks by ten986
See All by ten986
ペアレビューは同期的でなくてもよくないですか?
ten986
2
150
ANGEL Dojo 最終発表資料
ten986
0
1.1k
【解説付き】自作のEsolangでQuineに挑戦してみた
ten986
0
180
Other Decks in Programming
See All in Programming
リリース時」テストから「デイリー実行」へ!開発マネージャが取り組んだ、レガシー自動テストのモダン化戦略
goataka
0
130
MAP, Jigsaw, Code Golf 振り返り会 by 関東Kaggler会|Jigsaw 15th Solution
hasibirok0
0
230
令和最新版Android Studioで化石デバイス向けアプリを作る
arkw
0
400
俺流レスポンシブコーディング 2025
tak_dcxi
14
8.7k
【CA.ai #3】Google ADKを活用したAI Agent開発と運用知見
harappa80
0
310
AIコーディングエージェント(Gemini)
kondai24
0
220
認証・認可の基本を学ぼう前編
kouyuume
0
200
Rubyで鍛える仕組み化プロヂュース力
muryoimpl
0
110
AIエンジニアリングのご紹介 / Introduction to AI Engineering
rkaga
6
2.1k
Flutter On-device AI로 완성하는 오프라인 앱, 박제창 @DevFest INCHEON 2025
itsmedreamwalker
1
110
從冷知識到漏洞,你不懂的 Web,駭客懂 - Huli @ WebConf Taiwan 2025
aszx87410
2
2.5k
LLM Çağında Backend Olmak: 10 Milyon Prompt'u Milisaniyede Sorgulamak
selcukusta
0
120
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
Building Flexible Design Systems
yeseniaperezcruz
330
39k
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
Context Engineering - Making Every Token Count
addyosmani
9
510
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
Rebuilding a faster, lazier Slack
samanthasiow
84
9.3k
Practical Orchestrator
shlominoach
190
11k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
Side Projects
sachag
455
43k
Transcript
自作のEsolangで Quineを書いてみた 7/15 LT @ten986
自己紹介 • 太田 佳 • 株式会社ゆめみ 2022年4月新卒入社 ◦ フロントエンドエンジニア •
Twitter: @ten986 ◦ 「てん」「てんきゅー」と呼ばれる • 京都在住でフルリモートワーク • 趣味: 音ゲー、ペンシルパズル、 ボードゲーム
みなさん
役に立つコード ばかり 書いていませんか?
役に立たないコードの 世界をお伝えします
プログラミング言語とは • プログラミング言語: プログラムを記述する人工言語 • 目的等により様々な種類がある ◦ C, Python, JavaScript,
Rust… • 基本的には読みやすい ◦ 画像は C# の例
Esolang とは • Esolang: 難解プログラミング言語 • 基本的に、実用性を目指さないジョーク言語 • 見た目にユニークなもの、難しさを極めたもの、 画像がコードになるもの、などさまざまな種類
Esolang の例: Brainf**k • Brainf**k: おそらく一番有名なEsolang • 「><+-.,[]」の8つの記号のみで記述する • チューリング完全なので、様々な計算が可能
◦ このあと登場する言語は全てチューリング完全
Esolang の例: Piet • Piet: 画像で記述する言語 • ポインタは、左上から始め、縦横に動く ◦ 行き止まりになると実行終了
• 「移動前」「移動後」の色の差分が「命令」となる
Esolang の例: Whitespace • Whitespace : 空白文字で記述する • 「スペース」「タブ」「改行」 により記述する
• 目視不能
Quine とは • Quine: ソースコードと出力が 一致するコード • Ruby による Quine
が有名 • 以下はソースコードと出力が一致 ◦ eval s="puts'eval s='+s.inspect”
Esolang での Quine について • Esolang で Quine を書いた先駆者がいる •
https://www.slideshare.net/mametter/quine-10290517 ◦ mametter氏による資料 ◦ Ruby による様々なQuine、Piet など Esolang の Quine • https://qiita.com/angel_p_57/items/f954d30a637566b74a6d ◦ angel_p_57氏による資料 ◦ Whitespace の Quine
自作のEsolangで Quineを書いてみた 7/15 LT @ten986
自作Esolang「emojifunge」 • emojiを二次元に配置し、 ポインタがその上を動く スタック指向言語 • スタックのネストなど、スタック機能が強力 • 命令セットがユニーク •
emojiの出力機能も備える • https://github.com/ten986/emojifunge-lang
emojifunge の命令の例(まじめ)
emojifunge の命令の例(ふまじめ)
emojifungeでQuineを作ろう! • 早速ですが、emojifungeでQuineが組めました! • 次のスライドにコードを載せました! • コードの全貌を見てみましょう! • (PietなどのQuineで苦労していた通り大変そう!)
📜
📜 ・・・🤔
emojifungeにはQuine命令があった • emojifunge には Quine をする 命令があった • これ1文字書けば、なんと プログラムと出力が一致する!!
• たった 4byte で Quine が実現!!
そういうことではない • Quine は実現したが、求めているものではない • 華麗な、奇妙な実装からくるプログラムの奥深さが Quine に求めているもののはず • こんなものでいいのか?
ちゃんと実装したものがここに • 📜のようなズルはせずに Quine を実装する • https://emojifunge-site.vercel.app/ ◦ 「QUINE」->「実行」から体験できます! ◦
実行に3秒くらいかかります • https://gist.github.com/ten986/fbd05be46d9c750b09 09af3be6776550 ここにコードがあります
None
None
おめでとうございます • emojifunge で Quine が実現できました ◦ やったね! • ちゃんと出力も一致している
• ちなみに、1行目は約30,000文字あるっぽい(?)
概要の説明 • 実装できたので、実装解説をします ◦ 詳細の解説までは割愛
A B C Aをコピー Aの左を出力 Aの右を出力
概要 • 前提: スタック列と、emojifungeのコードが1対1対応が可能 • A:2行目以降のコードを表すスタック列を載せる • (このスタック列全体を1つのスタックにまとめ、複製する) • B:スタック列に対し、「そのスタック列を載せるようなemojifungeの
コード」を出力 ◦ つまり、Aの部分が出力される • C:スタック列に対し、「そのスタック列の表すemoji列」を出力 ◦ つまり、2行目以降が出力される
おわり • Esolang(難解プログラミング言語)は様々ある ◦ 自作することもできる • Quine という娯楽的プログラムがある • 自作の
Esolang で Quine を書いてみた • 実用的でないコードの追求は楽しいよ ◦ なんの評価も求められないからね