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
自作のEsolangでQuineを書いてみた
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
ten986
July 15, 2022
Programming
300
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
自作のEsolangでQuineを書いてみた
7/15 LT 発表資料
自作のEsolang「emojifunge」でQuineを書いたことの発表です。
ten986
July 15, 2022
More Decks by ten986
See All by ten986
ペアレビューは同期的でなくてもよくないですか?
ten986
2
160
ANGEL Dojo 最終発表資料
ten986
0
1.1k
【解説付き】自作のEsolangでQuineに挑戦してみた
ten986
0
220
Other Decks in Programming
See All in Programming
Inside Stream API
skrb
1
710
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
550
技術記事、AIに書かせるか、自分で書くか? 〜それでも私が自分の手で書く理由〜 / #QiitaConference
jnchito
2
1.4k
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.2k
AIとASP.NET Coreで雑Webアプリを作った話
mayuki
0
620
TAKTでAI駆動開発の品質を設計する
j5ik2o
7
1.3k
RTSPクライアントを自作してみた話
simotin13
0
600
エージェンティックRAGにAWSで入門しよう!
har1101
8
1.5k
JavaDoc 再入門
nagise
1
350
技術記事、 専門家としてのプログラマ、 言語化
mizchi
13
5.9k
3Dシーンの圧縮
fadis
1
770
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
160
Featured
See All Featured
WENDY [Excerpt]
tessaabrams
11
38k
Color Theory Basics | Prateek | Gurzu
gurzu
0
360
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
440
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.5k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
250
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
160
Navigating Team Friction
lara
192
16k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
200
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
330
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.7k
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 を書いてみた • 実用的でないコードの追求は楽しいよ ◦ なんの評価も求められないからね