diff --git a/build.gradle b/build.gradle index 8c58790..378b9d0 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,7 @@ plugins { id 'groovy' id 'java' + id 'org.jetbrains.kotlin.jvm' version '1.6.10' } group 'lv.id.jc' @@ -12,11 +13,22 @@ repositories { dependencies { implementation 'org.codehaus.groovy:groovy-all:3.0.9' + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" testImplementation 'org.spockframework:spock-core:2.0-groovy-3.0' - testImplementation 'org.codehaus.groovy:groovy-all:3.0.8' + testImplementation 'org.codehaus.groovy:groovy-all:3.0.9' } test { useJUnitPlatform() +} +compileKotlin { + kotlinOptions { + jvmTarget = "1.8" + } +} +compileTestKotlin { + kotlinOptions { + jvmTarget = "1.8" + } } \ No newline at end of file diff --git a/src/main/groovy/lv/id/jc/App.groovy b/src/main/groovy/lv/id/jc/AppGroovy.groovy similarity index 83% rename from src/main/groovy/lv/id/jc/App.groovy rename to src/main/groovy/lv/id/jc/AppGroovy.groovy index e11fe55..caea451 100644 --- a/src/main/groovy/lv/id/jc/App.groovy +++ b/src/main/groovy/lv/id/jc/AppGroovy.groovy @@ -5,8 +5,8 @@ import algorithm.DijkstrasAlgorithm import algorithm.Graph import algorithm.SearchAlgorithm -class App { - private static final Graph complex = new Graph<>(Map.of( +class AppGroovy { + private static final Graph COMPLEX_GRAPH = new Graph<>(Map.of( "A", Map.of("B", 5, "H", 2), "B", Map.of("A", 5, "C", 7), "C", Map.of("B", 7, "D", 3, "G", 4), @@ -20,11 +20,11 @@ class App { private static final SearchAlgorithm shortest = new BreadthFirstSearch<>() static void main(String[] args) { - System.out.println(complex) + System.out.println(COMPLEX_GRAPH) - printRoute(complex, "D", "C") - printRoute(complex, "A", "G") - printRoute(complex, "D", "H") + printRoute(COMPLEX_GRAPH, "D", "C") + printRoute(COMPLEX_GRAPH, "A", "G") + printRoute(COMPLEX_GRAPH, "D", "H") } private static void printRoute(final Graph graph, final String source, final String target) { diff --git a/src/main/java/Main.java b/src/main/java/lv/id/jc/AppJava.java similarity index 82% rename from src/main/java/Main.java rename to src/main/java/lv/id/jc/AppJava.java index 140eca1..8b87e71 100644 --- a/src/main/java/Main.java +++ b/src/main/java/lv/id/jc/AppJava.java @@ -1,3 +1,5 @@ +package lv.id.jc; + import algorithm.BreadthFirstSearch; import algorithm.DijkstrasAlgorithm; import algorithm.Graph; @@ -5,8 +7,8 @@ import java.util.Map; -public class Main { - private static final Graph complex = new Graph<>(Map.of( +public class AppJava { + private static final Graph COMPLEX_GRAPH = new Graph<>(Map.of( "A", Map.of("B", 5, "H", 2), "B", Map.of("A", 5, "C", 7), "C", Map.of("B", 7, "D", 3, "G", 4), @@ -20,13 +22,11 @@ public class Main { private static final SearchAlgorithm shortest = new BreadthFirstSearch<>(); public static void main(String[] args) { - System.out.println(complex); - - printRoute(complex, "D", "C"); - - printRoute(complex, "A", "G"); + System.out.println(COMPLEX_GRAPH); - printRoute(complex, "D", "H"); + printRoute(COMPLEX_GRAPH, "D", "C"); + printRoute(COMPLEX_GRAPH, "A", "G"); + printRoute(COMPLEX_GRAPH, "D", "H"); } private static void printRoute(final Graph graph, final String source, final String target) { diff --git a/src/main/java/lv/id/jc/AppKotlin.kt b/src/main/java/lv/id/jc/AppKotlin.kt new file mode 100644 index 0000000..7848b0c --- /dev/null +++ b/src/main/java/lv/id/jc/AppKotlin.kt @@ -0,0 +1,57 @@ +package lv.id.jc + +import algorithm.BreadthFirstSearch +import algorithm.DijkstrasAlgorithm +import algorithm.Graph +import algorithm.SearchAlgorithm + +class AppKotlin { + + companion object { + @JvmStatic + private val complexGraph = Graph( + mapOf( + "A" to mapOf("B" to 5, "H" to 2), + "B" to mapOf("A" to 5, "C" to 7), + "C" to mapOf("B" to 7, "D" to 3, "G" to 4), + "D" to mapOf("C" to 20, "E" to 4), + "E" to mapOf("F" to 5), + "F" to mapOf("G" to 6), + "G" to mapOf("C" to 4), + "H" to mapOf("G" to 3) + ) + ) + + @JvmStatic + private val fastest: SearchAlgorithm = DijkstrasAlgorithm() + + @JvmStatic + private val shortest: SearchAlgorithm = BreadthFirstSearch() + + @JvmStatic + fun main(args: Array) { + println(complexGraph) + printRoute(complexGraph, "D", "C") + printRoute(complexGraph, "A", "G") + printRoute(complexGraph, "D", "H") + } + + @JvmStatic + private fun printRoute(graph: Graph, source: String, target: String) { + val routeOne = shortest.findPath(graph, source, target) + val routeTwo = fastest.findPath(graph, source, target) + + val message: String = String.format( + "%nFind the path from %s to %s%n" + + " - the shortest take %.0f min and the path is %s%n" + + " - the fastest take %.0f min and the path is %s", + source, target, + graph.getDistance(routeOne), routeOne, + graph.getDistance(routeTwo), routeTwo + ) + println(message) + } + } + + +} \ No newline at end of file