Java 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
。
- 次に、上記の4つのうちの1つにも一致する2つの一致する文字のすべての出現数をカウントから減算できます
F=5; H=3
。
- それから
V=7
(を引くことでF=5
)同じことを繰り返しました。
- 次に、残った3つの一致文字すべてに同じ:
O=1; N=9
。
- しかし、
N
に2つのオカレンスNINE
がある-1
ため、のすべてのオカレンスに対して追加を行う必要があったためN
、I=9
代わりに使用しました(2つではなく3つの以前の一致を減算する)。
コードの説明:
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
(実際には表示されない数字を含む)