요약 보고
완전한 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~"."]&
익명의 기능. 문자열을 입력으로 받아서 문자열을 출력으로 반환합니다.
답변
답변
파이썬 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");}