我有一个数组,late_mark_array:
["yes","yes","yes","yes","yes","yes","no","no","yes","yes","yes","yes","no"]
Run Code Online (Sandbox Code Playgroud)
这些表明员工在特定月份的连续"迟到标记".在这个数组中"yes"表示"迟到"."no"表示"不迟到".我想实现penalties"lates".要计算上面数组中的罚分:
"yes"标记,那么我想将penalty计数递增一."yes"在最初的3之后,每次连续惩罚需要加1 .使用这个逻辑,对penalty上面的员工应该是"6".
我不知道如何为上面的数组实现这个逻辑.
我还有一个要求,其中penalties两个来计算的需求consecutive late marks和random late marks太.例如,我有一个数组["yes","yes","yes","yes","yes","yes","no","no","yes","no","yes","no","yes","no"].在这个数组的末尾"yes","no"重复交替.作为这三个晚期的标志,不是连续的拉特.一个人employee没有得到penalty这个.在这种情况下,我想penalty以应用于既需要consecutive和random late marks太.所以在这种情况下penalty,一个employee应该是"5".我怎样才能做到这一点?
您可以使用.each_cons(3)然后计算包含所有切片的数量"yes":
irb> input = ["yes","yes","yes","yes","yes","yes","no","no","yes","yes","yes","yes","no"]
=> ["yes", "yes", "yes", "yes", "yes", "yes", "no", "no", "yes", "yes", "yes", "yes", "no"]
irb> input.each_cons(3).count { |slice| slice.all? { |item| item == "yes" } }
=> 6
Run Code Online (Sandbox Code Playgroud)