SlideShare une entreprise Scribd logo
1  sur  32
Télécharger pour lire hors ligne
時間をかけて解くFizzBuzz
       kchinda@aiming-inc.com
FizzBuzz
遊び方

 プレイヤーは円状に座る。

 最初のプレイヤーは「1」と数字を発言する。

 次のプレイヤーは直前のプレイヤーの次の数字を発言していく。

 ただし、

      3で割り切れる場合は 「Fizz」

      5で割り切れる場合は 「Buzz」

      両者で割り切れる場合は 「Fizz Buzz」

 を数の代わりに発言しなければならない。

 発言を間違えた者や、ためらった者は脱落となる。

                                http://ja.wikipedia.org/wiki/Fizz_Buzz
FizzBuzz


 1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz,
 Buzz, 11, Fizz,13,14, FizzBuzz, 16, 17,
 Fizz, 19, Buzz...
FizzBuzz


 色々な FizzBuzz を書いてみる
FizzBuzz コード例
 if 文
 def if_function n
   if n % 15 == 0
     'FizzBuzz'
   elsif n % 3 == 0
     'Fizz'
   elsif n % 5 == 0
     'Buzz'
   else
     n
   end
 end
FizzBuzz コード例
 case 文
 def case_function n
   case n % 15
   when 0
     'FizzBuzz'
   when 3, 6, 9, 12
     'Fizz'
   when 5, 10
     'Buzz'
   else
     n
   end
 end
FizzBuzz コード例
 3項演算子
 def ternary_function n
   n % 15 == 0 ? ‘FizzBuzz’ :
     n % 3 == 0 ? ’Fizz’ :
       n % 5 == 0 ? ‘Buzz’ : n
 end
FizzBuzz コード例
 map

 def map_function
   (1..100).map{|n|(s=(n%3<1 ? 'Fizz' :
 '') + (n%5<1 ?'Buzz':''))=~/^$/ ? n:s}
 end
FizzBuzz コード例
 ヒアドキュメント

 def here_document n
   ret="#{["Fizz"][n%3]}#{["Buzz"][n%5]}"
   ret.empty? ? n : ret
 end
FizzBuzz コード例
 http://golf.shinh.org/p.rb?FizzBuzz
 ruby での最短は 50 byte
FizzBuzz
 色々な FizzBuzz を書いてみる

  短すぎるコードは難解過ぎる

  テクニックを知らないと無理


  短いコードを追求する必要はない
シンプルな FizzBuzz !?
def silly_function n
  case n
  when 1; 1
  when 2; 2
  when 3; 'Fizz'
  when 4; 4
  when 5; 'Buzz'
  when 6; 'Fizz'
  when 7; 7
  when 8; 8
  when 9; 'Fizz'
  when 10; 'Buzz'
  # ...
  end
end
シンプルな FizzBuzz !?
def silly_function
  puts ‘1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11
Fizz 13 14 FuzzBuzz 16 17 Fizz ...’
end
ちょっとは考えよう.
誰が?
コンピュータが.
ここから本題.
進化的アルゴリズム
計算機に考えてもらおう

 ニューラルネットワーク

 遺伝的アルゴリズム

 強化学習

 etc.
GA(遺伝的アルゴリズム)
 生物の遺伝のメカニズムを学習に応用

 遺伝子

 染色体

 交

 突然変異

 選択・淘汰
GA(遺伝的アルゴリズム)

 アルゴリズムの流れ




         http://www.jepoc.or.jp/tecinfo/tec00048.htm
GA(遺伝的アルゴリズム)


 GA で文章を生成してみる

 ‘I am a Genius.’
GA(遺伝的アルゴリズム)



      demo
GA(遺伝的アルゴリズム)




 FizzBuzz 問題は解ける?
GA(遺伝的アルゴリズム)

生成された文字列が,その言語によって

 解析可能

 かつ,実行可能

 かつ,正しい結果を出力する

    ハードルが高い!!!
GP(遺伝的プログラミング)

 GA でのDNA配列を木構造で表現

 プログラムとして解釈可能




         T. Segaran, 集合知プログラミング, p.274
GP(遺伝的プログラミング)
 生成された文字列が,その言語に
 よって

  解析可能 clear!

  かつ,実行可能 clear!

  かつ,正しい結果を出力する
GP(遺伝的プログラミング)
  パラメータ・条件

   各世代の個体数: 100

   突然変異確率: 0.1

   選択戦略: エリート戦略

   最大世代数: 100,000 世代

   使用できるオペレータ: +, -, *, %, if, >

   使用できるオペランド: 1..10 の整数, ‘Fizz’, ‘Buzz’

   教師信号(適応度の算出): 1<n<50 までの結果
GP(遺伝的プログラミング)
 結果
 if ( 5 - 4 ) > n % ( 9 + ( 7 - 1 ) )
   'Fizz' + 'Buzz'
 else
   if (9 % 8) > n % 5
      'Fizz' * 1
   else
      if (7 - 6) > n % (10 % 7)
        'Buzz'
      else
        n
      end
   end             収束時の世代数: 19,473 世代目
 end               (3回のうち,2回は収束せず)
GP(遺伝的プログラミング)




  ちなみに
GP(遺伝的プログラミング)


 コード量

  5 classes
  203 lines
GP(遺伝的プログラミング)
 かかった時間

 コーディング

  GA: 1 時間弱

  GPへの改良: 1.5 時間

 実行時間

  一回につき,5 時間 とか 2 時間 とか
結論



     FizzBuzz 問題くらい
     自分の頭で考えよう

Contenu connexe

En vedette

Javaで最強のfizz buzz
Javaで最強のfizz buzzJavaで最強のfizz buzz
Javaで最強のfizz buzzyy yank
 
良質なコードを高速に書くコツ
良質なコードを高速に書くコツ良質なコードを高速に書くコツ
良質なコードを高速に書くコツShunji Konishi
 
オブジェクト指向やめましょう
オブジェクト指向やめましょうオブジェクト指向やめましょう
オブジェクト指向やめましょうなおき きしだ
 
CTFはとんでもないものを 盗んでいきました。私の時間です…
CTFはとんでもないものを 盗んでいきました。私の時間です…CTFはとんでもないものを 盗んでいきました。私の時間です…
CTFはとんでもないものを 盗んでいきました。私の時間です…Hiromu Yakura
 
型についてあれこれ
型についてあれこれ型についてあれこれ
型についてあれこれYuta Shimakawa
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣Masahiro Nishimi
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?Moriharu Ohzu
 
ソースコードの品質向上のための効果的で効率的なコードレビュー
ソースコードの品質向上のための効果的で効率的なコードレビューソースコードの品質向上のための効果的で効率的なコードレビュー
ソースコードの品質向上のための効果的で効率的なコードレビューMoriharu Ohzu
 

En vedette (8)

Javaで最強のfizz buzz
Javaで最強のfizz buzzJavaで最強のfizz buzz
Javaで最強のfizz buzz
 
良質なコードを高速に書くコツ
良質なコードを高速に書くコツ良質なコードを高速に書くコツ
良質なコードを高速に書くコツ
 
オブジェクト指向やめましょう
オブジェクト指向やめましょうオブジェクト指向やめましょう
オブジェクト指向やめましょう
 
CTFはとんでもないものを 盗んでいきました。私の時間です…
CTFはとんでもないものを 盗んでいきました。私の時間です…CTFはとんでもないものを 盗んでいきました。私の時間です…
CTFはとんでもないものを 盗んでいきました。私の時間です…
 
型についてあれこれ
型についてあれこれ型についてあれこれ
型についてあれこれ
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
ソースコードの品質向上のための効果的で効率的なコードレビュー
ソースコードの品質向上のための効果的で効率的なコードレビューソースコードの品質向上のための効果的で効率的なコードレビュー
ソースコードの品質向上のための効果的で効率的なコードレビュー
 

Plus de Kazuyuki CHINDA

仮想電子工作のすすめ
仮想電子工作のすすめ仮想電子工作のすすめ
仮想電子工作のすすめKazuyuki CHINDA
 
ウェブエンジニアのための色の話
ウェブエンジニアのための色の話ウェブエンジニアのための色の話
ウェブエンジニアのための色の話Kazuyuki CHINDA
 
Shinjuku.html5.lunch #11
Shinjuku.html5.lunch #11Shinjuku.html5.lunch #11
Shinjuku.html5.lunch #11Kazuyuki CHINDA
 
エンジニアのためのUX入門
エンジニアのためのUX入門エンジニアのためのUX入門
エンジニアのためのUX入門Kazuyuki CHINDA
 

Plus de Kazuyuki CHINDA (7)

Introduction fasttext
Introduction fasttextIntroduction fasttext
Introduction fasttext
 
仮想電子工作のすすめ
仮想電子工作のすすめ仮想電子工作のすすめ
仮想電子工作のすすめ
 
Query selecterの話
Query selecterの話Query selecterの話
Query selecterの話
 
ウェブエンジニアのための色の話
ウェブエンジニアのための色の話ウェブエンジニアのための色の話
ウェブエンジニアのための色の話
 
Shinjuku.html5.lunch #11
Shinjuku.html5.lunch #11Shinjuku.html5.lunch #11
Shinjuku.html5.lunch #11
 
typo の傾向と対策
typo の傾向と対策typo の傾向と対策
typo の傾向と対策
 
エンジニアのためのUX入門
エンジニアのためのUX入門エンジニアのためのUX入門
エンジニアのためのUX入門
 

Dernier

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 

Dernier (11)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

時間をかけて解く FizzBuzz