用于提取数字的Ruby脚本

时间:2014-07-16 23:46:38

标签: ruby-on-rails ruby file numbers extract

我有一个.txt文件,其中包含如下字符:

7  3  5  7  3  3  3  3  3  3  3  6  7  5  5 22 1 4 23 16 18 5  13 34 24 17 50 30 42 35 29 27 52 35 44 52 36 39 25 40 50 52 40 2 52 52 31 35 30 19 32 46 50 43 36 15 21 16 36 25 7  3  5  17  3  3  3  3  23  3  3  46 1 2

我希望仅当接下来的15个数字中的7个或更多个大于10时才提取数字>

在这种情况下,我会得到输出:

22 1 4 23 16 18 5  13 34 24 17 50 30 42 35 29 27 52 35 44 52 36 39 25 40 50 52 40 2 52 52 31 35 30 19 32 46 50 43 36 15 21 16 36 25

请注意,在此输出中,数字<10,但它们通过了接下来的15个数字中的7个或更多数> 10的条件。

2 个答案:

答案 0 :(得分:1)

听起来像是一个家庭作业问题,但无论如何我都会给你一个尝试的答案。

numbers = "7  3  5  7  3  3  3  3  3  3  3  6  7  5  5 22 1 4 23 16 18 5  13 34 24 17 50 30 42 35 29 27 52 35 44 52 36 39 25 40 50 52 40 2 52 52 31 35 30 19 32 46 50 43 36 15 21 16 36 25 7  3  5  17  3  3  3  3  23  3  3  46 1 2"
numbers.split.each_cons(16).map{|x| x[0] if x[1..15].count{|y| y.to_i > 10} >= 7}.compact

答案 1 :(得分:0)

num_string = "7  3  5  7  3  3  3  3  3  3  3  6  7  5  5 22 1 4 23 16 18 5  13 34 24 17 50 30 42 35 29 27 52 35 44 52 36 39 25 40 50 52 40 2 52 52 31 35 30 19 32 46 50 43 36 15 21 16 36 25 7  3  5  17  3  3  3  3  23  3  3  46 1 2"

num_arr = num_string.split(" ")


def next_ones(arr)
    counter = 0
    arr.each do |num|
        if num.to_i > 10
            counter += 1
        end
    end
    if counter >= 7
        arr[0]
    end
end

def processor(arr)
    answer = []
    arr.each_with_index do |num, index|
        if num.to_i > 10
            answer << next_ones(arr[index...(index + 15)])
        end
    end
    answer.compact.join(" ")
end

processor(num_arr)

有点冗长,命名不好,但它应该给你一些想法。