From 89dc2e245a49f445cccd434589d92f7c23ff92b1 Mon Sep 17 00:00:00 2001 From: jacekpoz Date: Thu, 28 Dec 2023 03:48:54 +0100 Subject: [PATCH] init --- .gitignore | 1 + Cargo.lock | 917 +++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 9 + graphs/2/cmp.png | Bin 0 -> 98078 bytes graphs/2/cpmn.png | Bin 0 -> 90027 bytes graphs/2/cpmnn.png | Bin 0 -> 89612 bytes graphs/2/s.png | Bin 0 -> 98055 bytes graphs/2/sn.png | Bin 0 -> 90182 bytes graphs/2/snn.png | Bin 0 -> 89018 bytes src/common.rs | 104 +++++ src/main.rs | 37 ++ src/zad1.rs | 446 ++++++++++++++++++++++ src/zad2.rs | 175 +++++++++ 13 files changed, 1689 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 graphs/2/cmp.png create mode 100644 graphs/2/cpmn.png create mode 100644 graphs/2/cpmnn.png create mode 100644 graphs/2/s.png create mode 100644 graphs/2/sn.png create mode 100644 graphs/2/snn.png create mode 100644 src/common.rs create mode 100644 src/main.rs create mode 100644 src/zad1.rs create mode 100644 src/zad2.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..5c84dec --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,917 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59d2a3357dde987206219e78ecfbbb6e8dad06cbb65292758d3270e6254f7355" + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" + +[[package]] +name = "bumpalo" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" + +[[package]] +name = "bytemuck" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "wasm-bindgen", + "windows-targets", +] + +[[package]] +name = "cmake" +version = "0.1.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130" +dependencies = [ + "cc", +] + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "const-cstr" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3d0b5ff30645a68f35ece8cea4556ca14ef8a1651455f789a099a0513532a6" + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "core-graphics" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "libc", +] + +[[package]] +name = "core-text" +version = "19.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d74ada66e07c1cefa18f8abfba765b486f250de2e4a999e5727fc0dd4b4a25" +dependencies = [ + "core-foundation", + "core-graphics", + "foreign-types", + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "dlib" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" +dependencies = [ + "libloading", +] + +[[package]] +name = "dwrote" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439a1c2ba5611ad3ed731280541d36d2e9c4ac5e7fb818a27b604bdc5a6aa65b" +dependencies = [ + "lazy_static", + "libc", + "winapi", + "wio", +] + +[[package]] +name = "fdeflate" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7caf4086251adeba90011a7ff9bd1f6d7f7595be0871867daa4dbb0fcf2ca932" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "flate2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "float-ord" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bad48618fdb549078c333a7a8528acb57af271d0433bdecd523eb620628364e" + +[[package]] +name = "font-kit" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21fe28504d371085fae9ac7a3450f0b289ab71e07c8e57baa3fb68b9e57d6ce5" +dependencies = [ + "bitflags 1.3.2", + "byteorder", + "core-foundation", + "core-graphics", + "core-text", + "dirs-next", + "dwrote", + "float-ord", + "freetype", + "lazy_static", + "libc", + "log", + "pathfinder_geometry", + "pathfinder_simd", + "walkdir", + "winapi", + "yeslogic-fontconfig-sys", +] + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "freetype" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bee38378a9e3db1cc693b4f88d166ae375338a0ff75cb8263e1c601d51f35dc6" +dependencies = [ + "freetype-sys", + "libc", +] + +[[package]] +name = "freetype-sys" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a37d4011c0cc628dfa766fcc195454f4b068d7afdc2adfd28861191d866e731a" +dependencies = [ + "cmake", + "libc", + "pkg-config", +] + +[[package]] +name = "getrandom" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gif" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80792593675e051cf94a4b111980da2ba60d4a83e43e0048c5693baab3977045" +dependencies = [ + "color_quant", + "weezl", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "image" +version = "0.24.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f3dfdbdd72063086ff443e297b61695500514b1e41095b6fb9a5ab48a70a711" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "jpeg-decoder", + "num-rational", + "num-traits", + "png", +] + +[[package]] +name = "jpeg-decoder" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e" + +[[package]] +name = "js-sys" +version = "0.3.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.151" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" + +[[package]] +name = "libloading" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" +dependencies = [ + "cfg-if", + "windows-sys", +] + +[[package]] +name = "libredox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.1", + "libc", + "redox_syscall", +] + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", + "simd-adler32", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "pathfinder_geometry" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b7e7b4ea703700ce73ebf128e1450eb69c3a8329199ffbfb9b2a0418e5ad3" +dependencies = [ + "log", + "pathfinder_simd", +] + +[[package]] +name = "pathfinder_simd" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0444332826c70dc47be74a7c6a5fc44e23a7905ad6858d4162b658320455ef93" +dependencies = [ + "rustc_version", +] + +[[package]] +name = "pkg-config" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69d3587f8a9e599cc7ec2c00e331f71c4e69a5f9a4b8a6efd5b07466b9736f9a" + +[[package]] +name = "plotters" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2c224ba00d7cadd4d5c660deaf2098e5e80e07846537c51f9cfa4be50c1fd45" +dependencies = [ + "chrono", + "font-kit", + "image", + "lazy_static", + "num-traits", + "pathfinder_geometry", + "plotters-backend", + "plotters-bitmap", + "plotters-svg", + "ttf-parser", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "plotters-backend" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e76628b4d3a7581389a35d5b6e2139607ad7c75b17aed325f210aa91f4a9609" + +[[package]] +name = "plotters-bitmap" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cebbe1f70205299abc69e8b295035bb52a6a70ee35474ad10011f0a4efb8543" +dependencies = [ + "gif", + "image", + "plotters-backend", +] + +[[package]] +name = "plotters-svg" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38f6d39893cca0701371e3c27294f09797214b86f1fb951b89ade8ec04e2abab" +dependencies = [ + "plotters-backend", +] + +[[package]] +name = "png" +version = "0.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd75bf2d8dd3702b9707cdbc56a5b9ef42cec752eb8b3bafc01234558442aa64" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "proc-macro2" +version = "1.0.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75cb1540fadbd5b8fbccc4dddad2734eba435053f725621c070711a14bb5f4b8" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_users" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" +dependencies = [ + "getrandom", + "libredox", + "thiserror", +] + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "semver" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "syn" +version = "2.0.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee659fb5f3d355364e1f3e5bc10fb82068efbf824a1e9d1c9504244a6469ad53" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "thiserror" +version = "1.0.52" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83a48fd946b02c0a526b2e9481c8e2a17755e47039164a86c4070446e3a4614d" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.52" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7fbe9b594d6568a6a1443250a7e67d80b74e1e96f6d1715e1e21cc1888291d3" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "ttf-parser" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "375812fa44dab6df41c195cd2f7fecb488f6c09fbaafb62807488cefab642bff" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "walkdir" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" + +[[package]] +name = "web-sys" +version = "0.3.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "weezl" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-core" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "wio" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5" +dependencies = [ + "winapi", +] + +[[package]] +name = "yeslogic-fontconfig-sys" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2bbd69036d397ebbff671b1b8e4d918610c181c5a16073b96f984a38d08c386" +dependencies = [ + "const-cstr", + "dlib", + "once_cell", + "pkg-config", +] + +[[package]] +name = "zd3" +version = "0.1.0" +dependencies = [ + "anyhow", + "plotters", + "rand", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..f7801a6 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "zd3" +version = "0.1.0" +edition = "2021" + +[dependencies] +anyhow = "1.0.75" +plotters = "0.3.5" +rand = "0.8.5" diff --git a/graphs/2/cmp.png b/graphs/2/cmp.png new file mode 100644 index 0000000000000000000000000000000000000000..3e5c8058033e19521ce814d0857b5fe4f8c8492c GIT binary patch literal 98078 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 b{C4btRlmwlJ^nTW{v~aB@2&DTe{=l56j$c| literal 0 HcmV?d00001 diff --git a/graphs/2/cpmn.png b/graphs/2/cpmn.png new file mode 100644 index 0000000000000000000000000000000000000000..19a1a733bf23421e7ca6b4ccc956c32e036917c2 GIT binary patch literal 90027 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%0A^T2)Y!?wccq^ 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 literal 0 HcmV?d00001 diff --git a/graphs/2/sn.png b/graphs/2/sn.png new file mode 100644 index 0000000000000000000000000000000000000000..2838eb24df084047d7891365258265857324456f GIT binary patch literal 90182 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 el+u0Ej;N0t-|L9* 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 literal 0 HcmV?d00001 diff --git a/src/common.rs b/src/common.rs new file mode 100644 index 0000000..829190d --- /dev/null +++ b/src/common.rs @@ -0,0 +1,104 @@ +use std::{collections::HashMap, iter}; + +use plotters::{backend::BitMapBackend, drawing::IntoDrawingArea, style::*, chart::ChartBuilder, element::Circle, series::PointSeries}; + +pub fn average(v: &Vec) -> f64 { + v.iter() + .sum::() as f64 / + v.len() as f64 +} + +pub fn draw_graph_averages( + path: &str, + map: HashMap>, + min: u64, + max: u64, + step: u64, +) -> anyhow::Result<()> { + let _max = map.values() + .flatten() + .max() + .unwrap(); + + let root_drawing_area = BitMapBackend::new(path, (1920, 1080)) + .into_drawing_area(); + + root_drawing_area.fill(&WHITE).unwrap(); + + let mut chart = ChartBuilder::on(&root_drawing_area) + .x_label_area_size(20) + .y_label_area_size(60) + .build_cartesian_2d( + 0f64..(max as f64), + 0f64..(*_max as f64), + ) + .unwrap(); + + chart.configure_mesh() + .x_labels(10) + .y_labels(10) + .draw() + .unwrap(); + + for n in (min..=max).step_by(step as usize) { + chart.draw_series(PointSeries::<_, _, Circle<_, _>, _>::new( + map[&n].iter().map(|r| (n as f64, *r as f64)), + 2, + BLUE.filled(), + ))?; + + let point = iter::once(average(&map[&n])).map(|x| (n as f64, x as f64)); + + chart.draw_series(PointSeries::<_, _, Circle<_, _>, _>::new( + point, + 5, + RED.filled(), + ))?; + } + + Ok(()) +} + +pub fn draw_graph( + path: &str, + function: HashMap, + min: u64, + max: u64, + step: u64, +) -> anyhow::Result<()> { + let _max = function.values() + .map(|x| *x) + .reduce(f64::max) + .unwrap(); + + let root_drawing_area = BitMapBackend::new(path, (1920, 1080)) + .into_drawing_area(); + + root_drawing_area.fill(&WHITE).unwrap(); + + let mut chart = ChartBuilder::on(&root_drawing_area) + .x_label_area_size(20) + .y_label_area_size(60) + .build_cartesian_2d( + 0f64..(max as f64), + 0f64..(_max as f64), + ) + .unwrap(); + + chart.configure_mesh() + .x_labels(10) + .y_labels(10) + .draw() + .unwrap(); + + for n in (min..=max).step_by(step as usize) { + let point = iter::once(function[&n]).map(|x| (n as f64, x as f64)); + chart.draw_series(PointSeries::<_, _, Circle<_, _>, _>::new( + point, + 5, + RED.filled(), + ))?; + } + + Ok(()) +} diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..ad3aa53 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,37 @@ +use std::env; + +mod common; +mod zad1; +mod zad2; + +fn usage() { + eprintln!( + "usage: {} [1,2]", + env::args().next().unwrap() + ); +} + +fn main() -> anyhow::Result<()> { + match env::args().nth(1) { + Some(n) => match n.parse::() { + Ok(n) => { + match n { + 1 => zad1::zad1(), + 2 => zad2::zad2(), + _ => { + usage(); + std::process::exit(1) + }, + } + }, + _ => { + usage(); + std::process::exit(1) + }, + }, + _ => { + usage(); + std::process::exit(1) + } + } +} diff --git a/src/zad1.rs b/src/zad1.rs new file mode 100644 index 0000000..a05c6fe --- /dev/null +++ b/src/zad1.rs @@ -0,0 +1,446 @@ +use std::sync::Arc; +use std::{collections::HashMap, sync::RwLock}; +use std::thread; + +use rand::Rng; + +use crate::common::*; + +#[derive(Debug, Default)] +struct Results { + b: u64, + u: u64, + c: u64, + d: u64, + l: u64, +} + +fn test(n: u64, d: u64) -> Results { + let mut bins = vec![0u64; n as usize]; + let mut one_ball_counter = 0u64; + let mut two_balls_counter = 0u64; + let mut i = 0u64; + let mut results = Results::default(); + let mut rand_bins = vec![0u64; d as usize]; + + while i < n { + let mut rand_bin: Option = None; + for ii in 0..d { + rand_bins[ii as usize] = rand::thread_rng().gen_range(0..n); + if rand_bin.is_none() { + rand_bin = Some(rand_bins[0]); + continue; + } + if bins[rand_bins[ii as usize] as usize] < bins[rand_bin.unwrap() as usize] { + rand_bin = Some(rand_bins[ii as usize]); + } + } + let rand_bin = rand_bin.expect("failed to pick random bin\n"); + + bins[rand_bin as usize] += 1; + + i += 1; + + if bins[rand_bin as usize] == 1 { + one_ball_counter += 1; + } + + if bins[rand_bin as usize] == 2 { + two_balls_counter += 1; + + if two_balls_counter == 1 { + results.b = i; + } + } + + if i == (n - 1) { + results.u = n - one_ball_counter; + } + + if one_ball_counter == n { + results.c = i; + // to make sure this condition isn't hit + // in further iterations — without this + // one_ball_counter stays at n until the end + one_ball_counter += 1; + } + } + + results.d = i; + + // SAFETY: bins should not be empty + results.l = *bins.iter().max().unwrap(); + + results +} + + +fn test_d(d: u64) -> anyhow::Result<()> { + let results: Arc>>> = Arc::new(RwLock::new(HashMap::new())); + let mut thread_handles = vec![]; + + let num_cpus = thread::available_parallelism()?.get(); + + for cpu in 0..num_cpus { + let cpu = cpu.clone(); + let results = Arc::clone(&results); + let handle = thread::spawn(move || { + for n in ((10000 + cpu * 10000)..=1000000).step_by(10000 * num_cpus) { + if results.read().expect("can't read results map").get(&(n as u64)).is_some() { + continue; + } + + let mut current_results = vec![]; + for _k in 0..50 { + current_results.push(test(n as u64, d)); + //SAFETY: there's always at least one element in current_results + println!("thread {:?}: n = {}; k = {}, results = {:?}", thread::current().id(), n, _k, current_results.last().unwrap()); + } + + results.write().expect("one of the threads panicked!").insert(n as u64, current_results); + } + }); + + thread_handles.push(handle); + } + + for handle in thread_handles { + handle.join().expect("couldn't join handle"); + } + + let results = results.read().expect("can't access results"); + + draw_graph_averages( + format!("graphs/1/d{d}/b.png").as_str(), + results.iter().map(|(k, v)| + ( + *k, + v.iter() + .map(|r| r.b) + .collect() + ) + ).collect(), + 10000u64, + 1000000u64, + 10000u64 + )?; + + draw_graph_averages( + format!("graphs/1/d{d}/u.png").as_str(), + results.iter().map(|(k, v)| + ( + *k, + v.iter() + .map(|r| r.u) + .collect() + ) + ).collect(), + 10000u64, + 1000000u64, + 10000u64 + )?; + + draw_graph_averages( + format!("graphs/1/d{d}/c.png").as_str(), + results.iter().map(|(k, v)| + ( + *k, + v.iter() + .map(|r| r.c) + .collect() + ) + ).collect(), + 10000u64, + 1000000u64, + 10000u64 + )?; + + draw_graph_averages( + format!("graphs/1/d{d}/d.png").as_str(), + results.iter().map(|(k, v)| + ( + *k, + v.iter() + .map(|r| r.d) + .collect() + ) + ).collect(), + 10000u64, + 1000000u64, + 10000u64 + )?; + + draw_graph_averages( + format!("graphs/1/d{d}/d-c.png").as_str(), + results.iter().map(|(k, v)| + ( + *k, + v.iter() + .map(|r| r.d - r.c) + .collect() + ) + ).collect(), + 10000u64, + 1000000u64, + 10000u64 + )?; + + draw_graph( + format!("graphs/1/d{d}/bn.png").as_str(), + results.iter().map(|(k, v)| + ( + *k, + average( + &v.iter() + .map(|r| r.b) + .collect() + ) / (*k as f64) + ) + ).collect(), + 10000u64, + 1000000u64, + 10000u64 + )?; + + draw_graph( + format!("graphs/1/d{d}/bsqrtn.png").as_str(), + results.iter().map(|(k, v)| + ( + *k, + average( + &v.iter() + .map(|r| r.b) + .collect() + ) / ((*k as f64).sqrt()) + ) + ).collect(), + 10000u64, + 1000000u64, + 10000u64 + )?; + + draw_graph( + format!("graphs/1/d{d}/un.png").as_str(), + results.iter().map(|(k, v)| + ( + *k, + average( + &v.iter() + .map(|r| r.u) + .collect() + ) / (*k as f64) + ) + ).collect(), + 10000u64, + 1000000u64, + 10000u64 + )?; + + draw_graph( + format!("graphs/1/d{d}/cn.png").as_str(), + results.iter().map(|(k, v)| + ( + *k, + average( + &v.iter() + .map(|r| r.c) + .collect() + ) / (*k as f64) + ) + ).collect(), + 10000u64, + 1000000u64, + 10000u64 + )?; + + draw_graph( + format!("graphs/1/d{d}/cnlnn.png").as_str(), + results.iter().map(|(k, v)| + ( + *k, + average( + &v.iter() + .map(|r| r.c) + .collect() + ) / ((*k as f64) * (*k as f64).ln()) + ) + ).collect(), + 10000u64, + 1000000u64, + 10000u64 + )?; + + draw_graph( + format!("graphs/1/d{d}/cn2.png").as_str(), + results.iter().map(|(k, v)| + ( + *k, + average( + &v.iter() + .map(|r| r.c) + .collect() + ) / ((*k as f64) * (*k as f64)) + ) + ).collect(), + 10000u64, + 1000000u64, + 10000u64 + )?; + + draw_graph( + format!("graphs/1/d{d}/dn.png").as_str(), + results.iter().map(|(k, v)| + ( + *k, + average( + &v.iter() + .map(|r| r.d) + .collect() + ) / (*k as f64) + ) + ).collect(), + 10000u64, + 1000000u64, + 10000u64 + )?; + + draw_graph( + format!("graphs/1/d{d}/dnlnn.png").as_str(), + results.iter().map(|(k, v)| + ( + *k, + average( + &v.iter() + .map(|r| r.d) + .collect() + ) / ((*k as f64) * (*k as f64).ln()) + ) + ).collect(), + 10000u64, + 1000000u64, + 10000u64 + )?; + + draw_graph( + format!("graphs/1/d{d}/dn2.png").as_str(), + results.iter().map(|(k, v)| + ( + *k, + average( + &v.iter() + .map(|r| r.d) + .collect() + ) / ((*k as f64) * (*k as f64)) + ) + ).collect(), + 10000u64, + 1000000u64, + 10000u64 + )?; + + draw_graph( + format!("graphs/1/d{d}/dcn.png").as_str(), + results.iter().map(|(k, v)| + ( + *k, + (average( + &v.iter() + .map(|r| r.d) + .collect() + ) - average( + &v.iter() + .map(|r| r.c) + .collect() + )) / (*k as f64) + ) + ).collect(), + 10000u64, + 1000000u64, + 10000u64 + )?; + + draw_graph( + format!("graphs/1/d{d}/dcnlnn.png").as_str(), + results.iter().map(|(k, v)| + ( + *k, + (average( + &v.iter() + .map(|r| r.d) + .collect() + ) - average( + &v.iter() + .map(|r| r.c) + .collect() + )) / ((*k as f64) * (*k as f64).ln()) + ) + ).collect(), + 10000u64, + 1000000u64, + 10000u64 + )?; + + draw_graph( + format!("graphs/1/d{d}/dcnlnlnn.png").as_str(), + results.iter().map(|(k, v)| + ( + *k, + (average( + &v.iter() + .map(|r| r.d) + .collect() + ) - average( + &v.iter() + .map(|r| r.c) + .collect() + )) / ((*k as f64) * (*k as f64).ln().ln()) + ) + ).collect(), + 10000u64, + 1000000u64, + 10000u64 + )?; + + draw_graph( + format!("graphs/1/d{d}/lf1.png").as_str(), + results.iter().map(|(k, v)| + ( + *k, + average( + &v.iter() + .map(|r| r.l) + .collect() + ) / ((*k as f64).ln() / (*k as f64).ln().ln()) + ) + ).collect(), + 10000u64, + 1000000u64, + 10000u64 + )?; + + draw_graph( + format!("graphs/1/d{d}/lf2.png").as_str(), + results.iter().map(|(k, v)| + ( + *k, + average( + &v.iter() + .map(|r| r.l) + .collect() + ) / ((*k as f64).ln().ln() / 2f64.ln()) + ) + ).collect(), + 10000u64, + 1000000u64, + 10000u64 + )?; + + Ok(()) +} + +pub fn zad1() -> anyhow::Result<()> { + test_d(1)?; + test_d(2)?; + + Ok(()) +} diff --git a/src/zad2.rs b/src/zad2.rs new file mode 100644 index 0000000..93ddf00 --- /dev/null +++ b/src/zad2.rs @@ -0,0 +1,175 @@ +use std::{sync::{Arc, RwLock}, collections::HashMap, thread}; + +use rand::{seq::SliceRandom, thread_rng}; + +use crate::common::*; + +#[derive(Debug, Default)] +struct Results { + cmp: u64, + s: u64, +} + +fn rand_vec(n: u64) -> Vec { + let mut ret = (1..=n).collect::>(); + ret.shuffle(&mut thread_rng()); + ret +} + +fn insertion_sort(a: &mut Vec) -> Results { + let n = a.len(); + let mut cmp = 0u64; + let mut s = 0u64; + + for j in 2..=(n - 1) { + let key = a[j]; + let mut i = j - 1; + + while i > 0 && a[i] > key { + cmp += 1; + a[i + 1] = a[i]; + s += 1; + i -= 1; + } + a[i + 1] = key; + s += 1; + } + + Results { cmp, s } +} + +pub fn zad2() -> anyhow::Result<()> { + let results: Arc>>> = Arc::new(RwLock::new(HashMap::new())); + let mut thread_handles = vec![]; + + let num_cpus = thread::available_parallelism()?.get(); + + for cpu in 0..num_cpus { + let cpu = cpu.clone(); + let results = Arc::clone(&results); + let handle = thread::spawn(move || { + for n in ((100 + cpu * 100)..=10000).step_by(100 * num_cpus) { + if results.read().expect("can't read results map").get(&(n as u64)).is_some() { + continue; + } + + let mut current_results = vec![]; + for _k in 0..50 { + current_results.push(insertion_sort(&mut rand_vec(n as u64))); + //SAFETY: there's always at least one element in current_results + println!("thread {:?}: n = {}; k = {}, results = {:?}", thread::current().id(), n, _k, current_results.last().unwrap()); + } + + results.write().expect("one of the threads panicked!").insert(n as u64, current_results); + } + }); + + thread_handles.push(handle); + } + + for handle in thread_handles { + handle.join().expect("couldn't join handle"); + } + + let results = results.read().expect("can't access results"); + + draw_graph_averages( + "graphs/2/cmp.png", + results.iter().map(|(k, v)| + ( + *k, + v.iter() + .map(|r| r.cmp) + .collect() + ) + ).collect(), + 100u64, + 10000u64, + 100u64 + )?; + + draw_graph_averages( + "graphs/2/s.png", + results.iter().map(|(k, v)| + ( + *k, + v.iter() + .map(|r| r.s) + .collect() + ) + ).collect(), + 100u64, + 10000u64, + 100u64 + )?; + + draw_graph( + "graphs/2/cpmn.png", + results.iter().map(|(k, v)| + ( + *k, + average( + &v.iter() + .map(|r| r.cmp) + .collect() + ) / (*k as f64) + ) + ).collect(), + 100u64, + 10000u64, + 100u64 + )?; + + draw_graph( + "graphs/2/cpmnn.png", + results.iter().map(|(k, v)| + ( + *k, + average( + &v.iter() + .map(|r| r.cmp) + .collect() + ) / ((*k as f64) * (*k as f64)) + ) + ).collect(), + 100u64, + 10000u64, + 100u64 + )?; + + draw_graph( + "graphs/2/sn.png", + results.iter().map(|(k, v)| + ( + *k, + average( + &v.iter() + .map(|r| r.s) + .collect() + ) / (*k as f64) + ) + ).collect(), + 100u64, + 10000u64, + 100u64 + )?; + + draw_graph( + "graphs/2/snn.png", + results.iter().map(|(k, v)| + ( + *k, + average( + &v.iter() + .map(|r| r.s) + .collect() + ) / ((*k as f64) * (*k as f64)) + ) + ).collect(), + 100u64, + 10000u64, + 100u64 + )?; + + Ok(()) +}