Skip to content

Instantly share code, notes, and snippets.

@elreimundo
elreimundo / fibonaccicheck.rb
Last active December 20, 2015 01:08
Determines if a number is a Fibonacci number by a) determining element in the Fibonacci sequence it would be, based on its size, and b) comparing it to that actual element in the Fibonacci sequence. Couldn't have done this without a recursive formula courtesy of the late Edsgar Dijkstra, http://www.cs.utexas.edu/users/EWD/ewd06xx/EWD654.PDF foun…
def is_fibonacci?(num)
phi = (1 + 5.0**0.5)/2
which_fib = ((Math.log(num)+Math.log(5.0**0.5)) / Math.log(phi)).round
num == fibonacci(which_fib)
end
def fibonacci(n)
if n==0
0
@elreimundo
elreimundo / trianglenumdivisors.rb
Created July 20, 2013 21:22
I wrote this to solve another Project Euler problem (the number of divisors for a given triangular number). To find the number of divisors that a number has, the quickest way is to take the prime factorization of the number. Next, add one to each of the exponents of the prime factors, and find the product of these new exponents. There's your num…
whichtrinum = 1
while true
trinum = (whichtrinum * (whichtrinum + 1)) / 2
numtofactor = trinum
factors = []
factor = 2
while numtofactor != 1
if numtofactor % factor == 0
factors << factor
numtofactor = numtofactor / factor
@elreimundo
elreimundo / roman_to_integer.rb
Last active December 20, 2015 01:49
Here's code that will convert any (properly ordered) roman numeral to a number. It uses a hash, which is something I'm pretty excited about since I don't feel like I totally understand hashes.
def roman_to_integer string
string.upcase!
raise ArgumentError if /[MDCLXVI]*/.match(string).to_s != string
letter_values = {'M' => 1000,
'D' => 500,
'C' => 100,
'L' => 50,
'X' => 10,
'V' => 5,
'I' => 1}
TIGERS = {1 => 'Morgan, Kiera, John', 2 => 'Dave, Bruno, Max',
3 => 'David, Nick, Lionel', 4 => 'Elmer, Juke, Robert',
5 => 'Tom, Tyler, Gary', 6 => 'Sunny, Daniel, Nathan',
7 => 'Doug, Rao, Nishant'}
class Console
def initialize
@gophers = {}
puts "Welcome to GroupMatcher(tm)!"
puts "When you've finished all groups, type 'Match!'"
@elreimundo
elreimundo / hundred_pairs.rb
Last active January 1, 2016 06:39
A program to determine all pairs of integers in a given array of integers that add to 100. The algorithm is destructive on the original array. This particular algorithm runs in N lg N time and constant space if the sorting algorithm is efficient; after the sort, only one additional pass through the array is required.
def hundred_pairs(array, target = 100)
array.sort!
results = []
min, max = array.shift, array.pop
while min && max
while min + max > target
max = array.pop
end
while min && max && min + max < target
min = array.shift
// we're starting this function with an IIFE http://benalman.com/news/2010/11/immediately-invoked-function-expression/
// it's important to start this with a semicolon because otherwise any previously loaded JavaScript might try and invoke
// its last line using the anonymous function that we define here as its argument, and then invoke the resulting return value
// on line 63. That would be silly, yo. So we explicitly end the previous thought with a semicolon.
;(function () {
// CLOSURES
function captureWhatNumberIsRightNow (number) {
return function () {