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
ten986
July 15, 2022
Programming
0
280
自作の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
GoLab2025 Recap
kuro_kurorrr
0
790
まだ間に合う!Claude Code元年をふりかえる
nogu66
5
920
Kotlin Multiplatform Meetup - Compose Multiplatform 외부 의존성 아키텍처 설계부터 운영까지
wisemuji
0
150
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
580
TerraformとStrands AgentsでAmazon Bedrock AgentCoreのSSO認証付きエージェントを量産しよう!
neruneruo
4
2.2k
実は歴史的なアップデートだと思う AWS Interconnect - multicloud
maroon1st
0
290
Go コードベースの構成と AI コンテキスト定義
andpad
0
150
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
6
4.1k
はじめてのカスタムエージェント【GitHub Copilot Agent Mode編】
satoshi256kbyte
0
140
CSC307 Lecture 02
javiergs
PRO
1
740
CSC307 Lecture 03
javiergs
PRO
1
450
実はマルチモーダルだった。ブラウザの組み込みAI🧠でWebの未来を感じてみよう #jsfes #gemini
n0bisuke2
3
1.4k
Featured
See All Featured
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
97
So, you think you're a good person
axbom
PRO
0
1.9k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
61
47k
Docker and Python
trallard
47
3.7k
The Cult of Friendly URLs
andyhume
79
6.7k
Ethics towards AI in product and experience design
skipperchong
1
150
How to make the Groovebox
asonas
2
1.9k
Are puppies a ranking factor?
jonoalderson
0
2.6k
Discover your Explorer Soul
emna__ayadi
2
1k
Building an army of robots
kneath
306
46k
Marketing to machines
jonoalderson
1
4.5k
How to Ace a Technical Interview
jacobian
281
24k
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 を書いてみた • 実用的でないコードの追求は楽しいよ ◦ なんの評価も求められないからね