Skip to content

Instantly share code, notes, and snippets.

View kimyoutora's full-sized avatar

Kang Chen kimyoutora

  • Twitter, formerly Posterous
  • San Francisco, CA, USA
View GitHub Profile
>> Version
=> "0.8.2"
>> MongoMapper::Version
=> "0.8.2"
require 'chronic_duration'
ps0=Post.all(:conditions => ["? <= created_at and created_at <= ? ", Time.parse("06/29/2010"), Time.parse("07/05/2010")], :include => :replies)
ps1=Post.all(:conditions => ["? <= created_at and created_at <= ? ", Time.parse("07/06/2010"), Time.parse("07/12/2010")], :include => :replies)
ps2=Post.all(:conditions => ["? <= created_at and created_at <= ? ", Time.parse("07/13/2010"), Time.parse("07/19/2010")], :include => :replies)
ps3=Post.all(:conditions => ["? <= created_at and created_at <= ? ", Time.parse("07/20/2010"), Time.parse("07/26/2010")], :include => :replies)
@kimyoutora
kimyoutora / fisher_yates_shuffle.rb
Created February 7, 2012 00:51
Shuffle cards in place
# randomly shuffle cards in-place
# Fisher-Yates Shuffle
# Use the back of the array for storing the
# randomly picked card and move your way to the front
class Array
def shuffle
length = self.size
array = self.dup
(length - 1).step(0, -1).each do |i|
@kimyoutora
kimyoutora / median_with_quickselect.rb
Created February 7, 2012 07:22
Median using Quickselect in O(N)
# Partition-based selection algorithm to find the
# median of an array in O(N) time
# Note that this is very similar to quicksort but since
# we know which partition our element lies in, we are reducing
# the problem space by 1/2 at every step on average and thus,
# N + 1/2 x N + 1/4 x N + 1/8 x N + ...
# This sequence leads to N x (sum of series from 1...1/inf) =
# N x (1 + 1) = 2N = O(N) running time
class Array
def median
@kimyoutora
kimyoutora / square_root.rb
Created February 9, 2012 10:05
Square root
def sqrt(num, precision, beg=0, final=num)
final = 1 if num < 1 # handle cases where the squareroot is > num i.e. sqrt(0.1) ~ 0.3
begin
guess = (beg + final) / 2.0
diff = num - (guess ** 2)
if diff.abs <= precision
return guess
elsif diff > 0
@kimyoutora
kimyoutora / occurrences_in_sorted_array.rb
Created February 9, 2012 22:23
Count occurrences in sorted array
def occurrences(sorted_array)
puts "occurrences: #{sorted_array.inspect}"
count = 0
sorted_array.each_with_index do |num, index|
if index + 1 >= sorted_array.size || num != sorted_array[index+1]
puts "#{num}: #{count+1}"
count = 0
else
count += 1
@kimyoutora
kimyoutora / fibonacci.rb
Created February 9, 2012 23:47
Fibonacci with Dynamic Programming
def fib(n)
cache = {}
n.times do |i|
if i == 0
cache[0] = 0
elsif i == 1
cache[1] = 1
else
cache[i] = cache[i-1] + cache[i-2]
@kimyoutora
kimyoutora / say_number_str.rb
Created February 11, 2012 00:45
Say a number string in English
THOUSANDS = ['', 'thousand', 'million', 'billion']
NUMS = {
"0" => '',
"1" => 'one',
"2" => 'two',
"3" => 'three',
"4" => 'four',
"5" => 'five',
"6" => 'six',
"7" => 'seven',
@kimyoutora
kimyoutora / powerset.rb
Created February 14, 2012 19:32
Powerset
# my attempt
def powerset(set)
all_sets = [[]]
set.each do |elem|
subsets = []
all_sets.each do |subset|
subsets << subset + [elem]
end
all_sets += subsets
end
@kimyoutora
kimyoutora / matching_bitmask_nodes.rb
Created February 15, 2012 01:27
Matching Bitmask Nodes in Tree
class BitMaskNode
attr_accessor :children, :name
attr_reader :mask
def initialize(name, bitmask)
@name = name
@mask = bitmask
@children = []
end