Skip to content

Commit 7e2e0a1

Browse files
authored
feat/v4.0.0 (#73)
* feat: Bump up xiangting to 4.0.0 * feat: Change the stub type * feat: Remove undocumented custom Display implementation (#72) * feat: Change the signature of a function * test: Ignore PLR2004 (magic-value-comparison) in tests * docs: Update README * docs: Change examples * docs: Update docstring in lib.rs * docs: Update docstring in calculate.rs * docs: tweak * test: Split test files * test: Change the order of the tests * test: Add unit tests * chore: Bump up version to v4.0.0
1 parent 0fe4475 commit 7e2e0a1

16 files changed

Lines changed: 258 additions & 258 deletions

Cargo.lock

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "xiangting-py"
3-
version = "3.2.1"
3+
version = "4.0.0"
44
description = "Python bindings for xiangting"
55
authors = ["Apricot S."]
66
edition = "2024"
@@ -27,4 +27,4 @@ crate-type = ["cdylib"]
2727

2828
[dependencies]
2929
pyo3 = { version = "0.26.0", features = ["extension-module"] }
30-
xiangting = "3.2.1"
30+
xiangting = "4.0.0"

README.md

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ xiangting-py$ pip install .
4242

4343
## Usage
4444

45+
### Basic Usage
46+
4547
The hand is represented as an array of `list[int]`, where each element represents the count of a specific tile.
4648
The correspondence between the index and the tile is shown in the table below.
4749

@@ -67,17 +69,19 @@ Calculates the replacement number, which is equal to the deficiency number (a.k.
6769
from xiangting import calculate_replacement_number
6870

6971
# 123m456p789s11222z
70-
hand_14 = [
72+
hand = [
7173
1, 1, 1, 0, 0, 0, 0, 0, 0, # m
7274
0, 0, 0, 1, 1, 1, 0, 0, 0, # p
7375
0, 0, 0, 0, 0, 0, 1, 1, 1, # s
7476
2, 3, 0, 0, 0, 0, 0, # z
7577
]
7678

77-
replacement_number = calculate_replacement_number(hand_14, None)
79+
replacement_number = calculate_replacement_number(hand, None)
7880
assert replacement_number == 0
7981
```
8082

83+
### Handling Melds
84+
8185
In the calculation for a hand with melds (副露),
8286
the melded tiles can be included or excluded when counting tiles to determine if a hand contains four identical ones.
8387

@@ -92,8 +96,8 @@ from xiangting import (
9296
calculate_replacement_number,
9397
)
9498

95-
# 123m1z (3 melds)
96-
hand_4 = [
99+
# 123m1z
100+
hand = [
97101
1, 1, 1, 0, 0, 0, 0, 0, 0, # m
98102
0, 0, 0, 0, 0, 0, 0, 0, 0, # p
99103
0, 0, 0, 0, 0, 0, 0, 0, 0, # s
@@ -105,18 +109,19 @@ melds = [
105109
FuluMianzi.Shunzi(12, ClaimedTilePosition.LOW),
106110
FuluMianzi.Gangzi(24),
107111
FuluMianzi.Kezi(27),
108-
None,
109112
]
110113

111-
replacement_number_wo_melds = calculate_replacement_number(hand_4, None)
114+
replacement_number_wo_melds = calculate_replacement_number(hand, None)
112115
assert replacement_number_wo_melds == 1
113116

114-
replacement_number_w_melds = calculate_replacement_number(hand_4, melds)
117+
replacement_number_w_melds = calculate_replacement_number(hand, melds)
115118
assert replacement_number_w_melds == 2
116119
```
117120

121+
### Support for Three-Player Mahjong
122+
118123
In three-player mahjong, the tiles from 2m (二萬) to 8m (八萬) are not used.
119-
Additionally, melded sequences (明順子) are not allowed.
124+
In addition, melded sequences (明順子) are not allowed.
120125

121126
```python
122127
from xiangting import (
@@ -125,17 +130,17 @@ from xiangting import (
125130
)
126131

127132
# 1111m111122233z
128-
hand_13 = [
133+
hand = [
129134
4, 0, 0, 0, 0, 0, 0, 0, 0, # m
130135
0, 0, 0, 0, 0, 0, 0, 0, 0, # p
131136
0, 0, 0, 0, 0, 0, 0, 0, 0, # s
132137
4, 3, 2, 0, 0, 0, 0, # z
133138
]
134139

135-
replacement_number_4p = calculate_replacement_number(hand_13, None)
140+
replacement_number_4p = calculate_replacement_number(hand, None)
136141
assert replacement_number_4p == 2
137142

138-
replacement_number_3p = calculate_replacement_number_3_player(hand_13, None)
143+
replacement_number_3p = calculate_replacement_number_3_player(hand, None)
139144
assert replacement_number_3p == 3
140145
```
141146

docs/conf.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
project = "xiangting"
1010
copyright = "2024, Apricot S."
1111
author = "Apricot S."
12-
release = "3.2.1"
12+
release = "4.0.0"
1313
version = release
1414

1515

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@
55
from xiangting import calculate_replacement_number
66

77
# 123m456p789s11222z
8-
hand_14 = [
8+
hand = [
99
1, 1, 1, 0, 0, 0, 0, 0, 0, # m
1010
0, 0, 0, 1, 1, 1, 0, 0, 0, # p
1111
0, 0, 0, 0, 0, 0, 1, 1, 1, # s
1212
2, 3, 0, 0, 0, 0, 0, # z
1313
] # fmt: skip
1414

15-
replacement_number = calculate_replacement_number(hand_14, None)
15+
replacement_number = calculate_replacement_number(hand, None)
1616
assert replacement_number == 0
Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
calculate_replacement_number,
99
)
1010

11-
# 123m1z (3 melds)
12-
hand_4 = [
11+
# 123m1z
12+
hand = [
1313
1, 1, 1, 0, 0, 0, 0, 0, 0, # m
1414
0, 0, 0, 0, 0, 0, 0, 0, 0, # p
1515
0, 0, 0, 0, 0, 0, 0, 0, 0, # s
@@ -21,11 +21,10 @@
2121
FuluMianzi.Shunzi(12, ClaimedTilePosition.LOW),
2222
FuluMianzi.Gangzi(24),
2323
FuluMianzi.Kezi(27),
24-
None,
2524
]
2625

27-
replacement_number_wo_melds = calculate_replacement_number(hand_4, None)
26+
replacement_number_wo_melds = calculate_replacement_number(hand, None)
2827
assert replacement_number_wo_melds == 1
2928

30-
replacement_number_w_melds = calculate_replacement_number(hand_4, melds)
29+
replacement_number_w_melds = calculate_replacement_number(hand, melds)
3130
assert replacement_number_w_melds == 2
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@
88
)
99

1010
# 1111m111122233z
11-
hand_13 = [
11+
hand = [
1212
4, 0, 0, 0, 0, 0, 0, 0, 0, # m
1313
0, 0, 0, 0, 0, 0, 0, 0, 0, # p
1414
0, 0, 0, 0, 0, 0, 0, 0, 0, # s
1515
4, 3, 2, 0, 0, 0, 0, # z
1616
] # fmt: skip
1717

18-
replacement_number_4p = calculate_replacement_number(hand_13, None)
18+
replacement_number_4p = calculate_replacement_number(hand, None)
1919
assert replacement_number_4p == 2
2020

21-
replacement_number_3p = calculate_replacement_number_3_player(hand_13, None)
21+
replacement_number_3p = calculate_replacement_number_3_player(hand, None)
2222
assert replacement_number_3p == 3

pyproject.toml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "maturin"
44

55
[project]
66
name = "xiangting"
7-
version = "3.2.1"
7+
version = "4.0.0"
88
description = "Python bindings for xiangting"
99
authors = [{ name = "Apricot S." }]
1010
license = "MIT"
@@ -103,7 +103,8 @@ convention = "google"
103103
"PLR2004", # magic-value-comparison
104104
]
105105
"./tests/*" = [
106-
"S101", # assert
106+
"S101", # assert
107+
"PLR2004", # magic-value-comparison
107108
]
108109

109110
[tool.mypy]

0 commit comments

Comments
 (0)