From f7ba9da92ae49f8c191877c1c17318c24c74600c Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Mon, 2 Jan 2023 01:57:11 +0000 Subject: [PATCH 01/10] updating DIRECTORY.md --- DIRECTORY.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/DIRECTORY.md b/DIRECTORY.md index 3437df12cbf5..5ce9dca74c06 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -123,6 +123,7 @@ * [Huffman](compression/huffman.py) * [Lempel Ziv](compression/lempel_ziv.py) * [Lempel Ziv Decompress](compression/lempel_ziv_decompress.py) + * [Lz77](compression/lz77.py) * [Peak Signal To Noise Ratio](compression/peak_signal_to_noise_ratio.py) * [Run Length Encoding](compression/run_length_encoding.py) @@ -1162,7 +1163,7 @@ * [Get Amazon Product Data](web_programming/get_amazon_product_data.py) * [Get Imdb Top 250 Movies Csv](web_programming/get_imdb_top_250_movies_csv.py) * [Get Imdbtop](web_programming/get_imdbtop.py) - * [Get Top Billioners](web_programming/get_top_billioners.py) + * [Get Top Billionaires](web_programming/get_top_billionaires.py) * [Get Top Hn Posts](web_programming/get_top_hn_posts.py) * [Get User Tweets](web_programming/get_user_tweets.py) * [Giphy](web_programming/giphy.py) From 11aaefd543834a9e1d18e58830bcb2232388a867 Mon Sep 17 00:00:00 2001 From: Tianyi Zheng Date: Sun, 1 Jan 2023 19:26:09 -0800 Subject: [PATCH 02/10] Update sierpinski_triangle.py header doc --- fractals/sierpinski_triangle.py | 42 +++++++++++++++------------------ 1 file changed, 19 insertions(+), 23 deletions(-) diff --git a/fractals/sierpinski_triangle.py b/fractals/sierpinski_triangle.py index 084f6661f425..01bb51a11152 100644 --- a/fractals/sierpinski_triangle.py +++ b/fractals/sierpinski_triangle.py @@ -1,31 +1,27 @@ -#!/usr/bin/python - -"""Author Anurag Kumar | anuragkumarak95@gmail.com | git/anuragkumarak95 - -Simple example of Fractal generation using recursive function. - -What is Sierpinski Triangle? ->>The Sierpinski triangle (also with the original orthography Sierpinski), also called -the Sierpinski gasket or the Sierpinski Sieve, is a fractal and attractive fixed set -with the overall shape of an equilateral triangle, subdivided recursively into smaller -equilateral triangles. Originally constructed as a curve, this is one of the basic -examples of self-similar sets, i.e., it is a mathematically generated pattern that can -be reproducible at any magnification or reduction. It is named after the Polish -mathematician Wacław Sierpinski, but appeared as a decorative pattern many centuries -prior to the work of Sierpinski. +""" +Author Anurag Kumar | anuragkumarak95@gmail.com | git/anuragkumarak95 -Requirements(pip): - - turtle +Simple example of fractal generation using recursion. -Python: - - 2.6 +What is the Sierpiński Triangle? + The Sierpiński triangle (sometimes spelled Sierpinski), also called the +Sierpiński gasket or Sierpiński sieve, is a fractal attractive fixed set with +the overall shape of an equilateral triangle, subdivided recursively into +smaller equilateral triangles. Originally constructed as a curve, this is one of +the basic examples of self-similar sets—that is, it is a mathematically +generated pattern that is reproducible at any magnification or reduction. It is +named after the Polish mathematician Wacław Sierpiński, but appeared as a +decorative pattern many centuries before the work of Sierpiński. -Usage: - - $python sierpinski_triangle.py +Requirements (pip): turtle -Credits: This code was written by editing the code from -https://www.riannetrujillo.com/blog/python-fractal/ +Usage: python sierpinski_triangle.py +Credits: + The above description is taken from + https://en.wikipedia.org/wiki/Sierpi%C5%84ski_triangle + This code was written by editing the code from + https://www.riannetrujillo.com/blog/python-fractal/ """ import sys import turtle From 71ec4d2c5e5e7fb8c97f62ee5c6f82d6a2e1a460 Mon Sep 17 00:00:00 2001 From: Tianyi Zheng Date: Sun, 1 Jan 2023 19:27:04 -0800 Subject: [PATCH 03/10] Remove unused PROGNAME var in sierpinski_triangle.py The PROGNAME var was used to print an image description in the reference code that this implementation was taken from, but it's entirely unused here --- fractals/sierpinski_triangle.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/fractals/sierpinski_triangle.py b/fractals/sierpinski_triangle.py index 01bb51a11152..b0e4eaa8eb06 100644 --- a/fractals/sierpinski_triangle.py +++ b/fractals/sierpinski_triangle.py @@ -26,8 +26,6 @@ import sys import turtle -PROGNAME = "Sierpinski Triangle" - points = [[-175, -125], [0, 175], [175, -125]] # size of triangle From 025f03dc9afe8d876017622e41780e9023ce4723 Mon Sep 17 00:00:00 2001 From: Tianyi Zheng Date: Sun, 1 Jan 2023 19:45:10 -0800 Subject: [PATCH 04/10] Refactor triangle() function to not use list of vertices Since the number of vertices is always fixed at 3, there's no need to pass in the vertices as a list, and it's clearer to give the vertices distinct names rather than index them from the list --- fractals/sierpinski_triangle.py | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/fractals/sierpinski_triangle.py b/fractals/sierpinski_triangle.py index b0e4eaa8eb06..3735d7101be4 100644 --- a/fractals/sierpinski_triangle.py +++ b/fractals/sierpinski_triangle.py @@ -26,45 +26,42 @@ import sys import turtle -points = [[-175, -125], [0, 175], [175, -125]] # size of triangle - def get_mid(p1, p2): - return ((p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2) # find midpoint - + return (p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2 # find midpoint -def triangle(points, depth): +# def triangle(points, depth): +def triangle(vertex1, vertex2, vertex3, depth): my_pen.up() - my_pen.goto(points[0][0], points[0][1]) + my_pen.goto(vertex1[0], vertex1[1]) my_pen.down() - my_pen.goto(points[1][0], points[1][1]) - my_pen.goto(points[2][0], points[2][1]) - my_pen.goto(points[0][0], points[0][1]) + my_pen.goto(vertex2[0], vertex2[1]) + my_pen.goto(vertex3[0], vertex3[1]) + my_pen.goto(vertex1[0], vertex1[1]) if depth > 0: triangle( - [points[0], get_mid(points[0], points[1]), get_mid(points[0], points[2])], - depth - 1, + vertex1, get_mid(vertex1, vertex2), get_mid(vertex1, vertex3), depth - 1 ) triangle( - [points[1], get_mid(points[0], points[1]), get_mid(points[1], points[2])], - depth - 1, + vertex2, get_mid(vertex1, vertex2), get_mid(vertex2, vertex3), depth - 1 ) triangle( - [points[2], get_mid(points[2], points[1]), get_mid(points[0], points[2])], - depth - 1, + vertex3, get_mid(vertex3, vertex2), get_mid(vertex1, vertex3), depth - 1 ) if __name__ == "__main__": if len(sys.argv) != 2: raise ValueError( - "right format for using this script: " - "$python fractals.py " + "Correct format for using this script: " + "python fractals.py " ) my_pen = turtle.Turtle() my_pen.ht() my_pen.speed(5) my_pen.pencolor("red") - triangle(points, int(sys.argv[1])) + + vertices = [[-175, -125], [0, 175], [175, -125]] # vertices of triangle + triangle(vertices[0], vertices[1], vertices[2], int(sys.argv[1])) From c3cb44e2d8438616bfaf9ceb8ab28a79e639a015 Mon Sep 17 00:00:00 2001 From: Tianyi Zheng Date: Sun, 1 Jan 2023 19:51:39 -0800 Subject: [PATCH 05/10] Refactor sierpinski_triangle.py to use tuples Tuples make more sense than lists for storing coordinate pairs --- fractals/sierpinski_triangle.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/fractals/sierpinski_triangle.py b/fractals/sierpinski_triangle.py index 3735d7101be4..655a5a4bd8f7 100644 --- a/fractals/sierpinski_triangle.py +++ b/fractals/sierpinski_triangle.py @@ -31,7 +31,6 @@ def get_mid(p1, p2): return (p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2 # find midpoint -# def triangle(points, depth): def triangle(vertex1, vertex2, vertex3, depth): my_pen.up() my_pen.goto(vertex1[0], vertex1[1]) @@ -63,5 +62,5 @@ def triangle(vertex1, vertex2, vertex3, depth): my_pen.speed(5) my_pen.pencolor("red") - vertices = [[-175, -125], [0, 175], [175, -125]] # vertices of triangle + vertices = [(-175, -125), (0, 175), (175, -125)] # vertices of triangle triangle(vertices[0], vertices[1], vertices[2], int(sys.argv[1])) From 7547edf96fcd44ab1ecac0f99479391118866245 Mon Sep 17 00:00:00 2001 From: Tianyi Zheng Date: Sun, 1 Jan 2023 19:53:46 -0800 Subject: [PATCH 06/10] Flip if-statement condition in sierpinski_triangle.py to avoid nesting --- fractals/sierpinski_triangle.py | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/fractals/sierpinski_triangle.py b/fractals/sierpinski_triangle.py index 655a5a4bd8f7..1ac56b5479e0 100644 --- a/fractals/sierpinski_triangle.py +++ b/fractals/sierpinski_triangle.py @@ -39,16 +39,12 @@ def triangle(vertex1, vertex2, vertex3, depth): my_pen.goto(vertex3[0], vertex3[1]) my_pen.goto(vertex1[0], vertex1[1]) - if depth > 0: - triangle( - vertex1, get_mid(vertex1, vertex2), get_mid(vertex1, vertex3), depth - 1 - ) - triangle( - vertex2, get_mid(vertex1, vertex2), get_mid(vertex2, vertex3), depth - 1 - ) - triangle( - vertex3, get_mid(vertex3, vertex2), get_mid(vertex1, vertex3), depth - 1 - ) + if depth == 0: + return + + triangle(vertex1, get_mid(vertex1, vertex2), get_mid(vertex1, vertex3), depth - 1) + triangle(vertex2, get_mid(vertex1, vertex2), get_mid(vertex2, vertex3), depth - 1) + triangle(vertex3, get_mid(vertex3, vertex2), get_mid(vertex1, vertex3), depth - 1) if __name__ == "__main__": From c27cc7676ee1b81dde75f5e49c4f0925c613a373 Mon Sep 17 00:00:00 2001 From: Tianyi Zheng Date: Sun, 1 Jan 2023 19:56:53 -0800 Subject: [PATCH 07/10] Add type hints to sierpinski_triangle.py --- fractals/sierpinski_triangle.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/fractals/sierpinski_triangle.py b/fractals/sierpinski_triangle.py index 1ac56b5479e0..0d56259010aa 100644 --- a/fractals/sierpinski_triangle.py +++ b/fractals/sierpinski_triangle.py @@ -27,11 +27,16 @@ import turtle -def get_mid(p1, p2): +def get_mid(p1: tuple[float, float], p2: tuple[float, float]) -> tuple[float, float]: return (p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2 # find midpoint -def triangle(vertex1, vertex2, vertex3, depth): +def triangle( + vertex1: tuple[float, float], + vertex2: tuple[float, float], + vertex3: tuple[float, float], + depth: int, +) -> None: my_pen.up() my_pen.goto(vertex1[0], vertex1[1]) my_pen.down() From 6546a8be123f400579a41fe052a9f76e16ebd2a4 Mon Sep 17 00:00:00 2001 From: Tianyi Zheng Date: Sun, 1 Jan 2023 20:03:08 -0800 Subject: [PATCH 08/10] Add doctests to sierpinski_triangle.py --- fractals/sierpinski_triangle.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/fractals/sierpinski_triangle.py b/fractals/sierpinski_triangle.py index 0d56259010aa..02bffcac72c6 100644 --- a/fractals/sierpinski_triangle.py +++ b/fractals/sierpinski_triangle.py @@ -28,7 +28,21 @@ def get_mid(p1: tuple[float, float], p2: tuple[float, float]) -> tuple[float, float]: - return (p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2 # find midpoint + """ + Find the midpoint of two points + + >>> get_mid((0, 0), (2, 2)) + (1, 1) + >>> get_mid((-3, -3), (3, 3)) + (0, 0) + >>> get_mid((1, 0), (3, 2)) + (2, 1) + >>> get_mid((0, 0), (1, 1)) + (0.5, 0.5) + >>> get_mid((0, 0), (0, 0)) + (0, 0) + """ + return (p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2 def triangle( @@ -37,6 +51,10 @@ def triangle( vertex3: tuple[float, float], depth: int, ) -> None: + """ + Recursively draw the Sierpinski triangle given the vertices of the triangle + and the recursion depth + """ my_pen.up() my_pen.goto(vertex1[0], vertex1[1]) my_pen.down() From e7630175f1404b4d0da568958297a5580ae44d16 Mon Sep 17 00:00:00 2001 From: Tianyi Zheng Date: Sun, 1 Jan 2023 20:17:30 -0800 Subject: [PATCH 09/10] Fix return types in doctests --- fractals/sierpinski_triangle.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/fractals/sierpinski_triangle.py b/fractals/sierpinski_triangle.py index 02bffcac72c6..41e6dd1702fe 100644 --- a/fractals/sierpinski_triangle.py +++ b/fractals/sierpinski_triangle.py @@ -32,15 +32,15 @@ def get_mid(p1: tuple[float, float], p2: tuple[float, float]) -> tuple[float, fl Find the midpoint of two points >>> get_mid((0, 0), (2, 2)) - (1, 1) + (1.0, 1.0) >>> get_mid((-3, -3), (3, 3)) - (0, 0) + (0.0, 0.0) >>> get_mid((1, 0), (3, 2)) - (2, 1) + (2.0, 1.0) >>> get_mid((0, 0), (1, 1)) (0.5, 0.5) >>> get_mid((0, 0), (0, 0)) - (0, 0) + (0.0, 0.0) """ return (p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2 From b8c89d51892d4f80e180ebe36cf23e0988ba720c Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Mon, 2 Jan 2023 14:10:46 +0100 Subject: [PATCH 10/10] Update fractals/sierpinski_triangle.py --- fractals/sierpinski_triangle.py | 1 - 1 file changed, 1 deletion(-) diff --git a/fractals/sierpinski_triangle.py b/fractals/sierpinski_triangle.py index 41e6dd1702fe..c28ec00b27fe 100644 --- a/fractals/sierpinski_triangle.py +++ b/fractals/sierpinski_triangle.py @@ -13,7 +13,6 @@ named after the Polish mathematician Wacław Sierpiński, but appeared as a decorative pattern many centuries before the work of Sierpiński. -Requirements (pip): turtle Usage: python sierpinski_triangle.py