Нарисуйте последовательность Recamán с ASCII


12

Последовательность Recamán ( A005132 ) является математической последовательностью, определяемой как:

A(N)знак равно{0если Nзнак равно0A(N-1)-Nесли A(N-1)-N положительный и не уже в последовательностиA(N-1)+Nв противном случае

Альтернативное, более простое словесное объяснение состоит в следующем:

Вычтите, если вы не можете (число отрицательное или использовалось ранее), в этом случае добавьте.

Первые несколько терминов: 0,1,3,6,2,7,13,20,12,21,11

Теперь уже существует этот вызов, который просит вас сгенерировать nй член последовательности. Этот немного отличается.

Вызов

Учитывая число n, нарисуйте первые nчлены последовательности. Что я имею в виду под «рисовать»? Позвольте мне продемонстрировать:

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

______

  1. Начните с перехода между первым и вторым слагаемыми: то есть 0 и 1. Используйте |и -для рисования квадрата (равной длины и высоты), идущего вверх. В этом случае нам придется пропустить, -потому что расстояние составляет всего 1.
||
______
  1. Теперь мы будем рисовать на следующем шаге (от A(2)знак равно1 до A(3)знак равно3 ) в нижней части строки (мы чередуем вверх и вниз каждый раз):
||
______
 | |
 |-|

Как вы можете видеть, эта линия также имеет высоту 2, так как высота должна быть равна расстоянию между двумя членами.

Если мы продолжим, мы в конечном итоге доберемся до:

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

правила

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

Прецедент

Вот еще один тестовый пример, с n=10

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

Непонятно, где должен располагаться левый край квадрата.
Даниил Тутубалин

@DaniilTutubalin Я не уверен, что понимаю, что вы имеете в виду.
Геза

в основном оператор определяет только то, что нам нужно рисовать квадраты (ширина = высота) и что они должны чередоваться вверх и вниз. Нет никаких инструкций по размеру и положению квадратов. В тестовом примере я вижу, что 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.завернуть это довольно хорошо.
Геза

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

Ответы:


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.