diff --git a/src/main/java/matrix/SubMatrixInitializer.java b/src/main/java/matrix/SubMatrixInitializer.java
new file mode 100644
index 0000000000000000000000000000000000000000..79bb8905dc318214f6c2382d6ece8af5112556de
--- /dev/null
+++ b/src/main/java/matrix/SubMatrixInitializer.java
@@ -0,0 +1,16 @@
+package matrix;
+
+public class SubMatrixInitializer<T> implements MatrixInitializer<T> {
+    private final Matrix<T> originalMatrix;
+    private final Coordinate corner;
+
+    public SubMatrixInitializer(Matrix<T> originalMatrix, Coordinate corner) {
+        this.originalMatrix = originalMatrix;
+        this.corner = corner;
+    }
+
+    @Override
+    public T initialValueAt(Coordinate coordinate) {
+        return originalMatrix.get(coordinate.plus(corner));
+    }
+}
diff --git a/src/main/java/model/State.java b/src/main/java/model/State.java
index 1954558460d6969d09544c64c40152d97c1a736e..65e36954a1a37aa36bc1934504dc3f03612d2605 100644
--- a/src/main/java/model/State.java
+++ b/src/main/java/model/State.java
@@ -44,7 +44,12 @@ public interface State<S> {
      * @return The number of times the specified state appears in the list of neighbors.
      */
     static <T> int count(T state, List<T> neighbours) {
-        //TODO: à compléter
-        return 0;
+        int count = 0;
+        for (T neighbour : neighbours) {
+            if (neighbour.equals(state)) {
+                count++;
+            }
+        }
+        return count;
     }
-}
\ No newline at end of file
+}