2016-11-04 15:17:44

master
alansnape 9 years ago
commit b8e75add4e

@ -0,0 +1,28 @@
# By alan snape
# All rights reserved.
class Class
def attr_accessor_with_history(attr_name)
attr_name = attr_name.to_s # make sure it's a string
attr_reader attr_name # create the attribute's getter
attr_reader attr_name+"_history" # create bar_history getter
class_eval %Q|
@#{attr_name} = nil
@#{attr_name}_history = nil
def #{attr_name}
@#{attr_name}
end
def #{attr_name}=(value)
if @#{attr_name} then
@#{attr_name}_history.push(@#{attr_name})
else
@#{attr_name}_history = [@#{attr_name}]
end
@#{attr_name} = value
end
def #{attr_name}_history
@#{attr_name}_history
end
|
end
end

@ -0,0 +1,30 @@
# By alan snape
# All rights reserved.
class Dessert
attr_accessor :name, :calories
def initialize(name, calories)
self.name = name
self.calories = calories
end
def healthy?
return self.calories < 200
end
def delicious?
return true
end
end
class JellyBean < Dessert
attr_accessor :flavor
def initialize(flavor)
self.flavor = flavor
self.calories = 5
end
def name
return self.flavor + ' jelly bean'
end
def delicious?
return 'licorice' != self.flavor
end
end

@ -0,0 +1,31 @@
# By alan snape
# All rights reserved.
module FunWithStrings
def palindrome?
str = self.downcase.gsub(/(\W|\d)/, '')
return str == str.reverse
end
def count_words
w = {}
self.downcase.split(/\W+/).each do |i|
w.has_key?(i) ? w[i] += 1 : w[i] = 1
end
w.delete("")
return w
end
def anagram_groups
w = {}
self.split.each do |s|
i = s.downcase.chars.sort.join
w.has_key?(i) ? w[i].push(s) : w[i] = [s]
end
return w.values
end
end
# make all the above functions available as instance methods on Strings:
class String
include FunWithStrings
end

@ -0,0 +1,49 @@
# By alan snape
# All rights reserved.
class RockPaperScissors
# Exceptions this class can raise:
class NoSuchStrategyError < StandardError; end
# check strategy is legal or not
def self.checkStrategy(stg)
if 'P' != stg && 'R' != stg && 'S' != stg then
raise NoSuchStrategyError, 'Strategy must be one of R,P,S'
end
end
# a single round game
def self.winner(player1, player2)
stg1, stg2 = player1[1], player2[1]
self.checkStrategy(stg1)
self.checkStrategy(stg2)
if stg1 == stg2 then
return player1
elsif 'P' == stg1 && 'S' == stg2 then
return player2
elsif 'S' == stg1 && 'P' == stg2 then
return player1
else
return stg1 < stg2 ? player1 : player2
end
end
# if there is a sub game then returns the winner of it
# else return this player himself
def self.tournament_match(game)
if game[0].kind_of?(Array) then
return self.tournament_winner(game)
else
return game
end
end
# tournament game rounds
def self.tournament_winner(tournament)
player1 = self.tournament_match(tournament[0])
player2 = self.tournament_match(tournament[1])
return self.winner(player1, player2)
end
end
Loading…
Cancel
Save