У нас було кілька з проблем , про спіралі Улама. Але цього недостатньо.
У цьому виклику ми побудуємо трикутну спіраль Улама (на відміну від звичайної, квадратної спіралі Улама). Ось ескіз того, як виглядає спіраль.
Як ми знаємо, спіраль Улама розташовує всі природні числа по зовнішній спіралі і позначає лише ті, які є простими. Тож у вищенаведеному ескізі будуть показані лише цифри, які відображаються чорним кольором (праймери).
Змагання
Прийміть число N як вхідне та покажіть трикутну спіраль Улама до цього числа.
- Введенням може бути stdin або аргумент функції.
- Спіраль повинна повертатися в позитивному напрямку (тобто проти годинникової стрілки), як на наведеному малюнку.
- Будь-який із 120-градусних витків вищевказаної фігури був би дійсним, а поворот може бути різним для різних входів. Але найнижча сторона трикутників, що маються на увазі, повинна бути горизонтальною, оскільки єдині дозволені повороти становлять (кратні) 120 градусів.
- Код повинен працювати теоретично (з урахуванням достатнього часу та пам’яті) для будь-яких N , дозволених будь-якими проміжними обчисленнями, які ви робите зі своїм типом даних за замовчуванням.
double
достатньо; не потрібно великих цілих типів. - Дозволені всі вбудовані функції.
- Я не прийму власної відповіді (не те, що я думаю, що це все-таки було б найкоротшим ...).
Вихідні формати
Виберіть будь-яке з наведеного нижче.
Відображайте графік з маркером (крапкою, колом, хрестом, що б вам не було зручніше) за простими числами, а нічого не для простих чисел. Шкала не повинна бути однаковою для двох осей. Тобто маються на увазі трикутники не повинні бути рівносторонніми. Осі, лінії сітки та мітки осі необов’язкові. Потрібні лише маркери на простих номерах.
Приклад виводу для N = 12 буде таким (порівняйте з наведеним ескізом). Другий сюжет - більш цікавий приклад, що відповідає N = 10000.
- Створіть файл зображень із вищевказаним у будь-якому добре відомому форматі зображення (наприклад, png, tiff, bmp).
Відображайте спіраль як ASCII мистецтво , використовуючи один символ на ваш вибір для праймерів та порожній простір для не-простих, з порожнім пробілом для відокремлення позицій номерів у тому ж рядку. Доступні провідні або кінцеві пробіли або нові рядки. Наприклад, випадок N = 12, який використовується
o
як символ, будеo · · · o · o · · · o · o
де, звичайно, відображатиметься лише
o
позначка на прайме. Тут·
наведено лише для довідки.
Критерій виграшу
Фактична нагорода - це бачити для себе ті дивовижні моделі Code Golf, найкоротші виграші коду.