자바 패키지 단축 (있는 경우)를 제외하고

요약 보고

완전한 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

규칙

  • 바이트 단위의 최단 코드 승리
  • 표준 허점 적용


답변

레티 나 , 17 바이트

\B\w+(\.[a-z])
$1

온라인으로 사용해보십시오!

설명

\B         # Start from a position that isn't a word boundary. This ensures that
           # the first letter of the package name is skipped.
\w+        # Match one or more word characters. This is the remainder of the
           # package name which we want to remove.
(          # Capture the next part in group 1, because we want to keep it...
  \.[a-z]  #   Match a period and a lower-case letter. This ensures that we
           #   don't match the package that precedes the class, or the package or
           #   class at the end of the input.
)

이것은로 교체 $1기간 및 제거해서는 안 소문자이다.


답변

자바 스크립트 (ES6), 68 53 바이트

s=>s.split`.`.map((x,y,z)=>z[y+1]>"["?x[0]:x).join`.`
  • Arnauld 덕분에 15 바이트가 절약되었습니다 .

내 다른 솔루션을 여기에서 참조 하십시오 .


시도 해봐

f=
s=>s.split`.`.map((x,y,z)=>z[y+1]>"["?x[0]:x).join`.`
i.addEventListener("input",_=>o.innerText=f(i.value))
console.log(f("com.stackoverflow.main"))
console.log(f("c.g.parser.Gson"))
console.log(f("com.google.longer.package.TestClass"))
<input id=i><pre id=o>


답변

수학, 75 바이트

#[[;;-3]]~StringTake~1~Join~#[[-2;;]]~StringRiffle~"."&[#~StringSplit~"."]&

익명의 기능. 문자열을 입력으로 받아서 문자열을 출력으로 반환합니다.


답변

Japt , 30 27 25 바이트

¡Y>Zl -('[>ZgJ)-2?X:Xg}'.

온라인으로 사용해보십시오!


답변

파이썬 2 , 76 73 바이트

q=input().split('.')
i=~(q[-1]<'_')
q[:i]=zip(*q[:i])[0]
print'.'.join(q)

온라인으로 사용해보십시오! 또는 모든 테스트 사례를 시도하십시오


답변

파이썬 2 , 88 81 바이트

f=lambda s,d=".":s.count(d)>(s.split(d)[-1]<"[")and s[0]+d+f(s[s.find(d)+1:])or s

온라인으로 사용해보십시오!


답변

자바 7, 66 바이트

String c(String s){return s.replaceAll("\\B\\w+(\\.[a-z])","$1");}

@MartinEnder 의 놀라운 Retina 답변의 포트 .

여기에서 시도하십시오.