rbtying / shengji

An online version of shengji (a.k.a. tractor) and zhaopengyou (a.k.a. Finding Friends)

Home Page:https://robertying.com/shengji/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

System allowed triple played to save a pair

TractorPlayer opened this issue · comments

Robert,

Thanks for looking into it, but I think there is a misunderstanding of the situation. Let's say someone plays AAKK, and you have 777 8 9 10 10

Without long tuple protection, the system shall force you to play 77 10 10. (is this true?)
With long tuple protection, the system shall allow you to play 8 9 10 10 and save 777, but you could still play 77 10 10 if you want.

With or without the long tuple protection, my understanding is that you have to play 10 10 regardless.


What I'm reporting is the following: the system allowed a player to play 777 8 and save the pair 10 10, which I think is a bug. I believe under no circumstances shall a tuple be played in ordered to save a pair, regardless what the long tuple protection setting is.


Please confirm your understanding, and hopefully you can address this issue.

Originally posted by @TractorPlayer in #315 (comment)

Without long tuple protection, the system shall force you to play 77 10 10. (is this true?)

Yes, this is true

...the system allowed a player to play 777 8 and save the pair 10 10

So, what's happening here is that the play requirement decomposes as follows:

  • XXYY [tractor]
  • XX YY
  • XX Y Z

Since longer tuple protection is turned on, neither of the first two cases can be met (i.e. tractor or two pair). The remaining question is, how should the system handle the case where you have multiple potential pairs. In the current interpretation, the system doesn't care which pair you use (of the 777 and the 10 10), it just requires any one of them. It would also be valid to play 5 6 7 7, which is perhaps a more surprising result.

The root cause here is that the system does not take into account the idea that the player has allowed the tuple to be broken by providing part of it in the input. It's not clear to me that it should, though?