From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=BAYES_00,FORGED_GMAIL_RCVD, FREEMAIL_FROM autolearn=no autolearn_force=no version=3.4.4 X-Google-Thread: 103376,96b1bf0c24ced968 X-Google-NewGroupId: yes X-Google-Attributes: gida07f3367d7,domainid0,public,usenet X-Google-Language: ENGLISH,ASCII-7-bit Received: by 10.66.89.162 with SMTP id bp2mr1682694pab.4.1346450965860; Fri, 31 Aug 2012 15:09:25 -0700 (PDT) Received: by 10.68.197.70 with SMTP id is6mr2140890pbc.14.1346450965847; Fri, 31 Aug 2012 15:09:25 -0700 (PDT) Path: a8ni4210pbd.1!nntp.google.com!4no1182625pbn.1!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: comp.lang.ada Date: Fri, 31 Aug 2012 15:09:25 -0700 (PDT) In-Reply-To: <3a9f8943-34af-43b2-ab27-aad438fa0974@googlegroups.com> Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=69.20.190.126; posting-account=lJ3JNwoAAAAQfH3VV9vttJLkThaxtTfC NNTP-Posting-Host: 69.20.190.126 References: <7bd3df18-178b-4735-ac43-c6bb6df9e999@googlegroups.com> <50406532$0$10734$5b6aafb4@news.zen.co.uk> <5040efd3$0$10736$5b6aafb4@news.zen.co.uk> <3a9f8943-34af-43b2-ab27-aad438fa0974@googlegroups.com> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: Subject: Re: Question: re Image Files. From: Shark8 Injection-Date: Fri, 31 Aug 2012 22:09:25 +0000 Content-Type: text/plain; charset=ISO-8859-1 Date: 2012-08-31T15:09:25-07:00 List-Id: Here's one for you then. It builds a shuffled array over the given type, which can be used to index into something like a deck of cards or somesuch. Generic Type Element is (<>); Low : Natural:= Element'Pos(Element'First); High : Natural:= Element'Pos(Element'Last); Package Random is SubType Element_Range is Integer Range Low..High; Function Incrementor Return Element; Type Element_Array is Array(Element_Range) of Element; Values : Element_Array; Procedure Print; End Random; -------------------------- With Ada.Text_IO, Ada.Numerics.Discrete_Random; Use Ada.Text_IO; Package Body Random is Count : Element := Element'First; Function To_Integer( Input : in Element ) Return Element_Range is begin Return Low; end; Function Incrementor Return Element is begin Return Result : Element:= Count do Null; Count:= Element'Succ( Result ); Exception When Constraint_Error => Count:= Element'First; End Return; end Incrementor; Procedure Swap( Index_1, Index_2 : In Integer ) is Temp : Constant Element:= Values( Integer(Index_1) ); begin Values( Integer(Index_1) ):= Values( Integer(Index_2) ); Values( Integer(Index_2) ):= Temp; end Swap; Procedure Print is begin Put_Line( "Length: " & Values'Length'Img ); Put( "(" ); For Index in Values'First..Integer'Pred(Values'Last) loop Put( Values(Index)'Img & ',' ); end loop; Put( Values(Values'Last)'Img ); Put_Line( ")" ); end Print; Begin null; Shuffle: Declare Package Random_Element is New Ada.Numerics.Discrete_Random( Element_Range ); Number : Random_Element.Generator; Use Random_Element; Function Random( Gen : Generator ) Return Element_Range Renames Random_Element.Random; Begin Reset( Number ); Values:= Element_Array'( Others => Incrementor ); For Index in Element_Array'Range loop Swap( Index, Random(Number) ); end loop; End Shuffle; End Random;