Skip to main content

A collection of joke sorting algorithms implemented in C++ for Python.

Project description

kusosort

PyPI version License: MIT

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kusosort-0.2.0.tar.gz (9.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

kusosort-0.2.0-cp312-cp312-win_amd64.whl (88.5 kB view details)

Uploaded CPython 3.12Windows x86-64

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

Hashes for kusosort-0.2.0.tar.gz
Algorithm Hash digest
SHA256 d7d671798c2d374e8e721f0ff82919ed6b0ce789c93887fddfde8aa7c46a126b
MD5 e47f7b6aa7d245ae3e375ff64c086f6d
BLAKE2b-256 8697c5212ceb378aa70539744913e2eec41eeec23b326fafad966f563b2c8ff0

See more details on using hashes here.

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

Hashes for kusosort-0.2.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 31b0eeda29cfe98d7b3166e14d8f68726c4aab993ef9691198300d7a9acd393b
MD5 064fbc8c43699e34a7b6c7c7fcdc1586
BLAKE2b-256 fbb2dc8f5011d0c8b99c1242a76c31ae73d53eecba7fe5a46d6503d989543bb2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page