Программа должна принимать строку в качестве входных данных и инвертировать согласные в ней, сохраняя порядок гласных. Все буквы будут строчными, поэтому вам не нужно беспокоиться о регистре. Примеры следуют.
Вход:
a test case
.
Согласные здесь естьt,s,t,c,s
. Они должны прийти в обратном порядке, то естьs,c,t,s,t
и вставить обратно в строку в одних и тех же местах , где были расположены предварительно обращенным символы:a sect sate
.Вход:
well-done
. Выход:nedl-lowe
.- Вход:
reverse the consonants
. Выход:setenne sne cohtosarvr
.
Это код гольф, выигрывает самое короткое решение.
Y
следует считать гласным независимо от того, что это и не поменять местами.
Все, что угодно, а также цифры, знаки препинания, кавычки и другие символы ( @#$%^&*(){}[]\|/<>~-_+=`
), могут потенциально появиться на входе.
-[...]
специфично для сетчатки, или специфических для .net регулярных выражений , или это общая черта регулярного выражения , которое я никогда упускать из вида до сих пор?[...&&[^...]]
.<[b..z] - [eiouy]>
или<:Ll - [aeiouy]>
делает разницу междуPython 2, 86 байт
Принимает ввод в виде строки в кавычках. Перебирает ввод, заменяя каждый согласный на
%s
ins
. В кортежеc
хранятся согласные в обратном порядке. Затем форматирование строки заменяет%s
's's
на согласные вc
.Спасибо Sp3000 за проверку согласных, которая сохранила 4 байта по сравнению с перечислением согласных.
источник
Желе ,
2220 байтПопробуйте онлайн!
Как это работает
источник
JavaScript ES6,
82818078 байтСпасли байты благодаря каждому из Мартина и Лаки Нун, и 2 байта Нилу!
тестирование
источник
/(?![aeiouy])[a-z]/g
/(?[_aeiouy])\w/g
работать?_
, это символ, который ОП хочет сохранить на месте.q.onchange=q.onkeydown=q.onkeyup=
просто наq.oninput=
...Python 2, 106 байт
Ожидается ввод
"quotes"
, который, я думаю, разрешен.источник
Пайк, 18 байт
Попробуй это здесь!
или 16 байтов с новой версией:
(Измените так, если for возвращает все строковые выходные данные и имеет строковые входные данные, возвращает строку вместо списка)
Попробуй это здесь!
~c
содержит согласные:bcdfghjklmnpqrstvwxz
источник
GNU sed, 73
Оценка включает +1 для
-r
флага, переданного в sed.Ideone.
Повторно переключает первый и последний нижний регистр согласных и преобразует их в верхний регистр, пока не останется совпадений. Затем преобразуйте всю строку обратно в нижний регистр.
источник
J, 53 байта
Возможно, не самый лучший способ, но я хотел использовать,
C.
поскольку это можно решить с помощью перестановок.использование
объяснение
источник
MATL,
182221 байт1 байт сохранен благодаря @Luis
К сожалению, самая длинная часть этого - получение списка согласных (
2Y211Y2'y'hX-
).Попробуйте онлайн!
объяснение
источник
tt2Y211Y2'y'hX-m)P5M(
Perl 5 (58 + 4 = 62 байта)
+4 штраф за запуск с
-0777
флагом, который переводит Perl в режим slurp для правильной обработки новых строк.Принимает ввод через STDIN и печатает в STDOUT.
объяснение
источник
JavaScript (ES6), 72 байта
Расщепление
/([^\W\d_aeiouy])/
приводит к тому, что согласные попадают в нечетные записи в массиве. Затем достаточно переключить эти записи с помощью эквивалентной записи с обратным отсчетом от конца массива и объединить результат вместе.источник
JavaScript (ES6), 57
70Редактировать Удивительные 20% экономии Thx @Neil
Поздно на вечеринку, но, кажется, все люди javascript что-то пропустили
Тест
источник
c.pop()
.Perl 5,
926855 байтовСохранено 37 байт благодаря помощи @manatwork . ;-)
Перевод решения @Lynn Python для Perl.
источник
g
этом поможет некоторая « » сила:@s=split//;
→@s=/./g;
иfor(@s){push@a,$_ if(/[^\Waeiou]/);}
→@a=/[^\Waeiou]/g;
. Я имею в виду,m//
сg
модификатором возвращает массив всех совпадений.@b=@a=…
. Кроме того ,for
имея один оператор в блоке (в этом случае;
не нужно после этого), вы можете преобразовать его в модификатор заявления и запасные ограничители:print$_~~@b?pop@a:$_ for/./g
. (Yepp, извините, пропустил это: нет необходимости хранить@s
значение в переменной.)Pyth,
26252423 байтаТестирование.
источник
Юлия, 53 байта
Это принимает массив символов в качестве входных данных и инвертирует его согласные на месте. Попробуйте онлайн!
Кредит идет к @ Sp3000 для проверки согласного нижнего регистра.
Как это работает
i=find(...,s)
возвращает все индексы s, для которых предикат ... возвращает true и сохраняет их в переменной i .c->'}'>c∉"aeiouy"<"$c"
выполняет три теста и возвращает true, если и только если все они положительны.'}'>c
проверяет, стоит ли символ c перед { ."aeiou"
проверяет , является ли строка с приходит после того, как а .c∉"aeiouy"
проверяет, что с не является гласным.Наконец,
s[i]
выдает все согласные иs[flipud(i)]=s[i]
присваивает их позициям в s, которые соответствуют обратным индексам в i .источник
∉
)?Ява,
319305261188 байтБлагодарим @ Leaky Nun за помощь в этом :-)
Старый:
Вдохновение взято отсюда ❤
Ungolfed
источник
0
в качестве специального символа (null
гарантированно не будет в строке), и вы можете проверить его поs[i]<1
(нет отрицательного символа)char
тебя на куски. :)Рубин,
5350 байт-3 байта от @manatwork
Попробуй здесь
источник
Python 2,
10398100 байтПорт моего ответа JavaScript. Изменить: 5 байтов сохранены благодаря @ Деннис ♦, из которых мне быстро пришлось потратить две фиксирующие цифры.
источник
R, 120 байтов
Новый ответ:
принимает символьную строку как х
Старый ответ ниже (110 байт) был плохой формой с моей стороны, что просто изменило согласные:
источник
APLX, 31 байт
⎕a~'aeoiuy'
строчные буквы без гласныхt←⍞
сохраняют ввод символов как tc←(
…)∊
сохраняют логическое «согласный?» поскольку ct/⍨
извлекают (согласные) из t⌽
обратные,(c/t)←
заменяют согласные на (обращенные)t
возвращают измененную строкуисточник
Python 2.7, 144 байта
Сначала создается обратный список согласных, а затем вставляются все остальные символы в исходный индекс.
Un-golfed:
https://repl.it/C30O
источник
Mathematica 216 байт
источник
Haskell,
157131 байтОбновить
Решение @ atlasologist заставило меня понять, что мне нужен только список согласных вместо пар (хотя не нужно менять их, поскольку я использую правую складку).
Ungolfed
старый
Создает список пар согласных, затем просматривает строку, заменяя каждую согласную, используя указанный список.
Немного примитивно, но я хотел понять это, не глядя сначала на ответы. :)
источник
if ... then ... else
. б)f
лучше написать как инфиксный оператор, скажем%
. нет в) нет необходимости для внутренней пары()
в((r:q),s)
. d) заменить""
с_
на 2 - й линииf
. В целом (k
остается прежним)c%(r:q,s)|c`elem`k=(q,r:s)|1<2=(r:q,c:s);c%(_,s)=("",c:s);g s=snd$foldr(%)(filter(`elem`k)s,"")s
.s-lang ,
1716 байт (не конкурирующих)Сохранен один байт, потому что s-lang больше не требует скобки последнего аргумента
Попробуйте онлайн!
Я начал работать над языком игры в манипуляции со струнами (я давно хотел это сделать), и я подумал, что это будет забавный вопрос для работы с ним.
Объяснение:
r
сторнирует строку с заданным сопоставителем символов регулярного выражения (если аргумент регулярного выражения не указан, по умолчанию используется значение.
)[
начинается необязательный аргумент регулярного выражения дляr
(?![aeiouy])\w
регулярное выражение для соответствия любому согласному символу, кроме y (к сожалению, JavaScript не позволяет вычитать класс символов)]
обычно заканчивает необязательный аргумент для регулярного выраженияr
, но нам это не нужно, так как это последняя функция и последний аргументисточник
Matlab, 67 символов
Для входа
'this is a string of- stuff.'
производит
s = ffit is a fgnirt os- ssuht.
si
это индексы согласных во входной строке. Последний оператор заменяет эти символы теми же символами, но в обратном порядке, путем индексации.источник
-
. Вопрос говорит, что любая пунктуация является допустимым вводом и должна игнорироваться. Кроме того, вам нужно либо использоватьinput('')
для захвата ввода, либо написать анонимную функцию, потому что мы не можем принять переменную в качестве ввода, как это.flip
чтобы перевернуть строку.ans
, так как для этого назначен вход по умолчанию для консоли Matlab?s=input('')
или каким-то образом превратить это в анонимную функцию@(s)
PowerShell , 81 байт
Попробуйте онлайн!
Менее гольф:
PowerShell , 88 байт, -f
Попробуйте онлайн!
источник
q / kdb +, 45 байт
Решение:
Объяснение:
Найдите индексы согласных и замените их обратными:
Заметки:
У меня было 3 способа составить список согласных, один в решении немного лучше, чем альтернативы:
"bcdfghjklmnpqrstvwxz"
за 22 символа (самый скучный).Q.a _/0 3 6 11 16 19
за 21 символ (круто, бросьте каждый индекс).Q.a except"aeiouy"
за 19 символов (второй самый скучный)источник
Jq 1,5 ,
289263 байтаобъяснение
Пробный прогон
Попробуйте онлайн
источник
Java 8, 157 байт
Попробуйте онлайн!
Примечание: выводит предупреждения компилятора в stderr.
Объяснение:
Не буду врать, моя единственная цель состояла в том, чтобы победить этот ответ
источник
APL (Dyalog Extended) , 22 байта
Попробуйте онлайн!
источник