Есть задание:
Дана последовательность:
1
11
21
1211
111221
312211
Нужно чтобы ваша программа могла продолжить данную последовательность.
Можете в реализации использовать любые библиотеки.
Есть решение:
value = '1'
puts value
10.times do
next_value = value.chars.inject([]) do |arr, next_char|
if !arr.empty? && arr.last.has_key?(next_char)
arr.last[next_char] += 1
else
arr << {next_char => 1}
end
arr
end
value = ''
next_value.map do |hash|
hash.each_pair{ |k,v| value << "#{v}#{k}" }
end
puts value
end
Но данное решение мне подходит, т.к. оно из сети. Поэтому я пытаюсь разработать свое собственное. Поэтому я хочу разглядеть алгоритм из решения найденного в сети
Есть то что мне не понятно в решении, например:
10.times do
Что значит
10.times? Что значит
do?
Или:
arr << {next_char => 1}
Что значит
двойное меньше? Что значит {next_char => 1}?
Непонятен не то чтобы синтаксис, просто пока мало что понятно, у меня глаза разбегаются:
next_value = value.chars.inject([]) do |arr, next_char|
if !arr.empty? && arr.last.has_key?(next_char)
arr.last[next_char] += 1
else
arr << {next_char => 1}
end
arr
Из этого всего я увидел только конструкцию
do-end и
if-else, больше ничего. Скажу сразу, я не ruby разработчик, но хочу им стать.
Единственное что мне понятно, так это первые двое строчки:
value = '1'
puts value
На первой строке создается переменная value. На второй происходит ее интерполяция.
Если кто нибудь из вас построчно прокомментирует данное решение, мне это очень поможет