<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: Axsaxs's Code Snippets</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Fri, 08 Aug 2008 20:54:16 GMT</pubDate>
    <description>DZone Snippets: Axsaxs's Code Snippets</description>
    <item>
      <title>Eratostene Sieve in Ruby</title>
      <link>http://snippets.dzone.com/posts/show/4384</link>
      <description>A simple Eratostene Sieve implementation&lt;br /&gt;for the computing of prime numbers&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#!/usr/bin/env ruby&lt;br /&gt;&lt;br /&gt;#&lt;br /&gt;# Compute prime numbers&lt;br /&gt;# with the good old Eratostene Sieve method&lt;br /&gt;# Author: Alessio Saltarin&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# Eratostene Sieve computer class&lt;br /&gt;class Sieve&lt;br /&gt;    # Constructor&lt;br /&gt;    # maxprime: max upper limit&lt;br /&gt;    def initialize(maxprime)&lt;br /&gt;            puts "Initializing sieve."&lt;br /&gt;            @max = maxprime&lt;br /&gt;            @sieve = Array.new&lt;br /&gt;            @sieve[0] = 0&lt;br /&gt;            @sieve[1] = 0&lt;br /&gt;            for i in 2 ... @max&lt;br /&gt;                    @sieve[i] = 1&lt;br /&gt;            end&lt;br /&gt;    end&lt;br /&gt;    &lt;br /&gt;    # Return a list of prime numbers&lt;br /&gt;    def primes&lt;br /&gt;            printf("Computing primes to %d ...\n", @max)&lt;br /&gt;            crivello()&lt;br /&gt;            puts "Done."&lt;br /&gt;            retprimes = Array.new&lt;br /&gt;            for k in 0..@max&lt;br /&gt;                    if @sieve[k] == 1&lt;br /&gt;                            retprimes.push(k)&lt;br /&gt;                    end&lt;br /&gt;            end&lt;br /&gt;            return retprimes&lt;br /&gt;    end&lt;br /&gt;    &lt;br /&gt;    # Sieve (Crivello) algorithm&lt;br /&gt;    def crivello&lt;br /&gt;            currprime = nextprime(0)&lt;br /&gt;            while (currprime * currprime &lt; @max)&lt;br /&gt;                    i = currprime * currprime&lt;br /&gt;                    while (i &lt; @max)&lt;br /&gt;                            @sieve[i] = 0&lt;br /&gt;                            i += currprime&lt;br /&gt;                    end&lt;br /&gt;                    currprime = nextprime(currprime)&lt;br /&gt;            end&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    # Return next prime&lt;br /&gt;    # lastprime: the last computer prime number&lt;br /&gt;    def nextprime(lastprime)&lt;br /&gt;        &lt;br /&gt;            for i in lastprime+1...@max&lt;br /&gt;                    return i if @sieve[i] == 1&lt;br /&gt;            end&lt;br /&gt;    end&lt;br /&gt;	&lt;br /&gt;	&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;# Print a list of prime numbers&lt;br /&gt;def printPrimes(primes)&lt;br /&gt;    primes.each { |nr| printf("Prime: %d\n", nr) }&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;# Print the sum of prime numbers&lt;br /&gt;def printSumPrimes(primes)&lt;br /&gt;    sum = 0&lt;br /&gt;    puts("Computing...")&lt;br /&gt;    primes.each { |nr|  sum += nr }&lt;br /&gt;    puts("Done.")&lt;br /&gt;    printf("Prime Sum: %d\n", sum)&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;# Main&lt;br /&gt;crivello = Sieve.new(1000000) # Compute primes for the first 1000000 natural numbers&lt;br /&gt;printSumPrimes(crivello.primes)&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Thu, 02 Aug 2007 15:22:12 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4384</guid>
      <author>axsaxs (Alessio Saltarin)</author>
    </item>
    <item>
      <title>MD5 and SHA1 in Ruby</title>
      <link>http://snippets.dzone.com/posts/show/3349</link>
      <description>// A Simple MD5/SHA1 calculator in Ruby&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#!/usr/bin/ruby1.8 -w&lt;br /&gt;&lt;br /&gt;#&lt;br /&gt;# A Simple Hash Code Calculator&lt;br /&gt;# Returns SHA1 and MD5 hash for any given file&lt;br /&gt;# Author: Alessio Saltarin&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;require 'digest/md5'&lt;br /&gt;require 'digest/sha1'&lt;br /&gt;&lt;br /&gt;$BUFLEN = 1024&lt;br /&gt;&lt;br /&gt;class Hasher&lt;br /&gt;	# Constructor&lt;br /&gt;	# method = "SHA1" or "MD5"&lt;br /&gt;	# filepath = Full filepath&lt;br /&gt;	def initialize(method, filepath)&lt;br /&gt;		if (method.upcase == "-SHA1")&lt;br /&gt;			@hashfunc = Digest::SHA1.new&lt;br /&gt;			@hashname = "SHA1"&lt;br /&gt;		else&lt;br /&gt;			@hashfunc = Digest::MD5.new&lt;br /&gt;			@hashname = "MD5"&lt;br /&gt;		end&lt;br /&gt;		@fullfilename = filepath&lt;br /&gt;	end&lt;br /&gt;&lt;br /&gt;	def hashname&lt;br /&gt;		@hashname&lt;br /&gt;	end&lt;br /&gt;&lt;br /&gt;	# Compute hash code&lt;br /&gt;	def hashsum&lt;br /&gt;		open(@fullfilename, "r") do |io|&lt;br /&gt;			puts "Reading "+@fullfilename&lt;br /&gt;			counter = 0&lt;br /&gt;			while (!io.eof)&lt;br /&gt;				readBuf = io.readpartial($BUFLEN)&lt;br /&gt;				putc '.' if ((counter+=1) % 3 == 0)&lt;br /&gt;				@hashfunc.update(readBuf)&lt;br /&gt;			end&lt;br /&gt;		end&lt;br /&gt;		return @hashfunc.hexdigest&lt;br /&gt;	end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def usage&lt;br /&gt;	puts "Usage: Hasher.rb [-SHA1|-MD5] filename"&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def printresult(filename, method, sum)&lt;br /&gt;	puts "\n" + filename + " ==&gt; "+ method + ": " + sum	&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;#Program starts&lt;br /&gt;if (ARGV.length == 2)&lt;br /&gt;	hashcomp = Hasher.new(ARGV[0], ARGV[1])&lt;br /&gt;	printresult(ARGV[1], hashcomp.hashname, hashcomp.hashsum)&lt;br /&gt;	&lt;br /&gt;elsif (ARGV.length == 1)&lt;br /&gt;	hashcomp = Hasher.new("-MD5", ARGV[0])&lt;br /&gt;	printresult(ARGV[0], hashcomp.hashname, hashcomp.hashsum)&lt;br /&gt;else&lt;br /&gt;	usage&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Tue, 23 Jan 2007 20:53:03 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3349</guid>
      <author>axsaxs (Alessio Saltarin)</author>
    </item>
  </channel>
</rss>
