├── .github └── workflows │ └── backend-sanity-checks.yml ├── .gitignore ├── README.md ├── excalidraw ├── final-iteration.png ├── iteration-1.excalidraw ├── iteration-2.excalidraw ├── iteration-3.excalidraw ├── iteration-4.excalidraw ├── iteration-5.excalidraw └── read-chunk.excalidraw ├── go.mod ├── go.sum ├── main.go ├── main_test.go ├── profiles ├── cpu-100-buf.prof ├── cpu-100-invert.prof ├── cpu-1000-invert.prof ├── cpu-10000-buf.prof ├── cpu-50-buf.prof ├── cpu-chunk-less-gc.prof ├── cpu-custom-parser.prof ├── cpu-int64.prof ├── cpu-less-access.prof ├── cpu-map.prof ├── cpu-parallel.prof ├── cpu-preprocess.prof ├── cpu-read-chunk-2.prof ├── cpu-read-chunk.prof ├── cpu-remove-builder.prof ├── cpu-remove-concatenation.prof ├── cpu.prof ├── cpu1.prof ├── cpu2.prof ├── cpu3.prof ├── cpu4.prof ├── cpu5.prof ├── mem-100-buf.prof ├── mem-100-invert.prof ├── mem-1000-invert.prof ├── mem-10000-buf.prof ├── mem-50-buf.prof ├── mem-chunk-less-gc.prof ├── mem.prof ├── mem1.prof ├── mem2.prof ├── mem3.prof ├── mem4.prof └── mem5.prof └── test_cases ├── measurements-1.out ├── measurements-1.txt ├── measurements-10.out ├── measurements-10.txt ├── measurements-10000-unique-keys.out ├── measurements-10000-unique-keys.txt ├── measurements-2.out ├── measurements-2.txt ├── measurements-20.out ├── measurements-20.txt ├── measurements-3.out ├── measurements-3.txt ├── measurements-boundaries.out ├── measurements-boundaries.txt ├── measurements-complex-utf8.out ├── measurements-complex-utf8.txt ├── measurements-dot.out ├── measurements-dot.txt ├── measurements-rounding.out ├── measurements-rounding.txt ├── measurements-short.out ├── measurements-short.txt ├── measurements-shortest.out └── measurements-shortest.txt /.github/workflows/backend-sanity-checks.yml: -------------------------------------------------------------------------------- 1 | name: backend-sanity-checks 2 | on: 3 | push: 4 | paths: 5 | - "**.go" 6 | - ".github/workflows/backend-sanity-checks.yml" 7 | 8 | jobs: 9 | go-vet: 10 | name: Go Vet 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v4 14 | - name: Setup Go 15 | uses: actions/setup-go@v4 16 | with: 17 | go-version: "1.21.x" 18 | - name: Run go vet 19 | run: go vet ./... > govetresult.json 20 | - name: Upload Go test results 21 | uses: actions/upload-artifact@v3 22 | with: 23 | name: go-vet-results 24 | path: govetresult.json 25 | go-fmt: 26 | name: Go fmt 27 | runs-on: ubuntu-latest 28 | steps: 29 | - uses: actions/checkout@v4 30 | - name: Setup Go 31 | uses: actions/setup-go@v4 32 | with: 33 | go-version: "1.21.x" 34 | - name: Run go fmt 35 | id: run-go-fmt 36 | run: | 37 | go fmt ./... >> gofmtresult.json 38 | # [ -s ] returns true is file exists and size is greater than zero 39 | echo "gofmt_needed=$(if [ -s gofmtresult.json ];then echo "true"; else echo "false"; fi)" >> $GITHUB_OUTPUT 40 | - name: Check if any files need to be formatted with go fmt 41 | if: steps.run-go-fmt.outputs.gofmt_needed == 'true' 42 | run: | 43 | echo "go fmt needs to be run on the following files:" 44 | cat gofmtresult.json 45 | exit 1 46 | go-test: 47 | name: Go Tests 48 | runs-on: ubuntu-latest 49 | steps: 50 | - uses: actions/checkout@v4 51 | - name: Setup Go 52 | uses: actions/setup-go@v4 53 | with: 54 | go-version: "1.21.x" 55 | - name: Install dependencies 56 | run: | 57 | go install gotest.tools/gotestsum@latest 58 | - name: Run Tests 59 | run: gotestsum --format testname --jsonfile testresult.json -- -v ./... 60 | - name: Upload Go test results 61 | uses: actions/upload-artifact@v3 62 | with: 63 | name: go-test-results 64 | path: testresult.json 65 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | measurements.txt 2 | measurements.out 3 | trace* 4 | .DS_store -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 1BRC 2 | 3 | 1️⃣🐝🏎️ [The One Billion Row Challenge](https://github.com/gunnarmorling/1brc) -- A fun exploration of how quickly 1B rows from a text file can be aggregated. The challenge was primarily foces on Java but I decided to solve it in Golang! 4 | 5 | I wrote a detailed blog about my implementation approach, you can check it out [here](https://www.bytesizego.com/blog/one-billion-row-challenge-go). 6 | ## Record of iterations 7 | 8 | Final implementation approach looks like this: 9 | 10 | ![final iteration visualised](/excalidraw/final-iteration.png) 11 | 12 | Here is a more detailed record of each individual iteration: 13 | 14 | | Attempt Number | Approach | Execution Time | Diff | Commit | 15 | |-----------------|---|---|---|--| 16 | |0| Naive Implementation: Read temperatures into a map of cities. Iterate serially over each key (city) in map to find min, max and average temperatures.| 6:13.15 | || 17 | |1| Evaluate each city in map concurrently using goroutines.|4:32.80|-100.35| [8bd5f43](https://github.com/shraddhaag/1brc/commit/8bd5f437e8cc231e3ee18348b83f4dc694137546)| 18 | |2|Remove sorting float64 slices. Calculate min, max and average by iterating.|4:25.59|-7.21|[830e5df](https://github.com/shraddhaag/1brc/commit/830e5dfacff9fb7a41d12027e21399736bc34701)| 19 | |3|Decouple reading and processing of file content. A buffered goroutine is used to communicate between the two processes.|5:22.83|+57.24|[2babf7d](https://github.com/shraddhaag/1brc/commit/2babf7dda72d92c72722b220b8b663e747075bd7)| 20 | |4|Instead of sending each line to the channel, now sending 100 lines chunked together. Also, to minimise garbage collection, not freeing up memory when resetting a slice. |3:41.76|-161.07|[b7b1781](https://github.com/shraddhaag/1brc/commit/b7b1781f58fd258a06940bd6c05eb404c8a14af6)| 21 | |5|Read file in chunks of 100 MB instead of reading line by line. |3:32.62|-9.14|[c26fea4](https://github.com/shraddhaag/1brc/commit/c26fea40019552a7e4fc1c864236f433b1b686f0)| 22 | |6|Convert temperature from `string` to `int64`, process in `int64` and convert to `float64` at the end. |2:51.50|-41.14|[7812da4](https://github.com/shraddhaag/1brc/commit/7812da4d0be07dd4686d5f9b9df1e93b08cd0dd1)| 23 | |7|In the city <> temperatures map, replaced the value for each key (city) to preprocessed min, max, count and sum of all temperatures instead of storing all recorded temperatures for the city.|1:39.81|-71.79|[e5213a8](https://github.com/shraddhaag/1brc/commit/e5213a836b17bec0a858474a11f07c902e724bba)| 24 | |8|Use producer consumer pattern to read file in chunks and process the chunks in parallel.|1:43.82|+14.01|[067f2a4](https://github.com/shraddhaag/1brc/commit/067f2a44c0d6b3bb7cc073639364f733bce09e3e)| 25 | |9|Reduce memory allocation by processing each read chunk into a map. Result channel now can collate the smaller processed chunk maps.|0:28.544|-75.286|[d4153ac](https://github.com/shraddhaag/1brc/commit/d4153ac7a841170a5ceee47d930e97738b5a19f6)| 26 | |10|Avoid string concatenation overhead by not reading the decimal point when processing city temperature.|0:24.571|-3.973|[90f2fe1](https://github.com/shraddhaag/1brc/commit/90f2fe121f454f3f1b5cdaeaaebe639bb86d4578)| 27 | |11|Convert byte slice to string directly instead of using a `strings.Builder`.|0:18.910|-5.761|[88bb6da](https://github.com/shraddhaag/1brc/commit/88bb6da8b85424d46a8c836f3c35a49466df1ea4)| 28 | |12|Replace `strconv.ParseInt` with a custom `string` to `int` parser.|0:14.008|-4.902|[17d575f](https://github.com/shraddhaag/1brc/commit/17d575fd0f143aed18d285713d030a5b52b478df)| 29 | |13|Reduce map access calls when constructing final result string.|0:12.017|-1.9991|| -------------------------------------------------------------------------------- /excalidraw/final-iteration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/excalidraw/final-iteration.png -------------------------------------------------------------------------------- /excalidraw/iteration-1.excalidraw: -------------------------------------------------------------------------------- 1 | { 2 | "type": "excalidraw", 3 | "version": 2, 4 | "source": "https://excalidraw.com", 5 | "elements": [ 6 | { 7 | "type": "rectangle", 8 | "version": 475, 9 | "versionNonce": 1211022538, 10 | "isDeleted": false, 11 | "id": "g7ehsVND-quFuEQITJ1e4", 12 | "fillStyle": "solid", 13 | "strokeWidth": 2, 14 | "strokeStyle": "solid", 15 | "roughness": 1, 16 | "opacity": 100, 17 | "angle": 0, 18 | "x": 190.01953125, 19 | "y": 274.22265625, 20 | "strokeColor": "#1e1e1e", 21 | "backgroundColor": "transparent", 22 | "width": 206.08984375, 23 | "height": 342.5859375, 24 | "seed": 1557179000, 25 | "groupIds": [], 26 | "frameId": null, 27 | "roundness": { 28 | "type": 3 29 | }, 30 | "boundElements": [ 31 | { 32 | "id": "gawhb2bGF4y3b5NWw-jA2", 33 | "type": "arrow" 34 | } 35 | ], 36 | "updated": 1708152894030, 37 | "link": null, 38 | "locked": false 39 | }, 40 | { 41 | "type": "text", 42 | "version": 639, 43 | "versionNonce": 616549590, 44 | "isDeleted": false, 45 | "id": "0wA_sDUOfrpKP2CcQ2I4-", 46 | "fillStyle": "solid", 47 | "strokeWidth": 2, 48 | "strokeStyle": "solid", 49 | "roughness": 1, 50 | "opacity": 100, 51 | "angle": 0, 52 | "x": 221.5390625, 53 | "y": 307.01953125, 54 | "strokeColor": "#1e1e1e", 55 | "backgroundColor": "transparent", 56 | "width": 140.75987243652344, 57 | "height": 275, 58 | "seed": 1921711480, 59 | "groupIds": [], 60 | "frameId": null, 61 | "roundness": null, 62 | "boundElements": [], 63 | "updated": 1708152894030, 64 | "link": null, 65 | "locked": false, 66 | "fontSize": 20, 67 | "fontFamily": 1, 68 | "text": "Hamburg;12.0\nLondon;8.9\nDubai;38.8\nCracow;12.6\nDubai;26.9\nIstanbul;6.2\nRoseau;34.4\nConakry;31.2\nIstanbul;23.0\nSt. John's;15.2\n....", 69 | "textAlign": "left", 70 | "verticalAlign": "top", 71 | "containerId": null, 72 | "originalText": "Hamburg;12.0\nLondon;8.9\nDubai;38.8\nCracow;12.6\nDubai;26.9\nIstanbul;6.2\nRoseau;34.4\nConakry;31.2\nIstanbul;23.0\nSt. John's;15.2\n....", 73 | "lineHeight": 1.25, 74 | "baseline": 268 75 | }, 76 | { 77 | "type": "rectangle", 78 | "version": 732, 79 | "versionNonce": 1636864906, 80 | "isDeleted": false, 81 | "id": "08tc5N08rYftnhcGbAlK8", 82 | "fillStyle": "solid", 83 | "strokeWidth": 2, 84 | "strokeStyle": "solid", 85 | "roughness": 1, 86 | "opacity": 100, 87 | "angle": 0, 88 | "x": 561.4240724666608, 89 | "y": 409.6923419249687, 90 | "strokeColor": "#1e1e1e", 91 | "backgroundColor": "transparent", 92 | "width": 133.323456386206, 93 | "height": 36.61247133047962, 94 | "seed": 1856583240, 95 | "groupIds": [], 96 | "frameId": null, 97 | "roundness": { 98 | "type": 3 99 | }, 100 | "boundElements": [ 101 | { 102 | "id": "gawhb2bGF4y3b5NWw-jA2", 103 | "type": "arrow" 104 | } 105 | ], 106 | "updated": 1708152894030, 107 | "link": null, 108 | "locked": false 109 | }, 110 | { 111 | "type": "text", 112 | "version": 383, 113 | "versionNonce": 740016662, 114 | "isDeleted": false, 115 | "id": "6V2XA-VEtmOQLHB_U6Sl8", 116 | "fillStyle": "solid", 117 | "strokeWidth": 2, 118 | "strokeStyle": "solid", 119 | "roughness": 1, 120 | "opacity": 100, 121 | "angle": 0, 122 | "x": 575.7113238840794, 123 | "y": 417.3097516156081, 124 | "strokeColor": "#1e1e1e", 125 | "backgroundColor": "transparent", 126 | "width": 104.69990539550781, 127 | "height": 25, 128 | "seed": 1669493576, 129 | "groupIds": [], 130 | "frameId": null, 131 | "roundness": null, 132 | "boundElements": [], 133 | "updated": 1708152894030, 134 | "link": null, 135 | "locked": false, 136 | "fontSize": 20, 137 | "fontFamily": 1, 138 | "text": "Dubai;26.9", 139 | "textAlign": "left", 140 | "verticalAlign": "top", 141 | "containerId": null, 142 | "originalText": "Dubai;26.9", 143 | "lineHeight": 1.25, 144 | "baseline": 18 145 | }, 146 | { 147 | "type": "arrow", 148 | "version": 1219, 149 | "versionNonce": 101290570, 150 | "isDeleted": false, 151 | "id": "gawhb2bGF4y3b5NWw-jA2", 152 | "fillStyle": "solid", 153 | "strokeWidth": 1, 154 | "strokeStyle": "solid", 155 | "roughness": 0, 156 | "opacity": 100, 157 | "angle": 0, 158 | "x": 409.740844254903, 159 | "y": 426.07894091318894, 160 | "strokeColor": "#1e1e1e", 161 | "backgroundColor": "transparent", 162 | "width": 143.33898903667284, 163 | "height": 0.4903357038880358, 164 | "seed": 1537847624, 165 | "groupIds": [], 166 | "frameId": null, 167 | "roundness": { 168 | "type": 2 169 | }, 170 | "boundElements": [], 171 | "updated": 1708152894030, 172 | "link": null, 173 | "locked": false, 174 | "startBinding": { 175 | "elementId": "g7ehsVND-quFuEQITJ1e4", 176 | "gap": 13.631469254902925, 177 | "focus": -0.11091106762308113 178 | }, 179 | "endBinding": { 180 | "elementId": "08tc5N08rYftnhcGbAlK8", 181 | "gap": 8.344239175085022, 182 | "focus": 0.14387150195682052 183 | }, 184 | "lastCommittedPoint": null, 185 | "startArrowhead": null, 186 | "endArrowhead": "arrow", 187 | "points": [ 188 | [ 189 | 0, 190 | 0 191 | ], 192 | [ 193 | 143.33898903667284, 194 | -0.4903357038880358 195 | ] 196 | ] 197 | }, 198 | { 199 | "type": "rectangle", 200 | "version": 1899, 201 | "versionNonce": 1724321622, 202 | "isDeleted": false, 203 | "id": "mJGslcYXqDvCIAcbI9Fsh", 204 | "fillStyle": "hachure", 205 | "strokeWidth": 2, 206 | "strokeStyle": "solid", 207 | "roughness": 1, 208 | "opacity": 100, 209 | "angle": 0, 210 | "x": 974.3121464791866, 211 | "y": 368.98055330454645, 212 | "strokeColor": "#000000", 213 | "backgroundColor": "transparent", 214 | "width": 141.63715164456323, 215 | "height": 45.451073718264034, 216 | "seed": 1847850098, 217 | "groupIds": [ 218 | "0HkrLMsTNbVDWFZhnFL9W" 219 | ], 220 | "frameId": null, 221 | "roundness": null, 222 | "boundElements": [], 223 | "updated": 1708152894030, 224 | "link": null, 225 | "locked": false 226 | }, 227 | { 228 | "type": "rectangle", 229 | "version": 1651, 230 | "versionNonce": 1628877974, 231 | "isDeleted": false, 232 | "id": "h9fYE9wEJ9WPmHCIri0fG", 233 | "fillStyle": "hachure", 234 | "strokeWidth": 2, 235 | "strokeStyle": "solid", 236 | "roughness": 1, 237 | "opacity": 100, 238 | "angle": 0, 239 | "x": 855.8362462531318, 240 | "y": 370.85588989325504, 241 | "strokeColor": "#000000", 242 | "backgroundColor": "transparent", 243 | "width": 118.28837125315864, 244 | "height": 43.57573712955543, 245 | "seed": 1179686450, 246 | "groupIds": [ 247 | "0HkrLMsTNbVDWFZhnFL9W" 248 | ], 249 | "frameId": null, 250 | "roundness": null, 251 | "boundElements": [ 252 | { 253 | "type": "text", 254 | "id": "ee2WQ2HW8ZVBuqL7bCgoH" 255 | } 256 | ], 257 | "updated": 1708152894030, 258 | "link": null, 259 | "locked": false 260 | }, 261 | { 262 | "id": "ee2WQ2HW8ZVBuqL7bCgoH", 263 | "type": "text", 264 | "x": 883.0890897166252, 265 | "y": 380.2249027321712, 266 | "width": 63.782684326171875, 267 | "height": 24.837711451723123, 268 | "angle": 0, 269 | "strokeColor": "#1e1e1e", 270 | "backgroundColor": "transparent", 271 | "fillStyle": "solid", 272 | "strokeWidth": 2, 273 | "strokeStyle": "solid", 274 | "roughness": 1, 275 | "opacity": 100, 276 | "groupIds": [ 277 | "0HkrLMsTNbVDWFZhnFL9W" 278 | ], 279 | "frameId": null, 280 | "roundness": null, 281 | "seed": 853858826, 282 | "version": 552, 283 | "versionNonce": 1749878730, 284 | "isDeleted": false, 285 | "boundElements": null, 286 | "updated": 1708152894030, 287 | "link": null, 288 | "locked": false, 289 | "text": "London", 290 | "fontSize": 19.8701691613785, 291 | "fontFamily": 1, 292 | "textAlign": "center", 293 | "verticalAlign": "middle", 294 | "baseline": 17, 295 | "containerId": "h9fYE9wEJ9WPmHCIri0fG", 296 | "originalText": "London", 297 | "lineHeight": 1.25 298 | }, 299 | { 300 | "type": "rectangle", 301 | "version": 1929, 302 | "versionNonce": 1421849046, 303 | "isDeleted": false, 304 | "id": "XDDGUiVk3PzO3yterSUiz", 305 | "fillStyle": "hachure", 306 | "strokeWidth": 2, 307 | "strokeStyle": "solid", 308 | "roughness": 1, 309 | "opacity": 100, 310 | "angle": 0, 311 | "x": 974.3121464791866, 312 | "y": 498.6322604290161, 313 | "strokeColor": "#000000", 314 | "backgroundColor": "transparent", 315 | "width": 138.2954303712264, 316 | "height": 46.60782338980397, 317 | "seed": 1006829554, 318 | "groupIds": [ 319 | "qkVx5s5KjsNvZoWxHYLE0" 320 | ], 321 | "frameId": null, 322 | "roundness": null, 323 | "boundElements": [], 324 | "updated": 1708152894030, 325 | "link": null, 326 | "locked": false 327 | }, 328 | { 329 | "type": "rectangle", 330 | "version": 1733, 331 | "versionNonce": 497909386, 332 | "isDeleted": false, 333 | "id": "v4_RPmrKtagPZPCkoDdgR", 334 | "fillStyle": "hachure", 335 | "strokeWidth": 2, 336 | "strokeStyle": "solid", 337 | "roughness": 1, 338 | "opacity": 100, 339 | "angle": 0, 340 | "x": 855.8362462531318, 341 | "y": 501.66434668926456, 342 | "strokeColor": "#000000", 343 | "backgroundColor": "transparent", 344 | "width": 118.28837125315864, 345 | "height": 43.57573712955543, 346 | "seed": 725758386, 347 | "groupIds": [ 348 | "qkVx5s5KjsNvZoWxHYLE0" 349 | ], 350 | "frameId": null, 351 | "roundness": null, 352 | "boundElements": [], 353 | "updated": 1708152894030, 354 | "link": null, 355 | "locked": false 356 | }, 357 | { 358 | "type": "rectangle", 359 | "version": 2242, 360 | "versionNonce": 2094466838, 361 | "isDeleted": false, 362 | "id": "c7kg4AZS565nhwYsLsMVQ", 363 | "fillStyle": "hachure", 364 | "strokeWidth": 2, 365 | "strokeStyle": "solid", 366 | "roughness": 1, 367 | "opacity": 100, 368 | "angle": 0, 369 | "x": 974.3063043091283, 370 | "y": 325.14015279016485, 371 | "strokeColor": "#000000", 372 | "backgroundColor": "transparent", 373 | "width": 142.1571047797507, 374 | "height": 44.94280492319335, 375 | "seed": 1463102322, 376 | "groupIds": [ 377 | "RGDUNqrgvYPsK9zeVxhnI" 378 | ], 379 | "frameId": null, 380 | "roundness": null, 381 | "boundElements": [ 382 | { 383 | "id": "B2yB337o0qKT-3VK87Blw", 384 | "type": "arrow" 385 | } 386 | ], 387 | "updated": 1708152894030, 388 | "link": null, 389 | "locked": false 390 | }, 391 | { 392 | "type": "rectangle", 393 | "version": 1883, 394 | "versionNonce": 1775350870, 395 | "isDeleted": false, 396 | "id": "Qp04Q1WaTvUONGksdBg6o", 397 | "fillStyle": "hachure", 398 | "strokeWidth": 2, 399 | "strokeStyle": "solid", 400 | "roughness": 1, 401 | "opacity": 100, 402 | "angle": 0, 403 | "x": 855.8304040830735, 404 | "y": 326.5072205838028, 405 | "strokeColor": "#000000", 406 | "backgroundColor": "transparent", 407 | "width": 118.28837125315864, 408 | "height": 43.57573712955543, 409 | "seed": 102952242, 410 | "groupIds": [ 411 | "RGDUNqrgvYPsK9zeVxhnI" 412 | ], 413 | "frameId": null, 414 | "roundness": null, 415 | "boundElements": [ 416 | { 417 | "type": "text", 418 | "id": "ZHpqO8RcweNX8bKwKRwtz" 419 | } 420 | ], 421 | "updated": 1708152894030, 422 | "link": null, 423 | "locked": false 424 | }, 425 | { 426 | "id": "ZHpqO8RcweNX8bKwKRwtz", 427 | "type": "text", 428 | "x": 876.6453889650239, 429 | "y": 335.87623342271894, 430 | "width": 76.65840148925781, 431 | "height": 24.837711451723123, 432 | "angle": 0, 433 | "strokeColor": "#1e1e1e", 434 | "backgroundColor": "transparent", 435 | "fillStyle": "solid", 436 | "strokeWidth": 2, 437 | "strokeStyle": "solid", 438 | "roughness": 1, 439 | "opacity": 100, 440 | "groupIds": [ 441 | "RGDUNqrgvYPsK9zeVxhnI" 442 | ], 443 | "frameId": null, 444 | "roundness": null, 445 | "seed": 1389832138, 446 | "version": 700, 447 | "versionNonce": 479388682, 448 | "isDeleted": false, 449 | "boundElements": null, 450 | "updated": 1708152894030, 451 | "link": null, 452 | "locked": false, 453 | "text": "Hamburg", 454 | "fontSize": 19.8701691613785, 455 | "fontFamily": 1, 456 | "textAlign": "center", 457 | "verticalAlign": "middle", 458 | "baseline": 17, 459 | "containerId": "Qp04Q1WaTvUONGksdBg6o", 460 | "originalText": "Hamburg", 461 | "lineHeight": 1.25 462 | }, 463 | { 464 | "type": "rectangle", 465 | "version": 1878, 466 | "versionNonce": 1434761622, 467 | "isDeleted": false, 468 | "id": "QiJmkW_yybfpcJXgommNZ", 469 | "fillStyle": "hachure", 470 | "strokeWidth": 2, 471 | "strokeStyle": "solid", 472 | "roughness": 1, 473 | "opacity": 100, 474 | "angle": 0, 475 | "x": 974.1368813774382, 476 | "y": 412.41784408490224, 477 | "strokeColor": "#000000", 478 | "backgroundColor": "transparent", 479 | "width": 141.96431316782707, 480 | "height": 45.737340051119816, 481 | "seed": 494040818, 482 | "groupIds": [ 483 | "2_lTUjnJqPYiuGLMzjNwJ" 484 | ], 485 | "frameId": null, 486 | "roundness": null, 487 | "boundElements": [ 488 | { 489 | "id": "HS-DOTq6zbaXxivlF85A6", 490 | "type": "arrow" 491 | } 492 | ], 493 | "updated": 1708152894030, 494 | "link": null, 495 | "locked": false 496 | }, 497 | { 498 | "type": "rectangle", 499 | "version": 1672, 500 | "versionNonce": 1030607562, 501 | "isDeleted": false, 502 | "id": "TGzZHf5FD6q1l367EypZx", 503 | "fillStyle": "hachure", 504 | "strokeWidth": 2, 505 | "strokeStyle": "solid", 506 | "roughness": 1, 507 | "opacity": 100, 508 | "angle": 0, 509 | "x": 855.6609811513833, 510 | "y": 414.57944700646664, 511 | "strokeColor": "#000000", 512 | "backgroundColor": "transparent", 513 | "width": 118.28837125315864, 514 | "height": 43.57573712955543, 515 | "seed": 1034602674, 516 | "groupIds": [ 517 | "2_lTUjnJqPYiuGLMzjNwJ" 518 | ], 519 | "frameId": null, 520 | "roundness": null, 521 | "boundElements": [ 522 | { 523 | "type": "text", 524 | "id": "7w0bSWRKYnuuQJgc1QDg6" 525 | } 526 | ], 527 | "updated": 1708152894030, 528 | "link": null, 529 | "locked": false 530 | }, 531 | { 532 | "id": "7w0bSWRKYnuuQJgc1QDg6", 533 | "type": "text", 534 | "x": 887.5634217828455, 535 | "y": 423.9484598453828, 536 | "width": 54.483489990234375, 537 | "height": 24.837711451723123, 538 | "angle": 0, 539 | "strokeColor": "#1e1e1e", 540 | "backgroundColor": "transparent", 541 | "fillStyle": "solid", 542 | "strokeWidth": 2, 543 | "strokeStyle": "solid", 544 | "roughness": 1, 545 | "opacity": 100, 546 | "groupIds": [ 547 | "2_lTUjnJqPYiuGLMzjNwJ" 548 | ], 549 | "frameId": null, 550 | "roundness": null, 551 | "seed": 1806284170, 552 | "version": 563, 553 | "versionNonce": 1998919382, 554 | "isDeleted": false, 555 | "boundElements": null, 556 | "updated": 1708152894030, 557 | "link": null, 558 | "locked": false, 559 | "text": "Dubai", 560 | "fontSize": 19.8701691613785, 561 | "fontFamily": 1, 562 | "textAlign": "center", 563 | "verticalAlign": "middle", 564 | "baseline": 17, 565 | "containerId": "TGzZHf5FD6q1l367EypZx", 566 | "originalText": "Dubai", 567 | "lineHeight": 1.25 568 | }, 569 | { 570 | "type": "rectangle", 571 | "version": 1944, 572 | "versionNonce": 1249700234, 573 | "isDeleted": false, 574 | "id": "DC86C3pauXtePubu2oZh6", 575 | "fillStyle": "hachure", 576 | "strokeWidth": 2, 577 | "strokeStyle": "solid", 578 | "roughness": 1, 579 | "opacity": 100, 580 | "angle": 0, 581 | "x": 974.3121464791866, 582 | "y": 459.36627907027923, 583 | "strokeColor": "#000000", 584 | "backgroundColor": "transparent", 585 | "width": 139.60991863434003, 586 | "height": 42.33135490714137, 587 | "seed": 1584587378, 588 | "groupIds": [ 589 | "ls8IcbYTXvv3VzKKmJ0hS" 590 | ], 591 | "frameId": null, 592 | "roundness": null, 593 | "boundElements": [], 594 | "updated": 1708152894030, 595 | "link": null, 596 | "locked": false 597 | }, 598 | { 599 | "type": "rectangle", 600 | "version": 1708, 601 | "versionNonce": 1464323094, 602 | "isDeleted": false, 603 | "id": "VkO1IEH8EZ2KPOG-xHk-r", 604 | "fillStyle": "hachure", 605 | "strokeWidth": 2, 606 | "strokeStyle": "solid", 607 | "roughness": 1, 608 | "opacity": 100, 609 | "angle": 0, 610 | "x": 855.8362462531318, 611 | "y": 458.1218968478652, 612 | "strokeColor": "#000000", 613 | "backgroundColor": "transparent", 614 | "width": 118.28837125315864, 615 | "height": 43.57573712955543, 616 | "seed": 1787937842, 617 | "groupIds": [ 618 | "ls8IcbYTXvv3VzKKmJ0hS" 619 | ], 620 | "frameId": null, 621 | "roundness": null, 622 | "boundElements": [ 623 | { 624 | "type": "text", 625 | "id": "WugyfMgbjYhQBac0x7IAI" 626 | } 627 | ], 628 | "updated": 1708152894030, 629 | "link": null, 630 | "locked": false 631 | }, 632 | { 633 | "id": "WugyfMgbjYhQBac0x7IAI", 634 | "type": "text", 635 | "x": 881.1418317210197, 636 | "y": 467.4909096867813, 637 | "width": 67.67720031738281, 638 | "height": 24.837711451723123, 639 | "angle": 0, 640 | "strokeColor": "#1e1e1e", 641 | "backgroundColor": "transparent", 642 | "fillStyle": "solid", 643 | "strokeWidth": 2, 644 | "strokeStyle": "solid", 645 | "roughness": 1, 646 | "opacity": 100, 647 | "groupIds": [ 648 | "ls8IcbYTXvv3VzKKmJ0hS" 649 | ], 650 | "frameId": null, 651 | "roundness": null, 652 | "seed": 979461002, 653 | "version": 559, 654 | "versionNonce": 2063280202, 655 | "isDeleted": false, 656 | "boundElements": null, 657 | "updated": 1708152894030, 658 | "link": null, 659 | "locked": false, 660 | "text": "Cracow", 661 | "fontSize": 19.8701691613785, 662 | "fontFamily": 1, 663 | "textAlign": "center", 664 | "verticalAlign": "middle", 665 | "baseline": 17, 666 | "containerId": "VkO1IEH8EZ2KPOG-xHk-r", 667 | "originalText": "Cracow", 668 | "lineHeight": 1.25 669 | }, 670 | { 671 | "type": "text", 672 | "version": 741, 673 | "versionNonce": 602003798, 674 | "isDeleted": false, 675 | "id": "5UQPcQECvEVqnL_z3OLxp", 676 | "fillStyle": "solid", 677 | "strokeWidth": 2, 678 | "strokeStyle": "solid", 679 | "roughness": 1, 680 | "opacity": 100, 681 | "angle": 0, 682 | "x": 884.9073045786099, 683 | "y": 295.5945071823994, 684 | "strokeColor": "#000000", 685 | "backgroundColor": "#ced4da", 686 | "width": 33.3013916015625, 687 | "height": 23.467697493077033, 688 | "seed": 380729010, 689 | "groupIds": [], 690 | "frameId": null, 691 | "roundness": null, 692 | "boundElements": [], 693 | "updated": 1708152894030, 694 | "link": null, 695 | "locked": false, 696 | "fontSize": 18.476780229816047, 697 | "fontFamily": 1, 698 | "text": "KEY", 699 | "textAlign": "left", 700 | "verticalAlign": "top", 701 | "containerId": null, 702 | "originalText": "KEY", 703 | "lineHeight": 1.2701183431952676, 704 | "baseline": 16 705 | }, 706 | { 707 | "type": "text", 708 | "version": 872, 709 | "versionNonce": 1724092170, 710 | "isDeleted": false, 711 | "id": "6sYiQnwNfm3owAHnNoLx_", 712 | "fillStyle": "solid", 713 | "strokeWidth": 2, 714 | "strokeStyle": "solid", 715 | "roughness": 1, 716 | "opacity": 100, 717 | "angle": 0, 718 | "x": 1013.1429901425822, 719 | "y": 295.34286916151467, 720 | "strokeColor": "#000000", 721 | "backgroundColor": "#ced4da", 722 | "width": 58.36517333984375, 723 | "height": 23.467697493077033, 724 | "seed": 2121519218, 725 | "groupIds": [], 726 | "frameId": null, 727 | "roundness": null, 728 | "boundElements": [], 729 | "updated": 1708152894030, 730 | "link": null, 731 | "locked": false, 732 | "fontSize": 18.476780229816075, 733 | "fontFamily": 1, 734 | "text": "VALUE", 735 | "textAlign": "left", 736 | "verticalAlign": "top", 737 | "containerId": null, 738 | "originalText": "VALUE", 739 | "lineHeight": 1.2701183431952656, 740 | "baseline": 16 741 | }, 742 | { 743 | "id": "WIHlzBjFbgwVaQpLM7oTu", 744 | "type": "text", 745 | "x": 989.4615727353421, 746 | "y": 337.4550045887639, 747 | "width": 38.64710998535156, 748 | "height": 24.837711451723123, 749 | "angle": 0, 750 | "strokeColor": "#1e1e1e", 751 | "backgroundColor": "transparent", 752 | "fillStyle": "solid", 753 | "strokeWidth": 2, 754 | "strokeStyle": "solid", 755 | "roughness": 1, 756 | "opacity": 100, 757 | "groupIds": [ 758 | "RGDUNqrgvYPsK9zeVxhnI" 759 | ], 760 | "frameId": null, 761 | "roundness": null, 762 | "seed": 2100890774, 763 | "version": 540, 764 | "versionNonce": 71843478, 765 | "isDeleted": false, 766 | "boundElements": null, 767 | "updated": 1708152894030, 768 | "link": null, 769 | "locked": false, 770 | "text": "12.0", 771 | "fontSize": 19.8701691613785, 772 | "fontFamily": 1, 773 | "textAlign": "left", 774 | "verticalAlign": "top", 775 | "baseline": 17, 776 | "containerId": null, 777 | "originalText": "12.0", 778 | "lineHeight": 1.25 779 | }, 780 | { 781 | "id": "2zwV1Mv7qiSMuqiJY8S4p", 782 | "type": "text", 783 | "x": 987.4803979892624, 784 | "y": 383.9626131279775, 785 | "width": 32.74574279785156, 786 | "height": 24.837711451723123, 787 | "angle": 0, 788 | "strokeColor": "#1e1e1e", 789 | "backgroundColor": "transparent", 790 | "fillStyle": "solid", 791 | "strokeWidth": 2, 792 | "strokeStyle": "solid", 793 | "roughness": 1, 794 | "opacity": 100, 795 | "groupIds": [ 796 | "0HkrLMsTNbVDWFZhnFL9W" 797 | ], 798 | "frameId": null, 799 | "roundness": null, 800 | "seed": 110571862, 801 | "version": 392, 802 | "versionNonce": 1917918666, 803 | "isDeleted": false, 804 | "boundElements": null, 805 | "updated": 1708152894030, 806 | "link": null, 807 | "locked": false, 808 | "text": "8.9", 809 | "fontSize": 19.8701691613785, 810 | "fontFamily": 1, 811 | "textAlign": "left", 812 | "verticalAlign": "top", 813 | "baseline": 17, 814 | "containerId": null, 815 | "originalText": "8.9", 816 | "lineHeight": 1.25 817 | }, 818 | { 819 | "id": "TFE4kqCND0XLbFSPabbGR", 820 | "type": "text", 821 | "x": 986.3116244294454, 822 | "y": 426.864584096748, 823 | "width": 108.82792663574219, 824 | "height": 24.837711451723123, 825 | "angle": 0, 826 | "strokeColor": "#1e1e1e", 827 | "backgroundColor": "transparent", 828 | "fillStyle": "solid", 829 | "strokeWidth": 2, 830 | "strokeStyle": "solid", 831 | "roughness": 1, 832 | "opacity": 100, 833 | "groupIds": [ 834 | "2_lTUjnJqPYiuGLMzjNwJ" 835 | ], 836 | "frameId": null, 837 | "roundness": null, 838 | "seed": 418625750, 839 | "version": 403, 840 | "versionNonce": 1831861206, 841 | "isDeleted": false, 842 | "boundElements": null, 843 | "updated": 1708152894030, 844 | "link": null, 845 | "locked": false, 846 | "text": "38.8, 26.9", 847 | "fontSize": 19.8701691613785, 848 | "fontFamily": 1, 849 | "textAlign": "left", 850 | "verticalAlign": "top", 851 | "baseline": 17, 852 | "containerId": null, 853 | "originalText": "38.8, 26.9", 854 | "lineHeight": 1.25 855 | }, 856 | { 857 | "id": "EEvKzIPUvf68WK60ek2zD", 858 | "type": "text", 859 | "x": 984.4998726150559, 860 | "y": 469.58544779371175, 861 | "width": 37.693359375, 862 | "height": 24.837711451723123, 863 | "angle": 0, 864 | "strokeColor": "#1e1e1e", 865 | "backgroundColor": "transparent", 866 | "fillStyle": "solid", 867 | "strokeWidth": 2, 868 | "strokeStyle": "solid", 869 | "roughness": 1, 870 | "opacity": 100, 871 | "groupIds": [ 872 | "ls8IcbYTXvv3VzKKmJ0hS" 873 | ], 874 | "frameId": null, 875 | "roundness": null, 876 | "seed": 865740182, 877 | "version": 392, 878 | "versionNonce": 985584778, 879 | "isDeleted": false, 880 | "boundElements": null, 881 | "updated": 1708152894030, 882 | "link": null, 883 | "locked": false, 884 | "text": "12.6", 885 | "fontSize": 19.8701691613785, 886 | "fontFamily": 1, 887 | "textAlign": "left", 888 | "verticalAlign": "top", 889 | "baseline": 17, 890 | "containerId": null, 891 | "originalText": "12.6", 892 | "lineHeight": 1.25 893 | }, 894 | { 895 | "type": "arrow", 896 | "version": 1487, 897 | "versionNonce": 1957564694, 898 | "isDeleted": false, 899 | "id": "yZBK5-QWVk0e6m0Um2kXS", 900 | "fillStyle": "solid", 901 | "strokeWidth": 1, 902 | "strokeStyle": "solid", 903 | "roughness": 0, 904 | "opacity": 100, 905 | "angle": 0, 906 | "x": 716.6138968238486, 907 | "y": 428.8153606790435, 908 | "strokeColor": "#1e1e1e", 909 | "backgroundColor": "transparent", 910 | "width": 116.47769450345879, 911 | "height": 0.9171943789989427, 912 | "seed": 167149066, 913 | "groupIds": [], 914 | "frameId": null, 915 | "roundness": { 916 | "type": 2 917 | }, 918 | "boundElements": [], 919 | "updated": 1708152894030, 920 | "link": null, 921 | "locked": false, 922 | "startBinding": null, 923 | "endBinding": null, 924 | "lastCommittedPoint": null, 925 | "startArrowhead": null, 926 | "endArrowhead": "arrow", 927 | "points": [ 928 | [ 929 | 0, 930 | 0 931 | ], 932 | [ 933 | 116.47769450345879, 934 | -0.9171943789989427 935 | ] 936 | ] 937 | }, 938 | { 939 | "id": "UK95a36C6IFNqw8wSB5CP", 940 | "type": "text", 941 | "x": 406.00824059686926, 942 | "y": 381.7682095126095, 943 | "width": 175.6022790432243, 944 | "height": 31.27247543308899, 945 | "angle": 0, 946 | "strokeColor": "#1e1e1e", 947 | "backgroundColor": "transparent", 948 | "fillStyle": "solid", 949 | "strokeWidth": 2, 950 | "strokeStyle": "solid", 951 | "roughness": 1, 952 | "opacity": 100, 953 | "groupIds": [], 954 | "frameId": null, 955 | "roundness": null, 956 | "seed": 1519970506, 957 | "version": 417, 958 | "versionNonce": 29864778, 959 | "isDeleted": false, 960 | "boundElements": null, 961 | "updated": 1708152894030, 962 | "link": null, 963 | "locked": false, 964 | "text": "read file sequentially \nline by line", 965 | "fontSize": 13.030198097120408, 966 | "fontFamily": 3, 967 | "textAlign": "center", 968 | "verticalAlign": "top", 969 | "baseline": 28.00000000000001, 970 | "containerId": null, 971 | "originalText": "read file sequentially \nline by line", 972 | "lineHeight": 1.2 973 | }, 974 | { 975 | "id": "cUvEqE-dILr2OErRIEu0f", 976 | "type": "text", 977 | "x": 689.7626292937159, 978 | "y": 375.0404463016939, 979 | "width": 157.7636190487401, 980 | "height": 32.316584948306065, 981 | "angle": 0, 982 | "strokeColor": "#1e1e1e", 983 | "backgroundColor": "transparent", 984 | "fillStyle": "solid", 985 | "strokeWidth": 2, 986 | "strokeStyle": "solid", 987 | "roughness": 1, 988 | "opacity": 100, 989 | "groupIds": [], 990 | "frameId": null, 991 | "roundness": null, 992 | "seed": 203381782, 993 | "version": 554, 994 | "versionNonce": 641171030, 995 | "isDeleted": false, 996 | "boundElements": null, 997 | "updated": 1708152894030, 998 | "link": null, 999 | "locked": false, 1000 | "text": "process city & temp,\ninsert in final map", 1001 | "fontSize": 13.465243728460864, 1002 | "fontFamily": 3, 1003 | "textAlign": "center", 1004 | "verticalAlign": "top", 1005 | "baseline": 28.999999999999993, 1006 | "containerId": null, 1007 | "originalText": "process city & temp,\ninsert in final map", 1008 | "lineHeight": 1.2 1009 | }, 1010 | { 1011 | "id": "obb78i_3l_BT1RCnAhGP6", 1012 | "type": "text", 1013 | "x": 1546.7038038758026, 1014 | "y": 398.0610358742384, 1015 | "width": 290.625, 1016 | "height": 38.4, 1017 | "angle": 0, 1018 | "strokeColor": "#1e1e1e", 1019 | "backgroundColor": "transparent", 1020 | "fillStyle": "solid", 1021 | "strokeWidth": 1, 1022 | "strokeStyle": "solid", 1023 | "roughness": 0, 1024 | "opacity": 100, 1025 | "groupIds": [], 1026 | "frameId": null, 1027 | "roundness": null, 1028 | "seed": 261244270, 1029 | "version": 825, 1030 | "versionNonce": 675840854, 1031 | "isDeleted": false, 1032 | "boundElements": [ 1033 | { 1034 | "id": "HS-DOTq6zbaXxivlF85A6", 1035 | "type": "arrow" 1036 | }, 1037 | { 1038 | "id": "u3R5ePspr3uF3j5IxuacW", 1039 | "type": "arrow" 1040 | }, 1041 | { 1042 | "id": "i27xMc4ZbHLtYPcknK2Pc", 1043 | "type": "arrow" 1044 | } 1045 | ], 1046 | "updated": 1708152924284, 1047 | "link": null, 1048 | "locked": false, 1049 | "text": "{Hamburg=12.0/12.0/12.0; London\n=8.9/8.9/8.9...}", 1050 | "fontSize": 16, 1051 | "fontFamily": 3, 1052 | "textAlign": "center", 1053 | "verticalAlign": "top", 1054 | "baseline": 34, 1055 | "containerId": null, 1056 | "originalText": "{Hamburg=12.0/12.0/12.0; London\n=8.9/8.9/8.9...}", 1057 | "lineHeight": 1.2 1058 | }, 1059 | { 1060 | "id": "hraiPXQZQCyI1m7grYQTm", 1061 | "type": "text", 1062 | "x": 239.00333759766227, 1063 | "y": 628.0330257352593, 1064 | "width": 93.75, 1065 | "height": 19.2, 1066 | "angle": 0, 1067 | "strokeColor": "#1e1e1e", 1068 | "backgroundColor": "transparent", 1069 | "fillStyle": "solid", 1070 | "strokeWidth": 1, 1071 | "strokeStyle": "solid", 1072 | "roughness": 0, 1073 | "opacity": 100, 1074 | "groupIds": [], 1075 | "frameId": null, 1076 | "roundness": null, 1077 | "seed": 605226902, 1078 | "version": 78, 1079 | "versionNonce": 769193174, 1080 | "isDeleted": false, 1081 | "boundElements": null, 1082 | "updated": 1708152894030, 1083 | "link": null, 1084 | "locked": false, 1085 | "text": "input file", 1086 | "fontSize": 16, 1087 | "fontFamily": 3, 1088 | "textAlign": "center", 1089 | "verticalAlign": "top", 1090 | "baseline": 15, 1091 | "containerId": null, 1092 | "originalText": "input file", 1093 | "lineHeight": 1.2 1094 | }, 1095 | { 1096 | "id": "u2vSu_vA9uWdk3l6caAGT", 1097 | "type": "text", 1098 | "x": 528.4081300374676, 1099 | "y": 459.3341290935612, 1100 | "width": 206.25, 1101 | "height": 19.2, 1102 | "angle": 0, 1103 | "strokeColor": "#1e1e1e", 1104 | "backgroundColor": "transparent", 1105 | "fillStyle": "solid", 1106 | "strokeWidth": 1, 1107 | "strokeStyle": "solid", 1108 | "roughness": 0, 1109 | "opacity": 100, 1110 | "groupIds": [], 1111 | "frameId": null, 1112 | "roundness": null, 1113 | "seed": 1604314890, 1114 | "version": 169, 1115 | "versionNonce": 1878911882, 1116 | "isDeleted": false, 1117 | "boundElements": null, 1118 | "updated": 1708152894030, 1119 | "link": null, 1120 | "locked": false, 1121 | "text": "scanned line from file", 1122 | "fontSize": 16, 1123 | "fontFamily": 3, 1124 | "textAlign": "center", 1125 | "verticalAlign": "top", 1126 | "baseline": 15, 1127 | "containerId": null, 1128 | "originalText": "scanned line from file", 1129 | "lineHeight": 1.2 1130 | }, 1131 | { 1132 | "type": "text", 1133 | "version": 412, 1134 | "versionNonce": 131066390, 1135 | "isDeleted": false, 1136 | "id": "fCzahi-0eDqzZLUR1PrAC", 1137 | "fillStyle": "solid", 1138 | "strokeWidth": 1, 1139 | "strokeStyle": "solid", 1140 | "roughness": 0, 1141 | "opacity": 100, 1142 | "angle": 0, 1143 | "x": 852.0601051552126, 1144 | "y": 557.1286897125314, 1145 | "strokeColor": "#1e1e1e", 1146 | "backgroundColor": "transparent", 1147 | "width": 271.875, 1148 | "height": 38.4, 1149 | "seed": 14773078, 1150 | "groupIds": [], 1151 | "frameId": null, 1152 | "roundness": null, 1153 | "boundElements": [], 1154 | "updated": 1708152894030, 1155 | "link": null, 1156 | "locked": false, 1157 | "fontSize": 16, 1158 | "fontFamily": 3, 1159 | "text": "hashmap storing station with \nthere recorded temperatures", 1160 | "textAlign": "center", 1161 | "verticalAlign": "top", 1162 | "containerId": null, 1163 | "originalText": "hashmap storing station with \nthere recorded temperatures", 1164 | "lineHeight": 1.2, 1165 | "baseline": 34 1166 | }, 1167 | { 1168 | "type": "text", 1169 | "version": 1745, 1170 | "versionNonce": 1624538698, 1171 | "isDeleted": false, 1172 | "id": "3BnjY7oCUukUMudxV12Tk", 1173 | "fillStyle": "solid", 1174 | "strokeWidth": 1, 1175 | "strokeStyle": "solid", 1176 | "roughness": 0, 1177 | "opacity": 100, 1178 | "angle": 0, 1179 | "x": 1198.2282364358855, 1180 | "y": 226.8320370893398, 1181 | "strokeColor": "#1e1e1e", 1182 | "backgroundColor": "transparent", 1183 | "width": 256.470703125, 1184 | "height": 28.400152250240534, 1185 | "seed": 698375050, 1186 | "groupIds": [], 1187 | "frameId": null, 1188 | "roundness": null, 1189 | "boundElements": [], 1190 | "updated": 1708153057183, 1191 | "link": null, 1192 | "locked": false, 1193 | "fontSize": 11.833396770933556, 1194 | "fontFamily": 3, 1195 | "text": "concurrently process each key-value \nin hashmap & collate it to get result", 1196 | "textAlign": "center", 1197 | "verticalAlign": "top", 1198 | "containerId": null, 1199 | "originalText": "concurrently process each key-value \nin hashmap & collate it to get result", 1200 | "lineHeight": 1.2, 1201 | "baseline": 25 1202 | }, 1203 | { 1204 | "id": "vEsUTcDBGkCYsy7EU5jN4", 1205 | "type": "text", 1206 | "x": 1603.5613159922566, 1207 | "y": 463.0515224323881, 1208 | "width": 178.125, 1209 | "height": 19.2, 1210 | "angle": 0, 1211 | "strokeColor": "#1e1e1e", 1212 | "backgroundColor": "transparent", 1213 | "fillStyle": "solid", 1214 | "strokeWidth": 1, 1215 | "strokeStyle": "solid", 1216 | "roughness": 0, 1217 | "opacity": 100, 1218 | "groupIds": [], 1219 | "frameId": null, 1220 | "roundness": null, 1221 | "seed": 1915484886, 1222 | "version": 459, 1223 | "versionNonce": 479349130, 1224 | "isDeleted": false, 1225 | "boundElements": null, 1226 | "updated": 1708152898486, 1227 | "link": null, 1228 | "locked": false, 1229 | "text": "final output string", 1230 | "fontSize": 16, 1231 | "fontFamily": 3, 1232 | "textAlign": "center", 1233 | "verticalAlign": "top", 1234 | "baseline": 15, 1235 | "containerId": null, 1236 | "originalText": "final output string", 1237 | "lineHeight": 1.2 1238 | }, 1239 | { 1240 | "id": "B2yB337o0qKT-3VK87Blw", 1241 | "type": "arrow", 1242 | "x": 1129.936394079096, 1243 | "y": 349.79577249288127, 1244 | "width": 76.17097046078993, 1245 | "height": 62.363298047287685, 1246 | "angle": 0, 1247 | "strokeColor": "#1e1e1e", 1248 | "backgroundColor": "transparent", 1249 | "fillStyle": "solid", 1250 | "strokeWidth": 1, 1251 | "strokeStyle": "solid", 1252 | "roughness": 0, 1253 | "opacity": 100, 1254 | "groupIds": [], 1255 | "frameId": null, 1256 | "roundness": null, 1257 | "seed": 215060694, 1258 | "version": 102, 1259 | "versionNonce": 335862230, 1260 | "isDeleted": false, 1261 | "boundElements": null, 1262 | "updated": 1708152894030, 1263 | "link": null, 1264 | "locked": false, 1265 | "points": [ 1266 | [ 1267 | 0, 1268 | 0 1269 | ], 1270 | [ 1271 | 76.17097046078993, 1272 | -62.363298047287685 1273 | ] 1274 | ], 1275 | "lastCommittedPoint": null, 1276 | "startBinding": { 1277 | "elementId": "c7kg4AZS565nhwYsLsMVQ", 1278 | "focus": 0.8852484819034326, 1279 | "gap": 13.472984990217128 1280 | }, 1281 | "endBinding": { 1282 | "elementId": "nvWrKGBRtPs5ucCaVIU2j", 1283 | "focus": 1.0231266916752386, 1284 | "gap": 15.714525161277834 1285 | }, 1286 | "startArrowhead": null, 1287 | "endArrowhead": "arrow" 1288 | }, 1289 | { 1290 | "id": "QRGvSXjt73mpJG6ExDGVS", 1291 | "type": "arrow", 1292 | "x": 1132.6816603174213, 1293 | "y": 390.34945542458524, 1294 | "width": 97.5645601717697, 1295 | "height": 28.885684175528866, 1296 | "angle": 0, 1297 | "strokeColor": "#1e1e1e", 1298 | "backgroundColor": "transparent", 1299 | "fillStyle": "solid", 1300 | "strokeWidth": 1, 1301 | "strokeStyle": "solid", 1302 | "roughness": 0, 1303 | "opacity": 100, 1304 | "groupIds": [], 1305 | "frameId": null, 1306 | "roundness": null, 1307 | "seed": 1750613258, 1308 | "version": 269, 1309 | "versionNonce": 1051645578, 1310 | "isDeleted": false, 1311 | "boundElements": null, 1312 | "updated": 1708152894030, 1313 | "link": null, 1314 | "locked": false, 1315 | "points": [ 1316 | [ 1317 | 0, 1318 | 0 1319 | ], 1320 | [ 1321 | 97.5645601717697, 1322 | -28.885684175528866 1323 | ] 1324 | ], 1325 | "lastCommittedPoint": null, 1326 | "startBinding": null, 1327 | "endBinding": null, 1328 | "startArrowhead": null, 1329 | "endArrowhead": "arrow" 1330 | }, 1331 | { 1332 | "id": "bp12sM2g4YgkzIcda21zH", 1333 | "type": "arrow", 1334 | "x": 1134.115299352991, 1335 | "y": 434.87869057549347, 1336 | "width": 102.6216948709341, 1337 | "height": 1.7119946912702062, 1338 | "angle": 0, 1339 | "strokeColor": "#1e1e1e", 1340 | "backgroundColor": "transparent", 1341 | "fillStyle": "solid", 1342 | "strokeWidth": 1, 1343 | "strokeStyle": "solid", 1344 | "roughness": 0, 1345 | "opacity": 100, 1346 | "groupIds": [], 1347 | "frameId": null, 1348 | "roundness": null, 1349 | "seed": 654125462, 1350 | "version": 185, 1351 | "versionNonce": 1765224214, 1352 | "isDeleted": false, 1353 | "boundElements": null, 1354 | "updated": 1708152894030, 1355 | "link": null, 1356 | "locked": false, 1357 | "points": [ 1358 | [ 1359 | 0, 1360 | 0 1361 | ], 1362 | [ 1363 | 102.6216948709341, 1364 | -1.7119946912702062 1365 | ] 1366 | ], 1367 | "lastCommittedPoint": null, 1368 | "startBinding": null, 1369 | "endBinding": { 1370 | "elementId": "5W1On54kZfnWsiR_j6tzk", 1371 | "focus": 0.4326703652149958, 1372 | "gap": 6.930521556149188 1373 | }, 1374 | "startArrowhead": null, 1375 | "endArrowhead": "arrow" 1376 | }, 1377 | { 1378 | "id": "NSbd_kEYsx6RMpnstDjdE", 1379 | "type": "arrow", 1380 | "x": 1136.362350607324, 1381 | "y": 478.30981923107163, 1382 | "width": 80.03976232628156, 1383 | "height": 29.85731225497034, 1384 | "angle": 0, 1385 | "strokeColor": "#1e1e1e", 1386 | "backgroundColor": "transparent", 1387 | "fillStyle": "solid", 1388 | "strokeWidth": 1, 1389 | "strokeStyle": "solid", 1390 | "roughness": 0, 1391 | "opacity": 100, 1392 | "groupIds": [], 1393 | "frameId": null, 1394 | "roundness": null, 1395 | "seed": 1587648202, 1396 | "version": 151, 1397 | "versionNonce": 1281848650, 1398 | "isDeleted": false, 1399 | "boundElements": null, 1400 | "updated": 1708152894030, 1401 | "link": null, 1402 | "locked": false, 1403 | "points": [ 1404 | [ 1405 | 0, 1406 | 0 1407 | ], 1408 | [ 1409 | 80.03976232628156, 1410 | 29.85731225497034 1411 | ] 1412 | ], 1413 | "lastCommittedPoint": null, 1414 | "startBinding": null, 1415 | "endBinding": { 1416 | "elementId": "OteXjaRayEA6GMIWtAhlL", 1417 | "focus": -0.7393436448715983, 1418 | "gap": 15.160600176623802 1419 | }, 1420 | "startArrowhead": null, 1421 | "endArrowhead": "arrow" 1422 | }, 1423 | { 1424 | "id": "nvWrKGBRtPs5ucCaVIU2j", 1425 | "type": "text", 1426 | "x": 1221.8218897011639, 1427 | "y": 276.7411875952272, 1428 | "width": 206.25, 1429 | "height": 19.2, 1430 | "angle": 0, 1431 | "strokeColor": "#1e1e1e", 1432 | "backgroundColor": "transparent", 1433 | "fillStyle": "solid", 1434 | "strokeWidth": 1, 1435 | "strokeStyle": "solid", 1436 | "roughness": 0, 1437 | "opacity": 100, 1438 | "groupIds": [], 1439 | "frameId": null, 1440 | "roundness": null, 1441 | "seed": 1955520266, 1442 | "version": 126, 1443 | "versionNonce": 208507734, 1444 | "isDeleted": false, 1445 | "boundElements": [ 1446 | { 1447 | "id": "B2yB337o0qKT-3VK87Blw", 1448 | "type": "arrow" 1449 | }, 1450 | { 1451 | "id": "nE_pM9xkb5znTic9Tsj1i", 1452 | "type": "arrow" 1453 | } 1454 | ], 1455 | "updated": 1708152913611, 1456 | "link": null, 1457 | "locked": false, 1458 | "text": "Hamburg=12.0/12.0/12.0", 1459 | "fontSize": 16, 1460 | "fontFamily": 3, 1461 | "textAlign": "center", 1462 | "verticalAlign": "top", 1463 | "baseline": 15, 1464 | "containerId": null, 1465 | "originalText": "Hamburg=12.0/12.0/12.0", 1466 | "lineHeight": 1.2 1467 | }, 1468 | { 1469 | "type": "text", 1470 | "version": 220, 1471 | "versionNonce": 475271370, 1472 | "isDeleted": false, 1473 | "id": "gW-bUZxZVMJqSqcxOrc8d", 1474 | "fillStyle": "solid", 1475 | "strokeWidth": 1, 1476 | "strokeStyle": "solid", 1477 | "roughness": 0, 1478 | "opacity": 100, 1479 | "angle": 0, 1480 | "x": 1248.6500897987537, 1481 | "y": 351.2886816262619, 1482 | "strokeColor": "#1e1e1e", 1483 | "backgroundColor": "transparent", 1484 | "width": 168.75, 1485 | "height": 19.2, 1486 | "seed": 2002376778, 1487 | "groupIds": [], 1488 | "frameId": null, 1489 | "roundness": null, 1490 | "boundElements": [], 1491 | "updated": 1708152937944, 1492 | "link": null, 1493 | "locked": false, 1494 | "fontSize": 16, 1495 | "fontFamily": 3, 1496 | "text": "London=8.9/8.9/8.9", 1497 | "textAlign": "center", 1498 | "verticalAlign": "top", 1499 | "containerId": null, 1500 | "originalText": "London=8.9/8.9/8.9", 1501 | "lineHeight": 1.2, 1502 | "baseline": 15 1503 | }, 1504 | { 1505 | "type": "text", 1506 | "version": 384, 1507 | "versionNonce": 1213087958, 1508 | "isDeleted": false, 1509 | "id": "5W1On54kZfnWsiR_j6tzk", 1510 | "fillStyle": "solid", 1511 | "strokeWidth": 1, 1512 | "strokeStyle": "solid", 1513 | "roughness": 0, 1514 | "opacity": 100, 1515 | "angle": 0, 1516 | "x": 1243.6675157800744, 1517 | "y": 426.71741343743065, 1518 | "strokeColor": "#1e1e1e", 1519 | "backgroundColor": "transparent", 1520 | "width": 187.5, 1521 | "height": 19.2, 1522 | "seed": 1300832150, 1523 | "groupIds": [], 1524 | "frameId": null, 1525 | "roundness": null, 1526 | "boundElements": [ 1527 | { 1528 | "id": "bp12sM2g4YgkzIcda21zH", 1529 | "type": "arrow" 1530 | }, 1531 | { 1532 | "id": "i27xMc4ZbHLtYPcknK2Pc", 1533 | "type": "arrow" 1534 | } 1535 | ], 1536 | "updated": 1708152924284, 1537 | "link": null, 1538 | "locked": false, 1539 | "fontSize": 16, 1540 | "fontFamily": 3, 1541 | "text": "Dubai=26.9/32.9/38.8", 1542 | "textAlign": "center", 1543 | "verticalAlign": "top", 1544 | "containerId": null, 1545 | "originalText": "Dubai=26.9/32.9/38.8", 1546 | "lineHeight": 1.2, 1547 | "baseline": 15 1548 | }, 1549 | { 1550 | "type": "text", 1551 | "version": 374, 1552 | "versionNonce": 617491146, 1553 | "isDeleted": false, 1554 | "id": "OteXjaRayEA6GMIWtAhlL", 1555 | "fillStyle": "solid", 1556 | "strokeWidth": 1, 1557 | "strokeStyle": "solid", 1558 | "roughness": 0, 1559 | "opacity": 100, 1560 | "angle": 0, 1561 | "x": 1231.5627131102294, 1562 | "y": 506.6961698473049, 1563 | "strokeColor": "#1e1e1e", 1564 | "backgroundColor": "transparent", 1565 | "width": 196.875, 1566 | "height": 19.2, 1567 | "seed": 2043628438, 1568 | "groupIds": [], 1569 | "frameId": null, 1570 | "roundness": null, 1571 | "boundElements": [ 1572 | { 1573 | "id": "NSbd_kEYsx6RMpnstDjdE", 1574 | "type": "arrow" 1575 | } 1576 | ], 1577 | "updated": 1708152894030, 1578 | "link": null, 1579 | "locked": false, 1580 | "fontSize": 16, 1581 | "fontFamily": 3, 1582 | "text": "Cracow=12.6/12.6/12.6", 1583 | "textAlign": "center", 1584 | "verticalAlign": "top", 1585 | "containerId": null, 1586 | "originalText": "Cracow=12.6/12.6/12.6", 1587 | "lineHeight": 1.2, 1588 | "baseline": 15 1589 | }, 1590 | { 1591 | "id": "nE_pM9xkb5znTic9Tsj1i", 1592 | "type": "arrow", 1593 | "x": 1437.5739790416392, 1594 | "y": 291.0826617772927, 1595 | "width": 109.98349962949487, 1596 | "height": 59.973899654671186, 1597 | "angle": 0, 1598 | "strokeColor": "#1e1e1e", 1599 | "backgroundColor": "transparent", 1600 | "fillStyle": "solid", 1601 | "strokeWidth": 1, 1602 | "strokeStyle": "solid", 1603 | "roughness": 0, 1604 | "opacity": 100, 1605 | "groupIds": [], 1606 | "frameId": null, 1607 | "roundness": null, 1608 | "seed": 2063658762, 1609 | "version": 122, 1610 | "versionNonce": 1657470090, 1611 | "isDeleted": false, 1612 | "boundElements": null, 1613 | "updated": 1708152935335, 1614 | "link": null, 1615 | "locked": false, 1616 | "points": [ 1617 | [ 1618 | 0, 1619 | 0 1620 | ], 1621 | [ 1622 | 109.98349962949487, 1623 | 59.973899654671186 1624 | ] 1625 | ], 1626 | "lastCommittedPoint": null, 1627 | "startBinding": { 1628 | "elementId": "nvWrKGBRtPs5ucCaVIU2j", 1629 | "focus": -0.8608621922056133, 1630 | "gap": 9.502089340475322 1631 | }, 1632 | "endBinding": null, 1633 | "startArrowhead": null, 1634 | "endArrowhead": "arrow" 1635 | }, 1636 | { 1637 | "id": "u3R5ePspr3uF3j5IxuacW", 1638 | "type": "arrow", 1639 | "x": 1433.4865826423547, 1640 | "y": 362.668020854806, 1641 | "width": 98.00092088184238, 1642 | "height": 27.528919778761065, 1643 | "angle": 0, 1644 | "strokeColor": "#1e1e1e", 1645 | "backgroundColor": "transparent", 1646 | "fillStyle": "solid", 1647 | "strokeWidth": 1, 1648 | "strokeStyle": "solid", 1649 | "roughness": 0, 1650 | "opacity": 100, 1651 | "groupIds": [], 1652 | "frameId": null, 1653 | "roundness": null, 1654 | "seed": 1533625290, 1655 | "version": 132, 1656 | "versionNonce": 298832534, 1657 | "isDeleted": false, 1658 | "boundElements": null, 1659 | "updated": 1708152944745, 1660 | "link": null, 1661 | "locked": false, 1662 | "points": [ 1663 | [ 1664 | 0, 1665 | 0 1666 | ], 1667 | [ 1668 | 98.00092088184238, 1669 | 27.528919778761065 1670 | ] 1671 | ], 1672 | "lastCommittedPoint": null, 1673 | "startBinding": null, 1674 | "endBinding": { 1675 | "elementId": "obb78i_3l_BT1RCnAhGP6", 1676 | "focus": -0.3003917193994629, 1677 | "gap": 15.216300351605469 1678 | }, 1679 | "startArrowhead": null, 1680 | "endArrowhead": "arrow" 1681 | }, 1682 | { 1683 | "id": "i27xMc4ZbHLtYPcknK2Pc", 1684 | "type": "arrow", 1685 | "x": 1446.4147530943196, 1686 | "y": 434.6194154307628, 1687 | "width": 85.78448612129569, 1688 | "height": 1.0472682316573128, 1689 | "angle": 0, 1690 | "strokeColor": "#1e1e1e", 1691 | "backgroundColor": "transparent", 1692 | "fillStyle": "solid", 1693 | "strokeWidth": 1, 1694 | "strokeStyle": "solid", 1695 | "roughness": 0, 1696 | "opacity": 100, 1697 | "groupIds": [], 1698 | "frameId": null, 1699 | "roundness": null, 1700 | "seed": 1677852874, 1701 | "version": 146, 1702 | "versionNonce": 2013456906, 1703 | "isDeleted": false, 1704 | "boundElements": null, 1705 | "updated": 1708152953284, 1706 | "link": null, 1707 | "locked": false, 1708 | "points": [ 1709 | [ 1710 | 0, 1711 | 0 1712 | ], 1713 | [ 1714 | 85.78448612129569, 1715 | -1.0472682316573128 1716 | ] 1717 | ], 1718 | "lastCommittedPoint": null, 1719 | "startBinding": { 1720 | "elementId": "5W1On54kZfnWsiR_j6tzk", 1721 | "focus": -0.03418912481698456, 1722 | "gap": 15.24723731424524 1723 | }, 1724 | "endBinding": { 1725 | "elementId": "obb78i_3l_BT1RCnAhGP6", 1726 | "focus": -0.6846594729254332, 1727 | "gap": 14.50456466018727 1728 | }, 1729 | "startArrowhead": null, 1730 | "endArrowhead": "arrow" 1731 | }, 1732 | { 1733 | "id": "OyWmVR9LlbNW6rDyTkC0Y", 1734 | "type": "arrow", 1735 | "x": 1445.718268882004, 1736 | "y": 517.5366234809186, 1737 | "width": 100.44115753813185, 1738 | "height": 51.870280425244744, 1739 | "angle": 0, 1740 | "strokeColor": "#1e1e1e", 1741 | "backgroundColor": "transparent", 1742 | "fillStyle": "solid", 1743 | "strokeWidth": 1, 1744 | "strokeStyle": "solid", 1745 | "roughness": 0, 1746 | "opacity": 100, 1747 | "groupIds": [], 1748 | "frameId": null, 1749 | "roundness": null, 1750 | "seed": 116609994, 1751 | "version": 119, 1752 | "versionNonce": 1252198934, 1753 | "isDeleted": false, 1754 | "boundElements": null, 1755 | "updated": 1708152959883, 1756 | "link": null, 1757 | "locked": false, 1758 | "points": [ 1759 | [ 1760 | 0, 1761 | 0 1762 | ], 1763 | [ 1764 | 100.44115753813185, 1765 | -51.870280425244744 1766 | ] 1767 | ], 1768 | "lastCommittedPoint": null, 1769 | "startBinding": null, 1770 | "endBinding": null, 1771 | "startArrowhead": null, 1772 | "endArrowhead": "arrow" 1773 | }, 1774 | { 1775 | "id": "4U27w7YKQxTJgcQ59GWFk", 1776 | "type": "text", 1777 | "x": 1263.9729545590808, 1778 | "y": 567.5106366711718, 1779 | "width": 159.375, 1780 | "height": 19.2, 1781 | "angle": 0, 1782 | "strokeColor": "#1e1e1e", 1783 | "backgroundColor": "transparent", 1784 | "fillStyle": "solid", 1785 | "strokeWidth": 1, 1786 | "strokeStyle": "solid", 1787 | "roughness": 0, 1788 | "opacity": 100, 1789 | "groupIds": [], 1790 | "frameId": null, 1791 | "roundness": null, 1792 | "seed": 255525718, 1793 | "version": 104, 1794 | "versionNonce": 2055219862, 1795 | "isDeleted": false, 1796 | "boundElements": null, 1797 | "updated": 1708153051373, 1798 | "link": null, 1799 | "locked": false, 1800 | "text": "worker goroutines", 1801 | "fontSize": 16, 1802 | "fontFamily": 3, 1803 | "textAlign": "center", 1804 | "verticalAlign": "top", 1805 | "baseline": 15, 1806 | "containerId": null, 1807 | "originalText": "worker goroutines", 1808 | "lineHeight": 1.2 1809 | } 1810 | ], 1811 | "appState": { 1812 | "gridSize": null, 1813 | "viewBackgroundColor": "#ffffff" 1814 | }, 1815 | "files": {} 1816 | } -------------------------------------------------------------------------------- /excalidraw/iteration-2.excalidraw: -------------------------------------------------------------------------------- 1 | { 2 | "type": "excalidraw", 3 | "version": 2, 4 | "source": "https://excalidraw.com", 5 | "elements": [ 6 | { 7 | "type": "rectangle", 8 | "version": 483, 9 | "versionNonce": 1345815702, 10 | "isDeleted": false, 11 | "id": "g7ehsVND-quFuEQITJ1e4", 12 | "fillStyle": "solid", 13 | "strokeWidth": 2, 14 | "strokeStyle": "solid", 15 | "roughness": 1, 16 | "opacity": 100, 17 | "angle": 0, 18 | "x": 190.01953125, 19 | "y": 274.22265625, 20 | "strokeColor": "#1e1e1e", 21 | "backgroundColor": "transparent", 22 | "width": 206.08984375, 23 | "height": 342.5859375, 24 | "seed": 1557179000, 25 | "groupIds": [], 26 | "frameId": null, 27 | "roundness": { 28 | "type": 3 29 | }, 30 | "boundElements": [ 31 | { 32 | "id": "gawhb2bGF4y3b5NWw-jA2", 33 | "type": "arrow" 34 | } 35 | ], 36 | "updated": 1708153878332, 37 | "link": null, 38 | "locked": false 39 | }, 40 | { 41 | "type": "text", 42 | "version": 648, 43 | "versionNonce": 128179389, 44 | "isDeleted": false, 45 | "id": "0wA_sDUOfrpKP2CcQ2I4-", 46 | "fillStyle": "solid", 47 | "strokeWidth": 2, 48 | "strokeStyle": "solid", 49 | "roughness": 1, 50 | "opacity": 100, 51 | "angle": 0, 52 | "x": 221.5390625, 53 | "y": 307.01953125, 54 | "strokeColor": "#1e1e1e", 55 | "backgroundColor": "transparent", 56 | "width": 140.75987243652344, 57 | "height": 275, 58 | "seed": 1921711480, 59 | "groupIds": [], 60 | "frameId": null, 61 | "roundness": null, 62 | "boundElements": [], 63 | "updated": 1708153893154, 64 | "link": null, 65 | "locked": false, 66 | "fontSize": 20, 67 | "fontFamily": 1, 68 | "text": "Hamburg;12.0\nLondon;8.9\nDubai;38.8\nCracow;12.6\nDubai;26.9\nIstanbul;6.2\nRoseau;34.4\nConakry;31.2\nIstanbul;23.0\nSt. John's;15.2\n....", 69 | "textAlign": "left", 70 | "verticalAlign": "top", 71 | "containerId": null, 72 | "originalText": "Hamburg;12.0\nLondon;8.9\nDubai;38.8\nCracow;12.6\nDubai;26.9\nIstanbul;6.2\nRoseau;34.4\nConakry;31.2\nIstanbul;23.0\nSt. John's;15.2\n....", 73 | "lineHeight": 1.25, 74 | "baseline": 268 75 | }, 76 | { 77 | "type": "rectangle", 78 | "version": 740, 79 | "versionNonce": 1195803094, 80 | "isDeleted": false, 81 | "id": "08tc5N08rYftnhcGbAlK8", 82 | "fillStyle": "solid", 83 | "strokeWidth": 2, 84 | "strokeStyle": "solid", 85 | "roughness": 1, 86 | "opacity": 100, 87 | "angle": 0, 88 | "x": 561.4240724666608, 89 | "y": 409.6923419249687, 90 | "strokeColor": "#1e1e1e", 91 | "backgroundColor": "transparent", 92 | "width": 133.323456386206, 93 | "height": 36.61247133047962, 94 | "seed": 1856583240, 95 | "groupIds": [], 96 | "frameId": null, 97 | "roundness": { 98 | "type": 3 99 | }, 100 | "boundElements": [ 101 | { 102 | "id": "gawhb2bGF4y3b5NWw-jA2", 103 | "type": "arrow" 104 | } 105 | ], 106 | "updated": 1708153878332, 107 | "link": null, 108 | "locked": false 109 | }, 110 | { 111 | "type": "text", 112 | "version": 392, 113 | "versionNonce": 446896531, 114 | "isDeleted": false, 115 | "id": "6V2XA-VEtmOQLHB_U6Sl8", 116 | "fillStyle": "solid", 117 | "strokeWidth": 2, 118 | "strokeStyle": "solid", 119 | "roughness": 1, 120 | "opacity": 100, 121 | "angle": 0, 122 | "x": 575.7113238840794, 123 | "y": 417.3097516156081, 124 | "strokeColor": "#1e1e1e", 125 | "backgroundColor": "transparent", 126 | "width": 104.69990539550781, 127 | "height": 25, 128 | "seed": 1669493576, 129 | "groupIds": [], 130 | "frameId": null, 131 | "roundness": null, 132 | "boundElements": [], 133 | "updated": 1708153893154, 134 | "link": null, 135 | "locked": false, 136 | "fontSize": 20, 137 | "fontFamily": 1, 138 | "text": "Dubai;26.9", 139 | "textAlign": "left", 140 | "verticalAlign": "top", 141 | "containerId": null, 142 | "originalText": "Dubai;26.9", 143 | "lineHeight": 1.25, 144 | "baseline": 18 145 | }, 146 | { 147 | "type": "arrow", 148 | "version": 1227, 149 | "versionNonce": 369350422, 150 | "isDeleted": false, 151 | "id": "gawhb2bGF4y3b5NWw-jA2", 152 | "fillStyle": "solid", 153 | "strokeWidth": 1, 154 | "strokeStyle": "solid", 155 | "roughness": 0, 156 | "opacity": 100, 157 | "angle": 0, 158 | "x": 409.740844254903, 159 | "y": 426.07894091318894, 160 | "strokeColor": "#1e1e1e", 161 | "backgroundColor": "transparent", 162 | "width": 143.33898903667284, 163 | "height": 0.4903357038880358, 164 | "seed": 1537847624, 165 | "groupIds": [], 166 | "frameId": null, 167 | "roundness": { 168 | "type": 2 169 | }, 170 | "boundElements": [], 171 | "updated": 1708153878332, 172 | "link": null, 173 | "locked": false, 174 | "startBinding": { 175 | "elementId": "g7ehsVND-quFuEQITJ1e4", 176 | "gap": 13.631469254902925, 177 | "focus": -0.11091106762308113 178 | }, 179 | "endBinding": { 180 | "elementId": "08tc5N08rYftnhcGbAlK8", 181 | "gap": 8.344239175085022, 182 | "focus": 0.14387150195682052 183 | }, 184 | "lastCommittedPoint": null, 185 | "startArrowhead": null, 186 | "endArrowhead": "arrow", 187 | "points": [ 188 | [ 189 | 0, 190 | 0 191 | ], 192 | [ 193 | 143.33898903667284, 194 | -0.4903357038880358 195 | ] 196 | ] 197 | }, 198 | { 199 | "type": "rectangle", 200 | "version": 1907, 201 | "versionNonce": 504974666, 202 | "isDeleted": false, 203 | "id": "mJGslcYXqDvCIAcbI9Fsh", 204 | "fillStyle": "hachure", 205 | "strokeWidth": 2, 206 | "strokeStyle": "solid", 207 | "roughness": 1, 208 | "opacity": 100, 209 | "angle": 0, 210 | "x": 974.3121464791866, 211 | "y": 368.98055330454645, 212 | "strokeColor": "#000000", 213 | "backgroundColor": "transparent", 214 | "width": 141.63715164456323, 215 | "height": 45.451073718264034, 216 | "seed": 1847850098, 217 | "groupIds": [ 218 | "0HkrLMsTNbVDWFZhnFL9W" 219 | ], 220 | "frameId": null, 221 | "roundness": null, 222 | "boundElements": [], 223 | "updated": 1708153878332, 224 | "link": null, 225 | "locked": false 226 | }, 227 | { 228 | "type": "rectangle", 229 | "version": 1659, 230 | "versionNonce": 752161802, 231 | "isDeleted": false, 232 | "id": "h9fYE9wEJ9WPmHCIri0fG", 233 | "fillStyle": "hachure", 234 | "strokeWidth": 2, 235 | "strokeStyle": "solid", 236 | "roughness": 1, 237 | "opacity": 100, 238 | "angle": 0, 239 | "x": 855.8362462531318, 240 | "y": 370.85588989325504, 241 | "strokeColor": "#000000", 242 | "backgroundColor": "transparent", 243 | "width": 118.28837125315864, 244 | "height": 43.57573712955543, 245 | "seed": 1179686450, 246 | "groupIds": [ 247 | "0HkrLMsTNbVDWFZhnFL9W" 248 | ], 249 | "frameId": null, 250 | "roundness": null, 251 | "boundElements": [ 252 | { 253 | "type": "text", 254 | "id": "ee2WQ2HW8ZVBuqL7bCgoH" 255 | } 256 | ], 257 | "updated": 1708153878332, 258 | "link": null, 259 | "locked": false 260 | }, 261 | { 262 | "type": "text", 263 | "version": 560, 264 | "versionNonce": 96307606, 265 | "isDeleted": false, 266 | "id": "ee2WQ2HW8ZVBuqL7bCgoH", 267 | "fillStyle": "solid", 268 | "strokeWidth": 2, 269 | "strokeStyle": "solid", 270 | "roughness": 1, 271 | "opacity": 100, 272 | "angle": 0, 273 | "x": 883.0890897166252, 274 | "y": 380.2249027321712, 275 | "strokeColor": "#1e1e1e", 276 | "backgroundColor": "transparent", 277 | "width": 63.782684326171875, 278 | "height": 24.837711451723123, 279 | "seed": 853858826, 280 | "groupIds": [ 281 | "0HkrLMsTNbVDWFZhnFL9W" 282 | ], 283 | "frameId": null, 284 | "roundness": null, 285 | "boundElements": [], 286 | "updated": 1708153878332, 287 | "link": null, 288 | "locked": false, 289 | "fontSize": 19.8701691613785, 290 | "fontFamily": 1, 291 | "text": "London", 292 | "textAlign": "center", 293 | "verticalAlign": "middle", 294 | "containerId": "h9fYE9wEJ9WPmHCIri0fG", 295 | "originalText": "London", 296 | "lineHeight": 1.25, 297 | "baseline": 19 298 | }, 299 | { 300 | "type": "rectangle", 301 | "version": 1937, 302 | "versionNonce": 1709834954, 303 | "isDeleted": false, 304 | "id": "XDDGUiVk3PzO3yterSUiz", 305 | "fillStyle": "hachure", 306 | "strokeWidth": 2, 307 | "strokeStyle": "solid", 308 | "roughness": 1, 309 | "opacity": 100, 310 | "angle": 0, 311 | "x": 974.3121464791866, 312 | "y": 498.6322604290161, 313 | "strokeColor": "#000000", 314 | "backgroundColor": "transparent", 315 | "width": 138.2954303712264, 316 | "height": 46.60782338980397, 317 | "seed": 1006829554, 318 | "groupIds": [ 319 | "qkVx5s5KjsNvZoWxHYLE0" 320 | ], 321 | "frameId": null, 322 | "roundness": null, 323 | "boundElements": [], 324 | "updated": 1708153878332, 325 | "link": null, 326 | "locked": false 327 | }, 328 | { 329 | "type": "rectangle", 330 | "version": 1741, 331 | "versionNonce": 1204020950, 332 | "isDeleted": false, 333 | "id": "v4_RPmrKtagPZPCkoDdgR", 334 | "fillStyle": "hachure", 335 | "strokeWidth": 2, 336 | "strokeStyle": "solid", 337 | "roughness": 1, 338 | "opacity": 100, 339 | "angle": 0, 340 | "x": 855.8362462531318, 341 | "y": 501.66434668926456, 342 | "strokeColor": "#000000", 343 | "backgroundColor": "transparent", 344 | "width": 118.28837125315864, 345 | "height": 43.57573712955543, 346 | "seed": 725758386, 347 | "groupIds": [ 348 | "qkVx5s5KjsNvZoWxHYLE0" 349 | ], 350 | "frameId": null, 351 | "roundness": null, 352 | "boundElements": [], 353 | "updated": 1708153878332, 354 | "link": null, 355 | "locked": false 356 | }, 357 | { 358 | "type": "rectangle", 359 | "version": 2250, 360 | "versionNonce": 1945311626, 361 | "isDeleted": false, 362 | "id": "c7kg4AZS565nhwYsLsMVQ", 363 | "fillStyle": "hachure", 364 | "strokeWidth": 2, 365 | "strokeStyle": "solid", 366 | "roughness": 1, 367 | "opacity": 100, 368 | "angle": 0, 369 | "x": 974.3063043091283, 370 | "y": 325.14015279016485, 371 | "strokeColor": "#000000", 372 | "backgroundColor": "transparent", 373 | "width": 142.1571047797507, 374 | "height": 44.94280492319335, 375 | "seed": 1463102322, 376 | "groupIds": [ 377 | "RGDUNqrgvYPsK9zeVxhnI" 378 | ], 379 | "frameId": null, 380 | "roundness": null, 381 | "boundElements": [ 382 | { 383 | "id": "B2yB337o0qKT-3VK87Blw", 384 | "type": "arrow" 385 | } 386 | ], 387 | "updated": 1708153878332, 388 | "link": null, 389 | "locked": false 390 | }, 391 | { 392 | "type": "rectangle", 393 | "version": 1891, 394 | "versionNonce": 1982552138, 395 | "isDeleted": false, 396 | "id": "Qp04Q1WaTvUONGksdBg6o", 397 | "fillStyle": "hachure", 398 | "strokeWidth": 2, 399 | "strokeStyle": "solid", 400 | "roughness": 1, 401 | "opacity": 100, 402 | "angle": 0, 403 | "x": 855.8304040830735, 404 | "y": 326.5072205838028, 405 | "strokeColor": "#000000", 406 | "backgroundColor": "transparent", 407 | "width": 118.28837125315864, 408 | "height": 43.57573712955543, 409 | "seed": 102952242, 410 | "groupIds": [ 411 | "RGDUNqrgvYPsK9zeVxhnI" 412 | ], 413 | "frameId": null, 414 | "roundness": null, 415 | "boundElements": [ 416 | { 417 | "type": "text", 418 | "id": "ZHpqO8RcweNX8bKwKRwtz" 419 | } 420 | ], 421 | "updated": 1708153878332, 422 | "link": null, 423 | "locked": false 424 | }, 425 | { 426 | "type": "text", 427 | "version": 708, 428 | "versionNonce": 1460447574, 429 | "isDeleted": false, 430 | "id": "ZHpqO8RcweNX8bKwKRwtz", 431 | "fillStyle": "solid", 432 | "strokeWidth": 2, 433 | "strokeStyle": "solid", 434 | "roughness": 1, 435 | "opacity": 100, 436 | "angle": 0, 437 | "x": 876.6453889650239, 438 | "y": 335.87623342271894, 439 | "strokeColor": "#1e1e1e", 440 | "backgroundColor": "transparent", 441 | "width": 76.65840148925781, 442 | "height": 24.837711451723123, 443 | "seed": 1389832138, 444 | "groupIds": [ 445 | "RGDUNqrgvYPsK9zeVxhnI" 446 | ], 447 | "frameId": null, 448 | "roundness": null, 449 | "boundElements": [], 450 | "updated": 1708153878332, 451 | "link": null, 452 | "locked": false, 453 | "fontSize": 19.8701691613785, 454 | "fontFamily": 1, 455 | "text": "Hamburg", 456 | "textAlign": "center", 457 | "verticalAlign": "middle", 458 | "containerId": "Qp04Q1WaTvUONGksdBg6o", 459 | "originalText": "Hamburg", 460 | "lineHeight": 1.25, 461 | "baseline": 19 462 | }, 463 | { 464 | "type": "rectangle", 465 | "version": 1886, 466 | "versionNonce": 1819131658, 467 | "isDeleted": false, 468 | "id": "QiJmkW_yybfpcJXgommNZ", 469 | "fillStyle": "hachure", 470 | "strokeWidth": 2, 471 | "strokeStyle": "solid", 472 | "roughness": 1, 473 | "opacity": 100, 474 | "angle": 0, 475 | "x": 974.1368813774382, 476 | "y": 412.41784408490224, 477 | "strokeColor": "#000000", 478 | "backgroundColor": "transparent", 479 | "width": 141.96431316782707, 480 | "height": 45.737340051119816, 481 | "seed": 494040818, 482 | "groupIds": [ 483 | "2_lTUjnJqPYiuGLMzjNwJ" 484 | ], 485 | "frameId": null, 486 | "roundness": null, 487 | "boundElements": [], 488 | "updated": 1708153878332, 489 | "link": null, 490 | "locked": false 491 | }, 492 | { 493 | "type": "rectangle", 494 | "version": 1680, 495 | "versionNonce": 697896598, 496 | "isDeleted": false, 497 | "id": "TGzZHf5FD6q1l367EypZx", 498 | "fillStyle": "hachure", 499 | "strokeWidth": 2, 500 | "strokeStyle": "solid", 501 | "roughness": 1, 502 | "opacity": 100, 503 | "angle": 0, 504 | "x": 855.6609811513833, 505 | "y": 414.57944700646664, 506 | "strokeColor": "#000000", 507 | "backgroundColor": "transparent", 508 | "width": 118.28837125315864, 509 | "height": 43.57573712955543, 510 | "seed": 1034602674, 511 | "groupIds": [ 512 | "2_lTUjnJqPYiuGLMzjNwJ" 513 | ], 514 | "frameId": null, 515 | "roundness": null, 516 | "boundElements": [ 517 | { 518 | "type": "text", 519 | "id": "7w0bSWRKYnuuQJgc1QDg6" 520 | } 521 | ], 522 | "updated": 1708153878332, 523 | "link": null, 524 | "locked": false 525 | }, 526 | { 527 | "type": "text", 528 | "version": 571, 529 | "versionNonce": 590695882, 530 | "isDeleted": false, 531 | "id": "7w0bSWRKYnuuQJgc1QDg6", 532 | "fillStyle": "solid", 533 | "strokeWidth": 2, 534 | "strokeStyle": "solid", 535 | "roughness": 1, 536 | "opacity": 100, 537 | "angle": 0, 538 | "x": 887.5634217828455, 539 | "y": 423.9484598453828, 540 | "strokeColor": "#1e1e1e", 541 | "backgroundColor": "transparent", 542 | "width": 54.483489990234375, 543 | "height": 24.837711451723123, 544 | "seed": 1806284170, 545 | "groupIds": [ 546 | "2_lTUjnJqPYiuGLMzjNwJ" 547 | ], 548 | "frameId": null, 549 | "roundness": null, 550 | "boundElements": [], 551 | "updated": 1708153878332, 552 | "link": null, 553 | "locked": false, 554 | "fontSize": 19.8701691613785, 555 | "fontFamily": 1, 556 | "text": "Dubai", 557 | "textAlign": "center", 558 | "verticalAlign": "middle", 559 | "containerId": "TGzZHf5FD6q1l367EypZx", 560 | "originalText": "Dubai", 561 | "lineHeight": 1.25, 562 | "baseline": 19 563 | }, 564 | { 565 | "type": "rectangle", 566 | "version": 1952, 567 | "versionNonce": 1340525526, 568 | "isDeleted": false, 569 | "id": "DC86C3pauXtePubu2oZh6", 570 | "fillStyle": "hachure", 571 | "strokeWidth": 2, 572 | "strokeStyle": "solid", 573 | "roughness": 1, 574 | "opacity": 100, 575 | "angle": 0, 576 | "x": 974.3121464791866, 577 | "y": 459.36627907027923, 578 | "strokeColor": "#000000", 579 | "backgroundColor": "transparent", 580 | "width": 139.60991863434003, 581 | "height": 42.33135490714137, 582 | "seed": 1584587378, 583 | "groupIds": [ 584 | "ls8IcbYTXvv3VzKKmJ0hS" 585 | ], 586 | "frameId": null, 587 | "roundness": null, 588 | "boundElements": [], 589 | "updated": 1708153878332, 590 | "link": null, 591 | "locked": false 592 | }, 593 | { 594 | "type": "rectangle", 595 | "version": 1716, 596 | "versionNonce": 530384010, 597 | "isDeleted": false, 598 | "id": "VkO1IEH8EZ2KPOG-xHk-r", 599 | "fillStyle": "hachure", 600 | "strokeWidth": 2, 601 | "strokeStyle": "solid", 602 | "roughness": 1, 603 | "opacity": 100, 604 | "angle": 0, 605 | "x": 855.8362462531318, 606 | "y": 458.1218968478652, 607 | "strokeColor": "#000000", 608 | "backgroundColor": "transparent", 609 | "width": 118.28837125315864, 610 | "height": 43.57573712955543, 611 | "seed": 1787937842, 612 | "groupIds": [ 613 | "ls8IcbYTXvv3VzKKmJ0hS" 614 | ], 615 | "frameId": null, 616 | "roundness": null, 617 | "boundElements": [ 618 | { 619 | "type": "text", 620 | "id": "WugyfMgbjYhQBac0x7IAI" 621 | } 622 | ], 623 | "updated": 1708153878332, 624 | "link": null, 625 | "locked": false 626 | }, 627 | { 628 | "type": "text", 629 | "version": 567, 630 | "versionNonce": 2013978902, 631 | "isDeleted": false, 632 | "id": "WugyfMgbjYhQBac0x7IAI", 633 | "fillStyle": "solid", 634 | "strokeWidth": 2, 635 | "strokeStyle": "solid", 636 | "roughness": 1, 637 | "opacity": 100, 638 | "angle": 0, 639 | "x": 881.1418317210197, 640 | "y": 467.4909096867813, 641 | "strokeColor": "#1e1e1e", 642 | "backgroundColor": "transparent", 643 | "width": 67.67720031738281, 644 | "height": 24.837711451723123, 645 | "seed": 979461002, 646 | "groupIds": [ 647 | "ls8IcbYTXvv3VzKKmJ0hS" 648 | ], 649 | "frameId": null, 650 | "roundness": null, 651 | "boundElements": [], 652 | "updated": 1708153878332, 653 | "link": null, 654 | "locked": false, 655 | "fontSize": 19.8701691613785, 656 | "fontFamily": 1, 657 | "text": "Cracow", 658 | "textAlign": "center", 659 | "verticalAlign": "middle", 660 | "containerId": "VkO1IEH8EZ2KPOG-xHk-r", 661 | "originalText": "Cracow", 662 | "lineHeight": 1.25, 663 | "baseline": 19 664 | }, 665 | { 666 | "type": "text", 667 | "version": 750, 668 | "versionNonce": 669203741, 669 | "isDeleted": false, 670 | "id": "5UQPcQECvEVqnL_z3OLxp", 671 | "fillStyle": "solid", 672 | "strokeWidth": 2, 673 | "strokeStyle": "solid", 674 | "roughness": 1, 675 | "opacity": 100, 676 | "angle": 0, 677 | "x": 884.9073045786099, 678 | "y": 295.5945071823994, 679 | "strokeColor": "#000000", 680 | "backgroundColor": "#ced4da", 681 | "width": 33.3013916015625, 682 | "height": 23.467697493077033, 683 | "seed": 380729010, 684 | "groupIds": [], 685 | "frameId": null, 686 | "roundness": null, 687 | "boundElements": [], 688 | "updated": 1708153893155, 689 | "link": null, 690 | "locked": false, 691 | "fontSize": 18.476780229816047, 692 | "fontFamily": 1, 693 | "text": "KEY", 694 | "textAlign": "left", 695 | "verticalAlign": "top", 696 | "containerId": null, 697 | "originalText": "KEY", 698 | "lineHeight": 1.2701183431952676, 699 | "baseline": 16 700 | }, 701 | { 702 | "type": "text", 703 | "version": 881, 704 | "versionNonce": 684748595, 705 | "isDeleted": false, 706 | "id": "6sYiQnwNfm3owAHnNoLx_", 707 | "fillStyle": "solid", 708 | "strokeWidth": 2, 709 | "strokeStyle": "solid", 710 | "roughness": 1, 711 | "opacity": 100, 712 | "angle": 0, 713 | "x": 1013.1429901425822, 714 | "y": 295.34286916151467, 715 | "strokeColor": "#000000", 716 | "backgroundColor": "#ced4da", 717 | "width": 58.36517333984375, 718 | "height": 23.467697493077033, 719 | "seed": 2121519218, 720 | "groupIds": [], 721 | "frameId": null, 722 | "roundness": null, 723 | "boundElements": [], 724 | "updated": 1708153893155, 725 | "link": null, 726 | "locked": false, 727 | "fontSize": 18.476780229816075, 728 | "fontFamily": 1, 729 | "text": "VALUE", 730 | "textAlign": "left", 731 | "verticalAlign": "top", 732 | "containerId": null, 733 | "originalText": "VALUE", 734 | "lineHeight": 1.2701183431952656, 735 | "baseline": 16 736 | }, 737 | { 738 | "type": "text", 739 | "version": 549, 740 | "versionNonce": 1578602877, 741 | "isDeleted": false, 742 | "id": "WIHlzBjFbgwVaQpLM7oTu", 743 | "fillStyle": "solid", 744 | "strokeWidth": 2, 745 | "strokeStyle": "solid", 746 | "roughness": 1, 747 | "opacity": 100, 748 | "angle": 0, 749 | "x": 989.4615727353421, 750 | "y": 337.4550045887639, 751 | "strokeColor": "#1e1e1e", 752 | "backgroundColor": "transparent", 753 | "width": 38.64710998535156, 754 | "height": 24.837711451723123, 755 | "seed": 2100890774, 756 | "groupIds": [ 757 | "RGDUNqrgvYPsK9zeVxhnI" 758 | ], 759 | "frameId": null, 760 | "roundness": null, 761 | "boundElements": [], 762 | "updated": 1708153893155, 763 | "link": null, 764 | "locked": false, 765 | "fontSize": 19.8701691613785, 766 | "fontFamily": 1, 767 | "text": "12.0", 768 | "textAlign": "left", 769 | "verticalAlign": "top", 770 | "containerId": null, 771 | "originalText": "12.0", 772 | "lineHeight": 1.25, 773 | "baseline": 17 774 | }, 775 | { 776 | "type": "text", 777 | "version": 401, 778 | "versionNonce": 1577193683, 779 | "isDeleted": false, 780 | "id": "2zwV1Mv7qiSMuqiJY8S4p", 781 | "fillStyle": "solid", 782 | "strokeWidth": 2, 783 | "strokeStyle": "solid", 784 | "roughness": 1, 785 | "opacity": 100, 786 | "angle": 0, 787 | "x": 987.4803979892624, 788 | "y": 383.9626131279775, 789 | "strokeColor": "#1e1e1e", 790 | "backgroundColor": "transparent", 791 | "width": 32.74574279785156, 792 | "height": 24.837711451723123, 793 | "seed": 110571862, 794 | "groupIds": [ 795 | "0HkrLMsTNbVDWFZhnFL9W" 796 | ], 797 | "frameId": null, 798 | "roundness": null, 799 | "boundElements": [], 800 | "updated": 1708153893155, 801 | "link": null, 802 | "locked": false, 803 | "fontSize": 19.8701691613785, 804 | "fontFamily": 1, 805 | "text": "8.9", 806 | "textAlign": "left", 807 | "verticalAlign": "top", 808 | "containerId": null, 809 | "originalText": "8.9", 810 | "lineHeight": 1.25, 811 | "baseline": 17 812 | }, 813 | { 814 | "type": "text", 815 | "version": 412, 816 | "versionNonce": 125983197, 817 | "isDeleted": false, 818 | "id": "TFE4kqCND0XLbFSPabbGR", 819 | "fillStyle": "solid", 820 | "strokeWidth": 2, 821 | "strokeStyle": "solid", 822 | "roughness": 1, 823 | "opacity": 100, 824 | "angle": 0, 825 | "x": 986.3116244294454, 826 | "y": 426.864584096748, 827 | "strokeColor": "#1e1e1e", 828 | "backgroundColor": "transparent", 829 | "width": 108.82792663574219, 830 | "height": 24.837711451723123, 831 | "seed": 418625750, 832 | "groupIds": [ 833 | "2_lTUjnJqPYiuGLMzjNwJ" 834 | ], 835 | "frameId": null, 836 | "roundness": null, 837 | "boundElements": [], 838 | "updated": 1708153893155, 839 | "link": null, 840 | "locked": false, 841 | "fontSize": 19.8701691613785, 842 | "fontFamily": 1, 843 | "text": "38.8, 26.9", 844 | "textAlign": "left", 845 | "verticalAlign": "top", 846 | "containerId": null, 847 | "originalText": "38.8, 26.9", 848 | "lineHeight": 1.25, 849 | "baseline": 17 850 | }, 851 | { 852 | "type": "text", 853 | "version": 401, 854 | "versionNonce": 1808694899, 855 | "isDeleted": false, 856 | "id": "EEvKzIPUvf68WK60ek2zD", 857 | "fillStyle": "solid", 858 | "strokeWidth": 2, 859 | "strokeStyle": "solid", 860 | "roughness": 1, 861 | "opacity": 100, 862 | "angle": 0, 863 | "x": 984.4998726150559, 864 | "y": 469.58544779371175, 865 | "strokeColor": "#1e1e1e", 866 | "backgroundColor": "transparent", 867 | "width": 37.693359375, 868 | "height": 24.837711451723123, 869 | "seed": 865740182, 870 | "groupIds": [ 871 | "ls8IcbYTXvv3VzKKmJ0hS" 872 | ], 873 | "frameId": null, 874 | "roundness": null, 875 | "boundElements": [], 876 | "updated": 1708153893155, 877 | "link": null, 878 | "locked": false, 879 | "fontSize": 19.8701691613785, 880 | "fontFamily": 1, 881 | "text": "12.6", 882 | "textAlign": "left", 883 | "verticalAlign": "top", 884 | "containerId": null, 885 | "originalText": "12.6", 886 | "lineHeight": 1.25, 887 | "baseline": 17 888 | }, 889 | { 890 | "type": "arrow", 891 | "version": 1495, 892 | "versionNonce": 226062218, 893 | "isDeleted": false, 894 | "id": "yZBK5-QWVk0e6m0Um2kXS", 895 | "fillStyle": "solid", 896 | "strokeWidth": 1, 897 | "strokeStyle": "solid", 898 | "roughness": 0, 899 | "opacity": 100, 900 | "angle": 0, 901 | "x": 716.6138968238486, 902 | "y": 428.8153606790435, 903 | "strokeColor": "#1e1e1e", 904 | "backgroundColor": "transparent", 905 | "width": 116.47769450345879, 906 | "height": 0.9171943789989427, 907 | "seed": 167149066, 908 | "groupIds": [], 909 | "frameId": null, 910 | "roundness": { 911 | "type": 2 912 | }, 913 | "boundElements": [], 914 | "updated": 1708153878332, 915 | "link": null, 916 | "locked": false, 917 | "startBinding": null, 918 | "endBinding": null, 919 | "lastCommittedPoint": null, 920 | "startArrowhead": null, 921 | "endArrowhead": "arrow", 922 | "points": [ 923 | [ 924 | 0, 925 | 0 926 | ], 927 | [ 928 | 116.47769450345879, 929 | -0.9171943789989427 930 | ] 931 | ] 932 | }, 933 | { 934 | "type": "text", 935 | "version": 426, 936 | "versionNonce": 1563760189, 937 | "isDeleted": false, 938 | "id": "UK95a36C6IFNqw8wSB5CP", 939 | "fillStyle": "solid", 940 | "strokeWidth": 2, 941 | "strokeStyle": "solid", 942 | "roughness": 1, 943 | "opacity": 100, 944 | "angle": 0, 945 | "x": 406.00957543098144, 946 | "y": 381.7682095126095, 947 | "strokeColor": "#1e1e1e", 948 | "backgroundColor": "transparent", 949 | "width": 175.599609375, 950 | "height": 31.272475433088978, 951 | "seed": 1519970506, 952 | "groupIds": [], 953 | "frameId": null, 954 | "roundness": null, 955 | "boundElements": [], 956 | "updated": 1708153893155, 957 | "link": null, 958 | "locked": false, 959 | "fontSize": 13.030198097120408, 960 | "fontFamily": 3, 961 | "text": "read file sequentially \nline by line", 962 | "textAlign": "center", 963 | "verticalAlign": "top", 964 | "containerId": null, 965 | "originalText": "read file sequentially \nline by line", 966 | "lineHeight": 1.2, 967 | "baseline": 28 968 | }, 969 | { 970 | "type": "text", 971 | "version": 563, 972 | "versionNonce": 217856019, 973 | "isDeleted": false, 974 | "id": "cUvEqE-dILr2OErRIEu0f", 975 | "fillStyle": "solid", 976 | "strokeWidth": 2, 977 | "strokeStyle": "solid", 978 | "roughness": 1, 979 | "opacity": 100, 980 | "angle": 0, 981 | "x": 689.777251318086, 982 | "y": 375.0404463016939, 983 | "strokeColor": "#1e1e1e", 984 | "backgroundColor": "transparent", 985 | "width": 157.734375, 986 | "height": 32.31658494830607, 987 | "seed": 203381782, 988 | "groupIds": [], 989 | "frameId": null, 990 | "roundness": null, 991 | "boundElements": [], 992 | "updated": 1708153893155, 993 | "link": null, 994 | "locked": false, 995 | "fontSize": 13.465243728460864, 996 | "fontFamily": 3, 997 | "text": "process city & temp,\ninsert in final map", 998 | "textAlign": "center", 999 | "verticalAlign": "top", 1000 | "containerId": null, 1001 | "originalText": "process city & temp,\ninsert in final map", 1002 | "lineHeight": 1.2, 1003 | "baseline": 29 1004 | }, 1005 | { 1006 | "type": "text", 1007 | "version": 833, 1008 | "versionNonce": 2139504906, 1009 | "isDeleted": false, 1010 | "id": "obb78i_3l_BT1RCnAhGP6", 1011 | "fillStyle": "solid", 1012 | "strokeWidth": 1, 1013 | "strokeStyle": "solid", 1014 | "roughness": 0, 1015 | "opacity": 100, 1016 | "angle": 0, 1017 | "x": 1546.7038038758026, 1018 | "y": 398.0610358742384, 1019 | "strokeColor": "#1e1e1e", 1020 | "backgroundColor": "transparent", 1021 | "width": 290.625, 1022 | "height": 38.4, 1023 | "seed": 261244270, 1024 | "groupIds": [], 1025 | "frameId": null, 1026 | "roundness": null, 1027 | "boundElements": [ 1028 | { 1029 | "id": "u3R5ePspr3uF3j5IxuacW", 1030 | "type": "arrow" 1031 | }, 1032 | { 1033 | "id": "i27xMc4ZbHLtYPcknK2Pc", 1034 | "type": "arrow" 1035 | } 1036 | ], 1037 | "updated": 1708153878333, 1038 | "link": null, 1039 | "locked": false, 1040 | "fontSize": 16, 1041 | "fontFamily": 3, 1042 | "text": "{Hamburg=12.0/12.0/12.0; London\n=8.9/8.9/8.9...}", 1043 | "textAlign": "center", 1044 | "verticalAlign": "top", 1045 | "containerId": null, 1046 | "originalText": "{Hamburg=12.0/12.0/12.0; London\n=8.9/8.9/8.9...}", 1047 | "lineHeight": 1.2, 1048 | "baseline": 34 1049 | }, 1050 | { 1051 | "type": "text", 1052 | "version": 86, 1053 | "versionNonce": 65900490, 1054 | "isDeleted": false, 1055 | "id": "hraiPXQZQCyI1m7grYQTm", 1056 | "fillStyle": "solid", 1057 | "strokeWidth": 1, 1058 | "strokeStyle": "solid", 1059 | "roughness": 0, 1060 | "opacity": 100, 1061 | "angle": 0, 1062 | "x": 239.00333759766227, 1063 | "y": 628.0330257352593, 1064 | "strokeColor": "#1e1e1e", 1065 | "backgroundColor": "transparent", 1066 | "width": 93.75, 1067 | "height": 19.2, 1068 | "seed": 605226902, 1069 | "groupIds": [], 1070 | "frameId": null, 1071 | "roundness": null, 1072 | "boundElements": [], 1073 | "updated": 1708153878333, 1074 | "link": null, 1075 | "locked": false, 1076 | "fontSize": 16, 1077 | "fontFamily": 3, 1078 | "text": "input file", 1079 | "textAlign": "center", 1080 | "verticalAlign": "top", 1081 | "containerId": null, 1082 | "originalText": "input file", 1083 | "lineHeight": 1.2, 1084 | "baseline": 15 1085 | }, 1086 | { 1087 | "type": "text", 1088 | "version": 177, 1089 | "versionNonce": 659270102, 1090 | "isDeleted": false, 1091 | "id": "u2vSu_vA9uWdk3l6caAGT", 1092 | "fillStyle": "solid", 1093 | "strokeWidth": 1, 1094 | "strokeStyle": "solid", 1095 | "roughness": 0, 1096 | "opacity": 100, 1097 | "angle": 0, 1098 | "x": 528.4081300374676, 1099 | "y": 459.3341290935612, 1100 | "strokeColor": "#1e1e1e", 1101 | "backgroundColor": "transparent", 1102 | "width": 206.25, 1103 | "height": 19.2, 1104 | "seed": 1604314890, 1105 | "groupIds": [], 1106 | "frameId": null, 1107 | "roundness": null, 1108 | "boundElements": [], 1109 | "updated": 1708153878333, 1110 | "link": null, 1111 | "locked": false, 1112 | "fontSize": 16, 1113 | "fontFamily": 3, 1114 | "text": "scanned line from file", 1115 | "textAlign": "center", 1116 | "verticalAlign": "top", 1117 | "containerId": null, 1118 | "originalText": "scanned line from file", 1119 | "lineHeight": 1.2, 1120 | "baseline": 15 1121 | }, 1122 | { 1123 | "type": "text", 1124 | "version": 420, 1125 | "versionNonce": 66913930, 1126 | "isDeleted": false, 1127 | "id": "fCzahi-0eDqzZLUR1PrAC", 1128 | "fillStyle": "solid", 1129 | "strokeWidth": 1, 1130 | "strokeStyle": "solid", 1131 | "roughness": 0, 1132 | "opacity": 100, 1133 | "angle": 0, 1134 | "x": 852.0601051552126, 1135 | "y": 557.1286897125314, 1136 | "strokeColor": "#1e1e1e", 1137 | "backgroundColor": "transparent", 1138 | "width": 271.875, 1139 | "height": 38.4, 1140 | "seed": 14773078, 1141 | "groupIds": [], 1142 | "frameId": null, 1143 | "roundness": null, 1144 | "boundElements": [], 1145 | "updated": 1708153878333, 1146 | "link": null, 1147 | "locked": false, 1148 | "fontSize": 16, 1149 | "fontFamily": 3, 1150 | "text": "hashmap storing station with \nthere recorded temperatures", 1151 | "textAlign": "center", 1152 | "verticalAlign": "top", 1153 | "containerId": null, 1154 | "originalText": "hashmap storing station with \nthere recorded temperatures", 1155 | "lineHeight": 1.2, 1156 | "baseline": 34 1157 | }, 1158 | { 1159 | "type": "text", 1160 | "version": 1753, 1161 | "versionNonce": 186908438, 1162 | "isDeleted": false, 1163 | "id": "3BnjY7oCUukUMudxV12Tk", 1164 | "fillStyle": "solid", 1165 | "strokeWidth": 1, 1166 | "strokeStyle": "solid", 1167 | "roughness": 0, 1168 | "opacity": 100, 1169 | "angle": 0, 1170 | "x": 1198.2282364358855, 1171 | "y": 226.8320370893398, 1172 | "strokeColor": "#1e1e1e", 1173 | "backgroundColor": "transparent", 1174 | "width": 256.470703125, 1175 | "height": 28.400152250240534, 1176 | "seed": 698375050, 1177 | "groupIds": [], 1178 | "frameId": null, 1179 | "roundness": null, 1180 | "boundElements": [], 1181 | "updated": 1708153878333, 1182 | "link": null, 1183 | "locked": false, 1184 | "fontSize": 11.833396770933556, 1185 | "fontFamily": 3, 1186 | "text": "concurrently process each key-value \nin hashmap & collate it to get result", 1187 | "textAlign": "center", 1188 | "verticalAlign": "top", 1189 | "containerId": null, 1190 | "originalText": "concurrently process each key-value \nin hashmap & collate it to get result", 1191 | "lineHeight": 1.2, 1192 | "baseline": 25 1193 | }, 1194 | { 1195 | "type": "text", 1196 | "version": 467, 1197 | "versionNonce": 678405450, 1198 | "isDeleted": false, 1199 | "id": "vEsUTcDBGkCYsy7EU5jN4", 1200 | "fillStyle": "solid", 1201 | "strokeWidth": 1, 1202 | "strokeStyle": "solid", 1203 | "roughness": 0, 1204 | "opacity": 100, 1205 | "angle": 0, 1206 | "x": 1603.5613159922566, 1207 | "y": 463.0515224323881, 1208 | "strokeColor": "#1e1e1e", 1209 | "backgroundColor": "transparent", 1210 | "width": 178.125, 1211 | "height": 19.2, 1212 | "seed": 1915484886, 1213 | "groupIds": [], 1214 | "frameId": null, 1215 | "roundness": null, 1216 | "boundElements": [], 1217 | "updated": 1708153878333, 1218 | "link": null, 1219 | "locked": false, 1220 | "fontSize": 16, 1221 | "fontFamily": 3, 1222 | "text": "final output string", 1223 | "textAlign": "center", 1224 | "verticalAlign": "top", 1225 | "containerId": null, 1226 | "originalText": "final output string", 1227 | "lineHeight": 1.2, 1228 | "baseline": 15 1229 | }, 1230 | { 1231 | "type": "arrow", 1232 | "version": 110, 1233 | "versionNonce": 1619679946, 1234 | "isDeleted": false, 1235 | "id": "B2yB337o0qKT-3VK87Blw", 1236 | "fillStyle": "solid", 1237 | "strokeWidth": 1, 1238 | "strokeStyle": "solid", 1239 | "roughness": 0, 1240 | "opacity": 100, 1241 | "angle": 0, 1242 | "x": 1129.936394079096, 1243 | "y": 349.79577249288127, 1244 | "strokeColor": "#1e1e1e", 1245 | "backgroundColor": "transparent", 1246 | "width": 76.17097046078993, 1247 | "height": 62.363298047287685, 1248 | "seed": 215060694, 1249 | "groupIds": [], 1250 | "frameId": null, 1251 | "roundness": null, 1252 | "boundElements": [], 1253 | "updated": 1708153878333, 1254 | "link": null, 1255 | "locked": false, 1256 | "startBinding": { 1257 | "elementId": "c7kg4AZS565nhwYsLsMVQ", 1258 | "focus": 0.8852484819034326, 1259 | "gap": 13.472984990217128 1260 | }, 1261 | "endBinding": { 1262 | "elementId": "nvWrKGBRtPs5ucCaVIU2j", 1263 | "focus": 1.0231266916752386, 1264 | "gap": 15.714525161277834 1265 | }, 1266 | "lastCommittedPoint": null, 1267 | "startArrowhead": null, 1268 | "endArrowhead": "arrow", 1269 | "points": [ 1270 | [ 1271 | 0, 1272 | 0 1273 | ], 1274 | [ 1275 | 76.17097046078993, 1276 | -62.363298047287685 1277 | ] 1278 | ] 1279 | }, 1280 | { 1281 | "type": "arrow", 1282 | "version": 341, 1283 | "versionNonce": 1077384726, 1284 | "isDeleted": false, 1285 | "id": "QRGvSXjt73mpJG6ExDGVS", 1286 | "fillStyle": "solid", 1287 | "strokeWidth": 1, 1288 | "strokeStyle": "solid", 1289 | "roughness": 0, 1290 | "opacity": 100, 1291 | "angle": 0, 1292 | "x": 1132.6816603174213, 1293 | "y": 390.34945542458524, 1294 | "strokeColor": "#1e1e1e", 1295 | "backgroundColor": "transparent", 1296 | "width": 97.5645601717697, 1297 | "height": 28.885684175528866, 1298 | "seed": 1750613258, 1299 | "groupIds": [], 1300 | "frameId": null, 1301 | "roundness": null, 1302 | "boundElements": [], 1303 | "updated": 1708153888879, 1304 | "link": null, 1305 | "locked": false, 1306 | "startBinding": { 1307 | "elementId": "-R5ITxa4VluNa7pVoRilH", 1308 | "focus": -0.22879210558003338, 1309 | "gap": 12.689055945795303 1310 | }, 1311 | "endBinding": null, 1312 | "lastCommittedPoint": null, 1313 | "startArrowhead": null, 1314 | "endArrowhead": "arrow", 1315 | "points": [ 1316 | [ 1317 | 0, 1318 | 0 1319 | ], 1320 | [ 1321 | 97.5645601717697, 1322 | -28.885684175528866 1323 | ] 1324 | ] 1325 | }, 1326 | { 1327 | "type": "arrow", 1328 | "version": 319, 1329 | "versionNonce": 390957206, 1330 | "isDeleted": false, 1331 | "id": "bp12sM2g4YgkzIcda21zH", 1332 | "fillStyle": "solid", 1333 | "strokeWidth": 1, 1334 | "strokeStyle": "solid", 1335 | "roughness": 0, 1336 | "opacity": 100, 1337 | "angle": 0, 1338 | "x": 1134.115299352991, 1339 | "y": 434.87869057549347, 1340 | "strokeColor": "#1e1e1e", 1341 | "backgroundColor": "transparent", 1342 | "width": 102.6216948709341, 1343 | "height": 1.7119946912702062, 1344 | "seed": 654125462, 1345 | "groupIds": [], 1346 | "frameId": null, 1347 | "roundness": null, 1348 | "boundElements": [], 1349 | "updated": 1708153888879, 1350 | "link": null, 1351 | "locked": false, 1352 | "startBinding": { 1353 | "elementId": "-R5ITxa4VluNa7pVoRilH", 1354 | "focus": 0.1742913639714162, 1355 | "gap": 14.385463238906311 1356 | }, 1357 | "endBinding": { 1358 | "elementId": "5W1On54kZfnWsiR_j6tzk", 1359 | "focus": 0.4326703652149958, 1360 | "gap": 6.930521556149188 1361 | }, 1362 | "lastCommittedPoint": null, 1363 | "startArrowhead": null, 1364 | "endArrowhead": "arrow", 1365 | "points": [ 1366 | [ 1367 | 0, 1368 | 0 1369 | ], 1370 | [ 1371 | 102.6216948709341, 1372 | -1.7119946912702062 1373 | ] 1374 | ] 1375 | }, 1376 | { 1377 | "type": "arrow", 1378 | "version": 286, 1379 | "versionNonce": 1248385814, 1380 | "isDeleted": false, 1381 | "id": "NSbd_kEYsx6RMpnstDjdE", 1382 | "fillStyle": "solid", 1383 | "strokeWidth": 1, 1384 | "strokeStyle": "solid", 1385 | "roughness": 0, 1386 | "opacity": 100, 1387 | "angle": 0, 1388 | "x": 1136.362350607324, 1389 | "y": 478.30981923107163, 1390 | "strokeColor": "#1e1e1e", 1391 | "backgroundColor": "transparent", 1392 | "width": 80.03976232628156, 1393 | "height": 29.85731225497034, 1394 | "seed": 1587648202, 1395 | "groupIds": [], 1396 | "frameId": null, 1397 | "roundness": null, 1398 | "boundElements": [], 1399 | "updated": 1708153888879, 1400 | "link": null, 1401 | "locked": false, 1402 | "startBinding": { 1403 | "elementId": "-R5ITxa4VluNa7pVoRilH", 1404 | "focus": 0.6370553311697368, 1405 | "gap": 20.94666022305148 1406 | }, 1407 | "endBinding": { 1408 | "elementId": "OteXjaRayEA6GMIWtAhlL", 1409 | "focus": -0.7393436448715983, 1410 | "gap": 15.160600176623802 1411 | }, 1412 | "lastCommittedPoint": null, 1413 | "startArrowhead": null, 1414 | "endArrowhead": "arrow", 1415 | "points": [ 1416 | [ 1417 | 0, 1418 | 0 1419 | ], 1420 | [ 1421 | 80.03976232628156, 1422 | 29.85731225497034 1423 | ] 1424 | ] 1425 | }, 1426 | { 1427 | "type": "text", 1428 | "version": 134, 1429 | "versionNonce": 1452650570, 1430 | "isDeleted": false, 1431 | "id": "nvWrKGBRtPs5ucCaVIU2j", 1432 | "fillStyle": "solid", 1433 | "strokeWidth": 1, 1434 | "strokeStyle": "solid", 1435 | "roughness": 0, 1436 | "opacity": 100, 1437 | "angle": 0, 1438 | "x": 1221.8218897011639, 1439 | "y": 276.7411875952272, 1440 | "strokeColor": "#1e1e1e", 1441 | "backgroundColor": "transparent", 1442 | "width": 206.25, 1443 | "height": 19.2, 1444 | "seed": 1955520266, 1445 | "groupIds": [], 1446 | "frameId": null, 1447 | "roundness": null, 1448 | "boundElements": [ 1449 | { 1450 | "id": "B2yB337o0qKT-3VK87Blw", 1451 | "type": "arrow" 1452 | }, 1453 | { 1454 | "id": "nE_pM9xkb5znTic9Tsj1i", 1455 | "type": "arrow" 1456 | } 1457 | ], 1458 | "updated": 1708153878333, 1459 | "link": null, 1460 | "locked": false, 1461 | "fontSize": 16, 1462 | "fontFamily": 3, 1463 | "text": "Hamburg=12.0/12.0/12.0", 1464 | "textAlign": "center", 1465 | "verticalAlign": "top", 1466 | "containerId": null, 1467 | "originalText": "Hamburg=12.0/12.0/12.0", 1468 | "lineHeight": 1.2, 1469 | "baseline": 15 1470 | }, 1471 | { 1472 | "type": "text", 1473 | "version": 228, 1474 | "versionNonce": 1259589974, 1475 | "isDeleted": false, 1476 | "id": "gW-bUZxZVMJqSqcxOrc8d", 1477 | "fillStyle": "solid", 1478 | "strokeWidth": 1, 1479 | "strokeStyle": "solid", 1480 | "roughness": 0, 1481 | "opacity": 100, 1482 | "angle": 0, 1483 | "x": 1248.6500897987537, 1484 | "y": 351.2886816262619, 1485 | "strokeColor": "#1e1e1e", 1486 | "backgroundColor": "transparent", 1487 | "width": 168.75, 1488 | "height": 19.2, 1489 | "seed": 2002376778, 1490 | "groupIds": [], 1491 | "frameId": null, 1492 | "roundness": null, 1493 | "boundElements": [], 1494 | "updated": 1708153878333, 1495 | "link": null, 1496 | "locked": false, 1497 | "fontSize": 16, 1498 | "fontFamily": 3, 1499 | "text": "London=8.9/8.9/8.9", 1500 | "textAlign": "center", 1501 | "verticalAlign": "top", 1502 | "containerId": null, 1503 | "originalText": "London=8.9/8.9/8.9", 1504 | "lineHeight": 1.2, 1505 | "baseline": 15 1506 | }, 1507 | { 1508 | "type": "text", 1509 | "version": 392, 1510 | "versionNonce": 2110592778, 1511 | "isDeleted": false, 1512 | "id": "5W1On54kZfnWsiR_j6tzk", 1513 | "fillStyle": "solid", 1514 | "strokeWidth": 1, 1515 | "strokeStyle": "solid", 1516 | "roughness": 0, 1517 | "opacity": 100, 1518 | "angle": 0, 1519 | "x": 1243.6675157800744, 1520 | "y": 426.71741343743065, 1521 | "strokeColor": "#1e1e1e", 1522 | "backgroundColor": "transparent", 1523 | "width": 187.5, 1524 | "height": 19.2, 1525 | "seed": 1300832150, 1526 | "groupIds": [], 1527 | "frameId": null, 1528 | "roundness": null, 1529 | "boundElements": [ 1530 | { 1531 | "id": "bp12sM2g4YgkzIcda21zH", 1532 | "type": "arrow" 1533 | }, 1534 | { 1535 | "id": "i27xMc4ZbHLtYPcknK2Pc", 1536 | "type": "arrow" 1537 | } 1538 | ], 1539 | "updated": 1708153878333, 1540 | "link": null, 1541 | "locked": false, 1542 | "fontSize": 16, 1543 | "fontFamily": 3, 1544 | "text": "Dubai=26.9/32.9/38.8", 1545 | "textAlign": "center", 1546 | "verticalAlign": "top", 1547 | "containerId": null, 1548 | "originalText": "Dubai=26.9/32.9/38.8", 1549 | "lineHeight": 1.2, 1550 | "baseline": 15 1551 | }, 1552 | { 1553 | "type": "text", 1554 | "version": 382, 1555 | "versionNonce": 1652242070, 1556 | "isDeleted": false, 1557 | "id": "OteXjaRayEA6GMIWtAhlL", 1558 | "fillStyle": "solid", 1559 | "strokeWidth": 1, 1560 | "strokeStyle": "solid", 1561 | "roughness": 0, 1562 | "opacity": 100, 1563 | "angle": 0, 1564 | "x": 1231.5627131102294, 1565 | "y": 506.6961698473049, 1566 | "strokeColor": "#1e1e1e", 1567 | "backgroundColor": "transparent", 1568 | "width": 196.875, 1569 | "height": 19.2, 1570 | "seed": 2043628438, 1571 | "groupIds": [], 1572 | "frameId": null, 1573 | "roundness": null, 1574 | "boundElements": [ 1575 | { 1576 | "id": "NSbd_kEYsx6RMpnstDjdE", 1577 | "type": "arrow" 1578 | } 1579 | ], 1580 | "updated": 1708153878333, 1581 | "link": null, 1582 | "locked": false, 1583 | "fontSize": 16, 1584 | "fontFamily": 3, 1585 | "text": "Cracow=12.6/12.6/12.6", 1586 | "textAlign": "center", 1587 | "verticalAlign": "top", 1588 | "containerId": null, 1589 | "originalText": "Cracow=12.6/12.6/12.6", 1590 | "lineHeight": 1.2, 1591 | "baseline": 15 1592 | }, 1593 | { 1594 | "type": "arrow", 1595 | "version": 130, 1596 | "versionNonce": 400440138, 1597 | "isDeleted": false, 1598 | "id": "nE_pM9xkb5znTic9Tsj1i", 1599 | "fillStyle": "solid", 1600 | "strokeWidth": 1, 1601 | "strokeStyle": "solid", 1602 | "roughness": 0, 1603 | "opacity": 100, 1604 | "angle": 0, 1605 | "x": 1437.5739790416392, 1606 | "y": 291.0826617772927, 1607 | "strokeColor": "#1e1e1e", 1608 | "backgroundColor": "transparent", 1609 | "width": 109.98349962949487, 1610 | "height": 59.973899654671186, 1611 | "seed": 2063658762, 1612 | "groupIds": [], 1613 | "frameId": null, 1614 | "roundness": null, 1615 | "boundElements": [], 1616 | "updated": 1708153878333, 1617 | "link": null, 1618 | "locked": false, 1619 | "startBinding": { 1620 | "elementId": "nvWrKGBRtPs5ucCaVIU2j", 1621 | "focus": -0.8608621922056133, 1622 | "gap": 9.502089340475322 1623 | }, 1624 | "endBinding": null, 1625 | "lastCommittedPoint": null, 1626 | "startArrowhead": null, 1627 | "endArrowhead": "arrow", 1628 | "points": [ 1629 | [ 1630 | 0, 1631 | 0 1632 | ], 1633 | [ 1634 | 109.98349962949487, 1635 | 59.973899654671186 1636 | ] 1637 | ] 1638 | }, 1639 | { 1640 | "type": "arrow", 1641 | "version": 140, 1642 | "versionNonce": 145585750, 1643 | "isDeleted": false, 1644 | "id": "u3R5ePspr3uF3j5IxuacW", 1645 | "fillStyle": "solid", 1646 | "strokeWidth": 1, 1647 | "strokeStyle": "solid", 1648 | "roughness": 0, 1649 | "opacity": 100, 1650 | "angle": 0, 1651 | "x": 1433.4865826423547, 1652 | "y": 362.668020854806, 1653 | "strokeColor": "#1e1e1e", 1654 | "backgroundColor": "transparent", 1655 | "width": 98.00092088184238, 1656 | "height": 27.528919778761065, 1657 | "seed": 1533625290, 1658 | "groupIds": [], 1659 | "frameId": null, 1660 | "roundness": null, 1661 | "boundElements": [], 1662 | "updated": 1708153878333, 1663 | "link": null, 1664 | "locked": false, 1665 | "startBinding": null, 1666 | "endBinding": { 1667 | "elementId": "obb78i_3l_BT1RCnAhGP6", 1668 | "focus": -0.3003917193994629, 1669 | "gap": 15.216300351605469 1670 | }, 1671 | "lastCommittedPoint": null, 1672 | "startArrowhead": null, 1673 | "endArrowhead": "arrow", 1674 | "points": [ 1675 | [ 1676 | 0, 1677 | 0 1678 | ], 1679 | [ 1680 | 98.00092088184238, 1681 | 27.528919778761065 1682 | ] 1683 | ] 1684 | }, 1685 | { 1686 | "type": "arrow", 1687 | "version": 154, 1688 | "versionNonce": 1003241994, 1689 | "isDeleted": false, 1690 | "id": "i27xMc4ZbHLtYPcknK2Pc", 1691 | "fillStyle": "solid", 1692 | "strokeWidth": 1, 1693 | "strokeStyle": "solid", 1694 | "roughness": 0, 1695 | "opacity": 100, 1696 | "angle": 0, 1697 | "x": 1446.4147530943196, 1698 | "y": 434.6194154307628, 1699 | "strokeColor": "#1e1e1e", 1700 | "backgroundColor": "transparent", 1701 | "width": 85.78448612129569, 1702 | "height": 1.0472682316573128, 1703 | "seed": 1677852874, 1704 | "groupIds": [], 1705 | "frameId": null, 1706 | "roundness": null, 1707 | "boundElements": [], 1708 | "updated": 1708153878333, 1709 | "link": null, 1710 | "locked": false, 1711 | "startBinding": { 1712 | "elementId": "5W1On54kZfnWsiR_j6tzk", 1713 | "focus": -0.03418912481698456, 1714 | "gap": 15.24723731424524 1715 | }, 1716 | "endBinding": { 1717 | "elementId": "obb78i_3l_BT1RCnAhGP6", 1718 | "focus": -0.6846594729254332, 1719 | "gap": 14.50456466018727 1720 | }, 1721 | "lastCommittedPoint": null, 1722 | "startArrowhead": null, 1723 | "endArrowhead": "arrow", 1724 | "points": [ 1725 | [ 1726 | 0, 1727 | 0 1728 | ], 1729 | [ 1730 | 85.78448612129569, 1731 | -1.0472682316573128 1732 | ] 1733 | ] 1734 | }, 1735 | { 1736 | "type": "arrow", 1737 | "version": 127, 1738 | "versionNonce": 1738029974, 1739 | "isDeleted": false, 1740 | "id": "OyWmVR9LlbNW6rDyTkC0Y", 1741 | "fillStyle": "solid", 1742 | "strokeWidth": 1, 1743 | "strokeStyle": "solid", 1744 | "roughness": 0, 1745 | "opacity": 100, 1746 | "angle": 0, 1747 | "x": 1445.718268882004, 1748 | "y": 517.5366234809186, 1749 | "strokeColor": "#1e1e1e", 1750 | "backgroundColor": "transparent", 1751 | "width": 100.44115753813185, 1752 | "height": 51.870280425244744, 1753 | "seed": 116609994, 1754 | "groupIds": [], 1755 | "frameId": null, 1756 | "roundness": null, 1757 | "boundElements": [], 1758 | "updated": 1708153878333, 1759 | "link": null, 1760 | "locked": false, 1761 | "startBinding": null, 1762 | "endBinding": null, 1763 | "lastCommittedPoint": null, 1764 | "startArrowhead": null, 1765 | "endArrowhead": "arrow", 1766 | "points": [ 1767 | [ 1768 | 0, 1769 | 0 1770 | ], 1771 | [ 1772 | 100.44115753813185, 1773 | -51.870280425244744 1774 | ] 1775 | ] 1776 | }, 1777 | { 1778 | "type": "text", 1779 | "version": 112, 1780 | "versionNonce": 1433847690, 1781 | "isDeleted": false, 1782 | "id": "4U27w7YKQxTJgcQ59GWFk", 1783 | "fillStyle": "solid", 1784 | "strokeWidth": 1, 1785 | "strokeStyle": "solid", 1786 | "roughness": 0, 1787 | "opacity": 100, 1788 | "angle": 0, 1789 | "x": 1263.9729545590808, 1790 | "y": 567.5106366711718, 1791 | "strokeColor": "#1e1e1e", 1792 | "backgroundColor": "transparent", 1793 | "width": 159.375, 1794 | "height": 19.2, 1795 | "seed": 255525718, 1796 | "groupIds": [], 1797 | "frameId": null, 1798 | "roundness": null, 1799 | "boundElements": [], 1800 | "updated": 1708153878333, 1801 | "link": null, 1802 | "locked": false, 1803 | "fontSize": 16, 1804 | "fontFamily": 3, 1805 | "text": "worker goroutines", 1806 | "textAlign": "center", 1807 | "verticalAlign": "top", 1808 | "containerId": null, 1809 | "originalText": "worker goroutines", 1810 | "lineHeight": 1.2, 1811 | "baseline": 15 1812 | }, 1813 | { 1814 | "type": "ellipse", 1815 | "version": 161, 1816 | "versionNonce": 1309214806, 1817 | "isDeleted": false, 1818 | "id": "-R5ITxa4VluNa7pVoRilH", 1819 | "fillStyle": "solid", 1820 | "strokeWidth": 1, 1821 | "strokeStyle": "solid", 1822 | "roughness": 1, 1823 | "opacity": 100, 1824 | "angle": 0, 1825 | "x": 1145.368579008692, 1826 | "y": 145.53745951230042, 1827 | "strokeColor": "#e03131", 1828 | "backgroundColor": "transparent", 1829 | "width": 368.55136039958734, 1830 | "height": 487.23158779878895, 1831 | "seed": 1036819286, 1832 | "groupIds": [], 1833 | "frameId": null, 1834 | "roundness": null, 1835 | "boundElements": [ 1836 | { 1837 | "id": "QRGvSXjt73mpJG6ExDGVS", 1838 | "type": "arrow" 1839 | }, 1840 | { 1841 | "id": "bp12sM2g4YgkzIcda21zH", 1842 | "type": "arrow" 1843 | }, 1844 | { 1845 | "id": "NSbd_kEYsx6RMpnstDjdE", 1846 | "type": "arrow" 1847 | } 1848 | ], 1849 | "updated": 1708153888879, 1850 | "link": null, 1851 | "locked": false 1852 | } 1853 | ], 1854 | "appState": { 1855 | "gridSize": null, 1856 | "viewBackgroundColor": "#ffffff" 1857 | }, 1858 | "files": {} 1859 | } -------------------------------------------------------------------------------- /excalidraw/iteration-4.excalidraw: -------------------------------------------------------------------------------- 1 | { 2 | "type": "excalidraw", 3 | "version": 2, 4 | "source": "https://excalidraw.com", 5 | "elements": [ 6 | { 7 | "type": "rectangle", 8 | "version": 592, 9 | "versionNonce": 1145005053, 10 | "isDeleted": false, 11 | "id": "g7ehsVND-quFuEQITJ1e4", 12 | "fillStyle": "solid", 13 | "strokeWidth": 2, 14 | "strokeStyle": "solid", 15 | "roughness": 1, 16 | "opacity": 100, 17 | "angle": 0, 18 | "x": 190.01953125, 19 | "y": 274.22265625, 20 | "strokeColor": "#1e1e1e", 21 | "backgroundColor": "transparent", 22 | "width": 206.08984375, 23 | "height": 342.5859375, 24 | "seed": 1557179000, 25 | "groupIds": [], 26 | "frameId": null, 27 | "roundness": { 28 | "type": 3 29 | }, 30 | "boundElements": [ 31 | { 32 | "id": "gawhb2bGF4y3b5NWw-jA2", 33 | "type": "arrow" 34 | } 35 | ], 36 | "updated": 1708162907334, 37 | "link": null, 38 | "locked": false 39 | }, 40 | { 41 | "type": "text", 42 | "version": 719, 43 | "versionNonce": 752264787, 44 | "isDeleted": false, 45 | "id": "0wA_sDUOfrpKP2CcQ2I4-", 46 | "fillStyle": "solid", 47 | "strokeWidth": 2, 48 | "strokeStyle": "solid", 49 | "roughness": 1, 50 | "opacity": 100, 51 | "angle": 0, 52 | "x": 221.5390625, 53 | "y": 307.01953125, 54 | "strokeColor": "#1e1e1e", 55 | "backgroundColor": "transparent", 56 | "width": 140.75987243652344, 57 | "height": 275, 58 | "seed": 1921711480, 59 | "groupIds": [], 60 | "frameId": null, 61 | "roundness": null, 62 | "boundElements": [], 63 | "updated": 1708162907334, 64 | "link": null, 65 | "locked": false, 66 | "fontSize": 20, 67 | "fontFamily": 1, 68 | "text": "Hamburg;12.0\nLondon;8.9\nDubai;38.8\nCracow;12.6\nDubai;26.9\nIstanbul;6.2\nRoseau;34.4\nConakry;31.2\nIstanbul;23.0\nSt. John's;15.2\n....", 69 | "textAlign": "left", 70 | "verticalAlign": "top", 71 | "containerId": null, 72 | "originalText": "Hamburg;12.0\nLondon;8.9\nDubai;38.8\nCracow;12.6\nDubai;26.9\nIstanbul;6.2\nRoseau;34.4\nConakry;31.2\nIstanbul;23.0\nSt. John's;15.2\n....", 73 | "lineHeight": 1.25, 74 | "baseline": 268 75 | }, 76 | { 77 | "type": "rectangle", 78 | "version": 960, 79 | "versionNonce": 772529245, 80 | "isDeleted": false, 81 | "id": "08tc5N08rYftnhcGbAlK8", 82 | "fillStyle": "solid", 83 | "strokeWidth": 2, 84 | "strokeStyle": "solid", 85 | "roughness": 1, 86 | "opacity": 100, 87 | "angle": 0, 88 | "x": 601.3844496958617, 89 | "y": 216.95798772626648, 90 | "strokeColor": "#1e1e1e", 91 | "backgroundColor": "transparent", 92 | "width": 133.323456386206, 93 | "height": 36.61247133047962, 94 | "seed": 1856583240, 95 | "groupIds": [], 96 | "frameId": null, 97 | "roundness": { 98 | "type": 3 99 | }, 100 | "boundElements": [ 101 | { 102 | "id": "8YDbA_0TF8A4bMHlIpFlt", 103 | "type": "arrow" 104 | }, 105 | { 106 | "id": "gawhb2bGF4y3b5NWw-jA2", 107 | "type": "arrow" 108 | } 109 | ], 110 | "updated": 1708162907334, 111 | "link": null, 112 | "locked": false 113 | }, 114 | { 115 | "type": "text", 116 | "version": 673, 117 | "versionNonce": 1853121523, 118 | "isDeleted": false, 119 | "id": "6V2XA-VEtmOQLHB_U6Sl8", 120 | "fillStyle": "solid", 121 | "strokeWidth": 2, 122 | "strokeStyle": "solid", 123 | "roughness": 1, 124 | "opacity": 100, 125 | "angle": 0, 126 | "x": 615.6082692027732, 127 | "y": 224.62395883640528, 128 | "strokeColor": "#1e1e1e", 129 | "backgroundColor": "transparent", 130 | "width": 104.69990539550781, 131 | "height": 25, 132 | "seed": 1669493576, 133 | "groupIds": [], 134 | "frameId": null, 135 | "roundness": null, 136 | "boundElements": [], 137 | "updated": 1708162907334, 138 | "link": null, 139 | "locked": false, 140 | "fontSize": 20, 141 | "fontFamily": 1, 142 | "text": "Dubai;26.9", 143 | "textAlign": "left", 144 | "verticalAlign": "top", 145 | "containerId": null, 146 | "originalText": "Dubai;26.9", 147 | "lineHeight": 1.25, 148 | "baseline": 18 149 | }, 150 | { 151 | "type": "arrow", 152 | "version": 3164, 153 | "versionNonce": 745162941, 154 | "isDeleted": false, 155 | "id": "gawhb2bGF4y3b5NWw-jA2", 156 | "fillStyle": "solid", 157 | "strokeWidth": 1, 158 | "strokeStyle": "solid", 159 | "roughness": 0, 160 | "opacity": 100, 161 | "angle": 0, 162 | "x": 404.8844039263955, 163 | "y": 323.786256215391, 164 | "strokeColor": "#1e1e1e", 165 | "backgroundColor": "transparent", 166 | "width": 184.3161152007914, 167 | "height": 84.94897080373067, 168 | "seed": 1537847624, 169 | "groupIds": [], 170 | "frameId": null, 171 | "roundness": { 172 | "type": 2 173 | }, 174 | "boundElements": [], 175 | "updated": 1708162907334, 176 | "link": null, 177 | "locked": false, 178 | "startBinding": { 179 | "elementId": "g7ehsVND-quFuEQITJ1e4", 180 | "focus": -0.3208306865475557, 181 | "gap": 8.775028926395521 182 | }, 183 | "endBinding": { 184 | "elementId": "08tc5N08rYftnhcGbAlK8", 185 | "focus": 0.6682857575152236, 186 | "gap": 12.183930568674725 187 | }, 188 | "lastCommittedPoint": null, 189 | "startArrowhead": null, 190 | "endArrowhead": "arrow", 191 | "points": [ 192 | [ 193 | 0, 194 | 0 195 | ], 196 | [ 197 | 184.3161152007914, 198 | -84.94897080373067 199 | ] 200 | ] 201 | }, 202 | { 203 | "type": "rectangle", 204 | "version": 2224, 205 | "versionNonce": 1556704659, 206 | "isDeleted": false, 207 | "id": "mJGslcYXqDvCIAcbI9Fsh", 208 | "fillStyle": "hachure", 209 | "strokeWidth": 2, 210 | "strokeStyle": "solid", 211 | "roughness": 1, 212 | "opacity": 100, 213 | "angle": 0, 214 | "x": 974.1363159753014, 215 | "y": 369.37758992622275, 216 | "strokeColor": "#000000", 217 | "backgroundColor": "transparent", 218 | "width": 475.53927852253423, 219 | "height": 43.44320280292987, 220 | "seed": 1847850098, 221 | "groupIds": [ 222 | "0HkrLMsTNbVDWFZhnFL9W" 223 | ], 224 | "frameId": null, 225 | "roundness": null, 226 | "boundElements": [], 227 | "updated": 1708162907334, 228 | "link": null, 229 | "locked": false 230 | }, 231 | { 232 | "type": "rectangle", 233 | "version": 1683, 234 | "versionNonce": 1090267421, 235 | "isDeleted": false, 236 | "id": "h9fYE9wEJ9WPmHCIri0fG", 237 | "fillStyle": "hachure", 238 | "strokeWidth": 2, 239 | "strokeStyle": "solid", 240 | "roughness": 1, 241 | "opacity": 100, 242 | "angle": 0, 243 | "x": 855.6604157492466, 244 | "y": 370.85588989325504, 245 | "strokeColor": "#000000", 246 | "backgroundColor": "transparent", 247 | "width": 118.28837125315864, 248 | "height": 43.57573712955543, 249 | "seed": 1179686450, 250 | "groupIds": [ 251 | "0HkrLMsTNbVDWFZhnFL9W" 252 | ], 253 | "frameId": null, 254 | "roundness": null, 255 | "boundElements": [ 256 | { 257 | "type": "text", 258 | "id": "ee2WQ2HW8ZVBuqL7bCgoH" 259 | } 260 | ], 261 | "updated": 1708162907334, 262 | "link": null, 263 | "locked": false 264 | }, 265 | { 266 | "type": "text", 267 | "version": 584, 268 | "versionNonce": 2064401203, 269 | "isDeleted": false, 270 | "id": "ee2WQ2HW8ZVBuqL7bCgoH", 271 | "fillStyle": "solid", 272 | "strokeWidth": 2, 273 | "strokeStyle": "solid", 274 | "roughness": 1, 275 | "opacity": 100, 276 | "angle": 0, 277 | "x": 882.91325921274, 278 | "y": 380.2249027321712, 279 | "strokeColor": "#1e1e1e", 280 | "backgroundColor": "transparent", 281 | "width": 63.782684326171875, 282 | "height": 24.837711451723123, 283 | "seed": 853858826, 284 | "groupIds": [ 285 | "0HkrLMsTNbVDWFZhnFL9W" 286 | ], 287 | "frameId": null, 288 | "roundness": null, 289 | "boundElements": [], 290 | "updated": 1708162907334, 291 | "link": null, 292 | "locked": false, 293 | "fontSize": 19.8701691613785, 294 | "fontFamily": 1, 295 | "text": "London", 296 | "textAlign": "center", 297 | "verticalAlign": "middle", 298 | "containerId": "h9fYE9wEJ9WPmHCIri0fG", 299 | "originalText": "London", 300 | "lineHeight": 1.25, 301 | "baseline": 19 302 | }, 303 | { 304 | "type": "rectangle", 305 | "version": 2079, 306 | "versionNonce": 1026751869, 307 | "isDeleted": false, 308 | "id": "XDDGUiVk3PzO3yterSUiz", 309 | "fillStyle": "hachure", 310 | "strokeWidth": 2, 311 | "strokeStyle": "solid", 312 | "roughness": 1, 313 | "opacity": 100, 314 | "angle": 0, 315 | "x": 974.130644023563, 316 | "y": 498.4677738286074, 317 | "strokeColor": "#000000", 318 | "backgroundColor": "transparent", 319 | "width": 475.4589294986804, 320 | "height": 44.49218539144334, 321 | "seed": 1006829554, 322 | "groupIds": [ 323 | "qkVx5s5KjsNvZoWxHYLE0" 324 | ], 325 | "frameId": null, 326 | "roundness": null, 327 | "boundElements": [], 328 | "updated": 1708162907334, 329 | "link": null, 330 | "locked": false 331 | }, 332 | { 333 | "type": "rectangle", 334 | "version": 1765, 335 | "versionNonce": 564356307, 336 | "isDeleted": false, 337 | "id": "v4_RPmrKtagPZPCkoDdgR", 338 | "fillStyle": "hachure", 339 | "strokeWidth": 2, 340 | "strokeStyle": "solid", 341 | "roughness": 1, 342 | "opacity": 100, 343 | "angle": 0, 344 | "x": 855.6547437975082, 345 | "y": 501.66434668926456, 346 | "strokeColor": "#000000", 347 | "backgroundColor": "transparent", 348 | "width": 118.28837125315864, 349 | "height": 43.57573712955543, 350 | "seed": 725758386, 351 | "groupIds": [ 352 | "qkVx5s5KjsNvZoWxHYLE0" 353 | ], 354 | "frameId": null, 355 | "roundness": null, 356 | "boundElements": [], 357 | "updated": 1708162907334, 358 | "link": null, 359 | "locked": false 360 | }, 361 | { 362 | "type": "rectangle", 363 | "version": 2829, 364 | "versionNonce": 1213220317, 365 | "isDeleted": false, 366 | "id": "c7kg4AZS565nhwYsLsMVQ", 367 | "fillStyle": "hachure", 368 | "strokeWidth": 2, 369 | "strokeStyle": "solid", 370 | "roughness": 1, 371 | "opacity": 100, 372 | "angle": 0, 373 | "x": 974.3063043091283, 374 | "y": 326.8530822151108, 375 | "strokeColor": "#000000", 376 | "backgroundColor": "transparent", 377 | "width": 476.03654385076874, 378 | "height": 43.229875498247395, 379 | "seed": 1463102322, 380 | "groupIds": [ 381 | "RGDUNqrgvYPsK9zeVxhnI" 382 | ], 383 | "frameId": null, 384 | "roundness": null, 385 | "boundElements": [], 386 | "updated": 1708162907334, 387 | "link": null, 388 | "locked": false 389 | }, 390 | { 391 | "type": "rectangle", 392 | "version": 1914, 393 | "versionNonce": 961819293, 394 | "isDeleted": false, 395 | "id": "Qp04Q1WaTvUONGksdBg6o", 396 | "fillStyle": "hachure", 397 | "strokeWidth": 2, 398 | "strokeStyle": "solid", 399 | "roughness": 1, 400 | "opacity": 100, 401 | "angle": 0, 402 | "x": 855.8304040830735, 403 | "y": 326.5072205838028, 404 | "strokeColor": "#000000", 405 | "backgroundColor": "transparent", 406 | "width": 118.28837125315864, 407 | "height": 43.57573712955543, 408 | "seed": 102952242, 409 | "groupIds": [ 410 | "RGDUNqrgvYPsK9zeVxhnI" 411 | ], 412 | "frameId": null, 413 | "roundness": null, 414 | "boundElements": [ 415 | { 416 | "type": "text", 417 | "id": "ZHpqO8RcweNX8bKwKRwtz" 418 | } 419 | ], 420 | "updated": 1708162907334, 421 | "link": null, 422 | "locked": false 423 | }, 424 | { 425 | "type": "text", 426 | "version": 732, 427 | "versionNonce": 1530106291, 428 | "isDeleted": false, 429 | "id": "ZHpqO8RcweNX8bKwKRwtz", 430 | "fillStyle": "solid", 431 | "strokeWidth": 2, 432 | "strokeStyle": "solid", 433 | "roughness": 1, 434 | "opacity": 100, 435 | "angle": 0, 436 | "x": 876.6453889650239, 437 | "y": 335.87623342271894, 438 | "strokeColor": "#1e1e1e", 439 | "backgroundColor": "transparent", 440 | "width": 76.65840148925781, 441 | "height": 24.837711451723123, 442 | "seed": 1389832138, 443 | "groupIds": [ 444 | "RGDUNqrgvYPsK9zeVxhnI" 445 | ], 446 | "frameId": null, 447 | "roundness": null, 448 | "boundElements": [], 449 | "updated": 1708162907334, 450 | "link": null, 451 | "locked": false, 452 | "fontSize": 19.8701691613785, 453 | "fontFamily": 1, 454 | "text": "Hamburg", 455 | "textAlign": "center", 456 | "verticalAlign": "middle", 457 | "containerId": "Qp04Q1WaTvUONGksdBg6o", 458 | "originalText": "Hamburg", 459 | "lineHeight": 1.25, 460 | "baseline": 17 461 | }, 462 | { 463 | "type": "rectangle", 464 | "version": 2169, 465 | "versionNonce": 1355667197, 466 | "isDeleted": false, 467 | "id": "QiJmkW_yybfpcJXgommNZ", 468 | "fillStyle": "hachure", 469 | "strokeWidth": 2, 470 | "strokeStyle": "solid", 471 | "roughness": 1, 472 | "opacity": 100, 473 | "angle": 0, 474 | "x": 973.9553789218148, 475 | "y": 412.41784408490224, 476 | "strokeColor": "#000000", 477 | "backgroundColor": "transparent", 478 | "width": 477.6928085055082, 479 | "height": 46.44066206666065, 480 | "seed": 494040818, 481 | "groupIds": [ 482 | "2_lTUjnJqPYiuGLMzjNwJ" 483 | ], 484 | "frameId": null, 485 | "roundness": null, 486 | "boundElements": [ 487 | { 488 | "id": "sKdHgwYSj9FyiekfCRyOD", 489 | "type": "arrow" 490 | } 491 | ], 492 | "updated": 1708162907334, 493 | "link": null, 494 | "locked": false 495 | }, 496 | { 497 | "type": "rectangle", 498 | "version": 1726, 499 | "versionNonce": 1289544531, 500 | "isDeleted": false, 501 | "id": "TGzZHf5FD6q1l367EypZx", 502 | "fillStyle": "hachure", 503 | "strokeWidth": 2, 504 | "strokeStyle": "solid", 505 | "roughness": 1, 506 | "opacity": 100, 507 | "angle": 0, 508 | "x": 855.47947869576, 509 | "y": 414.57944700646664, 510 | "strokeColor": "#000000", 511 | "backgroundColor": "transparent", 512 | "width": 118.28837125315864, 513 | "height": 43.57573712955543, 514 | "seed": 1034602674, 515 | "groupIds": [ 516 | "2_lTUjnJqPYiuGLMzjNwJ" 517 | ], 518 | "frameId": null, 519 | "roundness": null, 520 | "boundElements": [ 521 | { 522 | "type": "text", 523 | "id": "7w0bSWRKYnuuQJgc1QDg6" 524 | } 525 | ], 526 | "updated": 1708162907334, 527 | "link": null, 528 | "locked": false 529 | }, 530 | { 531 | "type": "text", 532 | "version": 661, 533 | "versionNonce": 643034973, 534 | "isDeleted": false, 535 | "id": "7w0bSWRKYnuuQJgc1QDg6", 536 | "fillStyle": "solid", 537 | "strokeWidth": 2, 538 | "strokeStyle": "solid", 539 | "roughness": 1, 540 | "opacity": 100, 541 | "angle": 0, 542 | "x": 887.3819193272221, 543 | "y": 423.9484598453828, 544 | "strokeColor": "#1e1e1e", 545 | "backgroundColor": "transparent", 546 | "width": 54.483489990234375, 547 | "height": 24.837711451723123, 548 | "seed": 1806284170, 549 | "groupIds": [ 550 | "2_lTUjnJqPYiuGLMzjNwJ" 551 | ], 552 | "frameId": null, 553 | "roundness": null, 554 | "boundElements": [], 555 | "updated": 1708162907334, 556 | "link": null, 557 | "locked": false, 558 | "fontSize": 19.8701691613785, 559 | "fontFamily": 1, 560 | "text": "Dubai", 561 | "textAlign": "center", 562 | "verticalAlign": "middle", 563 | "containerId": "TGzZHf5FD6q1l367EypZx", 564 | "originalText": "Dubai", 565 | "lineHeight": 1.25, 566 | "baseline": 19 567 | }, 568 | { 569 | "type": "rectangle", 570 | "version": 2112, 571 | "versionNonce": 212533491, 572 | "isDeleted": false, 573 | "id": "DC86C3pauXtePubu2oZh6", 574 | "fillStyle": "hachure", 575 | "strokeWidth": 2, 576 | "strokeStyle": "solid", 577 | "roughness": 1, 578 | "opacity": 100, 579 | "angle": 0, 580 | "x": 974.1306440235633, 581 | "y": 459.5250937189496, 582 | "strokeColor": "#000000", 583 | "backgroundColor": "transparent", 584 | "width": 475.1852712750891, 585 | "height": 39.21178145111384, 586 | "seed": 1584587378, 587 | "groupIds": [ 588 | "ls8IcbYTXvv3VzKKmJ0hS" 589 | ], 590 | "frameId": null, 591 | "roundness": null, 592 | "boundElements": [], 593 | "updated": 1708162907334, 594 | "link": null, 595 | "locked": false 596 | }, 597 | { 598 | "type": "rectangle", 599 | "version": 1742, 600 | "versionNonce": 674757565, 601 | "isDeleted": false, 602 | "id": "VkO1IEH8EZ2KPOG-xHk-r", 603 | "fillStyle": "hachure", 604 | "strokeWidth": 2, 605 | "strokeStyle": "solid", 606 | "roughness": 1, 607 | "opacity": 100, 608 | "angle": 0, 609 | "x": 855.6547437975084, 610 | "y": 458.28071149653556, 611 | "strokeColor": "#000000", 612 | "backgroundColor": "transparent", 613 | "width": 118.28837125315864, 614 | "height": 43.57573712955543, 615 | "seed": 1787937842, 616 | "groupIds": [ 617 | "ls8IcbYTXvv3VzKKmJ0hS" 618 | ], 619 | "frameId": null, 620 | "roundness": null, 621 | "boundElements": [ 622 | { 623 | "type": "text", 624 | "id": "WugyfMgbjYhQBac0x7IAI" 625 | }, 626 | { 627 | "id": "yZBK5-QWVk0e6m0Um2kXS", 628 | "type": "arrow" 629 | } 630 | ], 631 | "updated": 1708162907334, 632 | "link": null, 633 | "locked": false 634 | }, 635 | { 636 | "type": "text", 637 | "version": 592, 638 | "versionNonce": 337930899, 639 | "isDeleted": false, 640 | "id": "WugyfMgbjYhQBac0x7IAI", 641 | "fillStyle": "solid", 642 | "strokeWidth": 2, 643 | "strokeStyle": "solid", 644 | "roughness": 1, 645 | "opacity": 100, 646 | "angle": 0, 647 | "x": 880.9603292653964, 648 | "y": 467.6497243354517, 649 | "strokeColor": "#1e1e1e", 650 | "backgroundColor": "transparent", 651 | "width": 67.67720031738281, 652 | "height": 24.837711451723123, 653 | "seed": 979461002, 654 | "groupIds": [ 655 | "ls8IcbYTXvv3VzKKmJ0hS" 656 | ], 657 | "frameId": null, 658 | "roundness": null, 659 | "boundElements": [], 660 | "updated": 1708162907334, 661 | "link": null, 662 | "locked": false, 663 | "fontSize": 19.8701691613785, 664 | "fontFamily": 1, 665 | "text": "Cracow", 666 | "textAlign": "center", 667 | "verticalAlign": "middle", 668 | "containerId": "VkO1IEH8EZ2KPOG-xHk-r", 669 | "originalText": "Cracow", 670 | "lineHeight": 1.25, 671 | "baseline": 19 672 | }, 673 | { 674 | "type": "text", 675 | "version": 774, 676 | "versionNonce": 2124119069, 677 | "isDeleted": false, 678 | "id": "5UQPcQECvEVqnL_z3OLxp", 679 | "fillStyle": "solid", 680 | "strokeWidth": 2, 681 | "strokeStyle": "solid", 682 | "roughness": 1, 683 | "opacity": 100, 684 | "angle": 0, 685 | "x": 884.9073045786099, 686 | "y": 295.5945071823994, 687 | "strokeColor": "#000000", 688 | "backgroundColor": "#ced4da", 689 | "width": 33.3013916015625, 690 | "height": 23.467697493077033, 691 | "seed": 380729010, 692 | "groupIds": [], 693 | "frameId": null, 694 | "roundness": null, 695 | "boundElements": [], 696 | "updated": 1708162907334, 697 | "link": null, 698 | "locked": false, 699 | "fontSize": 18.476780229816047, 700 | "fontFamily": 1, 701 | "text": "KEY", 702 | "textAlign": "left", 703 | "verticalAlign": "top", 704 | "containerId": null, 705 | "originalText": "KEY", 706 | "lineHeight": 1.2701183431952676, 707 | "baseline": 16 708 | }, 709 | { 710 | "type": "text", 711 | "version": 988, 712 | "versionNonce": 969573757, 713 | "isDeleted": false, 714 | "id": "6sYiQnwNfm3owAHnNoLx_", 715 | "fillStyle": "solid", 716 | "strokeWidth": 2, 717 | "strokeStyle": "solid", 718 | "roughness": 1, 719 | "opacity": 100, 720 | "angle": 0, 721 | "x": 1129.1344031894234, 722 | "y": 295.34286916151467, 723 | "strokeColor": "#000000", 724 | "backgroundColor": "#ced4da", 725 | "width": 58.36517333984375, 726 | "height": 23.467697493077033, 727 | "seed": 2121519218, 728 | "groupIds": [], 729 | "frameId": null, 730 | "roundness": null, 731 | "boundElements": [], 732 | "updated": 1708162936748, 733 | "link": null, 734 | "locked": false, 735 | "fontSize": 18.476780229816075, 736 | "fontFamily": 1, 737 | "text": "VALUE", 738 | "textAlign": "left", 739 | "verticalAlign": "top", 740 | "containerId": null, 741 | "originalText": "VALUE", 742 | "lineHeight": 1.2701183431952656, 743 | "baseline": 16 744 | }, 745 | { 746 | "type": "text", 747 | "version": 629, 748 | "versionNonce": 1366290557, 749 | "isDeleted": false, 750 | "id": "WIHlzBjFbgwVaQpLM7oTu", 751 | "fillStyle": "solid", 752 | "strokeWidth": 2, 753 | "strokeStyle": "solid", 754 | "roughness": 1, 755 | "opacity": 100, 756 | "angle": 0, 757 | "x": 988.4615727353421, 758 | "y": 337.4550045887639, 759 | "strokeColor": "#1e1e1e", 760 | "backgroundColor": "transparent", 761 | "width": 424.5619812011719, 762 | "height": 24.837711451723123, 763 | "seed": 2100890774, 764 | "groupIds": [ 765 | "RGDUNqrgvYPsK9zeVxhnI" 766 | ], 767 | "frameId": null, 768 | "roundness": null, 769 | "boundElements": [], 770 | "updated": 1708162907334, 771 | "link": null, 772 | "locked": false, 773 | "fontSize": 19.8701691613785, 774 | "fontFamily": 1, 775 | "text": "min = 129, max = 129, count = 1, sum = 129", 776 | "textAlign": "left", 777 | "verticalAlign": "top", 778 | "containerId": null, 779 | "originalText": "min = 129, max = 129, count = 1, sum = 129", 780 | "lineHeight": 1.25, 781 | "baseline": 17 782 | }, 783 | { 784 | "type": "text", 785 | "version": 441, 786 | "versionNonce": 841163219, 787 | "isDeleted": false, 788 | "id": "2zwV1Mv7qiSMuqiJY8S4p", 789 | "fillStyle": "solid", 790 | "strokeWidth": 2, 791 | "strokeStyle": "solid", 792 | "roughness": 1, 793 | "opacity": 100, 794 | "angle": 0, 795 | "x": 987.3045674853772, 796 | "y": 383.9626131279775, 797 | "strokeColor": "#1e1e1e", 798 | "backgroundColor": "transparent", 799 | "width": 411.56707763671875, 800 | "height": 24.837711451723123, 801 | "seed": 110571862, 802 | "groupIds": [ 803 | "0HkrLMsTNbVDWFZhnFL9W" 804 | ], 805 | "frameId": null, 806 | "roundness": null, 807 | "boundElements": [], 808 | "updated": 1708162907334, 809 | "link": null, 810 | "locked": false, 811 | "fontSize": 19.8701691613785, 812 | "fontFamily": 1, 813 | "text": "min = 89, max = 89, count = 1, sum = 89", 814 | "textAlign": "left", 815 | "verticalAlign": "top", 816 | "containerId": null, 817 | "originalText": "min = 89, max = 89, count = 1, sum = 89", 818 | "lineHeight": 1.25, 819 | "baseline": 17 820 | }, 821 | { 822 | "type": "text", 823 | "version": 480, 824 | "versionNonce": 1316411613, 825 | "isDeleted": false, 826 | "id": "TFE4kqCND0XLbFSPabbGR", 827 | "fillStyle": "solid", 828 | "strokeWidth": 2, 829 | "strokeStyle": "solid", 830 | "roughness": 1, 831 | "opacity": 100, 832 | "angle": 0, 833 | "x": 986.130121973822, 834 | "y": 426.864584096748, 835 | "strokeColor": "#1e1e1e", 836 | "backgroundColor": "transparent", 837 | "width": 457.0097351074219, 838 | "height": 24.837711451723123, 839 | "seed": 418625750, 840 | "groupIds": [ 841 | "2_lTUjnJqPYiuGLMzjNwJ" 842 | ], 843 | "frameId": null, 844 | "roundness": null, 845 | "boundElements": [], 846 | "updated": 1708162907334, 847 | "link": null, 848 | "locked": false, 849 | "fontSize": 19.8701691613785, 850 | "fontFamily": 1, 851 | "text": "min = 269, max = 388, count = 2, sum = 657", 852 | "textAlign": "left", 853 | "verticalAlign": "top", 854 | "containerId": null, 855 | "originalText": "min = 269, max = 388, count = 2, sum = 657", 856 | "lineHeight": 1.25, 857 | "baseline": 17 858 | }, 859 | { 860 | "type": "text", 861 | "version": 431, 862 | "versionNonce": 463826803, 863 | "isDeleted": false, 864 | "id": "EEvKzIPUvf68WK60ek2zD", 865 | "fillStyle": "solid", 866 | "strokeWidth": 2, 867 | "strokeStyle": "solid", 868 | "roughness": 1, 869 | "opacity": 100, 870 | "angle": 0, 871 | "x": 984.3183701594326, 872 | "y": 469.74426244238214, 873 | "strokeColor": "#1e1e1e", 874 | "backgroundColor": "transparent", 875 | "width": 411.56707763671875, 876 | "height": 24.837711451723123, 877 | "seed": 865740182, 878 | "groupIds": [ 879 | "ls8IcbYTXvv3VzKKmJ0hS" 880 | ], 881 | "frameId": null, 882 | "roundness": null, 883 | "boundElements": [], 884 | "updated": 1708162907334, 885 | "link": null, 886 | "locked": false, 887 | "fontSize": 19.8701691613785, 888 | "fontFamily": 1, 889 | "text": "min = 89, max = 89, count = 1, sum = 89", 890 | "textAlign": "left", 891 | "verticalAlign": "top", 892 | "containerId": null, 893 | "originalText": "min = 89, max = 89, count = 1, sum = 89", 894 | "lineHeight": 1.25, 895 | "baseline": 17 896 | }, 897 | { 898 | "type": "arrow", 899 | "version": 2085, 900 | "versionNonce": 1866577213, 901 | "isDeleted": false, 902 | "id": "yZBK5-QWVk0e6m0Um2kXS", 903 | "fillStyle": "solid", 904 | "strokeWidth": 1, 905 | "strokeStyle": "solid", 906 | "roughness": 0, 907 | "opacity": 100, 908 | "angle": 0, 909 | "x": 653.273682797193, 910 | "y": 583.2617487637692, 911 | "strokeColor": "#1e1e1e", 912 | "backgroundColor": "transparent", 913 | "width": 191.03808409128317, 914 | "height": 108.98857250722028, 915 | "seed": 167149066, 916 | "groupIds": [], 917 | "frameId": null, 918 | "roundness": { 919 | "type": 2 920 | }, 921 | "boundElements": [], 922 | "updated": 1708162907334, 923 | "link": null, 924 | "locked": false, 925 | "startBinding": null, 926 | "endBinding": { 927 | "elementId": "VkO1IEH8EZ2KPOG-xHk-r", 928 | "focus": 0.8285393631690615, 929 | "gap": 11.342976909032359 930 | }, 931 | "lastCommittedPoint": null, 932 | "startArrowhead": null, 933 | "endArrowhead": "arrow", 934 | "points": [ 935 | [ 936 | 0, 937 | 0 938 | ], 939 | [ 940 | 191.03808409128317, 941 | -108.98857250722028 942 | ] 943 | ] 944 | }, 945 | { 946 | "type": "text", 947 | "version": 1583, 948 | "versionNonce": 1724713235, 949 | "isDeleted": false, 950 | "id": "UK95a36C6IFNqw8wSB5CP", 951 | "fillStyle": "solid", 952 | "strokeWidth": 2, 953 | "strokeStyle": "solid", 954 | "roughness": 1, 955 | "opacity": 100, 956 | "angle": 0, 957 | "x": 470.04246693575567, 958 | "y": 211.38902127340114, 959 | "strokeColor": "#1e1e1e", 960 | "backgroundColor": "transparent", 961 | "width": 130.19184955085498, 962 | "height": 23.185822742765005, 963 | "seed": 1519970506, 964 | "groupIds": [], 965 | "frameId": null, 966 | "roundness": null, 967 | "boundElements": [ 968 | { 969 | "id": "gawhb2bGF4y3b5NWw-jA2", 970 | "type": "arrow" 971 | } 972 | ], 973 | "updated": 1708162907334, 974 | "link": null, 975 | "locked": false, 976 | "fontSize": 9.660759476152094, 977 | "fontFamily": 3, 978 | "text": "read file sequentially \nline by line", 979 | "textAlign": "center", 980 | "verticalAlign": "top", 981 | "containerId": null, 982 | "originalText": "read file sequentially \nline by line", 983 | "lineHeight": 1.2, 984 | "baseline": 20.99999999999998 985 | }, 986 | { 987 | "type": "text", 988 | "version": 1404, 989 | "versionNonce": 2133984669, 990 | "isDeleted": false, 991 | "id": "cUvEqE-dILr2OErRIEu0f", 992 | "fillStyle": "solid", 993 | "strokeWidth": 2, 994 | "strokeStyle": "solid", 995 | "roughness": 1, 996 | "opacity": 100, 997 | "angle": 0, 998 | "x": 559.156533119464, 999 | "y": 492.30740586589366, 1000 | "strokeColor": "#1e1e1e", 1001 | "backgroundColor": "transparent", 1002 | "width": 187.23046875, 1003 | "height": 59.00102812215998, 1004 | "seed": 203381782, 1005 | "groupIds": [], 1006 | "frameId": null, 1007 | "roundness": null, 1008 | "boundElements": [], 1009 | "updated": 1708162907334, 1010 | "link": null, 1011 | "locked": false, 1012 | "fontSize": 12.29188085878333, 1013 | "fontFamily": 3, 1014 | "text": "get a slice from channel, \nsplit lines, \nfor each line: parse \ncity & temp", 1015 | "textAlign": "left", 1016 | "verticalAlign": "top", 1017 | "containerId": null, 1018 | "originalText": "get a slice from channel, \nsplit lines, \nfor each line: parse \ncity & temp", 1019 | "lineHeight": 1.2, 1020 | "baseline": 56 1021 | }, 1022 | { 1023 | "type": "text", 1024 | "version": 1031, 1025 | "versionNonce": 1199206109, 1026 | "isDeleted": false, 1027 | "id": "obb78i_3l_BT1RCnAhGP6", 1028 | "fillStyle": "solid", 1029 | "strokeWidth": 1, 1030 | "strokeStyle": "solid", 1031 | "roughness": 0, 1032 | "opacity": 100, 1033 | "angle": 0, 1034 | "x": 1569.5255852548191, 1035 | "y": 400.44091428368586, 1036 | "strokeColor": "#1e1e1e", 1037 | "backgroundColor": "transparent", 1038 | "width": 290.625, 1039 | "height": 38.4, 1040 | "seed": 261244270, 1041 | "groupIds": [], 1042 | "frameId": null, 1043 | "roundness": null, 1044 | "boundElements": [], 1045 | "updated": 1708163106514, 1046 | "link": null, 1047 | "locked": false, 1048 | "fontSize": 16, 1049 | "fontFamily": 3, 1050 | "text": "{Hamburg=12.0/12.0/12.0; London\n=8.9/8.9/8.9...}", 1051 | "textAlign": "center", 1052 | "verticalAlign": "top", 1053 | "containerId": null, 1054 | "originalText": "{Hamburg=12.0/12.0/12.0; London\n=8.9/8.9/8.9...}", 1055 | "lineHeight": 1.2, 1056 | "baseline": 34 1057 | }, 1058 | { 1059 | "type": "text", 1060 | "version": 142, 1061 | "versionNonce": 1635338749, 1062 | "isDeleted": false, 1063 | "id": "hraiPXQZQCyI1m7grYQTm", 1064 | "fillStyle": "solid", 1065 | "strokeWidth": 1, 1066 | "strokeStyle": "solid", 1067 | "roughness": 0, 1068 | "opacity": 100, 1069 | "angle": 0, 1070 | "x": 239.00333759766227, 1071 | "y": 628.0330257352593, 1072 | "strokeColor": "#1e1e1e", 1073 | "backgroundColor": "transparent", 1074 | "width": 93.75, 1075 | "height": 19.2, 1076 | "seed": 605226902, 1077 | "groupIds": [], 1078 | "frameId": null, 1079 | "roundness": null, 1080 | "boundElements": [], 1081 | "updated": 1708162907334, 1082 | "link": null, 1083 | "locked": false, 1084 | "fontSize": 16, 1085 | "fontFamily": 3, 1086 | "text": "input file", 1087 | "textAlign": "center", 1088 | "verticalAlign": "top", 1089 | "containerId": null, 1090 | "originalText": "input file", 1091 | "lineHeight": 1.2, 1092 | "baseline": 15 1093 | }, 1094 | { 1095 | "type": "text", 1096 | "version": 555, 1097 | "versionNonce": 1351131709, 1098 | "isDeleted": false, 1099 | "id": "fCzahi-0eDqzZLUR1PrAC", 1100 | "fillStyle": "solid", 1101 | "strokeWidth": 1, 1102 | "strokeStyle": "solid", 1103 | "roughness": 0, 1104 | "opacity": 100, 1105 | "angle": 0, 1106 | "x": 1013.8071528743701, 1107 | "y": 560.2199034098677, 1108 | "strokeColor": "#1e1e1e", 1109 | "backgroundColor": "transparent", 1110 | "width": 271.875, 1111 | "height": 38.4, 1112 | "seed": 14773078, 1113 | "groupIds": [], 1114 | "frameId": null, 1115 | "roundness": null, 1116 | "boundElements": [], 1117 | "updated": 1708162964172, 1118 | "link": null, 1119 | "locked": false, 1120 | "fontSize": 16, 1121 | "fontFamily": 3, 1122 | "text": "hashmap storing station with \nsummaries temperature values", 1123 | "textAlign": "center", 1124 | "verticalAlign": "top", 1125 | "containerId": null, 1126 | "originalText": "hashmap storing station with \nsummaries temperature values", 1127 | "lineHeight": 1.2, 1128 | "baseline": 34 1129 | }, 1130 | { 1131 | "type": "text", 1132 | "version": 490, 1133 | "versionNonce": 1152687603, 1134 | "isDeleted": false, 1135 | "id": "vEsUTcDBGkCYsy7EU5jN4", 1136 | "fillStyle": "solid", 1137 | "strokeWidth": 1, 1138 | "strokeStyle": "solid", 1139 | "roughness": 0, 1140 | "opacity": 100, 1141 | "angle": 0, 1142 | "x": 1603.5613159922566, 1143 | "y": 463.0515224323881, 1144 | "strokeColor": "#1e1e1e", 1145 | "backgroundColor": "transparent", 1146 | "width": 178.125, 1147 | "height": 19.2, 1148 | "seed": 1915484886, 1149 | "groupIds": [], 1150 | "frameId": null, 1151 | "roundness": null, 1152 | "boundElements": [], 1153 | "updated": 1708162907334, 1154 | "link": null, 1155 | "locked": false, 1156 | "fontSize": 16, 1157 | "fontFamily": 3, 1158 | "text": "final output string", 1159 | "textAlign": "center", 1160 | "verticalAlign": "top", 1161 | "containerId": null, 1162 | "originalText": "final output string", 1163 | "lineHeight": 1.2, 1164 | "baseline": 15 1165 | }, 1166 | { 1167 | "id": "ZsBKLghOHEsGCEbKzZ086", 1168 | "type": "freedraw", 1169 | "x": 352.6178336426461, 1170 | "y": 172.1771105551413, 1171 | "width": 0.0001, 1172 | "height": 0.0001, 1173 | "angle": 0, 1174 | "strokeColor": "#1e1e1e", 1175 | "backgroundColor": "transparent", 1176 | "fillStyle": "solid", 1177 | "strokeWidth": 1, 1178 | "strokeStyle": "solid", 1179 | "roughness": 0, 1180 | "opacity": 100, 1181 | "groupIds": [], 1182 | "frameId": null, 1183 | "roundness": null, 1184 | "seed": 188367421, 1185 | "version": 24, 1186 | "versionNonce": 847404371, 1187 | "isDeleted": false, 1188 | "boundElements": null, 1189 | "updated": 1708162907334, 1190 | "link": null, 1191 | "locked": false, 1192 | "points": [ 1193 | [ 1194 | 0, 1195 | 0 1196 | ], 1197 | [ 1198 | 0.0001, 1199 | 0.0001 1200 | ] 1201 | ], 1202 | "pressures": [], 1203 | "simulatePressure": true, 1204 | "lastCommittedPoint": [ 1205 | 0.0001, 1206 | 0.0001 1207 | ] 1208 | }, 1209 | { 1210 | "id": "uv-FXaS5uTAd-uTOkDcYd", 1211 | "type": "freedraw", 1212 | "x": 522.6604253649961, 1213 | "y": 141.6920623114553, 1214 | "width": 0.0001, 1215 | "height": 0.0001, 1216 | "angle": 0, 1217 | "strokeColor": "#1e1e1e", 1218 | "backgroundColor": "transparent", 1219 | "fillStyle": "solid", 1220 | "strokeWidth": 1, 1221 | "strokeStyle": "solid", 1222 | "roughness": 0, 1223 | "opacity": 100, 1224 | "groupIds": [], 1225 | "frameId": null, 1226 | "roundness": null, 1227 | "seed": 1533063005, 1228 | "version": 148, 1229 | "versionNonce": 1935349085, 1230 | "isDeleted": false, 1231 | "boundElements": null, 1232 | "updated": 1708162907334, 1233 | "link": null, 1234 | "locked": false, 1235 | "points": [ 1236 | [ 1237 | 0, 1238 | 0 1239 | ], 1240 | [ 1241 | 0.0001, 1242 | 0.0001 1243 | ] 1244 | ], 1245 | "pressures": [], 1246 | "simulatePressure": true, 1247 | "lastCommittedPoint": [ 1248 | 0.0001, 1249 | 0.0001 1250 | ] 1251 | }, 1252 | { 1253 | "id": "gxkIFFiWshTy3akjI35SE", 1254 | "type": "freedraw", 1255 | "x": 840.723920679796, 1256 | "y": 219.3220446014472, 1257 | "width": 0.0001, 1258 | "height": 0.0001, 1259 | "angle": 0, 1260 | "strokeColor": "#1e1e1e", 1261 | "backgroundColor": "transparent", 1262 | "fillStyle": "solid", 1263 | "strokeWidth": 1, 1264 | "strokeStyle": "solid", 1265 | "roughness": 0, 1266 | "opacity": 100, 1267 | "groupIds": [], 1268 | "frameId": null, 1269 | "roundness": null, 1270 | "seed": 1083432435, 1271 | "version": 24, 1272 | "versionNonce": 1402026739, 1273 | "isDeleted": false, 1274 | "boundElements": null, 1275 | "updated": 1708162907334, 1276 | "link": null, 1277 | "locked": false, 1278 | "points": [ 1279 | [ 1280 | 0, 1281 | 0 1282 | ], 1283 | [ 1284 | 0.0001, 1285 | 0.0001 1286 | ] 1287 | ], 1288 | "pressures": [], 1289 | "simulatePressure": true, 1290 | "lastCommittedPoint": [ 1291 | 0.0001, 1292 | 0.0001 1293 | ] 1294 | }, 1295 | { 1296 | "id": "vIc8bfRukQRruyJkHE1_4", 1297 | "type": "freedraw", 1298 | "x": 485.07758141757427, 1299 | "y": 503.78247165279544, 1300 | "width": 0.0001, 1301 | "height": 0.0001, 1302 | "angle": 0, 1303 | "strokeColor": "#1e1e1e", 1304 | "backgroundColor": "transparent", 1305 | "fillStyle": "solid", 1306 | "strokeWidth": 1, 1307 | "strokeStyle": "solid", 1308 | "roughness": 0, 1309 | "opacity": 10, 1310 | "groupIds": [], 1311 | "frameId": null, 1312 | "roundness": null, 1313 | "seed": 394534461, 1314 | "version": 87, 1315 | "versionNonce": 1433035197, 1316 | "isDeleted": false, 1317 | "boundElements": null, 1318 | "updated": 1708162907334, 1319 | "link": null, 1320 | "locked": false, 1321 | "points": [ 1322 | [ 1323 | 0, 1324 | 0 1325 | ], 1326 | [ 1327 | 0.0001, 1328 | 0.0001 1329 | ] 1330 | ], 1331 | "pressures": [], 1332 | "simulatePressure": true, 1333 | "lastCommittedPoint": [ 1334 | 0.0001, 1335 | 0.0001 1336 | ] 1337 | }, 1338 | { 1339 | "id": "oUYnn2-jDVjZXOJQkmG_V", 1340 | "type": "line", 1341 | "x": 457.57166104776843, 1342 | "y": 396.10455997524355, 1343 | "width": 356.1266412271359, 1344 | "height": 0.6152887916550753, 1345 | "angle": 0, 1346 | "strokeColor": "#1e1e1e", 1347 | "backgroundColor": "transparent", 1348 | "fillStyle": "solid", 1349 | "strokeWidth": 1, 1350 | "strokeStyle": "solid", 1351 | "roughness": 0, 1352 | "opacity": 100, 1353 | "groupIds": [], 1354 | "frameId": null, 1355 | "roundness": null, 1356 | "seed": 233224307, 1357 | "version": 488, 1358 | "versionNonce": 1446208659, 1359 | "isDeleted": false, 1360 | "boundElements": null, 1361 | "updated": 1708162907334, 1362 | "link": null, 1363 | "locked": false, 1364 | "points": [ 1365 | [ 1366 | 0, 1367 | 0 1368 | ], 1369 | [ 1370 | 356.1266412271359, 1371 | -0.6152887916550753 1372 | ] 1373 | ], 1374 | "lastCommittedPoint": null, 1375 | "startBinding": null, 1376 | "endBinding": null, 1377 | "startArrowhead": null, 1378 | "endArrowhead": null 1379 | }, 1380 | { 1381 | "type": "line", 1382 | "version": 322, 1383 | "versionNonce": 1687233053, 1384 | "isDeleted": false, 1385 | "id": "fYNh6DBQqmterhhqlsSde", 1386 | "fillStyle": "solid", 1387 | "strokeWidth": 1, 1388 | "strokeStyle": "solid", 1389 | "roughness": 0, 1390 | "opacity": 100, 1391 | "angle": 0, 1392 | "x": 459.1663891404255, 1393 | "y": 431.75363914889186, 1394 | "strokeColor": "#1e1e1e", 1395 | "backgroundColor": "transparent", 1396 | "width": 356.1266412271359, 1397 | "height": 0.6152887916550753, 1398 | "seed": 1400262355, 1399 | "groupIds": [], 1400 | "frameId": null, 1401 | "roundness": null, 1402 | "boundElements": [], 1403 | "updated": 1708162907334, 1404 | "link": null, 1405 | "locked": false, 1406 | "startBinding": null, 1407 | "endBinding": null, 1408 | "lastCommittedPoint": null, 1409 | "startArrowhead": null, 1410 | "endArrowhead": null, 1411 | "points": [ 1412 | [ 1413 | 0, 1414 | 0 1415 | ], 1416 | [ 1417 | 356.1266412271359, 1418 | -0.6152887916550753 1419 | ] 1420 | ] 1421 | }, 1422 | { 1423 | "id": "P4DB4ebdNBHaoZlctWEq6", 1424 | "type": "text", 1425 | "x": 566.9027772241958, 1426 | "y": 404.04366892471154, 1427 | "width": 121.875, 1428 | "height": 19.2, 1429 | "angle": 0, 1430 | "strokeColor": "#1e1e1e", 1431 | "backgroundColor": "transparent", 1432 | "fillStyle": "solid", 1433 | "strokeWidth": 1, 1434 | "strokeStyle": "solid", 1435 | "roughness": 0, 1436 | "opacity": 100, 1437 | "groupIds": [], 1438 | "frameId": null, 1439 | "roundness": null, 1440 | "seed": 460614557, 1441 | "version": 118, 1442 | "versionNonce": 1109350963, 1443 | "isDeleted": false, 1444 | "boundElements": [ 1445 | { 1446 | "id": "8YDbA_0TF8A4bMHlIpFlt", 1447 | "type": "arrow" 1448 | } 1449 | ], 1450 | "updated": 1708162907334, 1451 | "link": null, 1452 | "locked": false, 1453 | "text": "lines channel", 1454 | "fontSize": 16, 1455 | "fontFamily": 3, 1456 | "textAlign": "center", 1457 | "verticalAlign": "top", 1458 | "baseline": 15, 1459 | "containerId": null, 1460 | "originalText": "lines channel", 1461 | "lineHeight": 1.2 1462 | }, 1463 | { 1464 | "id": "8YDbA_0TF8A4bMHlIpFlt", 1465 | "type": "arrow", 1466 | "x": 719.367130865608, 1467 | "y": 267.4118864349379, 1468 | "width": 0.2954684471440032, 1469 | "height": 120.4427809664814, 1470 | "angle": 0, 1471 | "strokeColor": "#1e1e1e", 1472 | "backgroundColor": "transparent", 1473 | "fillStyle": "solid", 1474 | "strokeWidth": 1, 1475 | "strokeStyle": "solid", 1476 | "roughness": 0, 1477 | "opacity": 100, 1478 | "groupIds": [], 1479 | "frameId": null, 1480 | "roundness": null, 1481 | "seed": 855584989, 1482 | "version": 690, 1483 | "versionNonce": 1975572093, 1484 | "isDeleted": false, 1485 | "boundElements": null, 1486 | "updated": 1708162907334, 1487 | "link": null, 1488 | "locked": false, 1489 | "points": [ 1490 | [ 1491 | 0, 1492 | 0 1493 | ], 1494 | [ 1495 | -0.2954684471440032, 1496 | 120.4427809664814 1497 | ] 1498 | ], 1499 | "lastCommittedPoint": null, 1500 | "startBinding": { 1501 | "elementId": "65iNOg1JBqy3196n-VoqY", 1502 | "focus": -1.0749848860144178, 1503 | "gap": 11.448766444724981 1504 | }, 1505 | "endBinding": null, 1506 | "startArrowhead": null, 1507 | "endArrowhead": "arrow" 1508 | }, 1509 | { 1510 | "id": "65iNOg1JBqy3196n-VoqY", 1511 | "type": "text", 1512 | "x": 536.7115132421998, 1513 | "y": 278.8606528796629, 1514 | "width": 175.95709630658507, 1515 | "height": 28.828810658870914, 1516 | "angle": 0, 1517 | "strokeColor": "#1e1e1e", 1518 | "backgroundColor": "transparent", 1519 | "fillStyle": "solid", 1520 | "strokeWidth": 1, 1521 | "strokeStyle": "solid", 1522 | "roughness": 0, 1523 | "opacity": 100, 1524 | "groupIds": [], 1525 | "frameId": null, 1526 | "roundness": null, 1527 | "seed": 1216206909, 1528 | "version": 814, 1529 | "versionNonce": 1681628115, 1530 | "isDeleted": false, 1531 | "boundElements": [ 1532 | { 1533 | "id": "8YDbA_0TF8A4bMHlIpFlt", 1534 | "type": "arrow" 1535 | } 1536 | ], 1537 | "updated": 1708162907334, 1538 | "link": null, 1539 | "locked": false, 1540 | "text": "add 100 lines in a slice \nand send to channel", 1541 | "fontSize": 12.012004441196206, 1542 | "fontFamily": 3, 1543 | "textAlign": "center", 1544 | "verticalAlign": "top", 1545 | "baseline": 25.00000000000002, 1546 | "containerId": null, 1547 | "originalText": "add 100 lines in a slice \nand send to channel", 1548 | "lineHeight": 1.2 1549 | }, 1550 | { 1551 | "id": "qgC2FYURr1US2Msx2PykF", 1552 | "type": "arrow", 1553 | "x": 526.6338226989151, 1554 | "y": 439.4062694871164, 1555 | "width": 0.15371226258253046, 1556 | "height": 128.4099010214597, 1557 | "angle": 0, 1558 | "strokeColor": "#1e1e1e", 1559 | "backgroundColor": "transparent", 1560 | "fillStyle": "solid", 1561 | "strokeWidth": 1, 1562 | "strokeStyle": "solid", 1563 | "roughness": 0, 1564 | "opacity": 100, 1565 | "groupIds": [], 1566 | "frameId": null, 1567 | "roundness": null, 1568 | "seed": 1964300189, 1569 | "version": 1513, 1570 | "versionNonce": 1136328413, 1571 | "isDeleted": false, 1572 | "boundElements": null, 1573 | "updated": 1708162907334, 1574 | "link": null, 1575 | "locked": false, 1576 | "points": [ 1577 | [ 1578 | 0, 1579 | 0 1580 | ], 1581 | [ 1582 | 0.15371226258253046, 1583 | 128.4099010214597 1584 | ] 1585 | ], 1586 | "lastCommittedPoint": null, 1587 | "startBinding": null, 1588 | "endBinding": null, 1589 | "startArrowhead": null, 1590 | "endArrowhead": "arrow" 1591 | }, 1592 | { 1593 | "id": "HglTnDuYoz7wjhNYSvfsv", 1594 | "type": "rectangle", 1595 | "x": 465.2596317149281, 1596 | "y": 160.10677686170396, 1597 | "width": 319.444755867495, 1598 | "height": 181.1083722865548, 1599 | "angle": 0, 1600 | "strokeColor": "#1e1e1e", 1601 | "backgroundColor": "transparent", 1602 | "fillStyle": "solid", 1603 | "strokeWidth": 1, 1604 | "strokeStyle": "solid", 1605 | "roughness": 0, 1606 | "opacity": 100, 1607 | "groupIds": [], 1608 | "frameId": null, 1609 | "roundness": { 1610 | "type": 3 1611 | }, 1612 | "seed": 129863325, 1613 | "version": 582, 1614 | "versionNonce": 681486707, 1615 | "isDeleted": false, 1616 | "boundElements": [ 1617 | { 1618 | "id": "gawhb2bGF4y3b5NWw-jA2", 1619 | "type": "arrow" 1620 | } 1621 | ], 1622 | "updated": 1708162907334, 1623 | "link": null, 1624 | "locked": false 1625 | }, 1626 | { 1627 | "id": "M0mexGCW29jSmPLX5nF0L", 1628 | "type": "text", 1629 | "x": 533.3632398183486, 1630 | "y": 168.02705043999867, 1631 | "width": 168.75, 1632 | "height": 19.2, 1633 | "angle": 0, 1634 | "strokeColor": "#1e1e1e", 1635 | "backgroundColor": "transparent", 1636 | "fillStyle": "solid", 1637 | "strokeWidth": 1, 1638 | "strokeStyle": "solid", 1639 | "roughness": 0, 1640 | "opacity": 100, 1641 | "groupIds": [], 1642 | "frameId": null, 1643 | "roundness": null, 1644 | "seed": 1632694963, 1645 | "version": 260, 1646 | "versionNonce": 890313533, 1647 | "isDeleted": false, 1648 | "boundElements": null, 1649 | "updated": 1708162907334, 1650 | "link": null, 1651 | "locked": false, 1652 | "text": "Producer Goroutine", 1653 | "fontSize": 16, 1654 | "fontFamily": 3, 1655 | "textAlign": "center", 1656 | "verticalAlign": "top", 1657 | "baseline": 15, 1658 | "containerId": null, 1659 | "originalText": "Producer Goroutine", 1660 | "lineHeight": 1.2 1661 | }, 1662 | { 1663 | "id": "tddDCXyDfz0stK2WuKPOk", 1664 | "type": "text", 1665 | "x": 491.2837768083515, 1666 | "y": 586.0930436793064, 1667 | "width": 140.625, 1668 | "height": 38.4, 1669 | "angle": 0, 1670 | "strokeColor": "#1e1e1e", 1671 | "backgroundColor": "transparent", 1672 | "fillStyle": "solid", 1673 | "strokeWidth": 1, 1674 | "strokeStyle": "solid", 1675 | "roughness": 0, 1676 | "opacity": 100, 1677 | "groupIds": [], 1678 | "frameId": null, 1679 | "roundness": null, 1680 | "seed": 1497374771, 1681 | "version": 276, 1682 | "versionNonce": 881787667, 1683 | "isDeleted": false, 1684 | "boundElements": [ 1685 | { 1686 | "id": "qgC2FYURr1US2Msx2PykF", 1687 | "type": "arrow" 1688 | } 1689 | ], 1690 | "updated": 1708162907334, 1691 | "link": null, 1692 | "locked": false, 1693 | "text": "station = dubai\ntemp = 269", 1694 | "fontSize": 16, 1695 | "fontFamily": 3, 1696 | "textAlign": "center", 1697 | "verticalAlign": "top", 1698 | "baseline": 34, 1699 | "containerId": null, 1700 | "originalText": "station = dubai\ntemp = 269", 1701 | "lineHeight": 1.2 1702 | }, 1703 | { 1704 | "type": "rectangle", 1705 | "version": 883, 1706 | "versionNonce": 1646570397, 1707 | "isDeleted": false, 1708 | "id": "PwZYOHkeHR7td7cM_3VFZ", 1709 | "fillStyle": "solid", 1710 | "strokeWidth": 1, 1711 | "strokeStyle": "solid", 1712 | "roughness": 0, 1713 | "opacity": 100, 1714 | "angle": 0, 1715 | "x": 465.12008173055835, 1716 | "y": 483.89504147100916, 1717 | "strokeColor": "#1e1e1e", 1718 | "backgroundColor": "transparent", 1719 | "width": 319.444755867495, 1720 | "height": 181.1083722865548, 1721 | "seed": 2023471635, 1722 | "groupIds": [], 1723 | "frameId": null, 1724 | "roundness": { 1725 | "type": 3 1726 | }, 1727 | "boundElements": [], 1728 | "updated": 1708162907334, 1729 | "link": null, 1730 | "locked": false 1731 | }, 1732 | { 1733 | "type": "text", 1734 | "version": 491, 1735 | "versionNonce": 1082337459, 1736 | "isDeleted": false, 1737 | "id": "U5nuGX8vk91JtTXnfij1U", 1738 | "fillStyle": "solid", 1739 | "strokeWidth": 1, 1740 | "strokeStyle": "solid", 1741 | "roughness": 0, 1742 | "opacity": 100, 1743 | "angle": 0, 1744 | "x": 534.2202492067254, 1745 | "y": 635.1997563973758, 1746 | "strokeColor": "#1e1e1e", 1747 | "backgroundColor": "transparent", 1748 | "width": 168.75, 1749 | "height": 19.2, 1750 | "seed": 1128235539, 1751 | "groupIds": [], 1752 | "frameId": null, 1753 | "roundness": null, 1754 | "boundElements": [], 1755 | "updated": 1708162907334, 1756 | "link": null, 1757 | "locked": false, 1758 | "fontSize": 16, 1759 | "fontFamily": 3, 1760 | "text": "Consumer Goroutine", 1761 | "textAlign": "center", 1762 | "verticalAlign": "top", 1763 | "containerId": null, 1764 | "originalText": "Consumer Goroutine", 1765 | "lineHeight": 1.2, 1766 | "baseline": 15 1767 | }, 1768 | { 1769 | "id": "rxzqm38b-PRNFwuSmAo9E", 1770 | "type": "text", 1771 | "x": 676.4369617338801, 1772 | "y": 580.3861237740348, 1773 | "width": 100.40625, 1774 | "height": 29.399993574802345, 1775 | "angle": 0, 1776 | "strokeColor": "#1e1e1e", 1777 | "backgroundColor": "transparent", 1778 | "fillStyle": "solid", 1779 | "strokeWidth": 1, 1780 | "strokeStyle": "solid", 1781 | "roughness": 0, 1782 | "opacity": 100, 1783 | "groupIds": [], 1784 | "frameId": null, 1785 | "roundness": null, 1786 | "seed": 1846336221, 1787 | "version": 356, 1788 | "versionNonce": 1529294845, 1789 | "isDeleted": false, 1790 | "boundElements": null, 1791 | "updated": 1708162907334, 1792 | "link": null, 1793 | "locked": false, 1794 | "text": "update values \nin hashmap", 1795 | "fontSize": 12.24999732283431, 1796 | "fontFamily": 3, 1797 | "textAlign": "left", 1798 | "verticalAlign": "top", 1799 | "baseline": 26, 1800 | "containerId": null, 1801 | "originalText": "update values \nin hashmap", 1802 | "lineHeight": 1.2 1803 | }, 1804 | { 1805 | "id": "sKdHgwYSj9FyiekfCRyOD", 1806 | "type": "arrow", 1807 | "x": 1465.810651795366, 1808 | "y": 434.9956041953962, 1809 | "width": 129.85933504681793, 1810 | "height": 0.8451208089966258, 1811 | "angle": 0, 1812 | "strokeColor": "#1e1e1e", 1813 | "backgroundColor": "transparent", 1814 | "fillStyle": "solid", 1815 | "strokeWidth": 1, 1816 | "strokeStyle": "solid", 1817 | "roughness": 0, 1818 | "opacity": 100, 1819 | "groupIds": [], 1820 | "frameId": null, 1821 | "roundness": { 1822 | "type": 2 1823 | }, 1824 | "seed": 422336083, 1825 | "version": 487, 1826 | "versionNonce": 2025547517, 1827 | "isDeleted": false, 1828 | "boundElements": null, 1829 | "updated": 1708162921251, 1830 | "link": null, 1831 | "locked": false, 1832 | "points": [ 1833 | [ 1834 | 0, 1835 | 0 1836 | ], 1837 | [ 1838 | 129.85933504681793, 1839 | -0.8451208089966258 1840 | ] 1841 | ], 1842 | "lastCommittedPoint": null, 1843 | "startBinding": { 1844 | "elementId": "QiJmkW_yybfpcJXgommNZ", 1845 | "focus": 0.04052529473705326, 1846 | "gap": 14.162464368042947 1847 | }, 1848 | "endBinding": null, 1849 | "startArrowhead": null, 1850 | "endArrowhead": "arrow" 1851 | }, 1852 | { 1853 | "id": "5qL-8njgF9au0GyudmcaI", 1854 | "type": "ellipse", 1855 | "x": 788.2222812909743, 1856 | "y": 219.6769723086387, 1857 | "width": 729.5831520887629, 1858 | "height": 426.723617074135, 1859 | "angle": 0, 1860 | "strokeColor": "#e03131", 1861 | "backgroundColor": "transparent", 1862 | "fillStyle": "solid", 1863 | "strokeWidth": 1, 1864 | "strokeStyle": "solid", 1865 | "roughness": 1, 1866 | "opacity": 100, 1867 | "groupIds": [], 1868 | "frameId": null, 1869 | "roundness": { 1870 | "type": 2 1871 | }, 1872 | "seed": 1228638643, 1873 | "version": 504, 1874 | "versionNonce": 560029437, 1875 | "isDeleted": false, 1876 | "boundElements": [], 1877 | "updated": 1708162943836, 1878 | "link": null, 1879 | "locked": false 1880 | }, 1881 | { 1882 | "id": "zih5hG6f-K3SKxfN0hvNq", 1883 | "type": "text", 1884 | "x": 1466.2870735172623, 1885 | "y": 399.16278698189524, 1886 | "width": 97.37935399101256, 1887 | "height": 24.92911462169925, 1888 | "angle": 0, 1889 | "strokeColor": "#1e1e1e", 1890 | "backgroundColor": "transparent", 1891 | "fillStyle": "solid", 1892 | "strokeWidth": 1, 1893 | "strokeStyle": "solid", 1894 | "roughness": 1, 1895 | "opacity": 100, 1896 | "groupIds": [], 1897 | "frameId": null, 1898 | "roundness": null, 1899 | "seed": 631830269, 1900 | "version": 766, 1901 | "versionNonce": 1113894259, 1902 | "isDeleted": false, 1903 | "boundElements": null, 1904 | "updated": 1708163116946, 1905 | "link": null, 1906 | "locked": false, 1907 | "text": "sort and format \nresult string", 1908 | "fontSize": 10.387131092374668, 1909 | "fontFamily": 3, 1910 | "textAlign": "left", 1911 | "verticalAlign": "top", 1912 | "baseline": 22.000000000000046, 1913 | "containerId": null, 1914 | "originalText": "sort and format \nresult string", 1915 | "lineHeight": 1.2 1916 | } 1917 | ], 1918 | "appState": { 1919 | "gridSize": null, 1920 | "viewBackgroundColor": "#ffffff" 1921 | }, 1922 | "files": {} 1923 | } -------------------------------------------------------------------------------- /excalidraw/read-chunk.excalidraw: -------------------------------------------------------------------------------- 1 | { 2 | "type": "excalidraw", 3 | "version": 2, 4 | "source": "https://excalidraw.com", 5 | "elements": [ 6 | { 7 | "type": "rectangle", 8 | "version": 307, 9 | "versionNonce": 805275256, 10 | "isDeleted": false, 11 | "id": "NE1Mwaz2_4-JjvDt4A-xs", 12 | "fillStyle": "hachure", 13 | "strokeWidth": 2, 14 | "strokeStyle": "solid", 15 | "roughness": 2, 16 | "opacity": 100, 17 | "angle": 0, 18 | "x": 404.70703125, 19 | "y": 379.75, 20 | "strokeColor": "#1e1e1e", 21 | "backgroundColor": "transparent", 22 | "width": 433.47656249999994, 23 | "height": 49.9765625, 24 | "seed": 623468808, 25 | "groupIds": [], 26 | "frameId": null, 27 | "roundness": null, 28 | "boundElements": [], 29 | "updated": 1707879582646, 30 | "link": null, 31 | "locked": false 32 | }, 33 | { 34 | "type": "rectangle", 35 | "version": 753, 36 | "versionNonce": 218061832, 37 | "isDeleted": false, 38 | "id": "qVQME09O0QTIRZo_jl8EP", 39 | "fillStyle": "cross-hatch", 40 | "strokeWidth": 2, 41 | "strokeStyle": "solid", 42 | "roughness": 2, 43 | "opacity": 100, 44 | "angle": 0, 45 | "x": 837.87109375, 46 | "y": 379.32421875, 47 | "strokeColor": "#1e1e1e", 48 | "backgroundColor": "#ffc9c9", 49 | "width": 42.17968749999996, 50 | "height": 49.9765625, 51 | "seed": 1156440184, 52 | "groupIds": [], 53 | "frameId": null, 54 | "roundness": null, 55 | "boundElements": [], 56 | "updated": 1707879582646, 57 | "link": null, 58 | "locked": false 59 | }, 60 | { 61 | "type": "text", 62 | "version": 664, 63 | "versionNonce": 1101053304, 64 | "isDeleted": false, 65 | "id": "eYs89_lOtHzWJvdTljmsr", 66 | "fillStyle": "hachure", 67 | "strokeWidth": 2, 68 | "strokeStyle": "solid", 69 | "roughness": 0, 70 | "opacity": 100, 71 | "angle": 0, 72 | "x": 528.51953125, 73 | "y": 282.4875, 74 | "strokeColor": "#1e1e1e", 75 | "backgroundColor": "transparent", 76 | "width": 196.875, 77 | "height": 38.4, 78 | "seed": 84231288, 79 | "groupIds": [], 80 | "frameId": null, 81 | "roundness": null, 82 | "boundElements": [ 83 | { 84 | "id": "Qt1RtHD3xbkqlrpSRjG4h", 85 | "type": "arrow" 86 | } 87 | ], 88 | "updated": 1707879663335, 89 | "link": null, 90 | "locked": false, 91 | "fontSize": 16, 92 | "fontFamily": 3, 93 | "text": "length of chunk/byte \nslice read from file", 94 | "textAlign": "left", 95 | "verticalAlign": "top", 96 | "containerId": null, 97 | "originalText": "length of chunk/byte \nslice read from file", 98 | "lineHeight": 1.2, 99 | "baseline": 34 100 | }, 101 | { 102 | "type": "rectangle", 103 | "version": 798, 104 | "versionNonce": 1028520456, 105 | "isDeleted": false, 106 | "id": "6xQMdlKfICfW4jj1zTdIg", 107 | "fillStyle": "cross-hatch", 108 | "strokeWidth": 2, 109 | "strokeStyle": "solid", 110 | "roughness": 2, 111 | "opacity": 100, 112 | "angle": 0, 113 | "x": 795.4140625, 114 | "y": 380.00390625, 115 | "strokeColor": "#1e1e1e", 116 | "backgroundColor": "#b2f2bb", 117 | "width": 42.17968749999996, 118 | "height": 49.9765625, 119 | "seed": 809964552, 120 | "groupIds": [], 121 | "frameId": null, 122 | "roundness": null, 123 | "boundElements": [], 124 | "updated": 1707879582646, 125 | "link": null, 126 | "locked": false 127 | }, 128 | { 129 | "type": "line", 130 | "version": 334, 131 | "versionNonce": 36473464, 132 | "isDeleted": false, 133 | "id": "z4BEjshbL9jgAembn3Zr3", 134 | "fillStyle": "cross-hatch", 135 | "strokeWidth": 1, 136 | "strokeStyle": "dashed", 137 | "roughness": 0, 138 | "opacity": 100, 139 | "angle": 0, 140 | "x": 402.39453125, 141 | "y": 283.09765625, 142 | "strokeColor": "#1e1e1e", 143 | "backgroundColor": "#b2f2bb", 144 | "width": 6.359375, 145 | "height": 346.23828125, 146 | "seed": 1204464504, 147 | "groupIds": [], 148 | "frameId": null, 149 | "roundness": null, 150 | "boundElements": [], 151 | "updated": 1707879582646, 152 | "link": null, 153 | "locked": false, 154 | "startBinding": null, 155 | "endBinding": null, 156 | "lastCommittedPoint": null, 157 | "startArrowhead": null, 158 | "endArrowhead": null, 159 | "points": [ 160 | [ 161 | 0, 162 | 0 163 | ], 164 | [ 165 | 6.359375, 166 | 346.23828125 167 | ] 168 | ] 169 | }, 170 | { 171 | "type": "line", 172 | "version": 126, 173 | "versionNonce": 1821473032, 174 | "isDeleted": false, 175 | "id": "BWTPjz2gQrg0ZYsG0rpQA", 176 | "fillStyle": "cross-hatch", 177 | "strokeWidth": 1, 178 | "strokeStyle": "dashed", 179 | "roughness": 0, 180 | "opacity": 100, 181 | "angle": 0, 182 | "x": 836.5703125, 183 | "y": 281.59375, 184 | "strokeColor": "#1e1e1e", 185 | "backgroundColor": "#b2f2bb", 186 | "width": 0.43359375, 187 | "height": 121.26171875, 188 | "seed": 725626232, 189 | "groupIds": [], 190 | "frameId": null, 191 | "roundness": null, 192 | "boundElements": [], 193 | "updated": 1707879582646, 194 | "link": null, 195 | "locked": false, 196 | "startBinding": null, 197 | "endBinding": null, 198 | "lastCommittedPoint": null, 199 | "startArrowhead": null, 200 | "endArrowhead": null, 201 | "points": [ 202 | [ 203 | 0, 204 | 0 205 | ], 206 | [ 207 | 0.43359375, 208 | 121.26171875 209 | ] 210 | ] 211 | }, 212 | { 213 | "type": "arrow", 214 | "version": 148, 215 | "versionNonce": 2049211256, 216 | "isDeleted": false, 217 | "id": "Z-PgP98eQYnjH6aDhGk1U", 218 | "fillStyle": "cross-hatch", 219 | "strokeWidth": 1, 220 | "strokeStyle": "solid", 221 | "roughness": 0, 222 | "opacity": 100, 223 | "angle": 0, 224 | "x": 725.04296875, 225 | "y": 299.609375, 226 | "strokeColor": "#1e1e1e", 227 | "backgroundColor": "#b2f2bb", 228 | "width": 109.640625, 229 | "height": 0.58984375, 230 | "seed": 1245853048, 231 | "groupIds": [], 232 | "frameId": null, 233 | "roundness": null, 234 | "boundElements": [], 235 | "updated": 1707879582646, 236 | "link": null, 237 | "locked": false, 238 | "startBinding": null, 239 | "endBinding": null, 240 | "lastCommittedPoint": null, 241 | "startArrowhead": null, 242 | "endArrowhead": "arrow", 243 | "points": [ 244 | [ 245 | 0, 246 | 0 247 | ], 248 | [ 249 | 109.640625, 250 | 0.58984375 251 | ] 252 | ] 253 | }, 254 | { 255 | "type": "arrow", 256 | "version": 208, 257 | "versionNonce": 1117408888, 258 | "isDeleted": false, 259 | "id": "Qt1RtHD3xbkqlrpSRjG4h", 260 | "fillStyle": "cross-hatch", 261 | "strokeWidth": 1, 262 | "strokeStyle": "solid", 263 | "roughness": 0, 264 | "opacity": 100, 265 | "angle": 0, 266 | "x": 520.01953125, 267 | "y": 301.4703816538855, 268 | "strokeColor": "#1e1e1e", 269 | "backgroundColor": "#b2f2bb", 270 | "width": 117.49609375, 271 | "height": 1.3772745961144892, 272 | "seed": 1576431112, 273 | "groupIds": [], 274 | "frameId": null, 275 | "roundness": null, 276 | "boundElements": [], 277 | "updated": 1707879663335, 278 | "link": null, 279 | "locked": false, 280 | "startBinding": { 281 | "elementId": "eYs89_lOtHzWJvdTljmsr", 282 | "focus": 0.07225290648278006, 283 | "gap": 8.5 284 | }, 285 | "endBinding": null, 286 | "lastCommittedPoint": null, 287 | "startArrowhead": null, 288 | "endArrowhead": "arrow", 289 | "points": [ 290 | [ 291 | 0, 292 | 0 293 | ], 294 | [ 295 | -117.49609375, 296 | 1.3772745961144892 297 | ] 298 | ] 299 | }, 300 | { 301 | "type": "arrow", 302 | "version": 655, 303 | "versionNonce": 224391432, 304 | "isDeleted": false, 305 | "id": "b_LjjVyVdXMUAC5LPMFAm", 306 | "fillStyle": "cross-hatch", 307 | "strokeWidth": 1, 308 | "strokeStyle": "solid", 309 | "roughness": 0, 310 | "opacity": 100, 311 | "angle": 0, 312 | "x": 521.28125, 313 | "y": 488.09765625, 314 | "strokeColor": "#1e1e1e", 315 | "backgroundColor": "#b2f2bb", 316 | "width": 359.59375, 317 | "height": 3.36328125, 318 | "seed": 856655624, 319 | "groupIds": [], 320 | "frameId": null, 321 | "roundness": null, 322 | "boundElements": [], 323 | "updated": 1707879628221, 324 | "link": null, 325 | "locked": false, 326 | "startBinding": null, 327 | "endBinding": null, 328 | "lastCommittedPoint": null, 329 | "startArrowhead": null, 330 | "endArrowhead": "arrow", 331 | "points": [ 332 | [ 333 | 0, 334 | 0 335 | ], 336 | [ 337 | 359.59375, 338 | -3.36328125 339 | ] 340 | ] 341 | }, 342 | { 343 | "type": "line", 344 | "version": 152, 345 | "versionNonce": 1790760712, 346 | "isDeleted": false, 347 | "id": "jT__2isBYnQlOWY_dUED8", 348 | "fillStyle": "cross-hatch", 349 | "strokeWidth": 1, 350 | "strokeStyle": "dashed", 351 | "roughness": 0, 352 | "opacity": 100, 353 | "angle": 0, 354 | "x": 797.171875, 355 | "y": 428.3984375, 356 | "strokeColor": "#1e1e1e", 357 | "backgroundColor": "#b2f2bb", 358 | "width": 1.2578125, 359 | "height": 193.125, 360 | "seed": 497002872, 361 | "groupIds": [], 362 | "frameId": null, 363 | "roundness": null, 364 | "boundElements": [], 365 | "updated": 1707879582646, 366 | "link": null, 367 | "locked": false, 368 | "startBinding": null, 369 | "endBinding": null, 370 | "lastCommittedPoint": null, 371 | "startArrowhead": null, 372 | "endArrowhead": null, 373 | "points": [ 374 | [ 375 | 0, 376 | 0 377 | ], 378 | [ 379 | 1.2578125, 380 | 193.125 381 | ] 382 | ] 383 | }, 384 | { 385 | "type": "line", 386 | "version": 472, 387 | "versionNonce": 1673229320, 388 | "isDeleted": false, 389 | "id": "ZZbqG3QbX0YfZT4hrCALm", 390 | "fillStyle": "cross-hatch", 391 | "strokeWidth": 1, 392 | "strokeStyle": "dashed", 393 | "roughness": 0, 394 | "opacity": 100, 395 | "angle": 0, 396 | "x": 879.2265625, 397 | "y": 429.8671875, 398 | "strokeColor": "#1e1e1e", 399 | "backgroundColor": "#b2f2bb", 400 | "width": 2.16015625, 401 | "height": 87.23828125, 402 | "seed": 2073783304, 403 | "groupIds": [], 404 | "frameId": null, 405 | "roundness": null, 406 | "boundElements": [], 407 | "updated": 1707879746251, 408 | "link": null, 409 | "locked": false, 410 | "startBinding": null, 411 | "endBinding": null, 412 | "lastCommittedPoint": null, 413 | "startArrowhead": null, 414 | "endArrowhead": null, 415 | "points": [ 416 | [ 417 | 0, 418 | 0 419 | ], 420 | [ 421 | 2.16015625, 422 | 87.23828125 423 | ] 424 | ] 425 | }, 426 | { 427 | "type": "text", 428 | "version": 669, 429 | "versionNonce": 2011823480, 430 | "isDeleted": false, 431 | "id": "T0H5NemUZtNj_nHhoUhx2", 432 | "fillStyle": "cross-hatch", 433 | "strokeWidth": 1, 434 | "strokeStyle": "dashed", 435 | "roughness": 0, 436 | "opacity": 100, 437 | "angle": 0, 438 | "x": 811.2734375, 439 | "y": 565.1203125, 440 | "strokeColor": "#1e1e1e", 441 | "backgroundColor": "#b2f2bb", 442 | "width": 412.5, 443 | "height": 57.599999999999994, 444 | "seed": 1203990280, 445 | "groupIds": [], 446 | "frameId": null, 447 | "roundness": null, 448 | "boundElements": [ 449 | { 450 | "id": "-xsPzlYPZgcBwgBkIlbz_", 451 | "type": "arrow" 452 | } 453 | ], 454 | "updated": 1707879837005, 455 | "link": null, 456 | "locked": false, 457 | "fontSize": 16, 458 | "fontFamily": 3, 459 | "text": "option 2: send sliced chunk to channel \nupto last occurrence of '\\n'. The remaining \nslice is sent with the next chunk read.", 460 | "textAlign": "left", 461 | "verticalAlign": "top", 462 | "containerId": null, 463 | "originalText": "option 2: send sliced chunk to channel \nupto last occurrence of '\\n'. The remaining \nslice is sent with the next chunk read.", 464 | "lineHeight": 1.2, 465 | "baseline": 53 466 | }, 467 | { 468 | "type": "text", 469 | "version": 879, 470 | "versionNonce": 213103736, 471 | "isDeleted": false, 472 | "id": "Go35gWYZMYWl3goK_rHtr", 473 | "fillStyle": "cross-hatch", 474 | "strokeWidth": 1, 475 | "strokeStyle": "dashed", 476 | "roughness": 0, 477 | "opacity": 100, 478 | "angle": 0, 479 | "x": 901.3301391601562, 480 | "y": 468.975, 481 | "strokeColor": "#1e1e1e", 482 | "backgroundColor": "#b2f2bb", 483 | "width": 431.25, 484 | "height": 38.4, 485 | "seed": 1200362616, 486 | "groupIds": [], 487 | "frameId": null, 488 | "roundness": null, 489 | "boundElements": [], 490 | "updated": 1707879777437, 491 | "link": null, 492 | "locked": false, 493 | "fontSize": 16, 494 | "fontFamily": 3, 495 | "text": "option 1: read from file again till next '\\n' \nand send extended chunk on channel.", 496 | "textAlign": "left", 497 | "verticalAlign": "top", 498 | "containerId": null, 499 | "originalText": "option 1: read from file again till next '\\n' \nand send extended chunk on channel.", 500 | "lineHeight": 1.2, 501 | "baseline": 34 502 | }, 503 | { 504 | "type": "arrow", 505 | "version": 1043, 506 | "versionNonce": 1572572792, 507 | "isDeleted": false, 508 | "id": "-xsPzlYPZgcBwgBkIlbz_", 509 | "fillStyle": "cross-hatch", 510 | "strokeWidth": 1, 511 | "strokeStyle": "solid", 512 | "roughness": 0, 513 | "opacity": 100, 514 | "angle": 0, 515 | "x": 667.5, 516 | "y": 579.6158573000139, 517 | "strokeColor": "#1e1e1e", 518 | "backgroundColor": "#b2f2bb", 519 | "width": 128.95703125000045, 520 | "height": 2.077126078293304, 521 | "seed": 161678456, 522 | "groupIds": [], 523 | "frameId": null, 524 | "roundness": null, 525 | "boundElements": [], 526 | "updated": 1707879837006, 527 | "link": null, 528 | "locked": false, 529 | "startBinding": null, 530 | "endBinding": { 531 | "elementId": "T0H5NemUZtNj_nHhoUhx2", 532 | "focus": 0.2698014259131479, 533 | "gap": 14.816406249999773 534 | }, 535 | "lastCommittedPoint": null, 536 | "startArrowhead": null, 537 | "endArrowhead": "arrow", 538 | "points": [ 539 | [ 540 | 0, 541 | 0 542 | ], 543 | [ 544 | 128.95703125000045, 545 | 2.077126078293304 546 | ] 547 | ] 548 | }, 549 | { 550 | "type": "arrow", 551 | "version": 1397, 552 | "versionNonce": 208890632, 553 | "isDeleted": false, 554 | "id": "Uy-8k8MTLHSEjEcrUCBhT", 555 | "fillStyle": "cross-hatch", 556 | "strokeWidth": 1, 557 | "strokeStyle": "solid", 558 | "roughness": 0, 559 | "opacity": 100, 560 | "angle": 0, 561 | "x": 523.07421875, 562 | "y": 487.49359693918916, 563 | "strokeColor": "#1e1e1e", 564 | "backgroundColor": "#b2f2bb", 565 | "width": 115.6171875, 566 | "height": 0.38031568918916037, 567 | "seed": 132209528, 568 | "groupIds": [], 569 | "frameId": null, 570 | "roundness": null, 571 | "boundElements": [], 572 | "updated": 1707879642551, 573 | "link": null, 574 | "locked": false, 575 | "startBinding": null, 576 | "endBinding": null, 577 | "lastCommittedPoint": null, 578 | "startArrowhead": null, 579 | "endArrowhead": "arrow", 580 | "points": [ 581 | [ 582 | 0, 583 | 0 584 | ], 585 | [ 586 | -115.6171875, 587 | -0.38031568918916037 588 | ] 589 | ] 590 | }, 591 | { 592 | "type": "arrow", 593 | "version": 1696, 594 | "versionNonce": 1666213496, 595 | "isDeleted": false, 596 | "id": "WwP5qFomcnIYtctxg-q4m", 597 | "fillStyle": "cross-hatch", 598 | "strokeWidth": 1, 599 | "strokeStyle": "solid", 600 | "roughness": 0, 601 | "opacity": 100, 602 | "angle": 0, 603 | "x": 667.62890625, 604 | "y": 579.6117136707484, 605 | "strokeColor": "#1e1e1e", 606 | "backgroundColor": "#b2f2bb", 607 | "width": 259.46484375, 608 | "height": 0.7098472346569906, 609 | "seed": 1477918728, 610 | "groupIds": [], 611 | "frameId": null, 612 | "roundness": null, 613 | "boundElements": [], 614 | "updated": 1707879590394, 615 | "link": null, 616 | "locked": false, 617 | "startBinding": null, 618 | "endBinding": null, 619 | "lastCommittedPoint": null, 620 | "startArrowhead": null, 621 | "endArrowhead": "arrow", 622 | "points": [ 623 | [ 624 | 0, 625 | 0 626 | ], 627 | [ 628 | -259.46484375, 629 | 0.7098472346569906 630 | ] 631 | ] 632 | } 633 | ], 634 | "appState": { 635 | "gridSize": null, 636 | "viewBackgroundColor": "#ffffff" 637 | }, 638 | "files": {} 639 | } -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module github.com/shraddhaag/1brc-go 2 | 3 | go 1.21 4 | 5 | require ( 6 | github.com/davecgh/go-spew v1.1.1 // indirect 7 | github.com/pmezard/go-difflib v1.0.0 // indirect 8 | github.com/stretchr/testify v1.8.4 // indirect 9 | gopkg.in/yaml.v3 v3.0.1 // indirect 10 | ) 11 | -------------------------------------------------------------------------------- /go.sum: -------------------------------------------------------------------------------- 1 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 2 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 3 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 4 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 5 | github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= 6 | github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= 7 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 8 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 9 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 10 | -------------------------------------------------------------------------------- /main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "bytes" 5 | "errors" 6 | "flag" 7 | "fmt" 8 | "io" 9 | "log" 10 | "math" 11 | "os" 12 | "runtime" 13 | "runtime/pprof" 14 | "runtime/trace" 15 | "sort" 16 | "strings" 17 | "sync" 18 | ) 19 | 20 | var cpuprofile = flag.String("cpuprofile", "", "write cpu profile to `file`") 21 | var memprofile = flag.String("memprofile", "", "write memory profile to `file`") 22 | var executionprofile = flag.String("execprofile", "", "write tarce execution to `file`") 23 | var input = flag.String("input", "", "path to the input file to evaluate") 24 | 25 | func main() { 26 | 27 | flag.Parse() 28 | 29 | if *executionprofile != "" { 30 | f, err := os.Create("./profiles/" + *executionprofile) 31 | if err != nil { 32 | log.Fatal("could not create trace execution profile: ", err) 33 | } 34 | defer f.Close() 35 | trace.Start(f) 36 | defer trace.Stop() 37 | } 38 | 39 | if *cpuprofile != "" { 40 | f, err := os.Create("./profiles/" + *cpuprofile) 41 | if err != nil { 42 | log.Fatal("could not create CPU profile: ", err) 43 | } 44 | defer f.Close() 45 | if err := pprof.StartCPUProfile(f); err != nil { 46 | log.Fatal("could not start CPU profile: ", err) 47 | } 48 | defer pprof.StopCPUProfile() 49 | } 50 | 51 | evaluate(*input) 52 | 53 | if *memprofile != "" { 54 | f, err := os.Create("./profiles/" + *memprofile) 55 | if err != nil { 56 | log.Fatal("could not create memory profile: ", err) 57 | } 58 | defer f.Close() 59 | runtime.GC() 60 | if err := pprof.WriteHeapProfile(f); err != nil { 61 | log.Fatal("could not write memory profile: ", err) 62 | } 63 | } 64 | } 65 | 66 | type computedResult struct { 67 | city string 68 | min, max, avg float64 69 | } 70 | 71 | func evaluate(input string) string { 72 | mapOfTemp, err := readFileLineByLineIntoAMap(input) 73 | if err != nil { 74 | panic(err) 75 | } 76 | 77 | resultArr := make([]computedResult, len(mapOfTemp)) 78 | var count int 79 | for city, calculated := range mapOfTemp { 80 | resultArr[count] = computedResult{ 81 | city: city, 82 | min: round(float64(calculated.min) / 10.0), 83 | max: round(float64(calculated.max) / 10.0), 84 | avg: round(float64(calculated.sum) / 10.0 / float64(calculated.count)), 85 | } 86 | count++ 87 | } 88 | 89 | sort.Slice(resultArr, func(i, j int) bool { 90 | return resultArr[i].city < resultArr[j].city 91 | }) 92 | 93 | var stringsBuilder strings.Builder 94 | for _, i := range resultArr { 95 | stringsBuilder.WriteString(fmt.Sprintf("%s=%.1f/%.1f/%.1f, ", i.city, i.min, i.avg, i.max)) 96 | } 97 | return stringsBuilder.String()[:stringsBuilder.Len()-2] 98 | } 99 | 100 | type cityTemperatureInfo struct { 101 | count int64 102 | min int64 103 | max int64 104 | sum int64 105 | } 106 | 107 | func readFileLineByLineIntoAMap(filepath string) (map[string]cityTemperatureInfo, error) { 108 | file, err := os.Open(filepath) 109 | if err != nil { 110 | panic(err) 111 | } 112 | defer file.Close() 113 | 114 | mapOfTemp := make(map[string]cityTemperatureInfo) 115 | resultStream := make(chan map[string]cityTemperatureInfo, 10) 116 | chunkStream := make(chan []byte, 15) 117 | chunkSize := 64 * 1024 * 1024 118 | var wg sync.WaitGroup 119 | 120 | // spawn workers to consume (process) file chunks read 121 | for i := 0; i < runtime.NumCPU()-1; i++ { 122 | wg.Add(1) 123 | go func() { 124 | for chunk := range chunkStream { 125 | processReadChunk(chunk, resultStream) 126 | } 127 | wg.Done() 128 | }() 129 | } 130 | 131 | // spawn a goroutine to read file in chunks and send it to the chunk channel for further processing 132 | go func() { 133 | buf := make([]byte, chunkSize) 134 | leftover := make([]byte, 0, chunkSize) 135 | for { 136 | readTotal, err := file.Read(buf) 137 | if err != nil { 138 | if errors.Is(err, io.EOF) { 139 | break 140 | } 141 | panic(err) 142 | } 143 | buf = buf[:readTotal] 144 | 145 | toSend := make([]byte, readTotal) 146 | copy(toSend, buf) 147 | 148 | lastNewLineIndex := bytes.LastIndex(buf, []byte{'\n'}) 149 | 150 | toSend = append(leftover, buf[:lastNewLineIndex+1]...) 151 | leftover = make([]byte, len(buf[lastNewLineIndex+1:])) 152 | copy(leftover, buf[lastNewLineIndex+1:]) 153 | 154 | chunkStream <- toSend 155 | 156 | } 157 | close(chunkStream) 158 | 159 | // wait for all chunks to be proccessed before closing the result stream 160 | wg.Wait() 161 | close(resultStream) 162 | }() 163 | 164 | // process all city temperatures derived after processing the file chunks 165 | for t := range resultStream { 166 | for city, tempInfo := range t { 167 | if val, ok := mapOfTemp[city]; ok { 168 | val.count += tempInfo.count 169 | val.sum += tempInfo.sum 170 | if tempInfo.min < val.min { 171 | val.min = tempInfo.min 172 | } 173 | 174 | if tempInfo.max > val.max { 175 | val.max = tempInfo.max 176 | } 177 | mapOfTemp[city] = val 178 | } else { 179 | mapOfTemp[city] = tempInfo 180 | } 181 | } 182 | } 183 | 184 | return mapOfTemp, nil 185 | } 186 | 187 | func processReadChunk(buf []byte, resultStream chan<- map[string]cityTemperatureInfo) { 188 | toSend := make(map[string]cityTemperatureInfo) 189 | var start int 190 | var city string 191 | 192 | stringBuf := string(buf) 193 | for index, char := range stringBuf { 194 | switch char { 195 | case ';': 196 | city = stringBuf[start:index] 197 | start = index + 1 198 | case '\n': 199 | if (index-start) > 1 && len(city) != 0 { 200 | temp := customStringToIntParser(stringBuf[start:index]) 201 | start = index + 1 202 | 203 | if val, ok := toSend[city]; ok { 204 | val.count++ 205 | val.sum += temp 206 | if temp < val.min { 207 | val.min = temp 208 | } 209 | 210 | if temp > val.max { 211 | val.max = temp 212 | } 213 | toSend[city] = val 214 | } else { 215 | toSend[city] = cityTemperatureInfo{ 216 | count: 1, 217 | min: temp, 218 | max: temp, 219 | sum: temp, 220 | } 221 | } 222 | 223 | city = "" 224 | } 225 | } 226 | } 227 | resultStream <- toSend 228 | } 229 | 230 | func round(x float64) float64 { 231 | rounded := math.Round(x * 10) 232 | if rounded == -0.0 { 233 | return 0.0 234 | } 235 | return rounded / 10 236 | } 237 | 238 | // input: string containing signed number in the range [-99.9, 99.9] 239 | // output: signed int in the range [-999, 999] 240 | func customStringToIntParser(input string) (output int64) { 241 | var isNegativeNumber bool 242 | if input[0] == '-' { 243 | isNegativeNumber = true 244 | input = input[1:] 245 | } 246 | 247 | switch len(input) { 248 | case 3: 249 | output = int64(input[0])*10 + int64(input[2]) - int64('0')*11 250 | case 4: 251 | output = int64(input[0])*100 + int64(input[1])*10 + int64(input[3]) - (int64('0') * 111) 252 | } 253 | 254 | if isNegativeNumber { 255 | return -output 256 | } 257 | return 258 | } 259 | -------------------------------------------------------------------------------- /main_test.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "io/fs" 5 | "os" 6 | "path/filepath" 7 | "testing" 8 | 9 | "github.com/stretchr/testify/assert" 10 | ) 11 | 12 | func TestMain(t *testing.T) { 13 | 14 | inputFiles := find("./test_cases", ".txt") 15 | for _, test := range inputFiles { 16 | t.Run(test, func(t *testing.T) { 17 | output := evaluate(test + ".txt") 18 | assert.Equal(t, readFile(test+".out"), "{"+output+"}\n") 19 | }) 20 | } 21 | } 22 | 23 | func readFile(input string) string { 24 | fileContent, err := os.ReadFile(input) 25 | if err != nil { 26 | panic(err) 27 | } 28 | return string(fileContent) 29 | } 30 | 31 | func find(root, ext string) []string { 32 | var a []string 33 | filepath.WalkDir(root, func(s string, d fs.DirEntry, e error) error { 34 | if e != nil { 35 | return e 36 | } 37 | if filepath.Ext(d.Name()) == ext { 38 | a = append(a, s[:len(s)-len(ext)]) 39 | } 40 | return nil 41 | }) 42 | return a 43 | } 44 | -------------------------------------------------------------------------------- /profiles/cpu-100-buf.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/cpu-100-buf.prof -------------------------------------------------------------------------------- /profiles/cpu-100-invert.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/cpu-100-invert.prof -------------------------------------------------------------------------------- /profiles/cpu-1000-invert.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/cpu-1000-invert.prof -------------------------------------------------------------------------------- /profiles/cpu-10000-buf.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/cpu-10000-buf.prof -------------------------------------------------------------------------------- /profiles/cpu-50-buf.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/cpu-50-buf.prof -------------------------------------------------------------------------------- /profiles/cpu-chunk-less-gc.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/cpu-chunk-less-gc.prof -------------------------------------------------------------------------------- /profiles/cpu-custom-parser.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/cpu-custom-parser.prof -------------------------------------------------------------------------------- /profiles/cpu-int64.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/cpu-int64.prof -------------------------------------------------------------------------------- /profiles/cpu-less-access.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/cpu-less-access.prof -------------------------------------------------------------------------------- /profiles/cpu-map.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/cpu-map.prof -------------------------------------------------------------------------------- /profiles/cpu-parallel.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/cpu-parallel.prof -------------------------------------------------------------------------------- /profiles/cpu-preprocess.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/cpu-preprocess.prof -------------------------------------------------------------------------------- /profiles/cpu-read-chunk-2.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/cpu-read-chunk-2.prof -------------------------------------------------------------------------------- /profiles/cpu-read-chunk.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/cpu-read-chunk.prof -------------------------------------------------------------------------------- /profiles/cpu-remove-builder.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/cpu-remove-builder.prof -------------------------------------------------------------------------------- /profiles/cpu-remove-concatenation.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/cpu-remove-concatenation.prof -------------------------------------------------------------------------------- /profiles/cpu.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/cpu.prof -------------------------------------------------------------------------------- /profiles/cpu1.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/cpu1.prof -------------------------------------------------------------------------------- /profiles/cpu2.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/cpu2.prof -------------------------------------------------------------------------------- /profiles/cpu3.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/cpu3.prof -------------------------------------------------------------------------------- /profiles/cpu4.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/cpu4.prof -------------------------------------------------------------------------------- /profiles/cpu5.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/cpu5.prof -------------------------------------------------------------------------------- /profiles/mem-100-buf.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/mem-100-buf.prof -------------------------------------------------------------------------------- /profiles/mem-100-invert.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/mem-100-invert.prof -------------------------------------------------------------------------------- /profiles/mem-1000-invert.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/mem-1000-invert.prof -------------------------------------------------------------------------------- /profiles/mem-10000-buf.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/mem-10000-buf.prof -------------------------------------------------------------------------------- /profiles/mem-50-buf.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/mem-50-buf.prof -------------------------------------------------------------------------------- /profiles/mem-chunk-less-gc.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/mem-chunk-less-gc.prof -------------------------------------------------------------------------------- /profiles/mem.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/mem.prof -------------------------------------------------------------------------------- /profiles/mem1.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/mem1.prof -------------------------------------------------------------------------------- /profiles/mem2.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/mem2.prof -------------------------------------------------------------------------------- /profiles/mem3.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/mem3.prof -------------------------------------------------------------------------------- /profiles/mem4.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/mem4.prof -------------------------------------------------------------------------------- /profiles/mem5.prof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shraddhaag/1brc/8513d5e70a1bfabbf46ab86a9cb6558bc9805154/profiles/mem5.prof -------------------------------------------------------------------------------- /test_cases/measurements-1.out: -------------------------------------------------------------------------------- 1 | {Kunming=19.8/19.8/19.8} 2 | -------------------------------------------------------------------------------- /test_cases/measurements-1.txt: -------------------------------------------------------------------------------- 1 | Kunming;19.8 2 | -------------------------------------------------------------------------------- /test_cases/measurements-10.out: -------------------------------------------------------------------------------- 1 | {Adelaide=15.0/15.0/15.0, Cabo San Lucas=14.9/14.9/14.9, Dodoma=22.2/22.2/22.2, Halifax=12.9/12.9/12.9, Karachi=15.4/15.4/15.4, Pittsburgh=9.7/9.7/9.7, Ségou=25.7/25.7/25.7, Tauranga=38.2/38.2/38.2, Xi'an=24.2/24.2/24.2, Zagreb=12.2/12.2/12.2} 2 | -------------------------------------------------------------------------------- /test_cases/measurements-10.txt: -------------------------------------------------------------------------------- 1 | Halifax;12.9 2 | Zagreb;12.2 3 | Cabo San Lucas;14.9 4 | Adelaide;15.0 5 | Ségou;25.7 6 | Pittsburgh;9.7 7 | Karachi;15.4 8 | Xi'an;24.2 9 | Dodoma;22.2 10 | Tauranga;38.2 11 | -------------------------------------------------------------------------------- /test_cases/measurements-2.out: -------------------------------------------------------------------------------- 1 | {Bosaso=19.2/19.2/19.2, Petropavlovsk-Kamchatsky=9.5/9.5/9.5} 2 | -------------------------------------------------------------------------------- /test_cases/measurements-2.txt: -------------------------------------------------------------------------------- 1 | Bosaso;19.2 2 | Petropavlovsk-Kamchatsky;9.5 3 | -------------------------------------------------------------------------------- /test_cases/measurements-20.out: -------------------------------------------------------------------------------- 1 | {Abéché1️⃣🐝🏎️=27.3/27.3/27.3, Almaty1️⃣🐝🏎️=15.3/15.3/15.3, Baghdad1️⃣🐝🏎️=26.0/26.0/26.0, Bangkok1️⃣🐝🏎️=25.6/25.6/25.6, Berlin1️⃣🐝🏎️=-0.3/-0.3/-0.3, Birao1️⃣🐝🏎️=33.5/33.5/33.5, Canberra1️⃣🐝🏎️=5.2/5.2/5.2, Chittagong1️⃣🐝🏎️=12.6/12.6/12.6, Da Nang1️⃣🐝🏎️=33.7/33.7/33.7, Edinburgh1️⃣🐝🏎️=19.8/19.8/19.8, Irkutsk1️⃣🐝🏎️=9.9/9.9/9.9, Lhasa1️⃣🐝🏎️=13.4/13.4/13.4, Lyon1️⃣🐝🏎️=1.8/1.8/1.8, Mogadishu1️⃣🐝🏎️=11.5/11.5/11.5, Nashville1️⃣🐝🏎️=-4.9/-4.9/-4.9, Odesa1️⃣🐝🏎️=6.5/6.5/6.5, Parakou1️⃣🐝🏎️=36.3/36.3/36.3, Tamanrasset1️⃣🐝🏎️=17.9/17.9/17.9, Tirana1️⃣🐝🏎️=27.7/27.7/27.7, Xi'an1️⃣🐝🏎️=17.5/17.5/17.5} 2 | -------------------------------------------------------------------------------- /test_cases/measurements-20.txt: -------------------------------------------------------------------------------- 1 | Odesa1️⃣🐝🏎️;6.5 2 | Canberra1️⃣🐝🏎️;5.2 3 | Lhasa1️⃣🐝🏎️;13.4 4 | Edinburgh1️⃣🐝🏎️;19.8 5 | Da Nang1️⃣🐝🏎️;33.7 6 | Xi'an1️⃣🐝🏎️;17.5 7 | Berlin1️⃣🐝🏎️;-0.3 8 | Tamanrasset1️⃣🐝🏎️;17.9 9 | Abéché1️⃣🐝🏎️;27.3 10 | Baghdad1️⃣🐝🏎️;26.0 11 | Lyon1️⃣🐝🏎️;1.8 12 | Mogadishu1️⃣🐝🏎️;11.5 13 | Bangkok1️⃣🐝🏎️;25.6 14 | Irkutsk1️⃣🐝🏎️;9.9 15 | Parakou1️⃣🐝🏎️;36.3 16 | Almaty1️⃣🐝🏎️;15.3 17 | Birao1️⃣🐝🏎️;33.5 18 | Chittagong1️⃣🐝🏎️;12.6 19 | Tirana1️⃣🐝🏎️;27.7 20 | Nashville1️⃣🐝🏎️;-4.9 21 | -------------------------------------------------------------------------------- /test_cases/measurements-3.out: -------------------------------------------------------------------------------- 1 | {Bosaso=-15.0/1.3/20.0, Petropavlovsk-Kamchatsky=-9.5/0.0/9.5} 2 | -------------------------------------------------------------------------------- /test_cases/measurements-3.txt: -------------------------------------------------------------------------------- 1 | Bosaso;5.0 2 | Bosaso;20.0 3 | Bosaso;-5.0 4 | Bosaso;-15.0 5 | Petropavlovsk-Kamchatsky;9.5 6 | Petropavlovsk-Kamchatsky;-9.5 7 | -------------------------------------------------------------------------------- /test_cases/measurements-boundaries.out: -------------------------------------------------------------------------------- 1 | {Bosaso=-99.9/-99.9/-99.9, Petropavlovsk-Kamchatsky=99.9/99.9/99.9} 2 | -------------------------------------------------------------------------------- /test_cases/measurements-boundaries.txt: -------------------------------------------------------------------------------- 1 | Bosaso;-99.9 2 | Petropavlovsk-Kamchatsky;99.9 3 | -------------------------------------------------------------------------------- /test_cases/measurements-complex-utf8.out: -------------------------------------------------------------------------------- 1 | {B=8.9/8.9/8.9, C=38.9/38.9/38.9, CabindaKermānZunhuaRochesterValenzuelaOrūmīyehWugangShuangqiaoTshikapa=3.0/3.0/3.0, ChesterLobnyaSan LeandroHemeiSolweziGrand BourgKaliboS=23.4/23.4/23.4, MirnaPehčevoRopažiGus=16.7/16.7/16.7, PototanSahuayo de MorelosBambergMosigkauFrancisco BeltrãoJelenia GóraTelêmaco Borb=17.5/17.5/17.5, TanjungpinangKasselHaldiaLuxorLạng SơnAt TājīTaraka=10.6/10.6/10.6, aniCartagoEṭ ṬīraTemerinCormeilles-en-ParisisZawyat ech CheïkhS=25.4/25.4/25.4, burgazAl ḨawīyahSalamancaMbanza KongoNchelengeZhangaözenTurbatMatiMangghystaūMalak=21.5/21.5/21.5, cotánSan Ramón de la Nueva OránWausauGbaweTailaiRochester HillsVilla ElisaToba TekS=11.2/11.2/11.2, eLafayetteAsh Shaţ=14.2/14.2/14.2, en IslandKota BharuCiudad López MateosCelayaVinhDuyunLos Mochis‘AjmānNyalaLarkanaWichitaNishi=11.9/11.9/11.9, epé=28.2/28.2/28.2, hanVarkkallaiPort LokoD=10.9/10.9/10.9, iCoahuitlánRabatJahāngīrpur SālkhaniCamUniversity of California-Santa BarbaraSerravalleTelkathuM=13.4/13.4/13.4, igButeboJuršinciKoaniImdinaNova VasDestrnikVarvarinSkomunGornji PetrovciRibnicaKon TumŠavnikPoul=22.5/22.5/22.5, igButeboJuršinciKoaniImdinaNova VasDestrnikVarvarinSkopunGornji PetrovciRibnicaKon TumŠavnikPodl=11.5/11.5/11.5, igButeboJuršinciKoaniImdinaNova VasDestrnikVarvarinSkopunGornji PetrovciRibnicaKon TumŠavnikPoul=18.5/18.5/18.5, inhoSökeDordrechtPoáLaloG=13.1/13.1/13.1, iudad Melchor MúzquizQuinhámelDa=40.5/40.5/40.5, ixButeboJuršinciKoaniImdinaNova VasDestrnikVarvarinSkomunGornji PetrovciRibnicaKon TumŠavnikPoul=0.1/0.1/0.1, l ‘=14.6/14.6/14.6, lhuleuTacurongNavapolatskPiscoDera Ismail KhanLabéAltamiraCavite CityYevpatoriiaTait=22.8/22.8/22.8, liLoretoPlacentiaAliso ViejoChomaPen-y-Bont ar OgwrCojutepeque=12.4/12.4/12.4, lioúpoliBarahonaHoPhuketLe BardoBuena ParkKayesChampigny-sur-MarneHaskovoChathamBatleyEsteioRe=22.5/22.5/22.5, m el Bo=14.6/14.6/14.6, mazunchaleZrenjaninFouchanaSurtPanč=6.7/6.7/6.7, ngoDübendorfC=11.7/11.7/11.7, nt-A=9.2/9.2/9.2, ntington StationKampong SpeuKakataMoschátoBressoVentspilsSaint-CloudTamboSidi Smai’ilDandenon=14.6/14.6/14.6, oCanagatanHelsinkiJabalpurProvidenceRuchengNizhniy NovgorodAhvāzJeparaShaoyangComayagüe=17.3/17.3/17.3, oGumlāSamā’=14.9/14.9/14.9, os Reyes de SalgadoCinisello BalsamoKashibaH=20.0/20.0/20.0, picuíbaJhang CityTepicJayapuraRio BrancoToyamaFangtingSanandajDelhi CantonmentLinghaiShorāpurToy=13.0/13.0/13.0, raKielSibuYatoParanáSanta ClaraYamagataKatihārBeykozImperat=13.5/13.5/13.5, rhamDera Ghazi KhanMiyazakiBhātpār=21.3/21.3/21.3, rugarhVerāvalAlagoinhasEdremitBandırmaSalavatGandajikaLucapaLeesburgTamaRas Tan=10.9/10.9/10.9, skişeh=12.9/12.9/12.9, venGaopingDunhuaAz Zarqā’SylhetKaihuaCaerdyddJāmnagarFuyuanGayaFlorianópolisC=1.9/1.9/1.9, y-le-MoutierSant’ArpinoPljevljaRo=0.8/0.8/0.8, ça PaulistaDarmstadtZhengdingPindamonhangabaEnschedeGirónUttarpāraHeidelbergK=6.0/6.0/6.0, üSosnowiecTanauanMya=18.4/18.4/18.4, ālSongnimSanto TomasKoiduHoshangābādOpoleNovocheboksarskArarasKhannaPunoKoforiduaAhmadpur E=19.4/19.4/19.4, āng=15.7/15.7/15.7, ġFis=9.6/9.6/9.6, ‘AqabahPembaNowgongQu=12.9/12.9/12.9} 2 | -------------------------------------------------------------------------------- /test_cases/measurements-complex-utf8.txt: -------------------------------------------------------------------------------- 1 | aniCartagoEṭ ṬīraTemerinCormeilles-en-ParisisZawyat ech CheïkhS;25.4 2 | picuíbaJhang CityTepicJayapuraRio BrancoToyamaFangtingSanandajDelhi CantonmentLinghaiShorāpurToy;13.0 3 | lhuleuTacurongNavapolatskPiscoDera Ismail KhanLabéAltamiraCavite CityYevpatoriiaTait;22.8 4 | āng;15.7 5 | hanVarkkallaiPort LokoD;10.9 6 | eLafayetteAsh Shaţ;14.2 7 | ‘AqabahPembaNowgongQu;12.9 8 | inhoSökeDordrechtPoáLaloG;13.1 9 | skişeh;12.9 10 | rhamDera Ghazi KhanMiyazakiBhātpār;21.3 11 | igButeboJuršinciKoaniImdinaNova VasDestrnikVarvarinSkopunGornji PetrovciRibnicaKon TumŠavnikPodl;11.5 12 | igButeboJuršinciKoaniImdinaNova VasDestrnikVarvarinSkopunGornji PetrovciRibnicaKon TumŠavnikPoul;18.5 13 | igButeboJuršinciKoaniImdinaNova VasDestrnikVarvarinSkomunGornji PetrovciRibnicaKon TumŠavnikPoul;22.5 14 | ixButeboJuršinciKoaniImdinaNova VasDestrnikVarvarinSkomunGornji PetrovciRibnicaKon TumŠavnikPoul;0.1 15 | B;8.9 16 | C;38.9 17 | nt-A;9.2 18 | y-le-MoutierSant’ArpinoPljevljaRo;0.8 19 | oGumlāSamā’;14.9 20 | os Reyes de SalgadoCinisello BalsamoKashibaH;20.0 21 | m el Bo;14.6 22 | mazunchaleZrenjaninFouchanaSurtPanč;6.7 23 | ġFis;9.6 24 | epé;28.2 25 | ālSongnimSanto TomasKoiduHoshangābādOpoleNovocheboksarskArarasKhannaPunoKoforiduaAhmadpur E;19.4 26 | iudad Melchor MúzquizQuinhámelDa;40.5 27 | ChesterLobnyaSan LeandroHemeiSolweziGrand BourgKaliboS;23.4 28 | cotánSan Ramón de la Nueva OránWausauGbaweTailaiRochester HillsVilla ElisaToba TekS;11.2 29 | raKielSibuYatoParanáSanta ClaraYamagataKatihārBeykozImperat;13.5 30 | l ‘;14.6 31 | TanjungpinangKasselHaldiaLuxorLạng SơnAt TājīTaraka;10.6 32 | MirnaPehčevoRopažiGus;16.7 33 | üSosnowiecTanauanMya;18.4 34 | ngoDübendorfC;11.7 35 | liLoretoPlacentiaAliso ViejoChomaPen-y-Bont ar OgwrCojutepeque;12.4 36 | burgazAl ḨawīyahSalamancaMbanza KongoNchelengeZhangaözenTurbatMatiMangghystaūMalak;21.5 37 | iCoahuitlánRabatJahāngīrpur SālkhaniCamUniversity of California-Santa BarbaraSerravalleTelkathuM;13.4 38 | lioúpoliBarahonaHoPhuketLe BardoBuena ParkKayesChampigny-sur-MarneHaskovoChathamBatleyEsteioRe;22.5 39 | PototanSahuayo de MorelosBambergMosigkauFrancisco BeltrãoJelenia GóraTelêmaco Borb;17.5 40 | CabindaKermānZunhuaRochesterValenzuelaOrūmīyehWugangShuangqiaoTshikapa;3.0 41 | venGaopingDunhuaAz Zarqā’SylhetKaihuaCaerdyddJāmnagarFuyuanGayaFlorianópolisC;1.9 42 | ntington StationKampong SpeuKakataMoschátoBressoVentspilsSaint-CloudTamboSidi Smai’ilDandenon;14.6 43 | rugarhVerāvalAlagoinhasEdremitBandırmaSalavatGandajikaLucapaLeesburgTamaRas Tan;10.9 44 | oCanagatanHelsinkiJabalpurProvidenceRuchengNizhniy NovgorodAhvāzJeparaShaoyangComayagüe;17.3 45 | ça PaulistaDarmstadtZhengdingPindamonhangabaEnschedeGirónUttarpāraHeidelbergK;6.0 46 | en IslandKota BharuCiudad López MateosCelayaVinhDuyunLos Mochis‘AjmānNyalaLarkanaWichitaNishi;11.9 47 | -------------------------------------------------------------------------------- /test_cases/measurements-dot.out: -------------------------------------------------------------------------------- 1 | {-=1.0/1.5/2.0, .=1.0/1.0/1.0} 2 | -------------------------------------------------------------------------------- /test_cases/measurements-dot.txt: -------------------------------------------------------------------------------- 1 | .;1.0 2 | -;1.0 3 | -;2.0 4 | -------------------------------------------------------------------------------- /test_cases/measurements-rounding.out: -------------------------------------------------------------------------------- 1 | {ham=14.6/25.5/33.6, jel=-9.0/18.0/46.5} 2 | -------------------------------------------------------------------------------- /test_cases/measurements-short.out: -------------------------------------------------------------------------------- 1 | {a=1.0/1.0/1.0, b=1.0/1.5/2.0} 2 | -------------------------------------------------------------------------------- /test_cases/measurements-short.txt: -------------------------------------------------------------------------------- 1 | a;1.0 2 | b;1.0 3 | b;2.0 4 | -------------------------------------------------------------------------------- /test_cases/measurements-shortest.out: -------------------------------------------------------------------------------- 1 | {a=1.0/1.0/1.0} 2 | -------------------------------------------------------------------------------- /test_cases/measurements-shortest.txt: -------------------------------------------------------------------------------- 1 | a;1.0 2 | --------------------------------------------------------------------------------