fork download
  1. def inter_means(sequences)
  2. Enumerator.new do |y|
  3. last_inserted = nil
  4. sequences.lazy.each do |seq|
  5. first = true
  6. seq.lazy.each do |element|
  7. if first && last_inserted
  8. y << (element + last_inserted) / 2.0
  9. last_inserted = nil
  10. end
  11. first = false
  12. y << element
  13. last_inserted = element
  14. end
  15. end
  16. end
  17. end
  18.  
  19. stdin_stream = Enumerator.new do |y|
  20. number = ""
  21. STDIN.each_char.lazy.each do |c|
  22. print c # Показать порядок ввода и вычисления
  23. if c =~ /\d/
  24. number += c
  25. else
  26. y << number.to_i if number != ""
  27. number = ""
  28. end
  29. end
  30. y << number.to_i if number != ""
  31. end
  32.  
  33. inputs = [
  34. [[], stdin_stream.lazy, [1]],
  35. # [[*1..5], [*3..6].reverse, [], [-3, -3, -3]],
  36. # [],
  37. # [[], [1, 2, 3], [], [-3, -2, -1], [], []]
  38. ]
  39.  
  40. inputs.each do |input|
  41. puts " #{input.inspect}"
  42. puts "#{inter_means(input).each { |n| puts "<#{n}>" }}"
  43. end
  44.  
  45. # [[1, 2, 3, 4, 5], [6, 5, 4, 3], [], [-3, -3, -3]]
  46. # => [1, 2, 3, 4, 5, 5.5, 6, 5, 4, 3, 0.0, -3, -3, -3]
  47. # []
  48. # => []
  49. # [[], [], []]
  50. # => []
  51. # [[], [1, 2, 3], [], [-3, -2, -1], [], []]
  52. # => [1, 2, 3, 0.0, -3, -2, -1]
Success #stdin #stdout 0.05s 9784KB
stdin
1 2 3
4 5
6
stdout
  [[], #<Enumerator::Lazy: #<Enumerator: #<Enumerator::Generator:0x8ace330>:each>>, [1]]
1 <1>
2 <2>
3
<3>
4 <4>
5
<5>
6<6>
<3.5>
<1>
[[], #<Enumerator::Lazy: #<Enumerator: #<Enumerator::Generator:0x8ace330>:each>>, [1]]