брифинг
Для заданного полностью квалифицированного имени Java-класса / пакета вы должны сократить его следующим образом:
Каждая часть пакета, разделенного точкой, будет сокращена до первой буквы, кроме последнего раздела и класса (если он существует).
все имена пакетов будут в нижнем регистре, а класс (если он существует) будет начинаться с заглавной буквы и будет UpperCamelCase. пакеты приходят в виде:
foo.bar.foo
и
foo.bar.foo.Class
Примеры
(No Class)
Input com.stackoverflow.main
Output c.s.main
(Class)
Input com.google.parser.Gson
Output c.g.parser.Gson
(Class)
Input com.google.longer.package.TestClass
Output c.g.l.package.TestClass
правила
- Самый короткий код в байтах выигрывает
- Применяются стандартные лазейки
fantastic.foo.func.bar
статьf.f.f.bar
или гарантировала , что 2 пакета не может начинаться с той же буквы?f.f.f.bar
было бы правильно.Ответы:
Сетчатка , 17 байт
Попробуйте онлайн!
объяснение
Это заменяется на
$1
, который является точкой и строчной буквой, которая не должна быть удалена.источник
JavaScript (ES6),
6853 байтаСмотрите мое другое решение здесь .
Попробуй
источник
s=>s.split`.`.map((x,y,z)=>z[y+1]>"["?x[0]:x).join`.`
?Mathematica, 75 байт
Анонимная функция. Принимает строку в качестве ввода и возвращает строку в качестве вывода.
источник
Japt ,
30 2725 байтПопробуйте онлайн!
источник
('[>ZgJ)
Python 2 ,
7673 байтаПопробуйте онлайн! или попробуйте все тестовые случаи
источник
Python 2 ,
8881 байтПопробуйте онлайн!
источник
Java 7, 66 байт
Порт от удивительного ответа Retina от @MartinEnder .
Попробуй это здесь.
источник
JavaScript (ES6), 36 байт
Еще один порт Мартина Retina ответа . Смотрите мое другое решение здесь .
источник
V , 9 байт
Попробуйте онлайн!
HexDump:
Это прекрасный пример подписи V в сжатии регулярных выражений .
Объяснение:
источник
Python 2 ,
1089789 байтПопробуйте онлайн!
-8 большое спасибо @ovs за подсказку
источник
for x in range(len(i)+~(i[-1][0]<"[")):i[x]=i[x][0]
для -8sed ,
5722 байтаЯ ожидал, что решение sed будет немного короче этого ...Редактировать:
Более короткое решение использует регулярное выражение из ответа Мартина Эндера .
21 байт исходного кода + 1 байт для
-r
флага (или-E
флага для BSD sed).источник
s|\B\w+(\.[a-z])|\1|g
?Haskell , 58 байт
Попробуйте онлайн! Использование:
f "some.string"
.lex
анализирует строку как токены Haskell, поэтомуlex "some.string"
возвращает[("some",".string")]
.f
рекурсивно обрабатывает токены в строке и всегда добавляет первый символa
текущего токена, но оставшуюсяt
часть токена, только если оставшаяся строка после двоеточияp
начинается с символа верхнего регистра, то естьx<'a'
. Если совпадение с образцом не удалось, мы достигли последнего токена и просто вернулисьs
.источник