Bird
Raised Fist0
Rubyprogramming~20 mins

Array slicing and ranges in Ruby - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Ruby Array Slicing Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this Ruby code using range slicing?
Consider the following Ruby code snippet. What will be printed?
Ruby
arr = [10, 20, 30, 40, 50]
puts arr[1..3].inspect
A[20, 30, 40, 50]
B[20, 30, 40]
C[10, 20, 30]
D[30, 40, 50]
Attempts:
2 left
💡 Hint
Remember that the range 1..3 includes elements at index 1, 2, and 3.
❓ Predict Output
intermediate
2:00remaining
What does this code output when slicing with an exclusive range?
Look at this Ruby code. What will it print?
Ruby
arr = ['a', 'b', 'c', 'd', 'e']
puts arr[0...3].inspect
A["b", "c", "d"]
B["a", "b", "c", "d"]
C["a", "b", "c"]
D["a", "b"]
Attempts:
2 left
💡 Hint
The three dots in the range exclude the last index.
❓ Predict Output
advanced
2:00remaining
What is the output of this code using negative indices in slicing?
Analyze this Ruby code and determine its output.
Ruby
arr = [1, 2, 3, 4, 5, 6]
puts arr[-4..-2].inspect
A[3, 4, 5]
B[4, 5, 6]
C[2, 3, 4]
D[3, 4]
Attempts:
2 left
💡 Hint
Negative indices count from the end: -1 is last element.
❓ Predict Output
advanced
2:00remaining
What error does this Ruby code raise when slicing with an invalid range?
What happens when you run this Ruby code?
Ruby
arr = [7, 8, 9]
puts arr[5..7].inspect
AArgumentError
Bnil
CIndexError
D[]
Attempts:
2 left
💡 Hint
Check what Ruby returns when slicing beyond array length.
🧠 Conceptual
expert
2:00remaining
How many elements are in the resulting array after this slicing?
Given this Ruby code, how many elements does the resulting array have?
Ruby
arr = (1..10).to_a
result = arr[2..8]
puts result.size
A7
B6
C8
D9
Attempts:
2 left
💡 Hint
Remember that the range 2..8 includes both ends.

Practice

(1/5)
1. What does the expression arr[1..3] do when arr = [10, 20, 30, 40, 50]?
easy
A. Returns a new array with elements at indexes 1, 2, and 3
B. Returns a new array with elements at indexes 1 and 3 only
C. Returns a new array with elements at indexes 1 and 2 only
D. Returns a single element at index 3

Solution

  1. Step 1: Understand the range operator '..'

    The range 1..3 includes both 1 and 3, so it covers indexes 1, 2, and 3.
  2. Step 2: Apply slicing to the array

    Slicing arr[1..3] returns elements at indexes 1, 2, and 3, which are 20, 30, and 40.
  3. Final Answer:

    Returns a new array with elements at indexes 1, 2, and 3 -> Option A
  4. Quick Check:

    Range '..' includes end index = elements 20, 30, 40 [OK]
Hint: Remember '..' includes the end index in slicing [OK]
Common Mistakes:
  • Thinking '..' excludes the end index
  • Confusing indexes with values
  • Assuming slicing changes the original array
2. Which of the following is the correct syntax to get elements from index 2 up to but not including index 5 in Ruby array arr?
easy
A. arr[2...5]
B. arr[2:5]
C. arr[2..5]
D. arr[2-5]

Solution

  1. Step 1: Identify the range operator for excluding end

    In Ruby, ... excludes the end index, so 2...5 means indexes 2, 3, and 4.
  2. Step 2: Check syntax correctness

    Only arr[2...5] uses valid Ruby syntax for slicing excluding the end index.
  3. Final Answer:

    arr[2...5] -> Option A
  4. Quick Check:

    Use '...' to exclude end index in range [OK]
Hint: Use '...' to exclude the last index in range slicing [OK]
Common Mistakes:
  • Using '..' when exclusion is needed
  • Using Python-style slicing syntax like ':'
  • Using invalid range syntax like '2-5'
3. What is the output of the following Ruby code?
arr = [5, 10, 15, 20, 25]
slice = arr[1...4]
puts slice.inspect
medium
A. [10, 15, 20, 25]
B. [15, 20, 25]
C. [10, 15, 20]
D. [5, 10, 15]

Solution

  1. Step 1: Understand the slicing range

    The range 1...4 includes indexes 1, 2, and 3 but excludes 4.
  2. Step 2: Extract elements at these indexes

    Elements at indexes 1, 2, 3 are 10, 15, and 20 respectively.
  3. Final Answer:

    [10, 15, 20] -> Option C
  4. Quick Check:

    Range '...' excludes end index = [10, 15, 20] [OK]
Hint: Remember '...' excludes the last index in slicing [OK]
Common Mistakes:
  • Including element at index 4 mistakenly
  • Confusing indexes with values
  • Printing original array instead of slice
4. Identify the error in the following Ruby code snippet:
arr = [1, 2, 3, 4, 5]
slice = arr[2..6]
puts slice.inspect
medium
A. Syntax error due to invalid range
B. Range end index 6 is out of bounds but Ruby returns elements up to the end of the array
C. Runtime error because index 6 does not exist
D. slice will be empty array because range is invalid

Solution

  1. Step 1: Check the range indexes against array size

    The array has indexes 0 to 4. The range 2..6 goes beyond the last index.
  2. Step 2: Understand Ruby slicing behavior for out-of-bounds

    Ruby returns elements from index 2 to the end (indexes 2, 3, 4) and ignores indexes beyond 4 without error.
  3. Final Answer:

    Range end index 6 is out of bounds but Ruby returns elements up to the end of the array -> Option B
  4. Quick Check:

    Ruby slices safely even if range exceeds array size [OK]
Hint: Ruby slicing ignores out-of-bound indexes without error [OK]
Common Mistakes:
  • Expecting runtime or syntax error
  • Assuming slice will be empty
  • Confusing Ruby with other languages that error here
5. Given arr = [2, 4, 6, 8, 10, 12], which expression returns a new array with every second element starting from index 1 up to index 5?
hard
A. arr[1..5].select.with_index { |_, i| i.even? }
B. arr[1..5].select.with_index { |_, i| i.odd? }
C. arr[1...6].values_at(*arr[1...6].each_index.select(&:even?))
D. arr[1..5].values_at(*arr[1..5].each_index.select(&:odd?))

Solution

  1. Step 1: Slice array from index 1 to 5

    arr[1..5] gives [4, 6, 8, 10, 12].
  2. Step 2: Select every second element starting from index 1 of the slice

    Indexes inside the slice are 0 to 4. Selecting odd indexes (1, 3) gives elements 6 and 10.
  3. Step 3: Check options for correct syntax and output

    arr[1..5].values_at(*arr[1..5].each_index.select(&:odd?)) uses values_at with odd indexes on the slice correctly, returning [6, 10].
  4. Final Answer:

    arr[1..5].values_at(*arr[1..5].each_index.select(&:odd?)) -> Option D
  5. Quick Check:

    Use values_at with odd indexes on slice for every second element [OK]
Hint: Use values_at with selected indexes for custom slicing [OK]
Common Mistakes:
  • Confusing odd/even indexes inside the slice
  • Using select without values_at returns elements, not indexes
  • Using wrong range operator causing off-by-one errors
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard