Skip to content

@amadanmath /rubygolf.rb
Created

Embed URL

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Ruby Golf
# Written against Ruby 1.9.2
# Hole #1: FizzBuzz
# I accidentally saw Cyrus's solution before trying my own, so no attempt
# Hole #2: Caesar Cipher
# Works only for `[a-zA-Z]*`
def caesar(f,x)
f.each_char.map{|c|t=c.ord+x;(t-1)&31>25&&t+=x<0?26:-26;t.chr}*''
end
# Hole #3: String Counter
def count(f,s)
f.scan(/#{Regexp.quote(s)}/i).size
end
# Hole #4: Rock-Paper-Scissors
# Anyone know why I can't remove the space before the first `?`?
def play(f)
m=%w(Rock Paper Scissors);c,h=rand(3),m.index(f);m[c]+','+(h==c ?'Draw':(!h||h!=(c+1)%3?'Lose':'Win'))
end
# Hole #5: Swingers
# For a trivial (non-random) solution, remove `s.shuffle!;`
def swingers(s)
s.shuffle!;x,y=s.transpose;y<<y.shift;s.each{|t|t[1]=y.shift}
end
puts caesar("hello", 3)
puts caesar("khoor", -3)
puts caesar("abcxyz", 1)
puts caesar("abcxyz", -1)
puts count("banana", "a")
puts count("RubySource provides advice, tutorials, commentary, and insight into the Ruby and Rails ecosystem","ruby")
puts swingers([["Homer","Marge"],["Micky","Minnie"],["Fred","Wilma"],["Peter","Lois"],["George","Judy"]]).inspect
puts play("Rock")
puts play("Paper")
puts play("Scissors")
puts play("Soap")
@cookrn

I had trouble with the ternary operators as well re: your comment on L18. I believe the interpreter is looking for a variable/function called c? at that point since ?s are valid chars for those. Nice work! Mine are here.

@amadanmath
Owner

Oh, you're right! Welp, one mystery solved. Even nicer work - mine aren't as tight!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.