Skip to content
Snippets Groups Projects
Commit cd760a2c authored by Brady James Garvin's avatar Brady James Garvin
Browse files

Initial commit.

parents
Branches
No related tags found
No related merge requests found
Showing
with 879 additions and 0 deletions
# Disable line-ending conversions for this repository.
* -text
# dependencies
/node_modules
# testing
/coverage
# production
/build
# environments
.env.local
.env.development.local
.env.test.local
.env.production.local
# logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# misc
*~
.DS_Store
[submodule "stylelint-config"]
path = stylelint-config
url = git@git.unl.edu:soft-core/soft-260/stylelint-config.git
[submodule "eslint-config"]
path = eslint-config
url = git@git.unl.edu:soft-core/soft-260/eslint-config.git
Subproject commit 24df42fb655d234b83c93b0fb24d012e4d9ecb58
{
"folders": [
{
"path": "."
}
],
"settings": {
"files.eol": "LF",
"files.exclude": {
"**/node_modules": true
},
"files.trimFinalNewlines": true,
"files.trimTrailingWhitespace": true
}
}
# dependencies
/node_modules
# testing
/coverage
# production
/build
# environments
.env.local
.env.development.local
.env.test.local
.env.production.local
# logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# misc
*~
.DS_Store
# Graph Search vs. Dynamic Programming vs Greedy Algorithms
* Idea behind *graph search* design:
* Frame the problem as a problem on a graph
* Explore vertices and edges using a worklist algorithm
* Compute a subproblem result for each vertex
* Postprocess to extract a final result
* Idea behind *dynamic programming* design:
* Frame the problem as a problem on a directed acyclic graph (DAG)
* Explore vertices in topological order
* Compute a subproblem result for each vertex
* Postprocess to extract a final result
* Idea behind *greedy* design:
* Frame the problem as a problem on a directed acyclic graph (DAG)
* Start at a source vertex
* Compute and follow a "best" outgoing edge at each vertex (without exploring anything else)
* Postprocess to extract a final result
--------------------------------------------------------------------------------
# Problem 1:
A vehicle can travel up to a distance of 10 without refueling, and along its route, there are nine locations, `a` through `i`, where it can be refueled; these locations are spaced as follows:
* The distance from `a` to `b` is 5.
* The distance from `b` to `c` is 3.
* The distance from `c` to `d` is 3.
* The distance from `d` to `e` is 8.
* The distance from `e` to `f` is 3.
* The distance from `f` to `g` is 2.
* The distance from `g` to `h` is 2.
* The distance from `h` to `i` is 4.
If the vehicle is to start empty at `a` and end up full at `i`, where should it refuel to minimize the number of refuelings?
Example: The vehicle could:
* Fuel at `a`,
* Travel 5 to fuel at `b`,
* Travel 6 to fuel at `d`,
* Travel 8 to fuel at `e`,
* Travel 3 to fuel at `f`,
* Travel 4 to fuel at `h`, and
* Travel 4 for fuel at `i`.
This plan takes seven refuelings, but there are plans with fewer.
--------------------------------------------------------------------------------
# Dynamic Programming for the Fueling Problem
Problem: Given a sequence of fueling sites, the distances between consecutive sites, and a maximum range per fueling, find a plan for traveling over the sequence with as few refuelings as possible.
## DAG
* Vertices (situations):
* Locations
* Edges (actions):
* Ways to advance to a location up to `range` units of distance away
* Edge weights (optional):
* Distance to the next location
* Topological order:
* Order along the route: `a → b → … → i`
* Goal:
* Find the path from `a` to `i` with the fewest edges
## Backpointer Class
* Information for the final result:
* The previous location
* Information to go back:
* Nothing additional (since we already have the previous location)
* Information to compare quality:
* The number of fuelings so far
## Choosing a Backpointer
* Exhaustive search:
* Generate all preceding locations out to a distance of `range`
* Check that the backpointer minimizes the number of fuelings so far
## Example
* The range per fueling is 10.
* The distance from `a` to `b` is 5.
* The distance from `b` to `c` is 3.
* The distance from `c` to `d` is 3.
* The distance from `d` to `e` is 8.
* The distance from `e` to `f` is 3.
* The distance from `f` to `g` is 2.
* The distance from `g` to `h` is 2.
* The distance from `h` to `i` is 4.
Location Previous Location Fuelings so Far
-------- ----------------- ---------------
a ⊥ 1
b a 2
c a 2
d c 3
e d 4
f e 5
g e 5
h e 5
i h 6
Reversed Path
----
i → h → e → d → c → a
--------------------------------------------------------------------------------
# Greedy Algorithm for the Fueling Problem
Problem: [same as above]
## DAG
* [same as above]
## Choosing a Forward Edge
* Exhaustive search:
* Generate …
* Check that …
## Example
* The range per fueling is 10.
* The distance from `a` to `b` is 5.
* The distance from `b` to `c` is 3.
* The distance from `c` to `d` is 3.
* The distance from `d` to `e` is 8.
* The distance from `e` to `f` is 3.
* The distance from `f` to `g` is 2.
* The distance from `g` to `h` is 2.
* The distance from `h` to `i` is 4.
Location Next Location
-------- -------------
a …
Path
----
a → …
--------------------------------------------------------------------------------
# Problem 2:
You are creating a lossless compression scheme for text that uses the symbols 'a' through 'd' at the following rates:
* 'a' occurs about 15% of the time in a typical text.
* 'b' occurs about 30% of the time in a typical text.
* 'c' occurs about 25% of the time in a typical text.
* 'd' occurs about 30% of the time in a typical text.
The compressed text will be saved in a binary format, so your compression scheme needs to encode each symbol into a sequence of zeros and ones. For it to be lossless, there can be no ambiguities in the encoding. For example, the encoding
* 'a' → `0`
* 'b' → `1`
* 'c' → `00`
* 'd' → `11`
must be lossy because binary like `0011` could decode to any of 'aabb', 'aad', 'cbb', or 'cd'.
What lossless compression scheme minimizes the expected number of bits per symbol?
Example: The lossless encoding
* 'a' → `0`
* 'b' → `10`
* 'c' → `110`
* 'd' → `1110`
has `15% * 1 + 30% * 2 + 25% * 3 + 30% * 4 = 2.7` expected bits per symbol. But there is an encoding with better compression.
--------------------------------------------------------------------------------
# Guaranteeing a Lossless Encoding
For a lossless code that can be decoded from left to right without lookahead, the code words for two distinct symbols always take this form:
* `[common prefix]0[first suffix]`
* `[common prefix]1[second suffix]`
(Proof: The only other possiblity is that one code word is a prefix of the other. But after reading the prefix, a no-lookahead decoder would not know whether or not to keep reading bits, which contracts the losslessness of the encoding.)
So if we already have suffixes for two symbols `x` and `y`, we just need to find a common prefix meaning "`x` or `y`", and then we will have the symbols' full code words.
## Example
Symbol Partitioning 'a' 'b' 'c' 'd'
-------------------------- --- --- --- ---
{'a'}, {'b'}, {'c'}, {'d'}
{'a', 'b'}, {'c'}, {'d'} 0 1
{'a', 'b', 'c'}, {'d'} 00 01 1
{'a', 'b', 'c', 'd'} 000 001 01 1
There's still the question of how to choose which sets to combine in each step. But one clue is that each combination costs a bit for each symbol in the combined set.
--------------------------------------------------------------------------------
# Greedy Algorithm for the Encoding Problem
Problem: Given frequencies for a set of symbols, create a lossless binary encoding that minimizes the expected number of bits per symbols.
## DAG
* Vertices (situations):
*
* Edges (actions):
*
* Edge weights (optional):
*
* Topological order:
*
* Goal:
*
## Choosing a Forward Edge
* Direct solution:
*
*
*
## Example
* 'a' occurs about 15% of the time in a typical text.
* 'b' occurs about 30% of the time in a typical text.
* 'c' occurs about 25% of the time in a typical text.
* 'd' occurs about 30% of the time in a typical text.
Symbol Partitioning (Frequency Order) 'a' 'b' 'c' 'd'
------------------------------------------------------- --- --- --- ---
{'a'} → 0.15, {'c'} → 0.25, {'b'} → 0.30, {'d'} → 0.30
Source diff could not be displayed: it is too large. Options to address this: view the blob.
{
"name": "@unlsoft/greedy-algorithms",
"version": "1.0.0",
"description": "Starter code for the class on greedy algorithms.",
"private": true,
"license": "UNLICENSED",
"scripts": {
"lint:css": "stylelint \"**/*.css\" \"**/*.module.css\" \"!coverage/**\"",
"lint:js": "eslint --max-warnings 0 ./src",
"lint": "run-s --continue-on-error lint:**",
"test-once": "react-scripts test --watchAll=false --coverage",
"test": "react-scripts test --watchAll --coverage",
"start": "react-scripts start",
"build": "react-scripts build",
"eject": "react-scripts eject"
},
"homepage": ".",
"dependencies": {
"@reduxjs/toolkit": "^1.6.0",
"@testing-library/jest-dom": "^5.14.1",
"@testing-library/react": "^12.0.0",
"@testing-library/user-event": "^13.1.9",
"classnames": "^2.3.1",
"npm-run-all": "^4.1.5",
"react": "^17.0.2",
"react-dom": "^17.0.2",
"react-redux": "^7.2.4",
"react-router-dom": "^5.2.0",
"react-scripts": "^4.0.3",
"workbox-background-sync": "^5.1.3",
"workbox-broadcast-update": "^5.1.3",
"workbox-cacheable-response": "^5.1.3",
"workbox-core": "^5.1.3",
"workbox-expiration": "^5.1.3",
"workbox-google-analytics": "^5.1.3",
"workbox-navigation-preload": "^5.1.3",
"workbox-precaching": "^5.1.3",
"workbox-range-requests": "^5.1.3",
"workbox-routing": "^5.1.3",
"workbox-strategies": "^5.1.3",
"workbox-streams": "^5.1.3"
},
"devDependencies": {
"@unlsoft/eslint-config": "file:../eslint-config",
"@unlsoft/stylelint-config": "file:../stylelint-config",
"eslint-plugin-jest-dom": "^3.9.0",
"stylelint": "^13.13.1"
},
"stylelint": {
"extends": "@unlsoft/stylelint-config"
},
"eslintConfig": {
"extends": [
"react-app",
"@unlsoft/eslint-config/react"
]
},
"jest": {
"clearMocks": true,
"collectCoverageFrom": [
"src/features/**/*.js"
],
"resetMocks": false,
"restoreMocks": false
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<meta
name="description"
content="Starter code for the class on greedy algorithms."
/>
<meta name="theme-color" content="rgba(208 0 0 / 100%)" />
<link rel="icon" href="%PUBLIC_URL%/logo.svg" />
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo.svg" />
<title>Greedy Algorithms in Class</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
</body>
</html>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 152 152">
<rect x="0" y="0" width="152" height="152" fill="rgba(0 0 0 / 100%)" />
<path d="M147,1H90V42h10V75.673L53.532,2.393,52.648,1H2V42H12v66H2v41H62V108H52V74.336l46.467,73.271L99.351,149H150V108H140V42h10V1Z" stroke-width="3" stroke="rgba(255 255 255 / 100%)" fill="rgba(208 0 0 / 100%)">
</path>
</svg>
{
"short_name": "Greedy Algorithms",
"name": "Greedy Algorithms in Class",
"description": "Starter code for the class on greedy algorithms.",
"icons": [
{
"src": "logo.svg",
"type": "image/svg+xml",
"sizes": "192x192 512x512",
"purpose": "any maskable"
}
],
"start_url": ".",
"display": "standalone",
"orientation": "portrait",
"theme_color": "rgba(208 0 0 / 100%)",
"background_color": "rgba(255 255 255 / 100%)"
}
import { Route } from 'react-router-dom';
import { Solution as FuelingSolution } from './features/fueling/solution.js';
import { Solution as EncodingSolution } from './features/encoding/solution.js';
export function App() {
return (
<>
<Route exact path={'/'}>
<h1>Fueling Problem</h1>
<FuelingSolution />
<h1>Encoding Problem</h1>
<EncodingSolution />
</Route>
</>
);
}
export class PriorityQueue {
constructor() {
this._vertices = [];
}
get size() {
return this._vertices.length;
}
insert(element, measure) {
let index = this._vertices.length;
while (index > 0) {
const parentIndex = Math.floor((index - 1) / 2);
const parent = this._vertices[parentIndex];
if (parent.measure < measure) {
break;
}
this._vertices[index] = parent;
index = parentIndex;
}
this._vertices[index] = {
element,
measure,
};
}
remove() {
console.assert(this._vertices.length > 0, 'Cannot remove an element from an empty priority queue');
const resultVertex = this._vertices[0];
const result = [resultVertex.element, resultVertex.measure];
const vertex = this._vertices[this._vertices.length - 1];
for (let index = 0; ;) {
this._vertices[index] = vertex;
let swapIndex = index;
for (const candidateIndex of [2 * index + 1, 2 * index + 2]) {
if (candidateIndex < this._vertices.length - 1 &&
this._vertices[candidateIndex].measure < this._vertices[swapIndex].measure) {
swapIndex = candidateIndex;
}
}
if (swapIndex === index) {
this._vertices[index] = vertex;
this._vertices.pop();
return result;
}
this._vertices[index] = this._vertices[swapIndex];
index = swapIndex;
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="748.4634pt" height="124.7049pt" viewBox="0 0 748.4634 124.7049" version="1.1">
<defs>
<clipPath id="clip1">
<path d="M 727 41 L 748.464844 41 L 748.464844 63 L 727 63 Z M 727 41 "/>
</clipPath>
<clipPath id="clip2">
<path d="M 70 56 L 574 56 L 574 124.703125 L 70 124.703125 Z M 70 56 "/>
</clipPath>
<clipPath id="clip3">
<path d="M 122 56 L 626 56 L 626 124.703125 L 122 124.703125 Z M 122 56 "/>
</clipPath>
</defs>
<g id="surface1">
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 10 -0.00000625 C 10 2.652338 8.945312 5.195306 7.070312 7.070306 C 5.195312 8.945306 2.652344 9.999994 0 9.999994 C -2.652344 9.999994 -5.195312 8.945306 -7.070312 7.070306 C -8.945312 5.195306 -10 2.652338 -10 -0.00000625 C -10 -2.65235 -8.945312 -5.195319 -7.070312 -7.070319 C -5.195312 -8.945319 -2.652344 -10.000006 0 -10.000006 C 2.652344 -10.000006 5.195312 -8.945319 7.070312 -7.070319 C 8.945312 -5.195319 10 -2.65235 10 -0.00000625 Z M 10 -0.00000625 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<g clip-path="url(#clip1)" clip-rule="nonzero">
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 737.464844 -0.00000625 C 737.464844 2.652338 736.410156 5.195306 734.535156 7.070306 C 732.660156 8.945306 730.117188 9.999994 727.464844 9.999994 C 724.8125 9.999994 722.269531 8.945306 720.390625 7.070306 C 718.515625 5.195306 717.464844 2.652338 717.464844 -0.00000625 C 717.464844 -2.65235 718.515625 -5.195319 720.390625 -7.070319 C 722.269531 -8.945319 724.8125 -10.000006 727.464844 -10.000006 C 730.117188 -10.000006 732.660156 -8.945319 734.535156 -7.070319 C 736.410156 -5.195319 737.464844 -2.65235 737.464844 -0.00000625 Z M 737.464844 -0.00000625 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 61.960938 -0.00000625 C 61.960938 2.652338 60.90625 5.195306 59.03125 7.070306 C 57.15625 8.945306 54.613281 9.999994 51.960938 9.999994 C 49.308594 9.999994 46.765625 8.945306 44.890625 7.070306 C 43.015625 5.195306 41.960938 2.652338 41.960938 -0.00000625 C 41.960938 -2.65235 43.015625 -5.195319 44.890625 -7.070319 C 46.765625 -8.945319 49.308594 -10.000006 51.960938 -10.000006 C 54.613281 -10.000006 57.15625 -8.945319 59.03125 -7.070319 C 60.90625 -5.195319 61.960938 -2.65235 61.960938 -0.00000625 Z M 61.960938 -0.00000625 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 8.660156 4.999994 C 19.378906 11.187494 32.582031 11.187494 43.300781 4.999994 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 39.3125 5.292963 C 40.636719 5.273431 41.96875 5.175775 43.300781 4.999994 C 42.484375 6.0664 41.609375 7.078119 40.6875 8.027338 Z M 39.3125 5.292963 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 113.921875 -0.00000625 C 113.921875 2.652338 112.871094 5.195306 110.996094 7.070306 C 109.117188 8.945306 106.574219 9.999994 103.921875 9.999994 C 101.269531 9.999994 98.726562 8.945306 96.851562 7.070306 C 94.976562 5.195306 93.921875 2.652338 93.921875 -0.00000625 C 93.921875 -2.65235 94.976562 -5.195319 96.851562 -7.070319 C 98.726562 -8.945319 101.269531 -10.000006 103.921875 -10.000006 C 106.574219 -10.000006 109.117188 -8.945319 110.996094 -7.070319 C 112.871094 -5.195319 113.921875 -2.65235 113.921875 -0.00000625 Z M 113.921875 -0.00000625 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 8.660156 4.999994 C 35.457031 20.468744 68.46875 20.468744 95.261719 4.999994 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 91.285156 5.429681 C 92.609375 5.3164 93.9375 5.175775 95.261719 4.999994 C 94.449219 6.062494 93.613281 7.101556 92.757812 8.117181 Z M 91.285156 5.429681 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 165.886719 -0.00000625 C 165.886719 2.652338 164.832031 5.195306 162.957031 7.070306 C 161.082031 8.945306 158.539062 9.999994 155.886719 9.999994 C 153.234375 9.999994 150.6875 8.945306 148.8125 7.070306 C 146.9375 5.195306 145.886719 2.652338 145.886719 -0.00000625 C 145.886719 -2.65235 146.9375 -5.195319 148.8125 -7.070319 C 150.6875 -8.945319 153.234375 -10.000006 155.886719 -10.000006 C 158.539062 -10.000006 161.082031 -8.945319 162.957031 -7.070319 C 164.832031 -5.195319 165.886719 -2.65235 165.886719 -0.00000625 Z M 165.886719 -0.00000625 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 8.660156 4.999994 C 51.53125 29.7539 104.351562 29.7539 147.226562 4.999994 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 143.25 5.464838 C 144.574219 5.328119 145.898438 5.175775 147.226562 4.999994 C 146.410156 6.058588 145.585938 7.105463 144.742188 8.136713 Z M 143.25 5.464838 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 217.847656 -0.00000625 C 217.847656 2.652338 216.792969 5.195306 214.917969 7.070306 C 213.042969 8.945306 210.5 9.999994 207.847656 9.999994 C 205.195312 9.999994 202.652344 8.945306 200.777344 7.070306 C 198.902344 5.195306 197.847656 2.652338 197.847656 -0.00000625 C 197.847656 -2.65235 198.902344 -5.195319 200.777344 -7.070319 C 202.652344 -8.945319 205.195312 -10.000006 207.847656 -10.000006 C 210.5 -10.000006 213.042969 -8.945319 214.917969 -7.070319 C 216.792969 -5.195319 217.847656 -2.65235 217.847656 -0.00000625 Z M 217.847656 -0.00000625 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 8.660156 4.999994 C 67.609375 39.03515 140.238281 39.03515 199.1875 4.999994 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 195.214844 5.480463 C 196.539062 5.335931 197.863281 5.175775 199.1875 4.999994 C 198.375 6.058588 197.550781 7.109369 196.71875 8.148431 Z M 195.214844 5.480463 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 269.808594 -0.00000625 C 269.808594 2.652338 268.753906 5.195306 266.878906 7.070306 C 265.003906 8.945306 262.460938 9.999994 259.808594 9.999994 C 257.15625 9.999994 254.613281 8.945306 252.738281 7.070306 C 250.863281 5.195306 249.808594 2.652338 249.808594 -0.00000625 C 249.808594 -2.65235 250.863281 -5.195319 252.738281 -7.070319 C 254.613281 -8.945319 257.15625 -10.000006 259.808594 -10.000006 C 262.460938 -10.000006 265.003906 -8.945319 266.878906 -7.070319 C 268.753906 -5.195319 269.808594 -2.65235 269.808594 -0.00000625 Z M 269.808594 -0.00000625 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 8.660156 4.999994 C 83.6875 48.3164 176.121094 48.3164 251.148438 4.999994 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 247.175781 5.488275 C 248.5 5.335931 249.824219 5.175775 251.148438 4.999994 C 250.335938 6.058588 249.515625 7.109369 248.6875 8.152338 Z M 247.175781 5.488275 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 321.769531 -0.00000625 C 321.769531 2.652338 320.714844 5.195306 318.839844 7.070306 C 316.964844 8.945306 314.421875 9.999994 311.769531 9.999994 C 309.117188 9.999994 306.574219 8.945306 304.699219 7.070306 C 302.824219 5.195306 301.769531 2.652338 301.769531 -0.00000625 C 301.769531 -2.65235 302.824219 -5.195319 304.699219 -7.070319 C 306.574219 -8.945319 309.117188 -10.000006 311.769531 -10.000006 C 314.421875 -10.000006 316.964844 -8.945319 318.839844 -7.070319 C 320.714844 -5.195319 321.769531 -2.65235 321.769531 -0.00000625 Z M 321.769531 -0.00000625 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 8.660156 4.999994 C 99.761719 57.59765 212.007812 57.59765 303.109375 4.999994 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 299.144531 5.496088 C 300.464844 5.339838 301.789062 5.175775 303.109375 4.999994 C 302.296875 6.058588 301.480469 7.109369 300.65625 8.156244 Z M 299.144531 5.496088 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 373.730469 -0.00000625 C 373.730469 2.652338 372.679688 5.195306 370.800781 7.070306 C 368.925781 8.945306 366.382812 9.999994 363.730469 9.999994 C 361.078125 9.999994 358.535156 8.945306 356.660156 7.070306 C 354.785156 5.195306 353.730469 2.652338 353.730469 -0.00000625 C 353.730469 -2.65235 354.785156 -5.195319 356.660156 -7.070319 C 358.535156 -8.945319 361.078125 -10.000006 363.730469 -10.000006 C 366.382812 -10.000006 368.925781 -8.945319 370.800781 -7.070319 C 372.679688 -5.195319 373.730469 -2.65235 373.730469 -0.00000625 Z M 373.730469 -0.00000625 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 372.390625 4.999994 C 479.570312 66.8789 611.625 66.8789 718.804688 4.999994 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 714.832031 5.499994 C 716.15625 5.339838 717.480469 5.175775 718.804688 4.999994 C 717.992188 6.058588 717.171875 7.113275 716.347656 8.16015 Z M 714.832031 5.499994 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 425.695312 -0.00000625 C 425.695312 2.652338 424.640625 5.195306 422.765625 7.070306 C 420.890625 8.945306 418.34375 9.999994 415.695312 9.999994 C 413.042969 9.999994 410.496094 8.945306 408.621094 7.070306 C 406.746094 5.195306 405.695312 2.652338 405.695312 -0.00000625 C 405.695312 -2.65235 406.746094 -5.195319 408.621094 -7.070319 C 410.496094 -8.945319 413.042969 -10.000006 415.695312 -10.000006 C 418.34375 -10.000006 420.890625 -8.945319 422.765625 -7.070319 C 424.640625 -5.195319 425.695312 -2.65235 425.695312 -0.00000625 Z M 425.695312 -0.00000625 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 424.355469 4.999994 C 515.457031 57.59765 627.699219 57.59765 718.804688 4.999994 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 714.835938 5.496088 C 716.160156 5.339838 717.480469 5.175775 718.804688 4.999994 C 717.992188 6.058588 717.171875 7.109369 716.347656 8.156244 Z M 714.835938 5.496088 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 477.65625 -0.00000625 C 477.65625 2.652338 476.601562 5.195306 474.726562 7.070306 C 472.851562 8.945306 470.308594 9.999994 467.65625 9.999994 C 465.003906 9.999994 462.460938 8.945306 460.585938 7.070306 C 458.707031 5.195306 457.65625 2.652338 457.65625 -0.00000625 C 457.65625 -2.65235 458.707031 -5.195319 460.585938 -7.070319 C 462.460938 -8.945319 465.003906 -10.000006 467.65625 -10.000006 C 470.308594 -10.000006 472.851562 -8.945319 474.726562 -7.070319 C 476.601562 -5.195319 477.65625 -2.65235 477.65625 -0.00000625 Z M 477.65625 -0.00000625 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 476.316406 4.999994 C 551.339844 48.3164 643.777344 48.3164 718.804688 4.999994 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 714.832031 5.488275 C 716.15625 5.335931 717.480469 5.175775 718.804688 4.999994 C 717.992188 6.058588 717.167969 7.109369 716.339844 8.152338 Z M 714.832031 5.488275 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 529.617188 -0.00000625 C 529.617188 2.652338 528.5625 5.195306 526.6875 7.070306 C 524.8125 8.945306 522.269531 9.999994 519.617188 9.999994 C 516.964844 9.999994 514.421875 8.945306 512.546875 7.070306 C 510.671875 5.195306 509.617188 2.652338 509.617188 -0.00000625 C 509.617188 -2.65235 510.671875 -5.195319 512.546875 -7.070319 C 514.421875 -8.945319 516.964844 -10.000006 519.617188 -10.000006 C 522.269531 -10.000006 524.8125 -8.945319 526.6875 -7.070319 C 528.5625 -5.195319 529.617188 -2.65235 529.617188 -0.00000625 Z M 529.617188 -0.00000625 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 528.277344 4.999994 C 587.226562 39.03515 659.855469 39.03515 718.804688 4.999994 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 714.832031 5.480463 C 716.15625 5.335931 717.480469 5.175775 718.804688 4.999994 C 717.988281 6.058588 717.167969 7.109369 716.335938 8.148431 Z M 714.832031 5.480463 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 581.578125 -0.00000625 C 581.578125 2.652338 580.523438 5.195306 578.648438 7.070306 C 576.773438 8.945306 574.230469 9.999994 571.578125 9.999994 C 568.925781 9.999994 566.382812 8.945306 564.507812 7.070306 C 562.632812 5.195306 561.578125 2.652338 561.578125 -0.00000625 C 561.578125 -2.65235 562.632812 -5.195319 564.507812 -7.070319 C 566.382812 -8.945319 568.925781 -10.000006 571.578125 -10.000006 C 574.230469 -10.000006 576.773438 -8.945319 578.648438 -7.070319 C 580.523438 -5.195319 581.578125 -2.65235 581.578125 -0.00000625 Z M 581.578125 -0.00000625 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 580.238281 4.999994 C 623.109375 29.7539 675.929688 29.7539 718.804688 4.999994 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 714.828125 5.464838 C 716.152344 5.328119 717.476562 5.175775 718.804688 4.999994 C 717.988281 6.058588 717.164062 7.105463 716.324219 8.136713 Z M 714.828125 5.464838 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 633.539062 -0.00000625 C 633.539062 2.652338 632.484375 5.195306 630.609375 7.070306 C 628.734375 8.945306 626.191406 9.999994 623.539062 9.999994 C 620.886719 9.999994 618.34375 8.945306 616.46875 7.070306 C 614.59375 5.195306 613.539062 2.652338 613.539062 -0.00000625 C 613.539062 -2.65235 614.59375 -5.195319 616.46875 -7.070319 C 618.34375 -8.945319 620.886719 -10.000006 623.539062 -10.000006 C 626.191406 -10.000006 628.734375 -8.945319 630.609375 -7.070319 C 632.484375 -5.195319 633.539062 -2.65235 633.539062 -0.00000625 Z M 633.539062 -0.00000625 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 632.199219 4.999994 C 658.996094 20.468744 692.007812 20.468744 718.804688 4.999994 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 714.828125 5.429681 C 716.152344 5.3164 717.476562 5.175775 718.804688 4.999994 C 717.988281 6.062494 717.152344 7.101556 716.296875 8.117181 Z M 714.828125 5.429681 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 685.5 -0.00000625 C 685.5 2.652338 684.449219 5.195306 682.574219 7.070306 C 680.699219 8.945306 678.152344 9.999994 675.5 9.999994 C 672.847656 9.999994 670.304688 8.945306 668.429688 7.070306 C 666.554688 5.195306 665.5 2.652338 665.5 -0.00000625 C 665.5 -2.65235 666.554688 -5.195319 668.429688 -7.070319 C 670.304688 -8.945319 672.847656 -10.000006 675.5 -10.000006 C 678.152344 -10.000006 680.699219 -8.945319 682.574219 -7.070319 C 684.449219 -5.195319 685.5 -2.65235 685.5 -0.00000625 Z M 685.5 -0.00000625 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 684.160156 4.999994 C 694.878906 11.187494 708.085938 11.187494 718.804688 4.999994 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 714.8125 5.292963 C 716.140625 5.273431 717.46875 5.175775 718.804688 4.999994 C 717.984375 6.0664 717.113281 7.078119 716.1875 8.027338 Z M 714.8125 5.292963 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 60.621094 -5.000006 C 151.726562 -57.597662 263.96875 -57.597662 355.070312 -5.000006 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 352.617188 -8.156256 C 353.441406 -7.109381 354.257812 -6.0586 355.070312 -5.000006 C 353.75 -5.175787 352.425781 -5.33985 351.105469 -5.4961 Z M 352.617188 -8.156256 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 112.582031 -5.000006 C 187.609375 -48.316412 280.046875 -48.316412 355.070312 -5.000006 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 352.609375 -8.15235 C 353.4375 -7.109381 354.257812 -6.0586 355.070312 -5.000006 C 353.746094 -5.175787 352.425781 -5.335944 351.101562 -5.488287 Z M 352.609375 -8.15235 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<g clip-path="url(#clip2)" clip-rule="nonzero">
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 60.621094 -5.000006 C 216.03125 -94.726569 407.507812 -94.726569 562.917969 -5.000006 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
</g>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 560.472656 -8.164069 C 561.289062 -7.113287 562.105469 -6.0586 562.917969 -5.000006 C 561.597656 -5.175787 560.273438 -5.343756 558.953125 -5.507819 Z M 560.472656 -8.164069 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 268.46875 -5.000006 C 295.261719 -20.468756 328.277344 -20.468756 355.070312 -5.000006 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 352.5625 -8.117194 C 353.421875 -7.101569 354.257812 -6.062506 355.070312 -5.000006 C 353.746094 -5.175787 352.417969 -5.316412 351.09375 -5.429694 Z M 352.5625 -8.117194 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 112.582031 -5.000006 C 203.6875 -57.597662 315.929688 -57.597662 407.03125 -5.000006 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 404.578125 -8.156256 C 405.402344 -7.109381 406.222656 -6.0586 407.03125 -5.000006 C 405.710938 -5.175787 404.386719 -5.33985 403.066406 -5.4961 Z M 404.578125 -8.156256 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 164.546875 -5.000006 C 239.570312 -48.316412 332.007812 -48.316412 407.03125 -5.000006 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 404.570312 -8.15235 C 405.398438 -7.109381 406.21875 -6.0586 407.03125 -5.000006 C 405.710938 -5.175787 404.386719 -5.335944 403.0625 -5.488287 Z M 404.570312 -8.15235 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<g clip-path="url(#clip3)" clip-rule="nonzero">
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 112.582031 -5.000006 C 267.996094 -94.726569 459.46875 -94.726569 614.878906 -5.000006 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
</g>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 612.433594 -8.164069 C 613.253906 -7.113287 614.066406 -6.0586 614.878906 -5.000006 C 613.558594 -5.175787 612.234375 -5.343756 610.914062 -5.507819 Z M 612.433594 -8.164069 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 320.429688 -5.000006 C 347.226562 -20.468756 380.238281 -20.468756 407.03125 -5.000006 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 404.527344 -8.117194 C 405.382812 -7.101569 406.21875 -6.062506 407.03125 -5.000006 C 405.707031 -5.175787 404.382812 -5.316412 403.058594 -5.429694 Z M 404.527344 -8.117194 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 164.546875 -5.000006 C 255.648438 -57.597662 367.890625 -57.597662 458.996094 -5.000006 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 456.539062 -8.156256 C 457.363281 -7.109381 458.183594 -6.0586 458.996094 -5.000006 C 457.671875 -5.175787 456.351562 -5.33985 455.027344 -5.4961 Z M 456.539062 -8.156256 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 216.507812 -5.000006 C 291.53125 -48.316412 383.96875 -48.316412 458.996094 -5.000006 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 456.535156 -8.15235 C 457.363281 -7.109381 458.183594 -6.0586 458.996094 -5.000006 C 457.671875 -5.175787 456.347656 -5.335944 455.023438 -5.488287 Z M 456.535156 -8.15235 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 164.546875 -5.000006 C 287.800781 -76.164069 439.660156 -76.164069 562.917969 -5.000006 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 560.46875 -8.160162 C 561.289062 -7.109381 562.105469 -6.0586 562.917969 -5.000006 C 561.597656 -5.175787 560.273438 -5.33985 558.953125 -5.500006 Z M 560.46875 -8.160162 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 268.46875 -5.000006 C 327.417969 -39.035162 400.046875 -39.035162 458.996094 -5.000006 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 456.527344 -8.148444 C 457.359375 -7.109381 458.183594 -6.0586 458.996094 -5.000006 C 457.671875 -5.175787 456.347656 -5.335944 455.023438 -5.480475 Z M 456.527344 -8.148444 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 216.507812 -5.000006 C 307.609375 -57.597662 419.851562 -57.597662 510.957031 -5.000006 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 508.5 -8.156256 C 509.324219 -7.109381 510.144531 -6.0586 510.957031 -5.000006 C 509.632812 -5.175787 508.3125 -5.33985 506.988281 -5.4961 Z M 508.5 -8.156256 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 60.621094 -5.000006 C 199.957031 -85.445319 371.621094 -85.445319 510.957031 -5.000006 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 508.507812 -8.160162 C 509.328125 -7.109381 510.144531 -6.0586 510.957031 -5.000006 C 509.636719 -5.175787 508.3125 -5.343756 506.992188 -5.503912 Z M 508.507812 -8.160162 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 216.507812 -5.000006 C 339.765625 -76.164069 491.621094 -76.164069 614.878906 -5.000006 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 612.429688 -8.160162 C 613.25 -7.109381 614.066406 -6.0586 614.878906 -5.000006 C 613.558594 -5.175787 612.234375 -5.33985 610.914062 -5.500006 Z M 612.429688 -8.160162 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 320.429688 -5.000006 C 379.378906 -39.035162 452.007812 -39.035162 510.957031 -5.000006 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 508.488281 -8.148444 C 509.320312 -7.109381 510.144531 -6.0586 510.957031 -5.000006 C 509.632812 -5.175787 508.308594 -5.335944 506.984375 -5.480475 Z M 508.488281 -8.148444 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 268.46875 -5.000006 C 391.726562 -76.164069 543.585938 -76.164069 666.839844 -5.000006 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 664.390625 -8.160162 C 665.214844 -7.109381 666.03125 -6.0586 666.839844 -5.000006 C 665.519531 -5.175787 664.199219 -5.33985 662.875 -5.500006 Z M 664.390625 -8.160162 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 320.429688 -5.000006 C 427.609375 -66.878912 559.660156 -66.878912 666.839844 -5.000006 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 664.386719 -8.160162 C 665.210938 -7.113287 666.027344 -6.0586 666.839844 -5.000006 C 665.519531 -5.175787 664.195312 -5.33985 662.871094 -5.500006 Z M 664.386719 -8.160162 " transform="matrix(1,0,0,-1,10.5,51.91015)"/>
</g>
</svg>
/* eslint-disable no-magic-numbers */
import { findEncoding } from './solver.js';
import encodingImage from './images/encoding.svg';
import styles from './solution.module.css';
function formatMap(solution) {
const contents = [...solution.entries()].map(([meaning, code]) => `${meaning}${code}`).join(', ');
return `{${contents}}`;
}
function score(frequencies, encoding) {
let result = 0;
for (const [meaning, bits] of encoding) {
result += frequencies.get(meaning) * bits.length;
}
return result;
}
const FIRST_PROBLEM_FREQUENCIES = new Map([
['a', 0.15],
['b', 0.30],
['c', 0.25],
['d', 0.30],
]);
const SECOND_PROBLEM_FREQUENCIES = new Map([
['a', 0.15],
['b', 0.40],
['c', 0.25],
['d', 0.20],
]);
export function Solution() {
const firstSolution = findEncoding(FIRST_PROBLEM_FREQUENCIES);
const secondSolution = findEncoding(SECOND_PROBLEM_FREQUENCIES);
return (
<div>
<figure className={styles.diagram} >
<img src={encodingImage} alt="A weighted directed graph corresponding to the encoding problem." />
</figure>
<label>
Frequencies: {formatMap(FIRST_PROBLEM_FREQUENCIES)}<br/>
Chosen Encoding:
<output>
{formatMap(firstSolution)}<br/>
({score(FIRST_PROBLEM_FREQUENCIES, firstSolution).toFixed(3)} bit[s] per symbol)
</output>
</label><br/><br/>
<label>
Frequencies: {formatMap(SECOND_PROBLEM_FREQUENCIES)}<br/>
Chosen Encoding:
<output>
{formatMap(secondSolution)}<br/>
({score(SECOND_PROBLEM_FREQUENCIES, secondSolution).toFixed(3)} bit[s] per symbol)
</output>
</label>
</div>
);
}
.diagram {
display: block;
box-sizing: border-box;
margin: auto;
width: 100%;
overflow-x: scroll;
}
export function findEncoding(frequencies) {
const results = new Map();
for (const [meaning, frequency] of frequencies) {
results.set(meaning, '');
}
// TODO: stub
return results;
}
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="441.6933pt" height="64.0074pt" viewBox="0 0 441.6933 64.0074" version="1.1">
<defs>
<g>
<symbol overflow="visible" id="glyph0-0">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph0-1">
<path style="stroke:none;" d="M 3.71875 -3.765625 C 3.53125 -4.140625 3.25 -4.40625 2.796875 -4.40625 C 1.640625 -4.40625 0.40625 -2.9375 0.40625 -1.484375 C 0.40625 -0.546875 0.953125 0.109375 1.71875 0.109375 C 1.921875 0.109375 2.421875 0.0625 3.015625 -0.640625 C 3.09375 -0.21875 3.453125 0.109375 3.921875 0.109375 C 4.28125 0.109375 4.5 -0.125 4.671875 -0.4375 C 4.828125 -0.796875 4.96875 -1.40625 4.96875 -1.421875 C 4.96875 -1.53125 4.875 -1.53125 4.84375 -1.53125 C 4.75 -1.53125 4.734375 -1.484375 4.703125 -1.34375 C 4.53125 -0.703125 4.359375 -0.109375 3.953125 -0.109375 C 3.671875 -0.109375 3.65625 -0.375 3.65625 -0.5625 C 3.65625 -0.78125 3.671875 -0.875 3.78125 -1.3125 C 3.890625 -1.71875 3.90625 -1.828125 4 -2.203125 L 4.359375 -3.59375 C 4.421875 -3.875 4.421875 -3.890625 4.421875 -3.9375 C 4.421875 -4.109375 4.3125 -4.203125 4.140625 -4.203125 C 3.890625 -4.203125 3.75 -3.984375 3.71875 -3.765625 Z M 3.078125 -1.1875 C 3.015625 -1 3.015625 -0.984375 2.875 -0.8125 C 2.4375 -0.265625 2.03125 -0.109375 1.75 -0.109375 C 1.25 -0.109375 1.109375 -0.65625 1.109375 -1.046875 C 1.109375 -1.546875 1.421875 -2.765625 1.65625 -3.234375 C 1.96875 -3.8125 2.40625 -4.1875 2.8125 -4.1875 C 3.453125 -4.1875 3.59375 -3.375 3.59375 -3.3125 C 3.59375 -3.25 3.578125 -3.1875 3.5625 -3.140625 Z M 3.078125 -1.1875 "/>
</symbol>
<symbol overflow="visible" id="glyph0-2">
<path style="stroke:none;" d="M 2.375 -6.8125 C 2.375 -6.8125 2.375 -6.921875 2.25 -6.921875 C 2.03125 -6.921875 1.296875 -6.84375 1.03125 -6.8125 C 0.953125 -6.8125 0.84375 -6.796875 0.84375 -6.625 C 0.84375 -6.5 0.9375 -6.5 1.09375 -6.5 C 1.5625 -6.5 1.578125 -6.4375 1.578125 -6.328125 C 1.578125 -6.265625 1.5 -5.921875 1.453125 -5.71875 L 0.625 -2.46875 C 0.515625 -1.96875 0.46875 -1.796875 0.46875 -1.453125 C 0.46875 -0.515625 1 0.109375 1.734375 0.109375 C 2.90625 0.109375 4.140625 -1.375 4.140625 -2.8125 C 4.140625 -3.71875 3.609375 -4.40625 2.8125 -4.40625 C 2.359375 -4.40625 1.9375 -4.109375 1.640625 -3.8125 Z M 1.453125 -3.046875 C 1.5 -3.265625 1.5 -3.28125 1.59375 -3.390625 C 2.078125 -4.03125 2.53125 -4.1875 2.796875 -4.1875 C 3.15625 -4.1875 3.421875 -3.890625 3.421875 -3.25 C 3.421875 -2.65625 3.09375 -1.515625 2.90625 -1.140625 C 2.578125 -0.46875 2.125 -0.109375 1.734375 -0.109375 C 1.390625 -0.109375 1.0625 -0.375 1.0625 -1.109375 C 1.0625 -1.3125 1.0625 -1.5 1.21875 -2.125 Z M 1.453125 -3.046875 "/>
</symbol>
<symbol overflow="visible" id="glyph0-3">
<path style="stroke:none;" d="M 3.953125 -3.78125 C 3.78125 -3.78125 3.65625 -3.78125 3.515625 -3.65625 C 3.34375 -3.5 3.328125 -3.328125 3.328125 -3.265625 C 3.328125 -3.015625 3.515625 -2.90625 3.703125 -2.90625 C 3.984375 -2.90625 4.25 -3.15625 4.25 -3.546875 C 4.25 -4.03125 3.78125 -4.40625 3.078125 -4.40625 C 1.734375 -4.40625 0.40625 -2.984375 0.40625 -1.578125 C 0.40625 -0.671875 0.984375 0.109375 2.03125 0.109375 C 3.453125 0.109375 4.28125 -0.953125 4.28125 -1.0625 C 4.28125 -1.125 4.234375 -1.203125 4.171875 -1.203125 C 4.109375 -1.203125 4.09375 -1.171875 4.03125 -1.09375 C 3.25 -0.109375 2.15625 -0.109375 2.046875 -0.109375 C 1.421875 -0.109375 1.140625 -0.59375 1.140625 -1.203125 C 1.140625 -1.609375 1.34375 -2.578125 1.6875 -3.1875 C 2 -3.765625 2.546875 -4.1875 3.09375 -4.1875 C 3.421875 -4.1875 3.8125 -4.0625 3.953125 -3.78125 Z M 3.953125 -3.78125 "/>
</symbol>
<symbol overflow="visible" id="glyph0-4">
<path style="stroke:none;" d="M 5.140625 -6.8125 C 5.140625 -6.8125 5.140625 -6.921875 5.015625 -6.921875 C 4.859375 -6.921875 3.921875 -6.828125 3.75 -6.8125 C 3.671875 -6.796875 3.609375 -6.75 3.609375 -6.625 C 3.609375 -6.5 3.703125 -6.5 3.84375 -6.5 C 4.328125 -6.5 4.34375 -6.4375 4.34375 -6.328125 L 4.3125 -6.125 L 3.71875 -3.765625 C 3.53125 -4.140625 3.25 -4.40625 2.796875 -4.40625 C 1.640625 -4.40625 0.40625 -2.9375 0.40625 -1.484375 C 0.40625 -0.546875 0.953125 0.109375 1.71875 0.109375 C 1.921875 0.109375 2.421875 0.0625 3.015625 -0.640625 C 3.09375 -0.21875 3.453125 0.109375 3.921875 0.109375 C 4.28125 0.109375 4.5 -0.125 4.671875 -0.4375 C 4.828125 -0.796875 4.96875 -1.40625 4.96875 -1.421875 C 4.96875 -1.53125 4.875 -1.53125 4.84375 -1.53125 C 4.75 -1.53125 4.734375 -1.484375 4.703125 -1.34375 C 4.53125 -0.703125 4.359375 -0.109375 3.953125 -0.109375 C 3.671875 -0.109375 3.65625 -0.375 3.65625 -0.5625 C 3.65625 -0.8125 3.671875 -0.875 3.703125 -1.046875 Z M 3.078125 -1.1875 C 3.015625 -1 3.015625 -0.984375 2.875 -0.8125 C 2.4375 -0.265625 2.03125 -0.109375 1.75 -0.109375 C 1.25 -0.109375 1.109375 -0.65625 1.109375 -1.046875 C 1.109375 -1.546875 1.421875 -2.765625 1.65625 -3.234375 C 1.96875 -3.8125 2.40625 -4.1875 2.8125 -4.1875 C 3.453125 -4.1875 3.59375 -3.375 3.59375 -3.3125 C 3.59375 -3.25 3.578125 -3.1875 3.5625 -3.140625 Z M 3.078125 -1.1875 "/>
</symbol>
<symbol overflow="visible" id="glyph0-5">
<path style="stroke:none;" d="M 1.859375 -2.296875 C 2.15625 -2.296875 2.890625 -2.328125 3.390625 -2.53125 C 4.09375 -2.828125 4.140625 -3.421875 4.140625 -3.5625 C 4.140625 -4 3.765625 -4.40625 3.078125 -4.40625 C 1.96875 -4.40625 0.453125 -3.4375 0.453125 -1.6875 C 0.453125 -0.671875 1.046875 0.109375 2.03125 0.109375 C 3.453125 0.109375 4.28125 -0.953125 4.28125 -1.0625 C 4.28125 -1.125 4.234375 -1.203125 4.171875 -1.203125 C 4.109375 -1.203125 4.09375 -1.171875 4.03125 -1.09375 C 3.25 -0.109375 2.15625 -0.109375 2.046875 -0.109375 C 1.265625 -0.109375 1.171875 -0.953125 1.171875 -1.265625 C 1.171875 -1.390625 1.1875 -1.6875 1.328125 -2.296875 Z M 1.390625 -2.515625 C 1.78125 -4.03125 2.8125 -4.1875 3.078125 -4.1875 C 3.53125 -4.1875 3.8125 -3.890625 3.8125 -3.5625 C 3.8125 -2.515625 2.21875 -2.515625 1.796875 -2.515625 Z M 1.390625 -2.515625 "/>
</symbol>
<symbol overflow="visible" id="glyph0-6">
<path style="stroke:none;" d="M 3.65625 -3.984375 L 4.515625 -3.984375 C 4.71875 -3.984375 4.8125 -3.984375 4.8125 -4.1875 C 4.8125 -4.296875 4.71875 -4.296875 4.546875 -4.296875 L 3.71875 -4.296875 L 3.921875 -5.4375 C 3.96875 -5.640625 4.109375 -6.34375 4.171875 -6.46875 C 4.25 -6.65625 4.421875 -6.8125 4.640625 -6.8125 C 4.671875 -6.8125 4.9375 -6.8125 5.125 -6.625 C 4.6875 -6.59375 4.578125 -6.234375 4.578125 -6.09375 C 4.578125 -5.859375 4.765625 -5.734375 4.953125 -5.734375 C 5.21875 -5.734375 5.5 -5.96875 5.5 -6.34375 C 5.5 -6.796875 5.046875 -7.03125 4.640625 -7.03125 C 4.296875 -7.03125 3.671875 -6.84375 3.375 -5.859375 C 3.3125 -5.65625 3.28125 -5.546875 3.046875 -4.296875 L 2.359375 -4.296875 C 2.15625 -4.296875 2.046875 -4.296875 2.046875 -4.109375 C 2.046875 -3.984375 2.140625 -3.984375 2.328125 -3.984375 L 2.984375 -3.984375 L 2.25 -0.046875 C 2.0625 0.921875 1.890625 1.828125 1.375 1.828125 C 1.328125 1.828125 1.09375 1.828125 0.890625 1.640625 C 1.359375 1.609375 1.453125 1.25 1.453125 1.109375 C 1.453125 0.875 1.265625 0.75 1.078125 0.75 C 0.8125 0.75 0.53125 0.984375 0.53125 1.359375 C 0.53125 1.796875 0.96875 2.046875 1.375 2.046875 C 1.921875 2.046875 2.328125 1.453125 2.5 1.078125 C 2.828125 0.453125 3.046875 -0.75 3.0625 -0.828125 Z M 3.65625 -3.984375 "/>
</symbol>
<symbol overflow="visible" id="glyph0-7">
<path style="stroke:none;" d="M 4.6875 -3.765625 C 4.703125 -3.8125 4.71875 -3.875 4.71875 -3.9375 C 4.71875 -4.109375 4.609375 -4.203125 4.4375 -4.203125 C 4.34375 -4.203125 4.0625 -4.140625 4.03125 -3.78125 C 3.84375 -4.140625 3.5 -4.40625 3.09375 -4.40625 C 1.96875 -4.40625 0.734375 -3.015625 0.734375 -1.578125 C 0.734375 -0.59375 1.328125 0 2.046875 0 C 2.640625 0 3.109375 -0.46875 3.203125 -0.578125 L 3.21875 -0.5625 C 3.015625 0.3125 2.890625 0.734375 2.890625 0.75 C 2.84375 0.84375 2.515625 1.828125 1.453125 1.828125 C 1.265625 1.828125 0.9375 1.8125 0.65625 1.71875 C 0.953125 1.640625 1.0625 1.375 1.0625 1.203125 C 1.0625 1.046875 0.953125 0.859375 0.6875 0.859375 C 0.46875 0.859375 0.15625 1.03125 0.15625 1.4375 C 0.15625 1.84375 0.515625 2.046875 1.46875 2.046875 C 2.71875 2.046875 3.4375 1.265625 3.59375 0.671875 Z M 3.40625 -1.28125 C 3.34375 -1.015625 3.109375 -0.765625 2.890625 -0.578125 C 2.6875 -0.40625 2.375 -0.21875 2.078125 -0.21875 C 1.578125 -0.21875 1.4375 -0.734375 1.4375 -1.140625 C 1.4375 -1.609375 1.71875 -2.796875 2 -3.296875 C 2.265625 -3.78125 2.6875 -4.1875 3.109375 -4.1875 C 3.765625 -4.1875 3.90625 -3.375 3.90625 -3.328125 C 3.90625 -3.28125 3.890625 -3.21875 3.875 -3.1875 Z M 3.40625 -1.28125 "/>
</symbol>
<symbol overflow="visible" id="glyph0-8">
<path style="stroke:none;" d="M 2.859375 -6.8125 C 2.859375 -6.8125 2.859375 -6.921875 2.734375 -6.921875 C 2.5 -6.921875 1.78125 -6.84375 1.515625 -6.8125 C 1.4375 -6.8125 1.328125 -6.796875 1.328125 -6.625 C 1.328125 -6.5 1.421875 -6.5 1.5625 -6.5 C 2.046875 -6.5 2.0625 -6.4375 2.0625 -6.328125 L 2.03125 -6.125 L 0.59375 -0.390625 C 0.546875 -0.25 0.546875 -0.234375 0.546875 -0.171875 C 0.546875 0.0625 0.75 0.109375 0.84375 0.109375 C 1 0.109375 1.15625 -0.015625 1.203125 -0.15625 L 1.390625 -0.90625 L 1.609375 -1.796875 C 1.671875 -2.03125 1.734375 -2.25 1.78125 -2.46875 C 1.796875 -2.53125 1.890625 -2.859375 1.890625 -2.921875 C 1.921875 -3.015625 2.234375 -3.5625 2.578125 -3.84375 C 2.796875 -4 3.09375 -4.1875 3.53125 -4.1875 C 3.953125 -4.1875 4.0625 -3.84375 4.0625 -3.484375 C 4.0625 -2.953125 3.6875 -1.859375 3.453125 -1.25 C 3.375 -1.03125 3.3125 -0.90625 3.3125 -0.703125 C 3.3125 -0.234375 3.671875 0.109375 4.140625 0.109375 C 5.078125 0.109375 5.4375 -1.34375 5.4375 -1.421875 C 5.4375 -1.53125 5.359375 -1.53125 5.328125 -1.53125 C 5.21875 -1.53125 5.21875 -1.5 5.171875 -1.34375 C 5.03125 -0.8125 4.703125 -0.109375 4.15625 -0.109375 C 3.984375 -0.109375 3.921875 -0.203125 3.921875 -0.4375 C 3.921875 -0.6875 4 -0.921875 4.09375 -1.140625 C 4.25 -1.578125 4.703125 -2.765625 4.703125 -3.34375 C 4.703125 -3.984375 4.3125 -4.40625 3.5625 -4.40625 C 2.9375 -4.40625 2.453125 -4.09375 2.078125 -3.640625 Z M 2.859375 -6.8125 "/>
</symbol>
<symbol overflow="visible" id="glyph0-9">
<path style="stroke:none;" d="M 2.828125 -6.234375 C 2.828125 -6.4375 2.6875 -6.59375 2.46875 -6.59375 C 2.1875 -6.59375 1.921875 -6.328125 1.921875 -6.0625 C 1.921875 -5.875 2.0625 -5.703125 2.296875 -5.703125 C 2.53125 -5.703125 2.828125 -5.9375 2.828125 -6.234375 Z M 2.078125 -2.484375 C 2.1875 -2.765625 2.1875 -2.796875 2.296875 -3.0625 C 2.375 -3.265625 2.421875 -3.40625 2.421875 -3.59375 C 2.421875 -4.03125 2.109375 -4.40625 1.609375 -4.40625 C 0.671875 -4.40625 0.296875 -2.953125 0.296875 -2.875 C 0.296875 -2.765625 0.390625 -2.765625 0.40625 -2.765625 C 0.515625 -2.765625 0.515625 -2.796875 0.5625 -2.953125 C 0.84375 -3.890625 1.234375 -4.1875 1.578125 -4.1875 C 1.65625 -4.1875 1.828125 -4.1875 1.828125 -3.875 C 1.828125 -3.65625 1.75 -3.453125 1.71875 -3.34375 C 1.640625 -3.09375 1.1875 -1.9375 1.03125 -1.5 C 0.921875 -1.25 0.796875 -0.921875 0.796875 -0.703125 C 0.796875 -0.234375 1.140625 0.109375 1.609375 0.109375 C 2.546875 0.109375 2.921875 -1.328125 2.921875 -1.421875 C 2.921875 -1.53125 2.828125 -1.53125 2.796875 -1.53125 C 2.703125 -1.53125 2.703125 -1.5 2.65625 -1.34375 C 2.46875 -0.71875 2.140625 -0.109375 1.640625 -0.109375 C 1.46875 -0.109375 1.390625 -0.203125 1.390625 -0.4375 C 1.390625 -0.6875 1.453125 -0.828125 1.6875 -1.4375 Z M 2.078125 -2.484375 "/>
</symbol>
<symbol overflow="visible" id="glyph1-0">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph1-1">
<path style="stroke:none;" d="M 4.46875 -2 C 4.46875 -3.1875 3.65625 -4.1875 2.578125 -4.1875 C 2.109375 -4.1875 1.671875 -4.03125 1.3125 -3.671875 L 1.3125 -5.625 C 1.515625 -5.5625 1.84375 -5.5 2.15625 -5.5 C 3.390625 -5.5 4.09375 -6.40625 4.09375 -6.53125 C 4.09375 -6.59375 4.0625 -6.640625 3.984375 -6.640625 C 3.984375 -6.640625 3.953125 -6.640625 3.90625 -6.609375 C 3.703125 -6.515625 3.21875 -6.3125 2.546875 -6.3125 C 2.15625 -6.3125 1.6875 -6.390625 1.21875 -6.59375 C 1.140625 -6.625 1.125 -6.625 1.109375 -6.625 C 1 -6.625 1 -6.546875 1 -6.390625 L 1 -3.4375 C 1 -3.265625 1 -3.1875 1.140625 -3.1875 C 1.21875 -3.1875 1.234375 -3.203125 1.28125 -3.265625 C 1.390625 -3.421875 1.75 -3.96875 2.5625 -3.96875 C 3.078125 -3.96875 3.328125 -3.515625 3.40625 -3.328125 C 3.5625 -2.953125 3.59375 -2.578125 3.59375 -2.078125 C 3.59375 -1.71875 3.59375 -1.125 3.34375 -0.703125 C 3.109375 -0.3125 2.734375 -0.0625 2.28125 -0.0625 C 1.5625 -0.0625 0.984375 -0.59375 0.8125 -1.171875 C 0.84375 -1.171875 0.875 -1.15625 0.984375 -1.15625 C 1.3125 -1.15625 1.484375 -1.40625 1.484375 -1.640625 C 1.484375 -1.890625 1.3125 -2.140625 0.984375 -2.140625 C 0.84375 -2.140625 0.5 -2.0625 0.5 -1.609375 C 0.5 -0.75 1.1875 0.21875 2.296875 0.21875 C 3.453125 0.21875 4.46875 -0.734375 4.46875 -2 Z M 4.46875 -2 "/>
</symbol>
<symbol overflow="visible" id="glyph1-2">
<path style="stroke:none;" d="M 1.625 -4.5625 C 1.171875 -4.859375 1.125 -5.1875 1.125 -5.359375 C 1.125 -5.96875 1.78125 -6.390625 2.484375 -6.390625 C 3.203125 -6.390625 3.84375 -5.875 3.84375 -5.15625 C 3.84375 -4.578125 3.453125 -4.109375 2.859375 -3.765625 Z M 3.078125 -3.609375 C 3.796875 -3.984375 4.28125 -4.5 4.28125 -5.15625 C 4.28125 -6.078125 3.40625 -6.640625 2.5 -6.640625 C 1.5 -6.640625 0.6875 -5.90625 0.6875 -4.96875 C 0.6875 -4.796875 0.703125 -4.34375 1.125 -3.875 C 1.234375 -3.765625 1.609375 -3.515625 1.859375 -3.34375 C 1.28125 -3.046875 0.421875 -2.5 0.421875 -1.5 C 0.421875 -0.453125 1.4375 0.21875 2.484375 0.21875 C 3.609375 0.21875 4.5625 -0.609375 4.5625 -1.671875 C 4.5625 -2.03125 4.453125 -2.484375 4.0625 -2.90625 C 3.875 -3.109375 3.71875 -3.203125 3.078125 -3.609375 Z M 2.078125 -3.1875 L 3.3125 -2.40625 C 3.59375 -2.21875 4.0625 -1.921875 4.0625 -1.3125 C 4.0625 -0.578125 3.3125 -0.0625 2.5 -0.0625 C 1.640625 -0.0625 0.921875 -0.671875 0.921875 -1.5 C 0.921875 -2.078125 1.234375 -2.71875 2.078125 -3.1875 Z M 2.078125 -3.1875 "/>
</symbol>
<symbol overflow="visible" id="glyph1-3">
<path style="stroke:none;" d="M 2.890625 -3.515625 C 3.703125 -3.78125 4.28125 -4.46875 4.28125 -5.265625 C 4.28125 -6.078125 3.40625 -6.640625 2.453125 -6.640625 C 1.453125 -6.640625 0.6875 -6.046875 0.6875 -5.28125 C 0.6875 -4.953125 0.90625 -4.765625 1.203125 -4.765625 C 1.5 -4.765625 1.703125 -4.984375 1.703125 -5.28125 C 1.703125 -5.765625 1.234375 -5.765625 1.09375 -5.765625 C 1.390625 -6.265625 2.046875 -6.390625 2.40625 -6.390625 C 2.828125 -6.390625 3.375 -6.171875 3.375 -5.28125 C 3.375 -5.15625 3.34375 -4.578125 3.09375 -4.140625 C 2.796875 -3.65625 2.453125 -3.625 2.203125 -3.625 C 2.125 -3.609375 1.890625 -3.59375 1.8125 -3.59375 C 1.734375 -3.578125 1.671875 -3.5625 1.671875 -3.46875 C 1.671875 -3.359375 1.734375 -3.359375 1.90625 -3.359375 L 2.34375 -3.359375 C 3.15625 -3.359375 3.53125 -2.6875 3.53125 -1.703125 C 3.53125 -0.34375 2.84375 -0.0625 2.40625 -0.0625 C 1.96875 -0.0625 1.21875 -0.234375 0.875 -0.8125 C 1.21875 -0.765625 1.53125 -0.984375 1.53125 -1.359375 C 1.53125 -1.71875 1.265625 -1.921875 0.984375 -1.921875 C 0.734375 -1.921875 0.421875 -1.78125 0.421875 -1.34375 C 0.421875 -0.4375 1.34375 0.21875 2.4375 0.21875 C 3.65625 0.21875 4.5625 -0.6875 4.5625 -1.703125 C 4.5625 -2.515625 3.921875 -3.296875 2.890625 -3.515625 Z M 2.890625 -3.515625 "/>
</symbol>
<symbol overflow="visible" id="glyph1-4">
<path style="stroke:none;" d="M 1.3125 -3.265625 L 1.3125 -3.515625 C 1.3125 -6.03125 2.546875 -6.390625 3.0625 -6.390625 C 3.296875 -6.390625 3.71875 -6.328125 3.9375 -5.984375 C 3.78125 -5.984375 3.390625 -5.984375 3.390625 -5.546875 C 3.390625 -5.234375 3.625 -5.078125 3.84375 -5.078125 C 4 -5.078125 4.3125 -5.171875 4.3125 -5.5625 C 4.3125 -6.15625 3.875 -6.640625 3.046875 -6.640625 C 1.765625 -6.640625 0.421875 -5.359375 0.421875 -3.15625 C 0.421875 -0.484375 1.578125 0.21875 2.5 0.21875 C 3.609375 0.21875 4.5625 -0.71875 4.5625 -2.03125 C 4.5625 -3.296875 3.671875 -4.25 2.5625 -4.25 C 1.890625 -4.25 1.515625 -3.75 1.3125 -3.265625 Z M 2.5 -0.0625 C 1.875 -0.0625 1.578125 -0.65625 1.515625 -0.8125 C 1.328125 -1.28125 1.328125 -2.078125 1.328125 -2.25 C 1.328125 -3.03125 1.65625 -4.03125 2.546875 -4.03125 C 2.71875 -4.03125 3.171875 -4.03125 3.484375 -3.40625 C 3.65625 -3.046875 3.65625 -2.53125 3.65625 -2.046875 C 3.65625 -1.5625 3.65625 -1.0625 3.484375 -0.703125 C 3.1875 -0.109375 2.734375 -0.0625 2.5 -0.0625 Z M 2.5 -0.0625 "/>
</symbol>
<symbol overflow="visible" id="glyph1-5">
<path style="stroke:none;" d="M 4.75 -6.078125 C 4.828125 -6.1875 4.828125 -6.203125 4.828125 -6.421875 L 2.40625 -6.421875 C 1.203125 -6.421875 1.171875 -6.546875 1.140625 -6.734375 L 0.890625 -6.734375 L 0.5625 -4.6875 L 0.8125 -4.6875 C 0.84375 -4.84375 0.921875 -5.46875 1.0625 -5.59375 C 1.125 -5.65625 1.90625 -5.65625 2.03125 -5.65625 L 4.09375 -5.65625 C 3.984375 -5.5 3.203125 -4.40625 2.984375 -4.078125 C 2.078125 -2.734375 1.75 -1.34375 1.75 -0.328125 C 1.75 -0.234375 1.75 0.21875 2.21875 0.21875 C 2.671875 0.21875 2.671875 -0.234375 2.671875 -0.328125 L 2.671875 -0.84375 C 2.671875 -1.390625 2.703125 -1.9375 2.78125 -2.46875 C 2.828125 -2.703125 2.953125 -3.5625 3.40625 -4.171875 Z M 4.75 -6.078125 "/>
</symbol>
<symbol overflow="visible" id="glyph1-6">
<path style="stroke:none;" d="M 1.265625 -0.765625 L 2.328125 -1.796875 C 3.875 -3.171875 4.46875 -3.703125 4.46875 -4.703125 C 4.46875 -5.84375 3.578125 -6.640625 2.359375 -6.640625 C 1.234375 -6.640625 0.5 -5.71875 0.5 -4.828125 C 0.5 -4.28125 1 -4.28125 1.03125 -4.28125 C 1.203125 -4.28125 1.546875 -4.390625 1.546875 -4.8125 C 1.546875 -5.0625 1.359375 -5.328125 1.015625 -5.328125 C 0.9375 -5.328125 0.921875 -5.328125 0.890625 -5.3125 C 1.109375 -5.96875 1.65625 -6.328125 2.234375 -6.328125 C 3.140625 -6.328125 3.5625 -5.515625 3.5625 -4.703125 C 3.5625 -3.90625 3.078125 -3.125 2.515625 -2.5 L 0.609375 -0.375 C 0.5 -0.265625 0.5 -0.234375 0.5 0 L 4.203125 0 L 4.46875 -1.734375 L 4.234375 -1.734375 C 4.171875 -1.4375 4.109375 -1 4 -0.84375 C 3.9375 -0.765625 3.28125 -0.765625 3.0625 -0.765625 Z M 1.265625 -0.765625 "/>
</symbol>
<symbol overflow="visible" id="glyph1-7">
<path style="stroke:none;" d="M 2.9375 -1.640625 L 2.9375 -0.78125 C 2.9375 -0.421875 2.90625 -0.3125 2.171875 -0.3125 L 1.96875 -0.3125 L 1.96875 0 C 2.375 -0.03125 2.890625 -0.03125 3.3125 -0.03125 C 3.734375 -0.03125 4.25 -0.03125 4.671875 0 L 4.671875 -0.3125 L 4.453125 -0.3125 C 3.71875 -0.3125 3.703125 -0.421875 3.703125 -0.78125 L 3.703125 -1.640625 L 4.6875 -1.640625 L 4.6875 -1.953125 L 3.703125 -1.953125 L 3.703125 -6.484375 C 3.703125 -6.6875 3.703125 -6.75 3.53125 -6.75 C 3.453125 -6.75 3.421875 -6.75 3.34375 -6.625 L 0.28125 -1.953125 L 0.28125 -1.640625 Z M 2.984375 -1.953125 L 0.5625 -1.953125 L 2.984375 -5.671875 Z M 2.984375 -1.953125 "/>
</symbol>
</g>
<clipPath id="clip1">
<path d="M 0 0 L 441.691406 0 L 441.691406 64.007812 L 0 64.007812 Z M 0 0 "/>
</clipPath>
</defs>
<g id="surface1">
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-1" x="10.3669" y="30.66775"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 10 -0.0004875 C 10 2.651856 8.945312 5.194825 7.070312 7.069825 C 5.195312 8.944825 2.652344 9.999513 0 9.999513 C -2.652344 9.999513 -5.195312 8.944825 -7.070312 7.069825 C -8.945312 5.194825 -10 2.651856 -10 -0.0004875 C -10 -2.652831 -8.945312 -5.1958 -7.070312 -7.0708 C -5.195312 -8.9458 -2.652344 -10.000487 0 -10.000487 C 2.652344 -10.000487 5.195312 -8.9458 7.070312 -7.0708 C 8.945312 -5.1958 10 -2.652831 10 -0.0004875 Z M 10 -0.0004875 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-2" x="62.8239" y="31.98225"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 61.960938 -0.0004875 C 61.960938 2.651856 60.90625 5.194825 59.03125 7.069825 C 57.15625 8.944825 54.613281 9.999513 51.960938 9.999513 C 49.308594 9.999513 46.765625 8.944825 44.890625 7.069825 C 43.015625 5.194825 41.960938 2.651856 41.960938 -0.0004875 C 41.960938 -2.652831 43.015625 -5.1958 44.890625 -7.0708 C 46.765625 -8.9458 49.308594 -10.000487 51.960938 -10.000487 C 54.613281 -10.000487 57.15625 -8.9458 59.03125 -7.0708 C 60.90625 -5.1958 61.960938 -2.652831 61.960938 -0.0004875 Z M 61.960938 -0.0004875 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-3" x="114.7676" y="30.66775"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 113.921875 -0.0004875 C 113.921875 2.651856 112.871094 5.194825 110.996094 7.069825 C 109.117188 8.944825 106.574219 9.999513 103.921875 9.999513 C 101.269531 9.999513 98.726562 8.944825 96.851562 7.069825 C 94.976562 5.194825 93.921875 2.651856 93.921875 -0.0004875 C 93.921875 -2.652831 94.976562 -5.1958 96.851562 -7.0708 C 98.726562 -8.9458 101.269531 -10.000487 103.921875 -10.000487 C 106.574219 -10.000487 109.117188 -8.9458 110.996094 -7.0708 C 112.871094 -5.1958 113.921875 -2.652831 113.921875 -0.0004875 Z M 113.921875 -0.0004875 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-4" x="166.2923" y="31.98225"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 165.886719 -0.0004875 C 165.886719 2.651856 164.832031 5.194825 162.957031 7.069825 C 161.082031 8.944825 158.539062 9.999513 155.886719 9.999513 C 153.234375 9.999513 150.6875 8.944825 148.8125 7.069825 C 146.9375 5.194825 145.886719 2.651856 145.886719 -0.0004875 C 145.886719 -2.652831 146.9375 -5.1958 148.8125 -7.0708 C 150.6875 -8.9458 153.234375 -10.000487 155.886719 -10.000487 C 158.539062 -10.000487 161.082031 -8.9458 162.957031 -7.0708 C 164.832031 -5.1958 165.886719 -2.652831 165.886719 -0.0004875 Z M 165.886719 -0.0004875 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-5" x="218.5272" y="30.66775"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 217.847656 -0.0004875 C 217.847656 2.651856 216.792969 5.194825 214.917969 7.069825 C 213.042969 8.944825 210.5 9.999513 207.847656 9.999513 C 205.195312 9.999513 202.652344 8.944825 200.777344 7.069825 C 198.902344 5.194825 197.847656 2.651856 197.847656 -0.0004875 C 197.847656 -2.652831 198.902344 -5.1958 200.777344 -7.0708 C 202.652344 -8.9458 205.195312 -10.000487 207.847656 -10.000487 C 210.5 -10.000487 213.042969 -8.9458 214.917969 -7.0708 C 216.792969 -5.1958 217.847656 -2.652831 217.847656 -0.0004875 Z M 217.847656 -0.0004875 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-6" x="269.8334" y="31.01365"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 269.808594 -0.0004875 C 269.808594 2.651856 268.753906 5.194825 266.878906 7.069825 C 265.003906 8.944825 262.460938 9.999513 259.808594 9.999513 C 257.15625 9.999513 254.613281 8.944825 252.738281 7.069825 C 250.863281 5.194825 249.808594 2.651856 249.808594 -0.0004875 C 249.808594 -2.652831 250.863281 -5.1958 252.738281 -7.0708 C 254.613281 -8.9458 257.15625 -10.000487 259.808594 -10.000487 C 262.460938 -10.000487 265.003906 -8.9458 266.878906 -7.0708 C 268.753906 -5.1958 269.808594 -2.652831 269.808594 -0.0004875 Z M 269.808594 -0.0004875 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-7" x="322.2154" y="29.69915"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 321.769531 -0.0004875 C 321.769531 2.651856 320.714844 5.194825 318.839844 7.069825 C 316.964844 8.944825 314.421875 9.999513 311.769531 9.999513 C 309.117188 9.999513 306.574219 8.944825 304.699219 7.069825 C 302.824219 5.194825 301.769531 2.651856 301.769531 -0.0004875 C 301.769531 -2.652831 302.824219 -5.1958 304.699219 -7.0708 C 306.574219 -8.9458 309.117188 -10.000487 311.769531 -10.000487 C 314.421875 -10.000487 316.964844 -8.9458 318.839844 -7.0708 C 320.714844 -5.1958 321.769531 -2.652831 321.769531 -0.0004875 Z M 321.769531 -0.0004875 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-8" x="373.8616" y="31.98225"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 373.730469 -0.0004875 C 373.730469 2.651856 372.679688 5.194825 370.800781 7.069825 C 368.925781 8.944825 366.382812 9.999513 363.730469 9.999513 C 361.078125 9.999513 358.535156 8.944825 356.660156 7.069825 C 354.785156 5.194825 353.730469 2.651856 353.730469 -0.0004875 C 353.730469 -2.652831 354.785156 -5.1958 356.660156 -7.0708 C 358.535156 -8.9458 361.078125 -10.000487 363.730469 -10.000487 C 366.382812 -10.000487 368.925781 -8.9458 370.800781 -7.0708 C 372.679688 -5.1958 373.730469 -2.652831 373.730469 -0.0004875 Z M 373.730469 -0.0004875 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-9" x="426.9772" y="31.80825"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 425.695312 -0.0004875 C 425.695312 2.651856 424.640625 5.194825 422.765625 7.069825 C 420.890625 8.944825 418.34375 9.999513 415.695312 9.999513 C 413.042969 9.999513 410.496094 8.944825 408.621094 7.069825 C 406.746094 5.194825 405.695312 2.651856 405.695312 -0.0004875 C 405.695312 -2.652831 406.746094 -5.1958 408.621094 -7.0708 C 410.496094 -8.9458 413.042969 -10.000487 415.695312 -10.000487 C 418.34375 -10.000487 420.890625 -8.9458 422.765625 -7.0708 C 424.640625 -5.1958 425.695312 -2.652831 425.695312 -0.0004875 Z M 425.695312 -0.0004875 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 10 -0.0004875 L 41.960938 -0.0004875 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 38.265625 -1.531737 L 41.960938 -0.0004875 L 38.265625 1.530763 Z M 38.265625 -1.531737 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-1" x="36.4902" y="37.94335"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 8.660156 4.999513 C 35.457031 20.468263 68.46875 20.468263 95.261719 4.999513 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 91.285156 5.4292 C 92.609375 5.319825 93.9375 5.175294 95.261719 4.999513 C 94.449219 6.062013 93.613281 7.101075 92.757812 8.1167 Z M 91.285156 5.4292 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-2" x="62.471" y="8.92045"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 61.960938 -0.0004875 L 93.921875 -0.0004875 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 90.226562 -1.531737 L 93.921875 -0.0004875 L 90.226562 1.530763 Z M 90.226562 -1.531737 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-3" x="88.4519" y="37.94335"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 60.621094 4.999513 C 87.417969 20.468263 120.429688 20.468263 147.226562 4.999513 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 143.25 5.4292 C 144.574219 5.319825 145.898438 5.175294 147.226562 4.999513 C 146.410156 6.062013 145.574219 7.101075 144.71875 8.1167 Z M 143.25 5.4292 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-4" x="114.4327" y="8.92045"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 113.921875 -0.0004875 L 145.886719 -0.0004875 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 142.1875 -1.531737 L 145.886719 -0.0004875 L 142.1875 1.530763 Z M 142.1875 -1.531737 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-3" x="140.4135" y="37.94335"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 165.886719 -0.0004875 L 197.847656 -0.0004875 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 194.152344 -1.531737 L 197.847656 -0.0004875 L 194.152344 1.530763 Z M 194.152344 -1.531737 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-2" x="192.3752" y="37.94335"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 217.847656 -0.0004875 L 249.808594 -0.0004875 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 246.113281 -1.531737 L 249.808594 -0.0004875 L 246.113281 1.530763 Z M 246.113281 -1.531737 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-3" x="244.3369" y="37.94335"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 216.507812 4.999513 C 243.300781 20.468263 276.316406 20.468263 303.109375 4.999513 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 299.132812 5.4292 C 300.457031 5.319825 301.785156 5.175294 303.109375 4.999513 C 302.296875 6.062013 301.460938 7.101075 300.601562 8.1167 Z M 299.132812 5.4292 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-1" x="270.3177" y="8.92045"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 216.507812 -5.000487 C 259.378906 -29.750487 312.199219 -29.750487 355.070312 -5.000487 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 352.589844 -8.137206 C 353.429688 -7.105956 354.257812 -6.059081 355.070312 -5.000487 C 353.746094 -5.176269 352.421875 -5.328612 351.097656 -5.465331 Z M 352.589844 -8.137206 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-5" x="296.2985" y="61.50735"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 269.808594 -0.0004875 L 301.769531 -0.0004875 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 298.074219 -1.531737 L 301.769531 -0.0004875 L 298.074219 1.530763 Z M 298.074219 -1.531737 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-6" x="296.2985" y="37.94335"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 268.46875 4.999513 C 295.261719 20.468263 328.277344 20.468263 355.070312 4.999513 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 351.09375 5.4292 C 352.417969 5.319825 353.746094 5.175294 355.070312 4.999513 C 354.257812 6.062013 353.421875 7.101075 352.5625 8.1167 Z M 351.09375 5.4292 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-7" x="322.2794" y="8.92045"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 268.46875 -5.000487 C 311.339844 -29.750487 364.160156 -29.750487 407.03125 -5.000487 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 404.550781 -8.137206 C 405.390625 -7.105956 406.21875 -6.059081 407.03125 -5.000487 C 405.707031 -5.176269 404.382812 -5.328612 403.058594 -5.465331 Z M 404.550781 -8.137206 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-2" x="348.2602" y="61.50735"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 321.769531 -0.0004875 L 353.730469 -0.0004875 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 350.035156 -1.531737 L 353.730469 -0.0004875 L 350.035156 1.530763 Z M 350.035156 -1.531737 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-6" x="348.2602" y="37.94335"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 320.429688 4.999513 C 347.226562 20.468263 380.238281 20.468263 407.03125 4.999513 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 403.058594 5.4292 C 404.382812 5.319825 405.707031 5.175294 407.03125 4.999513 C 406.21875 6.062013 405.382812 7.101075 404.527344 8.1167 Z M 403.058594 5.4292 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-4" x="374.241" y="8.92045"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 373.730469 -0.0004875 L 405.695312 -0.0004875 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 401.996094 -1.531737 L 405.695312 -0.0004875 L 401.996094 1.530763 Z M 401.996094 -1.531737 " transform="matrix(1,0,0,-1,13,28.52295)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-7" x="400.2219" y="37.94335"/>
</g>
<g clip-path="url(#clip1)" clip-rule="nonzero">
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -12.5 -34.984862 L 428.195312 -34.984862 L 428.195312 28.02295 L -12.5 28.02295 Z M -12.5 -34.984862 " transform="matrix(1,0,0,-1,13,28.52295)"/>
</g>
</g>
</svg>
/* eslint-disable no-magic-numbers */
import { planFuelings } from './solver.js';
import fuelingImage from './images/fueling.svg';
import styles from './solution.module.css';
function formatSolution(solution) {
return solution.map((index) => String.fromCodePoint('a'.codePointAt(0) + index)).join(', ');
}
const GAPS = [5, 3, 3, 8, 3, 2, 2, 4];
const RANGE = 10;
export function Solution() {
const solution = planFuelings(GAPS, RANGE);
return (
<div>
<figure className={styles.diagram} >
<img src={fuelingImage} alt="A weighted directed graph corresponding to the fueling problem." />
</figure>
<label>
Chosen Fueling Points: <output>{formatSolution(solution)}</output>
</label>
</div>
);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment