Skip to content

Instantly share code, notes, and snippets.

class SumOfMultiples
attr_reader :multiples_of
def self.to(max)
SumOfMultiples.new(3, 5).to(max)
end
def initialize(*multiples_of)
@multiples_of = multiples_of
end
@mkweick
mkweick / trinary.rb
Last active March 12, 2016 12:31
Trinary
class Trinary
def initialize(num)
num = '0' unless num =~ /^[012]+$/
@num = num.reverse.chars.collect(&:to_i)
end
def to_decimal
@num.map.with_index { |num, idx| num * (3 ** idx) }.inject(:+)
end
end
@mkweick
mkweick / clock.rb
Created February 27, 2016 15:53
Clock
class Clock
def self.at(hour, min = 0)
ClockTime.new(hour, min)
end
end
class ClockTime
attr_accessor :time
def initialize(hour, min)
@mkweick
mkweick / grade_school.rb
Last active February 20, 2016 15:39
Grade School
class School
def initialize
@school = Hash.new { |school, grade| school[grade] = [] }
end
def to_h
@school.sort.map { |grade, students| [grade, students.sort] }.to_h
end
@mkweick
mkweick / phone_number.rb
Last active February 20, 2016 18:41
Phone Number
class PhoneNumber
attr_reader :number
def initialize(number)
@number = authenticate(number)
end
def to_s
"(#{area_code}) #{number[3..5]}-#{number[6..9]}"
end
@mkweick
mkweick / circular_buffer.rb
Last active January 23, 2016 16:26
Circular Buffer
class CircularBuffer
class BufferEmptyException < StandardError; end
class BufferFullException < StandardError; end
attr_reader :buffer, :buffer_size
attr_accessor :read_id, :write_id
def initialize(buffer_size)
@buffer = []
@buffer_size = buffer_size
@mkweick
mkweick / simulator.rb
Last active January 19, 2016 02:51
Robot Simulator
class Robot
attr_accessor :bearing, :coordinates
def orient(direction)
if [:north, :east, :south, :west].include? direction
self.bearing = direction
else
raise ArgumentError, "Invalid direction"
end
end
@mkweick
mkweick / queen_attack.rb
Last active January 19, 2016 02:51
Queen Attack
class Queens
attr_reader :white, :black
def initialize(queens = { white: [0, 3], black: [7, 3] })
fail ArgumentError if queens[:white] == queens[:black]
@white = queens[:white]
@black = queens[:black]
end
def to_s
class Squares
attr_reader :max
def initialize(max)
@max = max
end
def square_of_sums
(1..max).inject(:+) ** 2
end
class PigLatin
def self.translate(phrase)
pig = PigLatin.new(phrase).convert
end
attr_reader :words
def initialize(phrase)
@words = phrase.split
end