(Первая проблема, пожалуйста, дайте мне знать, если есть какие-либо проблемы с этим.)
Heterogram этого слова , где нет буквы алфавита не встречается более одного раза, и палиндром является фразой , которая является тем же назад и вперед.
Задача здесь состоит в том, чтобы написать кусок кода, который принимает слово (только буквы) в качестве входных данных и выводит, является ли это гетерограммой (правда / ложь). Подвох в том, что программа должна быть палиндромом - читает то же самое вперед и назад. Капитализация здесь не имеет значения, поэтому для правильности гетерограммы не должно быть, например, q и Q. Комментарии не допускаются, и вы не можете размещать строки, содержащие ваш код (или значительную часть кода), чтобы попытаться упростить часть палиндрома: P
Это код-гольф, поэтому выигрывает самый короткий код. Удачи!
РЕДАКТИРОВАТЬ: Parens, скобки или другие символы, которые имеют левую и правую формы, должны быть обращены вспять для части палиндрома. Итак (helloolleh) это палиндром, а (helloolleh (нет). Видимо, это называется удобным палиндромом.
РЕДАКТИРОВАТЬ 2: Вы не получите пустой ввод, ввод с несколькими словами или ввод с символами, отличными от букв. Так что не беспокойся об этом :)
(hellolleh)
действительный палиндром? Аналогично для[]
,{}
и<>
(при необходимости).asdsa
считаться равнымasd\nsa
?Ответы:
Pyth - 11 байт
(Конечные и ведущие пробелы необходимы и учитываются).
Тестовый пакет .
источник
Pyth, 17 байт
Попробуйте это онлайн здесь.
Ведущее пространство необходимо. Я посчитал это и завершающий пробел в подсчете байтов.
Вот разбивка:
источник
.q
в ваших комментариях, но.w
в вашей программе.Питон 3, 125
Основная проблема заключается в том, чтобы сделать обратную часть кода доступной для анализа. Тогда мы можем выпустить ошибку из неопределенных идентификаторов.
источник
<
в>
!Perl, 43 байта
Пример использования:
источник
> <> ,
137131 байтКогда я увидел этот вызов, я подумал, что> <>, наконец, может быть хорошим выбором языка, поскольку, используя его, вы в основном можете игнорировать палиндромы; просто убедиться, что указатель остается только там, где и должен. Хотя это и правда,> <>, к сожалению, делает условия для игры в гольф мучительными (или просто для игры в гольф в целом). Я надеюсь использовать некоторые странные уловки, о которых я думал, чтобы компенсировать это, но вот «быстрый» (не на самом деле, как программный, так и творческий) ответ. Вы можете попробовать это онлайн здесь .
Возвращает 1 для true и -1 для false (я мог бы изменить его на 0, но длина, к сожалению, осталась бы прежней)
Как всегда, дайте мне знать, если это не сработает, и если у вас есть идеи о том, как играть в гольф. Я проверил это на нескольких тестовых примерах, но всегда может быть исключение.
Вот еще одна версия, которая, на мой взгляд, немного умнее, но, увы, на десять байтов больше. Значения Truthy / Falsey на этот раз равны 1 и ошибка (
something smells fishy...
):Объяснение:
Вот код без добавленной части, чтобы сделать его палиндромом. В этом не используются «более умные» приемы, которые я пытался использовать для альтернативной версии, так что это немного проще объяснить (если кому-то интересно объяснение «приемов», я был бы рад дать один , хотя).
Линия 1:
Вот как работает замысловатый swapping (
:{:@=?v$
) - я буду использовать тестовый пример этого стека:[5,1,8,1]
где последний символ - верхний.:{
Вершина стека дублируется:,[5,1,8,1,1]
а стек смещен влево:[1,8,1,1,5]
:@
Верх дублируется:[1,8,1,1,5,5]
затем три верхних значения сдвигаются вправо:[1,8,1,5,1,5]
=?v
Не нужно для этой части объяснения$
Верхнее значение[1,8,1,5]
поменяется местами еще раз , что, если вы заметите, является исходным стеком, сдвинутым один раз (как если бы{
это была единственная команда).Итак, что это делает на английском языке («Слава Богу, он на самом деле объясняет вещи») , проверяет весь стек по верхнему значению и перемещается в точку во второй строке, если какое-либо значение равно верхнему. Эта проверка выполняется пропорционально тому, сколько значений в стеке (
l - 1
гдеl
длина стека), чтобы все значения сравнивались друг с другом.Строка 2:
источник
><>
сам палиндром (просто не удобный)PHP, 126 байт
Вам нужно запустить это с отключенной
short_tags
директивой ini в 5.4 или выше.Первый в мире гольф. Две копии, первая печатает целую кучу мусора с ложным / правдивым результатом:
Эта версия не будет печатать любой жаргон (162 байта):
Запустить из командной строки с
Вероятно, можно играть в гольф немного дальше
источник
?><?
, вы можете использовать//\\
. Это должно снять это требование. И вместо__halt_compiler()
использованияreturn;
return;
это все еще действует.05AB1E, 9 байтов
Попробуйте онлайн.
* вставьте что-нибудь о возвращении к моему самому первому вызову *
Неконкурентный, так как 05AB1E был сделан после этого испытания.
объяснение
источник
Брахилог , 3 байта, вызов языковых постдат
Попробуйте онлайн!
Это одна из немногих программ, которая работает как в Brachylog 1, так и в Brachylog 2. Ссылка TIO на Brachylog 1 для старых времен. Также необычно для Brachylog, это полная программа, а не функция. (Полные программы в Brachylog неявно выводят логические значения, что нам и нужно для этого вопроса.)
Общий принцип заключается в том, что размещение предиката между парой одинаковых заглавных букв является подтверждением того, что текущее значение является инвариантным относительно этого предиката. Поэтому вы часто видите такие вещи, как
AoA
«отсортировано» («инвариант при сортировке»);A↔A
будет (в Brachylog 2) означать «палиндром» («инвариант при обращении») и т. д. Эта программа «инвариантна при удалении дубликатов», то есть «не содержит дубликатов». Действительно удобно, что этот метод определения инвариантности оказывается палиндромом.источник
Брахилог , 3 байта
Попробуйте онлайн!
Предикат успешно выполняется, если входные данные являются гетерограммой, и не выполняется, если это не так.
источник
MATL , 7 байт
Попробуйте онлайн!
Возвращает список [1, 1], если вход является гетерограммой, и [0, 0], если нет.
Объяснение:
источник