Best shuffle: Difference between revisions

Content added Content deleted
m (and a deterministic result)
(→‎{{header|Ada}}: add testcases and output)
Line 37: Line 37:
{{trans|AWK}}
{{trans|AWK}}
<lang Ada>with Ada.Text_IO;
<lang Ada>with Ada.Text_IO;
with Ada.Strings.Unbounded;


procedure Best_Shuffle is
procedure Best_Shuffle is
function Best_Shuffle (S : String) return String;


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


Test_Cases : constant array (1 .. 6)
Stop : Boolean := False;
of Ada.Strings.Unbounded.Unbounded_String :=
(Ada.Strings.Unbounded.To_Unbounded_String ("abracadabra"),
Ada.Strings.Unbounded.To_Unbounded_String ("seesaw"),
Ada.Strings.Unbounded.To_Unbounded_String ("elk"),
Ada.Strings.Unbounded.To_Unbounded_String ("grrrrrr"),
Ada.Strings.Unbounded.To_Unbounded_String ("up"),
Ada.Strings.Unbounded.To_Unbounded_String ("a"));


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

Output:
<pre>abracadabra, caadrbabaar, ( 0 )
seesaw, ewaess, ( 0 )
elk, kel, ( 0 )
grrrrrr, rgrrrrr, ( 5 )
up, pu, ( 0 )
a, a, ( 1 )</pre>


=={{header|AutoHotkey}}==
=={{header|AutoHotkey}}==