<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>zaru blog &#187; プログラミング_Ruby</title>
	<atom:link href="http://zaru.tofu-kun.org/category/%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0_ruby/feed/" rel="self" type="application/rss+xml" />
	<link>http://zaru.tofu-kun.org</link>
	<description>Web系のこととかー。</description>
	<lastBuildDate>Fri, 18 Nov 2011 02:28:49 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://zaru.tofu-kun.org/category/%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0_ruby/feed/" />
		<item>
		<title>Ruby プログラミング練習問題3「素数判定」</title>
		<link>http://zaru.tofu-kun.org/2010/02/16/ruby-%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0%e7%b7%b4%e7%bf%92%e5%95%8f%e9%a1%8c3%e3%80%8c%e7%b4%a0%e6%95%b0%e5%88%a4%e5%ae%9a%e3%80%8d/</link>
		<comments>http://zaru.tofu-kun.org/2010/02/16/ruby-%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0%e7%b7%b4%e7%bf%92%e5%95%8f%e9%a1%8c3%e3%80%8c%e7%b4%a0%e6%95%b0%e5%88%a4%e5%ae%9a%e3%80%8d/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 09:35:58 +0000</pubDate>
		<dc:creator>zaru</dc:creator>
				<category><![CDATA[プログラミング_Ruby]]></category>

		<guid isPermaLink="false">http://zaru.tofu-kun.org/?p=143</guid>
		<description><![CDATA[第3回目のRubyプログラミング練習問題。今回は素数かどうかを調べる。 素数判定 練習問題 &#8211; プログラミングスレまとめ in VIP プログラミング練習問題3「素数判定」 与えられた数が素数かどうか調べる あるいは与えられた数までの素数を列挙する 処理にかかった時間を計測しておくと、自分の技術向上に伴って処理時間が短くなっていくのがよくわかる 素数とは 素数自体について調べる余地はないと思っていたけど、念のためWikipediaさまを参照してみると1とその数自身以外に正の約数がない（つまり1とその数以外のどんな自然数によっても割り切れない）、1 より大きな自然数のこと。ということだそうで。 とりあえずの回答 じゃあ、指定した数字が素数かどうかを調べるのを書いてみることにする。ぱっと思いついたのはやはり、2から指定した数まで全て列挙して割り算をしていくという力業。というかこれしか思いつかない。ならば簡単…ということで。 #!/usr/bin/ruby num = ARGV[0] flag = 0 2.upto(num.to_i - 1) do &#124;i&#124; over = num.to_i % i puts num + ' / ' + i.to_s + 'の余りは' + over.to_s + &#34;\n&#34; if over == 0 flag = 1 end [...]]]></description>
			<content:encoded><![CDATA[<p>第3回目のRubyプログラミング練習問題。今回は素数かどうかを調べる。</p>
<ul>
<li><a href="http://vipprog.net/wiki/exercise.html#o8db2119">素数判定 練習問題 &#8211; プログラミングスレまとめ in VIP</a></li>
</ul>
<blockquote>
<h3>プログラミング練習問題3「素数判定」</h3>
<p>与えられた数が素数かどうか調べる<br />
あるいは与えられた数までの素数を列挙する<br />
処理にかかった時間を計測しておくと、自分の技術向上に伴って処理時間が短くなっていくのがよくわかる</p></blockquote>
<h3>素数とは</h3>
<p>素数自体について調べる余地はないと思っていたけど、念のためWikipediaさまを参照してみると<q>1とその数自身以外に正の約数がない（つまり1とその数以外のどんな自然数によっても割り切れない）、1 より大きな自然数のこと。</q>ということだそうで。</p>
<h3>とりあえずの回答</h3>
<p>じゃあ、指定した数字が素数かどうかを調べるのを書いてみることにする。ぱっと思いついたのはやはり、2から指定した数まで全て列挙して割り算をしていくという力業。というかこれしか思いつかない。ならば簡単…ということで。</p>
<pre class="brush: ruby; title: ;">
#!/usr/bin/ruby

num = ARGV[0]
flag = 0
2.upto(num.to_i - 1) do |i|
    over = num.to_i % i
    puts num + ' / ' + i.to_s + 'の余りは' + over.to_s + &quot;\n&quot;
    if over == 0
        flag = 1
    end
end

if flag == 0
    puts num + 'は素数です'
else
    puts num + 'は素数ではありません'
end
</pre>
<p><code>実行結果<br />
$./3_1.rb 5<br />
5 / 2の余りは1<br />
5 / 3の余りは2<br />
5 / 4の余りは1<br />
5は素数です<br />
</code></p>
<p>そもそも素数の判定方法がきちんと考えられていない…気もする。うーん。</p>
<h3>まとめサイトに掲載されていた解答例</h3>
<pre class="brush: ruby; title: ;">
#!/usr/bin/ruby

require 'mathn.rb'

class PrimePredicater
  def initialize
    @prime = Prime.new
    @cache = []
  end

  def prime?(x)
    extend_cache x if @cache.empty? || x &gt; @cache.last
    @cache.include? x
  end

private
  def extend_cache(lim)
    @prime.each do |x|
      break if x &gt; lim
      @cache.push x
    end
  end
end

#使用例
ppred = PrimePredicater.new
[1, 10, 2, 5, 7].each do |x|
  p ppred.prime?(x)
end
</pre>
<p>う、うーん？<br />
先生。まったく意味がわかりません。構文自体が謎…。ここら辺はちょっと構文調べてこよう。とりあえずまた次回。</p>
<img src="http://zaru.tofu-kun.org/?ak_action=api_record_view&id=143&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://zaru.tofu-kun.org/2010/02/16/ruby-%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0%e7%b7%b4%e7%bf%92%e5%95%8f%e9%a1%8c3%e3%80%8c%e7%b4%a0%e6%95%b0%e5%88%a4%e5%ae%9a%e3%80%8d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://zaru.tofu-kun.org/2010/02/16/ruby-%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0%e7%b7%b4%e7%bf%92%e5%95%8f%e9%a1%8c3%e3%80%8c%e7%b4%a0%e6%95%b0%e5%88%a4%e5%ae%9a%e3%80%8d/" />
	</item>
		<item>
		<title>Ruby プログラミング練習問題2「FizzBuzz問題」</title>
		<link>http://zaru.tofu-kun.org/2010/02/03/ruby-%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0%e7%b7%b4%e7%bf%92%e5%95%8f%e9%a1%8c2%e3%80%8cfizzbuzz%e5%95%8f%e9%a1%8c%e3%80%8d/</link>
		<comments>http://zaru.tofu-kun.org/2010/02/03/ruby-%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0%e7%b7%b4%e7%bf%92%e5%95%8f%e9%a1%8c2%e3%80%8cfizzbuzz%e5%95%8f%e9%a1%8c%e3%80%8d/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 08:17:20 +0000</pubDate>
		<dc:creator>zaru</dc:creator>
				<category><![CDATA[プログラミング_Ruby]]></category>

		<guid isPermaLink="false">http://zaru.tofu-kun.org/?p=105</guid>
		<description><![CDATA[第2回目のRubyプログラミング練習問題。今回は有名な「FizzBuzz問題」。 FizzBuzz 練習問題 &#8211; プログラミングスレまとめ in VIP プログラミング練習問題2「FizzBuzz」 ルールは以下の通り 1から順番に数を表示する その数が3で割り切れるなら&#8221;Fizz&#8221;、5で割り切れるなら&#8221;Buzz&#8221;、両方で割り切れるなら&#8221;FizzBuzz&#8221;と表示する 要するに&#8221;1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz ･･･&#8221;と出力される 回答 #!/usr/bin/ruby 1.upto(100) do &#124;i&#124; if i % 3 == 0 &#38;&#38; i % 5 == 0 puts 'FizzBuzz ' elsif i % 3 == 0 puts 'Fizz ' elsif i % 5 [...]]]></description>
			<content:encoded><![CDATA[<p>第2回目のRubyプログラミング練習問題。今回は有名な「FizzBuzz問題」。</p>
<ul>
<li><a href="http://vipprog.net/wiki/exercise.html#t52e5a48">FizzBuzz 練習問題 &#8211; プログラミングスレまとめ in VIP</a></li>
</ul>
<blockquote>
<h3>プログラミング練習問題2「FizzBuzz」</h3>
<p>ルールは以下の通り<br />
1から順番に数を表示する<br />
その数が3で割り切れるなら&#8221;Fizz&#8221;、5で割り切れるなら&#8221;Buzz&#8221;、両方で割り切れるなら&#8221;FizzBuzz&#8221;と表示する<br />
要するに&#8221;1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz ･･･&#8221;と出力される</p></blockquote>
<h3>回答</h3>
<pre class="brush: ruby; title: ;">
#!/usr/bin/ruby

1.upto(100) do |i|
    if  i % 3 == 0 &amp;&amp; i % 5 == 0
        puts 'FizzBuzz '
    elsif i % 3 == 0
        puts 'Fizz '
    elsif i % 5 == 0
        puts 'Buzz '
    else
        puts i.to_s + &quot; &quot;
    end
end
</pre>
<p><code>実行結果<br />
$./2_1.rb<br />
1<br />
2<br />
Fizz<br />
4<br />
Buzz<br />
Fizz<br />
7<br />
8<br />
Fizz<br />
Buzz<br />
11<br />
Fizz<br />
13<br />
14<br />
FizzBuzz<br />
16<br />
...<br />
</code></p>
<p>Ruby初心者な僕はこんな単純な条件分岐…。うーん。もっとスマートにできるはず。</p>
<h3>解答例</h3>
<pre class="brush: ruby; title: ;">
#!/usr/bin/ruby

def fizz_buzz(n)
  ret = &quot;#{[&quot;Fizz&quot;][n % 3]}#{[&quot;Buzz&quot;][n % 5]}&quot;
  ret.empty? ? n.to_s : ret
end

puts (1..100).collect{|n| fizz_buzz n }
</pre>
<p>上記ページに載っている解答例はこんな感じ。</p>
<pre class="brush: ruby; title: ;">ret = &quot;#{[&quot;Fizz&quot;][n % 3]}#{[&quot;Buzz&quot;][n % 5]}&quot;</pre>
<p>これなんだよ！って、調べてみたら配列の省略形？っぽいもの。つまり、これを書きなおすと</p>
<pre class="brush: ruby; title: ;">a = [&quot;Fizz&quot;]
b = [&quot;Buzz&quot;]
ret = &quot;#{a[n % 3]}#{b[n % 5]}&quot;</pre>
<p>ってこと。<br />
Rubyってこういう記述が普通というか一般的なのかな？教えてエロい人！</p>
<img src="http://zaru.tofu-kun.org/?ak_action=api_record_view&id=105&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://zaru.tofu-kun.org/2010/02/03/ruby-%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0%e7%b7%b4%e7%bf%92%e5%95%8f%e9%a1%8c2%e3%80%8cfizzbuzz%e5%95%8f%e9%a1%8c%e3%80%8d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://zaru.tofu-kun.org/2010/02/03/ruby-%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0%e7%b7%b4%e7%bf%92%e5%95%8f%e9%a1%8c2%e3%80%8cfizzbuzz%e5%95%8f%e9%a1%8c%e3%80%8d/" />
	</item>
		<item>
		<title>Ruby プログラミング練習問題1「ループ練習」</title>
		<link>http://zaru.tofu-kun.org/2010/01/27/ruby-%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0%e7%b7%b4%e7%bf%92%e5%95%8f%e9%a1%8c1%e3%80%8c%e3%83%ab%e3%83%bc%e3%83%97%e7%b7%b4%e7%bf%92%e3%80%8d/</link>
		<comments>http://zaru.tofu-kun.org/2010/01/27/ruby-%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0%e7%b7%b4%e7%bf%92%e5%95%8f%e9%a1%8c1%e3%80%8c%e3%83%ab%e3%83%bc%e3%83%97%e7%b7%b4%e7%bf%92%e3%80%8d/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 02:46:16 +0000</pubDate>
		<dc:creator>zaru</dc:creator>
				<category><![CDATA[プログラミング_Ruby]]></category>

		<guid isPermaLink="false">http://zaru.tofu-kun.org/?p=100</guid>
		<description><![CDATA[というわけで、Rubyを使ってプログラミング練習問題をこなしていきたいと思う。練習問題は、検索してたら出てきたこれを使う。不慣れなRubyなので色々と調べて試行錯誤しながらやっていこう。 練習問題 &#8211; プログラミングスレまとめ in VIP プログラミング練習問題1「ループ練習」 Hello World![改行]を5回表示させてください。 print(或いはprintf,cout等)を5回コピーすれば当然可能ですが、 ループ構文(for,while等)を利用して、print等は1回の使用にとどめてみてください。 可能ならコマンドラインから入力を受け取って、n回表示するように改造してください。 何回目のHello World!かも表示してみてください。 回答1 #!/usr/bin/ruby 5.times do puts &#34;Hello World!\n&#34; end #!/usr/bin/ruby for i in 1..5 puts &#34;Hello World!\n&#34; end 実行結果 $./1.rb Hello World! Hello World! Hello World! Hello World! Hello World! for文とかは、あまり使わないだろうけど。一応イテレータで。 回答2 #!/usr/bin/ruby max = ARGV[0] 1.upto(max.to_i) do &#124;i&#124; puts &#34;Hello World! [...]]]></description>
			<content:encoded><![CDATA[<p>というわけで、Rubyを使ってプログラミング練習問題をこなしていきたいと思う。練習問題は、検索してたら出てきたこれを使う。不慣れなRubyなので色々と調べて試行錯誤しながらやっていこう。</p>
<ul>
<li><a href="http://vipprog.net/wiki/exercise.html">練習問題 &#8211; プログラミングスレまとめ in VIP</a></li>
</ul>
<blockquote>
<h3>プログラミング練習問題1「ループ練習」</h3>
<p>Hello World![改行]を5回表示させてください。</p>
<p>print(或いはprintf,cout等)を5回コピーすれば当然可能ですが、<br />
ループ構文(for,while等)を利用して、print等は1回の使用にとどめてみてください。</p>
<p>可能ならコマンドラインから入力を受け取って、n回表示するように改造してください。<br />
何回目のHello World!かも表示してみてください。</p></blockquote>
<h3>回答1</h3>
<pre class="brush: ruby; title: ;">
#!/usr/bin/ruby
5.times do
    puts &quot;Hello World!\n&quot;
end
</pre>
<pre class="brush: ruby; title: ;">
#!/usr/bin/ruby
for i in 1..5
    puts &quot;Hello World!\n&quot;
end
</pre>
<p><code>実行結果<br />
$./1.rb<br />
Hello World!<br />
Hello World!<br />
Hello World!<br />
Hello World!<br />
Hello World!</code></p>
<p>for文とかは、あまり使わないだろうけど。一応イテレータで。</p>
<h3>回答2</h3>
<pre class="brush: ruby; title: ;">
#!/usr/bin/ruby
max = ARGV[0]
1.upto(max.to_i) do |i|
        puts &quot;Hello World! &quot; + i.to_s + &quot;\n&quot;
end
</pre>
<pre class="brush: ruby; title: ;">
#!/usr/bin/ruby
max = ARGV[0]
i=1
while i&lt;=max.to_i
    puts &quot;Hello World! &quot; + i.to_s + &quot;\n&quot;
    i = i + 1
end
</pre>
<p><code>実行結果<br />
$./1.rb 10<br />
Hello World! 1<br />
Hello World! 2<br />
Hello World! 3<br />
Hello World! 4<br />
Hello World! 5<br />
Hello World! 6<br />
Hello World! 7<br />
Hello World! 8<br />
Hello World! 9<br />
Hello World! 10</code></p>
<p>コマンドラインからの引数は、「ARGV」に格納される。受け取ると、文字列になってしまうので「to_i」を使って数値に。</p>
<p>とりあえず最初はこんなものかな。</p>
<img src="http://zaru.tofu-kun.org/?ak_action=api_record_view&id=100&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://zaru.tofu-kun.org/2010/01/27/ruby-%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0%e7%b7%b4%e7%bf%92%e5%95%8f%e9%a1%8c1%e3%80%8c%e3%83%ab%e3%83%bc%e3%83%97%e7%b7%b4%e7%bf%92%e3%80%8d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://zaru.tofu-kun.org/2010/01/27/ruby-%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0%e7%b7%b4%e7%bf%92%e5%95%8f%e9%a1%8c1%e3%80%8c%e3%83%ab%e3%83%bc%e3%83%97%e7%b7%b4%e7%bf%92%e3%80%8d/" />
	</item>
	</channel>
</rss>
