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 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-
2009/08/27 「hrkt0115311の、迷えるプログラミング教室」Vol.91 ~htmlSQLで「みそ録」作ったよ! の巻~
-
2009/07/19 「hrkt0115311の、迷えるプログラミング教室」Vol.90 ~URL指定すると、はてな記法を返すスクリプトの巻~
-
2009/07/13 「hrkt0115311の、迷えるプログラミング教室」Vol.89 ~XML処理するTwitterまとめスクリプト改編の巻~
-
2009/07/13 「hrkt0115311の、迷えるプログラミング教室」Vol.89 ~XML処理するTwitterまとめスクリプト改編の巻~
-
2009/04/25 「hrkt0115311の、迷えるプログラミング教室」Vol.88 ~HTMLの部分置き換えスクリプトの巻~



