Best shuffle: Difference between revisions
Content added Content deleted
m (Added indents to improve readability) |
No edit summary |
||
Line 4,523: | Line 4,523: | ||
up pu: 0 |
up pu: 0 |
||
a a: 1</pre> |
a a: 1</pre> |
||
=={{header|SparForte}}== |
|||
As a structured script. |
|||
<syntaxhighlight lang="ada">#!/usr/local/bin/spar |
|||
pragma annotate( summary, "best_shuffle" ) |
|||
@( description, "Shuffle the characters of a string in such a" ) |
|||
@( description, "way that as many of the character values are" ) |
|||
@( description, "in a different position as possible. Print" ) |
|||
@( description, "the result as follows: original string," ) |
|||
@( description, "shuffled string, (score). The score gives the" ) |
|||
@( description, "number of positions whose character value" ) |
|||
@( description, "did not change." ) |
|||
@( author, "Ken O. Burtch" ) |
|||
@( see_also, "http://rosettacode.org/wiki/Best_shuffle" ); |
|||
pragma license( unrestricted ); |
|||
pragma restriction( no_external_commands ); |
|||
procedure best_shuffle is |
|||
-- Shuffle the characters in a string. Do not swap identical characters |
|||
function shuffle( s : string ) return string is |
|||
t : string := s; |
|||
tmp : character; |
|||
begin |
|||
for i in 1..strings.length(s) loop |
|||
for j in 1..strings.length(s) loop |
|||
if i /= j and strings.element( s, i ) /= strings.element( t, j ) and strings.element( s, j ) /= strings.element( t, i ) then |
|||
tmp := strings.element( t, i ); |
|||
t := strings.overwrite( t, i, strings.element( t, j ) & "" ); |
|||
t := strings.overwrite( t, j, tmp & "" ); |
|||
end if; |
|||
end loop; |
|||
end loop; |
|||
return t; |
|||
end shuffle; |
|||
stop : boolean := false; |
|||
begin |
|||
while not stop loop |
|||
declare |
|||
original : constant string := get_line; |
|||
shuffled : constant string := shuffle( original ); |
|||
score : natural := 0; |
|||
begin |
|||
if original = "" then |
|||
stop; |
|||
end if; |
|||
-- determine the score for the shuffled string |
|||
for i in 1..strings.length( original ) loop |
|||
if strings.element( original, i ) = strings.element( shuffled, i ) then |
|||
score := @+1; |
|||
end if; |
|||
end loop; |
|||
put_line( original & ", " & shuffled & ", (" & |
|||
strings.image( score ) & " )" ); |
|||
end; |
|||
end loop; |
|||
end best_shuffle;</syntaxhighlight> |
|||
=={{header|Tcl}}== |
=={{header|Tcl}}== |
||
{{tcllib|struct::list}} |
{{tcllib|struct::list}} |