Накресліть послідовність Рекамана з ASCII


12

Послідовність Ремамана ( A005132 ) - це математична послідовність, визначена як така:

А(н)={0якщо н=0А(н-1)-някщо А(н-1)-н є позитивним і вже не в послідовностіА(н-1)+нінакше

Альтернативне, простіше словесне пояснення полягає в наступному:

Віднімайте, якщо ви не можете (число від’ємне або було використано раніше), у цьому випадку додайте.

Перші кілька термінів - 0,1,3,6,2,7,13,20,12,21,11

Тепер вже існує ця проблема, яка просить генерувати nтретій термін послідовності. Цей трохи відрізняється.

Виклик

Давши число n, намалюйте перші nчлени послідовності. Що я маю на увазі під «малюванням»? Дозвольте продемонструвати:

  1. Намалюйте max([A(y) for y<=n])одиниці рядка чисел у довжину. nЗараз ми будемо вважати, що це 5, тому рядок чисел становить 6 одиниць (оскільки найбільший з , , , і дорівнює ). Зробіть лінію від підкреслення, починаючи з 0:А(1)=0А(2)=1А(3)=3А(4)=6А(5)=26

______

  1. Почніть з переходу між першим та другим доданками: тобто 0 і 1. Використовуйте |та -намалюйте квадрат (рівну довжину та висоту), йдучи вгору. У цьому випадку нам доведеться пропустити, -оскільки відстань становить лише 1.
||
______
  1. Тепер ми проведемо наступний крок ( до A ( 3 ) = 3 ) в нижній частині рядка (ми чергуємо між собою вгору і вниз кожен раз):А(2)=1А(3)=3
||
______
 | |
 |-|

Як бачите, ця лінія також має висоту 2, оскільки висота повинна дорівнювати відстані між двома членами.

Якщо ми продовжимо, ми зрештою дістанемося:

   |--|
   |  |
|| |  |
______
 |||  |
 |||  |
  |   |
  |---|

Правила

  • Якщо є -і |стикається, пізніший має пріоритет.
  • Перед / після зображення можуть бути попередні пробіли / проміжки , але трейлінг / попередні _s або -s не допускаються (виняток становить 0- або 1- індексація)
  • Ви можете встановити 0 крапки перед першим _у рядку чисел або безпосередньо після нього.
  • Немає альтернативних символів для -, |або _можуть бути використані.
  • Це , тому найкоротша відповідь у байтах виграє.

Тестовий випадок

Ось ще один тестовий випадок, с n=10

            |-------|
            ||-----||
            ||     ||
  |----|    ||     ||
  |    |    ||     ||
  ||--||    ||     ||
  ||  ||    ||     ||
||||  ||    ||     ||
_____________________
 |||  ||   |||     ||
 |||  ||   |||     ||
  |   ||   |||     ||
  |---||   |||     ||
       |   |||     ||
       |---|||     ||
           ||------||
           |--------|

Не ясно, де слід розмістити лівий край квадрата.
Даніїл Тутубалін

@DaniilTutubalin Я не впевнений, що я розумію, що ти маєш на увазі.
Geza Kerecsenyi

В основному, оператор лише вказує, що нам потрібно намалювати квадрати (ширина = висота) і що вони повинні чергуватися вгору і вниз. Немає інструкцій щодо розміру та положення квадратів. У тестовому випадку я бачу, що 2 квадрата можуть мати однакове положення лівого краю.
Даніїл Тутубалін

Я думаю As you can see, this line also has a height of 2, since the height must be equal to the distance between the two terms., а також You can choose to set the 0 point just before the first _ on the number line, or just after it.завершити це досить добре.
Geza Kerecsenyi

Я думаю, що тестовий випадок для n = 10 неправильний від 13-> 20 і далі.
Нік Кеннеді

Відповіді:


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.