A collection of joke sorting algorithms implemented in C++ for Python.
Project description
kusosort
C++で実装された、最高に非効率で面白いソートアルゴリズムのPythonライブラリです。
このライブラリは、計算機科学の思考実験やジョークとして知られるアルゴリズムを集めたものです。実用性は皆無ですが、アルゴリズムの「悪い例」を楽しく学ぶための教育的なツールとして、あるいは単なるエンターテイメントとしてお楽しみください。
コアロジックはC++で実装されており、"最大限の"パフォーマンス(?)を発揮します。
インストール
pip install kusosort
クイックスタート
このライブラリの面白さをすぐに体験してみましょう。例えば、スターリンソートは基準に満たない要素を容赦なく「粛清」します。
import kusosort
my_list = [1, 5, 2, 8, 3, 9, 4]
print(f"元の配列: {my_list}")
# スターリンソートで基準に満たない要素を粛清!
purged_list = kusosort.stalin(my_list)
def my_prayer():
print("神よ...")
kusosort.miracle(data, max_attempts=3, prey=my_prayer)
# 神よ...
# 神よ...
# 神よ...
# The miracle didn't happen, and the list was not sorted.
# ボゴソート (注意: 終わらない可能性があります)
# data = random.sample(range(10), 10)
# kusosort.bogo_sort(data)
# print(f"Bogo sorted: {data}")
実行結果:
元の配列: [1, 5, 2, 8, 3, 9, 4]
粛清後の配列: [1, 5, 8, 9]
元の配列は変更されていません: [1, 5, 2, 8, 3, 9, 4]
利用可能なアルゴリズム
kusosortは、以下の素晴らしい(?)アルゴリズムを提供します。
kusosort.bogo(data, verbose=False)
配列がソートされるまで、全体をランダムにシャッフルし続けます。
- 引数
data(list): ソートしたい数値または文字列のリストverbose(bool, optional):Trueに設定すると、ソート処理中の配列の状態をリアルタイムで表示します。デフォルトはFalseです。
警告: この関数はあなたのPCをフリーズさせる可能性があります。非常に小さい配列(3要素以下)でお試しください。verbose=Trueにすると途中経過が見られます。
# 2要素ならすぐに終わるはず
sorted_list = kusosort.bogo([2, 1], verbose=True)
# Sorting... current state: [1, 2]
#
print(sorted_list)
# [1, 2]
kusosort.bozo(data, verbose=False)
配列がソートされるまで、ランダムに選んだ2つの要素を交換し続けます。bogoと同様に危険です。
- 引数
data(list): ソートしたい数値または文字列のリストverbose(bool, optional):Trueに設定すると、ソート処理中の配列の状態をリアルタイムで表示します。デフォルトはFalseです。
sorted_list = kusosort.bozo(["b", "a"], verbose=True)
# Sorting... current state: ["a", "b"]
#
print(sorted_list)
# ['a', 'b']
kusosort.stalin(data)
配列を先頭から見ていき、前の要素より小さいものをすべて削除(粛清)します。
- 引数
data(list): ソートしたい数値または文字列のリスト
result = kusosort.stalin([1, 5, 2, 6, 3])
print(result)
# [1, 5, 6]
kusosort.abe(data)
配列を先頭から見ていき、各要素を「それまでに出現した最大値」で上書きします。
- 引数
data(list): ソートしたい数値または文字列のリスト
data = [3, 5, 2, 8, 4]
result = kusosort.abe(data)
print(result)
# [3, 5, 5, 8, 8]
kusosort.miracle(data, max_attempts=10)
奇跡が起きて配列がソートされるのを待ちます。max_attempts回チェックしてソートされていなければ諦めます。
- 引数:
-
data(list): ソートしたい数値または文字列のリスト。 -
max_attempts(int, optional): 奇跡を待つ試行回数。デフォルトは10回です。
-
result = kusosort.miracle([3, 1, 2], max_attempts=5)
# The miracle did not happen... (x5)
# The miracle didn't happen, and the list was not sorted.
print(result)
# [3, 1, 2]
kusosort.quantum_bogo(data, num_universes=1)
指定された数の並行宇宙で、それぞれ1回だけシャッフルを行います。成功した宇宙と破壊された宇宙の結果を報告します。
- 引数:
-
data(list): ソートしたい数値または文字列のリスト。 -
num_universes(int, optional): 観測する並行宇宙の数。デフォルトは1です。
-
result = kusosort.quantum_bogo([3, 1, 2], num_universes=5)
# Executing Quantum Bogo Sort across 5 universes...
# Universe 1 was destroyed.
# Universe 2: Sort successful! Result: [1, 2, 3]
# Universe 3 was destroyed.
# Universe 4 was destroyed.
# Universe 5 was destroyed.
print(result)
# [3, 1, 2]
貢献
面白いクソソートのアイデアがあれば、ぜひIssueやPull Requestを送ってください!
ライセンス
このプロジェクトはMITライセンスです。
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kusosort-0.2.0.tar.gz.
File metadata
- Download URL: kusosort-0.2.0.tar.gz
- Upload date:
- Size: 9.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d7d671798c2d374e8e721f0ff82919ed6b0ce789c93887fddfde8aa7c46a126b
|
|
| MD5 |
e47f7b6aa7d245ae3e375ff64c086f6d
|
|
| BLAKE2b-256 |
8697c5212ceb378aa70539744913e2eec41eeec23b326fafad966f563b2c8ff0
|
File details
Details for the file kusosort-0.2.0-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: kusosort-0.2.0-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 88.5 kB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
31b0eeda29cfe98d7b3166e14d8f68726c4aab993ef9691198300d7a9acd393b
|
|
| MD5 |
064fbc8c43699e34a7b6c7c7fcdc1586
|
|
| BLAKE2b-256 |
fbb2dc8f5011d0c8b99c1242a76c31ae73d53eecba7fe5a46d6503d989543bb2
|