hrkt0115311の、迷えるプログラミング教室  RSSを登録する

プログラミングに興味はありますか? 素人が入門書片手にソースコード書いたりcgi作ったり、迷子になったりするメルマガです。広大なプログラミングの森で、一緒に迷子を楽しんでみませんか?

最新号をメルマガでお届けします    
登録 解除

規約に同意して

登録した方には、まぐまぐの公式メルマガ(無料)をお届けします。
2008/08/22

「hrkt0115311の、教えて習うRuby教室。」Vol.65 ~素数とひまわりの種とネズミの巻~

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

              〜 Ruby始めました 〜
                                             
                 「hrkt0115311の、教えて習うRuby教室。」Vol.65

━━━━━━━━━━━━━━━━素数とひまわりの種とネズミの巻

おはようございます。hrkt0115311です。毎回メルマガを読んでいただきありがとう
ございます! LDRでRSSを登録して下さっている方もありがとうございます。
バックナンバーをご覧下さっている方にも感謝します。励みになります!
http://reader.livedoor.com/about/http://archive.mag2.com/0000267290/rss10.xml

与えた数が素数かどうかで振る舞いが変わるスクリプトを書いてみたくて、
今日はこんなのを作ってみました。ご笑覧いただければ幸いです。

それでは本日のメルマガ始めます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

○目次
・ 素数とひまわりの種とネズミ(出力結果)
・ 素数とひまわりの種とネズミ(解説)
・ 素数とひまわりの種とネズミ(スクリプト)
・ 編集後記

━━━━━━━━━━━━━━━━━━━━━━━━━━━免責事項

 ソースコードは、発行者が実際に動かし、構文チェックなどもしていますが
 ご利用になられて万一損害が生じた場合、保証することができません。
 ご利用になられる際は、ご自身でご確認になられた上で、お試し下さい。

━━━━━━━━━━━━━━━━━━━━Rubyの導入方法について

 OSは何をお使いですか? LinuxでもMacOSでもWindowsでも、Rubyの
 公式ページでインストール方法が説明されています。

 ○Ruby Install Guide
 http://preview.tinyurl.com/4ghc3o

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

○素数とひまわりの種とネズミ(出力結果)

$ ruby mouse.rb

 あなたの目の前に、可愛らしいネズミの入ったゲージが一つ置かれています。
 ネズミはひまわりの種が大好きです。
 ゲージの前には、端末が一つ置かれていて、テンキーが用意されています。
 あなたが素数を入力すると、ネズミはひまわりの種をもらえます。
 素数でなければ、何もおきません。それでは、始めましょう。


 残念ながら、200は素数ではありませんでした。
 ネズミは、あなたを見上げて首をかしげています。


 あなたが入力した11は素数ですので、ネズミは大好物の
 ひまわりの種をもらうことができました。おめでとうございます。


 あなたが入力した631は素数ですので、ネズミは大好物の
 ひまわりの種をもらうことができました。おめでとうございます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

○素数とひまわりの種とネズミ(解説)

素数の配列はすぐに作れたのですが(Rubyがそういう機能を用意してくれて
いるので)、配列を検索して、入力した数字が素数と一致するかどうかを
確認させるのが難儀でした。一致した場合はいいのですが、一致しないと
nillが返ってくるのです。nillだと、if式でうまく扱えないので、
少し工夫してみました。

おそらくもっとスマートな書き方があると思います。お気づきの方は
「こんな風にかけるよ」などと教えていただけるとうれしいです。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

○素数とひまわりの種とネズミ(スクリプト)

=begin
1.素数を入力するとひまわりの種をもらえるネズミ。
2.ARGVにせず、.new()でオブジェクトを作る時に数字を設定できるようにした
=end
require "jcode"
require "mathn"
require "generator"
$KCODE = "UTF-8"


class SunflowerMouse
  def initialize(n)
    @a = n
    @b = 0
    @c = 0
  end

  def c
    #@aに入力された分の素数を生成
    b = []
    q = Prime.new
    i = 0
    q.each do|x|
      break if i > @a
      b << x
      i += 1
    end
    @c = 0
    b.each do |x|
      @c = @c + 1 if @a == x #素数に該当すれば+1 該当なければ0のまま
    end
  end

  def p1
puts <<E

 あなたの目の前に、可愛らしいネズミの入ったゲージが一つ置かれています。
 ネズミはひまわりの種が大好きです。
 ゲージの前には、端末が一つ置かれていて、テンキーが用意されています。
 あなたが素数を入力すると、ネズミはひまわりの種をもらえます。
 素数でなければ、何もおきません。それでは、始めましょう。

E
  end
  def p2
    if @c == 0
puts <<E

 残念ながら、#{@a}は素数ではありませんでした。
 ネズミは、あなたを見上げて首をかしげています。

E
    elsif @c == 1
puts <<E

 あなたが入力した#{@a}は素数ですので、ネズミは大好物の
 ひまわりの種をもらうことができました。おめでとうございます。

E
    end
  end
end

#実行部分

a = SunflowerMouse.new(200)
a.p1

a.c
a.p2

b =SunflowerMouse.new(11)
b.c
b.p2

c =SunflowerMouse.new(631)
c.c
c.p2

■ 編集後記
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

「hrkt0115311の、教えて習うRuby教室。」を最後までお読みいただき
ありがとうございます。いかがでしたか?

蝉の大合唱も一段落ついた気がします。みなさまの地域はいかがですか?
夕涼みに出かける頃に、秋の虫の音がしてくれるといいのですが、
まだ秋らしい声はきけずにいます^^

説明不足・分かりにくい点・私の理解の誤りなど、お気づきになられた点があれば、
お気軽にご意見・ご感想をお寄せ下さい。 enjoy.ruby@gmail.com にて、
メルマガ読者の皆さまからのフィードバックをお待ちしています。

それではまた、次号でお会いしましょう。

■ いただいた反響について
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

「こんな仕組み作れないかな」とか「説明不足で分からないよ」といった
ご指摘をお寄せいただけると嬉しいです。みなさまの声で、メルマガを
育てていただければ嬉しいです。また、メルマガで、頂戴したメールの
一部を紹介させていただく可能性があります。差し支えがある場合は
「発行者のhtkt0115311に読んで欲しいだけで、メルマガには掲載しないで」
とお書きいただければ幸いです。

■ 転送や再配布について
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

 blogなどでご紹介いただく際は、 http://www.mag2.com/m/0000267290.html
 などを並記していただき、私の書いた文章であることが分かる形に
 していただけると幸いです。またメルマガの転送については、転送者さんと
 転送したメルマガを受け取られた方が迷惑でない範囲であれば歓迎します。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 メールマガジン「hrkt0115311の、教えて習うRuby教室。」

 ○発行者     htkt0115311
 ○発行システム  『まぐまぐ!』 http://www.mag2.com/
 ○配信中止はこちら http://www.mag2.com/m/0000267290.html
 ○公式サイト    http://enjoy-programming.g.hatena.ne.jp/hrkt0115311/
 ○日記       http://d.hatena.ne.jp/hrkt0115311/
 ○Twitter     https://twitter.com/hrkt0115311
 ○お問い合わせ   enjoy.ruby@gmail.com

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
最新号をメルマガでお届け
登録 解除

規約に同意して

登録した方には、まぐまぐの公式メルマガ(無料)をお届けします。

最近の記事

上へ戻る