From 6515b51e2ce04ebc24c8a6f83b9935f58c128d54 Mon Sep 17 00:00:00 2001
From: dlesignac <damien.lesignac@dreev.com>
Date: Sun, 24 Apr 2022 15:47:22 +0200
Subject: [PATCH] Move some code and add kata.md

---
 kata.md                                       | 46 +++++++++++++++++++
 .../common/{measure => }/Angle.java           |  2 +-
 .../common/{measure => }/Distance.java        |  2 +-
 .../common/{measure => }/Probability.java     |  2 +-
 .../common/{measure => }/Vector.java          |  2 +-
 .../common/{measure => }/VectorComponent.java |  2 +-
 .../DefaultPredatorMatingConfigurer.java      |  4 +-
 .../mating/DefaultPreyMatingConfigurer.java   |  4 +-
 .../mating/MatingConfigurer.java              |  4 +-
 .../DefaultPredatorMovingConfigurer.java      |  2 +-
 .../moving/DefaultPreyMovingConfigurer.java   |  2 +-
 .../takima/lotka_volterra/moving/Moving.java  |  6 +--
 .../moving/MovingConfigurer.java              |  2 +-
 .../lotka_volterra/moving/MovingEntity.java   |  2 +-
 .../lotka_volterra/moving/Position.java       |  4 +-
 .../moving/PositionComponent.java             |  2 +-
 .../predation/DefaultPredationConfigurer.java |  4 +-
 .../predation/PredationConfigurer.java        |  4 +-
 .../moving/MovingEntityTest.java              |  2 +-
 19 files changed, 72 insertions(+), 26 deletions(-)
 create mode 100644 kata.md
 rename src/main/java/fr/takima/lotka_volterra/common/{measure => }/Angle.java (87%)
 rename src/main/java/fr/takima/lotka_volterra/common/{measure => }/Distance.java (91%)
 rename src/main/java/fr/takima/lotka_volterra/common/{measure => }/Probability.java (92%)
 rename src/main/java/fr/takima/lotka_volterra/common/{measure => }/Vector.java (96%)
 rename src/main/java/fr/takima/lotka_volterra/common/{measure => }/VectorComponent.java (80%)

diff --git a/kata.md b/kata.md
new file mode 100644
index 0000000..a424323
--- /dev/null
+++ b/kata.md
@@ -0,0 +1,46 @@
+Au programme aujourd'hui, il ne s'agira pas tellement de cercle mais plutôt de sinus: ceux des equations de
+[Lotka-Volterra](https://en.wikipedia.org/wiki/Lotka%E2%80%93Volterra_equations).
+
+```
+Kezako ?
+```
+
+En résumé, il s'agit d'une modélisation mathématique de la relation qui existe entre l'évolution d'une population de
+proie et l'évolution de la population de ses prédateurs.
+
+![lotka-volterra](https://upload.wikimedia.org/wikipedia/commons/7/70/Lotka_Volterra_Dynamique.gif "Lotka Volterra")
+
+En 4 phrases:
+
+* lorsque les proies sont peu nombreuses, le manque de nourriture entraine la diminution de la population de prédateurs
+* lorsque les prédateurs sont peu nombreux, la diminution du danger entraine l'augmentation de la population de proies
+* lorsque les proies sont nombreuses, l'abondance de nourriture entraine l'augmentation de la population de prédateurs
+* lorsque les prédateurs sont nombreux, l'augmentation du danger entraine la diminituion de la population de proies.
+
+```
+D'accord, mais moi je code quoi ?
+```
+
+Rien de moins qu'un écosystème virtuel. Une simulation mettant en jeu une population de proie, une population de
+prédateurs, une relation de prédation et une relation de reproduction, dont la complexité se limitera à ton imagination.
+
+Par exemple, une relation de prédation simple:
+
+* dans `x` % des cas, la prédation est réussie: le prédateur survit et la proie meurt
+* dans `(100 - x)` % des cas, la prédation échoue: le prédateur meurt et la proie survit.
+
+Bien sûr, cette version ultra-simplifiée est très peu représentative de la réalité. Tu peux par exemple décider
+d'ajouter une notion de distance entre les entités, un système de *points de vie* pour que les prédateurs ne meurent pas
+au premier échec, ... Cet exercice est volontairement libre pour que ton imagination puisse s'exprimer.
+
+```
+Et le rapport avec Lotka-Volterra ?
+```
+
+Si ta simulation est stable, alors elle ne devrait aboutir ni à l'extinction, ni à la prolifération (croissance infinie
+qui ne peut correspondre à la réalité) de l'une ou l'autre des deux (ou plus ;) ) espèces. En traçant la courbe de
+l'évolution des populations, tu devrais donc retrouver des formes familières.
+
+Voici un [petit exemple](https://gitlab.takima.io/dlesignac/lotka-volterra) en Java de simulation pas encore stabilisée.
+
+Pas facile... De quoi faire réfléchir sur la complexité et la fragilité de notre écosystème.
diff --git a/src/main/java/fr/takima/lotka_volterra/common/measure/Angle.java b/src/main/java/fr/takima/lotka_volterra/common/Angle.java
similarity index 87%
rename from src/main/java/fr/takima/lotka_volterra/common/measure/Angle.java
rename to src/main/java/fr/takima/lotka_volterra/common/Angle.java
index 78e16b2..785d020 100644
--- a/src/main/java/fr/takima/lotka_volterra/common/measure/Angle.java
+++ b/src/main/java/fr/takima/lotka_volterra/common/Angle.java
@@ -1,4 +1,4 @@
-package fr.takima.lotka_volterra.common.measure;
+package fr.takima.lotka_volterra.common;
 
 import fr.takima.lotka_volterra.common.value.PositiveInt;
 import fr.takima.lotka_volterra.validator.LowerThanValidator;
diff --git a/src/main/java/fr/takima/lotka_volterra/common/measure/Distance.java b/src/main/java/fr/takima/lotka_volterra/common/Distance.java
similarity index 91%
rename from src/main/java/fr/takima/lotka_volterra/common/measure/Distance.java
rename to src/main/java/fr/takima/lotka_volterra/common/Distance.java
index 11da308..08fd030 100644
--- a/src/main/java/fr/takima/lotka_volterra/common/measure/Distance.java
+++ b/src/main/java/fr/takima/lotka_volterra/common/Distance.java
@@ -1,4 +1,4 @@
-package fr.takima.lotka_volterra.common.measure;
+package fr.takima.lotka_volterra.common;
 
 import fr.takima.lotka_volterra.common.value.BigDecimalValue;
 import fr.takima.lotka_volterra.validator.GreaterThanValidator;
diff --git a/src/main/java/fr/takima/lotka_volterra/common/measure/Probability.java b/src/main/java/fr/takima/lotka_volterra/common/Probability.java
similarity index 92%
rename from src/main/java/fr/takima/lotka_volterra/common/measure/Probability.java
rename to src/main/java/fr/takima/lotka_volterra/common/Probability.java
index 21b7458..4b7ba4a 100644
--- a/src/main/java/fr/takima/lotka_volterra/common/measure/Probability.java
+++ b/src/main/java/fr/takima/lotka_volterra/common/Probability.java
@@ -1,4 +1,4 @@
-package fr.takima.lotka_volterra.common.measure;
+package fr.takima.lotka_volterra.common;
 
 import fr.takima.lotka_volterra.common.value.BigDecimalValue;
 import fr.takima.lotka_volterra.validator.GreaterThanValidator;
diff --git a/src/main/java/fr/takima/lotka_volterra/common/measure/Vector.java b/src/main/java/fr/takima/lotka_volterra/common/Vector.java
similarity index 96%
rename from src/main/java/fr/takima/lotka_volterra/common/measure/Vector.java
rename to src/main/java/fr/takima/lotka_volterra/common/Vector.java
index 614a577..00b209c 100644
--- a/src/main/java/fr/takima/lotka_volterra/common/measure/Vector.java
+++ b/src/main/java/fr/takima/lotka_volterra/common/Vector.java
@@ -1,4 +1,4 @@
-package fr.takima.lotka_volterra.common.measure;
+package fr.takima.lotka_volterra.common;
 
 import fr.takima.lotka_volterra.validator.NotNullValidator;
 
diff --git a/src/main/java/fr/takima/lotka_volterra/common/measure/VectorComponent.java b/src/main/java/fr/takima/lotka_volterra/common/VectorComponent.java
similarity index 80%
rename from src/main/java/fr/takima/lotka_volterra/common/measure/VectorComponent.java
rename to src/main/java/fr/takima/lotka_volterra/common/VectorComponent.java
index 30bdc3c..71179bd 100644
--- a/src/main/java/fr/takima/lotka_volterra/common/measure/VectorComponent.java
+++ b/src/main/java/fr/takima/lotka_volterra/common/VectorComponent.java
@@ -1,4 +1,4 @@
-package fr.takima.lotka_volterra.common.measure;
+package fr.takima.lotka_volterra.common;
 
 import fr.takima.lotka_volterra.validator.NotNullValidator;
 
diff --git a/src/main/java/fr/takima/lotka_volterra/mating/DefaultPredatorMatingConfigurer.java b/src/main/java/fr/takima/lotka_volterra/mating/DefaultPredatorMatingConfigurer.java
index 7ec8b5c..dbac6c6 100644
--- a/src/main/java/fr/takima/lotka_volterra/mating/DefaultPredatorMatingConfigurer.java
+++ b/src/main/java/fr/takima/lotka_volterra/mating/DefaultPredatorMatingConfigurer.java
@@ -1,7 +1,7 @@
 package fr.takima.lotka_volterra.mating;
 
-import fr.takima.lotka_volterra.common.measure.Probability;
-import fr.takima.lotka_volterra.common.measure.Distance;
+import fr.takima.lotka_volterra.common.Probability;
+import fr.takima.lotka_volterra.common.Distance;
 import org.springframework.stereotype.Component;
 
 import java.math.BigDecimal;
diff --git a/src/main/java/fr/takima/lotka_volterra/mating/DefaultPreyMatingConfigurer.java b/src/main/java/fr/takima/lotka_volterra/mating/DefaultPreyMatingConfigurer.java
index b671d95..5fa22f8 100644
--- a/src/main/java/fr/takima/lotka_volterra/mating/DefaultPreyMatingConfigurer.java
+++ b/src/main/java/fr/takima/lotka_volterra/mating/DefaultPreyMatingConfigurer.java
@@ -1,7 +1,7 @@
 package fr.takima.lotka_volterra.mating;
 
-import fr.takima.lotka_volterra.common.measure.Probability;
-import fr.takima.lotka_volterra.common.measure.Distance;
+import fr.takima.lotka_volterra.common.Probability;
+import fr.takima.lotka_volterra.common.Distance;
 import org.springframework.stereotype.Component;
 
 import java.math.BigDecimal;
diff --git a/src/main/java/fr/takima/lotka_volterra/mating/MatingConfigurer.java b/src/main/java/fr/takima/lotka_volterra/mating/MatingConfigurer.java
index aea7579..f5cb9ec 100644
--- a/src/main/java/fr/takima/lotka_volterra/mating/MatingConfigurer.java
+++ b/src/main/java/fr/takima/lotka_volterra/mating/MatingConfigurer.java
@@ -1,7 +1,7 @@
 package fr.takima.lotka_volterra.mating;
 
-import fr.takima.lotka_volterra.common.measure.Probability;
-import fr.takima.lotka_volterra.common.measure.Distance;
+import fr.takima.lotka_volterra.common.Probability;
+import fr.takima.lotka_volterra.common.Distance;
 
 import java.util.Random;
 
diff --git a/src/main/java/fr/takima/lotka_volterra/moving/DefaultPredatorMovingConfigurer.java b/src/main/java/fr/takima/lotka_volterra/moving/DefaultPredatorMovingConfigurer.java
index d291f0a..46827a3 100644
--- a/src/main/java/fr/takima/lotka_volterra/moving/DefaultPredatorMovingConfigurer.java
+++ b/src/main/java/fr/takima/lotka_volterra/moving/DefaultPredatorMovingConfigurer.java
@@ -1,6 +1,6 @@
 package fr.takima.lotka_volterra.moving;
 
-import fr.takima.lotka_volterra.common.measure.Distance;
+import fr.takima.lotka_volterra.common.Distance;
 import org.springframework.stereotype.Component;
 
 import java.util.Random;
diff --git a/src/main/java/fr/takima/lotka_volterra/moving/DefaultPreyMovingConfigurer.java b/src/main/java/fr/takima/lotka_volterra/moving/DefaultPreyMovingConfigurer.java
index 6c800b2..6730b98 100644
--- a/src/main/java/fr/takima/lotka_volterra/moving/DefaultPreyMovingConfigurer.java
+++ b/src/main/java/fr/takima/lotka_volterra/moving/DefaultPreyMovingConfigurer.java
@@ -1,6 +1,6 @@
 package fr.takima.lotka_volterra.moving;
 
-import fr.takima.lotka_volterra.common.measure.Distance;
+import fr.takima.lotka_volterra.common.Distance;
 import org.springframework.stereotype.Component;
 
 import java.util.Random;
diff --git a/src/main/java/fr/takima/lotka_volterra/moving/Moving.java b/src/main/java/fr/takima/lotka_volterra/moving/Moving.java
index 9971985..08a55e4 100644
--- a/src/main/java/fr/takima/lotka_volterra/moving/Moving.java
+++ b/src/main/java/fr/takima/lotka_volterra/moving/Moving.java
@@ -1,8 +1,8 @@
 package fr.takima.lotka_volterra.moving;
 
-import fr.takima.lotka_volterra.common.measure.Angle;
-import fr.takima.lotka_volterra.common.measure.Distance;
-import fr.takima.lotka_volterra.common.measure.Vector;
+import fr.takima.lotka_volterra.common.Angle;
+import fr.takima.lotka_volterra.common.Distance;
+import fr.takima.lotka_volterra.common.Vector;
 import fr.takima.lotka_volterra.validator.NotNullValidator;
 
 import java.util.HashSet;
diff --git a/src/main/java/fr/takima/lotka_volterra/moving/MovingConfigurer.java b/src/main/java/fr/takima/lotka_volterra/moving/MovingConfigurer.java
index da217e6..169d201 100644
--- a/src/main/java/fr/takima/lotka_volterra/moving/MovingConfigurer.java
+++ b/src/main/java/fr/takima/lotka_volterra/moving/MovingConfigurer.java
@@ -1,6 +1,6 @@
 package fr.takima.lotka_volterra.moving;
 
-import fr.takima.lotka_volterra.common.measure.Distance;
+import fr.takima.lotka_volterra.common.Distance;
 
 import java.util.Random;
 
diff --git a/src/main/java/fr/takima/lotka_volterra/moving/MovingEntity.java b/src/main/java/fr/takima/lotka_volterra/moving/MovingEntity.java
index 2e0f4dd..8968c98 100644
--- a/src/main/java/fr/takima/lotka_volterra/moving/MovingEntity.java
+++ b/src/main/java/fr/takima/lotka_volterra/moving/MovingEntity.java
@@ -1,6 +1,6 @@
 package fr.takima.lotka_volterra.moving;
 
-import fr.takima.lotka_volterra.common.measure.Distance;
+import fr.takima.lotka_volterra.common.Distance;
 
 public interface MovingEntity {
 
diff --git a/src/main/java/fr/takima/lotka_volterra/moving/Position.java b/src/main/java/fr/takima/lotka_volterra/moving/Position.java
index 00198ed..cf8c69d 100644
--- a/src/main/java/fr/takima/lotka_volterra/moving/Position.java
+++ b/src/main/java/fr/takima/lotka_volterra/moving/Position.java
@@ -1,7 +1,7 @@
 package fr.takima.lotka_volterra.moving;
 
-import fr.takima.lotka_volterra.common.measure.Distance;
-import fr.takima.lotka_volterra.common.measure.Vector;
+import fr.takima.lotka_volterra.common.Distance;
+import fr.takima.lotka_volterra.common.Vector;
 import fr.takima.lotka_volterra.validator.NotNullValidator;
 
 import java.math.BigDecimal;
diff --git a/src/main/java/fr/takima/lotka_volterra/moving/PositionComponent.java b/src/main/java/fr/takima/lotka_volterra/moving/PositionComponent.java
index 722934e..2849e54 100644
--- a/src/main/java/fr/takima/lotka_volterra/moving/PositionComponent.java
+++ b/src/main/java/fr/takima/lotka_volterra/moving/PositionComponent.java
@@ -1,6 +1,6 @@
 package fr.takima.lotka_volterra.moving;
 
-import fr.takima.lotka_volterra.common.measure.VectorComponent;
+import fr.takima.lotka_volterra.common.VectorComponent;
 import fr.takima.lotka_volterra.common.value.IntValue;
 import fr.takima.lotka_volterra.validator.GreaterThanValidator;
 import fr.takima.lotka_volterra.validator.LowerThanValidator;
diff --git a/src/main/java/fr/takima/lotka_volterra/predation/DefaultPredationConfigurer.java b/src/main/java/fr/takima/lotka_volterra/predation/DefaultPredationConfigurer.java
index 07124e2..f72bc80 100644
--- a/src/main/java/fr/takima/lotka_volterra/predation/DefaultPredationConfigurer.java
+++ b/src/main/java/fr/takima/lotka_volterra/predation/DefaultPredationConfigurer.java
@@ -1,7 +1,7 @@
 package fr.takima.lotka_volterra.predation;
 
-import fr.takima.lotka_volterra.common.measure.Probability;
-import fr.takima.lotka_volterra.common.measure.Distance;
+import fr.takima.lotka_volterra.common.Probability;
+import fr.takima.lotka_volterra.common.Distance;
 import fr.takima.lotka_volterra.predator.Satiety;
 import org.springframework.stereotype.Component;
 
diff --git a/src/main/java/fr/takima/lotka_volterra/predation/PredationConfigurer.java b/src/main/java/fr/takima/lotka_volterra/predation/PredationConfigurer.java
index 36f939b..7c32142 100644
--- a/src/main/java/fr/takima/lotka_volterra/predation/PredationConfigurer.java
+++ b/src/main/java/fr/takima/lotka_volterra/predation/PredationConfigurer.java
@@ -1,7 +1,7 @@
 package fr.takima.lotka_volterra.predation;
 
-import fr.takima.lotka_volterra.common.measure.Probability;
-import fr.takima.lotka_volterra.common.measure.Distance;
+import fr.takima.lotka_volterra.common.Probability;
+import fr.takima.lotka_volterra.common.Distance;
 import fr.takima.lotka_volterra.predator.Satiety;
 
 import java.util.Random;
diff --git a/src/test/java/fr/takima/lotka_volterra/moving/MovingEntityTest.java b/src/test/java/fr/takima/lotka_volterra/moving/MovingEntityTest.java
index 62cc56f..589105a 100644
--- a/src/test/java/fr/takima/lotka_volterra/moving/MovingEntityTest.java
+++ b/src/test/java/fr/takima/lotka_volterra/moving/MovingEntityTest.java
@@ -1,7 +1,7 @@
 package fr.takima.lotka_volterra.moving;
 
 
-import fr.takima.lotka_volterra.common.measure.Distance;
+import fr.takima.lotka_volterra.common.Distance;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 
-- 
GitLab