From 825cbdf25af4e562a01dd90e9fc3f40fc41514c6 Mon Sep 17 00:00:00 2001 From: mateuszz0000 Date: Thu, 21 May 2020 06:52:48 +0200 Subject: [PATCH 1/4] Added bead sort --- sorts/bead_sort.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 sorts/bead_sort.py diff --git a/sorts/bead_sort.py b/sorts/bead_sort.py new file mode 100644 index 000000000000..50243abdcb59 --- /dev/null +++ b/sorts/bead_sort.py @@ -0,0 +1,29 @@ +""" https://en.wikipedia.org/wiki/Bead_sort """ + + +def bead_sort(sequence: list) -> list: + """ + >>> bead_sort([6,11, 12, 4, 1, 5]) + [1, 4, 5, 6, 11, 12] + + >>> bead_sort([9, 8, 7, 6, 5, 4 ,3, 2, 1]) + [1, 2, 3, 4, 5, 6, 7, 8, 9] + + >>> bead_sort([5, 0, 4, 3]) + [0, 3, 4, 5] + + >>> bead_sort([8, 2, -1]) + [-1, 2, 8] + """ + for _ in range(len(sequence)): + for i, (rod_upper, rod_lower) in enumerate(zip(sequence, sequence[1:])): + if rod_upper > rod_lower: + sequence[i] -= rod_upper - rod_lower + sequence[i + 1] += rod_upper - rod_lower + + return sequence + + +if __name__ == "__main__": + assert bead_sort([5, 4, 3, 2, 1]) == [1, 2, 3, 4, 5] + assert bead_sort([7, 9, 4, 3, 5]) == [3, 4, 5, 7, 9] From bbf9156b706650015b39d9e06e947a7fb50a7d87 Mon Sep 17 00:00:00 2001 From: mateuszz0000 Date: Thu, 21 May 2020 08:11:08 +0200 Subject: [PATCH 2/4] Commit suggestion --- sorts/bead_sort.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sorts/bead_sort.py b/sorts/bead_sort.py index 50243abdcb59..f5024a245c2b 100644 --- a/sorts/bead_sort.py +++ b/sorts/bead_sort.py @@ -3,7 +3,7 @@ def bead_sort(sequence: list) -> list: """ - >>> bead_sort([6,11, 12, 4, 1, 5]) + >>> bead_sort([6, 11, 12, 4, 1, 5]) [1, 4, 5, 6, 11, 12] >>> bead_sort([9, 8, 7, 6, 5, 4 ,3, 2, 1]) From 7b0dd33af8218e7f1a62186fd36ef14da1f5b591 Mon Sep 17 00:00:00 2001 From: mateuszz0000 Date: Thu, 21 May 2020 08:50:50 +0200 Subject: [PATCH 3/4] Added checking before sort --- sorts/bead_sort.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/sorts/bead_sort.py b/sorts/bead_sort.py index f5024a245c2b..f78dfef111e4 100644 --- a/sorts/bead_sort.py +++ b/sorts/bead_sort.py @@ -12,9 +12,25 @@ def bead_sort(sequence: list) -> list: >>> bead_sort([5, 0, 4, 3]) [0, 3, 4, 5] - >>> bead_sort([8, 2, -1]) - [-1, 2, 8] + >>> bead_sort([8, 2, 1]) + [1, 2, 8] + + >>> bead_sort([1, .9, 0.0, 0, -1, -.9]) + Traceback (most recent call last): + ... + TypeError: Sequence must be list of positive integers + + >>> bead_sort("Hello world") + Traceback (most recent call last): + ... + TypeError: Sequence must be list of positive integers """ + if isinstance(sequence, str): + raise TypeError("Sequence must be list of positive integers") + + if min(sequence) < 0: + raise TypeError("Sequence must be list of positive integers") + for _ in range(len(sequence)): for i, (rod_upper, rod_lower) in enumerate(zip(sequence, sequence[1:])): if rod_upper > rod_lower: From e157b29140b8f48c1ab0583cf5d160a9e28cf564 Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Thu, 21 May 2020 22:26:45 +0200 Subject: [PATCH 4/4] Bead sort only works for sequences of nonegative integers --- sorts/bead_sort.py | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/sorts/bead_sort.py b/sorts/bead_sort.py index f78dfef111e4..3767e842d8c2 100644 --- a/sorts/bead_sort.py +++ b/sorts/bead_sort.py @@ -1,4 +1,7 @@ -""" https://en.wikipedia.org/wiki/Bead_sort """ +""" +Bead sort only works for sequences of nonegative integers. +https://en.wikipedia.org/wiki/Bead_sort +""" def bead_sort(sequence: list) -> list: @@ -18,25 +21,20 @@ def bead_sort(sequence: list) -> list: >>> bead_sort([1, .9, 0.0, 0, -1, -.9]) Traceback (most recent call last): ... - TypeError: Sequence must be list of positive integers + TypeError: Sequence must be list of nonnegative integers >>> bead_sort("Hello world") Traceback (most recent call last): ... - TypeError: Sequence must be list of positive integers + TypeError: Sequence must be list of nonnegative integers """ - if isinstance(sequence, str): - raise TypeError("Sequence must be list of positive integers") - - if min(sequence) < 0: - raise TypeError("Sequence must be list of positive integers") - + if any(not isinstance(x, int) or x < 0 for x in sequence): + raise TypeError("Sequence must be list of nonnegative integers") for _ in range(len(sequence)): for i, (rod_upper, rod_lower) in enumerate(zip(sequence, sequence[1:])): if rod_upper > rod_lower: sequence[i] -= rod_upper - rod_lower sequence[i + 1] += rod_upper - rod_lower - return sequence