Желе , 14 12 байт
J’ƲœṗZ⁻¦µU⁼
Попробуйте онлайн!
Фон
Начнем с рассмотрения 0-значных индексов входной строки.
H H e H H e l e H H e l l l e H H e l l o l l e H
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
Чтобы получить строки треугольника, мы можем разбить строку перед индексами 1 , 1 + 3 = 4 , 1 + 3 + 5 = 9 и 1 + 3 + 5 + 7 = 16 . Поскольку (n + 1) ² = n² + (2n + 1) , эти суммы являются в точности положительными, идеальными квадратами в списке индексов. Если мы также разбиваем строку до 0 , это так же просто, как разбивать перед всеми индексами на основе 0, которые являются идеальными квадратами.
После разбиения мы получаем следующие строки.
""
"H"
"HeH"
"HeleH"
"HellleH"
"HellolleH"
Далее мы заменим пустую строку в начале всеми символами в первом столбце.
"HHHHH"
"H"
"HeH"
"HeleH"
"HellleH"
"HellolleH"
Задача теперь сводится к проверке того, дает ли обращение всех строк один и тот же массив строк.
Как это устроено
Сначала J
генерирует все основанные на 1 индексы входной строки J
, затем уменьшает их на 1, ’
чтобы получить все основанные на 0 индексы. Ʋ
проверяет все 0-основанные индексы на прямоугольность. Для нашего примера сверху это приводит к следующему логическому массиву.
1 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
Далее мы вызываем œṗ
для разделения входной строки, например,
H H e H H e l e H H e l l l e H H e l l o l l e H
перед всеми 1 (на самом деле, все правдивые элементы). Для нашего примера это приводит к следующему массиву строк.
['',
'H',
'HeH',
'HeleH',
'HellleH',
'HellolleH'
]
Z⁻¦
пожалуй, самая интересная часть этого ответа. Давайте Z1¦
сначала проанализируем более простое .
¦
это редкий быстрый. Он потребляет две ссылки из стека, в частности, 1
и Z
в этом случае. Первый Z
применяется к его аргументу: массив строк из ранее. Z
является атомом почтового индекса и читает массив строк / массив символов 2D по столбцам, получая
['HHHHH',
'eeee',
'Hlll',
'ell',
'Hlo',
'el',
'Hl',
'e',
'H'
]
То, что раньше было левой стороной входной строки и первым столбцом массива строк, теперь становится первой строкой .
Теперь ¦
заглядывает 1
и находит единственный индекс: 1 . Таким образом, первая строка в исходном массиве строк заменяется первой строкой в возвращаемом значении Z
; Строки с другими индексами остаются без изменений.
['HHHHH',
'H',
'HeH',
'HeleH',
'HellleH',
'HellolleH'
]
Давайте назовем этот массив .
Мы использовали Z⁻¦
вместо Z1¦
, но это не имеет никакого значения: ⁻
сравнивает строковый массив с входной строкой для неравенства, получая 1, так как они не равны. Разница между ними в том, что Z⁻¦
это двоично, потому что ⁻
позволяет нам писать œṗZ⁻¦
вместо œṗ¹Z1¦
. Это связано с тем, что dyad ( œṗ
), за которым следует monad ( œṗ¹Z1¦
), является форком (монада применяется к аргументу цепочки / входной строке, а возвращаемое значение передается в качестве правильного аргумента œṗ
), в то время как диада следует за другой диадой. (или в конце цепочки) является крючком , т. е. его правый аргумент является аргументом цепочки.
Осталось только проверить палиндромность. µ
начинается новая (одноместный) цепью Кто есть аргумент . Вверх ноги атом меняет все строки в A (но не сам), а затем сравнивает результат с А для равенства. Возвращенный логический 1 указывает на полностью палиндромный треугольник; другие строки вернут 0 .U
⁼
Japt ,
252117 байтСохранено 2 байта благодаря @obarakon
Проверьте это онлайн!
Как это устроено
Обратите внимание, что нам не нужно проверять обе стороны; если стороны не совпадают, то по крайней мере один из рядов не является палиндромом.
источник
05AB1E , 18 байт
Использует кодировку 05AB1E . Попробуйте онлайн!
источник
gÅÉ£ÐíQs€¬āÈÏJÂQ*
gÅÉ£
ты хитрая лиса ... Я недооцениваю ихlist-commands.py
Желе ,
1816 байтовПопробуйте онлайн!
Спасибо Джонатану Аллану за тривиальную, но не столь очевидную экономию -2 байта.
источник
JƲ0;œṗ⁸ZḢ$ṭ$ŒḂ€Ạ
J²‘Ṭœṗ⁸ZḢ$ṭ$ŒḂ€Ạ
½
? ТеперьJ
имеет больше смысла ...JavaScript (ES6), 112 байт
t
иu
собрать стороны, чтобы они могли быть проверены в конце.источник
C #, 184 байта
Думал, что решение выглядело хорошо, пока я не добрался до палиндромной части
Безголовая версия:
источник
e=..
на строку цикла for, чтобы сохранить байт? Нет необходимости подсчитывать переводы строки в счетчик байтов, так что я полагаю, что нет.....; i < s;e = f.Substring(s - k)){c+=....
Java 8,
358301 байтВход - это
String
выходboolean
.Объяснение:
Попробуй это здесь.
источник
Желе ,
2021 байт+2 байта - я выпустил глючный код :(
-1 байт - перешел от формовки как нечетных целых чисел к разделению по квадратным индексам
Монадическая ссылка, принимающая список символов и возвращающая
1
(Truthy) или0
(Falsey).Примечание: здесь используется та часть спецификации, которая ограничивает входные данные квадратной длиной.
Попробуйте онлайн! или посмотрите набор тестов .
Это можно упростить до 17 байт , отметив, что если все строки являются палиндромами, то только одна «сторона» нуждается в проверке (
JƲ0;œṗ⁸ZḢ$ṭ$ŒḂ€Ạ
), однако Эрик-аутголфер уже заметил этот факт и использовал его в своем ответе, поэтому я дал им метод построения треугольника, сохраняя его. байт там.Кроме того, это, в свою очередь, может быть улучшено до 16 байтов, если заметить, что разбиение по истинным индексам не имеет значения, если в левом аргументе есть избыток (
J²‘Ṭœṗ⁸ZḢ$ṭ$ŒḂ€Ạ
).Как?
источник
Mathematica, 156 байт
вход
источник
If[<stuff>, True, False]
просто<stuff>
? И я думаю, чтоAnd@@(...)
корочеCount[...,True]==s
, что также означает, что вам не нужно определятьs
как переменную."1202"
и"160625052"
).PHP , 97 байт
Попробуйте онлайн!
источник
Java, 136 байт
Использует
MutableList<Character>
из коллекции Eclipseисточник
Perl 5 , 81 + 1 (
-p
) = 82 байтаПопробуйте онлайн!
Выходы
undef
(т. Е. Пустые, нулевые) для true, любое число для falseисточник
Excel VBA, 87 байт
Функция анонимного непосредственного окна VBE, которая принимает входные данные из ячейки
[A1]
и выводит их в непосредственное окно VBEисточник
Python 2 ,
128118115 байтовПопробуйте онлайн!
источник