Best shuffle: Difference between revisions
Content added Content deleted
mNo edit summary |
|||
Line 7:
=={{header|D}}==
{{works with|D|2}}
<lang d>int bestShuffle(
int countSamePositions(
int count;
for (int i; i < len; i++) {
if (r2[i] != '-' && r1[i] == r2[i]) {
count++;
}
}▼
return count;
}
const len =
▲ }
s2.reverse;
s2.sort;
auto problemChar = sort!("a[1] > b[1]")(array(group(
if ((problemChar[1] - len / 2) > 0) {
int numToRemove = problemChar[1] - (len - problemChar[1]);
for (int i, j; i < len && j < numToRemove; i++) {
if (
j++;
}
}
}
do {
for (int i = len; i > 1; i--) {
▲ do {
char pc = cast(char)problemChar[0];
for (int i; i < len; i++) {
if (s2[i] == '-') {
s2[i] = pc;
}
}
}
▲ } while(countSamePositions(s, ch) > 0);
int samePos = countSamePositions(s, result);▼
writefln("%s %s (%s)",
return samePos;
}</lang>
output:<pre>abracadabra
seesaw
elk lke (0)
grrrrrr rrrrrgr (5)
Line 54 ⟶ 67:
<lang d>unittest {
assert(bestShuffle("abracadabra".dup) == 0);
assert(bestShuffle("seesaw".dup) == 0);
assert(bestShuffle("elk".dup) == 0);
assert(bestShuffle("grrrrrr".dup) == 5);
assert(bestShuffle("up".dup) == 0);
assert(bestShuffle("a".dup) == 1);
}</lang>
|