diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..b6e5e61d3255261d49a8dc71f644e5ef39a8e343
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+target
+git
\ No newline at end of file
diff --git a/00_katas/kata_1/App.class b/00_katas/kata_1/App.class
new file mode 100644
index 0000000000000000000000000000000000000000..d9958a23304a2a5050242ab610b04084fef0eac3
Binary files /dev/null and b/00_katas/kata_1/App.class differ
diff --git a/00_katas/kata_1/App.java b/00_katas/kata_1/App.java
new file mode 100644
index 0000000000000000000000000000000000000000..a875a671de784a501cf7a72de99d61278792f8ce
--- /dev/null
+++ b/00_katas/kata_1/App.java
@@ -0,0 +1,37 @@
+public class App 
+{
+    public static void main( String[] args )
+    {
+        Clickable myCounter = new Clickable();
+        System.out.println(myCounter.toString());
+
+        myCounter.click();
+        myCounter.click();
+        myCounter.click();
+
+
+        System.out.println(myCounter.toString());
+
+        myCounter.init();
+
+        for (int i = 0; i < 404; i++) {
+            myCounter.click();
+        }
+
+        System.out.println(myCounter.toString());
+
+        myCounter.init();
+        for (int i = 0; i < 10000; i++) {
+            myCounter.click();
+        }
+        
+        System.out.println(myCounter.toString());
+
+        Clickable myNewCounter = new Clickable();
+        myNewCounter.click();
+        System.out.println(myNewCounter.toString());
+
+        System.out.println(myCounter.hashCode());
+        System.out.println(myNewCounter.hashCode());
+    }
+}
diff --git a/00_katas/kata_1/Clickable.class b/00_katas/kata_1/Clickable.class
new file mode 100644
index 0000000000000000000000000000000000000000..e086ce3c2e04505969bc42f8a5579412dc2f1fd7
Binary files /dev/null and b/00_katas/kata_1/Clickable.class differ
diff --git a/00_katas/kata_1/Clickable.java b/00_katas/kata_1/Clickable.java
new file mode 100644
index 0000000000000000000000000000000000000000..1ade044e72e007b4f1f87d248377aa7332fd1a20
--- /dev/null
+++ b/00_katas/kata_1/Clickable.java
@@ -0,0 +1,54 @@
+import java.util.Objects;
+
+public class Clickable {
+    private final int MAX_VALUE = 9999;
+    private int counter;
+
+    public Clickable() {
+        init();
+    }
+
+    public void init() {
+        this.counter = 0;
+    }
+
+    public void click() {
+        this.counter = (this.counter + 1) % this.MAX_VALUE;
+    }
+
+    public int value() {
+        return this.counter;
+    }
+
+    public String toString() {
+        return String.format("%04d", this.value());
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null || obj.getClass() != this.getClass()) {
+            return false;
+        }
+
+        Clickable other = (Clickable) obj;
+        return this.counter == other.counter;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(this.counter);
+    }
+
+    /*
+     * Factory examples 
+     * 
+     * public static Clickable zero(){ return new Clickable(0); }
+     * 
+     * public static Clickable withValue(int value){ if (value < 0 || value > 9999){
+     * throw new IllegalArgumentException("Value must be between 0 and " + 9999); }
+     * 
+     * return new Clickable(value); }
+     */
+}
diff --git a/serie2/ex1.1/.classpath b/serie2/ex1.1/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..71f5fefe42d1a1ecbcb9623d3ec09e20e91627e2
--- /dev/null
+++ b/serie2/ex1.1/.classpath
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" path="target/generated-sources/annotations">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="ignore_optional_problems" value="true"/>
+			<attribute name="m2e-apt" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="ignore_optional_problems" value="true"/>
+			<attribute name="m2e-apt" value="true"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/serie2/ex1.1/.project b/serie2/ex1.1/.project
new file mode 100644
index 0000000000000000000000000000000000000000..3715c2835f23f4a26b55552156e1027597bdcf4f
--- /dev/null
+++ b/serie2/ex1.1/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>exercice2</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+	<filteredResources>
+		<filter>
+			<id>1601375932918</id>
+			<name></name>
+			<type>30</type>
+			<matcher>
+				<id>org.eclipse.core.resources.regexFilterMatcher</id>
+				<arguments>node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
+</projectDescription>
diff --git a/serie2/ex1.1/.settings/org.eclipse.core.resources.prefs b/serie2/ex1.1/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f9fe34593fcd3624a964478aeb438b0d44fe7237
--- /dev/null
+++ b/serie2/ex1.1/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/test/java=UTF-8
+encoding/<project>=UTF-8
diff --git a/serie2/ex1.1/.settings/org.eclipse.jdt.apt.core.prefs b/serie2/ex1.1/.settings/org.eclipse.jdt.apt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..d4313d4b25e4b826b5efa4bed06fd69068761519
--- /dev/null
+++ b/serie2/ex1.1/.settings/org.eclipse.jdt.apt.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.apt.aptEnabled=false
diff --git a/serie2/ex1.1/.settings/org.eclipse.jdt.core.prefs b/serie2/ex1.1/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..b11489fa64c19564fe8833aad871e29ff1a6a211
--- /dev/null
+++ b/serie2/ex1.1/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.processAnnotations=disabled
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/serie2/ex1.1/.settings/org.eclipse.m2e.core.prefs b/serie2/ex1.1/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f897a7f1cb2389f85fe6381425d29f0a9866fb65
--- /dev/null
+++ b/serie2/ex1.1/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/serie2/ex1.1/pom.xml b/serie2/ex1.1/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bcf9b8062e01536f8a10ac26f33d548d5fdaedc9
--- /dev/null
+++ b/serie2/ex1.1/pom.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>com.waffle.app</groupId>
+  <artifactId>exercice2</artifactId>
+  <version>1.0-SNAPSHOT</version>
+
+  <name>exercice2</name>
+  <!-- FIXME change it to the project's website -->
+  <url>http://www.example.com</url>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <maven.compiler.source>1.7</maven.compiler.source>
+    <maven.compiler.target>1.7</maven.compiler.target>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.11</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
+      <plugins>
+        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
+        <plugin>
+          <artifactId>maven-clean-plugin</artifactId>
+          <version>3.1.0</version>
+        </plugin>
+        <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
+        <plugin>
+          <artifactId>maven-resources-plugin</artifactId>
+          <version>3.0.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>3.8.0</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <version>2.22.1</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-jar-plugin</artifactId>
+          <version>3.0.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-install-plugin</artifactId>
+          <version>2.5.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-deploy-plugin</artifactId>
+          <version>2.8.2</version>
+        </plugin>
+        <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
+        <plugin>
+          <artifactId>maven-site-plugin</artifactId>
+          <version>3.7.1</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-project-info-reports-plugin</artifactId>
+          <version>3.0.0</version>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+</project>
diff --git a/serie2/ex1.1/src/main/java/com/waffle/app/App.java b/serie2/ex1.1/src/main/java/com/waffle/app/App.java
new file mode 100644
index 0000000000000000000000000000000000000000..6aa9925a5f9203afad626c671fec0397b6fa3f6e
--- /dev/null
+++ b/serie2/ex1.1/src/main/java/com/waffle/app/App.java
@@ -0,0 +1,27 @@
+package com.waffle.app;
+
+import java.util.Scanner;
+
+/**
+ * Hello world!
+ *
+ */
+public class App {
+    public static int askInt() {
+        final Scanner scan = new Scanner(System.in);
+
+        System.out.print("Entrez une valeur : ");
+        while (!scan.hasNextInt()){
+            System.out.print("Valeur erronée");
+            scan.nextInt();
+            System.out.print("Entrez une valeur : ");
+            scan.nextLine();
+        }
+
+        return scan.nextInt();
+    }
+
+    public static void main(final String[] args) {
+        System.out.println("La méthode a retourné : " + askInt());
+    }
+}
\ No newline at end of file
diff --git a/serie2/ex1.1/src/test/java/com/waffle/app/AppTest.java b/serie2/ex1.1/src/test/java/com/waffle/app/AppTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..c6005d60964825a66d5c39b64390ce4b2ab67c1c
--- /dev/null
+++ b/serie2/ex1.1/src/test/java/com/waffle/app/AppTest.java
@@ -0,0 +1,20 @@
+package com.waffle.app;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest 
+{
+    /**
+     * Rigorous Test :-)
+     */
+    @Test
+    public void shouldAnswerWithTrue()
+    {
+        assertTrue( true );
+    }
+}
diff --git a/serie2/ex1.11/exercice2_3/.classpath b/serie2/ex1.11/exercice2_3/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..71f5fefe42d1a1ecbcb9623d3ec09e20e91627e2
--- /dev/null
+++ b/serie2/ex1.11/exercice2_3/.classpath
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" path="target/generated-sources/annotations">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="ignore_optional_problems" value="true"/>
+			<attribute name="m2e-apt" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="ignore_optional_problems" value="true"/>
+			<attribute name="m2e-apt" value="true"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/serie2/ex1.11/exercice2_3/.project b/serie2/ex1.11/exercice2_3/.project
new file mode 100644
index 0000000000000000000000000000000000000000..6ad27e21cbb6af9c9d60a11f93852bae2bc31d43
--- /dev/null
+++ b/serie2/ex1.11/exercice2_3/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>exercice2_3</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+	<filteredResources>
+		<filter>
+			<id>1601475347536</id>
+			<name></name>
+			<type>30</type>
+			<matcher>
+				<id>org.eclipse.core.resources.regexFilterMatcher</id>
+				<arguments>node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
+</projectDescription>
diff --git a/serie2/ex1.11/exercice2_3/.settings/org.eclipse.core.resources.prefs b/serie2/ex1.11/exercice2_3/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f9fe34593fcd3624a964478aeb438b0d44fe7237
--- /dev/null
+++ b/serie2/ex1.11/exercice2_3/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/test/java=UTF-8
+encoding/<project>=UTF-8
diff --git a/serie2/ex1.11/exercice2_3/.settings/org.eclipse.jdt.apt.core.prefs b/serie2/ex1.11/exercice2_3/.settings/org.eclipse.jdt.apt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..d4313d4b25e4b826b5efa4bed06fd69068761519
--- /dev/null
+++ b/serie2/ex1.11/exercice2_3/.settings/org.eclipse.jdt.apt.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.apt.aptEnabled=false
diff --git a/serie2/ex1.11/exercice2_3/.settings/org.eclipse.jdt.core.prefs b/serie2/ex1.11/exercice2_3/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..b11489fa64c19564fe8833aad871e29ff1a6a211
--- /dev/null
+++ b/serie2/ex1.11/exercice2_3/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.processAnnotations=disabled
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/serie2/ex1.11/exercice2_3/.settings/org.eclipse.m2e.core.prefs b/serie2/ex1.11/exercice2_3/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f897a7f1cb2389f85fe6381425d29f0a9866fb65
--- /dev/null
+++ b/serie2/ex1.11/exercice2_3/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/serie2/ex1.11/exercice2_3/pom.xml b/serie2/ex1.11/exercice2_3/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..95e169b9bb846d2bc04f8a47ee8cf1b66618f30f
--- /dev/null
+++ b/serie2/ex1.11/exercice2_3/pom.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>waffle.com</groupId>
+  <artifactId>exercice2_3</artifactId>
+  <version>1.0-SNAPSHOT</version>
+
+  <name>exercice2_3</name>
+  <!-- FIXME change it to the project's website -->
+  <url>http://www.example.com</url>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <maven.compiler.source>1.7</maven.compiler.source>
+    <maven.compiler.target>1.7</maven.compiler.target>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.11</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
+      <plugins>
+        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
+        <plugin>
+          <artifactId>maven-clean-plugin</artifactId>
+          <version>3.1.0</version>
+        </plugin>
+        <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
+        <plugin>
+          <artifactId>maven-resources-plugin</artifactId>
+          <version>3.0.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>3.8.0</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <version>2.22.1</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-jar-plugin</artifactId>
+          <version>3.0.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-install-plugin</artifactId>
+          <version>2.5.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-deploy-plugin</artifactId>
+          <version>2.8.2</version>
+        </plugin>
+        <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
+        <plugin>
+          <artifactId>maven-site-plugin</artifactId>
+          <version>3.7.1</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-project-info-reports-plugin</artifactId>
+          <version>3.0.0</version>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+</project>
diff --git a/serie2/ex1.11/exercice2_3/src/main/java/waffle/com/App.java b/serie2/ex1.11/exercice2_3/src/main/java/waffle/com/App.java
new file mode 100644
index 0000000000000000000000000000000000000000..19aeb9d49951198934b7dc02ac01b0b5e28a6a80
--- /dev/null
+++ b/serie2/ex1.11/exercice2_3/src/main/java/waffle/com/App.java
@@ -0,0 +1,69 @@
+package waffle.com;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class App {
+    /* Retourne une nouvelle liste où toutes les valeurs sont doublées */
+    public static List<Integer> doubleThat(List<Integer> is){
+        final List<Integer> result = new ArrayList<>();
+
+        for (int i = 0; i < is.size(); i++) {
+            result.add(is.get(i) * 2);
+        }
+
+        return result;
+    }
+
+    /* Retourne une nouvelle liste où toutes les valeurs sont plus grandes ou
+    égale à un seuil */
+    public static List<Integer> filterGreaterOrEqual(List<Integer> is, int value) {
+        final List<Integer> result = new ArrayList<>();
+
+        for (int i = 0; i < is.size(); i++) {
+            int element = is.get(i);
+
+            if (element >= value){
+                result.add(element);
+            }
+        }
+
+        return result;
+    }
+
+    /* Retourne une nouvelle liste où toutes les valeurs positives sont
+    multipliées par deux. Les valeurs négatives sont omises */
+    public static List<Integer> filterPositiveAndThenDoubleThem(List<Integer> is){
+        final List<Integer> result = new ArrayList<>();
+
+        for (int i = 0; i < is.size(); i++) {
+            int element = is.get(i);
+
+            // If our number is positive
+            if (element >= 0){
+                result.add(element * 2);
+            }
+        }
+
+        return result;
+    }
+
+    public static void printList(List<Integer> is){
+        for (Integer i : is) {
+            System.out.println(i);
+        }
+        System.out.println("");
+    }
+
+    public static void main(String[] args) {
+        List<Integer> list = Arrays.asList(-16, -8, -4, -2, 1, 2, 4, 8, 16, 32, 64, 128, 256);
+        printList(list);
+        list = doubleThat(list);
+        printList(list);
+        list = filterGreaterOrEqual(list, -16);
+        printList(list);
+        list = filterPositiveAndThenDoubleThem(list);
+        printList(list);
+    }
+}
diff --git a/serie2/ex1.11/exercice2_3/src/test/java/waffle/com/AppTest.java b/serie2/ex1.11/exercice2_3/src/test/java/waffle/com/AppTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..a5617b94b730e7f696b0cf5366ef7ada9b6e9a12
--- /dev/null
+++ b/serie2/ex1.11/exercice2_3/src/test/java/waffle/com/AppTest.java
@@ -0,0 +1,20 @@
+package waffle.com;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest 
+{
+    /**
+     * Rigorous Test :-)
+     */
+    @Test
+    public void shouldAnswerWithTrue()
+    {
+        assertTrue( true );
+    }
+}
diff --git a/serie2/ex1.14/exercice2_3/.classpath b/serie2/ex1.14/exercice2_3/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..71f5fefe42d1a1ecbcb9623d3ec09e20e91627e2
--- /dev/null
+++ b/serie2/ex1.14/exercice2_3/.classpath
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" path="target/generated-sources/annotations">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="ignore_optional_problems" value="true"/>
+			<attribute name="m2e-apt" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="ignore_optional_problems" value="true"/>
+			<attribute name="m2e-apt" value="true"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/serie2/ex1.14/exercice2_3/.project b/serie2/ex1.14/exercice2_3/.project
new file mode 100644
index 0000000000000000000000000000000000000000..6ad27e21cbb6af9c9d60a11f93852bae2bc31d43
--- /dev/null
+++ b/serie2/ex1.14/exercice2_3/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>exercice2_3</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+	<filteredResources>
+		<filter>
+			<id>1601475347536</id>
+			<name></name>
+			<type>30</type>
+			<matcher>
+				<id>org.eclipse.core.resources.regexFilterMatcher</id>
+				<arguments>node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
+</projectDescription>
diff --git a/serie2/ex1.14/exercice2_3/.settings/org.eclipse.core.resources.prefs b/serie2/ex1.14/exercice2_3/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f9fe34593fcd3624a964478aeb438b0d44fe7237
--- /dev/null
+++ b/serie2/ex1.14/exercice2_3/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/test/java=UTF-8
+encoding/<project>=UTF-8
diff --git a/serie2/ex1.14/exercice2_3/.settings/org.eclipse.jdt.apt.core.prefs b/serie2/ex1.14/exercice2_3/.settings/org.eclipse.jdt.apt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..d4313d4b25e4b826b5efa4bed06fd69068761519
--- /dev/null
+++ b/serie2/ex1.14/exercice2_3/.settings/org.eclipse.jdt.apt.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.apt.aptEnabled=false
diff --git a/serie2/ex1.14/exercice2_3/.settings/org.eclipse.jdt.core.prefs b/serie2/ex1.14/exercice2_3/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..b11489fa64c19564fe8833aad871e29ff1a6a211
--- /dev/null
+++ b/serie2/ex1.14/exercice2_3/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.processAnnotations=disabled
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/serie2/ex1.14/exercice2_3/.settings/org.eclipse.m2e.core.prefs b/serie2/ex1.14/exercice2_3/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f897a7f1cb2389f85fe6381425d29f0a9866fb65
--- /dev/null
+++ b/serie2/ex1.14/exercice2_3/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/serie2/ex1.14/exercice2_3/pom.xml b/serie2/ex1.14/exercice2_3/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..95e169b9bb846d2bc04f8a47ee8cf1b66618f30f
--- /dev/null
+++ b/serie2/ex1.14/exercice2_3/pom.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>waffle.com</groupId>
+  <artifactId>exercice2_3</artifactId>
+  <version>1.0-SNAPSHOT</version>
+
+  <name>exercice2_3</name>
+  <!-- FIXME change it to the project's website -->
+  <url>http://www.example.com</url>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <maven.compiler.source>1.7</maven.compiler.source>
+    <maven.compiler.target>1.7</maven.compiler.target>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.11</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
+      <plugins>
+        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
+        <plugin>
+          <artifactId>maven-clean-plugin</artifactId>
+          <version>3.1.0</version>
+        </plugin>
+        <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
+        <plugin>
+          <artifactId>maven-resources-plugin</artifactId>
+          <version>3.0.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>3.8.0</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <version>2.22.1</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-jar-plugin</artifactId>
+          <version>3.0.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-install-plugin</artifactId>
+          <version>2.5.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-deploy-plugin</artifactId>
+          <version>2.8.2</version>
+        </plugin>
+        <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
+        <plugin>
+          <artifactId>maven-site-plugin</artifactId>
+          <version>3.7.1</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-project-info-reports-plugin</artifactId>
+          <version>3.0.0</version>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+</project>
diff --git a/serie2/ex1.14/exercice2_3/src/main/java/waffle/com/App.java b/serie2/ex1.14/exercice2_3/src/main/java/waffle/com/App.java
new file mode 100644
index 0000000000000000000000000000000000000000..dc807e68e61a71851f61e711d87b846222ae3de9
--- /dev/null
+++ b/serie2/ex1.14/exercice2_3/src/main/java/waffle/com/App.java
@@ -0,0 +1,8 @@
+package waffle.com;
+
+
+public class App {
+    public static void main(String[] args) {
+
+    }
+}
diff --git a/serie2/ex1.14/exercice2_3/src/test/java/waffle/com/AppTest.java b/serie2/ex1.14/exercice2_3/src/test/java/waffle/com/AppTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..a5617b94b730e7f696b0cf5366ef7ada9b6e9a12
--- /dev/null
+++ b/serie2/ex1.14/exercice2_3/src/test/java/waffle/com/AppTest.java
@@ -0,0 +1,20 @@
+package waffle.com;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest 
+{
+    /**
+     * Rigorous Test :-)
+     */
+    @Test
+    public void shouldAnswerWithTrue()
+    {
+        assertTrue( true );
+    }
+}
diff --git a/serie2/ex1.15/exercice2_3/.classpath b/serie2/ex1.15/exercice2_3/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..71f5fefe42d1a1ecbcb9623d3ec09e20e91627e2
--- /dev/null
+++ b/serie2/ex1.15/exercice2_3/.classpath
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" path="target/generated-sources/annotations">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="ignore_optional_problems" value="true"/>
+			<attribute name="m2e-apt" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="ignore_optional_problems" value="true"/>
+			<attribute name="m2e-apt" value="true"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/serie2/ex1.15/exercice2_3/.project b/serie2/ex1.15/exercice2_3/.project
new file mode 100644
index 0000000000000000000000000000000000000000..6ad27e21cbb6af9c9d60a11f93852bae2bc31d43
--- /dev/null
+++ b/serie2/ex1.15/exercice2_3/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>exercice2_3</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+	<filteredResources>
+		<filter>
+			<id>1601475347536</id>
+			<name></name>
+			<type>30</type>
+			<matcher>
+				<id>org.eclipse.core.resources.regexFilterMatcher</id>
+				<arguments>node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
+</projectDescription>
diff --git a/serie2/ex1.15/exercice2_3/.settings/org.eclipse.core.resources.prefs b/serie2/ex1.15/exercice2_3/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f9fe34593fcd3624a964478aeb438b0d44fe7237
--- /dev/null
+++ b/serie2/ex1.15/exercice2_3/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/test/java=UTF-8
+encoding/<project>=UTF-8
diff --git a/serie2/ex1.15/exercice2_3/.settings/org.eclipse.jdt.apt.core.prefs b/serie2/ex1.15/exercice2_3/.settings/org.eclipse.jdt.apt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..d4313d4b25e4b826b5efa4bed06fd69068761519
--- /dev/null
+++ b/serie2/ex1.15/exercice2_3/.settings/org.eclipse.jdt.apt.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.apt.aptEnabled=false
diff --git a/serie2/ex1.15/exercice2_3/.settings/org.eclipse.jdt.core.prefs b/serie2/ex1.15/exercice2_3/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..b11489fa64c19564fe8833aad871e29ff1a6a211
--- /dev/null
+++ b/serie2/ex1.15/exercice2_3/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.processAnnotations=disabled
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/serie2/ex1.15/exercice2_3/.settings/org.eclipse.m2e.core.prefs b/serie2/ex1.15/exercice2_3/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f897a7f1cb2389f85fe6381425d29f0a9866fb65
--- /dev/null
+++ b/serie2/ex1.15/exercice2_3/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/serie2/ex1.15/exercice2_3/pom.xml b/serie2/ex1.15/exercice2_3/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..95e169b9bb846d2bc04f8a47ee8cf1b66618f30f
--- /dev/null
+++ b/serie2/ex1.15/exercice2_3/pom.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>waffle.com</groupId>
+  <artifactId>exercice2_3</artifactId>
+  <version>1.0-SNAPSHOT</version>
+
+  <name>exercice2_3</name>
+  <!-- FIXME change it to the project's website -->
+  <url>http://www.example.com</url>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <maven.compiler.source>1.7</maven.compiler.source>
+    <maven.compiler.target>1.7</maven.compiler.target>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.11</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
+      <plugins>
+        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
+        <plugin>
+          <artifactId>maven-clean-plugin</artifactId>
+          <version>3.1.0</version>
+        </plugin>
+        <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
+        <plugin>
+          <artifactId>maven-resources-plugin</artifactId>
+          <version>3.0.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>3.8.0</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <version>2.22.1</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-jar-plugin</artifactId>
+          <version>3.0.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-install-plugin</artifactId>
+          <version>2.5.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-deploy-plugin</artifactId>
+          <version>2.8.2</version>
+        </plugin>
+        <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
+        <plugin>
+          <artifactId>maven-site-plugin</artifactId>
+          <version>3.7.1</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-project-info-reports-plugin</artifactId>
+          <version>3.0.0</version>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+</project>
diff --git a/serie2/ex1.15/exercice2_3/src/main/java/waffle/com/App.java b/serie2/ex1.15/exercice2_3/src/main/java/waffle/com/App.java
new file mode 100644
index 0000000000000000000000000000000000000000..7202f5d717406971bcb82f11616d4ccf208b7d45
--- /dev/null
+++ b/serie2/ex1.15/exercice2_3/src/main/java/waffle/com/App.java
@@ -0,0 +1,57 @@
+package waffle.com;
+
+
+public class App {
+    /* Détermine si un nombre qui se trouve dans une chaîne de caractères contient
+    * un entier
+    * Note: prend en compte le signe, mais ne prend pas en compte les espaces
+    * Exemples:
+    * isNumeric("42") -> true
+    * isNumeric(" 22 ") -> true
+    * isNumeric(" -33 ") -> true
+    * isNumeric(" 22.0") -> false
+    * isNumeric("2f3") -> false */
+    public static boolean isNumeric(String term) {
+        Integer result = Integer.parseInt(term.trim());
+        return true;
+    }
+
+    /* Retourne un tableau d'indices où chaque valeur indique la position d'un
+    * caractère dans une chaîne
+    * Exemples:
+    * indexes("maison", 'i') -> {2}
+    * isNumeric("tralala", 'a') -> {2,4,6}
+    * isNumeric("coucou", 'x') -> {} */
+    public static int[] indexes(String term, char c) {
+        
+        return new int[]{0};
+    }
+
+    /* Détermine si une chaîne est en majuscule
+    * Conseil: cf. docs String
+    * Note: peut tenir sur une ligne
+    * Exemples:
+    * isUpper("ABC") -> true
+    * isUpper("AbC") -> false */
+    public static boolean isUpper(String term) {
+    /* TODO */
+    return false;
+    }
+
+
+    /* Retourne une version triée d'une chaine de caractères
+    * Conseil: cf. docs String + Arrays
+    * Exemples:
+    * sorted("lkjlkjKJk9") -> "9JKjjkkkll" */
+    public static String sorted(String term) {
+        /* TODO */
+        return "";
+    }
+        
+
+    public static void main(String[] args) {
+        String myBeautifulString = "wafaw awd223.0afawf anwf";
+        System.out.println(isNumeric(myBeautifulString));
+
+    }
+}
diff --git a/serie2/ex1.15/exercice2_3/src/test/java/waffle/com/AppTest.java b/serie2/ex1.15/exercice2_3/src/test/java/waffle/com/AppTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..a5617b94b730e7f696b0cf5366ef7ada9b6e9a12
--- /dev/null
+++ b/serie2/ex1.15/exercice2_3/src/test/java/waffle/com/AppTest.java
@@ -0,0 +1,20 @@
+package waffle.com;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest 
+{
+    /**
+     * Rigorous Test :-)
+     */
+    @Test
+    public void shouldAnswerWithTrue()
+    {
+        assertTrue( true );
+    }
+}
diff --git a/serie2/ex1.16/.classpath b/serie2/ex1.16/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..9ba41a249e124721e89c65729d21c6d7df2c1b66
--- /dev/null
+++ b/serie2/ex1.16/.classpath
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" path="target/generated-sources/annotations">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="ignore_optional_problems" value="true"/>
+			<attribute name="m2e-apt" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="ignore_optional_problems" value="true"/>
+			<attribute name="m2e-apt" value="true"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/serie2/ex1.16/.project b/serie2/ex1.16/.project
new file mode 100644
index 0000000000000000000000000000000000000000..c7a39d24439b411bb145f32289093040d94070c8
--- /dev/null
+++ b/serie2/ex1.16/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>mystery-number</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+	<filteredResources>
+		<filter>
+			<id>1602606396489</id>
+			<name></name>
+			<type>30</type>
+			<matcher>
+				<id>org.eclipse.core.resources.regexFilterMatcher</id>
+				<arguments>node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
+</projectDescription>
diff --git a/serie2/ex1.16/.settings/org.eclipse.core.resources.prefs b/serie2/ex1.16/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f9fe34593fcd3624a964478aeb438b0d44fe7237
--- /dev/null
+++ b/serie2/ex1.16/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/test/java=UTF-8
+encoding/<project>=UTF-8
diff --git a/serie2/ex1.16/.settings/org.eclipse.jdt.apt.core.prefs b/serie2/ex1.16/.settings/org.eclipse.jdt.apt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..d4313d4b25e4b826b5efa4bed06fd69068761519
--- /dev/null
+++ b/serie2/ex1.16/.settings/org.eclipse.jdt.apt.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.apt.aptEnabled=false
diff --git a/serie2/ex1.16/.settings/org.eclipse.jdt.core.prefs b/serie2/ex1.16/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..46235dc078e4938d44ecf463f32b5f913f920ccb
--- /dev/null
+++ b/serie2/ex1.16/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.processAnnotations=disabled
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/serie2/ex1.16/.settings/org.eclipse.m2e.core.prefs b/serie2/ex1.16/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f897a7f1cb2389f85fe6381425d29f0a9866fb65
--- /dev/null
+++ b/serie2/ex1.16/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/serie2/ex1.16/pom.xml b/serie2/ex1.16/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..14089944f120b52aeb27ac3b58077c6a2b4617f9
--- /dev/null
+++ b/serie2/ex1.16/pom.xml
@@ -0,0 +1,80 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>ch.hepia.mystery_number</groupId>
+  <artifactId>mystery-number</artifactId>
+  <packaging>jar</packaging>
+  <version>0.1</version>
+  <name>mystery-number</name>
+
+  <properties>
+    <maven.compiler.source>11</maven.compiler.source>
+    <maven.compiler.target>11</maven.compiler.target>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+
+
+  <url>http://maven.apache.org</url>
+  <dependencies>
+    <dependency>
+        <groupId>org.junit.jupiter</groupId>
+        <artifactId>junit-jupiter-engine</artifactId>
+        <version>5.6.2</version>
+        <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>exec-maven-plugin</artifactId>
+        <version>1.6.0</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>java</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <!-- Point here to your main class -->
+          <mainClass>ch.hepia.mystery_number.App</mainClass>
+        </configuration>
+      </plugin>
+
+      <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <version>2.22.2</version>
+          <configuration>
+            <excludes>
+              <exclude>some test to exclude here</exclude>
+            </excludes>
+          </configuration>
+      </plugin>
+
+      <plugin>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <version>3.1.1</version>
+        <configuration>
+          <descriptorRefs>
+            <descriptorRef>jar-with-dependencies</descriptorRef>
+          </descriptorRefs>
+        </configuration>
+        <executions>
+          <execution>
+            <id>make-assembly</id>            <!-- this is used for inheritance merges -->
+            <phase>package</phase>            <!-- bind to the packaging phase -->
+            <goals>
+              <goal>single</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+
+    </plugins>
+  </build>
+
+</project>
diff --git a/serie2/ex1.16/src/main/java/ch/hepia/mystery_number/App.java b/serie2/ex1.16/src/main/java/ch/hepia/mystery_number/App.java
new file mode 100644
index 0000000000000000000000000000000000000000..9a5b0bb7836c9be9aa0a20ae049ad2a743495492
--- /dev/null
+++ b/serie2/ex1.16/src/main/java/ch/hepia/mystery_number/App.java
@@ -0,0 +1,101 @@
+package ch.hepia.mystery_number;
+
+import java.util.Random;
+import java.util.Scanner;
+
+public class App {
+    public static boolean isValidNumber(int userInput) {
+        final int MAX = 100;
+        final int MIN = 0;
+
+        return (userInput > MAX || userInput < MIN) ? false : true;
+    }
+
+    public static void main(String[] args) {
+        if (args.length > 0) {
+            int maxNumberToGuess;
+            Random rng = new Random();
+            Scanner sc = new Scanner(System.in);
+
+            int hiddenNumber;
+            boolean hasBeenFound = false;
+            int turnCount = 1;
+
+            switch (args[0]) {
+                case "help":
+                    System.out.println("------------------------------------");
+                    System.out.println("M Y S T E R Y  N U M B E R  G A M E");
+                    System.out.println("------------------------------------");
+                    System.out.println("Usage : ");
+                    System.out.println("mystery-number.jar %d");
+                    System.out.println("where %d is any integer number");
+                    System.out.println(
+                            "The computer will choose a random number between 0 and %d, you will have to find it.");
+                    System.out.println("");
+                    System.out.println("mystery-number.jar guess %d");
+                    System.out.println("where %d is any integer number");
+                    System.out.println("The computer will try and find your number between 0 and %d");
+                    break;
+                case "guess":
+                    try {
+                        maxNumberToGuess = Integer.parseInt(args[1]);
+                        int currentCPUGuess = maxNumberToGuess / 2;
+                        int searchRange = currentCPUGuess / 2;
+
+                        while (!hasBeenFound) {
+                            System.out.print("Sagit-il du : " + currentCPUGuess + " ? [o/+/-]");
+                            char userAnswer = sc.nextLine().charAt(0);
+
+                            switch (userAnswer) {
+                                case '+':
+                                    currentCPUGuess += searchRange;
+                                    searchRange /= 2;
+                                    break;
+                                case '-':
+                                    currentCPUGuess -= searchRange;
+                                    searchRange /= 2;
+                                    break;
+                                case 'o':
+                                    hasBeenFound = true;
+                                    System.out.println("Yay ! La machine bat définitivement l'humain");
+                                    break;
+                                default:
+                                    System.out.println("Please enter a valid character : [o/+/-]");
+                                    break;
+                            }
+                        }
+
+                    } catch (Exception e) {
+                        throw new IllegalArgumentException("Input is not an integer.");
+                    }
+                    break;
+
+                default:
+                    try {
+                        maxNumberToGuess = Integer.parseInt(args[0]);
+                        hiddenNumber = rng.nextInt(maxNumberToGuess);
+
+                        //System.out.println("[DEBUG] ANSWER IS : " + hiddenNumber);
+
+                        while (!hasBeenFound) {
+                            System.out.print("Entrez un nombre : ");
+                            int currentGuess = sc.nextInt();
+
+                            if (currentGuess == hiddenNumber) {
+                                hasBeenFound = true;
+                                System.out.println("Bravo vous avez trouvé le nombre en " + turnCount + " essais");
+                            }
+
+                            turnCount++;
+                        }
+                    } catch (Exception e) {
+                        throw new IllegalArgumentException("Input is not an integer.");
+                    }
+                    break;
+            }
+        } else {
+            throw new IllegalArgumentException(
+                    "Arguments needs to be added to execute mystery number, ex:'24' or 'guess 212'.");
+        }
+    }
+}
diff --git a/serie2/ex1.16/src/test/java/ch/hepia/mystery_number/AppTest.java b/serie2/ex1.16/src/test/java/ch/hepia/mystery_number/AppTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..18e87cd720d48939b61ad9c380d6b1c26d488ba6
--- /dev/null
+++ b/serie2/ex1.16/src/test/java/ch/hepia/mystery_number/AppTest.java
@@ -0,0 +1,18 @@
+package ch.hepia.mystery_number;
+
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+
+
+/**
+ * Unit test for simple App.
+ */
+class AppTest {
+
+    @Test
+    void dummyTest() {
+        assertTrue(true);
+    }
+}
diff --git a/serie2/ex1.2/exercice2_2/.classpath b/serie2/ex1.2/exercice2_2/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..71f5fefe42d1a1ecbcb9623d3ec09e20e91627e2
--- /dev/null
+++ b/serie2/ex1.2/exercice2_2/.classpath
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" path="target/generated-sources/annotations">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="ignore_optional_problems" value="true"/>
+			<attribute name="m2e-apt" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="ignore_optional_problems" value="true"/>
+			<attribute name="m2e-apt" value="true"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/serie2/ex1.2/exercice2_2/.project b/serie2/ex1.2/exercice2_2/.project
new file mode 100644
index 0000000000000000000000000000000000000000..9d9c0a973d5741d761e53dfc18ea7343d32c193a
--- /dev/null
+++ b/serie2/ex1.2/exercice2_2/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>exercice2_2</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+	<filteredResources>
+		<filter>
+			<id>1601401075789</id>
+			<name></name>
+			<type>30</type>
+			<matcher>
+				<id>org.eclipse.core.resources.regexFilterMatcher</id>
+				<arguments>node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
+</projectDescription>
diff --git a/serie2/ex1.2/exercice2_2/.settings/org.eclipse.core.resources.prefs b/serie2/ex1.2/exercice2_2/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f9fe34593fcd3624a964478aeb438b0d44fe7237
--- /dev/null
+++ b/serie2/ex1.2/exercice2_2/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/test/java=UTF-8
+encoding/<project>=UTF-8
diff --git a/serie2/ex1.2/exercice2_2/.settings/org.eclipse.jdt.apt.core.prefs b/serie2/ex1.2/exercice2_2/.settings/org.eclipse.jdt.apt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..d4313d4b25e4b826b5efa4bed06fd69068761519
--- /dev/null
+++ b/serie2/ex1.2/exercice2_2/.settings/org.eclipse.jdt.apt.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.apt.aptEnabled=false
diff --git a/serie2/ex1.2/exercice2_2/.settings/org.eclipse.jdt.core.prefs b/serie2/ex1.2/exercice2_2/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..b11489fa64c19564fe8833aad871e29ff1a6a211
--- /dev/null
+++ b/serie2/ex1.2/exercice2_2/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.processAnnotations=disabled
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/serie2/ex1.2/exercice2_2/.settings/org.eclipse.m2e.core.prefs b/serie2/ex1.2/exercice2_2/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f897a7f1cb2389f85fe6381425d29f0a9866fb65
--- /dev/null
+++ b/serie2/ex1.2/exercice2_2/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/serie2/ex1.2/exercice2_2/pom.xml b/serie2/ex1.2/exercice2_2/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4e45482c1248504e5d4289c368b54ba1a2447e96
--- /dev/null
+++ b/serie2/ex1.2/exercice2_2/pom.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>com.waffle.com</groupId>
+  <artifactId>exercice2_2</artifactId>
+  <version>1.0-SNAPSHOT</version>
+
+  <name>exercice2_2</name>
+  <!-- FIXME change it to the project's website -->
+  <url>http://www.example.com</url>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <maven.compiler.source>1.7</maven.compiler.source>
+    <maven.compiler.target>1.7</maven.compiler.target>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.11</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
+      <plugins>
+        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
+        <plugin>
+          <artifactId>maven-clean-plugin</artifactId>
+          <version>3.1.0</version>
+        </plugin>
+        <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
+        <plugin>
+          <artifactId>maven-resources-plugin</artifactId>
+          <version>3.0.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>3.8.0</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <version>2.22.1</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-jar-plugin</artifactId>
+          <version>3.0.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-install-plugin</artifactId>
+          <version>2.5.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-deploy-plugin</artifactId>
+          <version>2.8.2</version>
+        </plugin>
+        <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
+        <plugin>
+          <artifactId>maven-site-plugin</artifactId>
+          <version>3.7.1</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-project-info-reports-plugin</artifactId>
+          <version>3.0.0</version>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+</project>
diff --git a/serie2/ex1.2/exercice2_2/src/main/java/com/waffle/com/App.java b/serie2/ex1.2/exercice2_2/src/main/java/com/waffle/com/App.java
new file mode 100644
index 0000000000000000000000000000000000000000..6350dab7307e4a0ab976c5416de0010ed1e0321e
--- /dev/null
+++ b/serie2/ex1.2/exercice2_2/src/main/java/com/waffle/com/App.java
@@ -0,0 +1,28 @@
+package com.waffle.com;
+
+/**
+ * Hello world!
+ *
+ */
+public class App 
+{
+    public static void main( String[] args )
+    {
+        // Min Max Range
+        System.out.println("MinMaxRange");
+        System.out.println(MyMath.minMaxRange(1.0, 0.0, 3.0));
+        System.out.println(MyMath.minMaxRange(5.0, 0.0, 3.0));
+        System.out.println(MyMath.minMaxRange(-4.5, 0.0, 3.0));
+        
+        // Normalize
+        System.out.println("Normalize");
+        System.out.println(MyMath.normalize(0.0, 0.0, 1.0, 500.0, 600.0));
+        System.out.println(MyMath.normalize(1.0, 0.0, 1.0, 500.0, 600.0));
+        System.out.println(MyMath.normalize(0.5, 0.0, 1.0, 500.0, 600.0));
+        System.out.println(MyMath.normalize(0.0, 0.0, 1.0, 500.0, 600.0));
+
+        // Random
+        System.out.println(MyMath.random(10.0, 20.0));
+        System.out.println(MyMath.random(10, 20));
+    }
+}
diff --git a/serie2/ex1.2/exercice2_2/src/main/java/com/waffle/com/MyMath.java b/serie2/ex1.2/exercice2_2/src/main/java/com/waffle/com/MyMath.java
new file mode 100644
index 0000000000000000000000000000000000000000..e9b3ec45110f24a8a8b975686d72deaeac503e2b
--- /dev/null
+++ b/serie2/ex1.2/exercice2_2/src/main/java/com/waffle/com/MyMath.java
@@ -0,0 +1,59 @@
+package com.waffle.com;
+import java.util.ArrayList;
+import java.util.List;
+
+public class MyMath {
+    public static double minMaxRange(double value, double minValue, double maxValue){
+        return Math.max(minValue, Math.min(maxValue, value));
+    }
+
+    public static double normalize(double value, double minSource, double maxSource, double minTarget, double maxTarget){
+        return (value-minSource) * (maxTarget-minTarget) / (maxSource-minSource) + minTarget;
+    }
+
+    public static double random(double minValue, double maxValue){
+        return Math.random() * (maxValue-minValue) + minValue;
+    }
+
+    public static int random(int minValue, int maxValue){
+        return (int)Math.floor(MyMath.random((double) minValue, (double) maxValue));
+    }
+
+    public List<Double> random(int nb, double minValue, double maxValue){
+        List<Double> res = new ArrayList<>();
+        for (int i = 0; i < nb; i++) {
+            res.add(random(minValue, maxValue));
+        }
+        return res;
+    }
+
+    public List<Integer> random(int nb, int minValue, int maxValue){
+        List<Integer> res = new ArrayList<>();
+        for (int i = 0; i < nb; i++) {
+            res.add(random(minValue, maxValue));
+        }
+        return res;
+    }
+
+    private static double min(List<List<Double>> altitudes){
+        throw new UnsupportedOperationException();
+    }
+    private static double max(List<List<Double>> altitudes){
+        throw new UnsupportedOperationException();
+    }
+
+    public List<List<Double>> altitudeToShadesOfGray(List<List<Double>> altitudes){
+        List<List<Double>> matrix = new ArrayList<>();
+        double altMin = min(altitudes);
+        double altMax = max(altitudes);
+
+        for (List<Double> line: altitudes){
+            List<Double> res = new ArrayList<>();
+            for (double alt: line){
+                res.add(MyMath.normalize(alt, altMin, altMax, 0.0, 255.0));
+            }
+        }
+        return matrix;
+    }
+
+}
\ No newline at end of file
diff --git a/serie2/ex1.2/exercice2_2/src/test/java/com/waffle/com/AppTest.java b/serie2/ex1.2/exercice2_2/src/test/java/com/waffle/com/AppTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..45f416f27510597365831e9955933a0d67b124ea
--- /dev/null
+++ b/serie2/ex1.2/exercice2_2/src/test/java/com/waffle/com/AppTest.java
@@ -0,0 +1,20 @@
+package com.waffle.com;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest 
+{
+    /**
+     * Rigorous Test :-)
+     */
+    @Test
+    public void shouldAnswerWithTrue()
+    {
+        assertTrue( true );
+    }
+}
diff --git a/serie2/ex1.3/exercice2_3/.classpath b/serie2/ex1.3/exercice2_3/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..71f5fefe42d1a1ecbcb9623d3ec09e20e91627e2
--- /dev/null
+++ b/serie2/ex1.3/exercice2_3/.classpath
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" path="target/generated-sources/annotations">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="ignore_optional_problems" value="true"/>
+			<attribute name="m2e-apt" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="ignore_optional_problems" value="true"/>
+			<attribute name="m2e-apt" value="true"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/serie2/ex1.3/exercice2_3/.project b/serie2/ex1.3/exercice2_3/.project
new file mode 100644
index 0000000000000000000000000000000000000000..6ad27e21cbb6af9c9d60a11f93852bae2bc31d43
--- /dev/null
+++ b/serie2/ex1.3/exercice2_3/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>exercice2_3</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+	<filteredResources>
+		<filter>
+			<id>1601475347536</id>
+			<name></name>
+			<type>30</type>
+			<matcher>
+				<id>org.eclipse.core.resources.regexFilterMatcher</id>
+				<arguments>node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
+</projectDescription>
diff --git a/serie2/ex1.3/exercice2_3/.settings/org.eclipse.core.resources.prefs b/serie2/ex1.3/exercice2_3/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f9fe34593fcd3624a964478aeb438b0d44fe7237
--- /dev/null
+++ b/serie2/ex1.3/exercice2_3/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/test/java=UTF-8
+encoding/<project>=UTF-8
diff --git a/serie2/ex1.3/exercice2_3/.settings/org.eclipse.jdt.apt.core.prefs b/serie2/ex1.3/exercice2_3/.settings/org.eclipse.jdt.apt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..d4313d4b25e4b826b5efa4bed06fd69068761519
--- /dev/null
+++ b/serie2/ex1.3/exercice2_3/.settings/org.eclipse.jdt.apt.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.apt.aptEnabled=false
diff --git a/serie2/ex1.3/exercice2_3/.settings/org.eclipse.jdt.core.prefs b/serie2/ex1.3/exercice2_3/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..b11489fa64c19564fe8833aad871e29ff1a6a211
--- /dev/null
+++ b/serie2/ex1.3/exercice2_3/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.processAnnotations=disabled
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/serie2/ex1.3/exercice2_3/.settings/org.eclipse.m2e.core.prefs b/serie2/ex1.3/exercice2_3/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f897a7f1cb2389f85fe6381425d29f0a9866fb65
--- /dev/null
+++ b/serie2/ex1.3/exercice2_3/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/serie2/ex1.3/exercice2_3/pom.xml b/serie2/ex1.3/exercice2_3/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..95e169b9bb846d2bc04f8a47ee8cf1b66618f30f
--- /dev/null
+++ b/serie2/ex1.3/exercice2_3/pom.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>waffle.com</groupId>
+  <artifactId>exercice2_3</artifactId>
+  <version>1.0-SNAPSHOT</version>
+
+  <name>exercice2_3</name>
+  <!-- FIXME change it to the project's website -->
+  <url>http://www.example.com</url>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <maven.compiler.source>1.7</maven.compiler.source>
+    <maven.compiler.target>1.7</maven.compiler.target>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.11</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
+      <plugins>
+        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
+        <plugin>
+          <artifactId>maven-clean-plugin</artifactId>
+          <version>3.1.0</version>
+        </plugin>
+        <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
+        <plugin>
+          <artifactId>maven-resources-plugin</artifactId>
+          <version>3.0.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>3.8.0</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <version>2.22.1</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-jar-plugin</artifactId>
+          <version>3.0.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-install-plugin</artifactId>
+          <version>2.5.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-deploy-plugin</artifactId>
+          <version>2.8.2</version>
+        </plugin>
+        <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
+        <plugin>
+          <artifactId>maven-site-plugin</artifactId>
+          <version>3.7.1</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-project-info-reports-plugin</artifactId>
+          <version>3.0.0</version>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+</project>
diff --git a/serie2/ex1.3/exercice2_3/src/main/java/waffle/com/App.java b/serie2/ex1.3/exercice2_3/src/main/java/waffle/com/App.java
new file mode 100644
index 0000000000000000000000000000000000000000..ab51322db0d9ea24cb35b6aed521011f1ea13fde
--- /dev/null
+++ b/serie2/ex1.3/exercice2_3/src/main/java/waffle/com/App.java
@@ -0,0 +1,37 @@
+package waffle.com;
+
+/**
+ * Hello world!
+ *
+ */
+public class App 
+{
+    public static void printTriangle(int n){
+
+        for (int i = 0; i < n + 1; i++) {
+            for (int j = 0; j < i; j++) {
+                System.out.print("*");
+            }
+
+            if (i != 0)
+                System.out.println("");
+        }
+    }
+
+    public static void main( String[] args )
+    {
+        printTriangle(1);
+        System.out.println("");
+
+        printTriangle(2);
+        System.out.println("");
+
+        printTriangle(3);
+        System.out.println("");
+
+        printTriangle(4);
+        System.out.println("");
+
+        printTriangle(10);
+    }
+}
diff --git a/serie2/ex1.3/exercice2_3/src/test/java/waffle/com/AppTest.java b/serie2/ex1.3/exercice2_3/src/test/java/waffle/com/AppTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..a5617b94b730e7f696b0cf5366ef7ada9b6e9a12
--- /dev/null
+++ b/serie2/ex1.3/exercice2_3/src/test/java/waffle/com/AppTest.java
@@ -0,0 +1,20 @@
+package waffle.com;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest 
+{
+    /**
+     * Rigorous Test :-)
+     */
+    @Test
+    public void shouldAnswerWithTrue()
+    {
+        assertTrue( true );
+    }
+}
diff --git a/serie2/ex1.4/exercice2_3/.classpath b/serie2/ex1.4/exercice2_3/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..71f5fefe42d1a1ecbcb9623d3ec09e20e91627e2
--- /dev/null
+++ b/serie2/ex1.4/exercice2_3/.classpath
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" path="target/generated-sources/annotations">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="ignore_optional_problems" value="true"/>
+			<attribute name="m2e-apt" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="ignore_optional_problems" value="true"/>
+			<attribute name="m2e-apt" value="true"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/serie2/ex1.4/exercice2_3/.project b/serie2/ex1.4/exercice2_3/.project
new file mode 100644
index 0000000000000000000000000000000000000000..6ad27e21cbb6af9c9d60a11f93852bae2bc31d43
--- /dev/null
+++ b/serie2/ex1.4/exercice2_3/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>exercice2_3</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+	<filteredResources>
+		<filter>
+			<id>1601475347536</id>
+			<name></name>
+			<type>30</type>
+			<matcher>
+				<id>org.eclipse.core.resources.regexFilterMatcher</id>
+				<arguments>node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
+</projectDescription>
diff --git a/serie2/ex1.4/exercice2_3/.settings/org.eclipse.core.resources.prefs b/serie2/ex1.4/exercice2_3/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f9fe34593fcd3624a964478aeb438b0d44fe7237
--- /dev/null
+++ b/serie2/ex1.4/exercice2_3/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/test/java=UTF-8
+encoding/<project>=UTF-8
diff --git a/serie2/ex1.4/exercice2_3/.settings/org.eclipse.jdt.apt.core.prefs b/serie2/ex1.4/exercice2_3/.settings/org.eclipse.jdt.apt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..d4313d4b25e4b826b5efa4bed06fd69068761519
--- /dev/null
+++ b/serie2/ex1.4/exercice2_3/.settings/org.eclipse.jdt.apt.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.apt.aptEnabled=false
diff --git a/serie2/ex1.4/exercice2_3/.settings/org.eclipse.jdt.core.prefs b/serie2/ex1.4/exercice2_3/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..b11489fa64c19564fe8833aad871e29ff1a6a211
--- /dev/null
+++ b/serie2/ex1.4/exercice2_3/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.processAnnotations=disabled
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/serie2/ex1.4/exercice2_3/.settings/org.eclipse.m2e.core.prefs b/serie2/ex1.4/exercice2_3/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f897a7f1cb2389f85fe6381425d29f0a9866fb65
--- /dev/null
+++ b/serie2/ex1.4/exercice2_3/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/serie2/ex1.4/exercice2_3/pom.xml b/serie2/ex1.4/exercice2_3/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..95e169b9bb846d2bc04f8a47ee8cf1b66618f30f
--- /dev/null
+++ b/serie2/ex1.4/exercice2_3/pom.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>waffle.com</groupId>
+  <artifactId>exercice2_3</artifactId>
+  <version>1.0-SNAPSHOT</version>
+
+  <name>exercice2_3</name>
+  <!-- FIXME change it to the project's website -->
+  <url>http://www.example.com</url>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <maven.compiler.source>1.7</maven.compiler.source>
+    <maven.compiler.target>1.7</maven.compiler.target>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.11</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
+      <plugins>
+        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
+        <plugin>
+          <artifactId>maven-clean-plugin</artifactId>
+          <version>3.1.0</version>
+        </plugin>
+        <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
+        <plugin>
+          <artifactId>maven-resources-plugin</artifactId>
+          <version>3.0.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>3.8.0</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <version>2.22.1</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-jar-plugin</artifactId>
+          <version>3.0.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-install-plugin</artifactId>
+          <version>2.5.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-deploy-plugin</artifactId>
+          <version>2.8.2</version>
+        </plugin>
+        <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
+        <plugin>
+          <artifactId>maven-site-plugin</artifactId>
+          <version>3.7.1</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-project-info-reports-plugin</artifactId>
+          <version>3.0.0</version>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+</project>
diff --git a/serie2/ex1.4/exercice2_3/src/main/java/waffle/com/App.java b/serie2/ex1.4/exercice2_3/src/main/java/waffle/com/App.java
new file mode 100644
index 0000000000000000000000000000000000000000..cdc5e1852d9213a6c8785474716454e0e0067f43
--- /dev/null
+++ b/serie2/ex1.4/exercice2_3/src/main/java/waffle/com/App.java
@@ -0,0 +1,32 @@
+package waffle.com;
+
+/**
+ * Hello world!
+ *
+ */
+public class App {
+    public static void printFir(int n) {
+        final int nbStarsToAddPerRow = 2;
+        int rowNumber = 0;
+
+        // Line return
+        for (int i = n; i > 0; i--) {
+            // Add spaces
+            for (int nbOfSpaces = i; nbOfSpaces > 0; nbOfSpaces--) {
+                System.out.print(" ");
+            }
+
+            // Add the stars
+            for (int numberOfStars = 0; numberOfStars < rowNumber * nbStarsToAddPerRow + 1; numberOfStars++) {
+                System.out.print("*");
+            }
+
+            System.out.println("");
+            rowNumber++;
+        }
+    }
+
+    public static void main(String[] args) {
+        printFir(4);
+    }
+}
diff --git a/serie2/ex1.4/exercice2_3/src/test/java/waffle/com/AppTest.java b/serie2/ex1.4/exercice2_3/src/test/java/waffle/com/AppTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..a5617b94b730e7f696b0cf5366ef7ada9b6e9a12
--- /dev/null
+++ b/serie2/ex1.4/exercice2_3/src/test/java/waffle/com/AppTest.java
@@ -0,0 +1,20 @@
+package waffle.com;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest 
+{
+    /**
+     * Rigorous Test :-)
+     */
+    @Test
+    public void shouldAnswerWithTrue()
+    {
+        assertTrue( true );
+    }
+}
diff --git a/serie2/ex1.5/exercice2_3/.classpath b/serie2/ex1.5/exercice2_3/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..71f5fefe42d1a1ecbcb9623d3ec09e20e91627e2
--- /dev/null
+++ b/serie2/ex1.5/exercice2_3/.classpath
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" path="target/generated-sources/annotations">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="ignore_optional_problems" value="true"/>
+			<attribute name="m2e-apt" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="ignore_optional_problems" value="true"/>
+			<attribute name="m2e-apt" value="true"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/serie2/ex1.5/exercice2_3/.project b/serie2/ex1.5/exercice2_3/.project
new file mode 100644
index 0000000000000000000000000000000000000000..6ad27e21cbb6af9c9d60a11f93852bae2bc31d43
--- /dev/null
+++ b/serie2/ex1.5/exercice2_3/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>exercice2_3</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+	<filteredResources>
+		<filter>
+			<id>1601475347536</id>
+			<name></name>
+			<type>30</type>
+			<matcher>
+				<id>org.eclipse.core.resources.regexFilterMatcher</id>
+				<arguments>node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
+</projectDescription>
diff --git a/serie2/ex1.5/exercice2_3/.settings/org.eclipse.core.resources.prefs b/serie2/ex1.5/exercice2_3/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f9fe34593fcd3624a964478aeb438b0d44fe7237
--- /dev/null
+++ b/serie2/ex1.5/exercice2_3/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/test/java=UTF-8
+encoding/<project>=UTF-8
diff --git a/serie2/ex1.5/exercice2_3/.settings/org.eclipse.jdt.apt.core.prefs b/serie2/ex1.5/exercice2_3/.settings/org.eclipse.jdt.apt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..d4313d4b25e4b826b5efa4bed06fd69068761519
--- /dev/null
+++ b/serie2/ex1.5/exercice2_3/.settings/org.eclipse.jdt.apt.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.apt.aptEnabled=false
diff --git a/serie2/ex1.5/exercice2_3/.settings/org.eclipse.jdt.core.prefs b/serie2/ex1.5/exercice2_3/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..b11489fa64c19564fe8833aad871e29ff1a6a211
--- /dev/null
+++ b/serie2/ex1.5/exercice2_3/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.processAnnotations=disabled
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/serie2/ex1.5/exercice2_3/.settings/org.eclipse.m2e.core.prefs b/serie2/ex1.5/exercice2_3/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f897a7f1cb2389f85fe6381425d29f0a9866fb65
--- /dev/null
+++ b/serie2/ex1.5/exercice2_3/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/serie2/ex1.5/exercice2_3/pom.xml b/serie2/ex1.5/exercice2_3/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..95e169b9bb846d2bc04f8a47ee8cf1b66618f30f
--- /dev/null
+++ b/serie2/ex1.5/exercice2_3/pom.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>waffle.com</groupId>
+  <artifactId>exercice2_3</artifactId>
+  <version>1.0-SNAPSHOT</version>
+
+  <name>exercice2_3</name>
+  <!-- FIXME change it to the project's website -->
+  <url>http://www.example.com</url>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <maven.compiler.source>1.7</maven.compiler.source>
+    <maven.compiler.target>1.7</maven.compiler.target>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.11</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
+      <plugins>
+        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
+        <plugin>
+          <artifactId>maven-clean-plugin</artifactId>
+          <version>3.1.0</version>
+        </plugin>
+        <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
+        <plugin>
+          <artifactId>maven-resources-plugin</artifactId>
+          <version>3.0.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>3.8.0</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <version>2.22.1</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-jar-plugin</artifactId>
+          <version>3.0.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-install-plugin</artifactId>
+          <version>2.5.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-deploy-plugin</artifactId>
+          <version>2.8.2</version>
+        </plugin>
+        <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
+        <plugin>
+          <artifactId>maven-site-plugin</artifactId>
+          <version>3.7.1</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-project-info-reports-plugin</artifactId>
+          <version>3.0.0</version>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+</project>
diff --git a/serie2/ex1.5/exercice2_3/src/main/java/waffle/com/App.java b/serie2/ex1.5/exercice2_3/src/main/java/waffle/com/App.java
new file mode 100644
index 0000000000000000000000000000000000000000..e6690aab6d90be6cb30142f95aed31a001ce497b
--- /dev/null
+++ b/serie2/ex1.5/exercice2_3/src/main/java/waffle/com/App.java
@@ -0,0 +1,29 @@
+package waffle.com;
+
+/**
+ * Hello world!
+ *
+ */
+public class App {
+    public static int factorial(int n) {
+        if (n < 0){
+            throw new UnsupportedOperationException("Factorial of negative numbers are an unsupported operation.");
+        }
+
+        if (n == 0){
+            return 1;
+        }
+
+        int result = 1;
+
+        for (int i = 1; i <= n; i++) {
+            result *= i;
+        }
+
+        return result;
+    }
+
+    public static void main(String[] args) {
+        System.out.print(factorial(10)); 
+    }
+}
diff --git a/serie2/ex1.5/exercice2_3/src/test/java/waffle/com/AppTest.java b/serie2/ex1.5/exercice2_3/src/test/java/waffle/com/AppTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..a5617b94b730e7f696b0cf5366ef7ada9b6e9a12
--- /dev/null
+++ b/serie2/ex1.5/exercice2_3/src/test/java/waffle/com/AppTest.java
@@ -0,0 +1,20 @@
+package waffle.com;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest 
+{
+    /**
+     * Rigorous Test :-)
+     */
+    @Test
+    public void shouldAnswerWithTrue()
+    {
+        assertTrue( true );
+    }
+}
diff --git a/serie2/ex1.6/exercice2_3/.classpath b/serie2/ex1.6/exercice2_3/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..71f5fefe42d1a1ecbcb9623d3ec09e20e91627e2
--- /dev/null
+++ b/serie2/ex1.6/exercice2_3/.classpath
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" path="target/generated-sources/annotations">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="ignore_optional_problems" value="true"/>
+			<attribute name="m2e-apt" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="ignore_optional_problems" value="true"/>
+			<attribute name="m2e-apt" value="true"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/serie2/ex1.6/exercice2_3/.project b/serie2/ex1.6/exercice2_3/.project
new file mode 100644
index 0000000000000000000000000000000000000000..6ad27e21cbb6af9c9d60a11f93852bae2bc31d43
--- /dev/null
+++ b/serie2/ex1.6/exercice2_3/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>exercice2_3</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+	<filteredResources>
+		<filter>
+			<id>1601475347536</id>
+			<name></name>
+			<type>30</type>
+			<matcher>
+				<id>org.eclipse.core.resources.regexFilterMatcher</id>
+				<arguments>node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
+</projectDescription>
diff --git a/serie2/ex1.6/exercice2_3/.settings/org.eclipse.core.resources.prefs b/serie2/ex1.6/exercice2_3/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f9fe34593fcd3624a964478aeb438b0d44fe7237
--- /dev/null
+++ b/serie2/ex1.6/exercice2_3/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/test/java=UTF-8
+encoding/<project>=UTF-8
diff --git a/serie2/ex1.6/exercice2_3/.settings/org.eclipse.jdt.apt.core.prefs b/serie2/ex1.6/exercice2_3/.settings/org.eclipse.jdt.apt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..d4313d4b25e4b826b5efa4bed06fd69068761519
--- /dev/null
+++ b/serie2/ex1.6/exercice2_3/.settings/org.eclipse.jdt.apt.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.apt.aptEnabled=false
diff --git a/serie2/ex1.6/exercice2_3/.settings/org.eclipse.jdt.core.prefs b/serie2/ex1.6/exercice2_3/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..b11489fa64c19564fe8833aad871e29ff1a6a211
--- /dev/null
+++ b/serie2/ex1.6/exercice2_3/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.processAnnotations=disabled
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/serie2/ex1.6/exercice2_3/.settings/org.eclipse.m2e.core.prefs b/serie2/ex1.6/exercice2_3/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f897a7f1cb2389f85fe6381425d29f0a9866fb65
--- /dev/null
+++ b/serie2/ex1.6/exercice2_3/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/serie2/ex1.6/exercice2_3/pom.xml b/serie2/ex1.6/exercice2_3/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..95e169b9bb846d2bc04f8a47ee8cf1b66618f30f
--- /dev/null
+++ b/serie2/ex1.6/exercice2_3/pom.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>waffle.com</groupId>
+  <artifactId>exercice2_3</artifactId>
+  <version>1.0-SNAPSHOT</version>
+
+  <name>exercice2_3</name>
+  <!-- FIXME change it to the project's website -->
+  <url>http://www.example.com</url>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <maven.compiler.source>1.7</maven.compiler.source>
+    <maven.compiler.target>1.7</maven.compiler.target>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.11</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
+      <plugins>
+        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
+        <plugin>
+          <artifactId>maven-clean-plugin</artifactId>
+          <version>3.1.0</version>
+        </plugin>
+        <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
+        <plugin>
+          <artifactId>maven-resources-plugin</artifactId>
+          <version>3.0.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>3.8.0</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <version>2.22.1</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-jar-plugin</artifactId>
+          <version>3.0.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-install-plugin</artifactId>
+          <version>2.5.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-deploy-plugin</artifactId>
+          <version>2.8.2</version>
+        </plugin>
+        <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
+        <plugin>
+          <artifactId>maven-site-plugin</artifactId>
+          <version>3.7.1</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-project-info-reports-plugin</artifactId>
+          <version>3.0.0</version>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+</project>
diff --git a/serie2/ex1.6/exercice2_3/src/main/java/waffle/com/App.java b/serie2/ex1.6/exercice2_3/src/main/java/waffle/com/App.java
new file mode 100644
index 0000000000000000000000000000000000000000..7bb10fd3f0e063798b37564601dc0d5db8aef2ba
--- /dev/null
+++ b/serie2/ex1.6/exercice2_3/src/main/java/waffle/com/App.java
@@ -0,0 +1,24 @@
+package waffle.com;
+
+/**
+ * Hello world!
+ *
+ */
+public class App {
+    public static double approximatePi(int n){
+        double pi = 0.0;
+
+        for (int i = 1; i <= n; i++) {
+            pi += 1 / Math.pow(i, 4);
+        }
+
+        pi *= 90;
+        pi = Math.pow(pi, 1.0 / 4.0);
+
+        return pi;
+    }
+
+    public static void main(String[] args) {
+        System.out.print(approximatePi(100)); 
+    }
+}
diff --git a/serie2/ex1.6/exercice2_3/src/test/java/waffle/com/AppTest.java b/serie2/ex1.6/exercice2_3/src/test/java/waffle/com/AppTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..a5617b94b730e7f696b0cf5366ef7ada9b6e9a12
--- /dev/null
+++ b/serie2/ex1.6/exercice2_3/src/test/java/waffle/com/AppTest.java
@@ -0,0 +1,20 @@
+package waffle.com;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest 
+{
+    /**
+     * Rigorous Test :-)
+     */
+    @Test
+    public void shouldAnswerWithTrue()
+    {
+        assertTrue( true );
+    }
+}
diff --git a/serie2/ex1.7/exercice2_3/.classpath b/serie2/ex1.7/exercice2_3/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..71f5fefe42d1a1ecbcb9623d3ec09e20e91627e2
--- /dev/null
+++ b/serie2/ex1.7/exercice2_3/.classpath
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" path="target/generated-sources/annotations">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="ignore_optional_problems" value="true"/>
+			<attribute name="m2e-apt" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="ignore_optional_problems" value="true"/>
+			<attribute name="m2e-apt" value="true"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/serie2/ex1.7/exercice2_3/.project b/serie2/ex1.7/exercice2_3/.project
new file mode 100644
index 0000000000000000000000000000000000000000..6ad27e21cbb6af9c9d60a11f93852bae2bc31d43
--- /dev/null
+++ b/serie2/ex1.7/exercice2_3/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>exercice2_3</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+	<filteredResources>
+		<filter>
+			<id>1601475347536</id>
+			<name></name>
+			<type>30</type>
+			<matcher>
+				<id>org.eclipse.core.resources.regexFilterMatcher</id>
+				<arguments>node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
+</projectDescription>
diff --git a/serie2/ex1.7/exercice2_3/.settings/org.eclipse.core.resources.prefs b/serie2/ex1.7/exercice2_3/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f9fe34593fcd3624a964478aeb438b0d44fe7237
--- /dev/null
+++ b/serie2/ex1.7/exercice2_3/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/test/java=UTF-8
+encoding/<project>=UTF-8
diff --git a/serie2/ex1.7/exercice2_3/.settings/org.eclipse.jdt.apt.core.prefs b/serie2/ex1.7/exercice2_3/.settings/org.eclipse.jdt.apt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..d4313d4b25e4b826b5efa4bed06fd69068761519
--- /dev/null
+++ b/serie2/ex1.7/exercice2_3/.settings/org.eclipse.jdt.apt.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.apt.aptEnabled=false
diff --git a/serie2/ex1.7/exercice2_3/.settings/org.eclipse.jdt.core.prefs b/serie2/ex1.7/exercice2_3/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..b11489fa64c19564fe8833aad871e29ff1a6a211
--- /dev/null
+++ b/serie2/ex1.7/exercice2_3/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.processAnnotations=disabled
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/serie2/ex1.7/exercice2_3/.settings/org.eclipse.m2e.core.prefs b/serie2/ex1.7/exercice2_3/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f897a7f1cb2389f85fe6381425d29f0a9866fb65
--- /dev/null
+++ b/serie2/ex1.7/exercice2_3/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/serie2/ex1.7/exercice2_3/pom.xml b/serie2/ex1.7/exercice2_3/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..95e169b9bb846d2bc04f8a47ee8cf1b66618f30f
--- /dev/null
+++ b/serie2/ex1.7/exercice2_3/pom.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>waffle.com</groupId>
+  <artifactId>exercice2_3</artifactId>
+  <version>1.0-SNAPSHOT</version>
+
+  <name>exercice2_3</name>
+  <!-- FIXME change it to the project's website -->
+  <url>http://www.example.com</url>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <maven.compiler.source>1.7</maven.compiler.source>
+    <maven.compiler.target>1.7</maven.compiler.target>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.11</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
+      <plugins>
+        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
+        <plugin>
+          <artifactId>maven-clean-plugin</artifactId>
+          <version>3.1.0</version>
+        </plugin>
+        <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
+        <plugin>
+          <artifactId>maven-resources-plugin</artifactId>
+          <version>3.0.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>3.8.0</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <version>2.22.1</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-jar-plugin</artifactId>
+          <version>3.0.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-install-plugin</artifactId>
+          <version>2.5.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-deploy-plugin</artifactId>
+          <version>2.8.2</version>
+        </plugin>
+        <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
+        <plugin>
+          <artifactId>maven-site-plugin</artifactId>
+          <version>3.7.1</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-project-info-reports-plugin</artifactId>
+          <version>3.0.0</version>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+</project>
diff --git a/serie2/ex1.7/exercice2_3/src/main/java/waffle/com/App.java b/serie2/ex1.7/exercice2_3/src/main/java/waffle/com/App.java
new file mode 100644
index 0000000000000000000000000000000000000000..3a89d521875ca46ddb63c86b20604b45d18b1c96
--- /dev/null
+++ b/serie2/ex1.7/exercice2_3/src/main/java/waffle/com/App.java
@@ -0,0 +1,23 @@
+package waffle.com;
+
+import java.util.Scanner;
+
+/**
+ * Hello world!
+ *
+ */
+public class App {
+    public static void main(String[] args) {
+        Snake cuteSnake = new Snake(5, "☺");
+        Scanner scan = new Scanner(System.in);
+
+        while(true){
+            cuteSnake.draw();
+            System.out.print("Entrez une opération :");
+
+            // We only catch the first character to send as an operation
+            char operation = scan.next().charAt(0);
+            cuteSnake.execute(operation);
+        }
+    }
+}
diff --git a/serie2/ex1.7/exercice2_3/src/main/java/waffle/com/Snake.java b/serie2/ex1.7/exercice2_3/src/main/java/waffle/com/Snake.java
new file mode 100644
index 0000000000000000000000000000000000000000..05817e9f199df39abc51b394200bb15781341f37
--- /dev/null
+++ b/serie2/ex1.7/exercice2_3/src/main/java/waffle/com/Snake.java
@@ -0,0 +1,63 @@
+package waffle.com;
+
+public class Snake{
+    private int lenght;
+    private String head;
+
+    public Snake(int startingSize) {
+        // Clip the size to 1 at minimum
+        int size = (startingSize < 1) ? 1 : startingSize;
+        this.lenght = size;
+    }
+
+    public Snake(int startingSize, String snakeHead){
+        this(startingSize);
+        this.head = snakeHead;
+    }
+
+
+    public void increaseSize(){
+        this.lenght++;
+    }
+
+    public void decreaseSize(){
+        if(this.lenght > 1){
+            this.lenght--;
+        }
+        else{
+            // close the program if the snake ever reaches a size of 0
+            System.out.print("Goodbye !");
+            System.exit(0);
+        }
+    }
+
+    /**
+     * Executes an operation on the snake using a character
+     * @param operation accepts only '+' or '-' as a valid operation.
+     */
+    public void execute(char operation){
+        switch (operation) {
+            case '+':
+                this.increaseSize();
+                break;
+
+            case '-':
+                this.decreaseSize();
+                break;
+            default:
+                System.err.println("Invalid operation. Currently supported operations are '+' and '-'.");
+                break;
+        }
+    }
+
+    /**
+     * Draws the snake in the terminal.
+     */
+    public void draw(){
+        for (int i = 0; i < this.lenght; i++) {
+            System.out.print("*");
+        }
+        System.out.print(this.head);
+        System.out.println();
+    }
+}
\ No newline at end of file
diff --git a/serie2/ex1.7/exercice2_3/src/test/java/waffle/com/AppTest.java b/serie2/ex1.7/exercice2_3/src/test/java/waffle/com/AppTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..a5617b94b730e7f696b0cf5366ef7ada9b6e9a12
--- /dev/null
+++ b/serie2/ex1.7/exercice2_3/src/test/java/waffle/com/AppTest.java
@@ -0,0 +1,20 @@
+package waffle.com;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest 
+{
+    /**
+     * Rigorous Test :-)
+     */
+    @Test
+    public void shouldAnswerWithTrue()
+    {
+        assertTrue( true );
+    }
+}
diff --git a/serie2/ex1.8/exercice2_3/.classpath b/serie2/ex1.8/exercice2_3/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..71f5fefe42d1a1ecbcb9623d3ec09e20e91627e2
--- /dev/null
+++ b/serie2/ex1.8/exercice2_3/.classpath
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" path="target/generated-sources/annotations">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="ignore_optional_problems" value="true"/>
+			<attribute name="m2e-apt" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="ignore_optional_problems" value="true"/>
+			<attribute name="m2e-apt" value="true"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/serie2/ex1.8/exercice2_3/.project b/serie2/ex1.8/exercice2_3/.project
new file mode 100644
index 0000000000000000000000000000000000000000..6ad27e21cbb6af9c9d60a11f93852bae2bc31d43
--- /dev/null
+++ b/serie2/ex1.8/exercice2_3/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>exercice2_3</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+	<filteredResources>
+		<filter>
+			<id>1601475347536</id>
+			<name></name>
+			<type>30</type>
+			<matcher>
+				<id>org.eclipse.core.resources.regexFilterMatcher</id>
+				<arguments>node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
+</projectDescription>
diff --git a/serie2/ex1.8/exercice2_3/.settings/org.eclipse.core.resources.prefs b/serie2/ex1.8/exercice2_3/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f9fe34593fcd3624a964478aeb438b0d44fe7237
--- /dev/null
+++ b/serie2/ex1.8/exercice2_3/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/test/java=UTF-8
+encoding/<project>=UTF-8
diff --git a/serie2/ex1.8/exercice2_3/.settings/org.eclipse.jdt.apt.core.prefs b/serie2/ex1.8/exercice2_3/.settings/org.eclipse.jdt.apt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..d4313d4b25e4b826b5efa4bed06fd69068761519
--- /dev/null
+++ b/serie2/ex1.8/exercice2_3/.settings/org.eclipse.jdt.apt.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.apt.aptEnabled=false
diff --git a/serie2/ex1.8/exercice2_3/.settings/org.eclipse.jdt.core.prefs b/serie2/ex1.8/exercice2_3/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..b11489fa64c19564fe8833aad871e29ff1a6a211
--- /dev/null
+++ b/serie2/ex1.8/exercice2_3/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.processAnnotations=disabled
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/serie2/ex1.8/exercice2_3/.settings/org.eclipse.m2e.core.prefs b/serie2/ex1.8/exercice2_3/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f897a7f1cb2389f85fe6381425d29f0a9866fb65
--- /dev/null
+++ b/serie2/ex1.8/exercice2_3/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/serie2/ex1.8/exercice2_3/pom.xml b/serie2/ex1.8/exercice2_3/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..95e169b9bb846d2bc04f8a47ee8cf1b66618f30f
--- /dev/null
+++ b/serie2/ex1.8/exercice2_3/pom.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>waffle.com</groupId>
+  <artifactId>exercice2_3</artifactId>
+  <version>1.0-SNAPSHOT</version>
+
+  <name>exercice2_3</name>
+  <!-- FIXME change it to the project's website -->
+  <url>http://www.example.com</url>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <maven.compiler.source>1.7</maven.compiler.source>
+    <maven.compiler.target>1.7</maven.compiler.target>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.11</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
+      <plugins>
+        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
+        <plugin>
+          <artifactId>maven-clean-plugin</artifactId>
+          <version>3.1.0</version>
+        </plugin>
+        <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
+        <plugin>
+          <artifactId>maven-resources-plugin</artifactId>
+          <version>3.0.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>3.8.0</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <version>2.22.1</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-jar-plugin</artifactId>
+          <version>3.0.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-install-plugin</artifactId>
+          <version>2.5.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-deploy-plugin</artifactId>
+          <version>2.8.2</version>
+        </plugin>
+        <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
+        <plugin>
+          <artifactId>maven-site-plugin</artifactId>
+          <version>3.7.1</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-project-info-reports-plugin</artifactId>
+          <version>3.0.0</version>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+</project>
diff --git a/serie2/ex1.8/exercice2_3/src/main/java/waffle/com/App.java b/serie2/ex1.8/exercice2_3/src/main/java/waffle/com/App.java
new file mode 100644
index 0000000000000000000000000000000000000000..9a3a3e56bcf88db9b8fd9f609fa03de26fbf3db0
--- /dev/null
+++ b/serie2/ex1.8/exercice2_3/src/main/java/waffle/com/App.java
@@ -0,0 +1,21 @@
+package waffle.com;
+
+/**
+ * Hello world!
+ *
+ */
+public class App {
+    public static void main(String[] args) {
+        double[] result = MathVectors.sub(new double[]{5.0, 3.0, 5.0}, new double[]{5.0, 1.0, 5.0});
+
+        System.out.println("Substracting 2 vectors :");
+        for (double d : result) {
+            System.out.println(d);
+        }
+
+        System.out.println("");
+
+        double result2 = MathVectors.norm(new double[]{1.0, 2.0, 2.0});
+        System.out.println("Norm of vector : " + result2);
+    }
+}
diff --git a/serie2/ex1.8/exercice2_3/src/main/java/waffle/com/MathVectors.java b/serie2/ex1.8/exercice2_3/src/main/java/waffle/com/MathVectors.java
new file mode 100644
index 0000000000000000000000000000000000000000..d0eb312e1ece03703fed485fac7ee0b914dce118
--- /dev/null
+++ b/serie2/ex1.8/exercice2_3/src/main/java/waffle/com/MathVectors.java
@@ -0,0 +1,81 @@
+package waffle.com;
+
+public class MathVectors {
+    /**
+     * Returns the sum of two vectors of the same dimension.
+     * 
+     * @param vector1
+     * @param vector2
+     * @return
+     */
+    public static double[] add(double[] vector1, double[] vector2) {
+        // Returns an empty vector if we send incorrect input
+        if (vector1.length != vector2.length) {
+            return new double[0];
+        }
+
+        double[] result = new double[vector1.length];
+
+        for (int i = 0; i < vector1.length; i++) {
+            result[i] = vector1[i] + vector2[i];
+        }
+
+        return result;
+    }
+
+    /**
+     * Returns the product of a vector and a scalar.
+     * 
+     * @param vector
+     * @param scalar
+     * @return
+     */
+    public static double[] mul(double[] vector, double scalar) {
+        double[] result = new double[vector.length];
+
+        for (int i = 0; i < vector.length; i++) {
+            result[i] = vector[i] * scalar;
+        }
+
+        return result;
+    }
+
+    /**
+     * Returns the difference of two vectors of the same dimension.
+     * 
+     * @param vector1
+     * @param vector2
+     * @return
+     */
+    public static double[] sub(double[] vector1, double[] vector2) {
+        // Returns an empty vector if we send incorrect input
+        if (vector1.length != vector2.length) {
+            return new double[0];
+        }
+
+        // To substract, we add the inverse of the second matrix
+        double[] result = add(vector1, mul(vector2, -1.0));
+
+        return result;
+    }
+
+    /**
+     * Returns the dimension of a given vector.
+     * 
+     * @param vector
+     * @return
+     */
+    public static int len(double[] vector) {
+        return vector.length;
+    }
+
+    public static double norm(double[] vector) {
+        double result = 0.0;
+
+        for (int i = 0; i < vector.length; i++) {
+            result += vector[i] * vector[i];
+        }
+
+        return Math.sqrt(result);
+    }
+}
diff --git a/serie2/ex1.8/exercice2_3/src/test/java/waffle/com/AppTest.java b/serie2/ex1.8/exercice2_3/src/test/java/waffle/com/AppTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..a5617b94b730e7f696b0cf5366ef7ada9b6e9a12
--- /dev/null
+++ b/serie2/ex1.8/exercice2_3/src/test/java/waffle/com/AppTest.java
@@ -0,0 +1,20 @@
+package waffle.com;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest 
+{
+    /**
+     * Rigorous Test :-)
+     */
+    @Test
+    public void shouldAnswerWithTrue()
+    {
+        assertTrue( true );
+    }
+}
diff --git a/serie3/ex1.1/.classpath b/serie3/ex1.1/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..9ba41a249e124721e89c65729d21c6d7df2c1b66
--- /dev/null
+++ b/serie3/ex1.1/.classpath
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" path="target/generated-sources/annotations">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="ignore_optional_problems" value="true"/>
+			<attribute name="m2e-apt" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="ignore_optional_problems" value="true"/>
+			<attribute name="m2e-apt" value="true"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/serie3/ex1.1/.project b/serie3/ex1.1/.project
new file mode 100644
index 0000000000000000000000000000000000000000..74c639e41d1b3d7f4e717c70bfd4f65caa38ebd1
--- /dev/null
+++ b/serie3/ex1.1/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>exercice_3_1</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+	<filteredResources>
+		<filter>
+			<id>1602790735015</id>
+			<name></name>
+			<type>30</type>
+			<matcher>
+				<id>org.eclipse.core.resources.regexFilterMatcher</id>
+				<arguments>node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
+</projectDescription>
diff --git a/serie3/ex1.1/.settings/org.eclipse.core.resources.prefs b/serie3/ex1.1/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f9fe34593fcd3624a964478aeb438b0d44fe7237
--- /dev/null
+++ b/serie3/ex1.1/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/test/java=UTF-8
+encoding/<project>=UTF-8
diff --git a/serie3/ex1.1/.settings/org.eclipse.jdt.apt.core.prefs b/serie3/ex1.1/.settings/org.eclipse.jdt.apt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..d4313d4b25e4b826b5efa4bed06fd69068761519
--- /dev/null
+++ b/serie3/ex1.1/.settings/org.eclipse.jdt.apt.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.apt.aptEnabled=false
diff --git a/serie3/ex1.1/.settings/org.eclipse.jdt.core.prefs b/serie3/ex1.1/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..46235dc078e4938d44ecf463f32b5f913f920ccb
--- /dev/null
+++ b/serie3/ex1.1/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.processAnnotations=disabled
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/serie3/ex1.1/.settings/org.eclipse.m2e.core.prefs b/serie3/ex1.1/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f897a7f1cb2389f85fe6381425d29f0a9866fb65
--- /dev/null
+++ b/serie3/ex1.1/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/serie3/ex1.1/pom.xml b/serie3/ex1.1/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fd2c7bc518ec87379523eaecf51f29d161c034dd
--- /dev/null
+++ b/serie3/ex1.1/pom.xml
@@ -0,0 +1,80 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>ch.hepia.exercice_3_1</groupId>
+  <artifactId>exercice_3_1</artifactId>
+  <packaging>jar</packaging>
+  <version>0.1</version>
+  <name>exercice_3_1</name>
+
+  <properties>
+    <maven.compiler.source>11</maven.compiler.source>
+    <maven.compiler.target>11</maven.compiler.target>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+
+
+  <url>http://maven.apache.org</url>
+  <dependencies>
+    <dependency>
+        <groupId>org.junit.jupiter</groupId>
+        <artifactId>junit-jupiter-engine</artifactId>
+        <version>5.6.2</version>
+        <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>exec-maven-plugin</artifactId>
+        <version>1.6.0</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>java</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <!-- Point here to your main class -->
+          <mainClass>ch.hepia.exercice_3_1.App</mainClass>
+        </configuration>
+      </plugin>
+
+      <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <version>2.22.2</version>
+          <configuration>
+            <excludes>
+              <exclude>some test to exclude here</exclude>
+            </excludes>
+          </configuration>
+      </plugin>
+
+      <plugin>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <version>3.1.1</version>
+        <configuration>
+          <descriptorRefs>
+            <descriptorRef>jar-with-dependencies</descriptorRef>
+          </descriptorRefs>
+        </configuration>
+        <executions>
+          <execution>
+            <id>make-assembly</id>            <!-- this is used for inheritance merges -->
+            <phase>package</phase>            <!-- bind to the packaging phase -->
+            <goals>
+              <goal>single</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+
+    </plugins>
+  </build>
+
+</project>
diff --git a/serie3/ex1.1/src/main/java/ch/hepia/exercice_3_1/App.java b/serie3/ex1.1/src/main/java/ch/hepia/exercice_3_1/App.java
new file mode 100644
index 0000000000000000000000000000000000000000..1f11b58c96556e88875999ed13cbe985d9cdabf9
--- /dev/null
+++ b/serie3/ex1.1/src/main/java/ch/hepia/exercice_3_1/App.java
@@ -0,0 +1,36 @@
+package ch.hepia.exercice_3_1;
+
+import ch.hepia.exercice_3_1.ContainerHelper;
+
+/**
+ * Hello world!
+ *
+ */
+public class App {
+    public static void main(String[] args) {
+
+        /*
+         * //3.1.1 ContainerHelper.transfer(10, 3, 3, 3).forEach(System.out::println);
+         * // {3, 3, 3} System.out.println();
+         * 
+         * ContainerHelper.transfer(10, 3, 3, 3, 3).forEach(System.out::println); // {3,
+         * 3, 3, 1} System.out.println();
+         * 
+         * ContainerHelper.transfer(5, 3).forEach(System.out::println); // {3}
+         * System.out.println();
+         * 
+         * ContainerHelper.transfer(0, 3).forEach(System.out::println); // {0}
+         * System.out.println();
+         * 
+         * ContainerHelper.transfer(100, 10, 40, 30, 50).forEach(System.out::println);
+         * // {10, 40, 30, 20} System.out.println();
+         */
+
+
+
+
+        // 3.1.2 --> see unit tests
+        
+
+    }
+}
diff --git a/serie3/ex1.1/src/main/java/ch/hepia/exercice_3_1/Container.java b/serie3/ex1.1/src/main/java/ch/hepia/exercice_3_1/Container.java
new file mode 100644
index 0000000000000000000000000000000000000000..15e08ce9edb0b2b00a8b0705f5f9b60f251c2e12
--- /dev/null
+++ b/serie3/ex1.1/src/main/java/ch/hepia/exercice_3_1/Container.java
@@ -0,0 +1,82 @@
+package ch.hepia.exercice_3_1;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class Container {
+    private int capacity;
+    private int amount;
+
+    public Container(int capacity) {
+        this.capacity = capacity;
+        this.amount = 0;
+    }
+
+    public static Container withCapacity(int capacity){
+        return new Container(capacity);
+    }
+
+    public void fillToTheMax(){
+        this.amount = this.capacity;
+    }
+
+    public void fillWith(int amount){
+        if (amount < 0){
+            throw new IllegalArgumentException("Amount to add cannot be negative");
+        }
+
+        this.amount = (this.amount + amount >= this.capacity) ? this.capacity : this.amount + amount;
+    }
+
+    public void remove(int amount){
+        if (amount < 0){
+            throw new IllegalArgumentException("Amount to substract cannot be negative");
+        }
+
+        this.amount = (this.amount - amount >= 0) ? this.amount - amount : 0;
+    }
+
+    /**
+     * Fill a single container using the remaining amount
+     * @param recipient
+     */
+    public void fillTo(Container recipient){
+        // Fill the container to their max capacity if possible, else to the remaining amount
+        int amountToTransfer = (this.quantity() >= recipient.remaining()) ? recipient.remaining() : this.quantity();
+        recipient.fillWith(amountToTransfer);
+        // Limit the remaining amount from going below zero while substracting
+        this.remove(amountToTransfer);
+    }
+
+    /**
+     * Fill one or more containers using the remaining amount
+     * @param recipient [REQUIRED] the first container
+     * @param recipients one or more containers to fill
+     */
+    public void fillTo(Container recipient, Container... recipients){
+        List<Container> containers = new ArrayList<>();
+        // Concatenate our first required parameter and the arbiritrary amount of parameters into a list
+        containers.add(recipient);
+        Arrays.stream(recipients).forEach(item -> containers.add(item));
+
+        for (Container container : containers) {
+            this.fillTo(container);
+        }
+    }
+
+    public boolean isFull(){
+        return (this.amount == this.capacity) ? true : false;
+    }
+
+    public int quantity(){
+        return this.amount;
+    }
+
+    public void flush(){
+        this.amount = 0;
+    }
+
+    public int remaining(){
+        return this.capacity - this.amount;
+    }
+}
diff --git a/serie3/ex1.1/src/main/java/ch/hepia/exercice_3_1/ContainerHelper.java b/serie3/ex1.1/src/main/java/ch/hepia/exercice_3_1/ContainerHelper.java
new file mode 100644
index 0000000000000000000000000000000000000000..18ec0ce697119eedffe8db07417cfff4fdb2ba72
--- /dev/null
+++ b/serie3/ex1.1/src/main/java/ch/hepia/exercice_3_1/ContainerHelper.java
@@ -0,0 +1,34 @@
+package ch.hepia.exercice_3_1;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+public class ContainerHelper {
+
+
+    /**
+     * Allows the creation of containers and the ability to fill them with a specified amount.
+     * @param amount the amount to fill the container.
+     * @param container the first (required) container.
+     * @param otherContainers arbitrary amount of other containers
+     * @return
+     */
+    public static List<Integer> transfer(int amount, int container, int... otherContainers){
+        int amountLeft = amount;
+        List<Integer> containers = new ArrayList<>();
+        List<Integer> result = new ArrayList<>();
+
+        // Concatenate our first required parameter and the arbiritrary amount of parameters into a list
+        containers.add(container);
+        Arrays.stream(otherContainers).forEach(i -> containers.add(i));
+
+        for (int containerCapacity : containers) {
+            // Fill the container to their max capacity if possible, else to the remaining amount
+            result.add((amountLeft >= containerCapacity) ? containerCapacity : amountLeft);
+            // Limit the remaining amount from going below zero while substracting
+            amountLeft = (amountLeft - containerCapacity <= 0) ? 0 : amountLeft - containerCapacity;
+        }
+
+        return result;
+    }
+}
diff --git a/serie3/ex1.1/src/test/java/ch/hepia/exercice_3_1/AppTest.java b/serie3/ex1.1/src/test/java/ch/hepia/exercice_3_1/AppTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..673be908a5adbee0849c1a345b5056957f6f40da
--- /dev/null
+++ b/serie3/ex1.1/src/test/java/ch/hepia/exercice_3_1/AppTest.java
@@ -0,0 +1,34 @@
+package ch.hepia.exercice_3_1;
+
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+
+
+/**
+ * Unit test for simple App.
+ */
+class AppTest {
+
+    @Test
+    void teacherTest() {
+        Container origin = Container.withCapacity(10); // récipient vide par défaut
+        origin.fillToTheMax(); // remplissage
+        Container destination1 = new Container(5); // idem que Container.withCapacity(5);
+        destination1.fillWith(2);
+        Container destination2 = Container.withCapacity(3);
+        Container destination3 = Container.withCapacity(10);
+        origin.fillTo(destination1, destination2, destination3);
+
+        assert destination1.isFull();
+        assert destination2.isFull();
+        assert destination2.remaining() == 0;
+        destination2.remove(2);
+        assert destination2.remaining() == 2;
+        assert !destination3.isFull();
+        assert destination3.quantity() == 4;
+        destination3.flush();
+        assert destination3.quantity() == 0;
+    }
+}
diff --git a/serie3/ex1.2/.classpath b/serie3/ex1.2/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..9ba41a249e124721e89c65729d21c6d7df2c1b66
--- /dev/null
+++ b/serie3/ex1.2/.classpath
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" path="target/generated-sources/annotations">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="ignore_optional_problems" value="true"/>
+			<attribute name="m2e-apt" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="ignore_optional_problems" value="true"/>
+			<attribute name="m2e-apt" value="true"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/serie3/ex1.2/.project b/serie3/ex1.2/.project
new file mode 100644
index 0000000000000000000000000000000000000000..d20205f751333a33f164c5452eb2e72f85b56ca4
--- /dev/null
+++ b/serie3/ex1.2/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>accounts</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+	<filteredResources>
+		<filter>
+			<id>1603018435161</id>
+			<name></name>
+			<type>30</type>
+			<matcher>
+				<id>org.eclipse.core.resources.regexFilterMatcher</id>
+				<arguments>node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
+</projectDescription>
diff --git a/serie3/ex1.2/.settings/org.eclipse.core.resources.prefs b/serie3/ex1.2/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f9fe34593fcd3624a964478aeb438b0d44fe7237
--- /dev/null
+++ b/serie3/ex1.2/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/test/java=UTF-8
+encoding/<project>=UTF-8
diff --git a/serie3/ex1.2/.settings/org.eclipse.jdt.apt.core.prefs b/serie3/ex1.2/.settings/org.eclipse.jdt.apt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..d4313d4b25e4b826b5efa4bed06fd69068761519
--- /dev/null
+++ b/serie3/ex1.2/.settings/org.eclipse.jdt.apt.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.apt.aptEnabled=false
diff --git a/serie3/ex1.2/.settings/org.eclipse.jdt.core.prefs b/serie3/ex1.2/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..46235dc078e4938d44ecf463f32b5f913f920ccb
--- /dev/null
+++ b/serie3/ex1.2/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.processAnnotations=disabled
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/serie3/ex1.2/.settings/org.eclipse.m2e.core.prefs b/serie3/ex1.2/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f897a7f1cb2389f85fe6381425d29f0a9866fb65
--- /dev/null
+++ b/serie3/ex1.2/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/serie3/ex1.2/pom.xml b/serie3/ex1.2/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8cd1a617569c664af525b718466be0692d702c7b
--- /dev/null
+++ b/serie3/ex1.2/pom.xml
@@ -0,0 +1,80 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>ch.hepia.accounts</groupId>
+  <artifactId>accounts</artifactId>
+  <packaging>jar</packaging>
+  <version>0.1</version>
+  <name>accounts</name>
+
+  <properties>
+    <maven.compiler.source>11</maven.compiler.source>
+    <maven.compiler.target>11</maven.compiler.target>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+
+
+  <url>http://maven.apache.org</url>
+  <dependencies>
+    <dependency>
+        <groupId>org.junit.jupiter</groupId>
+        <artifactId>junit-jupiter-engine</artifactId>
+        <version>5.6.2</version>
+        <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>exec-maven-plugin</artifactId>
+        <version>1.6.0</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>java</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <!-- Point here to your main class -->
+          <mainClass>ch.hepia.accounts.App</mainClass>
+        </configuration>
+      </plugin>
+
+      <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <version>2.22.2</version>
+          <configuration>
+            <excludes>
+              <exclude>some test to exclude here</exclude>
+            </excludes>
+          </configuration>
+      </plugin>
+
+      <plugin>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <version>3.1.1</version>
+        <configuration>
+          <descriptorRefs>
+            <descriptorRef>jar-with-dependencies</descriptorRef>
+          </descriptorRefs>
+        </configuration>
+        <executions>
+          <execution>
+            <id>make-assembly</id>            <!-- this is used for inheritance merges -->
+            <phase>package</phase>            <!-- bind to the packaging phase -->
+            <goals>
+              <goal>single</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+
+    </plugins>
+  </build>
+
+</project>
diff --git a/serie3/ex1.2/src/main/java/ch/hepia/accounts/Account.java b/serie3/ex1.2/src/main/java/ch/hepia/accounts/Account.java
new file mode 100644
index 0000000000000000000000000000000000000000..2da20e4b4b2fa92d28ea89741390ce226bffd4b4
--- /dev/null
+++ b/serie3/ex1.2/src/main/java/ch/hepia/accounts/Account.java
@@ -0,0 +1,96 @@
+package ch.hepia.accounts;
+
+import java.util.Objects;
+
+public class Account {
+
+    private String owner;
+    private int amount;
+    private final int AMOUNT_LIMIT = -2000;
+
+
+    public Account(String firstName, String lastName) {
+        this.owner = firstName + " " + lastName;
+    }
+
+    public Account(String firstName, String lastName, int amount) {
+        this(firstName, lastName);
+        this.deposit(amount);
+    }
+
+
+    /**
+     * Returns the current amount in cents.
+     * @return the currents amount of cents as an integer.
+     */
+    public int amount(){
+        return this.amount;
+    }
+
+    /**
+     * Returns the full name (first name, last name) of the account user.
+     * @return The user's full name as a String object.
+     */
+    public String fullname(){
+        return this.owner;
+    }
+
+    private static void checkPositiveOrThrow(int i){
+        if(i < 0){
+            throw new RuntimeException("Amount to transfer should be positive");
+        }
+    }
+
+    private static void checkOverflowOrThrow(int amount, int amountToAdd){
+        if(amount + amountToAdd > Integer.MAX_VALUE){
+            throw new RuntimeException("An amount should not overflow");
+        }
+    }
+
+    private void checkAccountLimit(int amountToRemove){
+        if (this.amount - amountToRemove <= this.AMOUNT_LIMIT){
+            throw new RuntimeException("Unable to process transaction, amount should never be under " + this.AMOUNT_LIMIT);
+        }
+    }
+
+    public void deposit(int amountToDeposit){
+        Account.checkPositiveOrThrow(amountToDeposit);
+        Account.checkOverflowOrThrow(this.amount, amountToDeposit);
+        this.amount += amountToDeposit;
+    }
+
+    public void withdraw(int amountToWithdraw){
+        Account.checkPositiveOrThrow(amountToWithdraw);
+        checkAccountLimit(amountToWithdraw);
+        this.amount -= amountToWithdraw;
+    }
+
+    public void transferTo(Account destination, int amountToTransfer){
+        this.withdraw(amountToTransfer);
+        destination.deposit(amountToTransfer);
+    }
+
+    public String toString(){
+        int coins = this.amount / 100;
+        int cents = this.amount % 100;
+        return this.owner + " : " +  "CHF" + coins + "," + cents;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null || obj.getClass() != this.getClass()) {
+            return false;
+        }
+
+        Account other = (Account) obj;
+        return (this.amount == other.amount) && (this.owner.equals(other.owner));
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(this.owner, this.amount);
+    }
+
+}
\ No newline at end of file
diff --git a/serie3/ex1.2/src/main/java/ch/hepia/accounts/App.java b/serie3/ex1.2/src/main/java/ch/hepia/accounts/App.java
new file mode 100644
index 0000000000000000000000000000000000000000..a14fb4ae4a161a0febc90f6e78baa098121dd1e0
--- /dev/null
+++ b/serie3/ex1.2/src/main/java/ch/hepia/accounts/App.java
@@ -0,0 +1,27 @@
+package ch.hepia.accounts;
+
+public class App 
+{
+    public static void main( String[] args )
+    {
+        Account a1 = new Account("Julien", "Seemüller", 10000);
+        Account a2 = new Account("Paul", "Albuchef", 1000000);
+        Account a3 = new Account("Julien", "Seemüller", 19650);
+
+        a1.deposit(10000);
+        
+        System.out.println(a1);
+        System.out.println(a2);
+
+        a1.transferTo(a2, 350);
+
+        System.out.println(a1);
+        System.out.println(a2);
+        System.out.println(a3);
+
+        System.out.println(a1.equals(a2));
+        System.out.println(a1.equals(a1));
+        System.out.println(a1.equals(a3));
+
+    }
+}
diff --git a/serie3/ex1.2/src/test/java/ch/hepia/accounts/AppTest.java b/serie3/ex1.2/src/test/java/ch/hepia/accounts/AppTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..a17ee53e1628fb343f7d99718f062e1882ec1fb4
--- /dev/null
+++ b/serie3/ex1.2/src/test/java/ch/hepia/accounts/AppTest.java
@@ -0,0 +1,18 @@
+package ch.hepia.accounts;
+
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+
+
+/**
+ * Unit test for simple App.
+ */
+class AppTest {
+
+    @Test
+    void dummyTest() {
+        assertTrue(true);
+    }
+}
diff --git a/serie4/ex1.1/answers.md b/serie4/ex1.1/answers.md
new file mode 100644
index 0000000000000000000000000000000000000000..c835d60bc5b9056078c979cf20cf9a00b63f4cc2
--- /dev/null
+++ b/serie4/ex1.1/answers.md
@@ -0,0 +1,5 @@
+# 4.1 Exercice
+
+## A quoi sert de redéfinir la méthode hashcode si la méthode equals a déjà été redéfinie ?
+
+Nous sommes obligé de la redéfinir. Si deux objets sont égaux ils doivent avoir le même *hash*. Dans le cas ou l'on ne redéfinit pas notre fonction hashcode, ils n'auront pas le même hash. Cette logique serait donc brisée
\ No newline at end of file
diff --git a/serie4/ex1.3/answers.md b/serie4/ex1.3/answers.md
new file mode 100644
index 0000000000000000000000000000000000000000..cff9440ee4f11f9f5cda52791486687ed2d57442
--- /dev/null
+++ b/serie4/ex1.3/answers.md
@@ -0,0 +1,5 @@
+# 4.3 Exercice
+
+## Dans l’exemple ci-dessous, déterminez pourquoi l’utilisation de l’opérateur instanceof au lieu de la méthode getClass est problématique. Pour vous aider, imaginez un cas ou la propriété symétrique de la relation n’est pas respectée.
+
+Dans le cas ou l'on définit un patient et une personne. On essaye de faire un Person.equals du patient, on aura pas le même résultat que si l'on fait un Patient.equals de personne. Dans les deux cas, on devrait **toujours** avoir les mêmes résultats
\ No newline at end of file
diff --git a/serie4/ex1.4/.classpath b/serie4/ex1.4/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..9ba41a249e124721e89c65729d21c6d7df2c1b66
--- /dev/null
+++ b/serie4/ex1.4/.classpath
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" path="target/generated-sources/annotations">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="ignore_optional_problems" value="true"/>
+			<attribute name="m2e-apt" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="ignore_optional_problems" value="true"/>
+			<attribute name="m2e-apt" value="true"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/serie4/ex1.4/.project b/serie4/ex1.4/.project
new file mode 100644
index 0000000000000000000000000000000000000000..00d60cb5a6e4f9c747b302a21620dcfa3dc1174e
--- /dev/null
+++ b/serie4/ex1.4/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>my-app</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+	<filteredResources>
+		<filter>
+			<id>1603821036077</id>
+			<name></name>
+			<type>30</type>
+			<matcher>
+				<id>org.eclipse.core.resources.regexFilterMatcher</id>
+				<arguments>node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
+</projectDescription>
diff --git a/serie4/ex1.4/.settings/org.eclipse.core.resources.prefs b/serie4/ex1.4/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f9fe34593fcd3624a964478aeb438b0d44fe7237
--- /dev/null
+++ b/serie4/ex1.4/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/test/java=UTF-8
+encoding/<project>=UTF-8
diff --git a/serie4/ex1.4/.settings/org.eclipse.jdt.apt.core.prefs b/serie4/ex1.4/.settings/org.eclipse.jdt.apt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..d4313d4b25e4b826b5efa4bed06fd69068761519
--- /dev/null
+++ b/serie4/ex1.4/.settings/org.eclipse.jdt.apt.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.apt.aptEnabled=false
diff --git a/serie4/ex1.4/.settings/org.eclipse.jdt.core.prefs b/serie4/ex1.4/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..46235dc078e4938d44ecf463f32b5f913f920ccb
--- /dev/null
+++ b/serie4/ex1.4/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.processAnnotations=disabled
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/serie4/ex1.4/.settings/org.eclipse.m2e.core.prefs b/serie4/ex1.4/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f897a7f1cb2389f85fe6381425d29f0a9866fb65
--- /dev/null
+++ b/serie4/ex1.4/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/serie4/ex1.4/.vscode/settings.json b/serie4/ex1.4/.vscode/settings.json
new file mode 100644
index 0000000000000000000000000000000000000000..c5f3f6b9c754225a4c577122bc2f9c0b49713e3c
--- /dev/null
+++ b/serie4/ex1.4/.vscode/settings.json
@@ -0,0 +1,3 @@
+{
+    "java.configuration.updateBuildConfiguration": "interactive"
+}
\ No newline at end of file
diff --git a/serie4/ex1.4/pom.xml b/serie4/ex1.4/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0fd6e4b72a114f1f6874cd2f0d26d929980d36a4
--- /dev/null
+++ b/serie4/ex1.4/pom.xml
@@ -0,0 +1,80 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>ch.hepia.exercice_4_4</groupId>
+  <artifactId>exercice_4_4</artifactId>
+  <packaging>jar</packaging>
+  <version>0.1</version>
+  <name>exercice_4_4</name>
+
+  <properties>
+    <maven.compiler.source>11</maven.compiler.source>
+    <maven.compiler.target>11</maven.compiler.target>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+
+
+  <url>http://maven.apache.org</url>
+  <dependencies>
+    <dependency>
+        <groupId>org.junit.jupiter</groupId>
+        <artifactId>junit-jupiter-engine</artifactId>
+        <version>5.6.2</version>
+        <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>exec-maven-plugin</artifactId>
+        <version>1.6.0</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>java</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <!-- Point here to your main class -->
+          <mainClass>ch.hepia.exercice_4_4.App</mainClass>
+        </configuration>
+      </plugin>
+
+      <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <version>2.22.2</version>
+          <configuration>
+            <excludes>
+              <exclude>some test to exclude here</exclude>
+            </excludes>
+          </configuration>
+      </plugin>
+
+      <plugin>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <version>3.1.1</version>
+        <configuration>
+          <descriptorRefs>
+            <descriptorRef>jar-with-dependencies</descriptorRef>
+          </descriptorRefs>
+        </configuration>
+        <executions>
+          <execution>
+            <id>make-assembly</id>            <!-- this is used for inheritance merges -->
+            <phase>package</phase>            <!-- bind to the packaging phase -->
+            <goals>
+              <goal>single</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+
+    </plugins>
+  </build>
+
+</project>
diff --git a/serie4/ex1.4/src/main/java/ch/hepia/exercice_4_4/App.java b/serie4/ex1.4/src/main/java/ch/hepia/exercice_4_4/App.java
new file mode 100644
index 0000000000000000000000000000000000000000..e89f1cc04d235e01d83eb7697c291e6007a02c0e
--- /dev/null
+++ b/serie4/ex1.4/src/main/java/ch/hepia/exercice_4_4/App.java
@@ -0,0 +1,16 @@
+package ch.hepia.exercice_4_4;
+
+public class App 
+{
+    public static void main( String[] args )
+    {
+        System.out.println();
+        Beverage.check(Beverage.whiskey);
+        System.out.println();
+        Beverage.check(Beverage.whiteBeer);
+        System.out.println();
+        Beverage.check(Beverage.sodaCola);
+        System.out.println();
+        
+    }
+}
diff --git a/serie4/ex1.4/src/main/java/ch/hepia/exercice_4_4/Beverage.java b/serie4/ex1.4/src/main/java/ch/hepia/exercice_4_4/Beverage.java
new file mode 100644
index 0000000000000000000000000000000000000000..adcbad00839a27d8397658e7e8cb208735cbdf73
--- /dev/null
+++ b/serie4/ex1.4/src/main/java/ch/hepia/exercice_4_4/Beverage.java
@@ -0,0 +1,47 @@
+package ch.hepia.exercice_4_4;
+/*
+
+Bière blanche 4.5 4.0
+Bière ambrée 5.2 5.0
+Soda Cola 0 3.5
+Whisky 57.0 9.0
+*/
+public enum Beverage {
+        whiteBeer("Bière blanche", 4.5, 4.0),
+        amberBeer("Bière ambrée", 5.2, 5.0),
+        sodaCola("Soda cola", 0.0, 5.0),
+        whiskey("Whiskey", 57.0, 9.0);
+      
+        private final String name;
+        private final Double percent;
+        private final Double price;
+
+        private Beverage(String name, Double percent, Double price) {
+          this.name = name;
+          this.percent = percent;
+          this.price = price;
+        }
+
+        public String toString(){
+            return this.name + " : CHF " + this.price;
+        }
+
+        static void check(Beverage drink){
+            if (drink.percent > 0.0) {
+
+                System.out.println("Contrôle d'âge nécéssaire.");
+
+                if (drink.percent > 6.0){
+                    System.out.println("La personne doit avoir 18 ans révolus.");
+                }
+                else{
+                    System.out.println("La personne doit avoir 16 ans révolus");
+                }
+            }
+            else{
+                System.out.println("Bravo.");
+            }
+
+            System.out.println(drink);
+        }
+}
diff --git a/serie4/ex1.4/src/test/java/ch/hepia/exercice_4_4/AppTest.java b/serie4/ex1.4/src/test/java/ch/hepia/exercice_4_4/AppTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..ab593e6cd0be66e7fe61c15e4d3cd5fbe0848951
--- /dev/null
+++ b/serie4/ex1.4/src/test/java/ch/hepia/exercice_4_4/AppTest.java
@@ -0,0 +1,18 @@
+package ch.hepia.exercice_4_4;
+
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+
+
+/**
+ * Unit test for simple App.
+ */
+class AppTest {
+
+    @Test
+    void dummyTest() {
+        assertTrue(true);
+    }
+}
diff --git a/serie4/ex1.6/answers.md b/serie4/ex1.6/answers.md
new file mode 100644
index 0000000000000000000000000000000000000000..74932805d0371c0ff8ee3ab542f1e948dfcc5c72
--- /dev/null
+++ b/serie4/ex1.6/answers.md
@@ -0,0 +1,36 @@
+# 4.6 Exercice
+
+Soient les déclarations suivantes: 
+
+```java
+class A {
+	public void f(int i) { ... }
+	public void f(short s) { ... }
+	public Serializable g(Integer i) { ... }
+}
+
+/*
+Précisez pour chaque méthode ci-dessous s’il s’agit d’une surcharge ou d’une redéfinition.
+*/
+
+class B extends A {
+	public void f(short s) { ... } // redefinition
+	public void f(byte b) { ... }  // surcharge
+	public void f(int i) { ... }   // redefinition
+}
+
+/*
+Précisez également pour chaque méthode ci-dessous si elle est valide et s’il s’agit
+d’une surcharge ou d’une redéfinition.
+*/
+
+class C extends A {
+    // [valide] surcharge
+	public String g(Integer i) { ... }
+    // [invalide] redefinition
+	public Serializable g(Integer i) { ... }
+    // [valide] surcharge
+	public Serializable g(Object o) { ... }
+}
+
+```
\ No newline at end of file
diff --git a/serie4/ex1.8/answers.md b/serie4/ex1.8/answers.md
new file mode 100644
index 0000000000000000000000000000000000000000..aef292f3f2a6eaa0c11ca77db1cb81e5e6c012aa
--- /dev/null
+++ b/serie4/ex1.8/answers.md
@@ -0,0 +1,82 @@
+# 4.8 Exercice
+
+Soient les déclarations suivantes: 
+
+```java
+/* A
+* / \
+* B C
+*/
+
+class A {
+	void test(double d) { System.out.println("A: double"); }
+	void test(short s) { System.out.println("A: short"); }
+}
+
+class B extends A {
+    // Surcharge
+	void test(int i) { System.out.println("B: int"); }
+    // Redefinition
+	void test(short s) { System.out.println("B: short"); }
+}
+
+class C extends A {
+    // Surcharge
+	void test(float f) { System.out.println("C: float"); 
+	void test(byte b) { System.out.println("C: byte"); }
+}
+```
+
+Et soient les opérations suivantes:
+
+```java
+double d = 0.0;
+float f = 0.0f;
+int i = 0;
+byte b = 0;
+A ab = new B();
+A ac = new C();
+ab.test(b);
+ac.test(b);
+System.out.println("***");
+ab.test(d);
+ac.test(d);
+System.out.println("***");
+ab.test(f);
+ac.test(f);
+System.out.println("***");
+ab.test(i);
+ac.test(i);
+```
+
+1. Ecrivez le résultat qui serait affiché dans un terminal:
+
+   ```java
+   ab.test(b); // affiche "B : short"
+   ac.test(b); // affiche "A : short"
+   System.out.println("***");
+   ab.test(d); // affiche "A : double"
+   ac.test(d); // affiche "A : double"
+   System.out.println("***");
+   ab.test(f); // affiche "A: double"
+   ac.test(f); // affiche "C: double"
+   System.out.println("***");
+   ab.test(i); // affiche "A: double"
+   ac.test(i); // affiche "A: double"
+   
+   
+   /* Comportement étrange...
+   
+   Quand on OVERRIDE, le code de A est literallement remplacé par celui de la sous classe. Dans le reste des cas, on utilise des fonctions de A car nos objets sont de type A.
+   
+   Sinon, il faudrait cast nos objets.
+   
+   */
+   ```
+
+   
+
+2. Indiquez pourquoi l’instruction `B bc = new C();` pose problème en indiquant s’il s’agit d’une erreur de compilation ou d’exécution ?
+
+   1. Parce que C n'es pas une sous classe de B
+
diff --git a/serie4/ex1.9/answers.md b/serie4/ex1.9/answers.md
new file mode 100644
index 0000000000000000000000000000000000000000..5ef33a1e5551e916f9fe2b066596e6aefb464963
--- /dev/null
+++ b/serie4/ex1.9/answers.md
@@ -0,0 +1,31 @@
+# 4.9 Exercice
+
+## Soient le code ci-dessous:
+
+```java
+Person p1 = new Person(1, "Joel");
+Person p2 = new Person(1, "Joel");
+
+// Un ensemble ne peut contenir qu'un élément unique
+// il ne peut pas y avoir d'éléments dupliqués
+Set persons = new HashSet();
+persons.add(p1);
+persons.add(p2);
+System.out.println("Size = " + persons.size());
+```
+
+Si l’affichage est “Size = 2” au lieu de “Size = 1”, quel est le symptôme 
+**(répondez par vrai ou faux):** 
+
+- La classe Person ne surcharge pas la méthode equals(Object o) ?
+  **FAUX**
+- La classe Person ne redéfinit pas la méthode equals(Object o) ?
+  **FAUX**
+- La classe Person ne surcharge pas la méthode hashCode() ?
+  **FAUX**
+- La classe Person ne redéfinit pas la méthode hashCode() ?
+  **VRAI**
+- La classe Person ne surcharge pas la méthode toString() ?
+  **FAUX**
+- La classe Person ne redéfinit pas la méthode toString() ?
+  **FAUX**
\ No newline at end of file