From 21f6377f16f83cef49aa08b1da0f67c638527558 Mon Sep 17 00:00:00 2001 From: Cyril Date: Thu, 10 Apr 2014 22:37:50 +0400 Subject: [PATCH 01/37] B-1 (allvectors): hack version, using binary numbers. --- grigorev/B-1.py | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100755 grigorev/B-1.py diff --git a/grigorev/B-1.py b/grigorev/B-1.py new file mode 100755 index 0000000..d882d5c --- /dev/null +++ b/grigorev/B-1.py @@ -0,0 +1,9 @@ +#!/usr/bin/python + +with open("allvectors.in", "r") as infile: + n = int(infile.readline().strip()) + +with open("allvectors.out", "w") as outfile: + for x in xrange(2**n): + s = bin(x).split("b")[1] + outfile.write("0" * (n-len(s)) + s + "\n") From 8f5fb4d6d7ce4b2ee2017dbaaa4c4c235a5e18f4 Mon Sep 17 00:00:00 2001 From: Cyril Date: Thu, 10 Apr 2014 23:02:53 +0400 Subject: [PATCH 02/37] B-1 (allvectors): proper version, using generators. --- grigorev/B-1-proper.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100755 grigorev/B-1-proper.py diff --git a/grigorev/B-1-proper.py b/grigorev/B-1-proper.py new file mode 100755 index 0000000..d492f52 --- /dev/null +++ b/grigorev/B-1-proper.py @@ -0,0 +1,21 @@ +#!/usr/bin/python + +def generator(subsequence, symbols, length): + if len(subsequence) < length: + for symbol in symbols: + for sequence in generator(subsequence + [symbol], symbols, length): + yield sequence + else: + yield subsequence + +with open("allvectors.in", "r") as infile: + n = int(infile.readline().strip()) + +with open("allvectors.out", "w") as outfile: + sequences = generator( + subsequence = [], + symbols = ["0", "1"], + length = n + ) + for sequence in sequences: + outfile.write("".join(sequence) + "\n") From cba3bd7c7a3072ddb30667d8a98773380be52b47 Mon Sep 17 00:00:00 2001 From: Cyril Date: Thu, 10 Apr 2014 23:03:58 +0400 Subject: [PATCH 03/37] B-2 (vectors): hack version, using binary numbers. --- grigorev/B-2.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100755 grigorev/B-2.py diff --git a/grigorev/B-2.py b/grigorev/B-2.py new file mode 100755 index 0000000..1f2c42c --- /dev/null +++ b/grigorev/B-2.py @@ -0,0 +1,15 @@ +#!/usr/bin/python + +with open("vectors.in", "r") as infile: + n = int(infile.readline().strip()) + +vectors = [ + bin(x).split("b")[1] + for x in xrange(2**n) + if bin(x).count("11") == 0 +] + +with open("vectors.out", "w") as outfile: + outfile.write(str(len(vectors)) + "\n") + for vector in vectors: + outfile.write("0" * (n - len(vector)) + vector + "\n") From 216ee4a6952e7413e87a66727113db60c3c90660 Mon Sep 17 00:00:00 2001 From: Cyril Date: Thu, 10 Apr 2014 23:10:54 +0400 Subject: [PATCH 04/37] B-2 (vectors): proper version, using recursive generators. --- grigorev/B-2-proper.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100755 grigorev/B-2-proper.py diff --git a/grigorev/B-2-proper.py b/grigorev/B-2-proper.py new file mode 100755 index 0000000..ae7803c --- /dev/null +++ b/grigorev/B-2-proper.py @@ -0,0 +1,24 @@ +#!/usr/bin/python + +def generator(subsequence, symbols, length): + if len(subsequence) < length: + for symbol in symbols: + if symbol == "1" and len(subsequence) > 0 and subsequence[-1] == "1": + continue + for sequence in generator(subsequence + [symbol], symbols, length): + yield sequence + else: + yield subsequence + +with open("vectors.in", "r") as infile: + n = int(infile.readline().strip()) + +with open("vectors.out", "w") as outfile: + sequences = list(generator( + subsequence = [], + symbols = ["0", "1"], + length = n + )) + outfile.write(str(len(sequences)) + "\n") + for sequence in sequences: + outfile.write("".join(sequence) + "\n") From 61997259ba02bb77f13523c2ff461c58d1ab9d39 Mon Sep 17 00:00:00 2001 From: Cyril Date: Thu, 10 Apr 2014 23:26:05 +0400 Subject: [PATCH 05/37] B-3 (permutations) with recursive generators. --- grigorev/B-3.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100755 grigorev/B-3.py diff --git a/grigorev/B-3.py b/grigorev/B-3.py new file mode 100755 index 0000000..f69839f --- /dev/null +++ b/grigorev/B-3.py @@ -0,0 +1,24 @@ +#!/usr/bin/python +from __future__ import division + +def generator(subsequence, symbols): + complete = True + for symbol in symbols: + if symbol not in subsequence: + complete = False + for sequence in generator(subsequence + [symbol], symbols): + yield sequence + if complete: + yield subsequence + +with open("permutations.in", "r") as infile: + n = int(infile.readline().strip()) + +permutations = generator( + subsequence = [], + symbols = [str(x) for x in xrange(1, n + 1)] +) + +with open("permutations.out", "w") as outfile: + for permutation in permutations: + outfile.write(" ".join([str(x) for x in permutation]) + "\n") From 2d710626ac1ea2ed5a1ba6a9c61cfa629d7b21aa Mon Sep 17 00:00:00 2001 From: Cyril Date: Thu, 10 Apr 2014 23:48:20 +0400 Subject: [PATCH 06/37] Removed redundant str() conversion. --- grigorev/B-3.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/grigorev/B-3.py b/grigorev/B-3.py index f69839f..41f0fb7 100755 --- a/grigorev/B-3.py +++ b/grigorev/B-3.py @@ -21,4 +21,4 @@ def generator(subsequence, symbols): with open("permutations.out", "w") as outfile: for permutation in permutations: - outfile.write(" ".join([str(x) for x in permutation]) + "\n") + outfile.write(" ".join(permutation) + "\n") From 8e30325be7cca82388216fca9b1dc549de297ad9 Mon Sep 17 00:00:00 2001 From: Cyril Date: Fri, 11 Apr 2014 00:14:30 +0400 Subject: [PATCH 07/37] B-4 (choose). --- grigorev/B-4.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100755 grigorev/B-4.py diff --git a/grigorev/B-4.py b/grigorev/B-4.py new file mode 100755 index 0000000..7436d92 --- /dev/null +++ b/grigorev/B-4.py @@ -0,0 +1,24 @@ +#!/usr/bin/python +from __future__ import division + +def generator(subsequence, numbers, length): + if len(subsequence) < length: + for number in numbers: + if number > max(subsequence + [-1]): + for sequence in generator(subsequence + [number], numbers, length): + yield sequence + else: + yield subsequence + +with open("choose.in", "r") as infile: + n, k = [int(x) for x in infile.readline().split()] + +choices = generator( + subsequence = [], + numbers = list(xrange(1, n+1)), + length = k +) + +with open("choose.out", "w") as outfile: + for choice in choices: + outfile.write(" ".join([str(x) for x in choice]) + "\n") From c8d8ed721ebc8f6fea380b261a353ad42e58cdd3 Mon Sep 17 00:00:00 2001 From: Cyril Date: Fri, 11 Apr 2014 00:16:25 +0400 Subject: [PATCH 08/37] Moved generator call out of the with block. --- grigorev/B-1-proper.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/grigorev/B-1-proper.py b/grigorev/B-1-proper.py index d492f52..a6501c6 100755 --- a/grigorev/B-1-proper.py +++ b/grigorev/B-1-proper.py @@ -11,11 +11,12 @@ def generator(subsequence, symbols, length): with open("allvectors.in", "r") as infile: n = int(infile.readline().strip()) +sequences = generator( + subsequence = [], + symbols = ["0", "1"], + length = n +) + with open("allvectors.out", "w") as outfile: - sequences = generator( - subsequence = [], - symbols = ["0", "1"], - length = n - ) for sequence in sequences: outfile.write("".join(sequence) + "\n") From f562ade31db4fe20aef272b49a8f6006ef8555bd Mon Sep 17 00:00:00 2001 From: Cyril Date: Fri, 11 Apr 2014 00:17:16 +0400 Subject: [PATCH 09/37] Moved generator call out of the with block. --- grigorev/B-2-proper.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/grigorev/B-2-proper.py b/grigorev/B-2-proper.py index ae7803c..8f19a7d 100755 --- a/grigorev/B-2-proper.py +++ b/grigorev/B-2-proper.py @@ -13,12 +13,13 @@ def generator(subsequence, symbols, length): with open("vectors.in", "r") as infile: n = int(infile.readline().strip()) +sequences = list(generator( + subsequence = [], + symbols = ["0", "1"], + length = n +)) + with open("vectors.out", "w") as outfile: - sequences = list(generator( - subsequence = [], - symbols = ["0", "1"], - length = n - )) outfile.write(str(len(sequences)) + "\n") for sequence in sequences: outfile.write("".join(sequence) + "\n") From b78cd748539f23c2da5475d8226cbc2c9e45c209 Mon Sep 17 00:00:00 2001 From: Cyril Date: Fri, 11 Apr 2014 00:28:04 +0400 Subject: [PATCH 10/37] B-5 (subsets). --- grigorev/B-5.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100755 grigorev/B-5.py diff --git a/grigorev/B-5.py b/grigorev/B-5.py new file mode 100755 index 0000000..334bdfe --- /dev/null +++ b/grigorev/B-5.py @@ -0,0 +1,21 @@ +#!/usr/bin/python +from __future__ import division + +def generator(subsequence, numbers): + yield subsequence + for number in numbers: + if number > max(subsequence + [-1]): + for sequence in generator(subsequence + [number], numbers): + yield sequence + +with open("subsets.in", "r") as infile: + n = int(infile.readline().strip()) + +subsets = generator( + subsequence = [], + numbers = list(xrange(1, n+1)) +) + +with open("subsets.out", "w") as outfile: + for subset in subsets: + outfile.write(" ".join([str(x) for x in subset]) + "\n") From d7a226c8b06a437cc8b00684debd79549037bbba Mon Sep 17 00:00:00 2001 From: Cyril Date: Fri, 11 Apr 2014 01:47:37 +0400 Subject: [PATCH 11/37] B-6 (nextvector). --- grigorev/B-6.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100755 grigorev/B-6.py diff --git a/grigorev/B-6.py b/grigorev/B-6.py new file mode 100755 index 0000000..7b0749a --- /dev/null +++ b/grigorev/B-6.py @@ -0,0 +1,31 @@ +#!/usr/bin/python +from __future__ import division + +def neighbor(vector, direction): + # decide what symbols to consider (P)revious and (N)ext + if direction == 1: + P, N = ["0", "1"] + else: + P, N = ["1", "0"] + # create a copy of vector + result = vector[:] + # step-through like a digital clock + for pos, val in enumerate(vector): + if val == P: + result[pos] = N + return result + else: + result[pos] = P + # fallback + return ["-"] + +with open("nextvector.in", "r") as infile: + string = infile.readline().strip() + vector = list(string)[::-1] # we order positions RTL when interpreting binary + +predecessor = neighbor(vector, -1) +successor = neighbor(vector, 1) + +with open("nextvector.out", "w") as outfile: + outfile.write("".join(predecessor[::-1]) + "\n") + outfile.write("".join(successor[::-1]) + "\n") From e2a12a11a69814c17c7f94b44722ac3f98ba5293 Mon Sep 17 00:00:00 2001 From: Cyril Date: Fri, 11 Apr 2014 01:54:47 +0400 Subject: [PATCH 12/37] Comments. --- grigorev/B-6.py | 1 + 1 file changed, 1 insertion(+) diff --git a/grigorev/B-6.py b/grigorev/B-6.py index 7b0749a..8c3edf4 100755 --- a/grigorev/B-6.py +++ b/grigorev/B-6.py @@ -27,5 +27,6 @@ def neighbor(vector, direction): successor = neighbor(vector, 1) with open("nextvector.out", "w") as outfile: + # positional notation: reverse order again outfile.write("".join(predecessor[::-1]) + "\n") outfile.write("".join(successor[::-1]) + "\n") From 49d5ae8f6e04b57ed2ca942d9fcf5c33b1c3fed1 Mon Sep 17 00:00:00 2001 From: Cyril Date: Fri, 11 Apr 2014 17:59:38 +0400 Subject: [PATCH 13/37] B-7 (slow version, yields "Time limit exceeded (test 5)"). --- grigorev/B-7.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100755 grigorev/B-7.py diff --git a/grigorev/B-7.py b/grigorev/B-7.py new file mode 100755 index 0000000..f544d16 --- /dev/null +++ b/grigorev/B-7.py @@ -0,0 +1,44 @@ +#!/usr/bin/python +from __future__ import division + +def descending(vector): + return (sorted(vector)[::-1] == vector) + +def ascending(vector): + return (sorted(vector) == vector) + +def successor(vector): + if descending(vector): + return [0] * len(vector) + if len(vector) == 2: + return vector[::-1] + head = vector[0] + tail = vector[1:] + if descending(tail): + tail = sorted(vector) + head = tail.pop(tail.index(head) + 1) + return [head] + tail + return [head] + successor(tail) + +def predecessor(vector): + if ascending(vector): + return [0] * len(vector) + if len(vector) == 2: + return vector[::-1] + head = vector[0] + tail = vector[1:] + if ascending(tail): + tail = sorted(vector)[::-1] + head = tail.pop(tail.index(head) + 1) + return [head] + tail + return [head] + predecessor(tail) + +with open("nextperm.in", "r") as infile: + vector = [int(x) for x in infile.readlines()[1].split()] + +P = predecessor(vector) +S = successor(vector) + +with open("nextperm.out", "w") as outfile: + outfile.write(" ".join([str(x) for x in P]) + "\n") + outfile.write(" ".join([str(x) for x in S]) + "\n") From 184a0a28b740dbff2f5db1e772a62a5a1932d614 Mon Sep 17 00:00:00 2001 From: Cyril Date: Sat, 12 Apr 2014 10:51:11 +0400 Subject: [PATCH 14/37] A-1 (components). --- grigorev/A-1.py | 54 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100755 grigorev/A-1.py diff --git a/grigorev/A-1.py b/grigorev/A-1.py new file mode 100755 index 0000000..255683e --- /dev/null +++ b/grigorev/A-1.py @@ -0,0 +1,54 @@ +#!/usr/bin/python +from __future__ import division +import sys +from collections import deque + +def graphFromData(inputData): + graph = lambda: None + graph.body = {} + [graph.V, graph.E] = [int(x) for x in inputData[0].split()] + for edgeDescription in inputData[1:]: + [start, end] = [int(x) for x in edgeDescription.split()] + graph.body[start] = graph.body.get(start, []) + [end ] + graph.body[end ] = graph.body.get(end, []) + [start] + for vertex in range(1, graph.V + 1): + if vertex not in graph.body: + graph.body[vertex] = [] + return graph + +def depthFirstSearch(graph): + # vertex: componentToWhichItBelongs + components = {} + # assume 0 components initially + currentComponent = 0 + # NB! vertices start from 1 and go up to V inclusive + for vertex in range(1, graph.V + 1): + # if we haven't yet visited this vertex + if vertex not in components: + # it's a new component + currentComponent += 1 + components[vertex] = currentComponent + # put it into the queue, as Fedor taught + queue = deque([vertex]) + # queue up its immediate neighbors + while len(queue) > 0: + for neighbor in graph.body[queue[0]]: + # if we haven't yet visited the neighbor + if neighbor not in components: + # it's connected, so it's the same component + components[neighbor] = currentComponent + queue.append(neighbor) + queue.popleft() + return components + +def main(): + sys.stdin = open("components.in", "r") + sys.stdout = open("components.out", "w") + graph = graphFromData(sys.stdin.readlines()) + components = depthFirstSearch(graph) + # number of components + print(max(components.values())) + # what vertex belongs where + print(" ".join([str(x) for x in components.values()])) + +main() From 47b5f0160cb84b7b41fd4b05d6da6d2f50cdc3d7 Mon Sep 17 00:00:00 2001 From: Cyril Date: Sat, 12 Apr 2014 11:20:41 +0400 Subject: [PATCH 15/37] Refactoring and comments. --- grigorev/A-1.py | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/grigorev/A-1.py b/grigorev/A-1.py index 255683e..69e05ae 100755 --- a/grigorev/A-1.py +++ b/grigorev/A-1.py @@ -3,23 +3,35 @@ import sys from collections import deque -def graphFromData(inputData): + +""" Reads input line per line. Expects first line to contain the number of """ +""" vertices and edges, all following lines are edges in format (u, v). """ +""" Returns an adjacency list (actually a dictionary). """ +def adjacencyListFromData(inputData): + # catch-all record graph = lambda: None - graph.body = {} + # (V)ertices, (E)dges [graph.V, graph.E] = [int(x) for x in inputData[0].split()] + # preload adjacency list + graph.body = { + vertex: [] + for vertex in xrange(1, graph.V + 1) + } + # parse input for edgeDescription in inputData[1:]: + # undirected graph, draw edges both ways [start, end] = [int(x) for x in edgeDescription.split()] - graph.body[start] = graph.body.get(start, []) + [end ] - graph.body[end ] = graph.body.get(end, []) + [start] - for vertex in range(1, graph.V + 1): - if vertex not in graph.body: - graph.body[vertex] = [] + graph.body[start].append(end ) + graph.body[end ].append(start) return graph + +""" Perform a depth-first search on a graph. """ +""" Return "components" (a dictionary of following structure): """ +""" key = vertex """ +""" value = number of component to which it belongs """ def depthFirstSearch(graph): - # vertex: componentToWhichItBelongs components = {} - # assume 0 components initially currentComponent = 0 # NB! vertices start from 1 and go up to V inclusive for vertex in range(1, graph.V + 1): @@ -41,10 +53,12 @@ def depthFirstSearch(graph): queue.popleft() return components + def main(): + # using sys.std* handles for ease of local debugging sys.stdin = open("components.in", "r") sys.stdout = open("components.out", "w") - graph = graphFromData(sys.stdin.readlines()) + graph = adjacencyListFromData(sys.stdin.readlines()) components = depthFirstSearch(graph) # number of components print(max(components.values())) From 89bc494ab210678ed0aa2a4b975939b085293553 Mon Sep 17 00:00:00 2001 From: Cyril Date: Sat, 12 Apr 2014 11:30:38 +0400 Subject: [PATCH 16/37] Refactored version. --- grigorev/A-2.py | 58 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100755 grigorev/A-2.py diff --git a/grigorev/A-2.py b/grigorev/A-2.py new file mode 100755 index 0000000..6369bc5 --- /dev/null +++ b/grigorev/A-2.py @@ -0,0 +1,58 @@ +#!/usr/bin/python +from __future__ import division +import sys +from collections import deque + +""" Reads input line per line. Expects first line to contain the number of """ +""" vertices and edges, all following lines are edges in format (u, v). """ +""" Returns an adjacency list (actually a dictionary). """ +def adjacencyListFromData(inputData): + # catch-all record + graph = lambda: None + # (V)ertices, (E)dges + [graph.V, graph.E] = [int(x) for x in inputData[0].split()] + # preload adjacency list + graph.body = { + vertex: [] + for vertex in xrange(1, graph.V + 1) + } + # parse input + for edgeDescription in inputData[1:]: + # undirected graph, draw edges both ways + [start, end] = [int(x) for x in edgeDescription.split()] + graph.body[start].append(end ) + graph.body[end ].append(start) + return graph + + +""" Perform a breadth-first search on a graph. """ +""" Return "distances" (a dictionary of following structure): """ +""" key = vertex """ +""" value = distance from startVertex """ +def breadthFirstSearch(graph, startVertex): + # start lookup from the initial vertex + queue = deque([startVertex]) + distances = {startVertex: 0} + # all edges are explicitly the same length (BFS won't work otherwise) + edgeLength = 1 + # while there's still vertices to process + while len(queue): + # look up neighbors of current vertex + for neighbor in graph.body[queue[0]]: + # if we haven't visited the neighbor yet + if neighbor not in distances: + distances[neighbor] = distances[queue[0]] + edgeLength + queue.append(neighbor) + queue.popleft() + return distances + + +def main(): + # using sys.std* handles for ease of local debugging + sys.stdin = open("pathbge1.in", "r") + sys.stdout = open("pathbge1.out", "w") + graph = adjacencyListFromData(sys.stdin.readlines()) + distances = breadthFirstSearch(graph, 1) + print(" ".join([str(x) for x in distances.values()])) + +main() From dc69a8248b28a352c72eca0173ef32cdeff3fb2d Mon Sep 17 00:00:00 2001 From: Cyril Date: Sat, 12 Apr 2014 13:21:16 +0400 Subject: [PATCH 17/37] Comments, refactoring. --- grigorev/A-3.py | 94 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100755 grigorev/A-3.py diff --git a/grigorev/A-3.py b/grigorev/A-3.py new file mode 100755 index 0000000..d6cf0f4 --- /dev/null +++ b/grigorev/A-3.py @@ -0,0 +1,94 @@ +#!/usr/bin/python +from __future__ import division +import sys +from collections import deque + +""" Expects input as space-separated incidence matrix. Converts str to int. """ +def incidenceMatrixFromData(inputData): + graph = lambda: None + graph.body = [ + [int(x) for x in line.split()] + for line in inputData + ] + graph.V = len(graph.body) + graph.E = None + return graph + +""" Find weight of the shortest path from vertex "start" to vertex "finish" """ +""" using Dijkstra's algorightm. """ +""" Weights of paths are stored in the dictionary "distances" of structure: """ +""" key = vertex """ +""" value = distance from "start" """ +""" Finishes as soon as distance is found for "finish". Returns one value. """ +""" If no path found (i.e. all cycles passed without returning a value), """ +""" returns -1. """ +def dijkstra(graph, start, finish): + # begin lookup from "start" + distances = { + vertex: None + for vertex in xrange(graph.V) + } + distances[start] = 0 + # keep track of visited vertices + visited = { + vertex: False + for vertex in xrange(graph.V) + } + # while there are unvisited vertices + while visited.values().count(False): + # find an unvisited vertex with a smallest tentative distance + indices = [ # indices of unvisited vertices + index + for (index, value) in visited.iteritems() + if not value + ] + distancesToConsider = [ # distances of edges leading to these unvisited vertices + distance + for (index, distance) in distances.iteritems() + if (index in indices) + ] + # if there's no more distances to consider, we've hit a brick wall + if distancesToConsider.count(None) == len(distancesToConsider): + break + # otherwise, find the next vertex to process + vertex = indices[ + distancesToConsider.index( + min([ + x for x in distancesToConsider + if x != None + ]) + ) + ] + # to prevent looping onto itself, do this before proceedin + visited[vertex] = True + # relax all immediate edges leading to unvisited vertices + for (neighbor, weight) in enumerate(graph.body[vertex]): + if weight >= 0: + if not visited[neighbor]: + # if there's a value that's been assigned during a previous iteration + if distances[neighbor]: + distances[neighbor] = min( + distances[vertex] + weight, + distances[neighbor] + ) + else: + distances[neighbor] = ( + distances[vertex] + weight + ) + # if finish vertex has been reached already + if vertex == finish: + return distances[finish] + # if we haven't reached the finish vertex at all + return -1 + + +def main(): + # using sys.std* handles for ease of local debugging + sys.stdin = open("pathmgep.in", "r") + sys.stdout = open("pathmgep.out", "w") + inputData = sys.stdin.readlines() + [_, S, F] = [int(x)-1 for x in inputData[0].split()] + graph = incidenceMatrixFromData(inputData[1:]) + print(dijkstra(graph, S, F)) + +main() From 6a69ac7ea76556b4814ee43b5090e6533e11db2e Mon Sep 17 00:00:00 2001 From: Cyril Date: Sat, 12 Apr 2014 15:34:02 +0400 Subject: [PATCH 18/37] A-5 (pathsg). --- grigorev/A-5.py | 69 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100755 grigorev/A-5.py diff --git a/grigorev/A-5.py b/grigorev/A-5.py new file mode 100755 index 0000000..35d5ab6 --- /dev/null +++ b/grigorev/A-5.py @@ -0,0 +1,69 @@ +#!/usr/bin/python +from __future__ import division +import sys +from collections import deque + +""" Reads input line per line. Expects first line to contain the number of """ +""" vertices and edges, all following lines are edges in format (u, v, w). """ +""" Returns an adjacency list (actually a dictionary) of structure: """ +""" key = vertex """ +""" value = dict(neighbor, weight(vertex, neighbor)) """ +def adjacencyListFromData(inputData): + # catch-all record + graph = lambda: None + # (V)ertices, (E)dges + [graph.V, graph.E] = [int(x) for x in inputData[0].split()] + # preinitialize adjacency list + graph.body = { + vertex: {} + for vertex in range(graph.V) + } + # parse input + for edgeDescription in inputData[1:]: + # NB! convert vertex numbers to 0 through V-1 + [start, end, weight] = [int(x) for x in edgeDescription.split()] + graph.body[start-1][end-1] = weight + return graph + + +""" Returns initial approximation of distances. """ +def initializeDistanceMatrix(graph): + # arbitrary infinity == 1e1000 + distances = [[1e1000] * graph.V for _ in range(graph.V)] + # self-loops of zero length + for vertex in range(graph.V): + distances[vertex][vertex] = 0 + # first approximation of distances between immediate neighbors + for start in range(graph.V): + for finish, weight in graph.body[start].iteritems(): + distances[start][finish] = weight + return distances + + +""" Relax edges while possible, return resulting distance list. """ +def floydWarshall(distances, graph): + for through in range(graph.V): + for start in range(graph.V): + for finish in range(graph.V): + if distances[start][finish]: + distances[start][finish] = min( + distances[start][finish], + distances[start][through] + distances[through][finish] + ) + return distances + + +def main(): + # using sys.std* handles for ease of local debugging + sys.stdin = open("pathsg.in", "r") + sys.stdout = open("pathsg.out", "w") + graph = adjacencyListFromData(sys.stdin.readlines()) + distances = initializeDistanceMatrix(graph) + distances = floydWarshall(distances, graph) + for line in distances: + print(" ".join([ + str(x) + for x in line + ])) + +main() From 91ccc63ba6751027bb51c3fffe7102e68cf7ffa9 Mon Sep 17 00:00:00 2001 From: Cyril Date: Sun, 13 Apr 2014 02:29:32 +0400 Subject: [PATCH 19/37] Changed all instances of join([comprehension]) into join(comprehension). --- grigorev/A-1.py | 2 +- grigorev/A-2.py | 2 +- grigorev/A-5.py | 4 ++-- grigorev/B-4.py | 2 +- grigorev/B-5.py | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/grigorev/A-1.py b/grigorev/A-1.py index 69e05ae..a4dafff 100755 --- a/grigorev/A-1.py +++ b/grigorev/A-1.py @@ -63,6 +63,6 @@ def main(): # number of components print(max(components.values())) # what vertex belongs where - print(" ".join([str(x) for x in components.values()])) + print(" ".join(str(x) for x in components.values())) main() diff --git a/grigorev/A-2.py b/grigorev/A-2.py index 6369bc5..a9df181 100755 --- a/grigorev/A-2.py +++ b/grigorev/A-2.py @@ -53,6 +53,6 @@ def main(): sys.stdout = open("pathbge1.out", "w") graph = adjacencyListFromData(sys.stdin.readlines()) distances = breadthFirstSearch(graph, 1) - print(" ".join([str(x) for x in distances.values()])) + print(" ".join(str(x) for x in distances.values())) main() diff --git a/grigorev/A-5.py b/grigorev/A-5.py index 35d5ab6..270d48d 100755 --- a/grigorev/A-5.py +++ b/grigorev/A-5.py @@ -61,9 +61,9 @@ def main(): distances = initializeDistanceMatrix(graph) distances = floydWarshall(distances, graph) for line in distances: - print(" ".join([ + print(" ".join( str(x) for x in line - ])) + )) main() diff --git a/grigorev/B-4.py b/grigorev/B-4.py index 7436d92..2928026 100755 --- a/grigorev/B-4.py +++ b/grigorev/B-4.py @@ -21,4 +21,4 @@ def generator(subsequence, numbers, length): with open("choose.out", "w") as outfile: for choice in choices: - outfile.write(" ".join([str(x) for x in choice]) + "\n") + outfile.write(" ".join(str(x) for x in choice) + "\n") diff --git a/grigorev/B-5.py b/grigorev/B-5.py index 334bdfe..c5f501f 100755 --- a/grigorev/B-5.py +++ b/grigorev/B-5.py @@ -18,4 +18,4 @@ def generator(subsequence, numbers): with open("subsets.out", "w") as outfile: for subset in subsets: - outfile.write(" ".join([str(x) for x in subset]) + "\n") + outfile.write(" ".join(str(x) for x in subset) + "\n") From 3dcb227af7b0affdeff6c64fe28266885214c6e5 Mon Sep 17 00:00:00 2001 From: Cyril Date: Sun, 13 Apr 2014 02:34:52 +0400 Subject: [PATCH 20/37] Vectors are traversed backwards in neighbor(), no need to inverse them explicitly. --- grigorev/B-6.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/grigorev/B-6.py b/grigorev/B-6.py index 8c3edf4..4737956 100755 --- a/grigorev/B-6.py +++ b/grigorev/B-6.py @@ -9,8 +9,8 @@ def neighbor(vector, direction): P, N = ["1", "0"] # create a copy of vector result = vector[:] - # step-through like a digital clock - for pos, val in enumerate(vector): + # step-through like a digital clock (RTL) + for pos, val in reversed(list(enumerate(vector))): if val == P: result[pos] = N return result @@ -21,12 +21,11 @@ def neighbor(vector, direction): with open("nextvector.in", "r") as infile: string = infile.readline().strip() - vector = list(string)[::-1] # we order positions RTL when interpreting binary + vector = list(string) predecessor = neighbor(vector, -1) successor = neighbor(vector, 1) with open("nextvector.out", "w") as outfile: - # positional notation: reverse order again - outfile.write("".join(predecessor[::-1]) + "\n") - outfile.write("".join(successor[::-1]) + "\n") + outfile.write("".join(predecessor) + "\n") + outfile.write("".join(successor) + "\n") From 51858a6777ed26d1d2b21d582bae6522b9c7d8e9 Mon Sep 17 00:00:00 2001 From: Cyril Date: Sun, 13 Apr 2014 13:13:43 +0400 Subject: [PATCH 21/37] B-7 (nextperm) using factoradic / Lehmer code. Still too slow for PCMS2. --- grigorev/B-7.py | 79 ++++++++++++++++++++++++++++--------------------- 1 file changed, 46 insertions(+), 33 deletions(-) diff --git a/grigorev/B-7.py b/grigorev/B-7.py index f544d16..8e2ba75 100755 --- a/grigorev/B-7.py +++ b/grigorev/B-7.py @@ -1,44 +1,57 @@ #!/usr/bin/python from __future__ import division +from math import factorial, floor +from itertools import count -def descending(vector): - return (sorted(vector)[::-1] == vector) +def factoradic(decimal, positions): + if decimal < 0 or decimal != int(decimal): + raise ValueError("Factoradic implemented only for positive integers.") + digits = [] + for radix in count(start = 1): + if decimal: + digits.append(int(decimal % radix)) + decimal = floor(decimal / radix) + else: + break + if len(digits) < positions: + digits += [0] * (positions - len(digits)) + return digits[::-1] -def ascending(vector): - return (sorted(vector) == vector) +def decimal(factoradic): + return sum( + digit * factorial(position) + for position, digit + in enumerate(reversed(factoradic)) + ) -def successor(vector): - if descending(vector): - return [0] * len(vector) - if len(vector) == 2: - return vector[::-1] - head = vector[0] - tail = vector[1:] - if descending(tail): - tail = sorted(vector) - head = tail.pop(tail.index(head) + 1) - return [head] + tail - return [head] + successor(tail) +def encodeLehmer(permutation): + lehmer = [0] * len(permutation) + for i, _ in enumerate(permutation): + for j, _ in list(enumerate(permutation))[i+1:]: + if permutation[j] < permutation[i]: + lehmer[i] += 1 + symbols = sorted(permutation) + number = decimal(lehmer) + return symbols, number -def predecessor(vector): - if ascending(vector): - return [0] * len(vector) - if len(vector) == 2: - return vector[::-1] - head = vector[0] - tail = vector[1:] - if ascending(tail): - tail = sorted(vector)[::-1] - head = tail.pop(tail.index(head) + 1) - return [head] + tail - return [head] + predecessor(tail) +def decodeLehmer(symbols, number): + permutation = [] + symbolsSHC = symbols[:] + try: + code = factoradic(number, len(symbols)) + for digit in code: + permutation.append(symbolsSHC.pop(digit)) + except: + return ["0"] * len(symbols) + return permutation with open("nextperm.in", "r") as infile: - vector = [int(x) for x in infile.readlines()[1].split()] + permutation = infile.readlines()[1].split() -P = predecessor(vector) -S = successor(vector) +symbols, number = encodeLehmer(permutation) +predecessor = decodeLehmer(symbols, number - 1) +successor = decodeLehmer(symbols, number + 1) with open("nextperm.out", "w") as outfile: - outfile.write(" ".join([str(x) for x in P]) + "\n") - outfile.write(" ".join([str(x) for x in S]) + "\n") + outfile.write(" ".join(predecessor) + "\n") + outfile.write(" ".join(successor)) From 62ee83d1d576305b82d51890c0521bc98a38fdb0 Mon Sep 17 00:00:00 2001 From: Cyril Date: Tue, 15 Apr 2014 15:59:17 +0400 Subject: [PATCH 22/37] Comparing numbers instead of symbols/strings. --- grigorev/B-7.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/grigorev/B-7.py b/grigorev/B-7.py index 8e2ba75..9bc60cf 100755 --- a/grigorev/B-7.py +++ b/grigorev/B-7.py @@ -46,12 +46,12 @@ def decodeLehmer(symbols, number): return permutation with open("nextperm.in", "r") as infile: - permutation = infile.readlines()[1].split() + permutation = [int(x) for x in infile.readlines()[1].split()] symbols, number = encodeLehmer(permutation) predecessor = decodeLehmer(symbols, number - 1) successor = decodeLehmer(symbols, number + 1) with open("nextperm.out", "w") as outfile: - outfile.write(" ".join(predecessor) + "\n") - outfile.write(" ".join(successor)) + outfile.write(" ".join(str(x) for x in predecessor) + "\n") + outfile.write(" ".join(str(x) for x in successor)) From eefb8c216cea796eca3ef897e021716dc28e4897 Mon Sep 17 00:00:00 2001 From: Cyril Date: Tue, 15 Apr 2014 17:13:32 +0400 Subject: [PATCH 23/37] B-7 (nextperm). Fast version, accepted by PCMS2! --- grigorev/B-7-fast.py | 49 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100755 grigorev/B-7-fast.py diff --git a/grigorev/B-7-fast.py b/grigorev/B-7-fast.py new file mode 100755 index 0000000..415959a --- /dev/null +++ b/grigorev/B-7-fast.py @@ -0,0 +1,49 @@ +#!/usr/bin/python +from __future__ import division +from math import factorial, floor +from itertools import count + + +def neighbor(permutation, backwards = False): + # find boundary of longest descending/ascending suffix + # (ascending for backwards neighbor, descending for forwards) + for boundary, _ in reversed(list(enumerate(permutation))): + if not boundary: + raise ValueError("Cannot go past ultimate permutation.") + boundaryOfAscending = backwards and (permutation[boundary - 1] > permutation[boundary]) + boundaryOfDescending = (not backwards) and (permutation[boundary - 1] < permutation[boundary]) + if boundaryOfAscending or boundaryOfDescending: + break + pivot = boundary - 1 + prefix = permutation[:pivot] + suffix = sorted(permutation[pivot:], reverse = backwards) + # find rightmost predecessor/successor to pivot value in the suffix + # (predecessor for backwards neighbor, successor for forwards) + for index, _ in enumerate(suffix): + foundPredecessor = backwards and (suffix[index] < permutation[pivot]) + foundSuccessor = (not backwards) and (suffix[index] > permutation[pivot]) + if foundPredecessor or foundSuccessor: + # swap pivot with predecessor/successor + pivotvalue = suffix.pop(index) + return prefix + [pivotvalue] + suffix + +def neighborWithFallback(**kwargs): + try: + return neighbor(**kwargs) + except: + return [0] * len(kwargs["permutation"]) + +with open("nextperm.in", "r") as infile: + initial = [int(x) for x in infile.readlines()[1].split()] + +previousNeighbor = neighborWithFallback( + permutation = initial, + backwards = True +) +nextNeighbor = neighborWithFallback( + permutation = initial +) + +with open("nextperm.out", "w") as outfile: + outfile.write(" ".join(str(x) for x in previousNeighbor) + "\n") + outfile.write(" ".join(str(x) for x in nextNeighbor)) From d366a1c4d4f3a25b0bd967f4063733331ade9135 Mon Sep 17 00:00:00 2001 From: Cyril Date: Tue, 15 Apr 2014 18:40:30 +0400 Subject: [PATCH 24/37] Removed unused imports. --- grigorev/B-7-fast.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/grigorev/B-7-fast.py b/grigorev/B-7-fast.py index 415959a..bc94d67 100755 --- a/grigorev/B-7-fast.py +++ b/grigorev/B-7-fast.py @@ -1,8 +1,5 @@ #!/usr/bin/python from __future__ import division -from math import factorial, floor -from itertools import count - def neighbor(permutation, backwards = False): # find boundary of longest descending/ascending suffix From 264508c3a1959905320faf8e141ca5598773539a Mon Sep 17 00:00:00 2001 From: Cyril Date: Tue, 15 Apr 2014 20:21:44 +0400 Subject: [PATCH 25/37] B-8 (nextchoose). --- grigorev/B-8.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100755 grigorev/B-8.py diff --git a/grigorev/B-8.py b/grigorev/B-8.py new file mode 100755 index 0000000..c6f2953 --- /dev/null +++ b/grigorev/B-8.py @@ -0,0 +1,30 @@ +#!/usr/bin/python +from __future__ import division + +def neighbor(combination, n): + # passing k explicitly is redundant as it can be inferred from remaining data + k = len(combination) + recombination = combination[:] + # find rightmost element not at its maximum value + for boundary, _ in reversed(list(enumerate(recombination))): + if recombination[boundary] < n - (k - boundary - 1): + break + if not boundary: + raise ValueError("Cannot go past last combination.") + # increment found element, fill the suffix with closest values + recombination[boundary] += 1 + for index in xrange(boundary + 1, k): + recombination[index] = recombination[index-1] + 1 + return recombination + +with open("nextchoose.in", "r") as infile: + [n, _] = [int(x) for x in infile.readline().split()] + combination = [int(x) for x in infile.readline().split()] + +try: + successor = neighbor(combination, n) +except: + successor = ["-1"] + +with open("nextchoose.out", "w") as outfile: + outfile.write(" ".join(str(x) for x in successor)) From 2042e55c422bf1526b2f7e4ec74a60d84b960e83 Mon Sep 17 00:00:00 2001 From: Cyril Date: Tue, 15 Apr 2014 22:09:06 +0400 Subject: [PATCH 26/37] Style fix. --- grigorev/B-8.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/grigorev/B-8.py b/grigorev/B-8.py index c6f2953..018ea05 100755 --- a/grigorev/B-8.py +++ b/grigorev/B-8.py @@ -18,7 +18,7 @@ def neighbor(combination, n): return recombination with open("nextchoose.in", "r") as infile: - [n, _] = [int(x) for x in infile.readline().split()] + n = int(infile.readline().split()[0]) combination = [int(x) for x in infile.readline().split()] try: From 1975b783c73a191925f0b96675dd53376796651b Mon Sep 17 00:00:00 2001 From: Cyril Date: Sun, 20 Apr 2014 02:06:05 +0400 Subject: [PATCH 27/37] s/xrange/range/g --- grigorev/B-4.py | 2 +- grigorev/B-5.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/grigorev/B-4.py b/grigorev/B-4.py index 2928026..dab07ad 100755 --- a/grigorev/B-4.py +++ b/grigorev/B-4.py @@ -15,7 +15,7 @@ def generator(subsequence, numbers, length): choices = generator( subsequence = [], - numbers = list(xrange(1, n+1)), + numbers = list(range(1, n+1)), length = k ) diff --git a/grigorev/B-5.py b/grigorev/B-5.py index c5f501f..0a9e159 100755 --- a/grigorev/B-5.py +++ b/grigorev/B-5.py @@ -13,7 +13,7 @@ def generator(subsequence, numbers): subsets = generator( subsequence = [], - numbers = list(xrange(1, n+1)) + numbers = list(range(1, n+1)) ) with open("subsets.out", "w") as outfile: From 0ebe9a6e1b7e415e79ce1379c4675c65871f60a8 Mon Sep 17 00:00:00 2001 From: LankyCyril Date: Fri, 2 May 2014 04:20:17 +0400 Subject: [PATCH 28/37] Solutions to the regression task (#3). --- grigorev/Reg-3.ipynb | 381 +++++++++++++++++++++++++++++++++++++++++++ grigorev/Reg-3.py | 84 ++++++++++ 2 files changed, 465 insertions(+) create mode 100755 grigorev/Reg-3.ipynb create mode 100755 grigorev/Reg-3.py diff --git a/grigorev/Reg-3.ipynb b/grigorev/Reg-3.ipynb new file mode 100755 index 0000000..9cbd88c --- /dev/null +++ b/grigorev/Reg-3.ipynb @@ -0,0 +1,381 @@ +{ + "metadata": { + "name": "", + "signature": "sha256:b5da93ebb971201ab4dc3136d08bcce691a0898dd61a098fda6ca822546fe4c5" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import numpy\n", + "from sklearn.utils import shuffle\n", + "from scipy.stats import linregress\n", + "import matplotlib.pyplot as plot\n", + "%matplotlib inline" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 1 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "SET_SIZE = 1000\n", + "TRAIN_SET_FRACTION = 0.8\n", + "TRAIN_SET_SIZE = int(SET_SIZE * TRAIN_SET_FRACTION)\n", + "TEST_SET_SIZE = SET_SIZE - TRAIN_SET_SIZE" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 2 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Generate and display a random model:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "model_betas = numpy.random.random_sample(2) * 4 - 2\n", + "\"Original model: y = {0} + {1}*x\".format(model_betas[0], model_betas[1])" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 3, + "text": [ + "'Original model: y = 1.2776257189182703 + 1.9114944614047675*x'" + ] + } + ], + "prompt_number": 3 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Generate 1000 points corresponding to the model and blur them by introducing normally distributed errors:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# points according to model\n", + "X = numpy.linspace(0, 1, SET_SIZE)\n", + "y = model_betas[0] + model_betas[1] * X\n", + "# draw model\n", + "_ = plot.plot(X, y, color = \"blue\", label = \"Original model\")\n", + "# introduce error\n", + "for index, _ in enumerate(y):\n", + " y[index] += numpy.random.randn()\n", + "# draw points\n", + "_ = plot.plot(X, y, \"g.\", label = \"Points with errors\")\n", + "# display label\n", + "_ = plot.legend(loc = \"best\")" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAEACAYAAACj0I2EAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXl8FdXd/z834ZI9uRcSDFlIEBAISwIGRdAmVVEJCFGM\nRSxbfZLaqsX2JVQfFxCtiIh9rPRR6U9AC0EByxItWEASFcWl+BAFJBIgrBECN4RANpLz++N2LnMn\ns5xZ7+TmvF8vXppkZs463znne76LgxBCwGAwGIwOT0igK8BgMBgMY2ACncFgMIIEJtAZDAYjSGAC\nncFgMIIEJtAZDAYjSGACncFgMIIE3QK9trYW99xzDwYOHIiMjAzs2rXLiHoxGAwGQyVd9D5g1qxZ\nyMvLw7p163D58mVcvHjRiHoxGAwGQyUOPY5F58+fx7Bhw3Do0CEj68RgMBgMDehSuRw+fBgJCQmY\nOXMmhg8fjsLCQly6dMmoujEYDAZDBboE+uXLl7F792789re/xe7duxEVFYUXX3zRqLoxGAwGQw1E\nB6dOnSLp6em+nz/99FMybtw4v2v69OlDALB/7B/7x/6xfyr+9enTR7VM1rVCT0xMRGpqKioqKgAA\n27Ztw6BBg/yuqaysBCGE/SMEc+fODXgd7PKP9QXrC9YX8v8qKytVy2TdVi6vvfYa7r//fjQ3N6NP\nnz5Yvny53kcyGAwGQwO6BXpmZia+/vprI+rCYDAYDB3oFugMenJzcwNdBdvA+uIKrC+uECx9UVRS\nhIqzFYh0RqJ4UjFc4S5LytVlh05VgMMBk4tgMBgMW5G7IhdlVWUAgIKMAqwpWKP6GVpkZ8BW6N26\ndYPH4wlU8Ywgwu1249y5c4GuBoPhI9IZCQDITsrG0juXWlZuwFbobOXOMAo2lxh2o7axFkUlRVh6\n51LN6hYt85oJdEaHh80lRjCiZV6z8LkMBoMRJDCBzmAwGEECE+gGsmDBAhQWFhp+rRIhISEBiXg5\nb948TJ06lera3NxcvPXWWybXiMHo3DA7dAlWrFiBxYsX49ChQ4iNjcVdd92FBQsWIC4uTvKeJ554\ngvr5aq61Kw6HQ9W1aq5nMPQQKDvwQMNW6CIsXrwYjz/+OBYvXoy6ujrs2rULVVVVGDNmDFpaWkTv\naW1ttbiWDAZDioqzFSirKsPmg5tRVFIU6OpYBhPoAurq6jBv3jwsWbIEt912G0JDQ5GWloY1a9bg\nyJEjWLlyJQCvuuGee+7B1KlTERcXhxUrVrRTQbzzzjtIS0tDfHw8nn/+eaSnp+Pjjz/23c9de+TI\nEYSEhPiuT0hIwAsvvOB7zldffYUbbrgBbrcbSUlJeOSRRyQ/LEJyc3Px9NNPY/To0YiJicGECRNQ\nU1OD+++/H3FxcbjuuutQVVXlu/7zzz/HiBEj4HK5cN111+GLL77w/e3w4cPIyclBbGwsbrvtNtTU\n1PiVtWvXLowaNQputxtZWVkoKytT2fsMhjEEyg480DCBLuDzzz9HY2Mj7r77br/fR0VFIS8vD1u3\nbvX9btOmTSgoKMD58+dx//33+6kU9u3bh4ceegirV6/GqVOncP78eZw8edL3dzH1w86dO1FRUYHt\n27dj/vz5OHDgAACgS5cuePXVV3H27Fl88cUX2L59O/73f/+Xuk3vvfceVq5ciRMnTqCyshI33HAD\nHnjgAZw7dw4DBw7Es88+CwA4d+4cxo0bh0cffRTnzp3DH/7wB4wbN87nADZlyhSMGDECZ8+exdNP\nP423337b144TJ05g/PjxeOaZZ+DxePDyyy9j0qRJOHv2LHU9GQyjKJ5UjIKMAmydurXTqFsAGwt0\nh8OYf2qpqalBfHw8QkLad01iYqLfqnTUqFGYMGECACA8PNzPZnTdunWYMGECRo0aBafTifnz5/sJ\ncTH70rlz5yIsLAxDhw5FZmYm/u///g8AMHz4cFx33XUICQlBWloaioqKqFe/DocDM2fORO/evREb\nG4uxY8fimmuuwc0334zQ0FAUFBTg22+/BQB8+OGH6N+/P+6//36EhIRg8uTJGDBgADZt2oSjR4/i\nm2++wXPPPQen04mbbroJd955p6+clStXIi8vD3fccQcA4NZbb0V2djY+/PBDqnoyGEbiCndhTcGa\nTiXMARsLdEKM+aeW+Ph41NTUoK2trd3fTp06hYSEBN/PKSkpks85efKk398jIiLQvXt32bITExN9\n/x8ZGelLuF1RUYHx48ejZ8+eiIuLw5NPPqlq5XvVVVf5/j88PBw9evTw+7m+vt5X5169evndm5aW\nhhMnTuDUqVNwu92IiIjw+xv3YaqqqsLatWvhdrt9/3bu3Inq6mrqejIYDH3YVqAHihtuuAFhYWF4\n//33/X5fX1+PLVu24JZbbvH9Ts5qIykpCcePH/f93NDQoFn98Jvf/AYZGRk4ePAgzp8/jz/96U+i\nHxwa5OqcnJzsp08HvII6JSUFPXv2hMfj8csZW1VV5Xter169MHXqVHg8Ht+/CxcuYM6cOZrqyWAw\n1MMEuoC4uDjMnTsXjzzyCD766CO0tLTgyJEjuPfee5Gamkptdz1p0iSUlJTgiy++QHNzM+bNm6fZ\nPb2+vh4xMTGIjIzEDz/8gNdff13V/fxy5eowduxYVFRUYPXq1bh8+TLee+89/PDDDxg/fjx69eqF\n7OxszJ07Fy0tLfjss8/wwQcf+O795S9/iZKSEvzrX/9Ca2srGhsbUVpaihMnTlCVzWAw9MMEugiz\nZ8/GCy+8gMceewxxcXEYOXIk0tLSsH37djidTgDidtX83w0aNAivvfYaJk+ejKSkJMTExKBHjx4I\nCwsTvV9u5fzyyy+juLgYsbGxKCoqwuTJk6nvFf5dqt4A0L17d3zwwQdYvHgx4uPj8fLLL+ODDz5A\nt27dAADFxcX48ssv0a1bN8yfPx/Tp0/3PSMlJQUbN27ECy+8gB49eqBXr15YvHixnxBndugMhrmw\n4FwWUV9fD7fbjYMHDyItLS3Q1QkqOttcYtDTkR2MWHAum1FSUoJLly7h4sWLeOyxxzB06FAmzBkM\nC+lsDkZMoJvIpk2bkJycjOTkZFRWVuLdd98NdJUYjE6F1Q5GRSVFyF2Ri7xVeahtrDW9PCFM5cLo\n8LC5xJDCiEQTajAi9RxHh0pBx2AwGGbDORhZRaBDDrAVOqPDw+YSwy4YuSMISAq69PR0xMbGIjQ0\nFE6nE1999RVVpdhLyDAKNpcYwUhAVC4OhwOlpaU+W2UGg8FgBAZDdOhsdcRgMAJFUUkRSipK0HS5\nCdcmXYu1BWttY29utR28brNFh8Phi6z3t7/9zYg6dVgGDx6MTz75JNDV8BETE4MjR45I/j09PR3b\nt2+3rkIMhglUnK1AdX01PI0ebDu0TdLePBAmhVbbweteoe/cuRM9e/bEmTNnMGbMGAwYMAA33XST\n3zXz5s3z/X9ubi5yc3P1Fmsq6enpOH36NEJDQxEVFYWxY8diyZIliIqKkr3v+++/V1XGsmXLcPPN\nN+utriQXLlzw/f+MGTOQmpqK5557zvc7lhaOEQxwliUAMCxxmKR1CSdcAa9wt8L6RY3VS2lpKUpL\nS3WVp1ug9+zZEwCQkJCAu+66C1999ZWsQO8IOBwOfPDBB7j55ptx8uRJ3H777Xj++eexYMECQ8sI\nVlXV5cuX0aVLF8XfqX0GgyFG8aRizNgwAw44sDx/uaRaw2iTQhp1SvGkYmqrF+Fil0s8owqig4sX\nL5K6ujpCCCH19fVk1KhR5KOPPvK7RqoInUWbSnp6Otm+fbvv58cee4yMHz+eEELIxo0bSUZGBnG5\nXCQ3N5fs37/fd11aWprvvrlz55KCggIybdo0EhMTQwYNGkS++eYbQgghv/zlL0lISAiJiIgg0dHR\nZNGiRaSxsZHcf//9pHv37sTlcpERI0aQn376qV3dli1bRu68807fz3379iUFBQW+n1NSUsiePXsI\nIYQ4HA5y8OBB8uabbxKn00m6du1KoqOjyYQJE3ztfPnll8nQoUNJXFwc+cUvfkEaGxsl++Wtt94i\nAwcOJG63m9x+++2kqqrK9zeHw0H++te/kr59+5Krr76alJaWkuTkZLJw4UKSmJhIpk2bRpqamsis\nWbNIUlISSUpKIo8++ihpamoihBCyY8eOdtfX1NSQcePGEZfLRbp160Zuuukm0tbW1q5edp5LDPvg\nafCQgjUFxNPgMeR5OctzCOaBYB5IwZoC5RtUomVe63oTDh06RDIzM0lmZiYZNGgQeeGFF6grJVfZ\nwk2FJGd5Dhm7cqzmztfzjPT0dLJt2zZCCCFHjx4lgwYNIs888ww5cOAAiYqKItu2bSOXL18mL730\nEunbty9paWnx3ccX6OHh4WTz5s2kra2NPPHEE2TkyJF+ZfA/Gm+88Qa58847SUNDA2lrayO7d+/2\nfSz5HDp0iLhcLkIIISdOnCBpaWkkNTWVEEJIZWUlcbvdvmsdDgeprKwkhBAyY8YM8vTTT/s9Ky0t\njVx//fXk1KlT5Ny5c2TgwIHkjTfeEO2TDRs2kL59+5IffviBtLa2kueff56MGjXKr6zbbruNeDwe\n0tjYSHbs2EG6dOlCHn/8cdLc3EwaGhrI008/TW644QZy5swZcubMGTJq1ChfncSuf/zxx8mDDz5I\nLl++TC5fvkw+++wz0boxgc4IBGNXjiWYB5K9NNuwjwQfywU6VQEaBLoRXz49z0hLSyPR0dHE5XKR\ntLQ08tBDD5GGhgYyf/588otf/MJ3XVtbG0lOTiZlZWWEkPYCfcyYMb5r9+7dSyIiInw/CwX6smXL\nyKhRo0h5ebli/VJTU8nu3bvJ6tWrSVFREbn++uvJDz/8QJYtW0YmTpzou04o0J966im/56Snp5NV\nq1b5fp4zZw558MEHRcu84447yFtvveX7ubW1lURGRpKjR4/6ytqxY4fv7zt27CBdu3b1rcAJIaRP\nnz5k8+bNvp8/+ugjkp6eLnn9M888QyZOnEgOHjwo2x9MoNsfIxZpdsPoFb8QLfPalsG5jNB16XmG\nw+HAxo0b4fF4cOTIESxZsgTh4eE4deqUX4o2h8OB1NRUvyQOfPip3yIjI9HY2CiZaWjq1Km4/fbb\nMXnyZCQnJ+OPf/wjLl++LHptTk4OSktL8emnnyInJwc5OTkoKyvDJ598gpycHFVt5ae9i4iI8KWj\nE1JVVYVZs2b50stx6fT4bU9NTfW7JyEhAV27dvX9fPLkSb9ok7169fJLnC28fvbs2ejbty9uu+02\n9OnTBwsXLlTVto5CoAM6GYlUW4Ix6qEwb6kdxtGWAt2IjN1mZP1OSkryS9FGCMGxY8eQnJys+llC\n65IuXbrgmWeewd69e/H555/jgw8+wDvvvCN6b05ODnbs2IFPP/0Uubm5PgFfVlYmKdBprFnkrunV\nqxeWLl3ql2Lu4sWLGDlypOT9wp+TkpL8zCiPHj2KpKQkyeujo6Px8ssvo7KyEps2bcIrr7yCjz/+\nWLEdHY1gEnZSbQl0jBMroBlHs4W+LQW6ERm7zcj6fe+99+LDDz/Exx9/jJaWFixevBjh4eEYNWqU\n6mddddVVqKys9P1cWlqK7777Dq2trYiJiYHT6URoaKjovZxAb2xsRFJSEm688UZs2bIF586dw7Bh\nwyTLO3TokGydiIzVzYMPPogXXngB+/btAwCcP38ea9euVWqmH/fddx+ef/551NTUoKamBvPnz5dN\n6ffhhx/i4MGDIIT4wktI9UlHJpiEnVRbpBZYdljV6oVrw94zewHIj6PZH29bCnS7cs0112DlypV4\n5JFHkJCQgA8//BAlJSWi5nVyqd4A4IknnsDzzz8Pt9uNxYsXo7q6GgUFBYiLi0NGRgZyc3MlhV2/\nfv0QExPjMw+NjY1Fnz59MHr0aMnUdA888AD27dsHt9uNu+++W/S5cnbp+fn5+OMf/4jJkycjLi4O\nQ4YMwUcffSRaltTvnnrqKWRnZ2Po0KEYOnQosrOz8dRTT0le/+OPP2LMmDGIiYnBqFGj8NBDD6lW\nKVlBUUkRei7uiW4Lu2HM38eoFkxm7CYDhVRbpBZYwbA74dpQc6kGKTEpsuNo9sebRVtkdHgCPZf4\nMbAB/XGwOxN5q/Kw+eBmZCdld9gPmpo2qInGGJBoi4oFMIHOMJlAzyXuhQa8noofT/+4QwqmQGB1\nAgqtyDkRmdUGJtAZnZJAz6XaxloqT0VGx4MT5OU/lcPT6AFg3Q6MCXRGp4TNJYZZCNVpVqqGWAo6\nBoPBkEFtqF3uEDMrMQvpcem234GxFTqjw8PmUsfHqrjhSgfYwnpwvzNTxy/Vdi3zmpktMhg2Ixhs\ns9VilfmiUqhdYT3M8GcRYmTbA6ZycbvdLBY3wxDcbnegq2AogYjbHWho7bP1ruSVQu0GwsnLyDID\npnJhMBjiBINtthJaVRt8lYkZ1iaBMKOUKrNDWbkwGAxxOoptth60CuaO/LFTu7tgOnQGIwiwQm8b\naLSqGTpymAQrzgnYCp3BYFiO3C7EKosXWoT1mbN1jqb6ie0u5NrKVC4MBqPDY7aeXG99Tl88ral+\nYh8xubYyxyIedvvKMxidGTXvox6rDzPee2F9prw/RVP9OFWa3LN1ozrHkUosKEIUsxO4MjonwZhK\nzQrUvI96UruZ8d4L66OmfkrzRe5ZWmRn0K7Qab58bBXPUEtntBE3AjUrUbGVrBnl0CKsj5r6Kc0X\n4bP4MkkLQWvlQnMaHgzB9RnW0tGyC9nF69Qq6xQrrWBo+lbtfOHLJC106kPRjmzTyggMHc1G3G4H\njMEETd8K54uSVoAvk74p+oZZuaiho72cdoKpqzoGcosWs8cwEHPEqjKLSoqwbt86eBo9iHJG4YbU\nGxQjNwLKHwG+THJHuAPjWNTa2ophw4bhzjvvNOJxltEZHDjMwq7qKruoGOyCnArC7DHkP3/gkoGW\njIeRbZKbSxVnK3wJLy62XMS2Q9uoylNSweiVSYYI9FdffRUZGRks2FYnwk66ZP6Lt+/MPlt+aKyE\n3x8AJAWE2WPIP9irvlhtyXgY2Sa5jwNXTmxYrKryzNbx61a5HD9+HDNmzMCTTz6JV155BSUlJf4F\n2FjlwtCOndRV/G1sYlQiqi9WB+25CI1KgVZvbtYYcnV0hjhRfrocpy+eVj0eWlUnetvEL3fPT3tw\n8sJJxIbFovzBcqS50tqVs2jMIszeOtuU9yAgjkW///3vsWjRItTV1el9FKMDoce0zGj4q7J1BetM\ne8HsAI3ZJO0q1awx5NdxYv+J6BraVfV4aDUPVdsm4YeDX273iO4AgLqmOszeOlvSdFFvHxqp99cl\n0D/44AP06NEDw4YNQ2lpqeR18+bN8/1/bm4ucnNz9RTLYPhRPKnYb1Wm54UO1EeAth40wlrYH1bD\nr+OK/BWaDmKtUukJPxz8cl3hLmw7tM2UOvD7oa6pDjuP7QQOA6M3jEbBoALtD1btisTjiSeeICkp\nKSQ9PZ0kJiaSyMhIMnXqVN3eTgyGVej1LDTKc5S2Hnq8KK1Cro52a+fYlWMJ5oFkL80mngaPX7li\ndTBjvBMXJfrVgUOL7DRM2paWlpLx48e3L4AJdFNgLujGwL3Q8S/Fk9FvjVbdn0a5mgsFi1XonUdq\n7w9UO6VQ++EwY7yPeI6I1kGL7DTUU5RZuViHXc0GOxqc1UH/7v2x89hO1f1plGrADOsHGhNOvfNI\n7f162inWHr1mqmrNBI0c796u3ggLDcNvPvyNYeqxTu1Y1JGxystVSudpF92zHGrqqLU/7WTtI0Ro\n/bP/4f2ynola5pFZ81Bs7MSsd7R6whphRaM1LjqHUt1ZxqJOhFUxK6RWYB1hh6CmjjT9KbYatLNz\nGo0duNZ2q7lfC2Jjx18dRzgjkLsiF3vP7PX9jlsxK63ai0qKsGbvGk3zlz/eet8BMw5+mUDvoFgl\nSKQmnZ0ci6TQEuFPrj+t/IgZ4fFaPKkYiVGJANr3Aff8Ke9PUdxdyLXbrHkoNnb8j0dVbRXKqspQ\nc6kGKTEpfh8UpXGqOFuB803nAQDucLfm+av3HTDjY8gEOkMWbtJlJGQg/918n4DpCLkdja6jlR8x\nIz4ernAX9j+8X7QP1Dw/EB9vsbFzhbvgCnch/918v5X5d7/9zq9tSvXl/u4Od+PbX3+reW7onV/C\nj6ERH3GmQzeBjqBfVosdovYFul+t1Jdr1U3T9pGa5xvVbiPGjz8PQxCC2LBYZCdnY23BWp9O2xni\nRHTXaCzPXy5ahlh7aOpGW3+56+Tyk/rs0eF9x9beu5ZFW7QDdhB+RqNGAJgleIOxX6XQKkTVuP0P\nf3M4kmKSEBsWa8kH0ogDzJa2Fmw7tA3RzmjUt9T7rtGT65O2brT1l7tOLj+pM8SJlrYWDEscho+n\nfxy4aIsMf+yuX5bb2hWVFKHn4p7otrAbxvx9jO/varaXZuma7d6vRqJVN63G7b9XXC9FU00j1ADc\nM8QOMGngz6coZxQKMgowMnWk7+/DEodh6Z1Ldc0Pmntpny92nVgfRDgjUP5TOQAgyhmFlrYWAECv\nuF6BjbbI8Mfu+mU5gVtxtgLV9dXwNHr8QoLy9ZdKL7dZgldLv3a2cLpq+ohmnGg+zkp9zD2DO8AU\nnscoIQwlsKZgDdYWrMXE/hOR3z8fH0//GK5wl673juZe2ufzbcynvD8FtY217fqAO9jlQvBGdY3y\na6NmNLs6UWJBEbbD7l6cct563N8wD2TYG8P8/m43t20Ouf42yrPP7mOqBZpxovHsVOpj4TPUjklH\nCHcgRNhGsX5U8hbVIjuZQDcBMzKPG4ncC+Jp8JCJqyeS/NX5ksLeLm7bnJB1v+iW7G+j6mz3MTUa\nrm9vfftW0bnAR6mPhfPNinkUqA8wV278S/GSMWI4lD5UWmSn7vC5jPbYXdcrF5HQFe7ChskbRP9m\nZRQ/moNVfqQ84Iou1Yw6231MjYbftwUZBbJ9lxCZgITIBLjCxK8Rzjcr5hG//kmLkzC853BLDn/5\n5fLVS2Lz2IzwxUyHbgJ216HLIacPtdIrkkZ3y/eEBMQPk4yqs13GVGp8jD4rkPqAiR2aV52vwplL\nZ7DtMF0aNivmEX9uNFxu0BSnR0+52UnZuPnqm7Hxh42WelQzs0WGH3YxDaQxk6xtrMXAJQM7VIai\nAUsGoLq+Gs5QJ74p/MYvCw4NUuNj9LhJmU3yy+HKqm+uN9VmXsuzAPjmRmxYLOqa6gydI1J15/db\n/rv5vr5yh7txaNYhVWWzWC4M3cipFqy0GKFZEct5QtqRopIiHDx3EOebzqPmUg1uXHaj6mdImcRx\n5m+c2smsKIT8lS9Xltbdi5HmrcJn8edG+YPlqurH77vpG6aL9qNU3fn9xvVV15CuuKb7NT6LFzNh\nK3QDCLQHo5HIObToXQUGUz8poRQtMNQRisrfVapeoYuND/+5E/tPxIbJG0zbadU21mLGhhlwwCHp\niSmHmJOQEStnI6M+8vsuPiIeNQ01APz7kXYHWVRShJMXTvp5gNKOBVuhB4iOEHmQFjn9JrfiiI+M\nx8kLJ1Wv/oKpn5SQixboDHFi9693qxbmgPj48Mel5lIN8lblwRnqBGD8IS53aL5+8npNQpPfL7tP\n7kZiVCLWFayz1RkHfxeU1TPL9//8fqTdQa4pWIPYsFjRZ5hBp1yhG71StCo2eaDRsuIwa0VmV7j2\n7j2zFzWXavzaalYsGLFx0ZqcWQqj3hnuXeG77tstjAN/nADoHjOt465FdnZKgW7VAZJexF4iO6gt\n1HzAhOoAI4WMHeG3t2tIV/ws/WdYW7DWkvaaubAw6p3h3hXOEznQH3c7vE9SaJGdndIOXSxQvp4B\nNdqelJtk5T+V+1yDi0qKsKZgTbss5YFY2aixI5bLAB8IzLSs4B+EcStQLnyCFeOkZlzU9oPwMFbp\nfqm/c++KXTI9Sb1Pdhb0cnRKHbpYoHwj9LpGWYFwk4wT5tHOaHgaPahtrLWFg4saO2K72G9zqNHj\n08Yo4T+Lay8XPErNOJmZH1P4bLX9UNdU56fvpkkiIfd3o2zRhe1S24dS71NHPe8J2hW63BeWv6Km\nFZBqPRf1rMq4OmUlZuHY+WM423DWt9Kz0luTj9YVixnecHpQ2p3x28mPTy02nmJzR88K1Mzdl/DZ\nahYGFWcrfP0we+tsrClYQ51EQu3CQ+08E7aLH46Wpg+l3if+TsvT6MH0DdNRVVulObeuZSt+1cEC\nVGJBEaIYHUiK5nlGxajg18ku8VOCJZYJv2/F2sT/XeKiRNm+n7Z+GolfGE9ufedW4mnw6I4fkrI4\nhWAeSMizISRneY5h4124qdAX74YLuCY27/n1n7Z+mu//b33n1nb9oPTeaA2opXaeCd8PI9/B+IXx\nvrrw/59fL9r6qmnXuXOElJayWC5+qIkLTbMSonmeUatnfp0CtSIXIuXQYsaqw4jnKulwpdrE/926\ngnWYvXW2ZN9X1VahpqHGt3uSWh3StifNlYbjF46jjbShrKrMsFV6xdkKn/qOHx5B+Gz+apdvfz2x\n/0QUZBT49YPSe6N1Z6b2fEv4fmh5X8TGxxXuwojkEb5DZle4y3eIqyW3rli7IrpE4tmhxTi834Xy\ncmDPHqC8HKitBYYMoe4yf1R/AlRiQRGiGB1ysyOG8DQSsfZrWbXTrGKN2A3QPENLBDw+UqvD6D9F\nk1vfudW3ypWLBin2PLHQxXqgXbXyrxNblVuB0g7KDPjlxC+M981Nfl2k5gX3e/6ORqy/Dp/ykNy/\nFpAFf/aQxMevlBc1o4DcdRch8+YR8o9/EFJZSUhrq/ceLbJTl9liY2MjcnJy0NTUhObmZkycOBEL\nFizwu8Yss0WjV4daT+2Nxup26UGLmRzf/K23qzcaLjeg6XITrk261mfeZ4T5nfAZ/NyNSnkeacsT\npnF7fdzr6L+kP5pamwAA3SO642zDWd/1Yu3hl/36uNcxa8ssPy9MI8aPVp/PXRfhjEDluUpUnqvE\nrv/aJesAZbf5JVW/ynNer1x+xEWhz4Ae23j+vL4jtQAzo9f4Vt179gAej3fVnZkJfJKah30tmzH8\nqmxsn3H6h8g4AAAgAElEQVSlXcK67nxgp7Vmi+Hh4dixYwciIyNx+fJl3Hjjjfjss89w443qY1So\nxegDJKXnWWUuaHW79KBle8v3ajx76SzqmusAwM+8LyEqAfER8bqEg7Bucv2gtY9c4d40bty9s7fO\nRqQz0ifQQ0NCAXgPt9Pj0kVd5fllz946u13oYv7f+/2lH0Ykj1AtOJXUH0KhnP9ufrtDULHrlPpV\nL2LzS8+h6fELx/3qKQx1OyBhgKhaRYraWviEduWJSCACcJzKxv7VS7F6oFd4z5zp/W/v3kDIf2wK\naxvF3xuxuqpFtw49MtL7gjY3N6O1tRXdunXT+0i6cgWn0LWNtboEgFmn9kbXI9DP46NFT8q9pHyv\nRsAb6InTLXL292ptuIUvO/8+OTtqPW7ywucWrC3AtkPbMCxxGNb/Yr2sDl7sfqm/RzujUdNQ4zOj\nM0pwFpUUYc3eNTjfdN73s5Ipn+8+gbVLhDMCPRf3bLfjoq2HmB5bbmE1cMlA7H94v2wZXP24iItS\nJsBbp2711SPCGeEXwzzG6cLBg/BbcZeXA+fOeVfdQ4cCjw4pxuL64eg1PAzdbpqC5TIfG6n3RlhX\nTahW0ghobW0lmZmZJDo6msyePbvd3w0oQhThKbReHZtQRybU9VqlQ+8sun9OXxu3II7krcprpzNV\n0t+K6eLldK7CfuBfO3H1RM19JHyuVH9LnR3QWouYpdPm94P7RbfsXBfTxUvpvNW+k7T6cv45A00Z\nXP2OeI60kxeiZygeQjL/zOuTogISFUVI796E5OcT8swzhLz/PiEHD17RdattgxSc1VTO8hySvzo/\nsCnoamtryfXXX0927NjhXwBA5s6d6/sn/LsezDTpM/tAJhhzVKpB7GXixjPrjSzFtGdi48OZ/cUu\niCVHPEdky7faHNSIlz3suTDiWuDymUkaAdcP7hfdin2m9PHRc6hLOx6eBo+iOSkh7d8voelmTb2H\nHDhAyJo1hDz1FCF33klIWhoh0dGExD3krUuv57PJ5h0ecv68sW2QIvOPmQQ5IMgBybgnI/A5RefP\nn08WLVrkX4CJVi5mrj7NfuGDxa7bSIR23XKIjc/ot0arXrkZYT9Og975pHX1q9Q2I98huXy0NPfS\n1sPT4CG9/6c3Gf3WaMl28fsrf1WB36o77tcTSVQUIenphEyc6F11r1tHyI8/elfdWvtEb18K54gW\n2anLyqWmpgZdunSBy+VCQ0MDbr/9dsydOxe33HKL7xo1Vi52ip9gdqyJzhKhUQ1qAkAJx6eopAjr\n9q2Dp9GDYYnD8PH0j6m99viZZcyK/Kd3PnHzBYBi+/gI+5Q7yDTCxl/McsQqxOZKWxtQWenVcT/+\nfR4qHZuB5miEnByJ6CigLmEbeoVm443RWzFquAtxcZZV1w8pOSe0mtr8y83WWrmcOnUK06dPR1tb\nG9ra2jB16lQ/Ya4WKyxJaD8aZrus28VhyE6oOcAVjk/JgRKf80zP6J6yfarHDV4reudT8aRiqsQS\nwvktbBv/46X1HZOzHLEKJ7zt6hWajcjtSzFyMfD990BCgveQ8u7MYrzh7IcLXWvQlr4NP+8/EV1D\nC6jfNz2LS6V7peSc0GpKC7oE+pAhQ7B79249j/BD6cUyYgVvh2iF/HaY/fxA73Tk4NczISqhXQAo\nNXCmggB8VitSSHm9BvLjqjRmrnBXO5NGMYTzW7hwMOLjJbTGkEpXaIRAXHlXMc6ecLWzMDldV4yu\nDwxHY5cwfN1rChbdW4zR1/JX3S58v+qKp6faSJ965ITSvXJjwP/bN/iGukwOW7n+K9kfGyGM7RCt\n0OyPih0+WjRIuZr//O2fizocAdKC4tqe12Lb4W3ISszCivwVsuWK7Y4C3Udax0xpRc7tDLjrnCFO\n5PfP15Q+joPrv0VjFkmaZWppT12dV1jvKK/Awcvee3v8VxFSPl+DzEzvynvqVGBtYxGqWyrw3ela\nnG48jNMtwIqzRciL8y+Dq6fQDFEqGqVcP6pBKdSw3O6c/zd3kVtVuYDNBLowNoaaLxuH0srAaFWH\nlpWI0Tb0Us8P5EeLBn49+bEywkLDfDbqwrkgJSjW3ruWelyl1B9SY2nFjkdqzMTKlosIKTW/+f3G\n6dKloNktcP0n5XQkNwfb2oBDh66stn2r7tPAoEFA482RQDgQ1yUeA3JPotu4PLw9qRhzts7BEkGe\nAKky+PXk69ulPi5KOxs1fUXj1OYKd4l+ZPSq5myVsUjpoFB4aCA22YzIrKLmBdZSXm1jLfr9pZ9o\n8lkjsDJ5gB5hJ5Xqa8r7UyQPALUcJtPWUWoszUq4zEdqzMTKFmZFam5rVuwPpX6T+kjQtlcY0iEp\nJgmV5yrxr1/swpNb/oT9pytwqrESjgtpaPDEoufnxRg20OVbeWdmAn36AKGh4in14iPi0Upa/QS5\nnAeuVNszEjJEw+BqNVKgmRtiz6a5r8NnLFL6KgoPDYRf26KSIpT/VA7AKwi0rk7VbBfVrIb5L01W\nzyxsO7TNlFW62Qe6fOT6Ss1KD7iy2hMeAPLjsLw+7nVF70th+WKZn8SQGksjdjxq+kLJi5V/9tLc\n1oyUmBRFIcR/t4RxbeZsnePnLeqAAwAQ0zUGi8YsompfRBdvnfpEZKPZE4adtV5BPGzObEQknEZ9\n9zKvtHEfB9zADeOlx4Hri7xVeQCueMlyDOkxBH3cfRQFeVFJEUoqStDQ0oAeUT2wrmAdpm+YLjpf\nte7c5eaGnJrLrF20rQQ6jSCS6wipMKFqUdPZaiYCX/hN7D/RpzemcXG3YtuvR30kNR5a4pAIDwCF\n8U5oP1b8+6TqyCchMgEJkQlwhalT09EEgKL9qAjrLRa6tnhSMQYuGYjqi9XUK0r+uyWWFIIT5qGO\nULSSVgDAheYLov194QLw3XcClUlFMUKnD8e5C2FojD4AABjszkbp/1uKqRumYPNB+UNUMbh+58JA\ncFztvhrrJ6/3u1Yqzkx1fbX3gqYrsXaA9nNB6yJIbm7IqbnMsnKzTKAbJZDkOoI/WEoHY1rLEDJn\n6xycvngaU96fotguYf041QJt1hizDzpLDpSg+qL3Bej7l764Lvk6xciENOOhJQ6JEbFWuPJpt+ZV\n56tw5tIZbDvs/4FVetnFzPhmbJiBDZM3qP6o8OvNzZM5W+e007fuf3g/1UdG7H3jB0g7eeEkvjnp\ntaboEtIF1ydf71NzDEschicGL8X69f4WJtXVXl03pyqZPBlYdmYOVu8/Dk/bYQBAUnQSPi3a6qdT\n5g5RaQ4p+f1e21jr9wETe7fl4sxwbVGyaBJaXYmpZqT6Vyyap9xix6xdtGU69EDqIc1EjzOMmvpa\n4YjUbWE3Px0l0N4Zha9f7e3qjV5xvSQnPde+ncd24uSFk4gNi0X5g+VU4Vj5K9qJ/Seia2hX1eOq\ndj5wfRwfGY/+3ftTO8xw94U4QtBG2gAA+f3zsX7yet/fhB8VOYErrLeWd0fuHjEdNcfQrhNx/jxQ\nV+dAy9rlcEf467kzM4G+fb26bqnyAO+YSZlZanF2UhpLsfejtrFWUnWndP7Gt7oSqyPfnr+3qzfO\nNZzz7XK4/tYrj7To0C0T6HbyjDRSfWFVu6z4WI15Zwy2Hd6GmK4xuNB8wdcm/uRNjEr0rZT41ijx\nEfGiKpWikiK89/17vjC5SgJJKBisnC9igo5GgHL3cRmL+Ae5ag47pRCbY0pzWOogcOVdxaitdmHP\nHmBOeR4OYjMczbEgXesQWZuNu+u3YsQQrxAfMgQQC54qtjrlvHQBr477k5mfUB/Qynnq0r6r/H6W\nEtxKfc6vF9/qSqyO9c31vmv574E73I1Dsw6pnq9i7dSUS0JT0AEVcEXYKeqfVIYSDjWxPQLZLq6e\nKYtTZONa0MKPTMdvEz/GBP9v/Aw9UjFGxKL5yaEmQJdZaI27ohSxU2sZ0/4xjSS8lEBufftKjBul\nWECeBg+5q7iAfFTmIf3+dOXaLvcVkJQUQsaNI+QP/+0hI18uINu+PkLueY9+DvPL7v0/vUncgjjf\nz0kvJym+S8J+kusLLTGPpO4RZpSSyj4kFnFSWEf+32kDnMnNB7E6axHPtjJbVMKolTX3JZbKUGKF\nesgIhKtZwJj6CvuZ+51wlcmtirhDK7HVNNfX7nA3vv31t7LqFv4z+TFajIoboma1p2QeS4OcakGN\ntY7YfOSvJv/1y62+VTffo/LkSSAjA/jp1jwcj9iM/tHZ2DxlK3r31Lfb4ZettDqleZfkdp96dyf8\n+ajHXFiujrS7Z7G+4NrCZU3i19nWKhcjUJocardnUoLITuohMYSTgLNMoAnaRNNHaj9ocgJQarLT\nOvHwt7oc/DqZ5TOg56M+YMkAVNdX41LLJbS0tVCpFqQoKvEPOrZp0sc4ftCFL76txV+PFiH+i6XY\n/60LsbH+eu6hQ4F+/YAuXYxX1/Gfxx3si32whXWnDSgmVZaS6oRvJhjdNVr0EFyNPb5edazwWXwj\nCDF79JSYFHz32+98KqOymWUd2w5dDr6NefeI7jh54STyVuX5dTqtJQj/9FxsotvBm1QOfjs5xxKA\nzlSTf+/wN4eLHmqqtZGV8w+QOs2XGiupwFlSJm9m+Qyo8dwUUl1f7TsgC+8S7nt51ZRPCHDkCPD5\ngSumuAe+6oVrfu9CRgYwdKgLCX1daMjPx4jpkVh3n1eX/fnZCvzf5UgU9y5Gly76vA/lrD5o7Ldp\nzYiFu7Cq2iq/3RitxziNN6zSu81/Bk1GJDmEc1PMLJbfFm6eCC2j1NAhBHpRiX+aLAB+7s7cgGsR\nRHKrfLF6aBHMek0OheVKuczTmGry7w0LDROdvGpiYIg9l6bv1Tjx8E3ehC+iVp8BJYsHGhd6qbHk\nzCwjnZHY99t9fvbjYs+8eNFr1813g/+yRxEc8RUgCXsBJ3B1WDZWPbIC2W96V90AkLuiAruqyoDz\nV+zJzcpHy7f6oDXppDUjFjP7lIviKNWPlecqAXg//lIOUUofN/57X32x2q98te+/cG7mv5vfzixW\nrC1isoca1Vp3lRhRhPBgLWlxkl9mGu6w4da3b9V9kCZ3CKM1KYWRyQ2EqbPkEjUoHUgppfNS0161\nh8NS9RYeyKp5jhrMHMsjniMkZXFKuwOytjZCDh8mZMMGQubPJ2TSJEL69SMkIoKQ4cMJmTmTkD//\nmZCPPyZk1NIr9UtZnCJalrAuWuYZ7cEtlwJP6kBR7HlyY8m/jnt27IJYv//StoN7lmuBS3fSGLGM\nSNzzuYxHtM9Xc/grdp8W2Wlrgc51ZPxL8X6nyMLMNEZk/xGWJdbpRlk/qIW2XGE/0FhCyKXzsipN\nmxnZm5Qslcwey/p6QnbtImTpUkIeeoiQG28kJDaWkKQkQsaOJeTxxwkpLiZk715CWlra309TP2Fd\n5Oom1R+0eVg9DXQ5fGnHkn9dr1d6kYSXEkjOMm8uTbUfdTW5aGkQ9qNRz6eZO/xx0iI7ba1y4W/F\nuAMDV7gLsWGxAK5sZaa8P8XvZynktkzCssQOTLSoIgDvNs8VLh5djQZanb5wi6fUL0oeh0aeJch5\n1mn1BJVDSTWitW3CLTshwNGj/p6Ue/YAx48DAwZcOaC8+25viNejFysAZyT+qDAHaOonrIucOkGq\nP9R4M45IHqHo2UyrAhOq/nYe24myo2VIjEpEXHicKnWRWo9gQF4WCNut5fliCJ8rFa5AT4ILW6/Q\npVYpalYmfORWD0o2qrTPMfIeMcRWWlIqJ6l+oVHNSJWlFbndw8TVEw235Ve7Aqdpa309IV9+eWXV\nfdNNhMTFeVfdd9xByB//6F11f/89Ic3N7e8PZB5Zrj/iX4r381mgza1auKmQjH5rNElclChra037\nLqpR/SmhZQesR52oNFdo3xuxOvj5dthV5aJVIBjttCMntGm3lPznqNl6GaW+EJsEagUFrWpGzXP5\nk3ja+mntJrRWfa/Wj4rauSNs65EjhGzaRMhzzxFyzz2EXHONV9c9bBgh06cT8sorhGzfTsiZM9RV\nskyFJQbXH3KJtM04P6KtG6f6o1lQcehZcOgZC6W+oO0rsTr4ySG7CvRArEjEkBLaNPpz4XOEwsKq\n7Opik4BmcoodQikJV6nfi7VV6H0r7GPhSpBmtSd8rpqPCu1q6uJF76p78IL/fOz/kE1ir/KQnj29\nq+45cwhZtYqQ774TX3WrgXbHZCZyY8od+g17Y5jl5ylqFlQcej4yet7HlFdSCOaBxC2IE52/ag8/\npfratgI9ECsSKcQ6mz8xpCwKlLBqOy02CWgmp1DF0ft/evu23lKHUFLP5T8rcVFiu4+C8IMhVxel\nvlIjSJR2L+NWFJBNmwh5/nlCCgoI6d/fu+rOyiLkvpkekvl8AdmwxUN++Z51Alaq3oTQC3ojQlUI\n5wftfUai9qMhpUYyG6ldjlHWdlxfaxHolniKeho8tvG2FHMmMsIz1O7epWoCItE+i4OL1831KwDf\n4bFYCNLUV1Jx/MLxdtEXxQ6JhF6ocmFNuXoNT8zGoiFbcXi/C7OqUnEx9DjQGIf4dXtwbZ80v+iB\n/fsDTkFOaatDP0jNHdp6GFFfq+avmiiTSvfRBlMz2rFP73jRYuvgXHys2mL2f60/iVsQR+Jfijfk\nIEcOtQcnYhRuKiSJLycS94tuKj2inpWZHpvlW9++lfRY1EPxfqmVp9QKh0aXL9yWHz1KSEmJd9Wd\nP9lDomcWkLA4D8nMJGTaNELSnpXWGUthtnpBOG5KW2+lehhRXytW4ISo38nS2IArtd/o3bPe8aJF\ni3juousTohEa93OtFJUUYWX5SjS3NvsyrwDAjctuxLE/HBO9R6trNB9hogst3qH8DCs0WYxoypBa\nnWgxwRRm0lGKUS5lwiY0O1W6nvt9Rlw2SKMLNdiG6Lps/OuRpbjOcWW1fc94F+YPXYMBb15Zdeet\nikXVQXUmrWoCZ2lBbNzEvBFp62GEeakR7wANaj2KaRKEKLVfT7o3NUkvtI6DkTsIXSqXY8eOYdq0\naTh9+jQcDgeKiorwu9/9zr8AhwNjV46VTMjKj9ZmxDZFLAIh54KtFOlPDXJBpOIj4gEH2kVPo40S\nB7RPjiwGzTZZaRuoNy63HNyWWKh64fpPLHrj8DeHo3vXJJDGWIy9VIziM3Nw8vI+NIZXYuDOXRja\nPw77+xbh2eylGDXchR49ZKugORIePzIizUum5qWU60dhsmU1ix2jVQtmIIxbXlJRgqbLTbg26Vqs\nLVjbLoAbF9yLNo+oUplq75VLeqE1JEBRSZFfuxtaGkRloOVJop1OJ/785z8jKysL9fX1uPbaazFm\nzBgMHDjQ7zph6jH+l4zWKYgWfhyE8JBwuCJd2PXALmphTvtFlgoixU9oK3RQonF24WdYUZoYNLFJ\n+PUSS0ZtVv5U4Mqqj/9S8FekDQ3AN9/wY5i4cLRvLxxO8V57oaUIXXueRmOjd7IP/sNsxIa74D57\nGkvPTkFubDEAZacufphSqZdOLO6Gmh2WmmTZtGkU+bF2lOogjHdkRMwgMz4I/J2A0o6UH9xLLI+o\nljLFkGu3VNwkrQHiuOv57U6MSvSVoVcG6hLoiYmJSEz0ViY6OhoDBw7EyZMn2wl0uYSsRkc2LJ5U\njPvfvx+lR0ox5Koh6BbRDXHhcdT30wQkAqSDSImF5OWHuxXew92n5UUSvhxiCZmLJxX7YkCLvTRq\n+l/rtpzLCN8vMhsDflyKyZO9QvzwYeCaa654U44fD7x4LBIfH+Oiz3k/+D8cvJL/ctuhbdTJlvlI\nvXT8kKv8zOxGBRuTKluq3loXOxVnK3zC3B3u1iQY9ASR0zKHxXJ+8p/D9yDWkyNYCbl288eD+7ue\nAHH86wFvu9f/Yr1xKj7dmvv/cPjwYdKrVy9y4cIFv98DsNSkiMOI4Ety5ndSByNiv5cyi9Qa9Id/\nL9evctmDjD6skTuMbWgg5JtvCFm2jJBZswjJzSXEleghYb8sIIm/mUZSns4hQxeOJZ9+7SFNTe2f\nLew/MYcYLW2R6gOpeSJ3SCh2eC1nYy5l363GM5M2No1S1hwtfUSDlvfN0+AhE1dP9DPxM9uDWAy9\n74faA2WxdouhRTwbYrZYX1+P3NxcPPXUU8jPz/f7m8PhAHK8/5+RkIG/PvRX5Obm6i1SEa1mWHx9\nG0CXIZxbkUitUmjMnABQmfFxCHW+3OpGbIdgZIID4db+RncB8i6uQXk5sNlZhDpnBaK6RiLvUjGy\nB7t8CReuukqfWZdUsmVapHJOtrS1SGZbkkI4brQmhcLEyXL6cqFZKT80rlh5RoyxnmcI57hSeGIO\n4RznkkCoTdSth0AklxejtLQUpaWlvp+fffZZ6zMWtbS0YPz48Rg7diweffTR9gU4HMA8dcl+hQHv\npQZVq02rWsTKERNOUgJLqi7cSxDljMLFlovt7pMTgHJptoyenI2NwL59Xj3305W5OOH8jzBrdCPn\n20M+wf3q+Vz8++wVdZUwabQeW2cj2yUUskrWOkLUHF7LtVnOOIBLQhztjMbI1JEAoPrDYyXC8dFq\nQ88tTNQm6taDEWcHSs/QUoblduhtbW1k6tSp5NFHH5W8BoBq+2xhuEq+R6LUdWrtS9XYcMsF0VHr\ngs9n2vppJH5hPOm+sLsq13tCzLEbbmsj5PhxQv75T0IWLCDkvvsIycggJDyckCFDCLn/fkL6z/fW\nKe6F9lt7paTRautslr+CEVtsmi0zd61Um/l/E0tCzLe5t0r9wEETgErOZ0KvDb3ZsX74GGGnblR8\nFz5axLMugf7pp58Sh8NBMjMzSVZWFsnKyiKbN2+WrZQwY7hY7A1O5xjzQoysULdK58cvhws8Jebe\nq1ZgKYUcMNPZo6GBkLuWFZL+C3JI2pNjyU1jPCTsnkLSpTCHdP/dWPLbP3jI228T8u23hDQ20tWJ\n+5uS6z8tZsVJp40jYyVi/ar3w6NH2KkRUGLX0M5dNWdRWuophtT5k575qvQMLWVoEeiWJ4lWskHn\nb8Hy+uZh96ndqL5Y7bufRpVBg5rtP9+eeuMPG336Y71uxka7W4uVTQhw6pR/rO7ycqCyEgh5IBeX\nErx9fVO3ArR0PY1d1fpdl41SjxjVP/x+qWuqM2Qrr8X2mPZ6vuWNVLJjGow4s5Dqe1q1k9mmkGL1\nVCpTSs1j5vmDlndCi8rFcoHOF44lB0raZQQXDhDgzXdZfbFa04stNbhaOpg/EdzhbhyadUhxssi9\nREbruxNf7omf/vPxu7o5H+m71qPcm1fbLxt8ZiYwcCBw1zr/vuYOpDi9rdDRw2iUbP5p+odGYPDH\nJDEq0TeXMhIyZD3/hAxYMgDV9dVwhjrhgANnLp0BAOT3z1e0kVYzL4yKCSIllGn6jEZAKflMCA/Q\nzdCFi9VTqf/U9osab1EjsdyxSAt8ZxOxjOBidtH8rDrC03P+z2KdXVJR4jPin7Fhhs/KQM6mWmpg\nOfvRUEcohl41FLO2zGpXntAmVe7l0VIHACAEqK5unyXnp/FNQIT3mvAwgtmzvcI7MRFwOLzPXH62\nApF7I1E8wN/BZc7WOahrqoMzxIn6lno/m3WzVllKNv80du80ttN856r+8f0xMmUkYsNj/XZbNHbX\n1fXVvusdcPh+TyD+0knZVCvZKmtxVRcbIz2JrpX63hXu8rPYEcMI23glxOqp1H9q+4XWN8UOBCSW\nCyCdEVxsgKQcaIpK/DOdi3V20+Um33P4L6EcUgPLd9IpqypD/On25Qkni1ZnDf599/69CPd3XeMn\nvAnxCuvT1xehZUgFut8YiZvChuLTY2XISszCjukr4ApXbhe/XzlVBOD/MuhxOJGDxgtPzTOk7kuI\nTEAXRxfUt9SjrKoMBRkFqKqtUi1sOKEc6YzEsMRh2HlsJ7ISsySdXoSxb7jtvdKKUMnZS+w+sTGS\nEspyfWbkx5srxx3uxre//lbVDkEPSv2ntl+MmKeWoVrrrhKpIrQe+MllvhE7jON+Jxa0n0PNIYma\nuN9i9ZWirY2QkycJ2bKFkIULCen5mPc+R1E2GZDlIffdR8iLLxKyeTMhJ054rydEnSOGXF24oP2x\nL8SSvFV5ug/naA7k+HNA63wQu09YNr+P3C+6/caYxhGHi9rpetFFEl/2HqbS1NesKIDC6JNiSUvk\nkKs7bZ3Uji9tGVYm+6CNemnEPNWCFvFs65yiYkh5Ekp1tqfB45fMgWYS05qacc++atFVouZbUhYV\njY2E3L3ca2GS/uRYknO7hyQkENK9OyE330zIo48S8te3POTWNwvIKY/8R4g2y5JY3/GRS02mZRIH\nMn+msGwx4c21adr6abLmd4WbCknos6G+54U9F6bKI1DrB1YOMfNQo8waaeukZ3zlyrBy3phZlhEf\nJi2yM2AqFz7C6GNih3FCZyMuTK0wbK2YuqZXXC9ZlYFwqyWnPxT+jf/sbYe2YeCSgdj/8H7fNphT\nY0xYMhtDfvB6VP74I+D4VQUaepQBTiAlrwjfvrUGSUleXfd/SsJvQRc6VxgETAph3flb3whnhF8f\nSN1Hu13WE7JUL1JxdvhbcP5ZjlKAKH4Y5qbWJsXgW7RekkLVAG3fcvfxvYJX5K8wRHWREJmAhMgE\nuMLkn6VnfGmDk5k9b8wsyyw1pRKWW7mIQeNKLRYWl8YlGlA2wTLC/JHPNS0F6PXlGpSl5qElbTNi\n6rJxP9mK64Z4PSozMoC73/feFxYahrDQMHTt0hXfFH4jGhVS7EVXahONkOH3aY/IHhiVOkrRRI42\nvGsg3anVlK1kfsf93QEHCIhiyFvaOSmGWusWsXbq1U/T1kFtdiEaikqKsO/MPlSeq8Su/6KPkEr7\nbKmMR3LRSrWi1uRWrH4dwsqFQ8wCALgSdU0I9zWNDYtFXVOd76tKE5FO6yGJFD/9dMXCJOb7YsR0\nnYELri+A6NNwN2RjctxSXP974NUBxZj3b/FyuTp9dPAj1DXXAc3SSTjEvvZKbZI7POaewY/6dvrS\naevoK/YAABn3SURBVDhDnYoTTy68K2dVRLPTMutAjL/bK1hbIBpjWxjKVmh+x7+GSzKxaMwiyYh4\nwpWe1pDQaleMYvNW78qQtg5y74weQwBuRzt762xDV7VKh8ZGr6jVRpE1rHxNyh0VSBUhPMxTcqXm\n9JHChMZCPaVRhyqFmwrJTW/lkNH/O5aMfnkaSXnK60EZn+Ihbrc3iuCsWd6ogt98Q8jJc9oOSzgd\neOSfIiUP55T0mmJtljs85vdd4qJEVXpcOXd1ofcgd2DHf65ZekuxyJViZdCUL5YEWw65cx01KN1H\nM7etjhxoZB3MTP1nhien2fXTIp4tE+ha3W3VCmg1AoP/7ANVHvKvfxGyaBEhU6cSEvnQled0fepK\nTI3xbxf4LEyM4IjnCElZnNJOmPPrJvyICRFrs/DF5OLG3PrOrb7wBfxn83+n9dCPG1PMA4n6U5To\nOBhhMSM2J8Ti/4hZNtGUz2+H3DyimZtGWm2IjTOtpYZR6LFuUcLMuis920rrFdrytQh0y3ToWt1t\n1eoVlXRXzc3AfcVF2PdTBQ43lKPJ4XVuclYUYPTJNT5Pyv/XmIcvzmxuZ3tK411ohFpBrt1CzzUx\nj1u554ml0jLCO5HvPcg5JxkRDZJGR80Pr5sUnYSuoV3bnQcMWDIApy6cQmNrI74u/BpDrxoq2Q4a\n72SaPjMyE7zY3DY607wSVpcXDGiVB7bWoauxJJG7Twm+7qq5zoWtn/rHMKmoADDzPxYm/7EoGRqf\njdI5S+GOuPKcuxvFM5XQpCbj68P4Vi9qoM2AEx8RL+pxKxT65T95YwAMSxyG7pHd2zlHqPFwFaJ0\n4ETrHavUF1waPTGvSxqdZXV9tfe8AsC4VeNkk4bzvZP1WPJIWdxoecHF2mi1NVEgrZc6KlZavFiy\nQi/cVKj59JpmRdfSAvzwQ/sAVI2N7WOYZGQA96zXniyB5vRaaPlCk1BW+Hvud2Lt5teBv3uQSp7B\nX5FP7D8RK/JXtHu21njWwrKkrlUSYnJ/r22s9Xnocm1QG8McABIWJaDmUg0incYkDaeZm1zi66SY\nJF9cf2FCcWHceBr4Abx+PPcjUmJTTEsGIXZIHOhkEHox+3Cej9Ygc7YNzpWzPMewbdqZM+1jmBw4\nAKSltRfeKSl8u+4r6DGpE3tBxcwgpbbsUsJPa1AvQFzw0wh9OWgnYVHJlczstCofsQ9c+U/lvp2G\nmoBKaqiqrcKNy27EZ7/6TLUwF/pBqBGewrbzk1fUt9T7fq/mvaDJRm8UwahmsbJNWuWNbVUu/G1a\nhDMCuStyFVO3/dfGIuw5XoHmS5HIOVOMinIX9uzxrro5gf2znwEPPwwMGgRERipUgofYtp/2i03j\nqCS3ZaeJFyHWR3L1F5uM3PY8whmBynOVSIxKxLqCdaq39xHOCOS/my9ZF35mdr7KR4hUu/nbUeHf\nlVaGaldZaa40STWLEvx6Hr9w3Fe+WrVhhDMCJy+cRGJUIvrH90dZVZkm9YXW+CJaVqbBqGaxsk1a\n1IxFJUXaCtN/PisPAL8TXOFJfeGmQhLzpzjf79IeKyBZWYQ4fnXlukHzCkhJCSFVVcRQCxM+WhJe\nxL8U3y6kgJIVAE28CL2mffw6yLn0i12v1hWb1mpFqt3c/VlvZLUzWxWbK1IxWsx2E+fqGbsgVrWV\njtTY6nHX1xJfpHBTIYlbEKe6z4ywALEyRgsNNCFBAknO8hz7uv5zX6iWFqC10ftlTGzNxrm3l2JD\ncj5akrxR78La3PhDv6UYWQA89UMkth7mcpEuBT9yoJZVhpLueu+ZvQCkv9hiq0V+3kNutcZfyfX7\nS792+lGprzX/92pW62Lw65AYlSjbLuH1wlVnpacSABAXFodFYxa1u5fWgUIYooG7Vo0buPBA2spV\nFldPOQcjKcTGNj4yHjWXahAbFqupPjS7NCFaw9lqWWGKlR0IV3gpaHbagYTv9KeGEIPrIcqMGcDw\n4UBcHHBqSTFSzhfgV86tmPVrF0aNuBJi88Dvv8Xvily47jpgzb3FKMgoENWXcpNj88HN1FsTqXu4\n39dcqpGNicK/n/Ni415GMWuRaGc0ahpqVNWRo3jSlbZX1Vapbitf0O36r12S/Sh2vfAlT4vz6prP\nN53H7K2z293LF9ScrjB3RS7yVuWhtrHWd51U/3PCQqxu/H5whbvafejqmupUq5LUwG8L4BWaaa40\nyfrSwLUpxBGCncd2eg/n38gS7TOjkQpnqwap8aUt205qGzPqpLV/hHCGEaoxYbfgBwCydCkhX35J\nSH19+79r2c5pcU7Rm4xWbV5Ro/JqytVPahurtk/lrlcbAlZKDWKEJ56RaikapMowQn3A92jlkoSb\nrToyQnWitd8D7bgjhhl1MnJeahHPHS58LiHaBoJGd017P82gGTVZ5J6jdvJoEURK7aAJMSB8jhEC\n0QpXbakyjHhpb33b+8HvtrAbcb3okvRstRuBdpG3O0b2T6cR6IHGrEmtVtCprYcZq1otcUyMqIcV\nKz6lg1wjdhv8Q+uJqycaUW1CiPJc0vpRteNK204Y2T9aZKctwudyWGnsrwc1dqVq2iS0LVZyOFEb\nPtUIW24jsEs9aFDjBasFYV8YFcZVyc66I9qWdxT5YBS2dSyiLYI2fomWwTTSMkYNtPHDgSsvt5TD\nCU19ei7u6UvYMLH/RL9EvoGMUc7HiHpY9XKbIfjk7OuNKI/G2SsQH1WrYrUHC1oEum4rl1/96le4\n6qqrMGTIEOp7pE6CaeKXSFl7KJ0uq7WMKSopwpq9a1RbmAifwY+hkhSTJPs8zgJiZOpIANJOOJsP\nbka/v/QTbatcUmw5ixIrMaIeWiydtGCGJYSYxZSRsVlonL2EFkQ06LXg0DtmdrSUsRu6BfrMmTOx\nZcsW2WuEk0BqYOUmmdJgKk0WYYAnpQmp1WZX+Az+iyVm5siHE3RrC9aK9gONSeS1SdcC8H5Alucv\nV11nPkaZYJmBVS+3FsGnhFzd1ZRHszBakb9C9HoAqj+qgRbIZoxF0KFbc08IOXz4MBk8eLDo34Ar\ncaV7/09v1YmNOdRaW4jdH78wnvowTk1WeKVncHXS651GYxJp5KGM1tjyVhyYWXU4Z0a79NZdLJkH\nf3ykns8fT7HkI1LlqM1hIIWWdtvNw9RKtIhnywR69tJsvxP9lMUpfgOkd+D4CRy0Cn0+RggMsWeo\nzYZjVt1oUNNfVrrh02KEMFBql1QZZgoiYTIPWgHLjWf0n6KpxkrY9kBYuNhxXlmFFoFuiadoxvcZ\nuKXqFvz0wU/Af9z5v/vtd37bJr3buaraKtQ01Pgyt4uhZstmhJ5X7Bl8l97qi9Wa2mqVLlxNf9lR\nv2mEnl2rqs9MHT9Xp6zELOT3z6dWQSid0UiVI8xhYKW6w47zyixKS0sxb9483z9NGPElUVqhc9B4\nJGoJeMW/3+4OD54G9Xk8CbH/1tOO9slGe6eqKcPM+ai3r7U405mBmensggEt4tkQs8UjR47gzjvv\nxHfffdfub7SmN5wpGz/gVWJUIvY/vN8vKJOUuRKNKZwwi49SKjmz4NeVxu6Ys7jhDmlpTbY6m92u\nECvMNKXKMLLsYB3HzmaGqJaA2KHfd999KCsrw9mzZ9GjRw/Mnz8fM2fOpKqU2EQVy/bDJQTQazNr\nZVIALXWiyUvpDnfj0KxDmhIrqGmjlUJEbVlm1c2ugjNYBV9HcjALBAFJcLF69WrFa7jwr9yqmMv6\nsu/MPp9ZHxe+snhSsV+2H7msPBy0LyLf7I/A21FG6OZoype6Rk1eSrVR8irPeUPfOkOcOHr+KPJW\n5ckmFeFjZbhTtWWVHChB9UWv89TMDTOxfvL6gNTDKoJVj0wbeplBjyWHotzh0D8r/omyqjIcv3Ac\nO4/t9Anz+Mh4nLxw0mcfu//h/X6HcUqHMbQHUMWTihEfEY/6lnqcbTgrGi5XaNtLY4tNU74W23vh\nNYdmHVKVOo27tqWtBV+e+NKvbFq7fX5MdrPs0dUKrKbWK85T3Ic5EPWwikDaX5vpi2AXR7dgwhLX\nf8zzT5UVGxaLuqY6X5LmM5fO+PTmcltKqVWlmq2b0rXC7e3pi6cVwxHsPbMXNZdqqBJHW7m95Mrk\n+js+Mh79u/dHbFgsWtpaZPOM8nXANGcYelCrbx7zzhhsO7wNWYlZ2DF9h2F9KcwXG8hzFrsQrOqe\njoAWlYsl0RaFqbKOeI74nVzTWgRI2aSqOQk3KhyssD5Cu3q15ZqBsL+Fkf1o62M3CyKuXVxceiMt\nf4TON53VBprDiLHXa6Fldwsvs9Aini1RuXDbKm6LleZKgyvchfx385G3Kg+vj3udaksptSVWs3WT\nu7aopKhdFhzacARCu3q15Rq9rS0qKUL+u/mob65HXHicX4alaGc0LrZcpF4RF08qRm9Xb4SFhvky\nExlVfy33cn2pJZuTUpn8Mc3qmeX7f5rky3YLk6BFfSgkITIBCZEJcIUFLu6OVXF7ggITPix+SBWh\nxQPP7FWuWq80o+pjhDccTQJlteEPaOuop/567tW6epQrkz+masbXjh6NtNmk1DxDC3pX+XbbIVqF\nFvGs28pFK7QeeIB/smWt4UTVWMHQHoopJc/lyuWsemLDYkXLNyrCnlICZVe4CyOSR/h0+WrKkquj\nnvrruVerlYRcmVqSLys900jUmFYK6zTl/Smq62hEu/RaszBrGBWY8GHxQ6oIWl22XNwJ2qwsUkGM\n1NZJLcKYG1LlqylXqs1igcDEnkkT80YMuTqK/Y1W7yn3XLN0p2bs9Kw6I1GzYhbWSW0dCzcVktFv\njSaJixI1B6hjaEeLeLY0wYVwdSHnJcnp/DyNHklrDDVZWQBIBvvnUFr9qHU8EVqZGGHhItVmWksR\nq6wWjCinozhGWYVY4gqjMhyJodT/wdjHdiIgjkVq4KsFBi4ZiD7d+vjMFYWOHNzWV05QKW0H+YGw\nAOlg/2L1Kyopgivc5Tdh1TqecFvFRWMW+WWl0fMiKB0Ma73fCPjtcoY6dZejp652dRLSg1jiCjPb\nqUYtGix93OExeJfQDn4RnFqAHz5WeNihZputtIVUGwhLqLYQbm+NOpwR2zYboaKgwUzVAL9daswi\npdBT12A8SBNrUyCDgAVjH9sJLeLZUoEuFLBCe3RCjLcW8DTQJ5UQTmBavbRaxF4EI9sdKLtdO73g\nwRilT6xNgWxnMPaxndAi0C1PEi1UoQjVD1Pen2K4R6VWXaxZEfOEiYGBK/p2vjenEYmprfTuE+sv\npmdlMLQRkGiLigU4HCjcVCj5UguFz9I7lxpuomSHqG5KQlYsfLBWYWyH9nIw13EGQxtaBLolnqJy\nnl5as6Ko8XqzQ3JZpQMmrt1KiaRpsEN7OawOeGVHj00GwyosWaGPXTkWmw9uRrQzGiNTR2JtwVqf\noNGq1uCv/Hq7eqNXXC9bb+tp2yl3XUdUX1iRZIIP2xEwggXbqlw8DR70+0s/QxNK8NUKYaFhutUU\nViEllGmENRNWythJ3cRg6MG2KhfO5RwwbuvNVysI1RR23nbrSSps13jdgYY/3rSB3oIZO89/hskY\nY2AjDVeEmSZOwmerNQG00sxPT1JhZiYmjh0DYwUS1h/BgRbxbJmnKK0noxHPVruSNdPjTahKkQo0\npBSAiP8chj/C8e6IZw1GwnZynRfL7dCNRuzlVXsQZ6be1Si9N9OfSyMc747UV2Z8fKw+iGaYg+1j\nuZiB2Opa7W7AzPCcRq2WjF51BdMqVu8OLZCYsTs0czfc2bH7e2PJoaiZ0L68cgdFZiarNcom3Gjb\n8mDOAmMnO3wlOtLHh2H/96bDq1y47WWEM0I2oW9H2oZbgRXmfbSrGbuvesyEqUc6FlaaxQbEbHHL\nli0YMGAA+vXrh4ULF+p9nGpo80uKHZzZzbTLyjpZsYqlXc3YfdVjJmbuDhnGY/fdny4demtrKx5+\n+GFs27YNycnJGDFiBCZMmICBAwcaVT9qlLauQj25HWM5K8VjN3ICWaFnpVUnMLUDo6Ng9/MJXSv0\nr776Cn379kV6ejqcTicmT56MjRs3GlU3VSh9OYUrITsKEWGdOvrKlXY1Y/dVD4PRUdClQ1+3bh0+\n+ugj/O1vfwMArFy5El9++SVee+21KwUoRFsMFHbUXfLrNGfrnHbpxuxSTz10Zn05g6EGy80WHQ4H\n1XX/eutfqKqtAgDk/5iP0nmlVPeZ+fLbcevEr5NYurFgwI6qLgbDDpSWlqK0tFTXM3QJ9OTkZBw7\ndsz387Fjx5CSktLuuoyCDFQdrEJ2UjY2TN1A/fzO/PLz1S8r8lcEtjIGYkdVV7DDdkUdg9zcXOTm\n5vp+fvbZZ1U/Q5cOPTs7Gz/++COOHDmC5uZmvPfee5gwYUK767TqSDvzyy/WZ3a0zFEL05dbT0c/\ni2HQo9sOffPmzXj00UfR2tqKBx54AE888YR/ATrs0K3Qc3ek1YtZtvQdqQ+MpLO0m4UU7pjYNh66\n2iJoXjSjXsaO5HBk1ovZkfrASDpLu+1oAMBQxrbx0NVCs0U0ahuppNaxk5rDLHVFZ1VtdZZ2M+el\nzoMtBTrNi2bUy6gkJO2kfzTrxeyseu3O2m5G8GJLlQvNFtGqbWRH0T92Fn0wg9FZCBodup3oKPrH\nzqIPZjA6C0GjQ7cTrnAXXOEu5L+bbws9uhSdRR/MYDCkYSt0CjrC6rej7CQYDC10RpVih85YZOcB\n6wirXzuGMhBi5zFm2JvO7DWuBtuoXOxkTSKE1hrCTiaOdsTOY8ywNx1hUWUHbCPQ7TxgtOaCTGDJ\nY+cxZtgbZmJKh2106MGgA+4oJo6BIhjGmMGwCma2aCFi+mAmsBgMhlEwgW4hHcHyhcFgdFyYHbqF\nMH0wg8GwG2yFrhGmXmEwGGbCVC6MoIbZsTM6E0zlwghqmFkogyEPE+iMDgM7t2Aw5GEqF0aHgZ1b\nMDoTTIfOYDAYQQLToTMYDEYnhgl0BoPBCBKYQGcwGIwgQbNAX7t2LQYNGoTQ0FDs3r3byDoxGAwG\nQwOaBfqQIUOwfv16/OxnPzOyPj6CMbZ4aWmp6nuCsR8AbX1hF4wek47cF0bD+kIfmgX6gAEDcM01\n1xhZFz+C0YlEy2QNxn4AOvaLa/SYdOS+MBrWF/qwrQ6dOZF4Yf1gP9iYMOyKrEAfM2YMhgwZ0u5f\nSUmJ6RVjGUq8sH6wH2xMGLaF6CQ3N5f8+9//lvx7nz59CAD2j/1j/9g/9k/Fvz59+qiWx11gAETG\nm+ngwYNGFMFgMBgMBTTr0NevX4/U1FTs2rUL48aNw9ixY42sF4PBYDBUYnosFwaDwWBYg2FWLlu2\nbMGAAQPQr18/LFy4UPSa3/3ud+jXrx8yMzPx7bffGlW07VDqi1WrViEzMxNDhw7F6NGjUV5eHoBa\nmg/NnACAr7/+Gl26dME//vEPC2tnLTR9UVpaimHDhmHw4MHIzc21toIWotQXNTU1uOOOO5CVlYXB\ngwdjxYoV1lfSIn71q1/hqquuwpAhQySvUSU3NZ+G8rh8+TLp06cPOXz4MGlubiaZmZlk3759ftd8\n+OGHZOzYsYQQQnbt2kWuv/56I4q2HTR98fnnn5Pa2lpCCCGbN28Oyr6g6Qfuup///Odk3LhxZN26\ndQGoqfnQ9IXH4yEZGRnk2LFjhBBCzpw5E4iqmg5NX8ydO5c8/vjjhBBvP3Tr1o20tLQEorqm88kn\nn5Ddu3eTwYMHi/5drdw0ZIX+1VdfoW/fvkhPT4fT6cTkyZOxceNGv2s2bdqE6dOnAwCuv/561NbW\n4qeffjKieFtB0xc33HAD4uLiAHj74vjx44GoqqnQ9AMAvPbaa7jnnnuQkJAQgFpaA01fFBcXY9Kk\nSUhJSQEAxMfHB6KqpkPTFz179kRdXR0AoK6uDt27d0eXLobYb9iOm266CW63W/LvauWmIQL9xIkT\nSE1N9f2ckpKCEydOKF4TjIKMpi/4vPXWW8jLy7OiapZCOyc2btyI3/zmNwC88Z+DEZq++PHHH3Hu\n3Dn8/Oc/R3Z2Nv7+979bXU1LoOmLwsJC7N27F0lJScjMzMSrr75qdTVtg1q5achnj/ZFJILz12B8\ngdW0aceOHVi2bBl27txpYo0CA00/PProo3jxxRd9gfyF8yNYoOmLlpYW7N69G9u3b8elS5dwww03\nYOTIkejXr58FNbQOmr544YUXkJWVhdLSUlRWVmLMmDHYs2cPYmJiLKih/VAjNw0R6MnJyTh27Jjv\n52PHjvm2jlLXHD9+HMnJyUYUbyto+gIAysvLUVhYiC1btshuuToqNP3w73//G5MnTwbgPQjbvHkz\nnE4nJkyYYGldzYamL1JTUxEfH4+IiAhERETgZz/7Gfbs2RN0Ap2mLz7//HM8+eSTAIA+ffqgd+/e\nOHDgALKzsy2tqx1QLTeNUOy3tLSQq6++mhw+fJg0NTUpHop+8cUXQXkQSAhdX1RVVZE+ffqQL774\nIkC1NB+afuAzY8YM8v7771tYQ+ug6Yv9+/eTW265hVy+fJlcvHiRDB48mOzduzdANTYPmr74/e9/\nT+bNm0cIIaS6upokJyeTs2fPBqK6lnD48GGqQ1EauWnICr1Lly5YsmQJbr/9drS2tuKBBx7AwIED\n8eabbwIAfv3rXyMvLw///Oc/0bdvX0RFRWH58uVGFG07aPpi/vz58Hg8Pt2x0+nEV199FchqGw5N\nP3QWaPpiwIABuOOOOzB06FCEhISgsLAQGRkZAa658dD0xX//939j5syZyMzMRFtbG1566SV069Yt\nwDU3h/vuuw9lZWWoqalBamoqnn32WbS0tADQJjeZYxGDwWAECbYNn8tgMBgMdTCBzmAwGEECE+gM\nBoMRJDCBzmAwGEECE+gMBoMRJDCBzmAwGEECE+gMBoMRJDCBzmAwGEHC/wenRQfJsS9xGQAAAABJ\nRU5ErkJggg==\n", + "text": [ + "" + ] + } + ], + "prompt_number": 4 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Divide the set into a training set and a testing set:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# make data unordered\n", + "X, y = shuffle(X, y, random_state = 1)\n", + "# pick training set\n", + "train = lambda: None\n", + "train.X = X[:TRAIN_SET_SIZE]\n", + "train.y = y[:TRAIN_SET_SIZE]\n", + "# visualize training set\n", + "_ = plot.plot(\n", + " train.X,\n", + " train.y,\n", + " \"g.\",\n", + " label = \"Training set\"\n", + ")\n", + "# pick testing set\n", + "test = lambda: None\n", + "test.X = X[TRAIN_SET_SIZE:]\n", + "test.y = y[TRAIN_SET_SIZE:]\n", + "# visualize testing set\n", + "_ = plot.plot(\n", + " test.X,\n", + " test.y,\n", + " \"yo\",\n", + " label = \"Testing set\"\n", + ")\n", + "# display legend\n", + "_ = plot.legend(\n", + " bbox_to_anchor = (1.05, 1),\n", + " loc = 2,\n", + " borderaxespad = 0\n", + ")" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nAABJRU5ErkJggg==\n", + "text": [ + "" + ] + } + ], + "prompt_number": 5 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Perform linear regression on the training set and calculate RSS/n for both sets:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# perform linear regression\n", + "betas, residuals, _, _, _ = numpy.polyfit(\n", + " train.X,\n", + " train.y,\n", + " deg = 1,\n", + " full = True\n", + ")\n", + "betas = betas[::-1]\n", + "# proposed model as function\n", + "f = lambda x: betas[0] + betas[1] * x\n", + "# human-readable result\n", + "print(\"Regression: y = {0} + {1}*x\".format(betas[0], betas[1]))\n", + "# residual sum of squares for training set is given by polyfit\n", + "print(\"RSS/n for training set: {0}\".format(residuals[0] / TRAIN_SET_SIZE))\n", + "# calculate residual sum of squares for testing set\n", + "testing_RSS = sum([\n", + " (f(tx) - ty)**2\n", + " for tx, ty in\n", + " numpy.vstack((test.X, test.y)).T.tolist()\n", + "])\n", + "print(\"RSS/n for testing set: {0}\".format(testing_RSS / TEST_SET_SIZE))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Regression: y = 1.2950490820655918 + 1.8603977010955968*x\n", + "RSS/n for training set: 0.9862484964080724\n", + "RSS/n for testing set: 0.9340084882277742\n" + ] + } + ], + "prompt_number": 6 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Calculate R squared and p-value for the entire dataset:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "_, _, r_value, p_value, std_err = linregress(X, y)\n", + "print(\"R^2 = {0}\\np-value = {1}\".format(r_value**2, p_value))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "R^2 = 0.2301574030266261\n", + "p-value = 1.082380040463499e-58\n" + ] + } + ], + "prompt_number": 7 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Visualize training and testing datasets and original and proposed models:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# draw original model\n", + "_ = plot.plot(\n", + " train.X,\n", + " model_betas[0] + model_betas[1] * train.X,\n", + " color = \"blue\",\n", + " label = \"Original model\"\n", + ")\n", + "# draw training set\n", + "_ = plot.plot(\n", + " train.X,\n", + " train.y,\n", + " \"g.\",\n", + " label = \"Training set\"\n", + ")\n", + "# draw testing set\n", + "_ = plot.plot(\n", + " test.X,\n", + " test.y,\n", + " \"y.\",\n", + " label = \"Testing set\"\n", + ")\n", + "# draw model proposed by polyfit\n", + "_ = plot.plot(\n", + " train.X,\n", + " f(train.X),\n", + " color = \"green\",\n", + " label = \"Proposed model\"\n", + ")\n", + "# display legend\n", + "_ = plot.legend(\n", + " bbox_to_anchor = (1.05, 1),\n", + " loc = 2,\n", + " borderaxespad = 0\n", + ")" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\ncLawJ/KgVH260sukGjYnWROzEBUYBaBtHTDPn/zNZJsTvFS5ndUOhd4d136goLwAewv2ovR6KWKD\nY6328224ivtwAAAgAElEQVS9J1OZiRUQDH4Gu9uvo32AOlaShmuFHxMTg/Pnz7N/19TUoKyszGrC\nvHDhgtX/md/49164cAHe3t7o3LkzvL298eabb+LEiRP4+eefsXnzZqxatQpxcXHw9fVFWVkZzGYz\nzGYzKioq2P396OjoNukphYj4JejSpQsKCgqsrrt48SJiY2MRHR2NwsJCq+u518bFxeH1119n82w2\nm1FdXY2HH35Ycf4YqJBAkSQpKQuRkRlYcTkJo9eks5NWexjg1M6jKwUjNQQSvZ8eec/kCdaBkue7\nQyAUeneM5ib963QrDcLxp45blc1WfpnfDX4GHP7TYbvbhqPtiy9gUWNkcR555BGsWLECR48eRX19\nPV577TUMHTrUasW9ePFilJeX4+LFi/j444/ZifGRRx7BBx98gPPnz6O6uhqvvfYaJk2aBK1Wiz17\n9uD48eNobm5GcHAwdDodvLy8EBUVhTFjxuDFF19EVVUVWlpakJ+fjx9//BEA8NBDD+Hjjz9GYWEh\nzGYz3n33XdXKmpGRgS1btmDXrl1obGzEkiVL4Ofnh+HDh2Po0KHw9vbGxx9/jMbGRvz73//GwYMH\n2XufeOIJfP755zhw4AAIIaipqcGWLVtYLYVdiG5EqIQLkvA42sN+vVI8wVDS3fXqSvsDe/f65R7R\nU/J8tcqtxvFBbjvUzteS0EWh5K5VdxFzrZl9/qHcu8iU9RNE8ytUHjltS277kyon/xncv0cstzae\ndXTs9PSxV2x/nBBCtFotyc/Pt/ru888/Jz169CBhYWFk/PjxpLCwkP1No9GQpUuXku7du5Pw8HDy\n0ksvsfYBLS0tZOHChaRr164kMjKSTJ06lZSXlxNCCPnqq69Inz59SGBgIOncuTOZOXMme19FRQX5\n85//TGJjY0loaChJSUkha9euJYQQ0tTURF544QUSHh5OunfvTv7+97/bNFzklvXRRx9lDRUJIeQf\n//gHGT16NPv3xo0bSVJSEgkNDSVGo5GcPHmS/e3QoUMkJSWFBAcHk4cffphMmjTJyg5h27ZtZPDg\nwUSv15Po6Gjy0EMPkerqask6l2orN3UUSGfREcPzKgmr7axIfB2xXsWw170w10V1ZGSGqGOp8rpy\n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\nCQRBEARBqPL/dr0sOOFVUesAAAAASUVORK5CYII=\n", + "text": [ + "" + ] + } + ], + "prompt_number": 8 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Determine which points are \"good\" (closer to the model than std_err), and which points are \"bad\" (the rest):" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# sort points into good and bad\n", + "good, bad = [], []\n", + "for tx, ty in numpy.vstack((X, y)).T.tolist():\n", + " if (f(tx) - ty)**2 < std_err:\n", + " good.append([tx, ty])\n", + " else:\n", + " bad.append([tx, ty])\n", + "good = numpy.array(good)\n", + "bad = numpy.array(bad)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 9 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Visualize. Good are green, bad are red:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# draw proposed model\n", + "_ = plot.plot(\n", + " X,\n", + " f(X),\n", + " color = \"green\",\n", + " label = \"Proposed model\"\n", + ")\n", + "# draw good points\n", + "_ = plot.plot(\n", + " good[:, 0],\n", + " good[:, 1],\n", + " \"g.\",\n", + " label = \"Good points\"\n", + ")\n", + "# draw bad points\n", + "_ = plot.plot(\n", + " bad[:, 0],\n", + " bad[:, 1],\n", + " \"r.\",\n", + " label = \"Bad points\"\n", + ")\n", + "# display legend\n", + "_ = plot.legend(\n", + " bbox_to_anchor = (1.05, 1),\n", + " loc = 2,\n", + " borderaxespad = 0\n", + ")" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "iVBORw0KGgoAAAANSUhEUgAAAgkAAAEACAYAAAA5heWtAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztvXl8VdXV//+5kDCEkNxAAiGEJMiMColEEVEJClaiNqlI\nS6tM+kpqLY591G/1V0Etzj6t2hZFEZzixOOECC0gICIWfbBinbA8JMzzDRAEMq3fH5dzc+7JGfYZ\n77k36/163Rfk3nP2Xmefc/Zee+211woQEYFhGIZhGEZBu1gLwDAMwzCMP2ElgWEYhmEYVVhJYBiG\nYRhGFVYSGIZhGIZRhZUEhmEYhmFUYSWBYRiGYRhVbCsJtbW1uOqqqzBkyBAMHToUn376qRNyMQzD\nMAwTY5LsFnDzzTejtLQUixYtQmNjI44dO+aEXAzDMAzDxJiAnWBKhw8fRlFREf7v//7PSZkYhmEY\nhvEBtpYbtm7diqysLMyYMQNnnXUWKioq8OOPPzolG8MwDMMwMcSWktDY2IiNGzfihhtuwMaNG9Gl\nSxc89NBDTsnGMAzDMEwsIRvs3r2bCgoKIn+vXbuWLrvssqhj+vXrRwD4wx/+8Ic/Jj79+vWz0z1T\nRkZGzK+BP/HxycjI0HyObFkSsrOz0adPH2zevBkAsGLFCpx++ulRx2zZsgVExB8izJo1K+Yy+OXD\nbcFtwW2h/9myZYud7hmhUCjm18Cf+PiEQiHN58j27oannnoKV199Nerr69GvXz8sWLDAbpEMwzAM\nw/gA20rC8OHD8dlnnzkhC8MwDMMwPoIjLnpISUlJrEXwDdwWLXBbtJAwbVFZCZSUAKWlQG1trKVh\nGMvYipMgVEEgAJerYBiG8RclJcCaNeH/T5oEvPGG6SLs9p3c93pHdXU1TjvtNDQ2NqJdO2/n3tOn\nT0efPn1w//33Gx5bUFCA+fPn4+KLL476Xu9ZYUsCwzCM06SkhP8tLgbmzYutLD6loKAAKSkp6Nq1\nK7KzszFjxgyO2GuBQCCAQCDg+LESrCQwDMM4TVVV2IKwfDkQDMZaGl8SCATw/vvv4+jRo9i4cSM+\n//xz/PGPf2x1XGNjYwykiy/ctBixksAwDOM0wWB4iYEVBCFycnJw6aWX4uuvvwYAtGvXDn/7298w\nYMAADBo0CADw7LPPYsCAAejevTvKysqwe/fuyPnt2rXDU089hX79+iErKwt33HFHZOAkIvzxj39E\nQUEBevbsiWnTpuHIkSMAgBMnTuCaa65BZmYmMjIycM4552Dfvn0AwmkHrrvuOuTk5CA3Nxd/+MMf\n0NzcDABobm7Gf/3XfyErKwv9+vXDkiVLdK+voKAAjz32GIYNG4auXbviuuuuw969ezFhwgSkp6dj\n/PjxqJX5rrz33ns4/fTTkZGRgbFjx+K7776L/PbFF1/grLPOQlpaGiZPnowTJ05E1fX++++jsLAQ\nGRkZGD16NL766itL9yQCuYwHVTAMwyQcdvtOv/e9BQUFtGLFCiIi2rZtG51++ul0zz33EBFRIBCg\nSy65hEKhEJ04cYJWrlxJmZmZ9MUXX9DJkyfpxhtvpAsvvDBSViAQoIsuuohCoRBt27aNBg4cSM89\n9xwREc2fP5/69+9PW7dupbq6OrryyitpypQpRET09NNP0xVXXEHHjx+n5uZm2rhxIx05coSIiMrL\ny+n666+nH3/8kfbt20fnnHMOPfPMM0RENHfuXBo8eDDt2LGDDh06RCUlJdSuXTtqamrSvNZRo0bR\nvn37aOfOndSjRw8qKiqif/3rX3TixAm66KKL6N577yUiou+//566dOlCK1asoMbGRnrkkUeof//+\n1NDQQCdPnqS8vDz685//TI2NjbRo0SJKTk6mP/zhD0REtHHjRurRowdt2LCBmpub6YUXXqCCggKq\nr6+PyLFy5cpW8uk9K6wkMAzD+BAvlATMhiMfK+Tn51NqaioFg0HKz8+n3/72t3TixAkiCg/6q1at\nihx77bXX0p133hn5u66ujpKTk6mmpiZy/N///vfI73/729/o4osvJiKiiy66iObOnRv57fvvv6fk\n5GRqbGyk559/ns477zzatGlTlGx79uyhjh070vHjxyPfVVVV0dixY4mIaOzYsRGFgYjoH//4BwUC\nAV0loaqqKvL3xIkT6YYbboj8/dRTT1F5eTkREd133330i1/8IvJbc3Mz9e7dm1avXk1r1qyhnJyc\nqLLPO++8iJJw/fXXR/4vMWjQIProo48icphVEmzHSWAYhmHiE5oVu90PgUAA7777Li666CLV3/v0\n6RP5/+7du1FcXBz5u0uXLujevTt27tyJvLy8Vsfn5eVh165dkXPz8/OjfmtsbMS+ffswZcoUbN++\nHZMnT0ZtbS2uueYazJkzBzU1NWhoaECvXr0i5zU3N0fq2r17d6v6jOjZs2fk/507d476u1OnTqir\n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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 10 + } + ], + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/grigorev/Reg-3.py b/grigorev/Reg-3.py new file mode 100755 index 0000000..5cbe3af --- /dev/null +++ b/grigorev/Reg-3.py @@ -0,0 +1,84 @@ +#!/usr/bin/python +from __future__ import division +from sklearn.utils import shuffle +from scipy.stats import linregress +import numpy + +def random_model(beta_range, set_size): + # generate random coefficients (betas) + min_beta, max_beta = beta_range + model_betas = numpy.random.random_sample(2) * (max_beta - min_beta) + min_beta + # generate points according to model betas + X = numpy.linspace(0, 1, set_size) + y = model_betas[0] + model_betas[1] * X + # introduce error + for index, _ in enumerate(y): + y[index] += numpy.random.randn() + # + return (model_betas, X, y) + +def split_set(X, y, train_set_fraction): + # make data unordered + X, y = shuffle(X, y, random_state = 1) + # pick training set + train = lambda: None + train_set_size = int(y.shape[0] * train_set_fraction) + train.X = X[:train_set_size] + train.y = y[:train_set_size] + # pick testing set + test = lambda: None + test.X = X[train_set_size:] + test.y = y[train_set_size:] + # + return (train, test) + +def regress(train, test): + # perform linear regression on the training set + betas, residuals, _, _, _ = numpy.polyfit( + train.X, + train.y, + deg = 1, + full = True + ) + # default order of betas from polyfit doesn't really make sense + betas = betas[::-1] + # proposed model as function + f = lambda x: betas[0] + betas[1] * x + # residual sum of squares for training set is given by polyfit + train_RSS = residuals[0] + # calculate residual sum of squares for testing set + test_RSS = sum([ + (f(tx) - ty)**2 + for tx, ty in + numpy.vstack((test.X, test.y)).T.tolist() + ]) + # + return betas, train_RSS, test_RSS + +def sort_by_error_margin(X, y, std_err): + good, bad = [], [] + f = lambda x: betas[0] + betas[1] * x + for tx, ty in numpy.vstack((X, y)).T.tolist(): + if (f(tx) - ty)**2 < std_err: + good.append([tx, ty]) + else: + bad.append([tx, ty]) + return ( + numpy.array(good), + numpy.array(bad) + ) + + +model_betas, X, y = random_model(beta_range = (-5, 5), set_size = 1000) +train, test = split_set(X, y, train_set_fraction = 0.8) +betas, train_RSS, test_RSS = regress(train, test) +_, _, r_value, p_value, std_err = linregress(X, y) +good, bad = sort_by_error_margin(X, y, std_err) + +print("Original model: y = {0} + {1}*x".format(model_betas[0], model_betas[1])) +print("Regression: y = {0} + {1}*x".format(betas[0], betas[1])) +print("RSS/n for training set: {0}".format(train_RSS / train.y.shape[0])) +print("RSS/n for testing set: {0}".format(test_RSS / test.y.shape[0])) +print("R^2 = {0}\np-value = {1}".format(r_value**2, p_value)) +print("Size of good set: {0}".format(good.shape[0])) +print("Size of bad set: {0}".format(bad.shape[0])) From 3d012655e7017c0f69842b376d62b9a40fc09cf5 Mon Sep 17 00:00:00 2001 From: LankyCyril Date: Sun, 4 May 2014 02:29:19 +0400 Subject: [PATCH 29/37] C-1 that is too slow. --- grigorev/C-1.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100755 grigorev/C-1.py diff --git a/grigorev/C-1.py b/grigorev/C-1.py new file mode 100755 index 0000000..6c42ca2 --- /dev/null +++ b/grigorev/C-1.py @@ -0,0 +1,24 @@ +#!/usr/bin/python +from __future__ import division +from io import BytesIO + +vowels = list("aeiouy") + +def anagram_generator(head, letters): + if len(head) < len(letters): + for letter in sorted(set(letters)): # consider unique letters only + if head.count(letter) < letters.count(letter): # not all instances in head + if len(head) > 0 and head[-1] in vowels and letter in vowels: # consecutive vowels + continue + for anagram in anagram_generator(head + [letter], letters): + yield anagram + else: + yield head + +with open("anagrams.in") as infile: + word = infile.readline().strip().lower() + letters = sorted(list(word)) + +with open("anagrams.out", "w") as outfile: + for anagram in anagram_generator([], letters): + outfile.write("".join(anagram) + "\n") From 40e28b1c5d86e9647ffa6a07a6b5b7694a64d5e8 Mon Sep 17 00:00:00 2001 From: LankyCyril Date: Sun, 4 May 2014 02:37:29 +0400 Subject: [PATCH 30/37] Ugly, but accepted by PCMS. --- grigorev/C-1.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/grigorev/C-1.py b/grigorev/C-1.py index 6c42ca2..083ded4 100755 --- a/grigorev/C-1.py +++ b/grigorev/C-1.py @@ -4,21 +4,27 @@ vowels = list("aeiouy") -def anagram_generator(head, letters): +def anagram_generator(head, letters, letterset, lettercount): if len(head) < len(letters): - for letter in sorted(set(letters)): # consider unique letters only - if head.count(letter) < letters.count(letter): # not all instances in head + for letter in letterset: # consider unique letters only + if head.count(letter) < lettercount[letter]: # not all instances in head if len(head) > 0 and head[-1] in vowels and letter in vowels: # consecutive vowels continue - for anagram in anagram_generator(head + [letter], letters): + for anagram in anagram_generator(head + [letter], letters, letterset, lettercount): yield anagram else: yield head with open("anagrams.in") as infile: +# with BytesIO("catt") as infile: word = infile.readline().strip().lower() letters = sorted(list(word)) +lettercount = { + letter: letters.count(letter) + for letter in set(letters) +} + with open("anagrams.out", "w") as outfile: - for anagram in anagram_generator([], letters): + for anagram in anagram_generator([], letters, sorted(set(letters)), lettercount): outfile.write("".join(anagram) + "\n") From e9cb58cb93b0efde4a40d60c7d891faf3fd02cfd Mon Sep 17 00:00:00 2001 From: LankyCyril Date: Sun, 4 May 2014 02:49:00 +0400 Subject: [PATCH 31/37] Fast version de-uglified. --- grigorev/C-1.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/grigorev/C-1.py b/grigorev/C-1.py index 083ded4..7edd954 100755 --- a/grigorev/C-1.py +++ b/grigorev/C-1.py @@ -4,27 +4,33 @@ vowels = list("aeiouy") -def anagram_generator(head, letters, letterset, lettercount): - if len(head) < len(letters): - for letter in letterset: # consider unique letters only - if head.count(letter) < lettercount[letter]: # not all instances in head +def anagram_generator(head, target_length, unique_letters, letter_count): + if len(head) < target_length: + for letter in unique_letters: + if head.count(letter) < letter_count[letter]: # not all instances in head if len(head) > 0 and head[-1] in vowels and letter in vowels: # consecutive vowels continue - for anagram in anagram_generator(head + [letter], letters, letterset, lettercount): + for anagram in anagram_generator(head + [letter], target_length, unique_letters, letter_count): yield anagram else: yield head with open("anagrams.in") as infile: -# with BytesIO("catt") as infile: word = infile.readline().strip().lower() letters = sorted(list(word)) -lettercount = { +# calculate frequencies of letters only once (for speed gain) +letter_count = { letter: letters.count(letter) for letter in set(letters) } with open("anagrams.out", "w") as outfile: - for anagram in anagram_generator([], letters, sorted(set(letters)), lettercount): + anagrams = anagram_generator( + head = [], + target_length = len(letters), + unique_letters = sorted(set(letters)), + letter_count = letter_count + ) + for anagram in anagrams: outfile.write("".join(anagram) + "\n") From dce356736ace97f779abb39670c4ef2adae1d6a0 Mon Sep 17 00:00:00 2001 From: LankyCyril Date: Mon, 5 May 2014 01:02:45 +0400 Subject: [PATCH 32/37] Towers. --- grigorev/C-3.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100755 grigorev/C-3.py diff --git a/grigorev/C-3.py b/grigorev/C-3.py new file mode 100755 index 0000000..b6adb0c --- /dev/null +++ b/grigorev/C-3.py @@ -0,0 +1,37 @@ +#!/usr/bin/python +from __future__ import division + +def interpret(lines): + people = {} # {person: [languages, they, speak]} + languages = {} # {language: [people, who, speak, it]} + for person, line in list(enumerate(lines))[1:]: + people[person] = [ + int(x) for x in + line.split()[1:] + ] + for language in people[person]: + languages[language] = languages.get(language, []) + [person] # append or create + return people, languages + +def trace(start, visited): + visited[start] = True + for language in people[start]: + for neighbor in languages[language]: + if not visited[neighbor]: + trace(neighbor, visited) + +with open("tower.in") as infile: + people, languages = interpret(infile.readlines()) + +visited = { + person: False + for person in people.keys() +} + +trace( + start = 1, + visited = visited +) + +with open("tower.out", "w") as outfile: + outfile.write(str(visited.values().count(True))) From 2a9b1d49e83a70a7c9dc085055b2c9e4b6f9d9a0 Mon Sep 17 00:00:00 2001 From: LankyCyril Date: Mon, 5 May 2014 19:14:17 +0400 Subject: [PATCH 33/37] Harddrive. --- grigorev/C-4.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100755 grigorev/C-4.py diff --git a/grigorev/C-4.py b/grigorev/C-4.py new file mode 100755 index 0000000..a2bdd46 --- /dev/null +++ b/grigorev/C-4.py @@ -0,0 +1,19 @@ +#!/usr/bin/python +from __future__ import division + +with open("harddrive.in") as infile: + fragments = [ + int(x) for x in + infile.readlines()[1].split() + ] + +spins = -1 +leftside = set() + +for fragment in fragments: + if (fragment - 1) not in leftside: + spins += 1 + leftside.add(fragment) + +with open("harddrive.out", "w") as outfile: + outfile.write(str(spins)) From c1cb2f5bcf9d3485db4f012def7c53d3981d6aaa Mon Sep 17 00:00:00 2001 From: LankyCyril Date: Wed, 7 May 2014 23:23:03 +0400 Subject: [PATCH 34/37] airplane --- grigorev/C-7.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100755 grigorev/C-7.py diff --git a/grigorev/C-7.py b/grigorev/C-7.py new file mode 100755 index 0000000..a4d3694 --- /dev/null +++ b/grigorev/C-7.py @@ -0,0 +1,14 @@ +#!/usr/bin/python +from __future__ import division + +with open("airplane.in") as airplane_in: + M, _, alpha = [int(x) for x in airplane_in.readline().split()] + passenger_mass = sum(int(x) for x in airplane_in.readline().split()) + +try: + result = (M + passenger_mass) * alpha / (1000 - alpha) +except ZeroDivisionError: + result = "Impossible" + +with open("airplane.out", "w") as airplane_out: + airplane_out.write(str(result)) From d03150b290a70acac122cc01af1ded9b391247ab Mon Sep 17 00:00:00 2001 From: LankyCyril Date: Fri, 6 Jun 2014 01:43:29 +0400 Subject: [PATCH 35/37] Maxpiece. --- grigorev/C-5.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100755 grigorev/C-5.py diff --git a/grigorev/C-5.py b/grigorev/C-5.py new file mode 100755 index 0000000..c207af3 --- /dev/null +++ b/grigorev/C-5.py @@ -0,0 +1,30 @@ +#!/usr/bin/python + +def piece_sizes(cuts): + sorted_cuts = sorted(cuts) + return [ + sorted_cuts[i] - sorted_cuts[i-1] + for i in range(1, len(sorted_cuts)) + ] + +with open("maxpiece.in") as infile: + lines = infile.readlines() + +n, m, _ = [int(x) for x in lines[0].split()] +cuts_x = [0, n] +cuts_y = [0, m] + +for line in lines[1:]: + t, v = [int(x) for x in line.split()] + if t == 0: + cuts_x.append(v) + else: + cuts_y.append(v) + +biggest_square = min( + max(piece_sizes(cuts_x)), + max(piece_sizes(cuts_y)) +) + +with open("maxpiece.out", "w") as outfile: + outfile.write(str(biggest_square)) From 1ce53da82109fcc37a8c9982b382b71fb73be0db Mon Sep 17 00:00:00 2001 From: LankyCyril Date: Fri, 6 Jun 2014 15:10:55 +0400 Subject: [PATCH 36/37] Olympic. --- grigorev/C-6.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100755 grigorev/C-6.py diff --git a/grigorev/C-6.py b/grigorev/C-6.py new file mode 100755 index 0000000..888ecb7 --- /dev/null +++ b/grigorev/C-6.py @@ -0,0 +1,44 @@ +#!/usr/bin/python +from collections import defaultdict + +GOLD, SILVER, BRONZE = 0, 1, 2 + +def count_medals(medal_kits): + medals = defaultdict(list) + gross = defaultdict(dict) + for medal_kit in medal_kits: + countries = medal_kit.split() + for medal in (GOLD, SILVER, BRONZE): + medals[medal].append(countries[medal]) + for medal in (GOLD, SILVER, BRONZE): + contenders = set(medals[medal]) + for contender in contenders: + gross[medal][contender] = medals[medal].count(contender) + return gross + +def keys_by_value(dictionary, value): + for k, v in dictionary.iteritems(): + if v == value: + yield k + +def calculate_weights(medal_count, base): + based = (base**2, base, 1) + weights = defaultdict(int) + for medal in (GOLD, SILVER, BRONZE): + for country in medal_count[medal]: + weights[country] += medal_count[medal][country] * based[medal] + return weights + + +with open("olympic.in") as olympic_in: + lines = olympic_in.readlines() + +kit_amount = int(lines[0].strip()) +medal_count = count_medals(lines[1:]) +weights = calculate_weights(medal_count, base = kit_amount+1) +max_weight = max(weights.values()) +contenders = list(keys_by_value(weights, max_weight)) +winner = min(contenders) + +with open("olympic.out", "w") as olympic_out: + olympic_out.write(winner) From 87f8d422f4ee3436326333b48e1f62205cad37e0 Mon Sep 17 00:00:00 2001 From: LankyCyril Date: Fri, 6 Jun 2014 17:14:01 +0400 Subject: [PATCH 37/37] Final classification task. --- grigorev/classification.ipynb | 254 +++++++++++++++++ grigorev/data/blue.txt | 498 +++++++++++++++++++++++++++++++++ grigorev/data/red.txt | 502 ++++++++++++++++++++++++++++++++++ 3 files changed, 1254 insertions(+) create mode 100755 grigorev/classification.ipynb create mode 100755 grigorev/data/blue.txt create mode 100755 grigorev/data/red.txt diff --git a/grigorev/classification.ipynb b/grigorev/classification.ipynb new file mode 100755 index 0000000..b605851 --- /dev/null +++ b/grigorev/classification.ipynb @@ -0,0 +1,254 @@ +{ + "metadata": { + "name": "", + "signature": "sha256:88d5bd21456e6a99855fc5d4033ff334a5e5ebbb9fd62aaf3eec0fd0aecafae0" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import numpy, scipy\n", + "from sklearn.utils import shuffle\n", + "from sklearn.neighbors import KNeighborsClassifier\n", + "from sklearn.ensemble import RandomForestClassifier\n", + "import matplotlib.pyplot as plot\n", + "%matplotlib inline" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 1 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# load data\n", + "blue = numpy.loadtxt(\"./data/blue.txt\")\n", + "red = numpy.loadtxt(\"./data/red.txt\")" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 2 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# visualize data\n", + "_ = plot.plot(blue[:, 0], blue[:, 1], \"b.\")\n", + "_ = plot.plot(red[:, 0], red[:, 1], \"r.\")" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 3 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# add classes to the matrix\n", + "BLUE = 0\n", + "RED = 1\n", + "full_set = numpy.concatenate((\n", + " numpy.hstack((\n", + " blue,\n", + " [[BLUE]] * len(blue)\n", + " )),\n", + " numpy.hstack((\n", + " red,\n", + " [[RED]] * len(red)\n", + " ))\n", + " ),\n", + " axis = 0\n", + ")" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 6 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# shuffle data to avoid possible batch effects and whatnot\n", + "X = full_set[:, :2] # coordinates\n", + "Y = full_set[:, 2] # classes\n", + "X, Y = shuffle(X, Y, random_state = 1)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 17 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# split data into a training set and a testing set\n", + "TRAIN_FRACTION = 0.6\n", + "TRAIN_SIZE = int(full_set.shape[0] * TRAIN_FRACTION)\n", + "train_X = X[:TRAIN_SIZE]\n", + "train_Y = Y[:TRAIN_SIZE]\n", + "test_X = X[TRAIN_SIZE:]\n", + "test_Y = Y[TRAIN_SIZE:]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 18 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# perform a K-nearest Neighbors classification\n", + "KNN = KNeighborsClassifier(n_neighbors = 5)\n", + "KNN.fit(train_X, train_Y)\n", + "KNN_score = KNN.score(train_X, train_Y)\n", + "KNN_test_score = KNN.score(test_X, test_Y)\n", + "print('Training set score = ' + str(KNN_score))\n", + "print('Test set score = ' + str(KNN_test_score))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Training set score = 0.898333333333\n", + "Test set score = 0.8725\n" + ] + } + ], + "prompt_number": 21 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# visualize misses of KNN\n", + "KNN_misses = []\n", + "for X, Y in zip(test_X.tolist(), test_Y.tolist()):\n", + " if KNN.predict(X) != Y:\n", + " KNN_misses.append(X)\n", + "KNN_misses = numpy.array(KNN_misses)\n", + "print(\"KNN wrongly classified \" + str(len(KNN_misses)) + \" test points (shown in red):\")\n", + "_ = plot.scatter(test_X[:, 0], test_X[:, 1], color = \"black\")\n", + "_ = plot.scatter(KNN_misses[:, 0], KNN_misses[:, 1], color = \"red\")" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "KNN wrongly classified 51 test points (shown in red):\n" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "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\ngg==\n", + "text": [ + "" + ] + } + ], + "prompt_number": 43 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# perform a Random Forest classification\n", + "RF = RandomForestClassifier(n_estimators = 10)\n", + "RF.fit(train_X, train_Y, sample_weight = None)\n", + "RF_score = RF.score(train_X, train_Y)\n", + "RF_test_score = RF.score(test_X, test_Y)\n", + "print('Training set score = ' + str(RF_score))\n", + "print('Test set score = ' + str(RF_test_score))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Training set score = 0.985\n", + "Test set score = 0.8425\n" + ] + } + ], + "prompt_number": 44 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# visualize misses of RF\n", + "RF_misses = []\n", + "for X, Y in zip(test_X.tolist(), test_Y.tolist()):\n", + " if RF.predict(X) != Y:\n", + " RF_misses.append(X)\n", + "RF_misses = numpy.array(RF_misses)\n", + "print(\"RF wrongly classified \" + str(len(RF_misses)) + \" test points (shown in red):\")\n", + "_ = plot.scatter(test_X[:, 0], test_X[:, 1], color = \"black\")\n", + "_ = plot.scatter(RF_misses[:, 0], RF_misses[:, 1], color = \"red\")" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "RF wrongly classified 63 test points (shown in red):\n" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nAABJRU5ErkJggg==\n", + "text": [ + "" + ] + } + ], + "prompt_number": 45 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435:

\n", + "KNN \u043d\u0435\u0432\u0435\u0440\u043d\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043b 51 \u0442\u043e\u0447\u043a\u0443 \u0438\u0437 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0442\u0430, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0448\u0438\u0431\u043e\u043a RF -- 63.
\n", + "\u0422\u0430\u043a\u0436\u0435, score \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0442\u0430 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 KNN \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0434\u043b\u044f RF (.8725 > .8425)
\n", + "\u0418\u0437 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0432\u043e\u0434, \u0447\u0442\u043e, \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u043b\u0443\u0447\u0448\u0438\u043c \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 Random Forest." + ] + } + ], + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/grigorev/data/blue.txt b/grigorev/data/blue.txt new file mode 100755 index 0000000..99a6879 --- /dev/null +++ b/grigorev/data/blue.txt @@ -0,0 +1,498 @@ +0.2663085830546681 0.8369683545625619 +-0.49073637025136274 0.7505415887555584 +-0.19634412842931592 -0.9932905786623845 +0.9941037756308668 -0.11760447432303933 +0.7744975322232264 0.26718963194413137 +0.7695224184267497 0.5710545189417691 +-0.4595890850064521 0.7474359476602297 +-0.7976438308942468 -0.4782628303297487 +-0.25746604669213213 0.8923026957807765 +-0.5998684031309311 -0.9583618090872583 +0.8329006188438841 -0.1691035039792732 +0.8035250285690336 -0.2359223378318689 +0.6781618370125793 -0.4444500301040957 +-0.8934117946479103 0.05177460237813647 +-0.6067775631288621 0.7799222536911157 +0.8574557749656526 0.9877912264116624 +0.811756402892144 0.06543286933102332 +-0.2668917956618686 -0.8200320226873112 +0.7973317114502922 0.9596414177609425 +0.5647929067436692 0.2804338502848953 +0.781211270779971 -0.1993020009661468 +0.6951351021497627 -0.6539711726716104 +0.8148416763350024 0.6383718742535203 +0.09606720368417188 -0.13860710440753987 +-0.3301665955110251 0.9501381404868752 +0.23067375149752012 0.777372692284322 +0.4594305677880539 0.7000879807083595 +-0.8290661359617664 -0.4986135152108475 +0.5404125940787885 -0.15709877347779622 +0.4360956100962907 0.8928508007909983 +0.6817695080698778 -0.96413933918412 +-0.8388649844512632 -0.2121656252399744 +-0.3224657917672782 0.9868528542399972 +-0.9404267854025545 -0.5414594882152965 +-0.05639515432981734 -0.9315994701221302 +-0.4637212877303434 -0.9734059228190721 +-0.8266507805756929 -0.5269242094783173 +-0.07825345187519095 -0.8693241988505578 +0.9689263887515138 -0.7611970231217282 +0.5340842097652816 -0.6691180079399961 +0.2854555539663517 -0.7850378228732446 +0.3121763558805959 0.9589992536557213 +0.9301835406630825 -0.3860425439815338 +0.8192161102771989 0.24373605278363852 +0.10363148532966227 -0.8520533931564125 +-0.10585769518273724 0.6831330978589567 +0.997034099200323 -0.8009353623071789 +-0.9429250935857802 0.1338008864059712 +0.8173455033954684 0.08976488305197927 +-0.6124655585413681 0.6096296067806164 +0.6365162281693124 0.8443464046122204 +-0.6390746040216548 0.9282575874955403 +0.1894793191679025 -0.5566319810537239 +-0.3849950524487522 -0.851033102377432 +-0.7561900948529154 0.61723910586379 +-0.2138038282130017 -0.8016077444770056 +0.5015100837228077 0.8663426748526422 +-0.8829833202633008 -0.54889774622219 +-0.9903171948391234 0.5020301288762299 +-0.9484521482423574 -0.3678012943057192 +0.03647308737665589 -0.6370926986341521 +-0.18121935446773385 0.896729055779494 +-0.5379886811767189 -0.6573899476795124 +-0.6283000548077753 -0.6983619456557137 +-0.6697532942672648 -0.2839260577750924 +0.48906299027939615 -0.9432779003764058 +0.796443039328903 0.2194432501115473 +-0.8168310519744686 -0.6567543995835805 +0.6969182381178092 -0.8889172207470293 +0.28845224077479914 -0.6343639308465281 +-0.11787435979578764 -0.9763005266660769 +0.09504089123283443 0.9644002405613428 +-0.7217788462259054 -0.8869974546754762 +0.7394003025153653 -0.31738327885758566 +-0.12160370103087281 0.9942876322717555 +0.8054728334965924 0.7709463070412335 +0.8303296261368069 0.10064908012114393 +0.4960280675004496 -0.9473725758764207 +0.7509974472501573 0.8876615094527616 +0.6266475613163731 0.7996508045339432 +-0.8597451553161668 0.8174294221136849 +-0.8164038719935793 0.3247924055164484 +0.8801457314532781 -0.1483553109434086 +-0.8573727485776772 0.39952972054333746 +-0.9215665799332557 -0.5183275282380833 +0.7112732791424583 0.050020614021378806 +0.9523019774201038 0.7041416699011085 +-0.7706311884307813 -0.8048129800417925 +-0.9228551545426731 0.38428060940842834 +-0.7964054872933561 -0.07470352040215844 +-0.8386292598598031 -0.225348872109155 +0.4835859365614832 -0.9203421655756192 +-0.8570022269705935 -0.7969390734271935 +0.5319485868312575 -0.9966727867143128 +-0.5452050931004342 -0.6893091010720236 +0.949424332145508 0.4451633352817064 +0.8118391274891796 -0.3277023049730272 +-0.8095059116282235 0.36238602613952464 +-0.63005816751985 -0.5253142211010144 +-0.22545257614740222 0.7797404702467534 +-0.8491199210008624 -0.22839889401222147 +-0.9311712268327259 -0.4823133112263214 +-0.48721388966794166 0.8944945121886958 +0.4362706406978285 0.9517347045993041 +-0.7604127256783528 0.5272074373039264 +-0.5959762862603926 0.7188684747979799 +-0.34136725287068037 -0.877915381498656 +-0.04129248516295725 0.8541110958679852 +0.7920289597852743 -0.8955855783904323 +-0.40516662844010676 0.7160150047884719 +-0.7272660429283135 0.5039479016058404 +0.1652522192260455 -0.19186951266788466 +0.06920047554289765 -0.8172649532070637 +-0.600504375716771 -0.760636401593823 +0.9355462420126233 -0.883633358684879 +0.22071862640383877 -0.06816462954048386 +-0.7447839571582326 0.33084241251199953 +0.6363956160018758 0.7325008306222742 +-0.8692707744731683 -0.1755890281107051 +0.43893981440293084 0.828242900537068 +-0.4480156907435171 -0.7432274871044509 +-0.951882015958625 0.7202326174129918 +0.5975554706033435 -0.9416734559711613 +0.2377490601109813 0.5872875734484722 +-0.9449511552912029 -0.6839610314641347 +-0.13535724582689435 0.8731933094473334 +0.8616799805054496 0.7811956163863683 +0.6021142291086079 0.6913915129753392 +-0.924075718570087 0.7870176388293342 +0.7743257952100249 -0.43009005620210905 +0.3164838580763303 0.05019024612891232 +-0.8431757329549676 -0.47124005435880556 +-0.8128308498796053 -0.3987195175109228 +0.03171457258901511 -0.5052194288055745 +-0.4555186819999837 -0.8448817691871322 +0.21334661578744663 -0.9803994326250851 +-0.34529081616311097 0.9745070851004205 +0.46345874275024634 -0.8915913689230397 +-0.4966398950342332 0.9401818236536563 +0.7746905190212803 -0.4671267344125163 +0.4537830369801361 0.961421808013998 +0.4622178107849597 -0.7577151114831773 +-0.8882424405640508 0.6138373875398813 +0.03386179852184479 -0.8847357534430433 +0.8587172668262786 0.8282231072791044 +-0.9089277478503379 0.18122478901425576 +0.8852159901413272 -0.7258918204929636 +0.6069647028488221 0.5435383855117877 +0.5073696588935142 0.9940012298522387 +0.8084959292729859 0.47227550344034075 +0.9823165197616692 -0.5077059262025487 +-0.5424802163985245 0.5991059796380902 +0.7404103400307369 -0.9179473359927897 +0.98945866216454 0.8316291532801574 +-0.7662784989075753 0.24577887139369903 +0.64841657229488 -0.7575636690215004 +-0.9606928939195241 0.5755072632258893 +-0.08141390477588795 -0.6034325916174772 +0.9016786769245562 0.511092431038795 +0.4476244119045927 0.8816221297534415 +-0.8081558857087197 -0.44114133882040263 +-0.9773420756795348 0.3445465987260192 +-0.26139700073431205 0.7758391796009829 +-0.34490251739882516 0.8329332534032718 +0.9583492193185057 -0.1406126470299125 +-0.8796306328467327 0.4031144865046363 +0.5757409602939223 0.693940789189778 +-0.9723063173976347 0.15883551621777814 +-0.8002877942520921 0.43538325077564277 +-0.3384551326052774 0.9237756567051123 +-0.7726935619652604 0.37695944048863117 +-0.9663738391960235 -0.08653373759934979 +-0.814090508326458 -0.032870502045369676 +-0.8931483339189739 0.8151334080719022 +-0.7962336189374075 -0.5142423166933792 +0.558936107007632 0.5171046066179259 +0.8331662930890695 0.6594843953793257 +0.958757233567096 0.04040909004884097 +-0.7765709228102085 0.717200913276554 +0.09297760047426218 -0.9388607809971607 +-0.15399498299696202 0.8467527999033762 +-0.4534521267893592 -0.9905628121397896 +0.822814900306593 -0.32134614883674484 +-0.3858574175654128 -0.8387409935715511 +0.772126452442063 -0.5549071726964732 +-0.48484323040888366 0.8123920807604812 +-0.875139731053759 0.7634169882580903 +0.28408874465493494 0.7576235392782167 +-0.32603579584714804 0.8282736047090793 +-0.8418884733840921 0.10640981420655127 +-0.6309936752505121 0.8352745561291113 +0.6578972107068 -0.6168557365934291 +0.9747576588796583 0.2728920811272939 +-0.43197593497188946 0.9451234057544249 +-0.8490185038580687 -0.5768723520176398 +0.8576543104467933 -0.6057110222670807 +0.35077963537402157 0.7868955744710298 +-0.6899223427348218 0.39616760586645894 +-0.9161556064512995 0.5222405579394505 +-0.8439806485042529 0.3885107588077472 +-0.6787256840865998 -0.4274218769042546 +-0.8579130817351701 0.9802196201371123 +0.1540869525387094 0.7917160602609823 +0.31177463293068497 0.10491930951200001 +-0.7078973772694441 -0.6770226255012239 +0.7328219265770197 -0.8372039451521769 +0.5364641978925306 0.6551773327124328 +-0.20844087167799508 0.4653141786215973 +-0.5466569466501925 -0.8373611926938835 +-0.9493004889756131 -0.5436311961317237 +-0.915847032822305 -0.5825874130069524 +0.8789144853729363 -0.5778836189895775 +-0.9825327681849609 0.1026011681110508 +-0.9277442914123568 -0.6837302406235002 +0.37397850473272665 -0.10261720319480472 +0.7663809658413059 0.42970498033750526 +-0.4383658720814112 0.8694530894344306 +0.8363848611013474 -0.20665692140580605 +0.5216092426189425 -0.8614865450929368 +-0.9135803903285364 0.6628900948754903 +0.8052756001223136 0.1915466174294982 +0.8569366669978358 -0.9345544408706352 +0.8758052177250353 -0.835316304092429 +-0.2930249202792319 0.7668257238841396 +-0.6216031708516565 0.7024023187962158 +-0.5143666878779845 -0.7033471169020669 +0.4938325019851362 0.9579523779702086 +0.6314416270979675 -0.958056263266484 +0.9234820786356908 -0.24099247045337746 +-0.3968995975846328 -0.8713332999544425 +-0.919485924979863 0.4095183304158325 +0.884298332633559 0.8980642705806807 +0.7854840949505437 -0.48058635418439555 +0.7802242905010246 -0.19541196979462616 +-0.997758877779956 -0.3891118854333584 +0.4306008541744204 -0.7235035963413878 +-0.8356255729301243 -0.8727716027865979 +0.8229652124731341 -0.17835583810194744 +-0.5453910891432683 0.8160485117426122 +0.8918949783959289 -0.7074016111543417 +-0.9728371152717485 0.2598002027932964 +0.9360372211477506 0.4712806979187909 +-0.12450733498024213 0.9554876232648435 +0.9790892845335677 -0.009814894250752104 +-0.9775768747413587 0.4081016729064524 +0.7523624772669335 0.41904954047119425 +0.6715351134743821 0.3072049248013966 +-0.8500997903017498 0.030183295659393705 +-0.18254918919106444 0.8298230711701577 +-0.6443443839143892 0.708129713600449 +0.9441464216904374 0.2757867744337994 +0.8789863021971085 0.9806411817176672 +0.5023018531439132 -0.8044464681969945 +0.39947041479545997 0.8116878636840312 +0.749919262667778 0.4160534050871809 +-0.6261359768039765 -0.7978812302171225 +-0.4588432438151644 -0.7478846478082684 +-0.7979466225805885 -0.008380981851015656 +0.317489420103245 -0.9349981632718942 +0.19080263008910348 0.9100203382269174 +-0.9681320264580695 -0.9204643833964439 +-0.7256779798486044 -0.7089447737664152 +0.6223753145509257 0.5746539522801597 +0.9902067574382685 0.13221145985025928 +0.8871167030506397 -0.3475907737911541 +-0.7521721844249445 -0.8152702917819465 +-0.6164419587014398 -0.7609472551455196 +-0.7516409612126391 0.6605216994912704 +0.9539907565921641 -0.1010197879323873 +-0.6018026945927375 -0.6478307980677762 +0.0847848204841164 -0.9631724392445988 +0.8676517560894512 -0.3171271557732174 +0.48142431812827 -0.5662144647936265 +-0.08971566980325107 0.6463433935061775 +0.1613520456988593 -0.9494834676049055 +0.5806587165781418 0.6103528508367158 +0.9202276345414562 -0.6002024380906308 +0.62680408571482 -0.5601654754125271 +-0.8639459819125135 0.9460945117923045 +-0.7273266318278016 -0.3417881660983899 +0.4140082984660498 0.9285838573036402 +0.9161663247369465 -0.3541016036937945 +0.7912499741132994 -0.8129672596108202 +0.9109346224155797 0.16890635894548578 +0.533158780460294 0.6394818923160424 +0.9305351362461598 -0.6441338887172416 +-0.8889431774283709 0.7427093758382368 +0.6604560372315811 -0.44783128075343526 +0.5881757380388148 0.7093616668652365 +-0.09142078557219335 -0.7136872717634071 +0.8971667941526777 0.34862693456527905 +0.6573465731232078 0.5967989165246288 +0.6160920315062026 -0.7118431821050915 +-0.7199161450814255 -0.6161674025442014 +-0.3969974137354251 0.43962211601841616 +-0.21360284631741688 0.8134558747797489 +0.43695141558516615 0.9923392860593552 +0.7645364015932212 -0.43426620917586134 +-0.8660092034896714 0.8184240341968156 +-0.685324463875375 0.5494792224110563 +-0.8914512433889257 -0.46441163569473676 +0.8153700521373748 0.44104857929956665 +0.7426232164010229 0.8392214924834667 +0.6354993582476398 0.9385045897407327 +0.6796098840507647 -0.6783782132651897 +-0.7287774638497062 0.6235160525241581 +-0.9550199889601958 -0.40948410696017046 +-0.7844914284895936 -0.7400654538379099 +-0.2556458236414836 -0.08404121365168171 +-0.7462542134815846 -0.8443647309125386 +-0.9741221863865099 0.6459953169742267 +0.5038564888957366 0.9654109795825567 +-0.9890267430785027 -0.07791158821615873 +0.2719721505038686 0.7845345853336425 +-0.754024692303211 -0.7054472373281091 +0.8191879703355007 -0.537080785655691 +0.9271884353223909 -0.24224628278624016 +-0.6377277990561228 -0.7077542582918408 +-0.3323119196700641 -0.9070733898501249 +0.023753619071949394 0.06193353852969974 +0.8953181787214606 0.1475917035491201 +0.987209710266234 -0.1936267626689876 +0.6212120082545312 -0.6063034439483999 +0.25901331864608257 0.6123226320930244 +0.4999662415800843 -0.41813628963337823 +-0.04213523759198168 -0.9484119014791894 +0.9164647047451775 -0.7023924129813917 +0.7277923608210777 0.8060570735860972 +0.7762135527212952 -0.508803864523766 +-0.557889198885763 -0.5393475961763805 +0.8847600223049492 -0.8494838706255303 +-0.5413678088743135 0.9565419900932934 +-0.8930246937873181 0.3560117938890983 +-0.5194757449256648 0.9742486197954008 +0.2122251969276383 0.051052111345751605 +0.46225078030713407 0.8836056302027504 +-0.488387042597457 -0.9749583998383793 +-0.06340986085009725 -0.799126679170503 +-0.530916245736863 0.7486218308562747 +0.313919605710582 -0.8961750527756325 +-0.8933947644149702 -0.8925721217968292 +-0.1876876573940307 0.9818397616356769 +-0.8761454871700292 0.15136422809815175 +0.7589602030185649 -0.6634270277144736 +0.13011122769405659 -0.8066551542204154 +0.9903066761004735 -0.9728810757612163 +-0.7291001871296632 0.6371968236468817 +0.9547424961359066 0.869226164068754 +-0.9959187122543964 0.2656332773184493 +0.9078070729746646 -0.12249546369284903 +0.7263381055318299 -0.9902476875774038 +-0.3845701913436421 -0.8383668597517506 +0.012453067232242265 0.5843736286904575 +-0.9029441871415738 0.6702299615243661 +-0.3333132332597648 0.6821684606997407 +0.9270109161685398 0.7293235661970217 +-0.4539811525534756 -0.542195924492727 +-0.32294277413378736 -0.7331028482798887 +-0.5855304751057846 0.8947632899655773 +0.28497909192978854 -0.5096307899148877 +0.5036027069702789 -0.6603654126719245 +-0.15046494342405525 -0.8627753883023221 +-0.22794719001492236 -0.8071938782884123 +0.6160739101127122 -0.8610758566856123 +-0.030260496762516853 -0.8990405111825392 +0.5666613485582286 0.9027646291646572 +0.020473931842239113 0.9195823720697143 +-0.6015891521115546 -0.9921345356472253 +-0.4687522916325868 0.20109484150543033 +-0.4107606471063574 0.886257758675683 +0.5096410055431884 0.8817185318618963 +-0.8515944911591062 0.12989071471147384 +0.918047439661694 0.9082790495502897 +0.019951170941246543 0.8896625926772228 +-0.5844884973717257 -0.8231633596935926 +0.7588579483207822 -0.9165662570861608 +-0.3964010346038678 0.08601454477630943 +-0.6540776251026275 -0.8534667406644734 +-0.6191829291451068 -0.9897115748295584 +0.5801704853893013 -0.877820195809784 +-0.8329964903391485 0.41743187985669117 +-0.8848921913183145 0.26954223037694414 +0.055924271686611515 -0.8662670375419681 +-0.5799904769950828 0.04988634255721869 +0.4398196423199314 0.7167141294643946 +-0.6278941254650039 -0.9553590780186274 +-0.762353077929222 -0.48538903788306587 +0.9268298159652308 -0.8399405333558558 +0.9113220862640714 0.7338136098846828 +0.707106532427539 0.823355573531191 +0.8224184576145228 0.02318801982830232 +0.9314885245374656 -0.0600201804809426 +-0.8563219351348441 -0.16617040389186655 +0.9992627661309177 -0.14111730745178241 +-0.4102679275765988 -0.8406381331712314 +-0.8916569562223866 -0.18518197840223216 +0.9683302606711919 0.3485631615543505 +-0.5108759208681639 -0.7505718795886116 +0.12221623262041548 0.25443249229833986 +-0.8112236595353255 -0.6658058933640327 +-0.40112301308478493 -0.7881260877681739 +-0.5855098978296864 0.8570774343494403 +0.6618646998791757 0.5809929347863727 +0.13923478013784574 0.6672014043843622 +0.9870888585198243 0.13668269673578304 +-0.9750366006273945 0.7019017309725826 +0.8015335851197092 -0.30737255420713194 +-0.8348827790909745 -0.49686048161201835 +-0.8554578188116282 -0.21475848655745033 +0.42433499927681173 -0.838129762602027 +0.5252729368980615 -0.7888641251288253 +0.05648132089965818 -0.8971144563584528 +-0.2694577670485654 -0.9956159479804738 +0.9218662371799791 -0.245345481714081 +-0.6407677377400167 -0.49041609526402685 +-0.03232944872219212 -0.5401432919868758 +-0.8761859585081933 0.6653022132983686 +0.8078001635616101 0.9715241883501526 +0.4581767849309941 -0.7516556829361214 +0.9826564078410316 0.5751909887713362 +-0.5850885085371373 0.19362357269540809 +-0.16564046267776766 0.9973677000334464 +0.5591944816360157 -0.8208650651389562 +0.8573020020582429 -0.5825478284844077 +-0.581148571398975 -0.7917857850720318 +0.8382834725656247 0.8406015050652855 +-0.4614831333166305 0.9476039727208108 +0.5792102082843851 0.8000601731156691 +0.661624563021322 0.7459621436064059 +-0.6177039660425256 0.9782960293260452 +0.8128351239505092 -0.7505906909184703 +-0.9318365319735822 -0.444952904862119 +-0.6960050457159603 -0.4130563206684532 +-0.3942383952100301 0.7066764532265861 +0.2994741871553763 0.9934397788957996 +-0.1589174648690519 0.987003966299917 +-0.7200020589958072 0.7451735535960948 +0.4598203681560744 -0.8570622124051386 +0.8853143348481207 0.15639589676865873 +0.6693048514945783 -0.9418638226426284 +-0.16788925195106952 -0.9354320066120116 +-0.19108418547002382 0.9464028783003866 +0.10628036821021558 -0.8937210380971814 +0.5700879352391974 0.5932020356216949 +0.9377344758684134 -0.3428332171825266 +-0.4932911736784571 -0.7249428685817225 +-0.8075700403216155 -0.9326780962536991 +0.3586793982788896 0.8347201924278929 +0.4841708667545579 -0.6551087108965401 +-0.9288545484142097 0.5684314837457012 +0.9331034997831631 0.33856100144620593 +-0.2966087324347164 -0.8022305088126915 +-0.9992957084987257 -0.5750109402990655 +-0.7220719206069357 -0.33434818491925555 +0.4135966251876111 0.933797514768558 +-0.7967968288227025 0.2072178715440134 +0.8117637603686232 0.14566329322690175 +-0.9638119881265776 -0.9774088674780659 +0.974944382559704 0.7894001603061196 +-0.4503829362190843 0.7019596680081333 +-0.7395941082533899 0.6707532158734106 +0.5625177524393901 0.6761672018968035 +-0.6433750645220457 -0.5511727006510223 +-0.2855194585589287 -0.894812249144143 +0.23508592180485754 -0.825470976654002 +-0.78334102576379 -0.07968968399509091 +0.7953716902662986 0.7186516097550542 +0.2770543588390477 0.7977527882482551 +-0.9382136501803311 -0.9599461151807773 +-0.7979603854127935 0.08277328156895503 +-0.419247335875244 0.9146116620073654 +-0.2685485757848525 0.30126950214327786 +0.3955710462990556 -0.9482461201191961 +-0.9668637899462642 -0.41517697482630744 +-0.4348138917878479 -0.9605959716694059 +0.5909973153182779 0.9152849974787274 +0.5867788298489443 0.5676881277263224 +0.15114537582495657 -0.7972743070211894 +0.6659627609752807 -0.922117074158568 +0.9393161936840884 0.6424325227570953 +-0.03953357649821054 0.8458823670985764 +0.1494026589765478 0.9637055485630641 +-0.9815492845427978 0.7046428738553634 +0.7082164388485332 0.828776476924185 +0.3000623272371892 0.7637488739997078 +0.47386112360543065 0.9644767012395874 +0.9564388659413963 0.5147160009979703 +-0.9057712760693646 -0.9824726162173225 +0.7446561183031495 0.5181612474515211 +-0.7051310361814604 0.9129655889780495 +-0.8696328977268455 -0.9334675990826848 +-0.08818660368121334 -0.9325210921662086 +0.10980498283952644 0.9370729996417608 +-0.7812325301458567 0.9819191888668162 +-0.5613247416403002 -0.9985582576920398 +0.9828431067720598 -0.1415964735695674 +-0.9079590869229406 0.4949026455914822 +0.779400243200622 0.9184044094162502 diff --git a/grigorev/data/red.txt b/grigorev/data/red.txt new file mode 100755 index 0000000..6778800 --- /dev/null +++ b/grigorev/data/red.txt @@ -0,0 +1,502 @@ +0.4405821835378019 -0.1604025266838185 +-0.02583465379925065 -0.06757944291264573 +-0.010648255869797119 0.3356374366339301 +-0.1528834416507172 0.27135232362095096 +-0.32283024482174905 0.06382982158631667 +-0.637256557805546 -0.3663346781020149 +0.05055668026462601 -0.4709524545435926 +0.5674179911066037 0.08298819997739759 +-0.06908171486449599 -0.006978986452960134 +-0.3145174100386203 -0.12288057287412268 +-0.21714168818280477 0.1630832588214033 +-0.254836576812135 0.9294978731213546 +0.16271148391544554 -0.6704383243609919 +-0.16941695195425965 0.8919718534574415 +0.01881209756517621 0.3567483694100946 +-0.5845569394440728 0.7702182010632459 +-0.22601753536814662 -0.5340821642583742 +0.2648807528872461 -0.07558348768263112 +-0.19779516793990348 0.17674380372816612 +-0.37264438908160624 -0.9691410683798947 +-0.15355068555059082 -0.17741544228630257 +-0.5184503481134346 -0.36278728030852503 +-0.8088287171164852 0.6622268546160701 +0.658510893992531 -0.17206720662600494 +0.6260729081445318 -0.03734307479499854 +0.14679052404245363 -0.4218607759435775 +-0.4021543600405233 -0.9730398092374164 +0.3799395390590372 0.27987902197180103 +0.785578216044668 0.0013758264247030194 +0.1160753959594869 -0.06465325357281193 +0.6906443105627491 0.7683037167872719 +0.3424380189751217 0.7008383010414407 +0.009383666543876457 0.4489666260089835 +0.0905515944569677 0.0031930840879872413 +-0.29287004664073923 -0.32662496600162716 +-0.008437443621456042 0.34483960213882914 +-0.239508538189396 0.7320864130503311 +0.17923729864425297 -0.2358950538219906 +-0.7495659495877178 -0.04770621468602765 +7.579629692158196E-4 -0.17402547375718624 +-0.17930296326100081 -0.37380144038369845 +-0.8288300010363341 0.8634219881015361 +0.05177351811414099 0.4366330423023219 +0.6947010856772635 0.23846083470828328 +-0.35940670450175927 -0.5507239025443942 +0.0748792013065962 -0.34322007351869765 +-0.32301213389065175 -0.11830683668545272 +-0.35309596546650157 -0.6589049023275855 +-0.3077042824337175 -0.4989706873070592 +-0.1798943105499331 0.3153389246223306 +-0.5367233161653941 0.17391093893051557 +0.3721410727087122 -0.38595805509342385 +-0.2663072630675145 -0.5094632800593639 +-0.7878526368255618 0.9109809309187931 +0.4502084667361299 -0.5001050052810647 +-0.3453410093947198 -0.5045040930586158 +-0.2672030798637295 -0.7320367111813377 +-0.2380423197199273 -0.6191015530582558 +-0.49385692453296115 -0.5416511238361563 +0.0797340429280804 0.6016242644841627 +-0.4355464759210015 -0.009801719624613403 +0.3116799750029935 0.681083730516123 +-0.43632942000832875 0.5702774416674969 +-0.33260954790944175 0.15025763187483676 +0.42865613434032634 0.30458793463583045 +-0.21187788842920097 -0.29858203342504064 +0.5496112276018503 0.37160115013357853 +-0.08289739136712804 -0.3716896170290902 +-0.29723144793241296 -0.3420931705054233 +0.33488462951091535 0.013728869482034556 +-0.08282005439008877 0.557572742474316 +-0.12394616496430055 -0.15233162275812773 +0.2614143641127795 0.3694798023350445 +0.6925287555428008 -0.26190163604073113 +0.4092845447404292 -0.0260604862518099 +0.7082367657020741 -0.07511426641879804 +-0.40948127994975314 0.2532921331458038 +-0.01797573657390461 -0.1776767897794682 +0.28584681352642827 0.30201347836492687 +0.7005404429490294 0.2978310999849212 +-0.7125589654802655 -0.017059341007167994 +0.32081532573128757 -0.14351038738441524 +0.043368007850793866 -0.5973822654610659 +0.08879201437927264 0.2558985115026904 +0.20993217853679136 0.32182084372447695 +0.44471621643476844 -0.14815035118736408 +-0.22006205184001115 0.11548099687054458 +-0.4722207117722168 -0.19932297742005356 +-0.01960670832710587 -0.3422027812803661 +-0.41529968201473944 -0.003228460228701824 +-0.18829143403200388 0.46883192644873906 +-0.070752982998469 0.3323811273943482 +0.21790648969607873 0.36102394704639096 +-0.22184233774874018 -0.6141455308169965 +0.4555913627165049 -0.2003221671682629 +0.056308254680980774 -0.3901385189004696 +0.13748218406104784 0.5234620041333455 +0.8567871389098989 0.07696982586917156 +-0.17731767920749641 0.5658826980356215 +-0.19885764720908172 0.6807843189707778 +0.34155403183727584 0.43756068313725516 +-0.0350283670890148 0.5713076709327203 +-0.38859627063371316 -0.09402548325985438 +-0.058514713162122645 0.7658099753076355 +-0.5239150295339754 -0.5614346382625559 +0.32395832123174473 0.033041823916696744 +-0.24152001480022833 -0.6764551061054094 +-0.09831931693936569 0.20354595482920246 +-0.18512329653109916 -0.6141896847575945 +-0.3074329492788068 0.5878082512049325 +-0.5215930732696703 -0.28315582646154724 +-0.41300256156719306 -0.32335416579243925 +0.2563074693680498 -0.28186352987001295 +-0.23525878917522913 -0.11114656098801512 +-0.0013756650304064255 -0.47296191873377347 +-0.6121549914194642 -0.24192440797893378 +0.28035692262058176 -0.7321269568961257 +0.1466990389857541 0.09159753867512488 +-0.18849605013570558 0.12543995412669595 +0.6335599847745308 0.15887246479421546 +-0.04489339423615246 -0.9697749718119755 +-0.25413220172295836 -0.04726760879827596 +0.4936751478950745 0.48453886103034893 +0.7257549755143289 -0.17399225377191851 +0.9103088954726313 -0.9507250820375814 +0.027963919501154955 -0.1660944364859911 +0.16456728514629138 -0.6240574653750961 +0.5765681783557093 0.04355611934246584 +0.10739320282053266 -0.05234886701574881 +0.2941327485031211 -0.4452163742521178 +0.005079450799339691 0.37572169409557277 +0.04534366020034919 0.4608654828352434 +-0.20035146485368793 0.6799022728438586 +0.07335602465804292 -0.12470294490098288 +-0.10995918327683296 0.11097218588420854 +-0.7913363706752774 0.34867632839180107 +-0.649838731404538 0.18260927115534198 +-0.27579405846273586 -0.27675030439295956 +0.0398071976301122 0.40794261414295363 +-0.28407744571125626 0.333844608845715 +-0.5274504588430076 0.004898320732930506 +0.051833795302539176 -0.7073376231698929 +0.2476659060293136 -0.6332197625726561 +0.9559808066042668 0.8439827422276069 +0.24984184477411753 -0.06887247869620028 +-0.05461933404462016 -0.505476823030335 +-0.14453458122422824 0.4530924209224043 +0.40421288310620773 -0.14760282601754082 +0.6565796813088647 0.42575444192739886 +0.44883559286025454 -0.3593741965865276 +-0.35303187113207013 -0.8389476220712275 +0.4267215638254809 0.20102845031407712 +0.6734282723023646 0.13623978368143352 +-0.2929299485046082 -0.6226374952305713 +-0.45318717488817706 -0.4854325698514752 +-0.2493458073585164 0.14201519784769112 +-0.24819580778868033 -0.13703645294191502 +0.5780855724773262 0.3142147532857653 +0.4837276900554568 0.40938874045278073 +0.13884347124527618 -0.6249024189263428 +-0.4605380121631011 -0.29595328212538563 +-0.17465359736608166 -0.45260603712878744 +-0.7265715769673533 0.09834528424480826 +-0.2965624426600477 -0.27272963507549774 +-0.37125057430622266 0.35086193099496676 +-0.23121367410309945 -0.6719124220510047 +-0.6136263628788154 -0.030019207541293058 +0.34989353991074035 0.4694212503003552 +0.24903858260599954 0.46507213882267284 +-0.9135886649395724 0.12491694188999514 +-0.05916784360062333 -0.009325802951820839 +-0.4232220128652586 0.3663180752154853 +-0.7753740950843258 -0.009699833416584314 +0.020337733735941388 -0.7698967679984707 +0.8406954234107433 -0.5999442747260102 +0.15399829088357642 -0.14180002381959667 +-0.2930067291722305 -0.22007392205853726 +-0.30443498825346826 -0.27954320356073414 +-0.08200187861268016 -0.30710304145728395 +-0.38474972188893086 -0.6915994699265411 +-0.1360146599334573 -0.9784846118452435 +-0.05691703676368065 -0.721159278910011 +0.6925065523443157 -0.17613672685206794 +-0.21051259146380508 -0.7206276065912678 +-0.6669213139024772 -0.240006334797237 +0.24338310788793027 0.04201670490624343 +-0.24628974016760607 -0.6803391664277414 +0.32416885524850936 0.14503086262249987 +0.15111264561749693 0.5144919885621735 +-0.43272788937987516 0.19846804996052403 +0.197336141279439 0.5865424964789998 +0.35146537550012624 0.37699398461907485 +0.13338937435650733 -0.7711668322069651 +0.37094154952407044 -0.6359250295009249 +0.3790728486546344 0.26950192879703483 +-0.5072811607746768 0.34626295767419357 +-0.7579753501752411 -0.14119528661347358 +-0.21614695893121327 0.7598438684445172 +0.02021719485666873 -0.029150874014963524 +-0.40827585131441757 -0.3297867563355865 +-0.334203096095089 -0.06608581150608162 +0.7529667872853711 -0.20369250519844306 +-0.21351728394865832 -0.15776866776425424 +-0.5920615450011624 -0.07059914502737485 +-0.287709369141548 -0.08744181733226064 +-0.1728906316192227 -0.5194306842309708 +0.6128806442412018 0.7066285338171872 +0.6427866722668738 -0.30694732398636626 +0.4203624001472086 0.3792607961949346 +0.9988099261564813 0.627974393567805 +0.40619748007773904 0.5401429379647176 +0.5203308582525232 -0.38976762200083304 +0.018360643176800417 -0.36347166009966303 +0.28412707554761907 0.327504275022825 +0.22319557794313072 -0.43060571036381723 +0.21281354995915192 0.03674481719425948 +0.10587337625819448 0.7683120391373395 +-0.32024143936781035 -0.008399171474830824 +0.7829764518219482 0.49508435403912787 +0.7017393545598372 -0.09150237579059683 +-0.13633700718787356 -0.5809628272834322 +-0.031908874675737886 0.34868790862857924 +-0.17284695194586908 0.711203421988815 +0.21053316734879068 -0.6649110667873845 +-0.4336732801711385 -0.5099609663970839 +0.6958264084060388 -0.15602374858980617 +-0.32824551814663594 -0.2933067480252354 +-0.4218624659242769 0.21823318027448546 +0.5761573293010733 0.14109301347528302 +0.46310502236312745 -0.005943511854219485 +-0.46014606349074194 0.3166017567661523 +0.3030628732094245 0.5036186342992743 +-0.03355856061956097 0.24424302786813223 +-0.15567076725087592 -0.3265652198162503 +0.3152774609654374 -0.3329170913393167 +-0.008662516245093732 0.41381288016870577 +-0.40549278425166846 0.31713888183508865 +-0.3773770327002548 0.1919054427129634 +-0.6083538450238091 0.9458985423570501 +0.09103488685497685 0.20746836136988467 +0.2031770924786369 -0.5712976882877767 +-0.35531651354686944 -0.6348849211158141 +0.008396919047445328 0.28343838868858406 +-0.32055035220117634 0.3220690076182391 +0.39843961735327005 0.3382957587912414 +0.805906819412078 0.5732660784213004 +-0.052502392418852795 -0.09109463636082826 +-0.26369633369200596 0.1623254378717518 +-0.5296353412967165 0.05243327972908007 +0.40836680516218826 -0.37097946007621796 +-0.37601443384545186 -0.32088142042677026 +-0.2674953854306261 -0.7313670894291704 +-0.41895543097760934 -0.6497025230689144 +-0.429080872604342 -0.05572112885932379 +-0.5437111545875588 -0.387928965080063 +0.28693040344496556 -0.5818199215608344 +0.007030478168567056 0.2224815065170287 +-0.292185843243826 -0.06439534388086066 +-0.5124492379751107 -0.18875772716285177 +-0.4814860267515111 0.3356729297683161 +-0.66268945034612 -0.42138092596441235 +-0.16315420402109848 -0.15475123848455263 +-0.1741611246126804 -0.28905164981781284 +-0.39734014057605394 0.5250797515016117 +0.5447427487748946 0.8340506129445109 +-0.04783089808829932 0.5486728311353901 +0.5806692803106024 0.032262175305790564 +0.7570306457192193 0.004458244102260256 +0.467760117993528 -0.3252366930583619 +-0.3784174282062389 0.5300758156322201 +0.8983146966120072 -0.221659827162221 +-0.3029528477075858 -0.030628818327973928 +-0.708085274167009 -0.16024277142374466 +0.2787027092311849 0.1321742890883877 +-0.27509423842926073 -0.6824451085079264 +0.38829555407079486 -0.5953328928158337 +0.2721691772490882 -0.43932565906134013 +-0.3057436985722981 0.16435682520299433 +0.5235454685099852 -0.7627261645994683 +-0.04470638155292783 -0.6405794968345229 +0.285852743771176 -0.4359414887349602 +-0.09202379051730247 0.45650873435008843 +-0.26139625590674265 0.07394420429699111 +0.4692629957992793 0.5882991924725114 +0.7817033517675256 0.15330210975903147 +0.24640508449604637 -0.6171759759233448 +0.5642751160964758 0.2744677588553672 +-0.18940283404098657 -0.5713453395770838 +-0.5302277890472149 0.2420908851213468 +-0.5224375886602883 0.46765933474064725 +0.05214806015716977 0.3704415205022402 +-0.6614781769401554 -0.08781042448495735 +0.17728031623462126 -0.522922974059848 +-0.09032406073462473 -0.20482449996488628 +-0.43575543759028923 -0.6090841387607315 +-0.04616657858091999 0.12689769313884702 +-0.668140086959397 -0.3315725597315784 +-0.7673218970477313 -0.005057635717625741 +-0.4890224367897258 0.6042043055443049 +-0.7481428465262907 0.16189063296631523 +0.2234709041953178 -0.6540515518045364 +-0.4626786109583103 0.45204621130547373 +0.12636898617400738 0.6147571393885702 +0.819187001067849 -0.17291359909084858 +-0.12120868118237982 0.558198569352891 +-0.7577664794504173 0.07438050381407035 +0.31482910590129043 -0.017483171714679502 +0.2530402260875433 0.25884151842365744 +-0.30302067032753444 0.6951538028392776 +0.5620055371646229 -0.07592950758008787 +0.47924109923840064 -0.028286468555617228 +-0.617027853585137 -0.25273043498935577 +-0.5224451175535072 0.24705678505164252 +-0.18741374519637555 -0.5446271487967822 +0.5009320838037654 0.14549704629246318 +-0.5432940862498765 -0.2740942661044308 +0.02963807476151814 0.7341803051754281 +-0.5945151973334102 0.2183556192910412 +0.06349719678872146 -0.559903000565902 +0.1453037687144123 0.005899291164333409 +0.5681454036732314 0.23580764128295728 +-0.1062435698319455 0.41049991726157264 +-0.3197831088066667 -0.953672225276045 +0.08077495838571358 -0.5485549846768318 +0.40445228847382264 0.6099621389948819 +0.2427439340187525 0.10521731672439794 +0.1906104034680467 -0.59505780118012 +0.27412285261048064 0.10241801540113138 +-0.3914191424534219 -0.40287200567206827 +-0.47716376689717244 -0.2871197360361841 +-0.07941031696329848 -0.1256502828123356 +0.08285979896605244 -0.31372104442584514 +0.19596691891654472 -0.7474965410285677 +-0.3989589186278537 -0.2399442544855468 +0.5379641324226994 -0.15517197486256173 +0.1687623902116724 0.6987677857457575 +0.6921009462399319 -0.3822726278473818 +0.045023099057382776 0.7227373175907059 +-0.601310967960085 -0.10296014461633285 +-0.3152738370016963 -0.20992201716398484 +0.5635189225582953 -0.15337360167557668 +-0.26791420607739513 -0.202014037127916 +-0.15872066291955078 0.17029833289667273 +-0.6587963213186276 0.7809873153414792 +0.55323465140936 -0.04433753999594647 +-0.4011275178671574 -0.38049271652250405 +0.5978057784447575 0.551128010242318 +-0.3351574499593992 -0.16656420651964865 +0.7297630844038889 0.12572111904880612 +-0.4417660049274028 -0.49898229376645653 +-0.10055669283683533 0.2686454168858099 +0.1915626331333955 -0.451484431831493 +0.540272868529573 -0.4365936183355048 +-0.9875890964255019 0.13246478204585377 +-0.07354516345577178 -0.4949470172390451 +-0.05759894146690847 -0.3468961045096539 +0.16792113005440523 -0.2058623185519719 +0.24297751252570077 -0.0038352179362568517 +-0.09440670832678189 -0.3542805879943083 +-0.7874676594234096 0.3068418462104241 +0.061202913051479735 0.0968619230146801 +-0.22789000772944568 0.4265886794798872 +0.10487488190112404 -0.7109719483873909 +-0.463606432484863 0.28225799745560876 +0.22922758562614143 0.20872010165168353 +-0.09171572280431461 0.38694644934069555 +-0.06061528662580784 -0.661711130235676 +0.4052990934556584 0.1357830335638297 +-0.5484161002946464 -0.5720356322727611 +-0.5158309190185402 0.20731421475448553 +-0.694929680991468 0.08391405090160231 +0.45045169911875105 -0.5006814709753709 +0.2341305991196978 -0.6989411361782023 +0.6096409501344637 -0.3567532360626078 +-0.21094771940211365 -0.16204606100556407 +-0.01732478753439559 -0.610718641757561 +0.6120155295591021 0.33822481094998524 +-0.12767682858751694 0.273269498495021 +-0.20335009776324187 -0.403366513994762 +0.736726300174154 0.08310051639782379 +0.5389248984876394 0.08005588311846701 +0.4059262582683234 0.4536502855311835 +-0.774856385497964 -0.05926643384409935 +-0.14820989679656393 0.026962894532272852 +0.10654730070613838 -0.48233693826052915 +-0.5482422887961023 0.18384127342712064 +0.07715004433428829 0.8699612802325507 +-0.09885758415891521 -0.5204213710367975 +-0.14461389041015593 -0.09455680285627244 +0.4046544926130191 -0.25956961284545454 +0.03725806167559842 0.11585851723050977 +0.5755314296575715 0.20571698303197228 +0.3280731841873725 -0.34632945518478 +-0.13507902428986363 -0.6512351144451565 +-0.8205249564309092 -0.5987789194285267 +-0.38854378055483973 -0.2562836245791822 +0.383005891062427 0.05502382974882747 +-0.2445988300169799 -0.11166643985599478 +-0.5440791996393859 0.22735147488562735 +0.5149369814978795 -0.033331104258534694 +-0.1809004109489556 0.24753201815686232 +-0.32889509289323215 0.587647687748504 +-0.12133675957398982 0.7612640360254246 +0.0057859493602927525 0.09533081930711806 +0.4594447345477253 0.6451093538602879 +0.7966635511155029 0.025876549938907978 +0.1637053990994637 0.7383713660664284 +0.3739930210591569 -0.19483727062329015 +-0.191324868305204 0.0643525676328418 +0.5220398231970196 0.3060701025994028 +-0.30380607913762003 -0.629451382327888 +0.236388875644447 -0.48653073573836947 +0.2599094131717494 0.5816718821929776 +-0.2154225412041355 -0.1791337811893554 +0.30831829149880585 0.026908069675842805 +-0.28488328674861263 0.0015172265780560856 +0.041268756528797024 -0.024883953053257857 +-0.8860803821153227 -0.8778190202844205 +0.6619728299681809 -0.28892408648203505 +-0.7575898436202639 -0.13003420164702262 +0.13932565725913815 -0.6367427218279038 +0.4885765504940518 -0.5310768417184291 +-0.0819983078692148 0.11555474199680082 +-0.6035455513139067 -0.34453649287503296 +0.023094270547911133 -0.5968691533694155 +-0.22692114420338472 0.6999117420618273 +-0.2345368927530882 -0.06614432153170458 +-0.19066881654960444 0.03780732510716933 +0.1209463452758972 0.42847786624253215 +-0.5960336437672615 0.2357921564632759 +0.32373931492400443 -0.574714127560831 +0.35543702967914936 0.0034545437111694888 +0.22019926449130556 -0.06975787616300688 +0.2806790085786337 0.2783280726205699 +-0.6574048402042489 0.07936416916813882 +0.21327719614289609 -0.4874908672429934 +0.6068234251534472 0.0216025512405138 +0.8538495934692054 -0.12445437335000986 +-0.029804800598489445 -0.3271644020556146 +-0.8484016238418306 -0.6957654264287347 +-0.22021713583580715 -0.6752628093761934 +0.6220936441062996 0.2220975002767691 +0.2064359447077848 0.38963228393707383 +-0.42422112351106067 -0.07062605361834895 +-0.6025620916641488 0.2604863593135158 +-0.20616674077305097 0.5313645270071568 +0.19825464889869338 0.5780678444993028 +-0.16457577517839073 -0.45232866011221673 +-0.3210819496480197 -0.5969182429046855 +-0.007529375547180361 0.018117466171329033 +-0.07493190270606376 0.560156188339713 +-0.15908140292688544 -0.11409564175595777 +0.16329107003497545 -0.6554390475239629 +0.20926473035397564 0.525875187986951 +0.0021517919303051247 -0.1905991122138564 +0.9008720939909274 -0.6923407505508292 +-0.353604722946254 -0.2935188268829072 +0.7479249862824549 -0.9434242876629468 +0.16136659142780574 -0.08471178832965776 +-0.20769168661707504 0.2810457334852343 +0.7970691656983282 -0.010659455701300002 +-0.17286021353557124 -0.6386017020799954 +-0.4220080448193797 -0.6229050169930512 +-0.2602506006908214 -0.3683988202635584 +-0.2933238924855641 -0.07977133189663133 +-0.3385630762144718 -0.5507882464058644 +0.47998421923861856 0.5891626549261111 +-0.2478543801334785 0.44685193983283655 +0.9685666694287955 0.8519825965310339 +0.5067131654545542 0.8495455995091836 +0.42610034241823636 0.47369979889077163 +0.20778435266005313 0.5927243759473741 +-0.19267759238492022 -0.5938246982877573 +0.5245973104370962 -0.23613458026287404 +0.40077720633484293 0.38732526598289696 +0.5681137494562722 0.08142264763756746 +-0.4668748645884848 -0.5252700901094278 +0.3734691906827172 -0.6809722474329465 +-0.4677295170283895 -0.01374128291776433 +0.271210949020368 0.510730679571697 +-0.6608572450776922 -0.3170960583396527 +0.6444104608642247 -0.17050511539704205 +-0.5670654890826667 -0.33109977504123655 +0.559492584770571 -0.2078042561119151 +0.6858916037131486 -0.287508135490097 +0.29350106446847657 -0.47772697848983103 +0.245456040265714 -0.3335079104625951 +0.5567178586358046 -0.4119626836078589 +0.213066366961971 -0.2908064789292655 +-0.11444954267587537 0.6598436945700761 +-0.8037014319921014 0.38038146867529954 +-0.6167703995995157 -0.46922772001035473 +0.31945976344225935 0.2346727337280956 +-0.39181851079607477 0.21489294823860883 +0.44674616402725764 0.22458450871064506 +0.5035638723635356 -0.3213023442475387 +-0.5509651693504927 0.137798321624923 +0.11809240787573727 -0.007537025575413692 +-0.0050474961463085055 -0.23671898843160433 +0.13366457939592746 0.33979574696449877 +-0.3935042245459648 -0.3820966168272013 +0.13512995548059648 -0.4836499858712331