]> git.ameliathe1st.gay Git - cells.git/commitdiff
Le voisinage est maintenant un type abstrait
authorAmélia Coutard-Sander <git@ameliathe1st.gay>
Mon, 16 Dec 2024 22:23:49 +0000 (23:23 +0100)
committerAmélia Coutard-Sander <git@ameliathe1st.gay>
Mon, 16 Dec 2024 22:28:51 +0000 (23:28 +0100)
automata/automata.ml
automata/automata.mli
automata/automata/brain.ml
automata/automata/cont.ml
automata/automata/life.ml
automata/automata/maze.ml
automata/automata/wireworld.ml

index 47189dd3bababaf3dbfee7bb1a096d6bbcf120d3..8ad1fc431281ee71f429d3943a5163c17c06dec4 100644 (file)
@@ -18,9 +18,13 @@ module type Automaton = sig
 
   type t
 
-  val neighbours : (int * int) list
+  type 'a neighbours
 
-  val transition : t list -> t -> t
+  val neighbours : (int * int) neighbours
+
+  val map : ('a -> 'b) -> 'a neighbours -> 'b neighbours
+
+  val transition : t neighbours -> t -> t
 
   val default : t
 
@@ -50,10 +54,10 @@ let set x y c ((d, cells) as board) =
 
 let update (type t) (m : (module Automaton with type t = t)) ((d, cells) as board) =
         let module M = (val m) in
-        ( M.transition (List.map (Fun.const d) M.neighbours) d,
+        ( M.transition (M.map (Fun.const d) M.neighbours) d,
           Array.init 64 (fun x ->
               Array.init 64 (fun y ->
-                  M.transition (List.map (fun (dx, dy) -> get (x + dx) (y + dy) board) M.neighbours) cells.(x).(y))) )
+                  M.transition (M.map (fun (dx, dy) -> get (x + dx) (y + dy) board) M.neighbours) cells.(x).(y))) )
 
 let automata =
         [
index 7d3aa7be6dc87a7c0f8ae73a7086c5a60af2df19..073e67c4475f72740e32dfa2799dd3286c7a726f 100644 (file)
@@ -18,9 +18,13 @@ module type Automaton = sig
 
   type t
 
-  val neighbours : (int * int) list
+  type 'a neighbours
 
-  val transition : t list -> t -> t
+  val neighbours : (int * int) neighbours
+
+  val map : ('a -> 'b) -> 'a neighbours -> 'b neighbours
+
+  val transition : t neighbours -> t -> t
 
   val default : t
 
index 0429a7045e40f920f7ebd69afdb1214702693f9f..1e46cb1f159911372748e94ee347ff4595bf1f17 100644 (file)
@@ -17,8 +17,12 @@ let name = "Le Cerveau de Brian"
 
 type t = Off | On | Dying
 
+type 'a neighbours = 'a list
+
 let neighbours = [(-1, -1); (-1, 0); (-1, 1); (0, -1); (0, 1); (1, -1); (1, 0); (1, 1)]
 
+let map = List.map
+
 let transition l = function
         | Off ->
                 let n = List.length (List.filter (( = ) On) l) in
index 64c33088e36ff1f998188663a8d8c955b13fbc7b..58ec814692dc4df5e1d9162545ddc91e76572475 100644 (file)
@@ -17,8 +17,12 @@ let name = "Automate continu random"
 
 type t = float
 
+type 'a neighbours = 'a list
+
 let neighbours = [(-1, 0); (0, -1); (0, 1); (1, 0)]
 
+let map = List.map
+
 let transition l c = List.fold_left ( +. ) c l /. 5.
 
 let default = 0.
index 032488511f794c0361ffe11a813a7de878d83cd7..ba0b3c15beea43eda8577b22c7ffbd44f9037ab7 100644 (file)
@@ -17,8 +17,12 @@ let name = "Conway's Game of Life"
 
 type t = Dead | Alive
 
+type 'a neighbours = 'a list
+
 let neighbours = [(-1, -1); (-1, 0); (-1, 1); (0, -1); (0, 1); (1, -1); (1, 0); (1, 1)]
 
+let map = List.map
+
 let transition l c =
         let n = List.length (List.filter (( = ) Alive) l) in
         if n < 2 || n > 3 then Dead else if n == 3 then Alive else c
index 402d9820a3687a55e53356b33469f3c326e1c6bc..f7bd10130970c3219b064550aa7a24d58f14787b 100644 (file)
@@ -17,8 +17,12 @@ let name = "Labyrinthe B3S12345"
 
 type t = Sol | Mur
 
+type 'a neighbours = 'a list
+
 let neighbours = [(-1, -1); (-1, 0); (-1, 1); (0, -1); (0, 1); (1, -1); (1, 0); (1, 1)]
 
+let map = List.map
+
 let transition l c =
         let n = List.length (List.filter (( = ) Mur) l) in
         if n < 1 || n > 5 then Sol else if n == 3 then Mur else c
index 14ab5d7bebc6f30064ca7b1072b0dce59fdaad2a..f8e5e015e6a37e439ee8ea4b7e198010445e25a7 100644 (file)
@@ -17,8 +17,12 @@ let name = "Wireworld"
 
 type t = Empty | Conductor | Head | Tail
 
+type 'a neighbours = 'a list
+
 let neighbours = [(-1, -1); (-1, 0); (-1, 1); (0, -1); (0, 1); (1, -1); (1, 0); (1, 1)]
 
+let map = List.map
+
 let transition l = function
         | Empty -> Empty
         | Conductor ->