Skip to content

Instantly share code, notes, and snippets.

View broguinn's full-sized avatar

Braden O'Guinn broguinn

View GitHub Profile
@broguinn
broguinn / calculator.rb
Created August 29, 2013 00:53
wordly_calculator
class Calculator
def phrase_cleaner(phrase)
operands = phrase.match(/([0-9,-]+.*[\w])/)[0]
end
def number_getter(phrase)
numbers = phrase.scan(/[0-9,-]+/)
numbers.map { |number| number.to_i }
end
@broguinn
broguinn / largest_series_product.rb
Created August 29, 2013 00:54
largest_series_product
def largest_series_product(number, span_length=3)
if number.match(/\D/)
raise ArgumentError.new("Numbers only")
elsif number.length < span_length
raise ArgumentError.new("The number must have at least #{span_length} digits")
end
product_finder(series_splitter(number, span_length)).max
end
def series_splitter(number, span_length)
@broguinn
broguinn / binary.rb
Created August 29, 2013 00:55
binary
def binary(binary_string)
if !(binary_string.is_a?(String)) || binary_string.match(/[^0,1]/)
raise TypeError.new("Input must be only 0s and 1s")
end
total = 0
binary_string.reverse.split("").each_with_index do |bit, index|
total += bit.to_i * 2 ** index
end
total
@broguinn
broguinn / sieve.rb
Created August 29, 2013 00:56
sieve
def sieve(number)
if number < 2
raise TypeError.new("Must be a number greater than 2")
end
primes =* (2..number)
primes.each do |prime|
primes.reject! do |number|
prime != number && number % prime == 0
end
end
@broguinn
broguinn / prime_factors.rb
Created August 29, 2013 00:58
prime_factors
require 'sieve'
def prime_factors_parent(number)
primes = prime_sift(number)
prime_factors(number, primes)
end
def prime_factors(number, primes, factors=[])
if primes.include?(number)
factors << number
@broguinn
broguinn / anagrams.rb
Created August 29, 2013 00:58
anagrams
def anagrams(word, possible_anagrams)
unless possible_anagrams.is_a?(Array) || possible_anagrams.all? { |anagram| anagram.is_a?(String) }
raise TypeError.new("The possible anagrams must be an array")
end
possible_anagrams.find_all do |anagram|
word.chars.sort == anagram.chars.sort
end
end
@broguinn
broguinn / roman_numerals
Created August 30, 2013 00:53
roman_numerals
def roman_numerals(number)
if number < 0 || number > 3000
raise TypeError.new 'Must be any number from 0 to 3000'
end
ones = {0 => '', 1 => 'I', 2 => 'II', 3 => 'III', 4 => 'IV', 5 => 'V', 6 => 'VI', 7 => 'VII', 8 => 'VIII', 9 => 'IX'}
tens = {0 => '', 1 => 'X', 2 => 'XX', 3 => 'XXX', 4 => 'XL', 5 => 'L', 6 => 'LX', 7 => 'LXX', 8 => 'LXXX', 9 => 'XC'}
hundreds = {0 => '', 1 => 'C', 2 => 'CC', 3 => 'CCC', 4 => 'CD', 5 => 'D', 6 => 'DC', 7 => 'DCC', 8 => 'DCCC', 9 => 'CM'}
thousands = {0 => '', 1 => 'M', 2=> 'MM', 3 => 'MMM'}
@broguinn
broguinn / etl
Created August 30, 2013 00:54
etl
def etl(old_data)
new_data = {}
old_data.each_key do |key|
old_data[key].each do |letter|
new_data[letter.downcase] = key
end
end
new_data
end
@broguinn
broguinn / difference_sum_squares.rb
Created August 30, 2013 00:55
difference_sum_squares
def difference_sum_square(number)
sum_squared = 0
number.times do |num|
sum_squared += num + 1
end
sum_squared = sum_squared ** 2
square_sums = 0
number.times do |num|
square_sums += (num + 1) ** 2
@broguinn
broguinn / palindrome.rb
Created August 30, 2013 00:55
palindrome
def palindrome(first_number, second_number=first_number)
if first_number > second_number
raise ArgumentError.new 'First number cannot be greater than second number'
end
palindromes = []
(first_number..second_number).each do |number|
(first_number..second_number).each do |number2|