public
Created

Ruby Golf

  • Download Gist
rubygolf.rb
Ruby
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
# 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")

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.

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

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.