Напишите программу (или функцию), которая принимает положительное целое число.
Если введено 1
, выведите (или верните) два соседних рядом бриллианта, каждый с длиной стороны 1 косой черты:
/\/\
\/\/
Для каждого ввода N
больше 1 посмотрите на выход для N-1
и для каждой пары соседних алмазов, вставьте между ними новый алмаз, длина стороны которого является суммой длин сторон двух соседей. Напечатайте (или верните) этот новый ромбовидный узор.
Поэтому, когда 2
вводится, мы смотрим на вывод 1
и видим, что есть два соседних алмаза, оба с длиной стороны 1. Итак, мы вставляем между ними ромб с длиной стороны 2 (1 + 1):
/\
/\/ \/\
\/\ /\/
\/
Для ввода 3
мы смотрим на результат 2
и добавляем два бриллианта с длиной стороны 3 (1 + 2 и 2 + 1) между двумя парами соседних бриллиантов:
/\ /\
/ \ /\ / \
/\/ \/ \/ \/\
\/\ /\ /\ /\/
\ / \/ \ /
\/ \/
Продолжая шаблон, вывод для 4
:
/\ /\
/\ / \ / \ /\
/ \ /\ / \ / \ /\ / \
/ \ / \ / \ /\ / \ / \ / \
/\/ \/ \/ \/ \/ \/ \/ \/\
\/\ /\ /\ /\ /\ /\ /\ /\/
\ / \ / \ / \/ \ / \ / \ /
\ / \/ \ / \ / \/ \ /
\/ \ / \ / \/
\/ \/
И так далее.
Ваши выходные данные могут иметь пробелы в любых строках, но только до одного завершающего символа новой строки (и не должны быть начальных символов новой строки).
Самый короткий код в байтах побеждает.
Ответы:
Pyth,
5049 байтовдемонстрация
Объяснение:
источник
u.iGsM.:G2tQjT9
в своем (частичном) решении. Я никогда не смотрел на твой ответ ...Common Lisp, 425
пример
Ungolfed
источник
CJam,
595857 байтСпасибо @ MartinBüttner за отыгрывание 1 байта.
Попробуйте онлайн в интерпретаторе CJam .
идея
Для ввода 3 , например, мы генерируем
вращая строку
\
и заменяя некоторые обратные слеши косыми чертами.Затем мы заархивируем полученный массив (транспонируем строки и столбцы), чтобы получить нижнюю половину желаемого результата.
Верхняя половина - это байт на байт, равная нижней половине в обратном порядке.
Код
источник
Ред 1: Руби 170
Новый метод, избегающий создания большого алмаза и сокращения.
Ред. 0: Рубин, 187
Размеры бриллиантов рассчитываются в соответствии с рекуррентным соотношением из https://oeis.org/A002487 Таким образом, мы создаем массив,
a
содержащий все элементы для всех строк от 1 доn
. Нас интересуют только последние1<<n-1
элементы (Ruby позволяет нам получить их из массива, используя отрицательные индексы, -1 - последний элемент в массиве), плюс начальный1
с позиции 0.Линия за линией и ромб за ромбом, мы рисуем ряд символов для самого большого алмаза, затем вырезаем средние столбцы, чтобы получить строку для нужного алмаза. Rev 1 короче, но мне понравился этот метод.
Модульная арифметика используется для обтекания, так что одно и то же выражение добавляет все
/
напрямую, а также одно выражение добавляет все\
напрямую.Неуправляемый в тестовой программе
источник