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