В месте захоронения Астурийского короля Силоса есть надпись, которая гласит: SILO PRINCEPS FECIT ( это сделал король Силос ).
Первая буква находится в самой середине, и оттуда читается, идя в любом недиагональном направлении, исходящем наружу. Последнее письмо находится на всех четырех углах. В этом задании вы обобщите процесс их создания.
вход
Строка ( или эквивалент ) и целое число. Вы можете сделать следующие предположения относительно ввода:
- Строка будет иметь нечетную длину.
- Целое число будет нечетным числом от 1 до 1, которое в два раза меньше длины строки.
Выход
Inscriptio labyrinthica для строки, используя целое число для высоты или ширины (см моделей для примеров высоты). Вывод должен состоять из каждой буквы без пробелов, по умолчанию перевод строки в вашу систему / язык.
Контрольные примеры
Обратите внимание, что ввод 1 или (длина * 2 - 1) приведет к горизонтальному или вертикальному палиндрому.
Input: FOO, 3 Input: BAR, 1 Input: BAR, 3 Input: BAR, 5
Output: OOO Output: RABAR Output: RAR Output: R
OFO ABA A
OOO RAR B
A
R
Input: ABCDE, 5 Input: ABCDE, 3 Input: *<>v^, 5
Output: EDCDE Output: EDCBCDE ^v>v^
DCBCD DCBABCD v><>v
CBABC EDCBCDE ><*<>
DCBCD v><>v
EDCDE ^v>v^
счет
Это код-гольф, поэтому выигрывает самый короткий ответ в байтах. Стандартные лазейки запрещены.
Ответы:
J , 27 байт
Попробуйте онлайн!
Пример прояснит подход высокого уровня.
Рассмотреть возможность
'ABCDE' f 3
Мы замечаем, что то, что мы ищем, это просто таблица "перекрестного сложения"
1 0 1
и3 2 1 0 1 2 3
, которая выглядит следующим образом:Затем вытащить эти индексы из исходной строки:
[{~
.Весь остальной код является просто скучной арифметикой и использованием
i:
для конструирования аргументов1 0 1
и3 2 1 0 1 2 3
.источник
Желе , 12 байт
Попробуйте онлайн!
Диадическая ссылка, принимающая строку в качестве левого, а высота в качестве правого аргумента. Возвращает строку с разрывом строки. Если список строк был приемлем для вывода, я могу удалить окончательный
Y
сохранение байта. Интересно, что оригинальный «SILO PRINCEPS FECIT» выглядит как искусство 3D-бриллианта ASCII, когда я смотрю на него на TIO.объяснение
источник
R ,
939187 байт-2 байта благодаря Джузеппе. -4 байта путем ввода ширины, а не высоты, как это разрешено OP.
Попробуйте онлайн!
Принимает ввод как вектор символов. Ключевая часть есть
s[1+outer(abs(-w:w),abs(-h:h),'+')]
.abs(-w:w)
abs(-h:h)
abs(-h:h)
outer(abs(-2:2), abs(-1:1), '+')
(тогда мы должны добавить 1, потому что R индексируется как 1). 0 в центре - то, куда должна идти первая буква ввода.
Остальное форматирование.
источник
Древесный уголь ,
2519 байтПопробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Нарисуйте четверть надписи.
Подумайте, чтобы завершить надпись.
источник
Japt
-R
,1916 байтПопытайся
источник
Wolfram Language (Mathematica) ,
5754 байтаПопробуйте онлайн!
Принимает ширину в качестве ввода.
источник
g
не оценивается при первом вызове функции. Попробуйте онлайн!Print/@f[...]
->Print/@Transpose[g[...]]
->Transpose[Print@g[...]]
, по которомуg
определяется время.Japt
-R
, 10 байтБерет ширину вместо высоты.
Попытайся
Псевдокод (U - строка, V - целое число):
источник
Perl 6 ,
6867 байтПопробуйте онлайн!
источник
Python 3, 104 байта
Я не играл в гольф так долго ... Я уверен, что это может быть короче.
Детали
Этот код определяет функцию, которая принимает два аргумента (строку и высоту) и выдает результат при стандартном выводе.
Индекс в строке - это манхэттенское расстояние от центра сетки. Для сетки ширины
w
и высотыh
, расстояние для ячейки в(x, y)
ISabs(x - (w - 1) / 2) + abs(v - (h - 1) / 2)
.Ширина сетки должна быть такой, чтобы расстояние между углами в Манхэттене (скажем,
(0, 0)
) было на единицу меньше длины строки. Подставляя(0, 0)
в вышесказанное и упрощая, мы находим, что ширина просто2 * len(s) - h
.Код
Попробуйте онлайн!
источник
05AB1E , 10 байтов
Попробуйте онлайн!
источник
Pyth , 19 байт
Попробуйте онлайн!
источник
Python 2 , 95 байт
Попробуйте онлайн!
источник
Stax ,
119 байтЗапустите и отладьте его
Он принимает ширину и исходную строку в указанном порядке.
источник
C # (.NET Core) , 146 байт
Попробуйте онлайн!
Самый длинный ответ так долго. :-) Он использует расстояние Манхэттена до центра площади. Там должен быть более короткий путь, хотя.
источник
Tcl ,
188170162 байтаПопробуйте онлайн!
Кажется, в TCL есть миллион неудачных способов решить эту проблему. Это не худший из них.
Сохранение минимум 18 байт путем преобразования в лямбду (может сохранить до 13 больше, если допустимо возвращаемое значение списка строк)
Сохранено еще 8, поскольку итератор lmap служит дополнительной константой
источник
Холст , 18 байт
Попробуй это здесь!
Canvas не выполняет подстрок, поэтому мне нужно обработать его как художественный объект и получить подраздел таким образом. Я чувствую, что это стоит мне 2 байта, но что поделаешь.Похоже, что это на самом деле не работает так, как я думал: функции палиндромизации Canvas отражают определенные символы (например, V отражается вертикально в ^), и я не могу точно отключить это ... о, я думаю
источник
Рубин , 65 байт
Попробуйте онлайн!
источник