Задний план
Празднование выпуска Dyalog APL 16.0 , где решением этой проблемы является {⊢⌺(≢⍵)⊢⍵}
Объяснение
задача
Если задана печатаемая строка ASCII нечетной длины n , сделайте квадрат размером n × n со строкой, центрированной по горизонтали, с дублированием для центрирования по вертикали и с акростикой той же строки в каждой строке и столбце. Обратите внимание, что все строки, кроме центрированных, будут обрезаны, чтобы сохранить размер квадрата n × n .
Объяснение вашего кода будет высоко ценится.
правила
- У вас могут быть пробелы и символы новой строки (включая нижний правый треугольник)
- Вы можете вернуть список строк
Пример использования строки ABXCD
:
n равно 5. Сначала мы рисуем две центрированные строки, одну горизонтальную и одну вертикальную:
┌─────┐ │ A │ │ B │ │ABXCD│ │ C │ │ D │ └─────┘
(Для ясности добавлена ограничительная рамка 5 × 5)
Затем мы размещаем всю возможную акростику по горизонтали и вертикали:
AB ┌─────┐ │ ABX│CD │ ABXC│D │ABXCD│ A│BXCD │ AB│XCD │ └─────┘ CD D
Наконец, мы возвращаем только то, что находится внутри ограничительной рамки:
ABX ABXC ABXCD BXCD XCD
Контрольные примеры
World
:
Wor
Worl
World
orld
rld
mississippi
:
missis
mississ
mississi
mississip
mississipp
mississippi
ississippi
ssissippi
sissippi
issippi
ssippi
Pneumonoultramicroscopicsilicovolcanoconiosis
:
Pneumonoultramicroscopi
Pneumonoultramicroscopic
Pneumonoultramicroscopics
Pneumonoultramicroscopicsi
Pneumonoultramicroscopicsil
Pneumonoultramicroscopicsili
Pneumonoultramicroscopicsilic
Pneumonoultramicroscopicsilico
Pneumonoultramicroscopicsilicov
Pneumonoultramicroscopicsilicovo
Pneumonoultramicroscopicsilicovol
Pneumonoultramicroscopicsilicovolc
Pneumonoultramicroscopicsilicovolca
Pneumonoultramicroscopicsilicovolcan
Pneumonoultramicroscopicsilicovolcano
Pneumonoultramicroscopicsilicovolcanoc
Pneumonoultramicroscopicsilicovolcanoco
Pneumonoultramicroscopicsilicovolcanocon
Pneumonoultramicroscopicsilicovolcanoconi
Pneumonoultramicroscopicsilicovolcanoconio
Pneumonoultramicroscopicsilicovolcanoconios
Pneumonoultramicroscopicsilicovolcanoconiosi
Pneumonoultramicroscopicsilicovolcanoconiosis
neumonoultramicroscopicsilicovolcanoconiosis
eumonoultramicroscopicsilicovolcanoconiosis
umonoultramicroscopicsilicovolcanoconiosis
monoultramicroscopicsilicovolcanoconiosis
onoultramicroscopicsilicovolcanoconiosis
noultramicroscopicsilicovolcanoconiosis
oultramicroscopicsilicovolcanoconiosis
ultramicroscopicsilicovolcanoconiosis
ltramicroscopicsilicovolcanoconiosis
tramicroscopicsilicovolcanoconiosis
ramicroscopicsilicovolcanoconiosis
amicroscopicsilicovolcanoconiosis
microscopicsilicovolcanoconiosis
icroscopicsilicovolcanoconiosis
croscopicsilicovolcanoconiosis
roscopicsilicovolcanoconiosis
oscopicsilicovolcanoconiosis
scopicsilicovolcanoconiosis
copicsilicovolcanoconiosis
opicsilicovolcanoconiosis
picsilicovolcanoconiosis
icsilicovolcanoconiosis
Подтверждения
Спасибо dzaima , Leaky Nun , Mr. Xcoder за все, кроме самой идеи этого вызова.
Ответы:
Python 2 , 60 байт
Попробуйте онлайн!
источник
MATL , 8 байт
Попробуйте онлайн!
объяснение
источник
Retina ,
7059 байтПопробуйте онлайн! Редактировать: Сохранено 11 байтов с некоторой помощью @MartinEnder. Объяснение: Первый этап повторяет ввод один раз для каждого символа, дополняя его соответствующим образом в каждой строке, чтобы получить сдвиг. Последняя стадия затем удаляет 25% с каждой стороны, чтобы получить желаемый результат.
источник
n/2
пробелами влево и вправо (используя что-то вроде(..)+.
->$#1$* $&$#1$*
с завершающим пробелом), а затем просто сделал,!&`...
где...
совпаденияn
точно совпадают сn
символами.$*sp
?Java 8,
120103 байта-17 байт благодаря @ OlivierGrégoire .
Объяснение:
Попробуй это здесь.
источник
i=l/2+1
иi-->1
иfor(;i<l
сохранить байт.s->{int l=s.length(),i=l/2;while(i-->0)s=" "+s+" ";while(++i<l)System.out.println(s.substring(i,l+i));}
(103 байта). Единственное существенное изменение заключается в том, что строка с пробелами генерируется раз и навсегда, а не «на лету» (и, конечно, печать вместо возврата).Haskell,
6462 байтаПопробуйте онлайн! Как это работает:
источник
SWI Пролог, 234 байта
Может быть, попробуйте онлайн здесь: http://swish.swi-prolog.org/p/hEKigfEl.pl
NB.
_
здесь, так как оно демонстрирует, что оно работает и не влияет на количество байтов.Примеры работы на Swish:
Подход, в основном это первое, что я мог бы заставить работать вообще, и, несомненно, опытный пользователь Prolog мог бы значительно сократить его:
Объясненный и прокомментированный код (может не выполняться), чтение
superacrostic()
вниз, затемhelper()
основной текст , затемhelper()
базовый вариант:источник
05AB1E , 11 байт
Попробуйте онлайн!
объяснение
источник
JavaScript (ES6), 75 байт
источник
APL (Dyalog Unicode) , 10 символов = 22 байта
Попробуйте онлайн!
{
…}
Анонимная функция, где аргумент представлен ⍵⊢
предоставить покрытую площадь, когда⌺(
...)
трафарет размера≢
длина⍵
Аргумент⊢
на⍵
АргументЭто работает, позволяя каждому символу образовывать середину строки с той же длиной, что и ввод, с заполнением влево или вправо по мере необходимости. Взять например
ABXCD
:Строка имеет пять символов, поэтому трафарет будет иметь «отверстие» шириной пять символов.
┌──↓──┐
Трафарет отверстие со средним маркером│ ABX│CD
LETA
быть в середине ,│ ABXC│D
то иB
│ABXCD|
т.д.A|BXCD |
AB|XCD |
└──↑──┘
конечное положение трафаретаисточник
PHP , 98 байт
Попробуйте онлайн!
источник
JavaScript (ES8),
666362 байтаВозвращает массив.
Попытайся
объяснение
Анонимная функция, принимающая строку в качестве аргумента через параметр
s
.Разделить строку на массив отдельных символов.
Получить длину строки и назначить ее переменной
l
.Карта по массиву, передавая каждый элемент через функцию, где
x
находится индекс текущего элемента.Для каждого элемента возвращайте исходную строку с пробелами в начале, пока ее длина не будет в 1,5 раза больше ее исходной длины.
Получить подстроку длины,
l
начиная с индекса текущего элемента.источник
V ,
14, 11 байтовПопробуйте онлайн!
3 байта сохранены благодаря @nmjmcman!
HexDump:
Оригинальный подход (18 байт):
Объяснение:
источник
ê
. Спасибо :)PowerShell Core , 68 байт
Попробуйте онлайн!
Неискушенное объяснение
источник
[($_..($_+$L))]
?(
не идет, он-join ($Padding + $Text)[0,1,2,3,4]
выбирает несколько символов из строки дополнения для строки вывода, и объединяет их в строку для более короткого пути.SubString()
. и он генерирует заполнение на месте и диапазон символов на месте. К моему ответу добавлено полное объяснение негольфом.Japt ,
191714 байтовСохранено 5 байтов благодаря @ETHproductions и @Shaggy
Проверьте это онлайн!
-R
добавлен флаг для объединения с новыми строками (видимость)объяснение
источник
Sp½*Ul
, но я не думаю, что есть один атм ... Кстати, вы обычно можете перейтиsXX+Y
наtXY
(s == .slice
,t == .substr
)Древесный уголь , 26 байт
Попробуйте онлайн! Ссылка на подробную версию кода.
источник
Желе , 11 байт
Попробуйте онлайн!
Как это работает
источник
QBIC , 32 байта
Чувак, мне пора добавить
space$
в QBIC ...объяснение
Пробный прогон
источник
Mathematica, 88 байт
источник
Хаскелл ,
8670 байтЭто (все еще) слишком долго, но спасибо @bartavelle за напоминание, что вывод списка строк тоже приемлем!
Попробуйте онлайн!
источник
Python 3 , 68 байт
Попробуйте онлайн!
источник
PowerShell ,
133119 байтПопробуйте онлайн!
Ungolfed
источник
Python 2 ,
76 7473 байта-1 благодаря @FelipeNardiBatista
Конечно, не такой короткий, как другой ответ Python, но стоит попробовать совершенно другой метод:
Попробуйте онлайн!(с 74-байтовой версией)
Это сначала генерирует полную строку, а затем разрезает ее по размеру квадрата.
объяснение
источник
(2*x+~i)
сохранить байтJ , 19 байт
Попробуйте онлайн!
объяснение
источник
''
заменой.C # (.NET Core) , 101 байт
В основном ответ @ KevinCruijssen. Экономит 2 байта, потому что
string.Length
что не нужно (), и еще 2 байта, потому что вторым аргументомstring.Substring()
является длина, а не конец индекса, но затем теряется 2 байта, потому чтоConsole.WriteLine()
он длиннее. У меня была более наивная реализация, но она была вдвое длиннее, так что ...источник
Excel VBA, 68 байт
Golfed
Функция анонимного непосредственного окна VBE, которая принимает входные данные из ячейки
[A1]
и выводит их в непосредственное окно VBEUngolfed
источник
Perl 5 , 53 + 1 (
-n
) = 54 байтаПопробуйте онлайн!
источник