Kiểm tra giá trị bàn tay cho Mahjong đơn phù hợp


12

Mahjong là một trò chơi xếp gạch rất phổ biến ở châu Á. Nó thường được chơi với bốn người chơi và mục tiêu của trò chơi là trở thành người đầu tiên hoàn thành một ván bài hợp lệ bằng cách sử dụng các ô. Trong mạt chược có ba bộ đồ gạch cộng với gạch danh dự - đối với thử thách này, chúng tôi sẽ chỉ xem xét các bàn tay được hình thành bằng cách sử dụng gạch từ một bộ đồ duy nhất.

Gạch được đánh số từ 1đến 9, và có chính xác bốn bản sao của mỗi ô. Một bàn tay hợp lệ bao gồm bốn bộ ba và một cặp, với tổng số mười bốn gạch.

Một bộ ba có thể là:

  • Một bộ ba, ba của cùng một lát (ví dụ 444), hoặc
  • Một chuỗi ba gạch liên tiếp (ví dụ 123hoặc 678không 357). Trình tự không bọc (vì vậy 912là không hợp lệ).

Một cặp chỉ đơn giản là hai gạch giống nhau (ví dụ 55).

Các thách thức

Đưa ra một bàn tay hợp lệ của mười bốn gạch, xác định điểm số của nó dựa trên các tiêu chí sau:

Condition                Description                                 Point/s
-------------------------------------------------------------------------------
Straight                 Contains the sequences 123 456 789          1
Identical sequences      Contains two identical sequences            1
All simples              Only 2-8, no 1s or 9s                       1
All sequences            All sets of three are sequences             1
All triplets             All sets of three are triplets              2
Flush                    Single-suit hand (always applies)           5

(Ghi điểm ở đây dựa trên các quy tắc mạt chược của Nhật Bản, nhưng được đơn giản hóa rất nhiều để làm cho thông số kỹ thuật bớt lộn xộn hơn.)

Điểm của một bàn tay là tổng số điểm cho các điều kiện mà nó thỏa mãn. Nếu một bàn tay có thể bị phân hủy theo nhiều cách, hãy thực hiện phân tách điểm cao nhất.

Bàn tay đầu vào được đảm bảo là hợp lệ, tức là mười bốn ô từ 1 đến 9 và mỗi ô xuất hiện nhiều nhất bốn lần và có thể được coi là đã được sắp xếp. Đầu vào là danh sách các chữ số (dưới dạng chuỗi hoặc danh sách số nguyên phẳng) thông qua STDIN, đối số hàm hoặc dòng lệnh. Đầu ra có thể là STDOUT hoặc giá trị trả về.

Các trường hợp thử nghiệm

22233355777888  ->  8  # 222 333 55 777 888, flush + all simp. + all trip.
11112345678999  ->  6  # 111 123 456 789 99, flush + straight
11123456788999  ->  5  # 111 234 567 88 999, flush only (no straight)
23344455566788  ->  7  # 234 345 456 567 88, flush + all simp. + all seq.
33334444555566  ->  8  # 33 345 345 456 456, flush + all simp. + all seq. + identical seq.
11122233377799  ->  7  # 111 222 333 777 99, flush + all trip. (no identical seq.)
12344556678889  ->  8  # 123 456 456 789 88, flush + all seq. + straight + identical seq.
11344556678999  ->  5  # 11 345 456 678 999, flush only (no identical seq.)
22233344455566  ->  8  # 222 333 444 555 66, flush + all simp. + all trip.
11112233344555  ->  5  # 111 123 234 345 55, flush only

Đối với ví dụ thứ năm, mặc dù có hai cặp trình tự giống hệt nhau, chỉ cần một người có mặt để đạt được điểm. Sự phân tách 345 345 345 345 66sẽ ghi điểm như nhau, trong khi 333 345 444 555 66điểm số tồi tệ hơn.

Chấm điểm

Đây là , vì vậy giải pháp trong vài byte nhất sẽ thắng. Tiêu chuẩn áp dụng.


Thử thách liên quan: Bạn còn chờ gì nữa? (Một người giải mạt chược)

Câu trả lời:


1

J (tạm biệt)

Bạn cần cài đặt phiên bản J mới nhất .

i=:>:@i.9
q=:,/^:4>@:{(i.9);(i.;i.;i.;i.)16
s=:3 :'(>./((5+([:(*./)(3*i.3)&e.)+(-.@:(-:~.))+((*./)@:(6&>:))+2*((*./)@:(6&<)))"1(}."1(y(-:/:~"1)"1((([:{&(i,.i){.),[:,/[:{&(((>:@i.7)+"0 1(i.3)),|:3 9$i)}.)"1 q))#q)))+([:(*./)[:-.((1 9)&e.))y'

Gọi hàm svới một danh sách các số nguyên. Ví dụ: tập lệnh ví dụ sau xác minh các trường hợp thử nghiệm ở trên:

#!/usr/bin/jconsole
i=:>:@i.9
q=:,/^:4>@:{(i.9);(i.;i.;i.;i.)16
s=:3 :'(>./((5+([:(*./)(3*i.3)&e.)+(-.@:(-:~.))+((*./)@:(6&>:))+2*((*./)@:(6&<)))"1(}."1(y(-:/:~"1)"1((([:{&(i,.i){.),[:,/[:{&(((>:@i.7)+"0 1(i.3)),|:3 9$i)}.)"1 q))#q)))+([:(*./)[:-.((1 9)&e.))y'


echo (s 2 2 2 3 3 3 5 5 7 7 7 8 8 8)=8
echo (s 1 1 1 1 2 3 4 5 6 7 8 9 9 9)=6
echo (s 1 1 1 2 3 4 5 6 7 8 8 9 9 9)=5
echo (s 2 3 3 4 4 4 5 5 5 6 6 7 8 8)=7
echo (s 3 3 3 3 4 4 4 4 5 5 5 5 6 6)=8
echo (s 1 1 1 2 2 2 3 3 3 7 7 7 9 9)=7
echo (s 1 2 3 4 4 5 5 6 6 7 8 8 8 9)=8
echo (s 1 1 3 4 4 5 5 6 6 7 8 9 9 9)=5
echo (s 2 2 2 3 3 3 4 4 4 5 5 5 6 6)=8
echo (s 1 1 1 1 2 2 3 3 3 4 4 5 5 5)=5

exit''
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.