-
Notifications
You must be signed in to change notification settings - Fork 67
Expand file tree
/
Copy pathDropWhile.rb
More file actions
38 lines (32 loc) · 1.12 KB
/
DropWhile.rb
File metadata and controls
38 lines (32 loc) · 1.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
=begin
Yet another staple for the functional programmer. You have a sequence of values
and some predicate for those values. You want to remove the longest prefix of
elements such that the predicate is true for each element. We'll call this the
dropWhile function. It accepts two arguments. The first is the sequence of
values, and the second is the predicate function. The function does not change
the value of the original sequence.
Your task is to implement the dropWhile function. If you've got a span function
lying around, this is a one-liner! Alternatively, if you have a takeWhile
function on your hands, then combined with the dropWhile function, you can
implement the span function in one line. This is the beauty of functional
programming: there are a whole host of useful functions, many of which can be
implemented in terms of each other.
=end
# My Solution
def drop_while(arr, pred)
result = []
is_done = false
arr.each do |x|
if pred.call(x) == false
is_done = true
end
if is_done
result << x
end
end
result
end
# Better Solution
def drop_while(arr, pred)
arr.drop_while{ |s| pred[s] }
end