자바 (8) 346 345 344 336 327 바이트
s->{int g=c(s+=" ","G"),u=c(s,"U"),w=c(s,"W"),x=c(s,"X"),f=c(s,"F")-u,h=c(s,"H")-g,v=c(s,"V")-f,o=c(s,"O")-u-w,i=c(s,"I")-f-x-g;return d(s=d(s=d(s=d(s=d(s=d(s=d(s=d(s=d("",o,1),w,2),h,3),u,4),f,5),x,6),v,7),g,8),n,9);}int c(String...s){return~-s[0].split(s[1]).length;}String d(String s,int i,int n){for(;i-->0;s+=n);return s;}
여기에서 시도하십시오.
일반적인 설명 :
알파벳에서 각 문자의 발생을 살펴 보았습니다.
E 13357789
F 45
G 8
H 38
I 5689
N 1799
O 124
R 34
S 67
T 238
U 4
V 57
W 2
X 6
- 먼저 모든 단일 일치 문자를 계산했습니다.
G=8; U=4; W=2; X=6
.
- 그런 다음 두 개의 일치하는 문자가 모두 나타납니다.이 문자는 위의 네 가지 중 하나와도 일치하므로 개수에서 뺄 수 있습니다.
F=5; H=3
합니다.
- 그런 다음 다시 같은 작업을 수행
V=7
(빼기)F=5
) .
- 그런 다음 남은 세 개의 일치하는 문자 모두에 대해 동일합니다.
O=1; N=9
.
- 그러나
N
에 두 개의 어커런스가 있으므로 의 모든 어커런스마다 NINE
추가 작업을 수행해야 했기 때문에 대신 두 개의 이전 일치 항목을 빼서 대신 사용 했습니다.-1
N
I=9
코드 설명 :
s->{ // Method with String as parameter and return-type
int g=c(s+=" ","G"), // Amount of 8s (and append a space to `s` first, for the .split)
u=c(s,"U"), // Amount of 4s
w=c(s,"W"), // Amount of 2s
x=c(s,"X"), // Amount of 6s
f=c(s,"F")-u, // Amount of 5s
h=c(s,"H")-g, // Amount of 3s
v=c(s,"V")-f, // Amount of 7s
o=c(s,"O")-u-w, // Amount of 1s
i=c(s,"I")-f-x-g; // Amount of 9s
return d( // Return the result by:
s=d(
s=d(
s=d(
s=d(
s=d(
s=d(
s=d(
s=d("", // Making the input String `s` empty, since we no longer need it
o,1), // Append all 1s to `s`
w,2), // Append all 2s to `s`
h,3), // Append all 3s to `s`
u,4), // Append all 4s to `s`
f,5), // Append all 5s to `s`
x,6), // Append all 6s to `s`
v,7), // Append all 7s to `s`
g,8), // Append all 8s to `s`
i,9); // And then returning `s` + all 9s
} // End of method
int c(String...s){ // Separate method with String-varargs parameter and int return-type
// `s[0]` is the input-String
// `s[1]` is the character to check
return~-s[0].split(s[1]).length;
// Return the amount of times the character occurs in the String
} // End of separated method (1)
String d(String s,int i,int n){
// Separate method with String and two int parameters and String return-type
for(;i-->0; // Loop from the first integer-input down to 0
s+=n // And append the input-String with the second input-integer
); // End of loop
return s; // Return the resulting String
} // End of separated method (2)
"ONEWESTV" -> 27
(실제로는 나타나지 않는 숫자 포함)