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
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
2年のAppleウォレットパス開発の振り返り
muno92
PRO
0
200
MDN Web Docs に日本語翻訳でコントリビュート
ohmori_yusuke
0
630
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
16
5.9k
20260127_試行錯誤の結晶を1冊に。著者が解説 先輩データサイエンティストからの指南書 / author's_commentary_ds_instructions_guide
nash_efp
0
820
15年続くIoTサービスのSREエンジニアが挑む分散トレーシング導入
melonps
0
110
gunshi
kazupon
1
150
組織で育むオブザーバビリティ
ryota_hnk
0
160
2026年 エンジニアリング自己学習法
yumechi
0
120
OSSとなったswift-buildで Xcodeのビルドを差し替えられるため 自分でXcodeを直せる時代になっている ダイアモンド問題編
yimajo
3
590
Apache Iceberg V3 and migration to V3
tomtanaka
0
120
Fluid Templating in TYPO3 14
s2b
0
120
Denoのセキュリティに関する仕組みの紹介 (toranoana.deno #23)
uki00a
0
280
Featured
See All Featured
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.8k
Un-Boring Meetings
codingconduct
0
200
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.1k
Building an army of robots
kneath
306
46k
Utilizing Notion as your number one productivity tool
mfonobong
2
210
Reality Check: Gamification 10 Years Later
codingconduct
0
2k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
7.9k
ラッコキーワード サービス紹介資料
rakko
1
2.2M
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Raft: Consensus for Rubyists
vanstee
141
7.3k
Tell your own story through comics
letsgokoyo
1
800
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 を書いてみた • 実用的でないコードの追求は楽しいよ ◦ なんの評価も求められないからね