Intro

In our company we have a custom to have weekly challenges. Once a week, sometimes more frequent, sometimes more rare, we publish to slack channel the small ruby challenge. The reason of doing this is mostly to stretch the cerebral muscle and/or learn some new fancy ruby tricks.

Below are the top 10 challenges (on my own taste). Feel free to pick some to interview ruby developers.

Quizzz

What will be printed?

print ?A<<?A.to_i(16)

What would be the output executing this?

enum = (1..3).each
print enum.next
enum.each { |i| print i }
enum.next
loop { print enum.next }

What would be the result of the following code?

def m(o)
  o << '_O'
end
o = 'O';
"#{o} | #{m o} | #{m o} | #{o}"

What would be printed in both cases?

def foo1(**kw); puts kw; end
foo1(arg?: 42)

def foo2(arg?:, **kw); puts kw; end
foo2(arg?: 42)

What would be the difference between instance.is_a?(MyClass) and instance.class <= MyClass?


What would be the result?

def a1
  :normal
ensure
  :ensure
end

def a2
  return :normal
ensure
  return :ensure
end

def a3
  :normal
finally
  :finally
end

def a4
  return :normal
finally
  return :finally
end

[
  (a1 rescue :raised),
  (a2 rescue :raised),
  (a3 rescue :raised),
  (a4 rescue :raised)
]

Correct the function below so that it completes successfully.

NB: relatively hard.

def print_down_to(input, down_to)
  p input
  print_down_to(input - 1, down_to) if input > down_to
end
print_down_to(1_000_000, 1)
#⇒ .... lots of integers
#⇒ ** SystemStackError

What would be the output of:

true == true == true

What would this code produce?

[*?a..?z].each do |e|
  next unless (e =~ /[aeiou]/)..(e =~ /[aeiou]/)
  print e
end

Given a huge array of integers, calculate an amount of 1, followed by 2 (not necessarily immediately). The solution must be not worse than O(N) (and O(1) on memory.) E.g. if the list is [3,1,2,2,1,1,1,3,2], the answer would be 2 (indices 1 and 6.) Ask me for hints and tips (mine is 36 symbols.)

NB: relatively hard task (50+ symbols solution is relatively easy.)


Happy Challenging!