Задать вопрос
@krlljs

Обратная разработка: вычисляю первоначальный алгоритм программы на Ruby. Что означает код написанный начинающийся на третьей строке?

Есть задание:
Дана последовательность:

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. На второй происходит ее интерполяция.

Если кто нибудь из вас построчно прокомментирует данное решение, мне это очень поможет
  • Вопрос задан
  • 2898 просмотров
Подписаться 2 2 комментария
Подписчики вопроса 2 К ответам на вопрос (1)