Chơi bài tốt nhất ở Euchre


13

Đầu vào:

Thứ nhất
Một mảng gồm ba thẻ đại diện cho các thẻ được chơi bởi mỗi người chơi được định dạng như

[JD][TH][9S]

Đại diện

Jack of Diamonds, 10 of Hearts, and Nine of Spades.

Khi bạn luôn ngồi đối diện với đồng đội của mình ở Euchre, yếu tố thứ hai đại diện cho lối chơi của đồng đội của bạn. Đây, cái TH.

Thứ hai,
một Char, String, v.v ... đại diện cho bộ đồ chơi bài được định dạng như

S, D, C, H

đại diện

Spades, Diamonds, Clubs, Hearts

Thứ ba, một loạt bốn thẻ đại diện cho bàn tay của bạn được định dạng như

[KD][JC][QH][AS]

đại diện

King of Diamonds, Jack of Clubs, Queen of Hearts, Ace of Spades

Mục tiêu:

Cho ba đầu vào, xuất ra thẻ tốt nhất có thể để thêm vào các thẻ đã được chơi sao cho đáp ứng các tiêu chí sau:

  1. Nó sẽ ra tay nếu có thể, nếu không xuất ra thẻ có giá trị thấp nhất
  2. Nó nắm lấy tay nếu có thể, tuy nhiên nó sẽ không thổi phồng đồng đội của bạn trừ khi điều đó là không thể tránh khỏi
  3. Nếu nó có thể nắm trong tay, nó sẽ làm như vậy bằng cách sử dụng thẻ có giá trị thấp nhất. (Nếu bạn có một con át chủ bài và một nữ hoàng có thể giành chiến thắng, bạn sẽ đóng vai nữ hoàng).
  4. Bất kỳ vở kịch phải tuân theo phù hợp theo yêu cầu của các quy tắc ở phía dưới.

Định dạng đầu ra như [JD]

Định dạng

A - Ace
K - King
Q - Queen
J - Jack
T - Ten
9 - Nine

H - Hearts
D - Diamonds
S - Spades
C - Clubs

TH, 9D, JD, QH, AD, 9C, TC

Ví dụ

Trong: [QD][KD][9C], "C",[AH][JH][QH][9H]

Ngoài: 9H

Lý do: Vì các câu lạc bộ là át chủ bài, 9C đang thắng trong tay, chúng tôi không thể nắm lấy tay vì vậy chúng tôi nên loại bỏ thẻ thấp nhất của chúng tôi, ở đây 9H

Trong: [QD][KD][AD], "H",[AH][JH][QH][9H]

Ngoài: 9H

Lý do: Vì Trái tim là át chủ bài, Ace of Diamonds hiện đang chiến thắng, chúng tôi có thể đánh bại tay vì vậy chúng tôi nên sử dụng thẻ thấp nhất của mình, ở đây 9H

Trong: [QD][KD][TD], "D",[AD][JH][QH][9D]

Ngoài: 9D

Lý do: Vì kim cương là át chủ bài và chúng tôi hiện đang thắng ván bài, chúng tôi nên chơi 9D vì đối tác của chúng tôi hiện đang thắng ván bài, vì vậy chúng tôi muốn chơi 9DtrênAD

Trong: [QH][KH][JH], "D",[AD][JD][QH][9D]

Ngoài: QH

Lý do: Vì Kim cương là át chủ bài, đối thủ của chúng tôi đang chiến thắng với Bower bên trái JHChúng tôi có người cung cấp bên phải nhưng không thể đánh bại anh ta vì QH đã được dẫn dắt và chúng tôi phải tuân theo,QH

Trong: [QH][KH][JH], "D",[AD][JD][QC][9D]

Ngoài: JD

Lý do: Vì Kim cương là át chủ bài, đối thủ của chúng tôi đang chiến thắng với Bower bên trái JHChúng tôi có người cung cấp bên phải và vì chúng tôi không có ai Diamondscó thể vượt qua anh ta bằngJD

Điểm mạnh của thẻ Euchre

Nếu Hearts là át chủ bài:

JH
JD
AH
KH
QH
TH
9H

Xem Quy tắc Euchre nếu bạn không quen với sức mạnh của các thẻ khác nhau trong Euchre

Vì đây là Code-Golf, mã ngắn nhất sẽ thắng!

Chúc may mắn và vui vẻ!


2
Tôi nghĩ vở kịch nên được mô tả ở đây không phải với một liên kết.
Jonathan Allan

@Jonathan ALLan Tôi đã nghĩ về nó, nhưng nó được mô tả tốt hơn trong liên kết. Có lẽ không phải là thử thách tốt nhất cho những người không quen với trò chơi. Trừ khi họ muốn học trên bay.
jacksonecac

Ví dụ với 9Dkết quả có trái tim được đặt là trumps (mặc dù tôi không nghĩ rằng nó ảnh hưởng đến kết quả này).
Jonathan Allan

@Jonathan ALLan bắt tốt, cảm ơn bạn.
jacksonecac

1
@jacksonecac cảm ơn vì vấn đề này, tôi đã vui vẻ với nó.
Dave

Câu trả lời:


2

Perl - 557 532 511 490 482 384 363

($p,$t,$h)=@ARGV;%L=(H=>D,D=>H,C=>S,S=>C);$B=%L{$t};$_="\]$p$h\[";s/(.$t)/0$1/g;s/J$B/01$B/;s/0J/00/;s/J/R/g;s/9/Z/g;($T,@C)=split/\]\[/,$_;$s=$C[0];$s=~s/.+(.)/$1/;$s=~s/$t/0/;$X=(sort@C[0..2])[0];@M=@C[3..6];@F=(grep{/$s/}@M);@M=@F if@F;$w=(sort@M)[@M-1];push@M,$X;foreach$g(sort@M){$g ne$X?$b=$g:last}$_=$C[1]eq$X||!$b?$w:$b;s/.(..)/$1/;s/Z/9/;s/0|1|R/J/;print

Làm thế nào nó hoạt động

Hãy thử trực tuyến!

Đầu tiên, nó đọc các đối số và tìm thấy bộ quần áo bên trái (jack có cùng màu với át chủ bài) với một tra cứu băm:

($p,$t,$h)=@ARGV;
%L=(H=>D,D=>H,C=>S,S=>C);
$B=%L{$t};

Sau đó, nó kết hợp tất cả các thẻ thành một chuỗi và thực hiện một số thay thế, làm cho các thẻ tự nhiên sắp xếp theo đúng thứ tự cho euchre:

$_="\]$p$h\[";
s/(.$t)/0$1/g; # trump cards start with '0'
s/J$B/01$B/;   # left-bauer's 'J' changes to '01', making it trump
s/0J/00/;      # right-bauer's 'J' changes to '0'
s/J/R/g;       # all other jacks have 'J' changed to 'R'
s/9/Z/g;       # all 9s change to Z
($T,@C)=split/\]\[/,$_;

Ở cuối khối này, chuỗi thẻ sau đó được phân chia trên dấu ngoặc, xây dựng một mảng của tất cả các thẻ trong đó:

  • chỉ số 0 = thẻ dẫn của đối thủ

  • chỉ số 1 = thẻ của đồng đội

  • chỉ số 2 = thẻ của đối thủ khác

  • chỉ số 3-6 đại diện cho bàn tay

Bộ đồ dẫn được phân tích cú pháp từ thẻ đầu tiên, nhưng bộ đồ thay đổi thành '0' để thể hiện át chủ bài nếu át chủ bài:

$s=$C[0];
$s=~s/.+(.)/$1/;
$s=~s/$t/0/;

Thẻ chơi tốt nhất được tìm thấy bằng cách sắp xếp ba thẻ đầu tiên và lấy thẻ đầu tiên:

$X=(sort@C[0..2])[0];

Các thẻ có thể chơi được tìm thấy. Nếu bất kỳ thẻ nào trong tay phù hợp với bộ đồ dẫn, thì chỉ những thẻ đó còn lại. Mặt khác, tất cả các thẻ được coi là có thể chơi được:

@M=@C[3..6];
@F=(grep{/$s/}@M);
@M=@F if@F;

Thẻ 'throwaway' được tìm thấy bằng cách trả lại thẻ cuối cùng trong mảng thẻ có thể chơi được sắp xếp:

$w=(sort@M)[@M-1];

Thẻ 'chiến thắng' thấp nhất có thể thắng được mánh khóe được tìm thấy bằng cách thêm thẻ cao nhất đang chơi vào mảng thẻ có thể chơi, sắp xếp mảng và lặp lại cho đến khi tìm thấy thẻ cao nhất đang chơi. Thẻ 'chiến thắng' là thẻ từ lần lặp trước:

push@M,$X;
foreach$g(sort@M){$g ne$X?$b=$g:last}

Chơi đúng sau đó được đánh giá. Thẻ 'ném đi' được chọn nếu bất kỳ điều nào sau đây là đúng:

  1. Thẻ tốt nhất trên bàn có chỉ số là 1 trong mảng chưa sắp xếp của tất cả các thẻ, nghĩa là nó thuộc về đồng đội của chúng tôi
  2. Việc tìm kiếm thẻ 'chiến thắng' thấp nhất trở nên vô hiệu, có nghĩa là thẻ tốt nhất của đối thủ của chúng tôi cao hơn tất cả các thẻ trong tay

Nếu không, thẻ 'chiến thắng' được trả lại:

$_=$C[1]eq$X||!$b?$w:$b;
s/.(..)/$1/; # remove the '0' that indicated trump
s/Z/9/;      # get those 9s back
s/0|1|R/J/;  # fix the jacks
print
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.