diff --git a/sandbox/.classpath b/sandbox/.classpath
new file mode 100644
index 0000000000..0720e4851b
--- /dev/null
+++ b/sandbox/.classpath
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sandbox/.externalToolBuilders/org.eclipse.wst.jsdt.core.javascriptValidator.launch b/sandbox/.externalToolBuilders/org.eclipse.wst.jsdt.core.javascriptValidator.launch
new file mode 100644
index 0000000000..627021fb96
--- /dev/null
+++ b/sandbox/.externalToolBuilders/org.eclipse.wst.jsdt.core.javascriptValidator.launch
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/sandbox/.gitignore b/sandbox/.gitignore
new file mode 100644
index 0000000000..83c05e60c8
--- /dev/null
+++ b/sandbox/.gitignore
@@ -0,0 +1,13 @@
+*.class
+
+#folders#
+/target
+/neoDb*
+/data
+/src/main/webapp/WEB-INF/classes
+*/META-INF/*
+
+# Packaged files #
+*.jar
+*.war
+*.ear
\ No newline at end of file
diff --git a/sandbox/.project b/sandbox/.project
new file mode 100644
index 0000000000..f039cd270e
--- /dev/null
+++ b/sandbox/.project
@@ -0,0 +1,36 @@
+
+
+ sandbox
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.wst.common.project.facet.core.builder
+
+
+
+
+ org.eclipse.wst.validation.validationbuilder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.jem.workbench.JavaEMFNature
+ org.eclipse.wst.common.modulecore.ModuleCoreNature
+ org.eclipse.jdt.core.javanature
+ org.eclipse.m2e.core.maven2Nature
+ org.eclipse.wst.common.project.facet.core.nature
+
+
diff --git a/sandbox/.settings/.jsdtscope b/sandbox/.settings/.jsdtscope
new file mode 100644
index 0000000000..7b3f0c8b9f
--- /dev/null
+++ b/sandbox/.settings/.jsdtscope
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/sandbox/.settings/org.eclipse.jdt.core.prefs b/sandbox/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000..723e5b1245
--- /dev/null
+++ b/sandbox/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,95 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=error
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=error
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=error
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/sandbox/.settings/org.eclipse.jdt.ui.prefs b/sandbox/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000000..471e9b0d81
--- /dev/null
+++ b/sandbox/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,55 @@
+#Sat Jan 21 23:04:06 EET 2012
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=true
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=true
+sp_cleanup.correct_indentation=true
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=true
+sp_cleanup.make_local_variable_final=true
+sp_cleanup.make_parameters_final=true
+sp_cleanup.make_private_fields_final=false
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=true
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=false
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=true
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=false
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/sandbox/.settings/org.eclipse.m2e.core.prefs b/sandbox/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000000..f897a7f1cb
--- /dev/null
+++ b/sandbox/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/sandbox/.settings/org.eclipse.m2e.wtp.prefs b/sandbox/.settings/org.eclipse.m2e.wtp.prefs
new file mode 100644
index 0000000000..ef86089622
--- /dev/null
+++ b/sandbox/.settings/org.eclipse.m2e.wtp.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.m2e.wtp.enabledProjectSpecificPrefs=false
diff --git a/sandbox/.settings/org.eclipse.wst.common.component b/sandbox/.settings/org.eclipse.wst.common.component
new file mode 100644
index 0000000000..e98377cb0f
--- /dev/null
+++ b/sandbox/.settings/org.eclipse.wst.common.component
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/sandbox/.settings/org.eclipse.wst.common.project.facet.core.xml b/sandbox/.settings/org.eclipse.wst.common.project.facet.core.xml
new file mode 100644
index 0000000000..bc0009a455
--- /dev/null
+++ b/sandbox/.settings/org.eclipse.wst.common.project.facet.core.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/sandbox/.settings/org.eclipse.wst.jsdt.ui.superType.container b/sandbox/.settings/org.eclipse.wst.jsdt.ui.superType.container
new file mode 100644
index 0000000000..3bd5d0a480
--- /dev/null
+++ b/sandbox/.settings/org.eclipse.wst.jsdt.ui.superType.container
@@ -0,0 +1 @@
+org.eclipse.wst.jsdt.launching.baseBrowserLibrary
\ No newline at end of file
diff --git a/sandbox/.settings/org.eclipse.wst.jsdt.ui.superType.name b/sandbox/.settings/org.eclipse.wst.jsdt.ui.superType.name
new file mode 100644
index 0000000000..05bd71b6ec
--- /dev/null
+++ b/sandbox/.settings/org.eclipse.wst.jsdt.ui.superType.name
@@ -0,0 +1 @@
+Window
\ No newline at end of file
diff --git a/sandbox/.settings/org.eclipse.wst.validation.prefs b/sandbox/.settings/org.eclipse.wst.validation.prefs
new file mode 100644
index 0000000000..cacf5451ae
--- /dev/null
+++ b/sandbox/.settings/org.eclipse.wst.validation.prefs
@@ -0,0 +1,14 @@
+DELEGATES_PREFERENCE=delegateValidatorList
+USER_BUILD_PREFERENCE=enabledBuildValidatorListorg.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyValidator;
+USER_MANUAL_PREFERENCE=enabledManualValidatorListorg.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyValidator;
+USER_PREFERENCE=overrideGlobalPreferencestruedisableAllValidationfalseversion1.2.303.v201202090300
+eclipse.preferences.version=1
+override=true
+suspend=false
+vals/org.eclipse.jst.jsf.ui.JSFAppConfigValidator/global=FF01
+vals/org.eclipse.jst.jsp.core.JSPBatchValidator/global=FF01
+vals/org.eclipse.jst.jsp.core.JSPContentValidator/global=FF01
+vals/org.eclipse.jst.jsp.core.TLDValidator/global=FF01
+vals/org.eclipse.wst.dtd.core.dtdDTDValidator/global=FF01
+vals/org.eclipse.wst.jsdt.web.core.JsBatchValidator/global=TF02
+vf.version=3
diff --git a/sandbox/.settings/org.eclipse.wst.ws.service.policy.prefs b/sandbox/.settings/org.eclipse.wst.ws.service.policy.prefs
new file mode 100644
index 0000000000..9cfcabe16f
--- /dev/null
+++ b/sandbox/.settings/org.eclipse.wst.ws.service.policy.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.wst.ws.service.policy.projectEnabled=false
diff --git a/sandbox/.springBeans b/sandbox/.springBeans
new file mode 100644
index 0000000000..a79097f40d
--- /dev/null
+++ b/sandbox/.springBeans
@@ -0,0 +1,14 @@
+
+
+ 1
+
+
+
+
+
+
+ src/main/webapp/WEB-INF/api-servlet.xml
+
+
+
+
diff --git a/sandbox/README.md b/sandbox/README.md
new file mode 100644
index 0000000000..772681ad57
--- /dev/null
+++ b/sandbox/README.md
@@ -0,0 +1,9 @@
+=========
+
+## Core Java Cookbooks and Examples
+
+### Relevant Articles:
+- [Immutable ArrayList in Java](http://www.baeldung.com/java-immutable-list)
+- [Java - Reading a Large File Efficiently](http://www.baeldung.com/java-read-lines-large-file)
+- [Java InputStream to String](http://www.baeldung.com/convert-input-stream-to-string)
+
diff --git a/sandbox/pom.xml b/sandbox/pom.xml
new file mode 100644
index 0000000000..7c1f413aef
--- /dev/null
+++ b/sandbox/pom.xml
@@ -0,0 +1,176 @@
+
+ 4.0.0
+ org.baeldung
+ spring-rest
+ 0.1-SNAPSHOT
+
+ spring-rest
+
+
+
+
+
+
+ com.google.guava
+ guava
+ ${guava.version}
+
+
+
+ org.apache.commons
+ commons-collections4
+ 4.0
+
+
+
+ commons-io
+ commons-io
+ 2.4
+
+
+
+ org.apache.commons
+ commons-lang3
+ ${commons-lang3.version}
+
+
+
+
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson.version}
+
+
+
+
+
+ org.slf4j
+ slf4j-api
+ ${org.slf4j.version}
+
+
+ ch.qos.logback
+ logback-classic
+ ${logback.version}
+
+
+
+ org.slf4j
+ jcl-over-slf4j
+ ${org.slf4j.version}
+
+
+
+ org.slf4j
+ log4j-over-slf4j
+ ${org.slf4j.version}
+
+
+
+
+
+ junit
+ junit-dep
+ ${junit.version}
+ test
+
+
+
+ org.hamcrest
+ hamcrest-core
+ ${org.hamcrest.version}
+ test
+
+
+ org.hamcrest
+ hamcrest-library
+ ${org.hamcrest.version}
+ test
+
+
+
+ org.mockito
+ mockito-core
+ ${mockito.version}
+ test
+
+
+
+
+
+ core-java
+
+
+ src/main/resources
+ true
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+ 1.7
+ 1.7
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ ${maven-surefire-plugin.version}
+
+
+
+
+
+
+
+
+ 4.0.2.RELEASE
+ 3.2.3.RELEASE
+
+
+ 4.3.4.Final
+ 5.1.29
+
+
+ 2.3.0
+
+
+ 1.7.5
+ 1.0.11
+
+
+ 5.0.3.Final
+
+
+ 16.0.1
+ 3.3.1
+
+
+ 1.3
+ 4.11
+ 1.9.5
+
+ 4.3.2
+ 4.3.3
+
+ 2.3.0
+
+
+ 3.1
+ 2.4
+ 2.17
+ 2.6
+ 1.4.7
+
+
+
+
\ No newline at end of file
diff --git a/sandbox/src/main/resources/logback.xml b/sandbox/src/main/resources/logback.xml
new file mode 100644
index 0000000000..62d0ea5037
--- /dev/null
+++ b/sandbox/src/main/resources/logback.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ web - %date [%thread] %-5level %logger{36} - %message%n
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sandbox/src/main/webapp/WEB-INF/api-servlet.xml b/sandbox/src/main/webapp/WEB-INF/api-servlet.xml
new file mode 100644
index 0000000000..a675fc6d95
--- /dev/null
+++ b/sandbox/src/main/webapp/WEB-INF/api-servlet.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/sandbox/src/main/webapp/WEB-INF/web.xml b/sandbox/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000000..48d4b8fe61
--- /dev/null
+++ b/sandbox/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,42 @@
+
+
+
+ Spring MVC Application
+
+
+
+ contextClass
+
+ org.springframework.web.context.support.AnnotationConfigWebApplicationContext
+
+
+
+ contextConfigLocation
+ org.baeldung.config
+
+
+
+ org.springframework.web.context.ContextLoaderListener
+
+
+
+
+ api
+ org.springframework.web.servlet.DispatcherServlet
+ 1
+
+
+ api
+ /
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sandbox/src/test/java/org/baeldung/codility/CodilityTest1.java b/sandbox/src/test/java/org/baeldung/codility/CodilityTest1.java
new file mode 100644
index 0000000000..8bd957c51a
--- /dev/null
+++ b/sandbox/src/test/java/org/baeldung/codility/CodilityTest1.java
@@ -0,0 +1,72 @@
+package org.baeldung.codility;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Random;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+public class CodilityTest1 {
+
+ @Before
+ public final void before() {
+ //
+ }
+
+ // tests
+
+ @Test
+ public final void whenSolutionIsCalculated1_thenCorrect() {
+ final int[] A = new int[] { 1, 4, 3, 3, 1, 2 };
+ final int solution = solution(A);
+ Assert.assertEquals(4, solution);
+ }
+
+ @Test
+ public final void whenSolutionIsCalculated2_thenCorrect() {
+ final int[] A = new int[] { 6, 4, 4, 6 };
+ final int solution = solution(A);
+ Assert.assertEquals(-1, solution);
+ }
+
+ @Test
+ public final void whenSolutionIsCalculated3_thenCorrect() {
+ final int[] A = new int[100000];
+ final Random random = new Random();
+ for (final int index : A) {
+ A[index] = random.nextInt();
+ }
+
+ final long start = System.currentTimeMillis();
+ final int solution = solution(A);
+ final long end = System.currentTimeMillis();
+ System.out.println("Time: " + (end - start));
+ System.out.println(solution);
+ }
+
+ //
+
+ final int solution(final int elements[]) {
+ final Map collector = new LinkedHashMap();
+ Integer currentValue = null;
+ for (final int element : elements) {
+ currentValue = collector.get(element);
+ if (currentValue == null) {
+ collector.put(element, 1);
+ } else if (currentValue >= 1) {
+ collector.put(element, ++currentValue);
+ }
+ }
+
+ for (final Map.Entry entry : collector.entrySet()) {
+ if (entry.getValue() == 1) {
+ return entry.getKey();
+ }
+ }
+
+ return -1;
+ }
+
+}
diff --git a/sandbox/src/test/java/org/baeldung/codility/CodilityTest2.java b/sandbox/src/test/java/org/baeldung/codility/CodilityTest2.java
new file mode 100644
index 0000000000..d92e9001f9
--- /dev/null
+++ b/sandbox/src/test/java/org/baeldung/codility/CodilityTest2.java
@@ -0,0 +1,72 @@
+package org.baeldung.codility;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class CodilityTest2 {
+
+ // tests
+
+ @Test
+ public final void whenSolutionIsCalculated1_thenCorrect() {
+ final int solution = solution(955);
+ Assert.assertEquals(4, solution);
+ }
+
+ @Test
+ public final void whenSolutionIsCalculated2_thenCorrect() {
+ final int solution = solution(102);
+ Assert.assertEquals(-1, solution);
+ }
+
+ @Test
+ public final void whenSolutionIsCalculated3_thenCorrect() {
+ final int solution = solution(2);
+ Assert.assertEquals(-1, solution);
+ }
+
+ @Test
+ public final void whenSolutionIsCalculated4_thenCorrect() {
+ final int solution = solution2("codilitycodilityco");
+ Assert.assertEquals(8, solution);
+ }
+
+ //
+
+ public final int solution(final int decimal) {
+ final String binaryString = Integer.toBinaryString(decimal);
+ int lastPeriod = -1;
+ for (int period = 1; period < (binaryString.length() / 2 + 1); period++) {
+ final Matcher m = Pattern.compile("(\\S{" + period + ",})(?=.*?\\1)").matcher(binaryString);
+ final boolean found = m.find();
+ if (found && m.groupCount() > 0) {
+ lastPeriod = period;
+ }
+ if (!found) {
+ break;
+ }
+ }
+
+ return lastPeriod;
+ }
+
+ public final int solution2(final String binaryString) {
+ int lastPeriod = -1;
+ for (int period = 1; period < (binaryString.length() / 2 + 1); period++) {
+ final Matcher m = Pattern.compile("(\\S{" + period + ",})(?=.*?\\1)").matcher(binaryString);
+ final boolean found = m.find();
+ if (found && m.groupCount() > 0) {
+ lastPeriod = period;
+ }
+ if (!found) {
+ break;
+ }
+ }
+
+ return lastPeriod;
+ }
+
+}
diff --git a/sandbox/src/test/java/org/baeldung/codility/CodilityTest3.java b/sandbox/src/test/java/org/baeldung/codility/CodilityTest3.java
new file mode 100644
index 0000000000..a7067be7b0
--- /dev/null
+++ b/sandbox/src/test/java/org/baeldung/codility/CodilityTest3.java
@@ -0,0 +1,207 @@
+package org.baeldung.codility;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class CodilityTest3 {
+
+ // tests
+
+ @Test
+ public final void whenSolutionIsCalculated1_thenCorrect() {
+ final int[] moves = new int[] { 1, 3, 2, 5, 4, 4, 6, 3, 2 };
+ final int solution = solution(moves);
+ Assert.assertEquals(7, solution);
+ }
+
+ //
+
+ public int solution(final int[] moves) {
+ final World world = new World();
+ int nextMove = 0;
+ for (final int move : moves) {
+ switch (nextMove) {
+ case 0:
+ if (world.moveNorth(move)) {
+ nextMove = 1;
+ break;
+ } else {
+ return world.movesCount;
+ }
+ case 1:
+ if (world.moveEast(move)) {
+ nextMove = 2;
+ break;
+ } else {
+ return world.movesCount;
+ }
+ case 2:
+ if (world.moveSouth(move)) {
+ nextMove = 3;
+ break;
+ } else {
+ return world.movesCount;
+ }
+ case 3:
+ if (world.moveWest(move)) {
+ nextMove = 0;
+ break;
+ } else {
+ return world.movesCount;
+ }
+ default:
+ throw new IllegalStateException();
+ }
+ }
+
+ return world.movesCount;
+ }
+
+}
+
+class World {
+ int movesCount = 1;
+ int currentX = 0;
+ int currentY = 0;
+ Map minXAtY;
+ Map maxXAtY;
+ Map minYAtX;
+ Map maxYAtX;
+
+ public World() {
+ minXAtY = new HashMap<>();
+ maxXAtY = new HashMap<>();
+ minYAtX = new HashMap<>();
+ maxYAtX = new HashMap<>();
+ }
+
+ final boolean moveNorth(final int steps) {
+ if (isMoveNorthValid(steps)) {
+ storeMoveNorth(steps);
+ movesCount++;
+ return true;
+ }
+ return false;
+ }
+
+ final boolean moveEast(final int steps) {
+ if (isMoveEastValid(steps)) {
+ storeMoveEast(steps);
+ movesCount++;
+ return true;
+ }
+ return false;
+ }
+
+ final boolean moveSouth(final int steps) {
+ if (isMoveSouthValid(steps)) {
+ storeMoveSouth(steps);
+ movesCount++;
+ return true;
+ }
+ return false;
+ }
+
+ final boolean moveWest(final int steps) {
+ if (isMoveWestValid(steps)) {
+ storeMoveWest(steps);
+ movesCount++;
+ return true;
+ }
+ return false;
+ }
+
+ //
+
+ private boolean isMoveNorthValid(final int steps) {
+ int currentPosition = currentY;
+ for (int i = 1; i <= steps; i++) {
+ currentPosition += 1;
+ if (minXAtY.get(currentPosition) != null && minXAtY.get(currentPosition) > currentX) {
+ return false;
+ }
+ if (maxXAtY.get(currentPosition) != null && maxXAtY.get(currentPosition) < currentX) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private boolean isMoveEastValid(final int steps) { //
+ int currentPosition = currentX;
+ for (int i = 1; i <= steps; i++) {
+ currentPosition += 1;
+ if (minYAtX.get(currentPosition) != null && minYAtX.get(currentPosition) < currentY) {
+ return false;
+ }
+ if (maxYAtX.get(currentPosition) != null && maxYAtX.get(currentPosition) > currentY) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private boolean isMoveSouthValid(final int steps) {
+ int currentPosition = currentY;
+ for (int i = 1; i <= steps; i++) {
+ currentPosition -= 1;
+ if (minXAtY.get(currentPosition) != null && minXAtY.get(currentPosition) < currentX) {
+ return false;
+ }
+ if (maxXAtY.get(currentPosition) != null && maxXAtY.get(currentPosition) > currentX) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private boolean isMoveWestValid(final int steps) {
+ int currentPosition = currentX;
+ for (int i = 1; i <= steps; i++) {
+ currentPosition -= 1;
+ if (minYAtX.get(currentPosition) != null && minYAtX.get(currentPosition) > currentY) {
+ return false;
+ }
+ if (maxYAtX.get(currentPosition) != null && maxYAtX.get(currentPosition) < currentY) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private void storeMoveNorth(final int steps) {
+ currentY = currentY + steps;
+ final Integer currentMaxYAtThisLevel = maxYAtX.get(currentX);
+ if (currentMaxYAtThisLevel == null || currentMaxYAtThisLevel == null && currentMaxYAtThisLevel < currentY) {
+ maxYAtX.put(currentX, currentY);
+ }
+ }
+
+ private void storeMoveEast(final int steps) {
+ currentX = currentX + steps;
+ final Integer currentMaxXAtThisLevel = maxXAtY.get(currentY);
+ if (currentMaxXAtThisLevel == null || currentMaxXAtThisLevel == null && currentMaxXAtThisLevel < currentX) {
+ maxXAtY.put(currentY, currentX);
+ }
+ }
+
+ private void storeMoveSouth(final int steps) {
+ currentY = currentY - steps;
+ final Integer currentMinYAtThisLevel = minYAtX.get(currentX);
+ if (currentMinYAtThisLevel == null || currentMinYAtThisLevel == null && currentMinYAtThisLevel > currentY) {
+ minYAtX.put(currentX, currentY);
+ }
+ }
+
+ private void storeMoveWest(final int steps) {
+ currentX = currentX - steps;
+ final Integer currentMinXAtThisLevel = minXAtY.get(currentY);
+ if (currentMinXAtThisLevel == null || currentMinXAtThisLevel == null && currentMinXAtThisLevel > currentX) {
+ minXAtY.put(currentY, currentX);
+ }
+ }
+
+}
diff --git a/sandbox/src/test/resources/.gitignore b/sandbox/src/test/resources/.gitignore
new file mode 100644
index 0000000000..83c05e60c8
--- /dev/null
+++ b/sandbox/src/test/resources/.gitignore
@@ -0,0 +1,13 @@
+*.class
+
+#folders#
+/target
+/neoDb*
+/data
+/src/main/webapp/WEB-INF/classes
+*/META-INF/*
+
+# Packaged files #
+*.jar
+*.war
+*.ear
\ No newline at end of file