Skip to content

Instantly share code, notes, and snippets.

View antimon2's full-sized avatar

GOTOH Shunsuke antimon2

View GitHub Profile
@antimon2
antimon2 / prime_twins.rb
Created June 6, 2012 10:42
Prime#twins
require 'prime'
class Prime
def twins n = nil
return to_enum :twins, n unless block_given?
each(n).each_cons(2) do |p1, p2|
yield [p1, p2] if p2 - p1 == 2
end
end
end
@antimon2
antimon2 / prime_cosins.rb
Created June 6, 2012 10:45
Prime#cosins
require 'prime'
class Prime
def cosins n = nil
return to_enum :cosins, n unless block_given?
yield [3, 7]
each(n).each_cons(2) do |p1, p2|
yield [p1, p2] if p2 - p1 == 4
end
end
end
@antimon2
antimon2 / prime.a2.rb
Created June 18, 2012 13:50
Prime::A2Generator < Prime::PseudoPrimeGenerator
# original: http://log.ttsky.net/article/19515687.html
require 'prime'
class Prime
# An implementation of +Prime::PseudoPrimeGenerator+.
class A2Generator < PseudoPrimeGenerator
def initialize
@h = {}
@n = nil
@antimon2
antimon2 / prime.a2e.rb
Created June 19, 2012 12:31
Prime::A2EGenerator < Prime::PseudoPrimeGenerator
# original: Prime::EratosthenesGenerator and Prime::EratosthenesSieve
require 'prime'
require 'singleton'
class Prime
# An implementation of +Prime::PseudoPrimeGenerator+.
#
# Uses +A2ESieve+.
class A2EGenerator < PseudoPrimeGenerator
@antimon2
antimon2 / morphological.rb
Created August 13, 2012 07:02
naivebayes.rb (translated from naivebayes.py)
# -*- coding: utf-8 -*-
# morphological.rb
# original: morphological.py (http://gihyo.jp/dev/serial/01/machine-learning/0003)
require 'MeCab'
module Morphological
def split sentence
mecab = MeCab::Tagger.new
node = mecab.parseToNode sentence
@antimon2
antimon2 / project_euler_45.rb
Created September 5, 2012 03:33
Project Euler 45
def sq? n
# ↓32bit整数の範囲ならとりあえずこれでOK
Math.sqrt(n).round**2 == n
end
def project_euler_45 n=143
loop do
n += 1
h = n * (2 * n - 1)
next unless sq?(8 * h + 1)
@antimon2
antimon2 / project_euler_46.rb
Created September 6, 2012 11:47
Project Euler 46
require 'prime'
def project_euler_46
Prime.each_cons(2) do |p1, p2|
(p1 + 2).step(p2 - 2, 2) do |n|
return n unless (1..Math.sqrt((n-3)/2)).find{|m|(q = n - 2*m*m).prime?}
end
end
end
@antimon2
antimon2 / project_euler_47.rb
Created September 7, 2012 09:12
Project Euler 47
require 'prime'
def project_euler_47 n=4
return if n < 2
Prime.each_cons(2) do |p1, p2|
nums = ((p1+1)...p2).select{|m|m.prime_division.size==n}
idx = 0.upto(nums.size-n).find{|i|nums[i+n-1]==nums[i]+n-1}
return nums[idx] if idx
end
end
@antimon2
antimon2 / project_euler_68.rb
Created September 28, 2012 12:41
Project Euler 68
def project_euler_68
res = 0
arr = (1..9).to_a
arr.combination(5) do |(*inner)|
s = inner.inject(&:+)
next unless s % 5 == 0
t = s.div(5) + 11
outer = (arr - inner) << 10
o_min = outer.min
inner.combination(2) do |a, b|
@antimon2
antimon2 / project_euler_69.rb
Created September 29, 2012 03:39
Project Euler 69
require 'prime'
class Integer
def phi
self.prime_division.inject(1){|m,(p,k)|m*=p**k-p**(k-1)}
end
def phi_ratio
self.to_f / self.phi
end
end