Это похоже на создание аббревиатуры , но есть несколько ключевых отличий, в том числе метод извлечения аббревиатуры и эта проблема, включая гибкий вывод.
задача
Если задана строка (допускается список строк с символами / длиной 1), содержащая только печатный ASCII, выведите на вход все заглавные буквы, которым предшествует пробел или тире, или которые являются первым символом на входе. Пустая строка - неопределенное поведение.
Тестовые случаи:
Выход может быть в формате "TEST"
, ["T","E","S","T"]
или все остальное работает для вас.
Self-contained Underwater Breathing Apparatus
SUBA
a Programming Language
PL
NATO Atlantic TREATY Organization
NATO
DEFCON 2
D
hello, world!
light-Emitting dioDe
E
What Does the Fox Say?
WDFS
3D mov-Ies
I
laugh-Out Lou-D
OLD
Best friends FOREVE-r
BF
--
<space>
-- --a - - --
-- -- - - -- A
A
Step-Hen@Gmail-Mail Mail.CoM m
SHMM
Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
My-Name@Some-Domain.TLD
.Ответы:
V , 7 байт
Попробуйте онлайн!
Вот hexdump, чтобы доказать количество байтов:
Объяснение:
Это коротко все благодаря замечательной V в сжатии регулярных выражений .
источник
-
разрешено.R ,
6663 байтаПопробуйте онлайн!
-3 байта благодаря Скараби
Анонимная функция; возвращает аббревиатуру как вектор,
c("N","A","T","O")
который неявно печатается.На этот раз это не так уж плохо в R! разделяется на
-
или(space)
, берет первый элемент каждого из них, а затем возвращаетLETTERS
по порядку те, которые являются заглавными ( это R, встроенный с заглавными буквами).источник
function(s)(s=substr(strsplit(s,' |-')[[1]],1,1))[s%in%LETTERS]
Python 2 ,
5956 байт-3 байта благодаря Линн
Попробуйте онлайн!
источник
'@'<b<'['
, очень хорошее решение +1'@'<b<'['>a in' -'
экономит 3 байта.Javascript 21 байт
Принимает строковый ввод и выводит массив строк, содержащих символы аббревиатуры
объяснение
Это просто глобальное регулярное выражение для границы слова, за которой следует заглавная буква.
источник
Сетчатка ,
2117 байтПопробуйте онлайн!
объяснение
Выводит совпадения регулярного выражения
(?<=^| |-)[A-Z]
на входе, по одному на строку (!
).источник
Дьялог АПЛ,
2923 байтаБонусный тестовый пример: язык программирования (APL).
Возвращает массив символов (отображается как пространство, разделенное на TIO).
Попробуйте онлайн!
Предыдущий пост, 29 байт
Попробуйте онлайн!
Как?
'(\w)\w+'⎕R
- заменить каждый кластер букв алфавита'\1'
- со своим первым персонажем~⍨
- удалить каждый символ(⎕AV~⎕A)
- это не прописная буква ASCIIисточник
Python, 53 байта
Попробуйте онлайн!
Простое регулярное выражение с предвкушением пробела или тире. Вместо того, чтобы соответствовать началу, добавьте пробел.
источник
C #,
8478 байтСохранено 6 байт благодаря @jkelm .
Попробуйте онлайн!
Полная / Отформатированная версия:
источник
using System.Linq
в число байтов, еслиusing System.Collections.Generic
это освобождено? Есть ли какой-то консенсус, на которыйusing
можно рассчитывать?using System.Linq;
необходим для кода Linq в моем ответе. ОднакоIEnumerbale<char>
это не часть ответа, а та часть кода, которую необходимоusing System.Collections.Generic;
скомпилировать.Юлия 0.6.0 (57 байт)
Пояснение: Это мой первый код-гольф. Довольно прямо вперед. Разделите слова, напечатайте 1-ю верхнюю букву каждого.
Наверное, легко сделать лучше с помощью регулярных выражений, но я новичок в этом
источник
05AB1E , 11 байт
Попробуйте онлайн!
источник
C # (.NET Core) , 108 байт
Попробуйте онлайн!
источник
if
троичное может сэкономить байты. Это начинается с индекса,2
а не1
просто изменитьint i=1
его,int i=0
чтобы исправить это. Кроме этого, я не думаю, что здесь можно сделать намного больше.Желе ,
1110 байт-1 байт благодаря Эрику Аутгольферу (
Ḳ
разделяется на пробелы> _ <)Монадическая ссылка, берущая и возвращающая списки символов.
Так как полная программа принимает строку и печатает результат.
Попробуйте онлайн! или посмотрите набор тестов .
Как?
источник
Ḳ
вместоṣ⁶
?Perl 5 , 25 байт
24-байтовый код + 1 для
-n
.Раздражает, что
grep -P
поддержка переменной длины, но Perl этого не делает :(.-1 байт благодаря @Dada !
Попробуйте онлайн! - включает
-l
в себя запускать все тесты одновременно.источник
s///
или$_=
отрицатьprint
...s///
чтобы решить это, но это не очевидно ... Я на работе, может быть, я попробую еще раз позже!MATL , 19 байт
Попробуйте онлайн!
источник
Брахилог ,
252322 байтаПопробуйте онлайн!
(-2 байта благодаря @Fatalize.)
источник
Ṣ
вместо того," "
чтобы сохранить два байтаJapt ,
191614 байтов-2 байта благодаря Shaggy
Попробуйте онлайн!
источник
"(^| |-)%A"
чтобы/^| |-)\A/
сохранить байтыmf\A
->mÌ
чтобы сохранить 2 байта.Swift 5 , 110 байт
-5 благодаря Cœur
Детальное объяснение
import Foundation
- Импортирует модуль,Foundation
который является жизненно важным дляzip()
основной части этого кода.func f(s:[String]){...}
- Создает функцию с параметромs
, который представляет собой список строк, представляющих символы ввода.for i in zip(s,[" "]+s){...}
- Выполняется итерация сi
помощью zip ввода и ввода с добавлением пробела в начале, что очень полезно для получения предыдущего символа в строке.if
- Проверяет, есть ли:i.0==i.0.uppercased()
- текущий символ в верхнем регистре,&&"- ".contains(i.1)
- и если предыдущий символ - пробел или тире.Если вышеуказанные условия выполнены, то:
print(i.0)
- Персонаж напечатан, потому что он является частью аббревиатуры.источник
import UIKit
вместоimport Foundation
.PowerShell , 43 байта
Попробуйте онлайн!
раскатали:
источник
Python 3 , 67 байт
Попробуйте онлайн!
источник
Python 3 ,
7370 байтПопробуйте онлайн!
объяснение
lambda n:
- Создает анонимную лямбда-функцию с параметром Stringn
.n[x]
- Получает символn
в индексеx
.for x in range(len(n))
- Итерирует от0
до длиныn
, присваивая имя переменнойx
.if
- Проверки:'@'<n[x]<'['
- Если символ в верхнем регистре,and(' '+n)[x]in' -'
- И если ему предшествует пробел или тире в строке, образованной пробелом иn
.источник
i supper
, и я понятия не имею, почему?.isupper()
, я понятия не имею, что вы читаете: pJavaScript (SpiderMonkey) , 62 байта
Попробуйте онлайн!
источник
QuadS , 17 байт
Попробуйте онлайн!
источник
Pyth,
1516 байтовТестирование
источник
Pyth, 12 байт
Тестовый набор здесь.
источник
Bash (grep),
2928 байтПорт моего ответа на Python, но поскольку он
pgrep
поддерживает переменную длину, он заметно короче (даже учитывая накладные расходы Python). Вставьте контрольные примеры в файл с именемa
, выводится 1 символ на строку.-1 Спасибо Нейлу
источник
^| |-
может быть более короткий тест?RProgN 2 , 18 байт
Разъяснения
Попробуйте онлайн!
источник
PHP, 62 байта
Запустите как трубу с
-nR
или попробуйте онлайн .другие решения:
источник
C ++, 168 байт
Вывод осуществляется через параметр
источник
#include<string>
и предположить, что аргументs
являетсяstd::string
?Луа ,
7975 байтПопытайся!
Я вставил print () перед окончательным завершением в пробной версии, потому что иначе это беспорядок. Эта программа идеально соответствует требованиям ввода-вывода и сопоставления, но без этой дополнительной новой строки ее довольно сложно прочитать.
Входные данные даны в виде таблицы чисел: строка, число увеличивается на 1 каждый раз и начинается с 1.
Объяснение:
Это для циклов через gmatch каждой входной строки. Поиск gmatch выглядит следующим образом:
[% - | ] - группа, поиск - или пробел
% u - поиск заглавных букв
Затем для каждого совпадения выводится минус предыдущий тире или пробел
Редактировать: обработать 4 байта, убрав объявление «а» и добавив пробел к входу внутри цикла for, а также изменив вспомогательный вход только на 2 вместо 2,2 (что дает эквивалентные результаты)
источник
Pyth , 12 байт
Создан через год после первоначального ответа.
Попробуйте онлайн!
Pyth , 21 байт
Первоначальный ответ.
Попробуйте онлайн!
источник
-|
на один байт меньше[ -]