Спираль Улама - действительно захватывающая, но загадочная тема в математике. Как это работает в деталях, можно узнать здесь , но краткое резюме можно объяснить так:
Я начинаю с написания одного, затем пишу два справа от него. Выше двух я пишу три, а слева от этого я пишу четыре. Я продолжаю эту модель кружения вокруг 1 (и любых чисел между мной и 1) бесконечно (или пока не скажу остановиться), образуя спиральную модель. (см. пример ниже)
Цель
Создайте программу, которая принимает n (всегда будет нечетное число больше нуля) в качестве входных данных, которые коррелируют с количеством строк, а затем выводит значения простых чисел строка за строкой спирали Улама. Форматирование может быть любым, но должно быть понятным для человека и очевидным.
Например, учитывая вход 3, ваша программа должна вывести 5,3,2,7
, потому что 3 строки создают следующую спираль:
5 4 3 <-- first row has the primes 5 and 3
6 1 2 <-- second row has the prime 2
7 8 9 <-- third row has the prime 7
Поскольку это кодовый гольф, выигрывает ответ с наименьшим количеством байтов (независимо от того, насколько он неэффективен)! Стандартные лазейки не принимаются.
Ответы:
Pyth, 20 байтов
Попробуйте онлайн: демонстрация
Этот код генерирует полностью спираль Улама, соединяет все линии и фильтры для простых чисел.
Объяснение:
источник
МАТЛАБ, 48
По сути, это создает спираль требуемого размера (запрашивается пользователем), а затем упорядочивает ее так, чтобы она отображалась в правильном порядке строк. Это хранится в. Далее он отображает все значения в, которые являются простыми.
Как вы сказали, любой читаемый формат, я сохранил байт и пошел к выводу по умолчанию disp (), который (в вашем тестовом примере, n = 3):
В качестве дополнительного бонуса, это работает для любого n> 0, включая четные числа. Например, вывод для n = 10:
источник
spiral
функцияCJam,
4233 байтаПопробуйте онлайн
Последняя версия включает существенные улучшения, предложенные @Martin.
Метод построения спирали состоит в том, чтобы на каждом шаге повернуть имеющуюся у нас матрицу на 90 градусов и добавить строку с дополнительными числами. Это повторяется
(n / 2) * 4
раз.Значения в результирующей матрице затем фильтруются как простые числа.
Объяснение:
источник
2/4*
быть заменен2*
или вы специально оставили это так?(2*
должно быть правильно.Mathematica 223
Это присваивает код Кубы спирали Улама. Вот почему я представляю это как вики сообщества. Я просто играл в гольф и выбрал простые числа, перечисленные в ряду, в котором они находятся.
пример
Чтобы улучшить отображение:
источник
Mathematica, 118 байт
Это генерирует спираль Улама в линейной форме, отмечая, что положение каждого последующего числа может быть накоплено как
то есть начните с центра, затем двигайтесь 1 вправо, 1 вверх, 2 влево, 2 вниз, 3 вправо, 3 вверх, ...
Выход:
источник
Javascript,
516363304276243240 байтМое решение не создает плотную матрицу со Спиралью, а возвращает индекс, соответствующий данному числу в Матрице Улама данного порядка. Таким образом, он перебирает числа от 2 до M * M и создает массив простых чисел с idx, заданным fn ulamIdx
Minified выглядит так:
Для входа 15 вывод:
,,,,,,,,,,,,,,,, 197 ,,,, 193, 191 ,,,,,,,,,,,,,,,, 139, 137 ,,,,, , 199, 101 ,,,, 97 ,,,,,,,, 181 ,,,,,,,, 61, 59 ,,,, 131 ,,,, 103, 37 ,,,,,, 31, 89, 179, 149, 67, 17 ,,,, 13 ,,,,,,,,,,,, 5, 3, 29 ,,,,,, 151 ,,, , 19 ,,, 2,11, 53, 127 ,,,, 107, 41, 7 ,,,,,,,,,,,, 71 ,,,, 23 ,,,,,,, ,,, 109, 43 ,,,, 47 ,,,, 83, 173 ,,,, 73 ,,,,,, 79 ,,,,,,,,,, 113 ,,,,,,, ,,,,, 157 ,,,,,, 163 167 ,,,, ,,,, 211 ,,,,,,,,,,,, 223
источник