@nadom

Что вычисляет следующий код?

Параллельно пытаюсь разобраться сам, но вдруг кто-то знаком с языком. Я же гуглю каждый метод.

a = 2187
  v = ->(x){(0..2).to_a.repeated_permutation(x)}
  v[a].map do |r|
    f,l = [-1],0
    (1..2*a).each do |j|
      i = f[j-l-1]
      while i != -1 && r[j%a] != r[(l+i+1)%a]
        l = j-i-1 if r[(l+i+1)%a] > r[j%a]
        i = f[i]
      end
      if i == -1 && r[j%a] != r[(l+i+1)%a]
        l = j if r[(l+i+1)%a] > r[j%a]
        f[j-l] = -1
      else
        f[j-l] = i+1
      end
    end
    r.rotate(l)
  end.uniq.count do |r|
    v[7].count{|s|(0...a).map{|l| r.rotate(l)[0,7]}.include?(s)} == a
  end
  • Вопрос задан
  • 699 просмотров
Решения вопроса 1
@nadom Автор вопроса
Считает гамильтонов цикл.
https://en.wikipedia.org/wiki/Hamiltonian_path_problem

Получается огромное число, нужно считать в вольфрам.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
Jeiwan
@Jeiwan
Какие-то сложные вычисления здесь происходят. Без контекста или без знания соответствующих математических алгоритмов понять трудно. Похоже на генерацию огромной матрицы и обработку её.
Ответ написан
Комментировать
2ord
@2ord
Похоже на результат работы обфускатора, если честно.
Не столько сложные вычисления, сколько сильно запутанные. Может линейная алгебра или дискретная математика.
Там в коде такие метаморфозы, что аж страшно представить зачем такое нужно
i = f[i]
Если это реальный код, такому разботчику нужно руки откручивать.

Добавлено
Ещё возможно, что код нужен для траты вычислительных ресурсов.
Ответ написан
@nagibator8000
может 42?
Ответ написан
Комментировать
@pashablya1
nadom, можешь помочь? как тут задается граф если это задача поиска гамильтонова цикла?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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