Отказ от ответственности: это не моя задача, но ThisGuy сказал, что я в порядке, чтобы опубликовать.
Иногда я хочу сделать слово в противоположность, как будто happiness
идет unhappiness
. К сожалению, когда это происходит, мой мозг иногда становится пустым. И вот однажды, после еще одного такого случая, я подумал про себя: «Для этого и программы!»
Поскольку в английском языке есть много исключений, я создал список, который содержит префикс для начальной буквы
q or h -> dis- (honest -> dishonest)
l -> il- (legal -> illegal)
m or p -> im- (mature -> immature)
r -> ir- (responsible -> irresponsible)
everything else -> un- (worthy -> unworthy)
задача
Задавая входные данные в виде строки, сделайте строку отрицательной и выведите результат. Вы можете предположить, что все приведенные данные будут соответствовать приведенным выше правилам. Материалы могут быть программами или функциями, а не фрагментами.
вход
Одна строка, взятая либо в качестве параметра, либо из STDIN
Выход
Отрицательная форма этой строки, соответствующая приведенным выше правилам
Как победить
Это код-гольф, поэтому выигрывает самый короткий код
q
безu
?qadi
,qat
, вышеупомянутыйqi
,qirsh
иqwerty
. (Я много играю в Эрудит)q
всегда следует au
или нет?u
Ответы:
Python, 55 байт
Попробуйте онлайн!
Нам нужно обработать 7 разных начальных букв:
g
->dis
,h
->dis
,p
->im
,m
->im
,l
->il
,r
->ir
и все остальное ->un
Мы можем хранить все эти отрицания в одной строке и извлекать правильную через разрезание:
Теперь нам нужно рассчитать начальный индекс
i
.'rlmphq'.find
возвращает 0 для'r'
, 5 дляq
и -1 для всего, что не содержится в строке. Чтобы получить необходимое значение от 0 до 6, нам все равно нужно вычесть возвращаемое значение из 5, что приведет к следующему коду:источник
ddiiiiuiimmlrnss
иrlmphq
номер5
, почему срез пропускает 7?GNU sed , 50 байтов
Включает +1 для
-r
Ничего фантастического. Используется
&
в замене, чтобы объединить несколько замен иt
пропустить последнюю, если произойдет одна из первых замен.Попробуйте онлайн!
источник
Желе , 30 байт
Попробуйте онлайн!
Как?
Обратите внимание , что повторяется
r
в“qmlrrhp”
в 5 - индекс, который, если ссылки, приведет к предваряяun
, поэтому он может одинаково хорошо быть ничем иным,h
илиp
.источник
/// ,
5956 байтПопробуйте онлайн!
Ввод идет после самого последнего
#
.Как это устроено:
Я сделал оптимизацию, которая уменьшила размер до 56 байт, но так как это усложняет вещи, я объясню оригинальную версию, а затем объясню гольф.
Интуиция: Задача достаточно проста, просто добавьте минус в зависимости от начала слова. Однако в /// вы не можете просто
concatenate if [...]
, вы можете только заменить что-то по определенной схеме. Таким образом, в этой программе положительные начала слова заменяются отрицательными начала слова.#
Было добавлено , чтобы убедиться , что когда - то было добавлено новое начало, не будет добавлено не более новые начинания. Это#
также позволило сделать «все остальное: un».Гольф включает в себя новую замену в он начинающийся:
/^/\/\/#/
. Это заменяет все^
на//#
, что было распространено в оригинальной версии.источник
TI-Basic, 104 байта
Требуются все заглавные буквы.
Объяснение:
источник
JavaScript (
716461 байт)w=>({q:a='dis',h:a,l:'il',m:b='im',p:b,r:'ir'}[w[0]]||'un')+w
Редактирование:
charAt(0)
->[0]
)источник
w[0]
вместоw.charAt(0)
?w=>...
? Фактическое определение функции будет включатьlet f=w=>...
? (Вероятно, где-то в FAQ.)w=>({q:a='dis',h:a,l:'il',m:b='im',p:b,r:'ir'}[w[0]]||'un')+w
На 3 байта меньшеПакет, 114 байт
Проверяет первый символ слова в списке пользовательских префиксов и, если это так, меняет префикс по умолчанию на
un
. Специальный корпусqu
возможен при стоимости 21 байт.источник
Haskell, 71 байт
Пример использования:
f "legal"
->"illegal"
. Попробуйте онлайн!Создайте таблицу поиска пар префикс / замена для поиска первого символа входной строки со значением по умолчанию,
"un"
если оно не найдено.источник
Сетчатка , 54 байта
Объяснение:
Впервые я использовал Retina. Это довольно аккуратный язык.
Попробуйте онлайн!
источник
Javascript,
727166616059 байтw=>('dis....il.im...im.dis.ir'.split('.')[w.charCodeAt(0)-104]||'un')+w
w=>'un.dis.dis.il.im.im.ir'.split('.')['qhlmpr'.indexOf(w[0])+1]+w
Да, это все еще дольше, чем существующее решение. :)В случае, если это требует какого-либо объяснения, я использую пары q / h и m / p, комбинируя их индекс в строке поиска с модом 4, а затем использую его как поиск в массиве префиксов.
источник
search
вместоindexOf
. И еще немного, я думаю, используя&
вместо%
search
. Не могу понять, как заставить & trick работать - было бы идеально, если бы в моем массиве было всего 4 элемента.C
109107 байтПопробуйте онлайн!
источник
Mathematica, 107 байт
Объяснение:
StartOfString~~x:#:>#2<>x&
является чистой функцией, где первый аргумент является строковым шаблоном для сопоставления в начале строки, а второй аргумент является строкой, предшествующей сопоставлению. Возвращает отложенное правило, пригодное для использования вStringReplace
. Затем это применяется к каждой из пар, что{{"q"|"h","dis"},{"l","il"},{"m"|"p","im"},{"r","ir"},{_,"un"}}
приводит к списку правилНаконец этот список передается в
StringReplace
который дает оператор на строки.источник
PHP, 101 байт
Онлайн версия
источник
Excel 78 байт
Я нашел несколько близких соперников, используя разные методы, которые набрали 81 байт:
И 84 байта:
источник
REXX, 78 байт
Сохраняет несколько байтов, отвечая в верхнем регистре, например, potent -> IMPOTENT.
источник
Perl, 49 + 1 (
-p
флаг) = 50 байтовС помощью:
Попробуйте онлайн .
источник
Clojure, 65 байт
Ну, это скучно ... но я не мог сделать это короче. По крайней мере, очень мало пробелов.
источник
OCaml, 85
Анонимная функция, использует сопоставление с образцом на своем первом символе.
источник