Semordnilaps (также известные как гетеропалиндромы, полупалиндромы, полупалиндромы, реверсграммы, mynoretehs, обратимые анаграммы, реверсии слов или анадромы) - это слова, которые также являются словами, когда они пишутся в обратном направлении. Вот несколько примеров:
- Уорд <=> Ничья
- Mined <=> Джинсовая ткань
- Части <=> ремень
Учитывая положительное целое число N (через аргумент функции или STDIN), вернуть / вывести список semordnilaps из этого списка английских слов , которые имеют ровно N букв. Список слов можно сохранить локально на вашем компьютере , как это текстовый файл: w.txt
. Вы также можете получить список из URL, но он будет включен в число байтов.
Правила:
- Палиндромы не семорднилапс! Поэтому слова «полдень», «ротор» и «радар» не следует включать в список.
- Только одно из слов (в паре semordnilap) должно быть включено в список. Следовательно, если в списке присутствует «собака», «бог» не должен быть (не имеет значения, какой из них включен).
- Если нет semordnilaps, выходные данные должны быть пустой строкой, 0, FALSE или что-то еще, что указывает на отсутствие результатов. Функция должна работать, даже если нет результатов.
Это кодовый гольф, поэтому выигрывает самый короткий код в байтах!
Leaderboard
Фрагмент стека в нижней части этого поста создает каталог из ответов а) в виде списка кратчайшего решения для каждого языка и б) в качестве общей таблицы лидеров.
Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:
## Language Name, N bytes
где N
размер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Если вы хотите включить в заголовок несколько чисел (например, потому что ваш результат равен сумме двух файлов или вы хотите перечислить штрафы за флаг интерпретатора отдельно), убедитесь, что фактический результат является последним числом в заголовке:
## Perl, 43 + 2 (-p flag) = 45 bytes
Вы также можете сделать имя языка ссылкой, которая будет отображаться во фрагменте кода:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
Emordnilap
и множественное числоSemordnilap
? ;)Ответы:
Pyth , 23 (18 кодов, 5 необходимых STDIN)
Это довольно простое решение.
J
хранит список слов. Затем мы фильтруем список слов (f J
) по длине слова, являющегося входом (qlTQ
), обратное слово находится в списке (}_TJ
), а обращение слова больше, чем слово (>_TT
). Последнее условие гарантирует,T
что не является палиндромным, и что печатается только одна из пары. Результирующий список печатается.Как работает Pyth, единственный способ открыть файл - это получить его имя в STDIN. Вот почему я насчитал 5 байтов STDIN
w.txt
в моем счете.Пример выполнения:
источник
Рубин, 74 байта
Итерирует по списку, удаляя элементы, избегая палиндромы и выводя как «подчеркнутые», так и «десерты». Используя одно и то же имя переменной для функции, итератор обходит причуду синтаксиса Ruby: даже если
f=i.pop
она вычисляется раньшеf.reverse
, строка не будет анализироваться, если онаf
уже ничего не значит. Я также мог бы использоватьp
.источник
bash
134157118 байтf () { comm -12 <(sort w.txt) <(rev w.txt|sort)|while read w; do ((${#w}==$1))&&[[ $w<$(rev<<<$w) ]]&&echo $w; done; }
Это не серьезная запись, а скорее в ответ на ответ Брайана Баша . Вот как я склонен думать о программировании такого рода вещей в Bash - используя сам Bash как можно меньше, и позволяя встроенным инструментам выполнять всю работу.
источник
&&[[ $w > $(rev<<<$w) ]]&& echo $w
прежнему избегаетsort|tail -1
. При этом, я думаю, вы даже можете отбросить окончательный вид и уникальный, потому что он удаляет палиндромы и выводит только одно из слов.<(sort w.txt)
все в порядке.Питон,
126125120 байтовДовольно простое решение.
источник
k=c[::-1]
. Кроме того, не могли бы вы позвонитьset()
только во второй раз? Я не думаю, что есть повторы в файле?k
(9 для определения плюс 1 для новой строки плюс 1 для пробела), но я бы сохранил только 10 символов (уберите[::-1]
6, но добавьте 1, потому что мне нужен пробел). Оset
, мне нужноJ
быть набором, потому что я удаляю из него использованные слова, чтобы удовлетворить правило отсутствия дубликатаN==len(c)and
экономит место.=
- должно быть==
.CJam,
4847454238 байтПоскольку URL-адрес должен учитываться, я использую тот же сокращатель URL-адреса, что и оптимизатор.
§
Является частью расширенного ASCII, так что каждый символ в коде могут быть закодированы в один байт.Как и в случае с оптимизатором, вам придется использовать интерпретатор Java и запускать его локально из файла, скажем
semordnilap.cjam
, а затемпоэтому ввод задается в качестве аргумента командной строки.
Как это работает (немного устарело):
Результирующая строка автоматически печатается в конце программы.
источник
Ява,
280218 байтПо сравнению с остальной частью соревнования я абсолютно не знаю, хороший ли это результат.
Expanded:
Использует CompareTo () для одновременного игнорирования палиндромов и дубликатов.
источник
Files.readAllLines(Paths.get("w.txt"))
раньше. Это полезный трюк.CJam, 68 байт
Вам нужно скачать отсюда Java-версию компилятора и сохранить приведенный выше код в файле words.cjam (может быть любым именем). Затем запустите код как
Например, для
N = 8
,источник
Node.js, 172 байта
Функция:
Тестирование:
источник
К, 59 байт
Довольно просто. Прочитайте список, создайте обратный список, возьмите их пересечение, отфильтруйте палиндромы, отфильтруйте необходимое количество, отсортируйте и дедуплицируйте пары.
источник
Рубин, 95 байт
объяснение
Integer
.String
(a
).Array
всех слов (без перевода строки).a
.Array
l
.l
.Пустое
Array
возвращается, когда не найдено подходящих слов.источник
Node.js, CoffeeScript, 132 байта
Node.js, 162 байта
Консоль Chrome Dev Tools, 111 байт (на странице загрузки)
Все версии возвращают массив всех Semordnilaps длины
n
.Node.js, 162 байта
Печатает все semordnilaps:
источник
Юлия, 101 байт
Это на самом деле должно работать ...
источник
Mathematica, 105 байт
Иногда импорт автоматически разбивает текст на список строк или обрабатывает его как CSV или TSV. В других случаях Import считывает содержимое файла в строку. Последний сделал импорт для тестовых данных.
источник
BASH
тесты ...
источник