Best shuffle: Difference between revisions

Content added Content deleted
(→‎{{header|PHP}}: added optimization)
(Added Ada version)
Line 10: Line 10:
* [[Anagrams/Deranged anagrams]]
* [[Anagrams/Deranged anagrams]]
* [[Permutations/Derangements]]
* [[Permutations/Derangements]]
=={{header|Ada}}==
=== {{trans|AWK}} ===
<lang Ada>with Ada.Text_IO;

procedure Best_Shuffle is

function Best_Shuffle(S: String) return String is
T: String(S'Range) := S;
Tmp: Character;
begin
for I in S'Range loop
for J in S'Range loop
if I /= J and S(I) /= T(J) and S(J) /= T(I) then
Tmp := T(I);
T(I) := T(J);
T(J) := Tmp;
end if;
end loop;
end loop;
return T;
end Best_Shuffle;

Stop : Boolean := False;

begin -- main procedure
while not Stop loop
declare
Original: String := Ada.Text_IO.Get_Line;
Shuffle: String := Best_Shuffle(Original);
Score: Natural := 0;
begin
for I in Original'Range loop
if Original(I) = Shuffle(I) then
Score := Score + 1;
end if;
end loop;
Ada.Text_Io.Put_Line(Original & ", " & Shuffle & ", (" &
Natural'Image(Score) & " )");
if Original = "" then
Stop := True;
end if;
end;
end loop;
end Best_Shuffle;</lang>

<pre>> ./best_shuffle < data.txt
abracadabra, caadrbabaar, ( 0 )
seesaw, ewaess, ( 0 )
elk, kel, ( 0 )
grrrrrr, rgrrrrr, ( 5 )
up, pu, ( 0 )
aabbbbaa, bbaaaabb, ( 0 )
xxxxx, xxxxx, ( 5 )
, , ( 0 )
</pre>

=={{header|AWK}}==
=={{header|AWK}}==
=== {{trans|Icon}} ===
=== {{trans|Icon}} ===