Напишите именованную функцию или программу, которая принимает одно целое число N и печатает (в STDOUT) или возвращает (в виде строки) первые N столбцов спирали ниже, начиная с вертикального стержня в центре и по спирали по часовой стрелке наружу.
_______________
/ _____________ \
/ / ___________ \ \
/ / / _________ \ \ \
/ / / / _______ \ \ \ \
/ / / / / _____ \ \ \ \ \
/ / / / / / ___ \ \ \ \ \ \
/ / / / / / / _ \ \ \ \ \ \ \
/ / / / / / / / \ \ \ \ \ \ \ \
| | | | | | | | | | | | | | | |
\ \ \ \ \ \ \___/ / / / / / / /
\ \ \ \ \ \_____/ / / / / / /
\ \ \ \ \_______/ / / / / /
\ \ \ \_________/ / / / /
\ \ \___________/ / / /
\ \_____________/ / /
\_______________/ /
Вы можете предположить, что 0 <N <= 278. Ваш вывод не может содержать пробелов перед крайним левым символом спирали. При желании вы можете распечатать один завершающий символ новой строки.
Для ввода 10 правильный вывод
_
/ \
| |
\___/
Для входа 2 правильный вывод
/
|
Для входа 20 правильный вывод
___
/ _ \
/ / \ \
| | | |
\___/ /
Вывод, который будет неправильным, потому что крайнему левому символу предшествует пробел
___
/ _ \
/ / \ \
| | | |
\___/ /
Победителем считается самое короткое представление в байтах.
|
черты ( ) являются просто ближайшим символом, который может представлять собрание a/
и\
.Ответы:
CJam - 156/147
Попробуйте онлайн
Работает с входами от 1 до 378 включительно (на 100 больше, чем требуется)
Используя последний зафиксированный (общедоступный в hg), но не выпущенный код CJam во время публикации этого вызова, решение можно сократить до 147 символов:
Объяснение:
Программа итеративно строит все спирали как массивы [xy символ], начиная с
[0 0 '|]
, получает запрошенную спираль, корректирует координаты так, чтобы минимальные x и y были 0, создает матрицу пробелов (с правильным количеством строк и 50 столбцов ) затем устанавливает символы из спирали и объединяет строки с помощью новых строк.источник
Python 2,
290289Наверное, очень плохо, но я пытался: D
Вывод содержит конечные пробелы, но это не запрещено в спецификации.
Обновление: сохранено 1 байт с изменением
\n
на;
.источник
JavaScript (ES6) 257
288 321Редактировать шаги объединены.
Редактировать гольф-код, играющий, чтобы сократить еще один символ
Построить вывод итеративно в массив r, отслеживая текущую позицию x и y и текущее направление. Когда позиция x или y <0, весь массив r перенастраивается.
Основные переменные:
Ungolfed
Тест в консоли Firefox / FireBug (или JSFiddle thx @Rainbolt)
Выход
источник
Pyth,
166165Я только что перевел свой ответ Python на Pyth, с моими не очень хорошими навыками Pyth. В результате рвота ниже.
источник