В этой задаче вы должны взять строку, соответствующую регулярному выражению ^[a-zA-Z]+$
или тому, что является разумным (вам не нужно учитывать заглавные или строчные буквы, если хотите) (вы можете предположить, что строка достаточно длинная и имеет правильную структуру для всех операции), и вывести другую строку, созданную аналогично слову в конце недавнего дадаистского твита от POTUS ( "Despite the constant negative press covfefe"
).
Как совместить строку:
Сначала получите первую звуковую группу (составьте терминологию).
Как ты это делаешь? Что ж:
Найти первую гласную (
y
это тоже гласная)v creation
Найдите первую согласную после этого
v creation
Удалить остаток строки
creat
Это ваша первая звуковая группа.
Следующий шаг:
Получить последний согласный звуковой группы
t
и замените его голосовой или глухой версией. Для этого найдите письмо в этой таблице. Заменить на данную букву (которая может быть той же самой буквой)
b: p
c: g
d: t
f: v
g: k
h: h
j: j
k: g
l: l
m: m
n: n
p: b
q: q
r: r
s: z
t: d
v: f
w: w
x: x
z: s
Итак, мы получаем
d
Затем возьмите следующий гласный после этого согласного. Вы можете предположить, что этот согласный не находится в конце строки. Соедините эти два вместе, затем повторите это дважды:
didi
Объедините это с первой звуковой группой:
creatdidi
Все готово: строка соффифицирована, и теперь вы можете вывести ее.
Тестовые случаи:
coverage: covfefe
example: exxaxa
programming: progkaka (the a is the first vowel after the g, even though it is not immediately after)
code: codtete
president: preszizi
Это код-гольф , поэтому, пожалуйста, сделайте свою программу максимально короткой!
Ответы:
Желе ,
5857 байтПолная программа, которая принимает список строчных символов и печатает результат.
Попробуйте онлайн!
Как?
источник
JavaScript (ES6),
107103 байтСохранено 4 байта благодаря GOTO 0
Контрольные примеры
Показать фрагмент кода
источник
s=>([,a,b,c]=s.match`(.*?[aeiouy]+(.)).*?([aeiouy])`,a+(b=(a="bcdfgszkvtgp")[11-a.search(b)]||b)+c+b+c)
Желе ,
4539 байтПопробуйте онлайн!
Как это устроено
источник
CJam ,
59585756 байтПопробуйте онлайн!
объяснение
источник
C
219213206179175 байтовПопробуйте онлайн!
источник
#define
s и функцию флагами препроцессора (-D...
).Perl 5 ,
8172 байтаПопробуйте онлайн!
источник
\K
, но ты сделал это на 9 байт лучше, чем я. Хороший ответ!PHP, 121 байт
Попробуйте онлайн!
источник
echo$t[1],$z=strtr($t[2].$t[3],bcdfgkpstvz,pgtvkgbzdfs),$z;
$argn
в что-то более короткое?$a
Например - это -3 байтаPyth, 54 байта
Это определяет функцию
y
, которая ожидает строку. Попробуйте онлайн: Test Suiteисточник
Python 3,
155139 байтудалил 16 байт благодаря @ovs
удалено 1 байт благодаря Габору Фекете
источник
'aeiouy]'
, может быть, это сохранит несколько байтов. Также вы можете удалить некоторые символы из строк замены, так как они совпадают.IndexError
, и сохранениеaeiouy])
не сохраняет никаких байтов.s='aeiouy])'
, вы могли бы использоватьb,c,v=re.findall('(.*?[%s([^%s.*?([%s'%(s,s,s)
. Это не короче, но может привести к способу сократить его в целом.k='aeiouy])'
иf'(.*?[{k}([^{k}.*?([{k}'
Java 8,
243236222 байтаИспользует
.replaceAll
регулярные выражения с группами захвата, чтобы отфильтровать ненужные нам части.Объяснение:
Попробуй это здесь.
источник
Haskell ,
143141138137136 байтПопробуйте онлайн!
источник
nx
чем-то однобуквенным сэкономит 2 байта.z
внеf
и переключение на охрану вместоlet
сохранения экономит еще два байта: попробуйте онлайн!(s,v)<-break z i,(m,c:x)<-span z v
в(s,(m,c:x))<-span z<$>break z i
.let
, спасибо!z
из-за чего уехатьf
?Python,
261260 байтНе регулярное выражение, не эзотерическое решение. Заняло около 20 минут, и еще час до гольфа.
Вероятно, он имеет больше понимания списка, чем вся стандартная библиотека Python, в основном потому, что я не знаю регулярных выражений ...
Попробуйте онлайн! (С тестами)
источник
Рубин , 90 байт
Попробуйте онлайн!
Разобравшись немного, у нас есть нечто эквивалентное:
источник
Python 2,
251246245239237234229211 байтПервая подача здесь.
Попробуйте онлайн!
Товарищи по гольфу, которые помогли мне:
источник
not n
вn<1
течение 2 -х байт, так как вы знаете ,n
никогда не будет отрицательным. Также вы можете перейтиn==3
к,n>2
так как вы знаетеn
, никогда не будет больше, чем3
. Вы можете также использовать трюки Python для условных , чтобы укоротить первые и второй-последний еще дальшеn=[n,1][i in w and n<1]
;r+=[0,r][n<2]
r,v,c=('',)*3
наr=v=c=''
, так как строки являются неизменяемыми. Я пробовал кучу других хитрых трюков, но, к сожалению, они такие же длинные. Также стоит добавить пробную версию онлайн! ссылка на ваш постРубин ,
175141110 байтПопробуйте онлайн!
tr
аргументыUngolfed
источник
Hash[*"bpcgdtfvgkkgpbsztdvfzs".chars]
c=[^aeiou]
он короче. Иметь первые интерполяции для каждого переменного присвоить одновременно -2 байт:/^(.*?${v='[aeiou]'}+(#{c='[^aeiou]})).../
. Наконец,$2.tr("b-z","pgtevkhijgl-obqrzdufwxys")
вместо хеш-решения.\g<n>
) вместо интерполяции, плюс еще 14 с помощью @ ValueInk по[^aeiou]
предложению:s=~/^(.*?([aeiouy])+([^aeiou]))\g<3>*(\g<2>)/
.programming
->progkaka
, которую я не могу понять.\g<3>
обновляет значение $ 3, поэтому мы не можем использовать этот ярлык.Crystal,
203194187186184163 байтаисточник
c=v
иo+=<...>
MATLAB / Octave -
159158 байтСледующие работы предполагают, что вся входная строка строчная.
объяснение
a = input('','s');
: Получает строку из STDIN и сохраняет ее в переменнойa
.m=ismember(a,'aeiouy');
Возвращает логический массив того же размера, что и строка,a
определяющая расположение гласных.s='pgt vkh jglmn bqrzd fwx s';
covfefe
Отображение согласных звуков в виде строки. Эта строка имеет длину 25 символов и пропускает гласные. Первая позиция, где'a'
должен находиться гласный звук, удаляется, в то время как другие позиции, где расположены гласные, размещаются с фиктивным пробелом. Это так, что когда мы определяем первый согласный, появляющийся после гласного, мы преобразуем согласный в позицию для доступа к символу в этой строке, чтобы определить первый компонент преобразованного слова.m(1:find(m,1))=1
: Устанавливает первую позицию логического массива до того места, где мы нашли первый гласный как все гласные. Это будет так, что когда мы будем искать следующий согласный, следующий за первым гласным, мы будем игнорировать эти символы.i=find(~m,1);
: Находит первую позицию строки, которая является согласной после первой гласной.f=a(1:i)
: Удаляет строку после первого согласного, следующего за гласным. Мы просто сэмплируем от первой позиции строки до этой точки.d=s(f(end)-97);
: Взять последний оставшийся символ строки и найти, где нам нужно взять образец из строки поиска, и получить этот символ. Вычитание символа и числа в MATLAB или Octave объединяется в целое число путем преобразования символа в его код ASCII. В этом случае мы вычитаем последний символ из символа в начале алфавита, чтобы дать нам положение относительно начала. Однако вместо вычитания с помощьюb
(98) мы вычитаем по,a
поскольку MATLAB начинает индексировать с 1 вместо 0.'a'
Код ASCII равен 97.m(1:i)=0;
: Принимает логическую маску и устанавливает все символы во входной строке с первой позиции на первую согласную после гласной на ложь.v=a(find(m,1));
: Находит следующую гласную, которая следует за первым согласным из входной строки.[f d v d v]
: Вывести нашуcovfefe
внутреннюю строку.Примеры запусков
Попробуйте онлайн!
http://www.tutorialspoint.com/execute_octave_online.php?PID=0Bw_CjBb95KQMdjROYVR0aFNrWXM
Когда вы нажмете кнопку «Выполнить» вверху, подождите несколько секунд, затем введите нужную строку. Введите строку медленно, так как кажется, что при вводе текста задержка.
источник
Clojure,
182156 символовКак это устроено
Возвращает последовательность из
((\p \r) (\e) (\s) (\i) (\d) (\e) (\n \t))
Destructures с послед в
s=(\p \r)
,m=(\e)
,c=\s
,n=\i
.Или «пример» это
s=[]
,m=(\e)
,c=\x
,n=\a
.Возвращает выходную строку, объединяя части и выравнивая ее.
А потом я просто удалил столько пробелов, сколько мог, все еще заставляя его компилироваться.
Де-обезображенный:
источник
c
Например, вы можете просто вызвать основную функцию . (Мы также разрешаем анонимные функции, которые короче во многих языках; я не уверен, есть ли они в Clojure). Я вижу, что вы уже внесли это улучшение во внутреннюю часть своего кода, так что, вероятно, здесь не нужно ничего менять.R, 341 символов
Ужасная R-попытка, почему струны такие сложные
Читаемая версия:
источник
BlitzMax, 190 байт
Принимает слово из стандартного ввода и выводит результат в стандартный вывод. Предполагается, что входное слово состоит из строчных букв и содержит хотя бы одну гласную, за которой следует согласный.
Более читаемая версия программы с форматированием и объявлениями переменных:
Как это устроено:
BlitzMax не имеет встроенной функции регулярных выражений или чего-либо подобного, поэтому цикл используется для перебора символов входного слова до тех пор, пока он не найдет гласную, за которой следует цепочка хотя бы одного согласного. Переменная c хранит позицию последней из этих согласных, v позицию гласной. Цикл продолжает видеть, есть ли другой гласный после цепочки, и если так, v обновляется соответственно. Затем согласный в c ищется в строке "bpdtfvgkcgsz", которая действует как таблица замены. Если согласный находится в таблице в любой позиции, то эта позиция помечается XOR с 1, и символ в результирующей позиции используется в качестве его замены. Операция XOR превращает 0 в 1, 2 в 3, 4 в 5 и т. Д. И наоборот, так что b заменяется на p, d на t и так далее. Наконец, исходная строка до с,
Пример результатов:
источник
Perl, 71 байт
Также бегите с
perl -pe
. На несколько байтов меньше, чем в предыдущем решении Perl. По общему признанию я получил некоторое вдохновение оттуда также.источник
05AB1E ,
10110488 байт-16 байт благодаря Okx
Я как - то надеюсь , что это может быть сделано способом более эффективно.
Попробуйте онлайн!
объяснение
источник
"bpcgdtfvgkhhjjkgllmmnnpbqqrrsztdvfwwxxzs"
с ,.•7¶ëÒ—Öb´ƒ≠Ä“šʒƵJ^ÝV“Îpи•
чтобы сохранить 15 байтžOÃćIsk
на,žOÃ0èk
чтобы сохранить другой байт.žOÃнk>[DIs£¤žPså#\>]©s[DIsèDžOså#\>]s\.•7¶ëÒ—Öb´ƒ≠Ä“šʒƵJ^ÝV“Îpи•S2ôDí«ø`®θkèìDJ
Попробуйте онлайн. В основном я избавился от всех свопов и тройных свопов, используя вместо этого переменную. А0è
может бытьн
, и я заменил2׫
сDJ
присоединиться весь стек вместе. PS: я также опубликовал 55-байтовый ответ 05AB1E, используя другую технику. (Который также включает в себя ссылку, чтобы лучше понять сжатие в 05AB1E.: D)Кристалл, 130 байт
Как это устроено
сохранить регулярное выражение для поиска первого гласного
c
.разбить первый аргумент на три части {"", String до одного символа перед первым согласным после первого гласного, остаток строки} и сохранить каждый из элементов в x, y и z.
получить первый символ, соответствующий согласный.
получить индекс согласного внутри левой строки или
nil
.если
i
нетnil
, используйте этот индекс для второй строки (разновидность хэша в гольфе).если
i
естьnil
, используйте оригинальный символ.Затем добавьте первый гласный из
z
.наконец, выведите первую часть из первого регулярного выражения
y
, первого согласногоk
и дважды умноженную на предыдущую вычисленную строкуb
.Попробуйте онлайн .
источник
Сетчатка , 68 байт
Попробуйте онлайн!
источник
Луа,
164157 байтРедактировать 1: Удалено 7 байт путем поиска любого символа после согласных (см. Регулярное выражение)
Попробуйте онлайн!
Эта программа принимает строку в аргументе CLI и печатает свою зашифрованную версию.
Это моя первая подача кода в гольф! Я не проверял другие подробно, поэтому я мог пропустить некоторые общие оптимизации (и попал в некоторые ловушки). Я использовал Lua, потому что мне понравился этот маленький язык, и я попытался найти регулярное выражение, которое отвечало бы моим потребностям.
Вот более чистая версия, использующая функцию (я намеревался ее использовать, но ключевые слова в Lua слишком длинные!):
Не стесняйтесь оставлять отзывы :)
Примечание: если вам интересно, это 149 байт, используя MoonScript!
источник
JavaScript (ES5),
237229 байтПопробуйте онлайн!
Наверное, не самая гольфийская, но это ES5.
Недавно исправлена ошибка. Пример вывода:
источник
sed, 106 (105 + 1) байт
Это сед с
-E
флагом, который, по-видимому, считается за один байт.Попробуйте онлайн!
источник
C #,
584581 байт-3 байта благодаря Разрушаемому Лимону
Это моя первая заявка на Code Golf и Stack Exchange в целом. Я знаю, что C # не является отличным языком для игры в гольф, и это, вероятно, не полностью оптимизировано, но я хотел дать ему шанс: p. Любые советы приветствуются!
Версия для гольфа:
Читаемая версия:
источник
x++ < l
, или что-то еще (возможно,l > x++
если первое не работает). хотя не уверенSmileBASIC 3, 195 байт
Очень поздно к этому вопросу, но как я могу устоять перед хорошим испытанием для SmileBASIC 3? Такие функции, как итерация последовательности или манипулирование строкой, не так надежны, как в других языках, поэтому сложно сделать это как можно меньше. Предполагается, что слова в верхнем регистре.
Подробное объяснение здесь!
источник
05AB1E , 55 байтов
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
Смотрите этот 05AB1E кончики моих (раздел Как сжать строки не часть словаря? ) , Чтобы понять , почему
.•gÍĆdQ¸G•
это"bcdfkszgvtgp"
.источник