DEV Community

decentralizuj
decentralizuj

Posted on

Check your Ruby Developer Level with simple task

I just found an old post from @evanilukhin showing interview task - Simple word calculator. I was reading it on my mobile, so first I read his post, and decided to not look at the answer code (anyway it's impossible to understand on small android display).

Task is next: make this code work:

one.plus.two.equal # => 3 one.minus.three.equal # => -2 
Enter fullscreen mode Exit fullscreen mode

While you're on interview, it can be harder than it should be. Few minutes later electricity came back (some works during this morning... awful), so I decided to try to solve it (in his post I read it's good for every developer to check his skills... and it's true). You have a link to his post if you want to read it and see his results (probably better than mine, but hey, 10 minutes on android 5, and it works... :P).

So what do you think, are you able to make this code work without reading the rest? Here's my solution (first one, fast one):

My Answer
 class One def initialize @num = 1 end def plus @opt = :add return self end def minus @opt = :rmw return self end def two case @opt when :add then @num += 2 when :rmw then @num -= 2 end return self end def three case @opt when :add then @num += 3 when :rmw then @num -= 3 end return self end def equal num = @num @num = 1 return num end end one = One.new one.plus.two.equal => 3 one.minus.three.equal => -2 
Enter fullscreen mode Exit fullscreen mode

and about 10 minutes later I decided to make this more DRY, and to allow it to use 'one' chained more times (like original article code work)

 class One def initialize @num = 1 end def one use_number 1 end def two use_number 2 end def three use_number 3 end def plus; set_opt(:add) end def minus; set_opt(:rmw) end def equal num = @num and @num = 1 return num end private def set_opt(opt) @opt = opt; return self end def use_number(number) case @opt when :add then @num += number.to_i when :rmw then @num -= number.to_i else @num end @opt = nil return self end end one = One.new one.plus.two.equal # => 3 one.plus.two.minus.three.plus.one.equal => 1 
Enter fullscreen mode Exit fullscreen mode

Top comments (0)