我试图删除每个第二个元素,直到只剩下一个。 所以它从1跳过,删除,跳过,删除等开始。
到目前为止,我有类似的东西 l =* (1..10)
until l.length == 1
l = l.each_slice(2).map(&:first)
puts l
end
这有几个问题。 而且每个实际上只是选择每个第二个而不是删除每个第二个元素。 最终结果应为5.
我看起来不一定是最漂亮的解决方案,而是最容易和最简单的解决方案。
感谢您的帮助
答案 0 :(得分:3)
l =* (1..10)
until l.length == 1
l.rotate!(2).pop
end
puts "#{l}"
旋转,我想因为我不确定它是如何实现的,所以会减慢速度。虽然,我宁愿为这个问题创建一个双循环链表,因为这是着名的Flavius Josephus problem的一个特例。
HTH
编辑:@MarkThomas建议的单行
l =* (1..10)
l.rotate!(2).pop until l.length.one?
puts "#{l}"
答案 1 :(得分:0)
我可能会选择:
l = *(1..10)
l.delete_if.with_index { |_, i| i.even? } until l.one?