По заданной строке найдите первое слово, начинающееся с каждой буквы (без учета регистра).
Образец
Использование в Ferulas flourish in gorgeous gardens.
качестве входных данных:
"Ferulas flourish in gorgeous gardens."
^^^^^^^ ^^ ^^^^^^^^
| | |
| | --> is the first word starting with `g`
| --> is the first word starting with `i`
--> is the first word starting with `f`
Затем выходные данные для этого образца должны быть совпадающими словами, соединенными одним пробелом:
"Ferulas in gorgeous"
Вызов
И ввод, и вывод должны быть строковым представлением или ближайшей альтернативой на вашем языке.
Программа или функция разрешены.
Вы можете рассмотреть слово, по меньшей мере , одного из: lowercase or uppercase letters, digits, underscore
.
Это код-гольф , самый короткий ответ в байтах выигрывает.
Другие образцы:
input: "Take all first words for each letter... this is a test"
output: "Take all first words each letter is"
input: "Look ^_^ .... There are 3 little dogs :)"
output: "Look _ There are 3 dogs"
input: "...maybe some day 1 plus 2 plus 20 could result in 3"
output: "maybe some day 1 plus 2 could result in 3"
Ответы:
Сетчатка , 28 байт:
M!
- Сопоставьте каждую работу и напечатайте все слова, разделенные переводами.i
- Игнорировать дело.\b(\w)
- захватить первую букву каждого слова(?<!\b\1.+)
- После сопоставления буквы проверьте, не было ли предыдущего слова, начинающегося с той же буквы.\1.+
обеспечивает как минимум два символа, поэтому мы пропускаем текущее слово.\w*
- соответствовать остальной части слова.Вышеуказанное соответствует только словам - все остальные символы удаляются.
¶\n
- Заменить символы новой строки пробелами.Попробуйте онлайн!
источник
Сетчатка , 45 байт
Просто использует одно регулярное выражение для удаления более поздних слов, начинающихся с того же
\w
символа (без учета регистра сi
опцией), преобразует серии\W
в один пробел, а затем удаляет все пробелы в начале и в конце.Попробуйте онлайн!
Изменить: см . Ответ @ Kobi для более короткой версии, используя
M!`
источник
i` \b((\w)\w*)\b(?<=\b\2\w*\b.+)
(пробел перед первым\b
) Строки после этого не нужны?a...a -> a
JavaScript (ES6),
7371 байтСохранено 2 байта благодаря @ edc65!
Тест
источник
parseInt("_",36) = NaN
? Богохульство!s=>s.match(u=/\w+/g).filter(w=>u[w=parseInt(w[0],36)]?0:u[w]=1).join' '
Pyth, 23 байта
Попробуйте онлайн: демонстрация или тестовый набор
J:z"\w+"1
находит все слова во входных данных с помощью регулярных выражений\w+
и сохраняет их вJ
..grhk0J
группирует слова по их первой строчной букве,hM
берет первое из каждой группы,xDJ
сортирует эти слова по индексу во входной строке иjd
ставит пробелы между ними.источник
Perl 6, 39 байт
источник
\w+
и играютsubstr
роль в гольфеC
142132122 байтаНа 10 байт легче благодаря @tucuxi!
Печатает завершающий пробел после последнего выходного слова.источник
c>47
иc<58
используяisalnum
вместоisalpha
MATL , 23 байта
Это заимствует идею Якуба использовать регулярное выражение для удаления нежелательных символов и разделения одновременно.
Ввод - это строка, заключенная в одинарные кавычки.
Попробуйте онлайн!
объяснение
источник
Vim 57 нажатий клавиш
Объяснение:
Я действительно разочарован тем, как долго этот. В символах «инвалидные» (все , кроме
a-z
,A-Z
,_
и пространство) действительно бросил меня. Я уверен, что есть лучший способ сделать это:Так как
\h
соответствует всему тому, что ожидается для пробела, но я не могу понять, как поместить метачар в диапазон. Если у кого-то есть советы, я бы хотел их услышать.источник
a-zA-Z_
и нет\w
? цифры действительныЮлия,
165155151129102 байтаЭто функция, которая принимает строку и возвращает строку.
Ungolfed:
Сохранено 53 байта с помощью Sp3000!
источник
Желе,
3231 байтПопробуйте онлайн!
источник
C # (LINQPAD) -
136128 байтисточник
05AB1E , 40 байт
Код:
Попробуйте онлайн!
Объяснение:
Сначала мы генерируем все символы, которые должны быть удалены из входной строки, используя
94L32+ç
( Попробуйте здесь ). Мы соединяем эту строку, используяJ
и удаляем,[a-zA-Z0-9_]
которая хранится в žj ( попробуйте здесь ). Мы удаляем все символы из второй строки из первой строки, что оставляет нас:Это также можно проверить здесь . Мы
D
уточняем это и сохраняемX
сU
-командой. Затем мы удаляем все символы из этой строки из ввода. Затем мы разделяем пробелы, используяð¡
и удаляем все пустые строки (используя""K
). Теперь у нас есть это .Это чистая версия ввода, с которой мы будем работать. Мы наносим на карту каждый элемент, используя
v
. Это используетy
в качестве строковой переменной. Мы берем первый символ строки с помощью¬
и нажимаемX
, который содержит строку со всеми запрещенными символами (!"#$%&'()*+,-./:;<=>?@[\]^`{|}~
). Мы проверяем, есть ли в этойl
строке версия первого символа owercase (которая также будет©
указана в регистре), используяå
. Охватывается этой частью:ï>i
если первая строка не существует в строке запрещенных символов (X
), мы добавляем эту букву в список запрещенных символов (сделано с помощьюX®«U
) и помещаемy
поверх стека.Наконец, когда строки фильтруются, мы соединяем стек с помощью пробелов
ðý
.источник
PHP
Вдохновленный использованием регулярных выражений в большинстве ответов, я изначально пытался сделать это, не используя регулярные выражения вообще, просто чтобы показать аккуратный вариант, но точка отсчета отсутствия чистых строк в качестве входных данных разрушила эту идею. Печальный.
С функцией оболочки, 89 байт
Без оболочки функции (требуется предварительное объявление $ s), 73 байта
Объяснение:
Мое единственное сожаление в том, что я не смог найти более быстрый способ проверки / преобразования регистра.
источник
Python, 103 байта
источник
Луа, 172 байта
Это закончилось намного дольше, чем я хотел ...
Ungolfed
источник
Серьезно, 43 байта
Попробуйте онлайн!
Отсутствие возможностей регулярных выражений сделало это намного сложнее, чем нужно.
Объяснение:
источник
Ruby 76 байт
Или с определением метода 88 байтов
Неуправляемый и с юнит-тестом:
источник
\w
включает в себя цифры символов, поэтому[\w\d]
может быть заменен на\w
. Кроме того, еслиnil
значения находятся в массиве при вызовеjoin' '
(или, что еще лучше,*' '
это сокращение, которое вы можете использовать для сохранения большего количества байтов), они исчезают, поэтому вызов tocompact
не требуется .\w\d
смущает меня. Но если я удалю,compact
я получу дополнительные пробелы, (см.['x',nil,'x']*'y' == 'xyyx'
). Или я что-то пропустил?(list-[p])
сохраняются байтыlist.compact
. Кроме того,/\w/
эквивалентно/[\w]/
. Наконец, можно заменитьnil
с ,p
и ваш!p
с1
(так как ваш хэш нужно только truthy значения в нем)nil
сp
не работает. Если я использую его внутри своего кода, я получаю синтаксическую ошибку. Я должен инкапсулировать, как(p)
- но тогда у меня снова 3 символа.!f[j=i.upcase]?(f[j]=1;h):p
. Также только подумал об этом, но из-за индексации строк, использованиеs.scan(/\w+/)
и удалениеi
в пользуh[0]
работ тоже.grep и awk,
6856 байтСценарий:
Объяснение:
grep -o
соответствует юридическим словам, печатая каждое на отдельной строке.awk
принимает первую букву каждой строкиsubstr
, делает ее строчной, а затем увеличивает значение записи хеш-таблицы с этим ключом. Если значение было сброшено до приращения, строка печатается.echo ...
превращает строки обратно в словаРанее я пытался создать решение, не
awk
используяuniq
,sort
,grep
и ,bash
но упал чуть меньше. История в редакциях.Спасибо Деннису за некоторые улучшения, которые я пропустил.
источник
Python 3.5, 138 байт:
В основном то, что происходит, это ..
источник
PHP 120 байтов
Это генерирует кучу предупреждений, но это нормально.
источник
function
необходимо?Javascript ES6,
108107 символов107 символов, строка результата обрезается
Тест:
источник
f=
не учитывается .Tcl , 150 байт
Попробуйте онлайн!
источник