Apa itu Unique Random?
Unique Random adalah bilangan acak yang tidak boleh berulang alias unique.
Memang agak repot untuk membuat unique random di Delphi 7. Salah satunya karena tidak ada List<Integer> seperti di Java.
Salah satu contoh implementasi unique random adalah untuk mengacak soal seperti di CAT(Computer Assisted Test) milik BKN(Badan Kepegawaian Negara) yg dipakai untuk Tes CPNS. Tujuannya adalah untuk meminimalisir terjadinya saling contek jawaban antar peserta.
Source Code
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
procedure Shuffle(var aArray; aItemCount: Integer; aItemSize: Integer); var Inx: Integer; RandInx: Integer; SwapItem: PByteArray; A: TByteArray absolute aArray; begin Randomize; if (aItemCount > 1) then begin GetMem(SwapItem, aItemSize); try for Inx := 0 to (aItemCount - 2) do begin RandInx := Random(aItemCount - Inx); Move(A[Inx * aItemSize], SwapItem^, aItemSize); Move(A[RandInx * aItemSize], A[Inx * aItemSize], aItemSize); Move(SwapItem^, A[RandInx * aItemSize], aItemSize); end; finally FreeMem(SwapItem, aItemSize); end; end; end; procedure TForm1.btnGenerateClick(Sender: TObject); begin goRandom(se1.Value); end; |
Implementasi
0 1 2 3 4 5 6 7 8 9 10 11 12 13 |
procedure TForm1.goRandom(x : Integer); var a: array[1..100] of Integer; i: Shortint; begin lst1.Clear; Randomize; for i := Low(a) to x {High(a)} do a[i] := i; Shuffle(a, x{High(a)}, SizeOf(Integer)); for i := 1 to {High(a)} x - 1 do lst1.Items.Add(IntToStr(i)+' | '+IntToStr(a[i])); end; |
Referensi: http://www.swissdelphicenter.ch/en/showcode.php?id=1006