Видимо да! В три простых шага.
Шаг 1
Пусть f ( n ) обозначает функцию подсчета простых чисел (число простых чисел, меньших или равных n ).
Определите целочисленную последовательность s ( n ) следующим образом. Для каждого положительного целого числа n ,
- Initiallize т к п .
- Пока t не является ни простым, ни 1, замените t на f ( t ) и итерируйте.
- Количество итераций s ( n ).
Итерационный процесс гарантированно завершится, потому что f ( n ) < n для всех n .
Рассмотрим для примера n = 25. Мы инициализируем t = 25. Так как это не простое число и не 1, мы вычисляем f (25), который равен 9. Это становится новым значением для t . Это не простое число, ни 1, поэтому мы продолжаем: f (9) равно 4. Мы продолжаем снова: f (4) равно 2. Поскольку это простое число, мы останавливаемся здесь. Мы сделали 3 итерации (от 25 до 9, затем до 4, затем до 2). Таким образом, s (25) равно 3.
Первые 40 членов последовательности следующие. Последовательность не в OEIS.
0 0 0 1 0 1 0 2 2 2 0 1 0 2 2 2 0 1 0 3 3 3 0 3 3 3 3 3 0 3 0 1 1 1 1 1 0 2 2 2
Шаг 2
Учитывая нечетное положительное целое число N , создайте массив N × N (матрицу), обмотав конечную последовательность s (1), s (2), ..., s ( N 2 ), чтобы сформировать квадратную спираль наружу . Например, при N = 5 спираль
s(21) s(22) s(23) s(24) s(25)
s(20) s(7) s(8) s(9) s(10)
s(19) s(6) s(1) s(2) s(11)
s(18) s(5) s(4) s(3) s(12)
s(17) s(16) s(15) s(14) s(13)
или, подставляя значения,
3 3 0 3 3
3 0 2 2 2
0 1 0 0 0
1 0 1 0 1
0 2 2 2 0
Шаг 3
Представьте массив N × N в виде изображения с картой серого цвета или с картой другого цвета на ваш вкус. Карта должна быть постепенной, чтобы порядок чисел соответствовал некоторому визуально очевидному порядку цветов. Тестовые примеры ниже показывают несколько примеров цветовых карт.
Соревнование
Учитывая нечетное положительное целое число N , получим изображение, описанное выше.
правила
Спираль должна быть наружу, но может быть по часовой стрелке или против часовой стрелки и может начать движение вправо (как в приведенном выше примере), влево, вниз или вверх.
Шкалы горизонтальной и вертикальной осей не обязательно должны быть одинаковыми. Также метки оси, цветная полоса и подобные элементы являются необязательными. Пока спираль может быть ясно видна, изображение является действительным.
Изображения могут быть выведены любым стандартным способом . В частности, изображение может быть отображено на экране, или может быть создан графический файл, или может быть выведен массив значений RGB. Если вы выводите файл или массив, пожалуйста, опубликуйте пример того, как он выглядит при отображении.
Средства ввода и формат являются гибкими, как обычно . Может быть предоставлена программа или функция . Стандартные лазейки запрещены .
Самый короткий код в байтах побеждает.
Контрольные примеры
Следующие изображения (нажмите для полного разрешения) соответствуют несколько значений N . По часовой стрелке используется спираль, направленная вправо, как в примере выше. Изображения также иллюстрируют несколько действительных цветовых карт.
источник
s(n)
может быть передан в какую-либо функцию / пакет для построения графиков без изменения (я думаю, чтоimshow
в matplotlib это может обрабатываться, например), это приемлемая форма вывода?imshow
делает Matlab (и, возможно, Matplotlib)imshow
делает это.Ответы:
Дьялог АПЛ, 94 байта
предполагает
⎕IO=0
вывод для n = 701 (преобразуется из .pgm в .png):
источник
MATLAB -
197185178175184163162148142140 байтовБлагодаря Андеру и Андрасу побрил 12 байтов, и огромное спасибо Луису за то, что он соединил их. Побрился 16 благодаря Ремко, 6 благодаря flawr
Результат для
N=301
(F(301)
):Объяснение:
источник
Wolfram Language (Mathematica) , 124 байта
Спасибо Мартину Эндеру за сохранение 12 байтов!
Попробуйте онлайн!
Сгенерированное изображение:
Замкнутая формула формулы спирального значения взята непосредственно из этого моего ответа .
источник
#/2-.5
сохраняет байт.p
до тех пор, пока оно вам не понадобится:...,{y,p=(1-#)/2,-p},{x,p,-p}
MATLAB:
115114110 байтОдин вкладыш (запускается в R2016b + как функция в скрипте ) 115 байт
Помещение функции в отдельный файл, как предложено flawr, и использование 1 дополнительного байта на каждое правило файла
В файле
s.m
64 + 1 байт для кода + файлКомандное окно для определения
I
, 45 байтВсего: 110 байт
Это использует рекурсию вместо
while
цикла, как это делают другие реализации MATLAB ( gnovice , Adriaan ). Запустите его как скрипт (в R2016b или новее), это определяет функцию,I
которую можно запускать какI(n)
.Структурированная версия:
Пример:
Заметки:
Я также пытался сделать
s
функцию анонимной, что значительно уменьшило бы количество. Однако есть 2 вопроса:При использовании анонимных функций трудно избежать бесконечной рекурсии, поскольку в MATLAB нет тернарного оператора для предложения условия прерывания. Передача троичного оператора (см. Ниже) также стоит байтов, так как нам нужно условие дважды.
Вы должны передать анонимную функцию себе, если она рекурсивная (см. Здесь ), которая добавляет байты.
Наиболее близко я подошел к этому, используя следующие строки, возможно, это можно изменить на работу:
источник
MATLAB -
126121 * байтЯ попытался использовать более векторизованный подход, чем Adriaan, и смог сбрить больше байтов. Вот однострочное решение:
И вот хорошо отформатированное решение:
* Примечание: если вы готовы , чтобы позволить метрическую crapton ненужных повторений, вы можете изменить строку ,
while any(i),
чтобыfor m=v,
и сохранить 5 байт.источник
cumsum
чтобы векторизовать и избежатьnnz(primes(...)
while any(i)
наfor m=M
. Кому интересно, если запуск кода занимает несколько часов :-)n^2
или около того повредит! ;)Python 3,
299265 байтСохранено 5 байтов благодаря рекомендациям по форматированию Джонатана Фреха и NoOneIsHere. Удалил дополнительные 34 байта, удалив определение функции, которое вызывалось только один раз.
Это немного дольше, чем у некоторых, из-за того, что у python нет команды для определения простоты или спирального массива. Однако он работает относительно быстро, около минуты
n = 700
.Проверьте это с
источник
import
и*
.J, 121 байт
Определяет функцию:
источник
R, 231 байт
Немного меньше в гольф:
Анонимная функция. Вывод в графическом окне. Шкала находится на красной шкале с самым темным оттенком, равным 0, а более чистые оттенки увеличивают значения.
Результат для n = 101:
источник