Введение
Мы все знаем крутой S (также известный как Супермен S, Stüssy S, Super S, Skater S, Pointy S, Graffiti S и т. Д.): Миллиарды школьников по всему миру нарисовали этот S и сразу почувствовали гордость за себя. Если вы забыли или у вас было совсем не крутое детство , вот изображение этой классной буквы S:
Учитывая масштабный коэффициент в n
качестве входных данных (где ), выведите Cool S в ASCII art.
Как нарисовать это
Со страницы Википедии на Cool S:
Выход
Cool S когда n
= 1 это:
^
/ \
/ \
/ \
| | |
| | |
\ \ /
\ \/
/\ \
/ \ \
| | |
| | |
\ /
\ /
\ /
v
А для разных значений n
вы просто увеличиваете время вывода n
. Например, n
= 2:
^
/ \
/ \
/ \
/ \
/ \
| | |
| | |
| | |
| | |
\ \ /
\ \ /
\ \/
/\ \
/ \ \
/ \ \
| | |
| | |
| | |
| | |
\ /
\ /
\ /
\ /
\ /
v
Обратите внимание, что вертикальные секции в два раза длиннее, а расстояние между вертикальными линиями в два раза шире.
И когда n
= 3:
^
/ \
/ \
/ \
/ \
/ \
/ \
/ \
| | |
| | |
| | |
| | |
| | |
| | |
\ \ /
\ \ /
\ \ /
\ \/
/\ \
/ \ \
/ \ \
/ \ \
| | |
| | |
| | |
| | |
| | |
| | |
\ /
\ /
\ /
\ /
\ /
\ /
\ /
v
Примечание. Хотя это и не обязательно, ваш код также может поддерживатьn
= 0:
^
/ \
\\/
/\\
\ /
v
выигрыш
Самая короткая программа в байтах побеждает.
Λ
Ответы:
Древесный уголь ,
58 53 47 4341 байтПопробуйте онлайн!
Я просто хотел попробовать другой подход, он рисует внешнюю сторону с помощью отражений (спасибо Нейлу за расширение идеи), а затем рисует внутреннюю часть. Поскольку Charcoal имеет
:Left
направление по умолчанию для рисования линий, я максимально использую это направление, чтобы сэкономить несколько байтов, рисуя S горизонтально, например:И тогда мне просто нужно повернуть холст на 90 градусов против часовой стрелки.
источник
Rotate
? Это дает мне представление ...Python 3 ,
255249248209 байт-6 байт благодаря Кевину Круйссену
-1 байт благодаря Кевину Круйссену
-39 байтов благодаря Роду и Джо Кингу
Попробуйте онлайн!
Теперь он обрабатывает n = 0.
источник
o+~d
то,m-d
и другое может быть иrange(o)
может бытьrange(m+1)
, а затем вы можете удалить,o=m+1\n
чтобы сохранить 6 байтов. Хороший ответ, хотя +1 от меня.p(s)\np(s[::-1])
наp(s+q+s[::-1])
: 248 байтовprint
, и больше 4, удалив[]
изjoin([...])
, что составляет 238 байтq.join
в переменной, чтобы сохранить байтq.join
s и пара других вещейДревесный уголь ,
474241 байтПопробуйте онлайн! Ссылка на подробную версию кода. Объяснение: Рисует следующие линии по порядку:
Где
5
текущий символ строкиv^
. В конце первого цикла курсор помещается в точку9
. Затем весь холст вращается, так что можно нарисовать другую половину Cool S. (Холст фактически поворачивается дважды, но это только деталь реализации.)Древесный уголь не поддерживает,
RotateCopy(:Up, 4)
но если бы это было так, это работало бы на 33 байта:источник
Холст ,
363229 байтПопробуй это здесь!
Много манипуляций со стеком. (устаревшее) объяснение:
источник
Python 2 ,
227208207202196181 байтПопробуйте онлайн!
Спасибо Джо Кингу за 1 байт; и затем еще 5 байтов всего (через
n => 2*n
).Работает
n=0
также.источник
C (gcc) ,
379353344334 байтаЯ использовал пару
#define
s для исключения подвыражений и несколько глобальных переменных для связи между внутренними функциями. Основной цикл идет {0,1,2,3,3,2,1,0} для построения S.Спасибо Джонатану Фреху за предложения.
Попробуйте онлайн!
источник
w -r-1
может быть в гольфw~r
.C (gcc) ,
260254 байта-6 байт благодаря потолку .
Попробуйте онлайн!
Спуститься
Мы можем разделить форму на части:
Каждая часть может быть описана числом строк, тремя символами и тремя связями с определенными значениями, которые определяют ширину поля в каждой строке.
Первой итерацией стало:
Вызовы к
g()
макросу очень похожи на то, что таблицу можно построить и зациклить. Ширина поля иногда связана с индексом счетчика, а иногда нет. Мы можем обобщить поле ширины, чтобы бытьF * i + A
, где F - некоторый фактор, чтобы умножитьсяi
, и A - некоторое значение, чтобы добавить к ширине. Таким образом, последняя ширина четвертого вызова выше будет-2 * i + t
, например.Таким образом мы получаем:
В итоге он был не намного короче затянутой версии
g()
вызывающей, но короче - короче.источник
Java, 435 байт
Сама функция занимает 435 байт. Безусловно, есть место для улучшения, «высокого уровня» путем анализа правил о том, где разместить какого персонажа (в конце S - точечно-симметричный), и «низкого уровня», путем классического игры в гольф (возможно, вытаскивая другую переменную или объединяя две из-
for
петли). Но это первый выстрел с этим довольно негольфичным языком:источник
t=...
немного меньше, чтобы сэкономить байты. Если у вас есть какие-либо вопросы о внесенных мною изменениях, дайте мне знать. :)PHP ,
378374378377376335331328 328 байт-3 байта, благодаря manatwork
-4 байта, использовал str_pad вместо str_repeat
-41 байт, благодаря предложениям manatworks
-1 байт, объединены два приращения в + = 2
-1 байт, убрал лишнее \
-4 байта, повторяя один раз.Забыл, мне нужно было передать строку в функцию, так что это больше байтовРаботает и для n = 0.
Попробуйте онлайн!
источник
'v'
в финалеecho
.$i>0
и$m>0
может быть написано просто как$i
и$m
..
конкатенацию после,
. Попробуйте онлайн!Python 3 ,
321307 байтСпасибо @EsolangingFruit за сохранение 14 байт
Попробуйте онлайн!
Python 2 , 303 байта
Попробуйте онлайн!
источник
'\\','/'
на второй строке,*'\/'
чтобы сохранить три байта.print
input()
автоматическиeval()
выводится строка, поэтому вы также можете пропуститьint()
вызов.for l in L:print(*l,sep="")
(я не думаю, что в Python 2 есть эквивалент).