Напишите программу или функцию, которая получает в качестве входных данных строку, представляющую собой валлийское слово (UTF-8, если иное не указано вами).
Ниже приведены все отдельные буквы на валлийском языке:
a, b, c, ch, d, dd, e, f, ff, g, ng, h, i, j, l, ll, m, n, o, p, ph, r, rh, s, t, ты, ты, я
Процитирую Википедию ,
В то время как орграфы ch , dd , ff , ng , ll , ph , rh , th написаны с двумя символами, все они считаются отдельными буквами. Это означает, например, что Лланелли (город в Южном Уэльсе), как считается, имеет только шесть букв на валлийском языке, по сравнению с восемью буквами на английском языке.
Эти буквы также существуют на валлийском языке, хотя они ограничены техническим словарным запасом, заимствованным из других языков:
k, q, v, x, z
Буквы с диакритическими знаками не рассматриваются как отдельные буквы, но ваша функция должна принимать их и уметь их считать. Возможные такие буквы:
â, î, î, ô, û, ŷ, ŵ, é, í, í, í, ó, ú, ý, ẃ, ä, ë, ï, ö, ü, ÿ, ẅ, à, è, ì, ò, ù, ẁ
(Это означает, что ASCII не является приемлемой входной кодировкой, поскольку не может кодировать эти символы.)
Заметки:
- Это код гольф.
- Вам не нужно учитывать такие слова, как llongyfarch , в которой нг - не орграф, а две отдельные буквы. Это слово состоит из девяти букв, но вы можете ошибочно считать его как восемь. (Если вы можете объяснить такие слова, это круто, но выходит за рамки этой задачи.)
- У входа гарантированно не будет пробела (если вы не предпочитаете его с одним завершающим символом новой строки (или чем-то более эзотерическим), в этом случае это может быть предоставлено). Конечно, не будет внутреннего пробела.
Тестовые случаи:
- Лландудно, 8
- Лланелли, 6
- Рил, 3
- Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch, 50 (на самом деле 51, но мы будем считать 50)
- Тёр, 3
- Cymru, 5
- Глындара, 7
источник
Ответы:
05AB1E ,
242321 байтКод:
Объяснение:
Использует кодировку CP-1252 . Попробуйте онлайн!
источник
Сетчатка , 23 байта
Попробуйте онлайн!
Даже моар регулярное выражение.
источник
JavaScript (ES6), 44 байта
Тривиальный ответ может быть самым коротким.
источник
BASH
52 50(сед + туалет) 41-9 спасибо Джордану
Если требуются заглавные буквы, это необходимо
i
в конце команды sed. (Я пропустил это, потому что все «отдельные буквы» в вопросе строчные, хотя некоторые примеры - нет).источник
grep -o .|wc -l
вместоwc -c
?wc
вы можете использовать-m
для подсчета символов вместо байтов.c
изch
в с[prt]
?sed -r 's,dd|ff|ng|ll|[cprt]h,1,gi'|wc -m
([dfl])\1
бы дольшеdd|ff|ll
. Еще одна двойная согласная предпочтет умную версию.Солома ,
30583533 байтаЗамените каждое вхождение регулярного выражения на
0
и преобразуйте из унарного в десятичное.К сожалению, Солома не может передавать флаги регулярным выражениям.Я забыл о?flags:
конструкцииПопробуйте онлайн! (Добавлен код для проверки всех тестовых случаев)
источник
Python 3, 64 байта
Снова использует регулярные выражения
Идео это!
источник
PowerShell v2 +,
525048 байтДелает
-replace
на всех двухсимвольных однобуквенных буквах, заменяет их на0
(сделано потому, что для перехода к нецифровым потребуются кавычки), затем получает.length
результирующую строку.Контрольные примеры
источник
[prtc]h
?V , 31 байт
Попробуйте онлайн или проверьте все контрольные примеры!
Это содержит некоторые непечатаемые символы, поэтому вот hexdump:
источник
PHP, 56 байт
источник
[dfl]{2}
спичкиdf
,ld
и т.д., а также его предполагаемые матчи.dd|ff|ll
такой же длины.echo
(пробел в конце) используйте<?=
, что экономит 2 байта. Кроме того, в$t
этом нет необходимости, экономя еще 3 байта.Java 7,
15673 байтаМножество байтов сохранено благодаря @ OlivierGrégoire .
Ungolfed и тестовые случаи:
Попробуй это здесь.
Выход:
источник
Matcher
напрямую? ТакжеMatcher
можно определить в цикле for.return s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length()
намного, намного короче. Разве это не может работать?int c(String s){return s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length();}
). И только 51 для версии Java 8 (s->s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length()
).Matcher
был несчастный случай. У меня это было правильно в тестовом коде, но не в коде для игры в гольф ..>.> ВашиreplaceAll
работы лучше, спасибо.R, 54 байта
Очень похоже на другие ответы. Сопоставляет любую из двухсимвольных букв и заменяет их,
@
а затем подсчитывает количество символов. Читает ввод из стандартного ввода. Использует опциюignore.case = TRUE
(третий аргумент дляgsub
) для сопоставления как прописных, так и строчных букв.бонус
Оба
gsub
иnchar
векторизованы, что означает, что это также работает на символьном векторе, например:производит:
источник
Perl 6 , 36 байт
Попробуйте онлайн!
источник
XQuery, 77 байт
источник
tcl, 71
демонстрация
источник
Perl 5 , 35 + 1 (
-p
) = 36 байтПопробуйте онлайн!
источник