Best shuffle: Difference between revisions

→‎{{header|Ada}}: add testcases and output
m (and a deterministic result)
(→‎{{header|Ada}}: add testcases and output)
Line 37:
{{trans|AWK}}
<lang Ada>with Ada.Text_IO;
with Ada.Strings.Unbounded;
 
procedure Best_Shuffle is
function Best_Shuffle (S : String) return String;
 
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;
Line 56 ⟶ 59:
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
whilefor notTest_Case Stopin Test_Cases'Range loop
declare
Original : constant String := Ada.Text_IOStrings.Unbounded.Get_Line;To_String
Shuffle: String (Test_Cases := Best_Shuffle(OriginalTest_Case));
ScoreShuffle : Naturalconstant String := 0Best_Shuffle (Original);
Score : StopNatural := True0;
begin
for I in Original'Range loop
if Original (I) = Shuffle (I) then
Score := Score + 1;
end if;
end loop;
Ada.Text_IoText_IO.Put_Line (Original & ", " & Shuffle & ", (" &
Natural'Image (Score) & " )");
if Original = "" then
Stop := True;
end if;
end;
end loop;
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}}==
256

edits