Best shuffle: Difference between revisions
Content added Content deleted
(→{{header|Java}}: some idiot removed the shuffle) |
(Add XPL0) |
||
Line 2,529: | Line 2,529: | ||
up pu (0) |
up pu (0) |
||
a a (1)</pre> |
a a (1)</pre> |
||
=={{header|XPL0}}== |
|||
<lang XPL0>include c:\cxpl\codes; \'code' declarations |
|||
string 0; \use zero-terminated string convention |
|||
func StrLen(A); \Return number of characters in an ASCIIZ string |
|||
char A; |
|||
int I; |
|||
for I:= 0 to -1>>1-1 do |
|||
if A(I) = 0 then return I; |
|||
proc Shuffle(W0); \Display best shuffle of characters in a word |
|||
char W0; |
|||
char W(20), SW(20); |
|||
int L, I, S, SS, C, T; |
|||
[L:= StrLen(W0); \word length |
|||
for I:= 0 to L do W(I):= W0(I); \get working copy of word (including 0) |
|||
SS:= 20; \initialize best (saved) score |
|||
for C:= 1 to 1_000_000 do \overkill? XPL0 is fast |
|||
[I:= Ran(L); \shuffle: swap random char with end char |
|||
T:= W(I); W(I):= W(L-1); W(L-1):= T; |
|||
S:= 0; \compute score |
|||
for I:= 0 to L-1 do |
|||
if W(I) = W0(I) then S:= S+1; |
|||
if S < SS then |
|||
[SS:= S; \save best score and best shuffle |
|||
for I:= 0 to L do SW(I):= W(I); |
|||
]; |
|||
]; |
|||
Text(0, W0); Text(0, ", "); \show original and shuffled words, score |
|||
Text(0, SW); Text(0, ", ("); IntOut(0, SS); ChOut(0, ^)); CrLf(0); |
|||
]; |
|||
int S, I; |
|||
[S:= ["abracadabra", "seesaw", "elk", "grrrrrr", "up", "a"]; |
|||
for I:= 0 to 5 do Shuffle(S(I)); |
|||
]</lang> |
|||
Output: |
|||
<pre> |
|||
abracadabra, drababaraac, (0) |
|||
seesaw, easwes, (0) |
|||
elk, lke, (0) |
|||
grrrrrr, rrrrrrg, (5) |
|||
up, pu, (0) |
|||
a, a, (1) |
|||
</pre> |
|||
{{omit from|bc|No string operations.}} |
{{omit from|bc|No string operations.}} |