Skip to content

Commit

Permalink
Turn exercise 024 to practice (#2231)
Browse files Browse the repository at this point in the history
* Turn exercise 024 to practice

* Chore: Modified Turn exercise 024 to practice

* Update Turn erexcise 024 to practice
  • Loading branch information
Ozyugoo committed Mar 27, 2024
1 parent 0cd025d commit f8f8f16
Show file tree
Hide file tree
Showing 9 changed files with 54 additions and 0 deletions.
25 changes: 25 additions & 0 deletions practice/024/answer/impl.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
let rand_select list n =
let rec extract acc n = function
| [] -> raise Not_found
| h :: t -> if n = 0 then (h, acc @ t) else extract (h :: acc) (n - 1) t
in
let extract_rand list len =
extract [] (Random.int len) list
in
let rec aux n acc list len =
if n = 0 then acc else
let picked, rest = extract_rand list len in
aux (n - 1) (picked :: acc) rest (len - 1)
in
let len = List.length list in
aux (min n len) [] list len

let range a b =
let rec aux acc high low =
if high >= low then
aux (high :: acc) (high - 1) low
else acc
in
if a < b then aux [] b a else List.rev (aux [] a b)

let lotto_select n m = rand_select (range 1 m) n
2 changes: 2 additions & 0 deletions practice/024/answer/test/dune
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
(include_subdirs no)
(test (name run) (libraries ounit2 ex))
3 changes: 3 additions & 0 deletions practice/024/answer/test/run.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module Test = Ex.Make(Ex.Answer)

let () = OUnit2.run_test_tt_main Test.v
2 changes: 2 additions & 0 deletions practice/024/dune
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
(include_subdirs qualified)
(library (name ex) (libraries ounit2))
1 change: 1 addition & 0 deletions practice/024/dune-project
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
(lang dune 3.7)
15 changes: 15 additions & 0 deletions practice/024/ex.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
open OUnit2

module type Testable = sig
val lotto_select : int -> int -> int list
end

module Make(Tested: Testable) : sig val v : test end = struct
let v = "lotto_select" >::: [
"nil" >:: (fun _ -> assert_equal [] (Tested.lotto_select 0 0));
"cons" >:: (fun _ -> assert_equal [20; 28; 45; 16; 24; 38] (Tested.lotto_select 6 49));
]
end

module Work : Testable = Work.Impl
module Answer : Testable = Answer.Impl
1 change: 1 addition & 0 deletions practice/024/work/impl.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
let lotto_select _ = failwith "Not yet implemented"
2 changes: 2 additions & 0 deletions practice/024/work/test/dune
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
(include_subdirs no)
(test (name run) (libraries ounit2 ex))
3 changes: 3 additions & 0 deletions practice/024/work/test/run.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module Test = Ex.Make(Ex.Work)

let () = OUnit2.run_test_tt_main Test.v

0 comments on commit f8f8f16

Please sign in to comment.