задача
Учитывая непустую строку строчных букв ASCII a
- z
, возьмите ее первый символ и:
- Окружите его квадратом копий второго персонажа,
- Окружите это алмазом копий третьего персонажа,
- Окружите это квадратом копий четвертого персонажа ...
… Чередование между квадратными и алмазными границами до конца струны. Пустое пространство между границами должно быть представлено пробелами ASCII ( ).
Чтобы добавить квадратную границу, нарисуйте квадрат точно вокруг всего текущего «рабочего массива»:
sssssssssss
t s t s
t t s t t s
t t s t t s
t aaa t s t aaa t s
t aca t => st aca ts
t aaa t s t aaa t s
t t s t t s
t t s t t s
t s t s
sssssssssss
Чтобы добавить ромбовидную границу, нарисуйте ромбовидную форму по центру, которая касается самого внешнего квадрата по диагонали , но не ортогонально :
s
s s
s s
s s
s s
s s
s s
wwwwwwwwwww s wwwwwwwwwww s
w o w s w o w s
w o o w s w o o w s
w o o w s w o o w s
w o eee o w s w o eee o w s
wo eme ow => s wo eme ow s
w o eee o w s w o eee o w s
w o o w s w o o w s
w o o w s w o o w s
w o w s w o w s
wwwwwwwwwww s wwwwwwwwwww s
s s
s s
s s
s s
s s
s s
s
Ваша программа должна вывести окончательный массив.
- Каждая строка может содержать любое количество пробелов.
- Вы можете вывести список строк, представляющих строки, или одну строку, разделенную символом новой строки, с необязательным завершающим символом новой строки.
- Начальные / конечные пустые строки запрещены.
- Ведущие колонки пробелов также запрещены.
Это код-гольф . Самый короткий код в байтах побеждает.
Контрольные примеры
Приведенные выше примеры , как ожидается , выходы для cat
, cats
, meow
, и meows
, в порядке чтения. Некоторые другие случаи, заслуживающие рассмотрения:
Для ввода
a
ваша программа должна вывести:a
Для ввода
ab
ваша программа должна вывести:bbb bab bbb
Для ввода
codegolf
ваша программа должна вывести:fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff f l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l ooooooooooooooooooooooooooo l f f l o g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g eeeeeeeeeee g o l f f l o g e d e g o l f f l o g e d d e g o l f f l o g e d d e g o l f f l o g e d ooo d e g o l f fl og ed oco de go lf f l o g e d ooo d e g o l f f l o g e d d e g o l f f l o g e d d e g o l f f l o g e d e g o l f f l o g eeeeeeeeeee g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g o l f f l ooooooooooooooooooooooooooo l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l f fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Ссылочная реализация
Я написал код Джулии, который должен соответствовать выводу вашей программы (по крайней мере, визуально). Попробуйте онлайн!
\r\n
) вместо одного (\n
)?prompt
иconsole.log
. Также вы можете использовать строки шаблонов, которые экономят 2 байта на вызов функции в строках (например,fill(' ')
становитсяfill` `
)S-i-1
доS+~i
, иi%2||o--
вo-=~i&1
.a=Array(D*2+1).fill
.map((_,$,a)=>[...a])
экономит 10 байт.Haskell,
138137136 байтОпределяет функцию,
f
которая возвращает результат в виде списка строк-1 байт благодаря @Lynn
источник
C ++ -
373 366 362359 байт-1 от @TuukkaX, -6 от @Kevin Cruijssen, -4 от импорта, -3 от @Baum mit Augen
http://ideone.com/5y54mx
Примечание. В этом решении точка ('.') Используется в качестве символа "пробел", чтобы сделать пробелы более заметными. Чтобы использовать вместо этого пробел, нужно изменить
S(s,46)
наS(s,32)
. Счет остается прежним.Ungolfed:
Попробуй без игры в гольф
Как использовать:
Выход:
источник
std::vector<S> V
имеет бесполезные пробелы.if(A(i)<=R(k)&&A(j)<=R(k)&&k%2?A(i)==R(k)||A(j)==R(k)
в&&
и||
может быть&
и|
для -3 байта; иint r=R(w.size()-1),...
может стать,int l=w.size(),r=R(l-1),...
аfor(k=0;k<w.size();++k)
затем может статьfor(k=0;k<l;++k)
еще на 3 байта.using S=std::string;
для защиты два байта наtypedef
.Mathematica, 167 байтов
На входе должен быть список символов.
например
источник
JavaScript (ES6), 252 байта
Где
\n
представляет буквальный символ новой строки.источник
JavaScript (ES6), 204
229 238Анонимная функция, возвращающая массив строк
Меньше гольфа
Тест
источник
Ява -
429417 байтКредит принадлежит @Anedar, так как это повлияло на структуру этого ответа
Ungolfed:
источник
JavaScript (ES6), 322 байта
Неконкурентоспособный
Менее Голфед
Тест с
Легкий выигрыш, опуская ведущие
var L=
и.join("\n")
в операторе возврата для -17 байтов, но введите их обратно, чтобы проверить код : DЭто двухпроходный ответ, оценивающий width (
w
), необходимый для построения квадрата или алмаза, перед построением точекP
во втором проходе с использованием поворота и перемещения.d
это размер (высота или ширина) не повернутого квадрата перед сдвигом или вращением.Вращение и масштабирование на √2 детали из Mathematica ответа . Использование тегового шаблона строки с первого ответа в этой теме . Спасибо обоим за обучение. Голосует за вопрос и ответы.
источник
Powershell,
269245238 байтРазоблаченный, объясненный и проверенный сценарий:
источник