dm5
This commit is contained in:
parent
363950478d
commit
17230c0cd0
32
dm5/dm5.opam
Normal file
32
dm5/dm5.opam
Normal file
@ -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 <maintainer@example.com>"]
|
||||||
|
authors: ["Author Name <author@example.com>"]
|
||||||
|
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)"]
|
||||||
26
dm5/dune-project
Normal file
26
dm5/dune-project
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
(lang dune 3.20)
|
||||||
|
|
||||||
|
(name dm5)
|
||||||
|
|
||||||
|
(generate_opam_files true)
|
||||||
|
|
||||||
|
(source
|
||||||
|
(github username/reponame))
|
||||||
|
|
||||||
|
(authors "Author Name <author@example.com>")
|
||||||
|
|
||||||
|
(maintainers "Maintainer Name <maintainer@example.com>")
|
||||||
|
|
||||||
|
(license LICENSE)
|
||||||
|
|
||||||
|
(documentation https://url/to/documentation)
|
||||||
|
|
||||||
|
(package
|
||||||
|
(name dm5)
|
||||||
|
(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
|
||||||
3
dm5/lib/dune
Normal file
3
dm5/lib/dune
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
(library
|
||||||
|
(name lib)
|
||||||
|
(public_name dm5))
|
||||||
131
dm5/lib/lib.ml
Normal file
131
dm5/lib/lib.ml
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
(* Exercice 0 *)
|
||||||
|
let zip ta tb = Array.map2 (fun a b -> a,b) ta tb;;
|
||||||
|
|
||||||
|
(* Exercice 1 *)
|
||||||
|
let tirette t =
|
||||||
|
let n = Array.length t in
|
||||||
|
Array.init (n/2) (fun i -> t.(i) + t.(n-i))
|
||||||
|
;;
|
||||||
|
|
||||||
|
(* Exercice 2 *)
|
||||||
|
let quarante_deux t =
|
||||||
|
let n = Array.length t in
|
||||||
|
let count = ref 0 in
|
||||||
|
let i = ref 0 in
|
||||||
|
while !i < n do
|
||||||
|
if t.(!i) mod 42 = 0 then
|
||||||
|
count := !count + 1
|
||||||
|
else ()
|
||||||
|
done;
|
||||||
|
!count
|
||||||
|
;;
|
||||||
|
|
||||||
|
(* Exercice 3 *)
|
||||||
|
let croissant t =
|
||||||
|
let n = Array.length t in
|
||||||
|
let i = ref 0 in
|
||||||
|
while !i+1 < n && t.(!i) <= t.(!i+1) do
|
||||||
|
i := !i+1
|
||||||
|
done;
|
||||||
|
!i
|
||||||
|
;;
|
||||||
|
|
||||||
|
(* Exercice 4 *)
|
||||||
|
let bitonique t =
|
||||||
|
let n = Array.length t in
|
||||||
|
let grows = ref true in
|
||||||
|
let i = ref 0 in
|
||||||
|
let res = ref true in
|
||||||
|
while !res && !i+1 < n do
|
||||||
|
if !grows then
|
||||||
|
(if t.(!i) > t.(!i+1) then
|
||||||
|
grows := false)
|
||||||
|
else
|
||||||
|
if t.(!i) < t.(!i+1) then
|
||||||
|
res := false
|
||||||
|
done;
|
||||||
|
!res
|
||||||
|
;;
|
||||||
|
|
||||||
|
(* Exercice 5 *)
|
||||||
|
let psrn ta tb = Array.fold_left
|
||||||
|
(fun acc (a,b) -> acc + (a*b))
|
||||||
|
0
|
||||||
|
(Array.map2
|
||||||
|
(fun a b -> a,b)
|
||||||
|
ta
|
||||||
|
tb
|
||||||
|
)
|
||||||
|
;;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(* Exercice 6 *)
|
||||||
|
let rotation m =
|
||||||
|
let nx = Array.length m in
|
||||||
|
if nx = 0 then [||] else
|
||||||
|
let ny = Array.length m.(0) in
|
||||||
|
Array.init_matrix
|
||||||
|
ny
|
||||||
|
nx
|
||||||
|
(fun x y -> m.(y).(ny-x-1))
|
||||||
|
;;
|
||||||
|
|
||||||
|
(* Exercice 7 *)
|
||||||
|
let plsci t =
|
||||||
|
let n = Array.length t in
|
||||||
|
let current_start = ref 0 in
|
||||||
|
let start = ref 0 in
|
||||||
|
let max_length = ref (min 1 n) in
|
||||||
|
for i = 0 to n-1 do
|
||||||
|
if i+1 = n || t.(i) != t.(i+1) then (
|
||||||
|
let length = i - !current_start + 1 in
|
||||||
|
if !max_length < length then (
|
||||||
|
max_length := length;
|
||||||
|
start := !current_start
|
||||||
|
);
|
||||||
|
current_start := i+1
|
||||||
|
)
|
||||||
|
done;
|
||||||
|
!start, !max_length
|
||||||
|
;;
|
||||||
|
|
||||||
|
(* Exercice 8 *)
|
||||||
|
let sorteren t =
|
||||||
|
let zero, one, two = Array.fold_left
|
||||||
|
(fun (zero, one, two) a -> match a with
|
||||||
|
| 0 -> zero+1,one,two
|
||||||
|
| 1 -> zero,one+1,two
|
||||||
|
| 2 -> zero,one,two+1
|
||||||
|
| _ -> invalid_arg ""
|
||||||
|
)
|
||||||
|
(0,0,0)
|
||||||
|
t
|
||||||
|
in
|
||||||
|
Array.init
|
||||||
|
(zero+one+two)
|
||||||
|
(fun i ->
|
||||||
|
if i < zero then 0
|
||||||
|
else if i < zero+one then 1
|
||||||
|
else 2
|
||||||
|
)
|
||||||
|
;;
|
||||||
|
|
||||||
|
(* Exercice 9 *)
|
||||||
|
let dominant s =
|
||||||
|
let counts = Array.make 0 126 in
|
||||||
|
String.iter (fun c ->
|
||||||
|
let c = Char.code c in
|
||||||
|
counts.(c) <- counts.(c) + 1;
|
||||||
|
) s;
|
||||||
|
let _, max_c =
|
||||||
|
Array.fold_left
|
||||||
|
(fun (c, max_c) a ->
|
||||||
|
c+1,
|
||||||
|
if a > counts.(max_c) then c else max_c
|
||||||
|
)
|
||||||
|
(0,0)
|
||||||
|
counts
|
||||||
|
in
|
||||||
|
Char.chr max_c
|
||||||
|
;;
|
||||||
4
dm5/test/dune
Normal file
4
dm5/test/dune
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
(executable
|
||||||
|
(name test)
|
||||||
|
(public_name test)
|
||||||
|
(libraries lib))
|
||||||
22
dm5/test/test.ml
Normal file
22
dm5/test/test.ml
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
open Lib;;
|
||||||
|
|
||||||
|
assert (rotation
|
||||||
|
[|
|
||||||
|
[| 1; 5; 9 |];
|
||||||
|
[| 2; 6; 10 |];
|
||||||
|
[| 3; 7; 11 |];
|
||||||
|
[| 4; 8; 12 |]
|
||||||
|
|]
|
||||||
|
=
|
||||||
|
[|
|
||||||
|
[| 9; 10; 11; 12 |];
|
||||||
|
[| 5; 6; 7; 8 |];
|
||||||
|
[| 1; 2; 3; 4 |]
|
||||||
|
|]
|
||||||
|
);;
|
||||||
|
assert (rotation [||] = [||]);;
|
||||||
|
assert (rotation [|[||]; [||]|] = [||]);;
|
||||||
|
|
||||||
|
assert (plsci [||] = (0,0));;
|
||||||
|
assert (plsci [|1|] = (0,1));;
|
||||||
|
assert (plsci [|1; 1|] = (0,2));;
|
||||||
Loading…
Reference in New Issue
Block a user