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, pray=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回です。

    • pray(function); 奇跡の関数.ここには,あなたの信仰心をこめてください。

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を送ってください!

ライセンス

このプロジェクトは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.1.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.1-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.1.tar.gz.

File metadata

  • Download URL: kusosort-0.2.1.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.1.tar.gz
Algorithm Hash digest
SHA256 3db615210b824ef6fbcfbad9ad935b0a47c9cec7a3bff5d9ada095c8e3dd68ca
MD5 4426de4d768d9862f97ebaa066eb5545
BLAKE2b-256 e2d3879cb8cde59a248a31ca4ebb4b6dc7f77374693778c13634e6c25d27383a

See more details on using hashes here.

File details

Details for the file kusosort-0.2.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: kusosort-0.2.1-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.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 e1a2cc0e7080d61a54b2c34d43087d7cee3d96d9196f82bb69a7fd2a3d4b9e7a
MD5 40b36ee69c73a67b26d548f0dacca5ca
BLAKE2b-256 be92127f40d8e67c988443ece8a83fe34c1e0a59367642c11014740f40c890ac

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