SlideShare ist ein Scribd-Unternehmen logo
1 von 29
Downloaden Sie, um offline zu lesen
Rubyで書く! Quine AA!

@kasei_san (小林 誠)

何者

id: kasei_san 小林 誠

株式会社LCL勤務

元株式会社フィードフォース勤務

 

Railsエンジニア 兼 

エンジニアリングマネジャー 

広告

あ
 バス x ITの会社です!

今日のお話

そんな業務とは関係ないお話です

今日のお話

業務だとキモいコード書けない

今日のお話

業務だとキモいコード書けない

キモいコード書きたい欲

今日のお話

業務だとキモいコード書けない

キモいコード書きたい欲

→ そうだ Quine AA 書こう!!

今日のお話

Quine(クワイン) AA



今日のお話

Quine(クワイン) AA

ご存知な方? ✋



今日のお話

まずは見て頂きましょう

(デモ)



Quine AA とは

アスキーアートで書かれた

実行されると同じコードを

返すコード

今日のお話

キモいですね?

今日のお話

Quine AAの原理を知って

書けるようになって

帰りましょう!

Quine AAの原理

Quine + 実行可能なAA

Quine AAの原理

まずは Quineの解説

Quineの基礎

シンプルなQuine

eval s="a='eval s='+s.inspect; puts(a)"

Quineの基礎

原理ははしょります。興味のある方はいじってみてね!

eval s="a='eval s='+s.inspect; puts(a)"

● s.inspect が ""a='eval s='+s.inspect; puts(a)"" を返す

● 'eval s='+""a='eval s='+s.inspect; puts(a)"" を a に格納して puts

しているので、同じ文字列が返る



Quine AAの原理

実行可能なAA

実行可能なAAの基礎

%w'' 記法を使うと、

コードの中に空白と改行を好きに混ぜ込めます!

eval$s=%w'p uts

"hell ow 

_wor ld"'.join #=> hellow_world

(代わりにコード内で空白とシングルクォートが使用不可に)

QuineAA

まず、%w'' 記法と混ぜたQuineを作ります

eval$s=%w'a="a";o="eval$s=%w"<<39<<$s<<39<<".join";puts(o)'.jo
in

● 39 はasciiでシングルクォート

Quine応用編

まず、%w'' 記法と混ぜたQuineを作ります

eval$s=%w'a="a";o="eval$s=%w"<<39<<$s<<39<<".join";puts(o)'.jo
in

● ここでのポイントはa="a"のところ

この部分に任意のコードを仕込むことができます!!!

Quine応用編

なので、そこに以下のコードを仕込みます...!

eval$s=%w'a="a";o="eval$s=%w"<<39<<$s<<39<<".join";puts(o)'.jo
in

● AAのbase64のデータ

● base64のデータを元に、AAを複製するジェネレータ

● AA複製時に使用する文字列は自身のコード!

QuineAA

具体的にはこんな感じのジェネレータをつくります



QuineAA

これを実行すると...(デモ



QuineAA 応用編

● base64のデータは当然複数持てる

● ソースコードを文字列として持っているので

実行時コードを加工できる

何ができるかというと... → デモ

QuineAA 応用編

キモいですね?

まとめ

● QuineAAキモい

● けど楽しい

● 自己複製コードを書くことで普段使わないRubyの
機能を触れて楽しい!

結論

QuineAA たのしい!

結論

コード

https://github.com/kasei-san/quine


Weitere ähnliche Inhalte

Was ist angesagt?

スパースモデリング入門
スパースモデリング入門スパースモデリング入門
スパースモデリング入門Hideo Terada
 
cvpaper.challenge 研究効率化 Tips
cvpaper.challenge 研究効率化 Tipscvpaper.challenge 研究効率化 Tips
cvpaper.challenge 研究効率化 Tipscvpaper. challenge
 
「知識」のDeep Learning
「知識」のDeep Learning「知識」のDeep Learning
「知識」のDeep LearningYuya Unno
 
強化学習その3
強化学習その3強化学習その3
強化学習その3nishio
 
強化学習その2
強化学習その2強化学習その2
強化学習その2nishio
 
Quine・難解プログラミングについて
Quine・難解プログラミングについてQuine・難解プログラミングについて
Quine・難解プログラミングについてmametter
 
[DL輪読会]深層強化学習はなぜ難しいのか?Why Deep RL fails? A brief survey of recent works.
[DL輪読会]深層強化学習はなぜ難しいのか?Why Deep RL fails? A brief survey of recent works.[DL輪読会]深層強化学習はなぜ難しいのか?Why Deep RL fails? A brief survey of recent works.
[DL輪読会]深層強化学習はなぜ難しいのか?Why Deep RL fails? A brief survey of recent works.Deep Learning JP
 
Word2vecの並列実行時の学習速度の改善
Word2vecの並列実行時の学習速度の改善Word2vecの並列実行時の学習速度の改善
Word2vecの並列実行時の学習速度の改善Naoaki Okazaki
 
[DL輪読会]機械学習におけるカオス現象について
[DL輪読会]機械学習におけるカオス現象について[DL輪読会]機械学習におけるカオス現象について
[DL輪読会]機械学習におけるカオス現象についてDeep Learning JP
 
強化学習その1
強化学習その1強化学習その1
強化学習その1nishio
 
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法Takuya Akiba
 
論文紹介:Dueling network architectures for deep reinforcement learning
論文紹介:Dueling network architectures for deep reinforcement learning論文紹介:Dueling network architectures for deep reinforcement learning
論文紹介:Dueling network architectures for deep reinforcement learningKazuki Adachi
 
競技プログラミング頻出アルゴリズム攻略
競技プログラミング頻出アルゴリズム攻略競技プログラミング頻出アルゴリズム攻略
競技プログラミング頻出アルゴリズム攻略K Moneto
 
クックパッド特売情報 における自然言語処理 〜固有表現抽出を利用した検索システム〜
クックパッド特売情報 における自然言語処理 〜固有表現抽出を利用した検索システム〜クックパッド特売情報 における自然言語処理 〜固有表現抽出を利用した検索システム〜
クックパッド特売情報 における自然言語処理 〜固有表現抽出を利用した検索システム〜Takeshi Arabiki
 
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~Takuya Akiba
 

Was ist angesagt? (20)

スパースモデリング入門
スパースモデリング入門スパースモデリング入門
スパースモデリング入門
 
cvpaper.challenge 研究効率化 Tips
cvpaper.challenge 研究効率化 Tipscvpaper.challenge 研究効率化 Tips
cvpaper.challenge 研究効率化 Tips
 
「知識」のDeep Learning
「知識」のDeep Learning「知識」のDeep Learning
「知識」のDeep Learning
 
強化学習その3
強化学習その3強化学習その3
強化学習その3
 
強化学習その2
強化学習その2強化学習その2
強化学習その2
 
Quine・難解プログラミングについて
Quine・難解プログラミングについてQuine・難解プログラミングについて
Quine・難解プログラミングについて
 
[DL輪読会]深層強化学習はなぜ難しいのか?Why Deep RL fails? A brief survey of recent works.
[DL輪読会]深層強化学習はなぜ難しいのか?Why Deep RL fails? A brief survey of recent works.[DL輪読会]深層強化学習はなぜ難しいのか?Why Deep RL fails? A brief survey of recent works.
[DL輪読会]深層強化学習はなぜ難しいのか?Why Deep RL fails? A brief survey of recent works.
 
ResNetの仕組み
ResNetの仕組みResNetの仕組み
ResNetの仕組み
 
Word2vecの並列実行時の学習速度の改善
Word2vecの並列実行時の学習速度の改善Word2vecの並列実行時の学習速度の改善
Word2vecの並列実行時の学習速度の改善
 
[DL輪読会]機械学習におけるカオス現象について
[DL輪読会]機械学習におけるカオス現象について[DL輪読会]機械学習におけるカオス現象について
[DL輪読会]機械学習におけるカオス現象について
 
強化学習その1
強化学習その1強化学習その1
強化学習その1
 
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
 
論文紹介:Dueling network architectures for deep reinforcement learning
論文紹介:Dueling network architectures for deep reinforcement learning論文紹介:Dueling network architectures for deep reinforcement learning
論文紹介:Dueling network architectures for deep reinforcement learning
 
競技プログラミング頻出アルゴリズム攻略
競技プログラミング頻出アルゴリズム攻略競技プログラミング頻出アルゴリズム攻略
競技プログラミング頻出アルゴリズム攻略
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
クックパッド特売情報 における自然言語処理 〜固有表現抽出を利用した検索システム〜
クックパッド特売情報 における自然言語処理 〜固有表現抽出を利用した検索システム〜クックパッド特売情報 における自然言語処理 〜固有表現抽出を利用した検索システム〜
クックパッド特売情報 における自然言語処理 〜固有表現抽出を利用した検索システム〜
 
辺彩色
辺彩色辺彩色
辺彩色
 
実用Brainf*ckプログラミング
実用Brainf*ckプログラミング実用Brainf*ckプログラミング
実用Brainf*ckプログラミング
 
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
 
Marp Tutorial
Marp TutorialMarp Tutorial
Marp Tutorial
 

Mehr von 誠 小林

転職活動ふりかえり
転職活動ふりかえり転職活動ふりかえり
転職活動ふりかえり誠 小林
 
Unicodeの square era name から新元号を占う
Unicodeの square era name から新元号を占うUnicodeの square era name から新元号を占う
Unicodeの square era name から新元号を占う誠 小林
 
お仕事のコミュニケーションをスキルで解決
お仕事のコミュニケーションをスキルで解決お仕事のコミュニケーションをスキルで解決
お仕事のコミュニケーションをスキルで解決誠 小林
 
遊ぶニンジャ学会の紹介
遊ぶニンジャ学会の紹介遊ぶニンジャ学会の紹介
遊ぶニンジャ学会の紹介誠 小林
 
いかにしてバンデラスはうまれるか
いかにしてバンデラスはうまれるかいかにしてバンデラスはうまれるか
いかにしてバンデラスはうまれるか誠 小林
 
ニンジャは忍者か
ニンジャは忍者かニンジャは忍者か
ニンジャは忍者か誠 小林
 
The visualization of relationships between Ninja Slayer episodes by ninjas
 The visualization of relationships between Ninja Slayer episodes by ninjas The visualization of relationships between Ninja Slayer episodes by ninjas
The visualization of relationships between Ninja Slayer episodes by ninjas誠 小林
 
人類にはまだ早いCSV
人類にはまだ早いCSV人類にはまだ早いCSV
人類にはまだ早いCSV誠 小林
 
圧縮率による著者推定法の ニンジャスレイヤーへの応用
圧縮率による著者推定法の ニンジャスレイヤーへの応用圧縮率による著者推定法の ニンジャスレイヤーへの応用
圧縮率による著者推定法の ニンジャスレイヤーへの応用誠 小林
 
サキブレの統計および 更新期間帯の予測
サキブレの統計および 更新期間帯の予測サキブレの統計および 更新期間帯の予測
サキブレの統計および 更新期間帯の予測誠 小林
 
ニンジャ学会のご紹介
ニンジャ学会のご紹介ニンジャ学会のご紹介
ニンジャ学会のご紹介誠 小林
 
サイバーサングラス製作記
サイバーサングラス製作記サイバーサングラス製作記
サイバーサングラス製作記誠 小林
 
Javascript を使ってみよう!!
Javascript を使ってみよう!!Javascript を使ってみよう!!
Javascript を使ってみよう!!誠 小林
 

Mehr von 誠 小林 (13)

転職活動ふりかえり
転職活動ふりかえり転職活動ふりかえり
転職活動ふりかえり
 
Unicodeの square era name から新元号を占う
Unicodeの square era name から新元号を占うUnicodeの square era name から新元号を占う
Unicodeの square era name から新元号を占う
 
お仕事のコミュニケーションをスキルで解決
お仕事のコミュニケーションをスキルで解決お仕事のコミュニケーションをスキルで解決
お仕事のコミュニケーションをスキルで解決
 
遊ぶニンジャ学会の紹介
遊ぶニンジャ学会の紹介遊ぶニンジャ学会の紹介
遊ぶニンジャ学会の紹介
 
いかにしてバンデラスはうまれるか
いかにしてバンデラスはうまれるかいかにしてバンデラスはうまれるか
いかにしてバンデラスはうまれるか
 
ニンジャは忍者か
ニンジャは忍者かニンジャは忍者か
ニンジャは忍者か
 
The visualization of relationships between Ninja Slayer episodes by ninjas
 The visualization of relationships between Ninja Slayer episodes by ninjas The visualization of relationships between Ninja Slayer episodes by ninjas
The visualization of relationships between Ninja Slayer episodes by ninjas
 
人類にはまだ早いCSV
人類にはまだ早いCSV人類にはまだ早いCSV
人類にはまだ早いCSV
 
圧縮率による著者推定法の ニンジャスレイヤーへの応用
圧縮率による著者推定法の ニンジャスレイヤーへの応用圧縮率による著者推定法の ニンジャスレイヤーへの応用
圧縮率による著者推定法の ニンジャスレイヤーへの応用
 
サキブレの統計および 更新期間帯の予測
サキブレの統計および 更新期間帯の予測サキブレの統計および 更新期間帯の予測
サキブレの統計および 更新期間帯の予測
 
ニンジャ学会のご紹介
ニンジャ学会のご紹介ニンジャ学会のご紹介
ニンジャ学会のご紹介
 
サイバーサングラス製作記
サイバーサングラス製作記サイバーサングラス製作記
サイバーサングラス製作記
 
Javascript を使ってみよう!!
Javascript を使ってみよう!!Javascript を使ってみよう!!
Javascript を使ってみよう!!
 

Ruby で書く! Quine aa