@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 просмотров
Решения вопроса 1
vicodin
@vicodin
Имею некоторый опыт
Если хотите стать руби-разработчиком, стоит почитать про сам язык и основные конструкции.
10.times do - итератор. 10 раз выполнить блок do - end.
arr << {next_char => 1}
<< - метод добавления в массив, (www.ruby-doc.org/core-2.1.3/Array.html#method-i-3C-3C)
фигурные скобки - структура данных - хэш(грубо говоря, массив с парами ключ-значение) ruby-doc.org/core-2.1.3/Hash.html


Складывается ощущение, что у вас с английским 0 и с программированием также. Уделите время теории для начала.

После этих строк, я понял, что вы троллите:

На первой строке создается переменная value. На второй происходит ее интерполяция.

Каюсь, начал отвечать на вопросы не дочитав до этого маразма.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
zoonman
@zoonman
⋆⋆⋆⋆⋆
Для начала нужно вспомнить, что почти все данные в Ruby это объекты.
Отсюда вывод, что times это метод. Продолжение ищем здесь.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы