From f24f834ae066e9d73eac2bdc3e26b072e85cb44b Mon Sep 17 00:00:00 2001 From: Arkitu Date: Mon, 12 Jan 2026 14:09:38 +0100 Subject: [PATCH] td5 --- td5/dune-project | 26 ++++++++++++++++++++++++++ td5/exo1.c | 10 ++++++++++ td5/lib/dune | 3 +++ td5/lib/lib.ml | 29 +++++++++++++++++++++++++++++ td5/td5.opam | 32 ++++++++++++++++++++++++++++++++ td5/test/dune | 4 ++++ td5/test/test.ml | 7 +++++++ 7 files changed, 111 insertions(+) create mode 100644 td5/dune-project create mode 100644 td5/exo1.c create mode 100644 td5/lib/dune create mode 100644 td5/lib/lib.ml create mode 100644 td5/td5.opam create mode 100644 td5/test/dune create mode 100644 td5/test/test.ml diff --git a/td5/dune-project b/td5/dune-project new file mode 100644 index 0000000..dbcb208 --- /dev/null +++ b/td5/dune-project @@ -0,0 +1,26 @@ +(lang dune 3.20) + +(name td5) + +(generate_opam_files true) + +(source + (github username/reponame)) + +(authors "Author Name ") + +(maintainers "Maintainer Name ") + +(license LICENSE) + +(documentation https://url/to/documentation) + +(package + (name td5) + (synopsis "A short synopsis") + (description "A longer description") + (depends ocaml) + (tags + ("add topics" "to describe" your project))) + +; See the complete stanza docs at https://dune.readthedocs.io/en/stable/reference/dune-project/index.html diff --git a/td5/exo1.c b/td5/exo1.c new file mode 100644 index 0000000..aa803fc --- /dev/null +++ b/td5/exo1.c @@ -0,0 +1,10 @@ +#include "stdio.h" +#include "stdlib.h" + +void intertion_sort(int t[], int n) { + for (int i = 1; i < n; i++) { + int j = 0; + while (j < i && t[j] <= t[i]) + j++; + } +} diff --git a/td5/lib/dune b/td5/lib/dune new file mode 100644 index 0000000..6d315a9 --- /dev/null +++ b/td5/lib/dune @@ -0,0 +1,3 @@ +(library + (name lib) + (public_name td5)) diff --git a/td5/lib/lib.ml b/td5/lib/lib.ml new file mode 100644 index 0000000..6ed633e --- /dev/null +++ b/td5/lib/lib.ml @@ -0,0 +1,29 @@ +(* Exercice 1 *) +(* Insertion sort *) +let rec insert l x = match l with + | [] -> [x] + | y::t -> if x <= y then x::l else y::(insert t x) +;; + +let insertion_sort l = + List.fold_left + (fun acc x -> insert acc x) + [] + l +;; + +(* Selection sort *) +let rec min_l l = match l with + | [] -> invalid_arg "Empty list" + | [x] -> x, [] + | x::q -> + let y, qy = min_l q in + if x < y then x, q else y, (x::qy) +;; + +let rec selection_sort l = match l with + | [] | _::[] -> l + | _ -> + let m, q = min_l l in + m::(selection_sort q) +;; diff --git a/td5/td5.opam b/td5/td5.opam new file mode 100644 index 0000000..a43bbcb --- /dev/null +++ b/td5/td5.opam @@ -0,0 +1,32 @@ +# This file is generated by dune, edit dune-project instead +opam-version: "2.0" +synopsis: "A short synopsis" +description: "A longer description" +maintainer: ["Maintainer Name "] +authors: ["Author Name "] +license: "LICENSE" +tags: ["add topics" "to describe" "your" "project"] +homepage: "https://github.com/username/reponame" +doc: "https://url/to/documentation" +bug-reports: "https://github.com/username/reponame/issues" +depends: [ + "dune" {>= "3.20"} + "ocaml" + "odoc" {with-doc} +] +build: [ + ["dune" "subst"] {dev} + [ + "dune" + "build" + "-p" + name + "-j" + jobs + "@install" + "@runtest" {with-test} + "@doc" {with-doc} + ] +] +dev-repo: "git+https://github.com/username/reponame.git" +x-maintenance-intent: ["(latest)"] diff --git a/td5/test/dune b/td5/test/dune new file mode 100644 index 0000000..d2d6441 --- /dev/null +++ b/td5/test/dune @@ -0,0 +1,4 @@ +(executable + (name test) + (public_name test) + (libraries lib)) diff --git a/td5/test/test.ml b/td5/test/test.ml new file mode 100644 index 0000000..4707118 --- /dev/null +++ b/td5/test/test.ml @@ -0,0 +1,7 @@ +open Lib;; + +let l = [5; 3; 9; 0; 5; 0];; +let sorted = [0; 0; 3; 5; 5; 9];; + +assert (insertion_sort l = sorted);; +assert (selection_sort l = sorted);;