Trò chơi đánh bạc tết trung thu


11

Ngày mai là tết trung thu, và theo tinh thần của ngày lễ đó, tôi sẽ giới thiệu một trò chơi đánh bạc mà chúng tôi (người từ Hạ Môn ) chơi trong kỳ nghỉ!

Quy tắc

Trò chơi được chơi với sáu con xúc xắc 6 mặt. Các kết hợp số khác nhau có các cấp bậc khác nhau, với sự nhấn mạnh đặc biệt vào bốn và số. Công việc của bạn là viết một chương trình / chức năng sẽ xếp hạng tay, đưa ra một cuộn 6 con xúc xắc. Dưới đây là các thứ hạng (Tôi đã sửa đổi / đơn giản hóa các quy tắc một chút):

hàng ngũ

Tôi đoán chỉ người Trung Quốc mới có thể thực hiện thử thách này! Được rồi, tốt, đây là một số giải thích tiếng Anh.

  • 0: 4 bốn và 2 cái.
  • 1: 6 giờ.
  • 2: 6 cái.
  • 3: 6 của bất kỳ loại nào ngoại trừ bốn và những người.
  • 4: 5 giờ.
  • 5: 5 của bất kỳ loại nào ngoại trừ bốn.
  • 6: 4 giờ.
  • 7: Thẳng. (1-6)
  • 8: 3 giờ.
  • 9: 4 của bất kỳ loại nào ngoại trừ 4.
  • 10: 2 giờ.
  • 11: 1 bốn.
  • 12: Không có gì.

Đầu vào

6 số, một mảng gồm 6 số hoặc một chuỗi gồm 6 số đại diện cho các giá trị của 6 cuộn súc sắc từ 1-6

Đầu ra

Chương trình / chức năng của bạn có thể trả về / xuất bất cứ thứ gì để chỉ ra thứ hạng, miễn là mỗi thứ hạng được chỉ định bởi một đầu ra và ngược lại. Ví dụ. Sử dụng các số 0-12, 1-13, v.v.

Ví dụ (Sử dụng 0-12 làm đầu ra)

[1,1,1,1,1,1]->2
[1,4,4,4,1,4]->0
[3,6,5,1,4,2]->7
[1,2,3,5,6,6]->12
[3,6,3,3,3,3]->5
[4,5,5,5,5,5]->5

Đây là môn đánh gôn, vì vậy số byte ngắn nhất sẽ thắng!


(Tôi đã đặt cái này vào hộp cát, nhưng tôi muốn thời gian là đúng. Tôi đã cố gắng hết sức có thể, xin vui lòng cho tôi biết nếu có bất kỳ sự làm rõ nào cần thiết.)
Quintec

@Shaggy Vì vậy, OP nói rằng đầu ra 0-12 hoặc 1-13 thay vào đó
Shieru Asakoto

@Shaggy Như tôi đã nói trong câu hỏi, đầu ra không nhất thiết phải tương ứng với số nhãn. Số bị bỏ qua và các khoảng trống ngẫu nhiên trong hình ảnh là để đơn giản hóa các quy tắc một chút - thực sự không có quy tắc nhất định cho truyền thống này, đây chỉ là cách giải thích của tôi.
Quintec

Có nên không [1,2,3,5,6,6]->13??
J.Doe

@ J.Doe Các ví dụ / trường hợp thử nghiệm sử dụng các chỉ số làm kết quả thay vì các giá trị. Không giống như các giá trị, 10không bỏ qua.
Kevin Cruijssen

Câu trả lời:


2

Than , 55 byte

≡⌈Eθ№θι⁶I⁻²⌕14§θχ⁵I⁻⁵⁼⁵№θ4⁴⎇⁼№θ4⁴§60⁼№θ1²9¹7I⁻¹²⌊⊘X²№θ4

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Không bỏ qua 10. Giải thích:

≡⌈Eθ№θι

Tính tần số cao nhất của bất kỳ chữ số nào.

⁶I⁻²⌕14§θχ

Nếu có 6 loại, thì trừ vị trí của chữ số trong chuỗi 14từ 2. Điều này dẫn đến 1 cho 6 4s, 2 cho 6 1s và 3 cho 6 của bất kỳ thứ gì khác.

⁵I⁻⁵⁼⁵№θ4

Nếu có 5 loại, thì kết quả là 5 trừ khi có 5 4s, trong trường hợp 1 bị trừ.

⁴⎇⁼№θ4⁴§60⁼№θ1²9

Nếu có 4 loại, thì nếu có 4 4s thì kết quả là 6 trừ khi có 2 1 trong trường hợp kết quả là 0, nếu không thì kết quả là 9.

¹7

Nếu tất cả các chữ số khác nhau thì kết quả là 7.

I⁻¹²⌊⊘X²№θ4

Nếu không, kết quả là 12 - (4 >> (3 - # của 4s)).


Có vẻ là cách tốt nhất để chấp nhận câu trả lời ngắn nhất, vì vậy đó là điều tôi sẽ làm :) Thật không may, không có nhiều người nhìn thấy và nâng cao câu trả lời của bạn ...
Quintec

@Quintec Đó không phải là vấn đề; mọi người có nhiệm vụ nâng cao câu trả lời dựa trên sự khéo léo của thuật toán hoặc yếu tố khác khiến họ đánh giá cao câu trả lời.
Neil

10

JavaScript (ES6), 88 byte

a=>a.map(o=n=>[x=o[n]=-~o[n],6,,,21,9,8^o[1]][a=x<a?a:x])[5]|[,1,4,5,o[1]&2|8,2,4][o[4]]

Hãy thử trực tuyến! hoặc Kiểm tra tất cả các cuộn có thể!

Xuất ra một số nguyên theo ánh xạ sau:

 Rank | Output       Rank | Output
------+--------     ------+--------
   0  |  31            7  |   7
   1  |  12            8  |   5
   2  |  14            9  |  21
   3  |   8           10  |   4
   4  |  11           11  |   1
   5  |   9           12  |   0
   6  |  29

Làm sao?

phương pháp

Đầu ra được tính bằng cách thực hiện một chút HOẶC giữa:

  • F
  • M

Ngoại lệ:

  • F=44b4a
  • M=66b6a

Bàn

FM

F01234một4b56MHOẶC LÀ0145số 81024166767141466200145số 81024300145số 8102442121212121293123215999131391111136mộtsố 8số 891213số 81010126b141415141514141414

M3M3MF= =3

Thí dụ

M= =1F= =1

6 HOẶC LÀ 1= =7

77

Đã bình luận

a =>                   // a[] = input array, reused as an integer to keep track of the
  a.map(               //       maximum number of occurrences of the same dice (M)
    o =                // o = object used to count the number of occurrences of each dice
    n =>               // for each dice n in a[]:
    [                  //   this is the lookup array for M-bitmasks:
      x =              //     x = o[n] = number of occurrences of the current dice
        o[n] = -~o[n], //     increment o[n] (we can't have M = 0, so this slot is not used)
      6,               //     M = 1 -> bitmask = 6
      ,                //     M = 2 -> bitmask = 0
      ,                //     M = 3 -> bitmask = 0
      21,              //     M = 4 -> bitmask = 21
      9,               //     M = 5 -> bitmask = 9
      8 ^ o[1]         //     M = 6 -> bitmask = 14 for six 1's, or 8 otherwise
    ][a =              //   take the entry corresponding to M (stored in a)
        x < a ? a : x] //   update a to max(a, x)
  )[5]                 // end of map(); keep the last value
  |                    // do a bitwise OR with the second bitmask
  [                    // this is the lookup array for F-bitmasks:
    ,                  //   F = 0 -> bitmask = 0
    1,                 //   F = 1 -> bitmask = 1
    4,                 //   F = 2 -> bitmask = 4
    5,                 //   F = 3 -> bitmask = 5
    o[1] & 2 | 8,      //   F = 4 -> bitmask = 10 if we also have two 1's, 8 otherwise
    2,                 //   F = 5 -> bitmask = 2
    4                  //   F = 6 -> bitmask = 4
  ][o[4]]              // take the entry corresponding to F (the number of 4's)

5

R , 100 byte

Mã hóa điểm số như một loạt các điều kiện được lập chỉ mục. Đơn giản hơn cách tiếp cận chuỗi-regex đầu tiên của tôi.

Chỉnh sửa- sửa lỗi và bây giờ xếp hạng tất cả các cuộn.

function(d,s=sum(d<2))min(2[s>5],c(11,10,8,6-6*!s-2,4,1)[sum(d==4)],c(7,12,12,9,5,3)[max(table(d))])

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



2

Python 2 ,  148  119 byte

-27 byte nhờ vào ovs (1. sử dụng .countcho phép mapsử dụng a; 2. loại bỏ dự phòng 0trong lát; 3. sử dụng inthay vì a max; 4. rút ngắn (F==4)*O==2thành F==4>O==2[kể từ khi đánh gôn F>3>O>1]]

C=map(input().count,range(1,7))
O,F=C[::3]
print[F>3>O>1,F>5,O>5,6in C,F>4,5in C,F>3,all(C),F>2,4in C,F>1,F,1].index(1)

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


@ovs oh heh .count> _ <đẹp
Jonathan Allan

Một gợi ý cuối cùng: Như dchỉ cần một, đây là một chương trình đầy đủ .
trứng


@ovs - cảm ơn vì tất cả việc chơi golf của bạn. Lưu hai cái khác để khởi động.
Jonathan Allan

Gotta yêu trăn có điều kiện xích! Ngoài ra, thông số kỹ thuật bây giờ không bỏ qua số 10
Quintec

1

Bình thường, 60 byte

eS[@[ZhZ2 4*6hq2hJuXtHG1Qm0Q8hT)@J3*5hSJ*Tq6hJ*<3KeSJ@j937TK

Bản đồ để xếp hạng đảo ngược, 0-12. Dùng thử trực tuyến tại đây hoặc xác minh tất cả các trường hợp thử nghiệm cùng một lúc tại đây .

Ánh xạ đầy đủ được sử dụng như sau:

12: 4 fours and 2 ones.
11: 6 fours.
10: 6 ones.
 9: 6 of any kind except fours and ones.
 8: 5 fours.
 7: 5 of any kind except for fours.
 6: 4 fours.
 5: Straight. (1-6)
 4: 3 fours.
 3: 4 of any kind except 4.
 2: 2 fours.
 1: 1 four.
 0: Nothing.

Điều này hoạt động bằng cách ánh xạ các giá trị xúc xắc theo tần số, sau đó tính giá trị của một số quy tắc và lấy mức tối đa của tập hợp.

Implicit: Q=eval(input()), Z=0, T=10

JuXtHG1Qm0Q   Input mapping
 u     Q      Reduce each element of the input, as H, ...
        m0Q   ...with initial value, G, as an array of 6 zeroes (map each roll to 0)
   tH           Decrement the dice roll
  X  G1         Add 1 to the frequency at that point
J             Store the result in J

@[ZhZ2 4*6hq2hJuXtHG1Qm0Q8hT)@J3   Rule 1 - Values for sets including 4
  Z                               *0
   hZ                             *1 (increment 0)
     2                            *2
       4                          *4
              JuXtHG1Qm0Q          Input mapping (as above)
             h                     First value of the above - i.e. number of 1's
           q2                      1 if the above is equal to 2, 0 otherwise
        *6h                       *Increment and multiply by 6
                                   Maps to 12 if there are 2 1's, 6 otherwise
                         8        *8
                          hT      *11 (increment 10)
 [                          )      Wrap the 7 starred results in an array
                             @J3   Get the 4th value of the input mapping - i.e. number of 4's
@                                  Get the value at that position in the array

*5hSJ   Rule 2 - Straight
  hSJ   Smallest frequency in input mapping (first, sort, J)
        For a straight, smallest value will be 1, 0 otherwise
*5      Multiply by 5

*Tq6hJ   Rule 3 - 6 1's
    hJ   Frequency of 1's (first value from input mapping)
  q6     1 if the above == 6, 0 otherwise
*T       Multiply by 10

*<3KeSJ@j937TK   Rule 4 - 4,5,6 of a kind, other than 4's
   KeSJ          Get the max frequency from input mapping, store in K
        j937T    [9,3,7]
       @     K   Get the element at K'th position in the above (modular indexing)
 <3K             1 if 3<K, 0 otherwise
*                Multiply the previous 2 results

eS[   Wrapping it all up!
  [   Wrap all the above rules in an array
eS    Take the max value of the above, implicit print

1

Võng mạc , 137 126 byte

4
A
O`.
^11A+
0
1+$
2
^A+
1
(.)\1{5}
3
^.A+
4
.?(.)\1{4}.?
5
^..A+
6
12356A
7
.+AAA$
8
.*(.)\1{3}.*
9
.+AA$
10
.+A$
11
.{6}
12

-11 byte nhờ @Neil .

Đầu ra là 0-indexed ( 0..12).

Hãy thử trực tuyến hoặc xác minh tất cả các trường hợp thử nghiệm .

Giải trình:

Thay thế mỗi 4 bằng một 'A':

4
A

Sắp xếp tất cả các chữ số đầu vào (chữ A sẽ ở phía sau):

O`.

Mỗi hai dòng khác thay thế đầu vào bằng đầu ra dự kiến:

Regex         Replacement  Explanation

^11A+         0            starts with "11", followed by any amount of A's
1+$           2            ends with any amount of 1s
^A+           1            starts with any amount of A's
(.)\1{5}      3            six of the same characters
^.A+          4            starts with any character, followed by any amount of A's
.?(.)\1{4}.?  5            five of the same characters,
                           with optionally a leading or trailing character
^..A+         6            starts with any two characters, followed by any amount of A's
12356A        7            literal "12356A" match
.+AAA$        8            any amount of leading characters, ending with three A's
.*(.)\1{3}.*  9            four of the same characters,
                           with optionally any amount of leading/trailing chars
.+AA$         10           any amount of leading characters, ending with two A's
.+A$          11           any amount of leading characters, ending with a A
.{6}          12           any six characters

1
Rất thông minh, nhưng tôi nghĩ bạn có thể tiến thêm một bước và thay thế 4bằng thứ gì đó ngoài phạm vi 1-6để tự động sắp xếp đến một đầu (không chắc nó có tạo ra sự khác biệt mà bạn sắp xếp không).
Neil

@Neil Ah, thật là thông minh! Cảm ơn.
Kevin Cruijssen

1

05AB1E , 57 55 byte

4¢4@U.M¢©5-Di14¹нk2αë>Di5X-ë>i9X3*-¹1¢2Ê*ë®i7ë¹4¢o;ï12α

Câu trả lời của Char @ Port của @Neil , vì cách tiếp cận ban đầu của tôi đã ở mức 60 byte và tôi vẫn chưa hoàn thành. Câu trả lời hiện tại của tôi có thể có thể được chơi golf nhiều hơn, mặc dù.

Nhập dưới dạng danh sách các chữ số.

Hãy thử trực tuyến hoặc xác minh tất cả các trường hợp thử nghiệm .

Giải trình:

4¢              # Count the amount of 4s in the (implicit) input-list
  4@            # Check if it's larger than or equal to 4
                # (results in 1 for truthy; 0 for falsey)
    U           # Pop and store that result in variable `X`
.M              # Push the most frequent number in the (implicit) input-list
  ¢             # Pop and push the count of that number in the (implicit) input-list
   ©            # Store it in the register (without popping)
5-Di            # If the maximum count - 5 is exactly 1 (so the maximum count is 6):
    14          #  Push 14
      ¹н        #  Push the first digit of the input-list
        k       #  Get its index in 14, resulting in -1, 0, or 1
         2α     #  Take the absolute difference with 2
                #  (This covers cases 1, 2, and 3)
ë>Di            # Else-if the maximum count - 5 + 1 is exactly 1 (so the maximum count is 5):
    5           #  Push 5
     X-         #  And subtract variable `X`
                #  (This covers cases 4 and 5)
ë>i             # Else-if the maximum count - 5 + 2 is exactly 1 (so the maximum count is 4):
   9            #  Push 9
    X3*         #  Multiply variable `X` by 3
       -        #  And subtract it from the 9
        ¹1¢     #  Count the amount of 1s in the input-list
           2Ê   #  Check if it's NOT equal to 2 (1 if truthy; 0 if falsey)
             *  #  Multiply it with the 9 or 6
                #  (This covers cases 0, 6, and 9)
ë®i             # Else-if the maximum count is 1:
   7            #  Push a 7
                #  (This covers case 7)
ë               # Else (maximum count is 2 or 3):
 ¹4¢            #  Count the amount of 4s in the input-list
    o           #  Take 2 to the power this count
              #  Halve and floor it
       12α      #  And take the absolute difference with 12
                #  (This covers cases 8, 10, 11, and 12)
                # (Output the top of the stack implicitly as result)

0

Ruby , 100 byte

->a{%w(^2.*4$ 6$ ^6 6 5$ 5 4$ ^1*$ 3$ 4 2$ 1$ .).index{|b|/#{b}/=~([1,*a,4].map{|c|a.count(c)}*'')}}

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

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

Đếm số lần xuất hiện của mỗi số trong mảng, thêm số 1s và nối thêm số 4s.

Sau đó, cố gắng để phù hợp với các mẫu regex khác nhau.

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.