У нас было несколько из проблем , о спирали Улама. Но этого недостаточно.
В этом задании мы построим треугольную спираль Улама (в отличие от обычной квадратной спирали Улама). Вот эскиз того, как выглядит спираль.
Как мы знаем, спираль Улама размещает все натуральные числа во внешней спирали и отмечает только те, которые являются простыми. Таким образом, в приведенном выше наброске будут показаны только цифры, которые отображаются черным цветом (простые числа).
Соревнование
Примите число N в качестве ввода и покажите треугольную спираль Улама до этого числа.
- Ввод может быть стандартным аргументом или аргументом функции.
- Спираль должна повернуться в положительном направлении (то есть против часовой стрелки), как показано на рисунке выше.
- Любой из поворотов на 120 градусов на приведенном выше рисунке будет действительным, и разворот может отличаться для разных входов. Но самая низкая сторона подразумеваемых треугольников должна быть горизонтальной, поскольку единственные разрешенные повороты (кратные) 120 градусов.
- Код должен выполняться теоретически (при условии достаточного количества времени и памяти) для любого N, вплоть до того, что допускается любыми промежуточными вычислениями, которые вы выполняете с типом данных по умолчанию.
double
достаточно; нет необходимости в больших целочисленных типах. - Все встроенные функции разрешены.
- Я не приму мой собственный ответ (не то, чтобы я думал, что он будет самым коротким в любом случае ...).
Выходные форматы
Выберите любой из следующих.
Отобразите график с маркером (точка, круг, крестик, что вы предпочитаете) на простых числах и ничего не на простых числах. Масштаб не обязательно должен быть одинаковым для двух осей. То есть подразумеваемые треугольники не обязательно должны быть равносторонними. Оси, линии сетки и метки осей являются необязательными. Требуются только маркеры на простых числах.
Пример вывода для N = 12 будет следующим (сравните с приведенным выше эскизом). Второй график - более интересный пример, соответствующий N = 10000.
- Создайте файл изображения с вышеуказанным, в любом хорошо известном формате изображения (например, png, tiff, bmp).
Отобразите спираль как ASCII-изображение , используя один символ по вашему выбору для простых чисел и пробел для непростых чисел, с пробелом для разделения числовых позиций в одной строке. Разрешены начальные или конечные пробелы или переводы строк. Например, случай N = 12 с использованием
o
символа будетo · · · o · o · · · o · o
где, конечно,
o
на самом деле будет отображаться только отметка в простых числах. В·
не простые числа показаны здесь только для справки.
Критерий победы
Настоящая награда - увидеть для себя эти удивительные модели Code golf, самые короткие коды выигрышей.