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
170
自作のEsolangでQuineを書いてみた
7/15 LT 発表資料
自作のEsolang「emojifunge」でQuineを書いたことの発表です。
ten986
July 15, 2022
Tweet
Share
More Decks by ten986
See All by ten986
ペアレビューは同期的でなくてもよくないですか?
ten986
2
120
ANGEL Dojo 最終発表資料
ten986
0
640
【解説付き】自作のEsolangでQuineに挑戦してみた
ten986
0
110
Other Decks in Programming
See All in Programming
Ruby Function Composition
bkuhlmann
1
340
業務ツールとして使うPostman
msys75
0
100
WebGLで始める コンピュータグラフィックス入門
heller77
0
190
Polars入門
daikikatsuragawa
1
180
MicrosoftのPlatform Engineeringガイドを読んで実際になにかやってみた
ymd65536
1
510
Compose-View Interop in Practice (mDevCamp 2024)
stewemetal
0
170
Three ways to use AI on Android: The Good, the Bad and the Ugly
marxallski
0
110
はてなにおける CSS Modules、及び CSS Modules に足りないもの / CSS Modules in Hatena, and CSS Modules missing parts
mizdra
7
970
Milestoner
bkuhlmann
1
410
TCAとKMPを用いた新規動画配信アプリ 「ABEMA Live」の設計
tomu28
2
130
SIMD Parallel Programming with the Vector API
josepaumard
0
230
Hanami and htmx
bkuhlmann
0
220
Featured
See All Featured
Being A Developer After 40
akosma
66
580k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
126
32k
It's Worth the Effort
3n
180
27k
Building Adaptive Systems
keathley
32
1.9k
jQuery: Nuts, Bolts and Bling
dougneiner
59
7.2k
Building Your Own Lightsaber
phodgson
100
5.7k
[RailsConf 2023] Rails as a piece of cake
palkan
27
4k
Agile that works and the tools we love
rasmusluckow
325
20k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
352
28k
Building an army of robots
kneath
300
41k
Learning to Love Humans: Emotional Interface Design
aarron
267
39k
Clear Off the Table
cherdarchuk
85
310k
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 を書いてみた • 実用的でないコードの追求は楽しいよ ◦ なんの評価も求められないからね