Not a pretty solution, but it seems to work in Ruby
new_string = string.downcase
if new_string.include?("x") == false && new_string.include?("o") == false
elsif new_string.include?("x") == true && new_string.include?("o") == true
x_count = new_string.count("x")
o_count = new_string.count("o")
if x_count == o_count
gossip_girl("ooxx") => true
gossip_girl("xooxx") => false
gossip_girl("ooxXm") => true
gossip_girl("zpzpzpp") => true
gossip_girl("zzoo") => false
WAIT. Here's a much cleaner solution in Ruby.
string.downcase.count("x") == string.downcase.count("o")
This is why you refactor!
Very nice! I love your choice of method name 😂 And it's great that you went back to refactor once you realized there were optimizations you could make. No matter what "stakeholders" say about features driving revenue, any developer worth their salt knows that a clean codebase drives features. 👍👍🙌
Thanks. I can't think of X's and O's without Gossip Girl.
Clean codebases are so much easier to work with. Not to mention, cost and performance savings.
It turns out that you could avoid the #downcase with string.count("xX") == string.count("oO")
string.count("xX") == string.count("oO")
I don't know whether the performance would be significantly different, though it would avoid creating a couple of extra string instances.
There are some other interesting variations for #count, such as using it to count lower case letters with "abGvf".count("a-z")
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.