Описание задания:
Нарисуйте куб в искусстве ASCII примерно в проекции шкафа.
Monospaced fonts
часто есть персонажи, которые примерно в два раза выше, чем они широкие. Поскольку входными данными является длина вертикальных линий (исключая углы), горизонтальные линии рисуются с вдвое большим количеством символов, так что получающееся изображение действительно является примерно кубом. Отступающие линии нарисованы на половине длины в соответствии с проекцией шкафа.
Углы куба представлены +
горизонтальными линиями -
, вертикальными линиями |
и диагональными линиями /
.
Подводя итог: пусть вход будет n , тогда
- Горизонтальный край куба нарисован
-
и состоит из 2 n символов. - Вертикальный край куба нарисован
|
и состоит из n символов. - Диагональный край куба нарисован
/
и состоит из n / 2 символов. - Углы куба нарисованы с
+
. Углы не учитываются по длине кромки, как описано выше (см. Также примеры ниже).
Входные данные:
Входные данные, заданные для стандартного ввода, представляют собой одно положительное четное число n (2 ≤ n ≤ 30), которое задает длину вертикальных линий куба. За ним следует разрыв строки.
Выход:
Вывод - это куб на стандартном выводе, следуя приведенным выше правилам. Конечный пробел в строках игнорируется.
Пример ввода 1:
2
Пример вывода 1:
+----+
/ /|
+----+ |
| | +
| |/
+----+
Пример ввода 2:
4
Пример вывода 2:
+--------+
/ /|
/ / |
+--------+ |
| | |
| | +
| | /
| |/
+--------+
ЭТА: Теперь я принял самое короткое решение. Я обновлю принятый ответ, когда придет более короткий ответ.
Поскольку некоторые люди спрашивают, как долго были записи наших конкурсантов:
227 - Python
240 - Perl
310 - C
315 - C
326 - VB.NET
459 - C
А также наши собственные решения (не ранжируются с другими):
140 - Golfscript
172 - Ruby
183 - PowerShell
Ответы:
Golfscript - 96 символов
Большая часть компактности заключается в агрессивном хранении почти всего в переменной (если вы не включили запись в golfscript).
Пара других маленьких хитростей здесь.
'LR''str'*
->'LstrR'
.'/'
единственным должны проходить два элемента стека (@
) вместо 3 (@ .. \
).источник
Питон -
248243230227191Немного грязный, но он в основном печатает куб построчно (используя строковый буфер).
Спасибо @marcog за указание на первую строку, @ThomasO за указание на вторую строку и @Juan за то, что я понял, что могу комбинировать строки.
источник
s=" ";p="+";b="|";f="/";n="\n"
наs,p,b,f,n=" +|/\n"
.Питон - 179
Я хотел бы отметить, что я взял некоторые идеи из JPvdMerwe (использование строки для печати один раз, и единственная строка, для которой я не знал, был правильным синтаксисом в Python).
источник
фортран 77 - 484 символа
Нет смысла в предоставлении "несобственной" версии. И обратите внимание, что уценка не ладит с требованиями отступа.
Я попробовал фортран из-за встроенных циклов, предусмотренных в
write
заявлении. Очевидно, они помогают, но не суммируют достаточно, чтобы убить словесности языка. Это может быть уменьшено с помощью ввода произвольной формы.Проверка:
К счастью, в спецификации не указано, какой размер должен выглядеть:
но другие странные размеры разумны:
источник
Мое собственное решение, так как оно уже было забито Python до смерти:
Windows PowerShell, 183
источник
PostScript, 237
История:
def
Еще несколько вещей, которые появлялись часто.def
с.def
который сохраняет еще два байта.[
и]
имеют хорошие свойства при использовании в качестве переменных :-). Благодаря KirarinSnow .def
s. Еще раз спасибо :-).источник
Рубин 1.9,
172 165162 персонажаисточник
Рубин - 423 символа
На самом деле не хочу делиться этим, так как это ужасный счет, но, поскольку я написал, это может быть так же хорошо.
Вероятно, может быть немного уменьшено, но я сомневаюсь, что этот метод грубой силы будет подходить где-то рядом с приличным количеством символов, поэтому я не могу быть обеспокоен.
источник
PHP,
401392382363 символов:Первоначально я сделал это, чтобы увидеть, как быстро я смог сделать это в PHP, так как знал, что это будет довольно долго. Я уверен, что это может быть уменьшено, но не слишком много, учитывая, что PHP не имеет много горячих клавиш.
Валидация:
http://codepad.viper-7.com/ftYYz9.php53
Версия без поддержки: http://codepad.viper-7.com/4D3kIA
источник
Perl, 163
Perl 5.10 или более поздней версии, запустить с
perl -E '<code here>'
Перераспределенная версия:
источник
Perl,
269 269 262 256 245 244 237 226 228 224217 символовОсновная идея состоит в том, чтобы делать все с подстановками регулярных выражений. Поскольку два используемых символа (+ и /) являются специальными символами и часто встречаются в регулярных выражениях, стоит использовать другие символы и подставить их для печати.
Чуть более разборчивая версия:
В некотором смысле я обманываю, используя $ b в качестве счетчика в промежуточном цикле - вместо этого я могу добавить пробел в цикле над $ a, а затем использовать регулярные выражения вместо этого цикла - но я собираюсь допустить это небольшое отклонение из чистого регулярного выражения.
Без сомнения, какой-то страшный человек может превратить это в гораздо более короткий сценарий sed.
источник
y
fortr
не очевидно, а что касается пути "while", может идти до или после ...Lua,
294302292 байтаGolfed:
Ungolfed:
источник
or 6
послеread()
вызова, который сохраняет четыре байта :-)(...)
этим у меня больше не работает на Lua 5.1.4.Холст , 63 байта
Попробуй это здесь!
источник