From c9752c050440a3a5c9b55520f99fa4bee69b21e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jegors=20=C4=8Cemisovs?= Date: Sat, 25 Mar 2023 12:17:14 +0200 Subject: [PATCH 1/2] update dependencies for 'Algorithm' module MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jegors Čemisovs --- algorithm/build.gradle | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/algorithm/build.gradle b/algorithm/build.gradle index 655e701..fd0b0f5 100644 --- a/algorithm/build.gradle +++ b/algorithm/build.gradle @@ -55,19 +55,19 @@ publishing { dependencies { // Spock Framework - testImplementation 'org.spockframework:spock-core:2.2-groovy-3.0' - testImplementation 'org.codehaus.groovy:groovy-all:3.0.12' + testImplementation 'org.spockframework:spock-core:2.3-groovy-3.0' + testImplementation 'org.codehaus.groovy:groovy-all:3.0.16' // Spock Reports - testRuntimeClasspath('com.athaydes:spock-reports:2.3.1-groovy-3.0') { + testCompileOnly('com.athaydes:spock-reports:2.4.0-groovy-4.0') { transitive = false // this avoids affecting your version of Groovy/Spock } // Required for spock-reports - testImplementation 'org.slf4j:slf4j-api:2.0.1' - testRuntimeClasspath 'org.slf4j:slf4j-simple:2.0.1' + testImplementation 'org.slf4j:slf4j-api:2.0.5' + testCompileOnly 'org.slf4j:slf4j-simple:2.0.5' // JUnit 5 Parameterized Tests - testImplementation 'org.junit.jupiter:junit-jupiter-params:5.8.1' + testImplementation 'org.junit.jupiter:junit-jupiter-params:5.9.2' } test { From bc5e8ddeaec1d3d20f52d1da6f826a9681638f6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jegors=20=C4=8Cemisovs?= Date: Sun, 4 Jun 2023 23:36:52 +0300 Subject: [PATCH 2/2] add graph2puml.awk MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jegors Čemisovs --- README.md | 4 ++-- docs/simple.puml | 15 +++++++++++++ graph-shell/docs/complex.png | Bin 0 -> 36283 bytes graph-shell/docs/complex.puml | 29 ++++++++++++++++++++++++++ graph-shell/docs/medium.puml | 20 ++++++++++++++++++ graph-shell/docs/simple.puml | 17 +++++++++++++++ graph-shell/src/script/graph2puml.awk | 24 +++++++++++++++++++++ 7 files changed, 107 insertions(+), 2 deletions(-) create mode 100644 docs/simple.puml create mode 100644 graph-shell/docs/complex.png create mode 100644 graph-shell/docs/complex.puml create mode 100644 graph-shell/docs/medium.puml create mode 100644 graph-shell/docs/simple.puml create mode 100644 graph-shell/src/script/graph2puml.awk diff --git a/README.md b/README.md index 3172ede..b1ba420 100644 --- a/README.md +++ b/README.md @@ -90,8 +90,7 @@ flowchart LR C --> |1| A C --> |3| B ``` - -![Small Graph](docs/assets/small.gif) +![Small Graph PlantUML](http://www.plantuml.com/plantuml/svg/bT2n3e8m483XcJv5mmo36EDWQWGMTqV2SD03cXmjQQk9CRwx4CN0fhVTbpyttCbvi5uQpwHgBGmTl_H0n1yiQ8ps6deKuHdfXbxL4ALM0KKEj8iTMjM4BD168Yz-YaiMe6p_gD-tQqF62b9jvokwOX9nv--4eb54ACUjWm55hMnDM1vOaFBuo3DU45H8Ol-bVAPaecoYTARjI7oSR1NkFfglsirIi-M59pkXbkCtNm00) ### Medium Graph Sample @@ -129,3 +128,4 @@ flowchart LR ![Complex Graph](docs/assets/complex.gif) +![Complex Graph PlantUML](http://www.plantuml.com/plantuml/proxy?cache=no&src=https://raw.githubusercontent.com/rabestro/graph-pathfinding-algorithms/master/graph-shell/docs/complex.puml) diff --git a/docs/simple.puml b/docs/simple.puml new file mode 100644 index 0000000..b64db05 --- /dev/null +++ b/docs/simple.puml @@ -0,0 +1,15 @@ +@startdot +digraph Small { + fontname="Helvetica,Arial,sans-serif" + node [fontname="Helvetica,Arial,sans-serif"] + edge [fontname="Helvetica,Arial,sans-serif"] + node [color=lightblue2, style=filled, shape=circle]; + A + A -> B [label=7]; + A -> C [label=2]; + B -> A [label=3]; + B -> C [label=5]; + C -> A [label=1]; + C -> B [label=3]; +} +@enddot diff --git a/graph-shell/docs/complex.png b/graph-shell/docs/complex.png new file mode 100644 index 0000000000000000000000000000000000000000..ba793ebbb02877c198756369c7a2618f209d3757 GIT binary patch literal 36283 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 literal 0 HcmV?d00001 diff --git a/graph-shell/docs/complex.puml b/graph-shell/docs/complex.puml new file mode 100644 index 0000000..759f9ce --- /dev/null +++ b/graph-shell/docs/complex.puml @@ -0,0 +1,29 @@ +@startdot +digraph complex { +fontname="Helvetica,Arial,sans-serif" +node [fontname="Helvetica,Arial,sans-serif"] +edge [fontname="Helvetica,Arial,sans-serif"] +node [color=lightblue2, style=filled, shape=circle]; +A +A -> B [label=5]; +A -> H [label=2]; +B +B -> A [label=5]; +B -> C [label=7]; +C +C -> B [label=7]; +C -> D [label=3]; +C -> G [label=4]; +D +D -> C [label=20]; +D -> E [label=4]; +E +E -> F [label=5]; +F +F -> G [label=6]; +G +G -> C [label=4]; +H +H -> G [label=3]; +} +@enddot diff --git a/graph-shell/docs/medium.puml b/graph-shell/docs/medium.puml new file mode 100644 index 0000000..4e53de8 --- /dev/null +++ b/graph-shell/docs/medium.puml @@ -0,0 +1,20 @@ +@startdot +digraph medium { +fontname="Helvetica,Arial,sans-serif" +node [fontname="Helvetica,Arial,sans-serif"] +edge [fontname="Helvetica,Arial,sans-serif"] +node [color=lightblue2, style=filled, shape=circle]; +A +A -> B [label=5]; +B +B -> A [label=5]; +B -> C [label=10]; +C +C -> B [label=20]; +C -> D [label=5]; +D +D -> E [label=5]; +E +E -> B [label=5]; +} +@enddot diff --git a/graph-shell/docs/simple.puml b/graph-shell/docs/simple.puml new file mode 100644 index 0000000..5205658 --- /dev/null +++ b/graph-shell/docs/simple.puml @@ -0,0 +1,17 @@ +@startdot +digraph simple { +fontname="Helvetica,Arial,sans-serif" +node [fontname="Helvetica,Arial,sans-serif"] +edge [fontname="Helvetica,Arial,sans-serif"] +node [color=lightblue2, style=filled, shape=circle]; +A +A -> B [label=7]; +A -> C [label=2]; +B +B -> A [label=3]; +B -> C [label=5]; +C +C -> A [label=1]; +C -> B [label=3]; +} +@enddot diff --git a/graph-shell/src/script/graph2puml.awk b/graph-shell/src/script/graph2puml.awk new file mode 100644 index 0000000..cb77e0d --- /dev/null +++ b/graph-shell/src/script/graph2puml.awk @@ -0,0 +1,24 @@ +BEGIN { + FS = "[ :,{}]+" +} +BEGINFILE { + match(FILENAME, /([^/]+)\.yaml/, GraphName) + print "@startdot" + print "digraph", GraphName[1], "{" + print "fontname=\"Helvetica,Arial,sans-serif\"" + print "node [fontname=\"Helvetica,Arial,sans-serif\"]" + print "edge [fontname=\"Helvetica,Arial,sans-serif\"]" + print "node [color=lightblue2, style=filled, shape=circle];" +} +{ + print $1 +} +{ + for (i = 2; i < NF; i += 2) { + print $1, "->", $i, "[label=" $(i + 1) "];" + } +} +ENDFILE { + print "}" + print "@enddot" +}