@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
  • Вопрос задан
  • 698 просмотров
Решения вопроса 1
@nadom Автор вопроса
Считает гамильтонов цикл.
https://en.wikipedia.org/wiki/Hamiltonian_path_problem

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

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

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

Войти через центр авторизации
Похожие вопросы