#!/usr/bin/ruby
# General solution for reversing strings and arrays
func reverse (data) {
# Create a new object of the same
# type as the data provided as argument
var rev = data.new;
# Cut the last item from data
var last = data.last;
data = data.slice!(0, -1);
# Append it to our reversed object
rev.append!(last);
# Recurse with data-1 if data.len >= 1
if (data.length >= 1) {
rev += reverse(data);
}
return rev;
}
# String
say reverse('abc').dump;
# String (built-in)
say 'abc'.reverse.dump;
# Array
say reverse(%w(a b c)).dump;
# Array (built-in)
say %w(a b c).reverse.dump;
assert_eq(reverse('abc'), 'abc'.reverse)
assert_eq(reverse(%w(a b c)), %w(a b c).reverse)