#!/usr/bin/env ruby
include Enumerable

puts Math.sqrt(2); puts Math::PI
# или
include Math
puts sqrt(2); puts PI

# получить квадраты целых чисел от 1 до 4
a1 = (1..4).collect {|i| i*i }
# тоже самое
a2 = (1..4).map {|i| i*i }
p a1, a2

# выдать четыре раза строку  "cat"
b = (1..4).collect { "cat"  }
p b

# найти первое вхождение числа,
# которое делится и на 5 и на 7 
# поиск среди чисел от 1 до 10   - таких нет
c = (1..10).detect {|i| i % 5 == 0 and i % 7 == 0 }
p c
# поиск среди чисел от 1 до 100  - первым найдено число 35
c1 = (1..100).detect {|i| i % 5 == 0 and i % 7 == 0 }
# то же самое
c2 = (1..100).find  {|i| i % 5 == 0 and i % 7 == 0 }
p c1, c2
# найти все вхождения чисел, которые делятся и на 5 и на 7 
c = (1..100).find_all  {|i| i % 5 == 0 and i % 7 == 0 }
p c
# найти все целые числа, кратные 3 и не превышающие 10
d1 = (1..10).find_all {|i|  i % 3 == 0 }
# то же самое
d2 = (1..10).select {|i|  i % 3 == 0 }
# и, наоборот, удалить  все целые числа, кратные 3
d3 = (1..10).reject {|i|  i % 3 == 0 }
p d1, d2, d3
# преобразовать объект перечисляемого типа в массив
l = 1..10; p l.to_a   # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


puts "Максимум чисел #{1..10} равен #{(1..10).max}"
# сортировка по убыванию
p ((1 .. 8).sort { |i,j| j<=>i}) #  [8, 7, 6, 5, 4, 3, 2, 1] 

# минимальный элемент массива
a1 = %w(albatross dog horse)
p a1.min         # albatross

puts a1.max {|a,b| a.length <=> b.length } # albatross