중추절 도박 게임


11

내일은 가을 중반 축제이며, 그 휴일의 정신에 따라, 우리 는 휴가 기간 동안 우리 ( 샤먼 사람들)가하는 도박 게임을 소개 할 것 입니다!

규칙

이 게임은 6 개의 6면 주사위로 진행됩니다. 숫자의 다른 조합은 다른 순위를 가지며, 4와 1을 특별히 강조합니다. 당신의 임무는 주사위 6 개가 주어진다면 손에 순위를 매기는 프로그램 / 기능을 작성하는 것입니다. 순위는 다음과 같습니다 (규칙을 약간 수정 / 간단 화했습니다).

계급

중국인 만이이 도전을 할 수있을 것 같아요! 좋아요, 여기 영어 설명이 있습니다.

  • 0 : 4-4와 2.
  • 1 : 6 네
  • 2 : 6 개
  • 4 : 4를 제외한 모든 종류의 6 개.
  • 4 : 5 네
  • 5 : 5를 제외한 모든 종류의 5.
  • 6 : 4-4.
  • 7 : 스트레이트. (1-6)
  • 8 : 3-4.
  • 9 : 4를 제외한 모든 종류
  • 10 : 2-4
  • 11 : 1 4
  • 12 : 아무것도 아니다.

입력

1-6의 6 주사위 롤 값을 나타내는 6 개의 숫자, 6 개의 숫자 배열 또는 6 개의 숫자 문자열

산출

각 순위가 하나의 출력으로 표시되고 그 반대의 경우에는 프로그램 / 기능이 순위를 표시하기 위해 무엇이든 반환 / 출력 할 수 있습니다. 전의. 숫자 0-12, 1-13 등 사용

예 (0-12를 출력으로 사용)

[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

이것은 코드 골프이므로 최단 바이트 수가 이깁니다!


(나는 이것을 샌드 박스에 넣었지만, 타이밍이 맞기를 원했다. 가능한 한 철저한 노력을 기울였다. 설명이 필요한지 알려주세요.)
Quintec

@Shaggy 따라서는 영업 이익 대신에 출력 0-12 또는 1-13 말한다
Shieru Asakoto

@Shaggy 질문에서 언급했듯이 출력이 레이블 번호와 반드시 일치 할 필요는 없습니다. 이미지의 건너 뛴 수와 임의의 간격은 규칙을 약간 단순화하는 것입니다.이 전통에 대한 명확한 규칙은 실제로 없으며 이것은 단지 내 해석입니다.
Quintec

그렇지 [1,2,3,5,6,6]->13않습니까 ??
J.Doe

@ J.Doe 예제 / 테스트 사례는 값 대신 결과로 인덱스를 사용합니다. 값과 10달리는 건너 뛰지 않습니다.
Kevin Cruijssen

답변:


2

, 55 바이트

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

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 10을 생략하지 않습니다.

≡⌈Eθ№θι

모든 숫자의 최고 주파수를 계산하십시오.

⁶I⁻²⌕14§θχ

6의 종류가 있으면 문자열 14에서 숫자의 위치를 ​​2에서 뺍니다. 결과적으로 1은 6 4s, 2는 6 1s, 3은 6입니다.

⁵I⁻⁵⁼⁵№θ4

5의 종류가있는 경우 5 4가 없으면 결과는 5이고,이 경우 1을 뺍니다.

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

4의 종류가있는 경우, 4 개의 4가있는 경우 결과는 0이 아니면 결과는 0이고 그렇지 않으면 결과는 9입니다.

¹7

모든 숫자가 다르면 결과는 7입니다.

I⁻¹²⌊⊘X²№θ4

그렇지 않으면 결과는 12-(4 >> (3-# of 4s))입니다.


... 그래서 나는 무엇을 할 거 야의 : 불행하게도 많은없는 사람들이 톱하고 답변을 upvoted 것을, 가장 짧은 대답을 받아들이는 것이 가장 좋습니다 것 같다
Quintec

@Quintec 문제가 아닙니다. 사람들은 알고리즘의 독창성이나 그 답을 고맙게하는 다른 요소에 근거하여 답을 찬성해야합니다.

10

자바 스크립트 (ES6), 88 바이트

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]]

온라인으로 사용해보십시오! 또는 가능한 모든 롤을 테스트하십시오!

다음 매핑에 따라 정수를 출력합니다.

 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

어떻게?

방법

출력은 다음 사이에 비트 단위 OR을 수행하여 계산됩니다.

  • F
  • M

예외 :

  • F=44b4a
  • M=66b6a

FM

F01234a4b56MOR014581024166767141466200145810243001458102442121212121293123215999131391111136a889121381010126b141415141514141414

M3M3MF=3

M=1F=1

6 OR 1=7

77

댓글

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 바이트

색인을 조건부 색인 조건으로 묶습니다. 첫 번째 엄격한 정규식 접근법보다 간단합니다.

수정 된 버그 수정 및 이제 모든 롤 순위 지정

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))])

온라인으로 사용해보십시오!



2

파이썬 2 ,  148119  바이트

-27 OVS의 덕분 바이트 (1.의 .countA는 허용 map리던던트 2. 제거 사용될 0슬라이스하여,의 3. in라기보다 max, 제 단축 (F==4)*O==2F==4>O==2[이후에 golfed 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)

온라인으로 사용해보십시오!


@ovs oh heh .count> _ <nice
Jonathan Allan

마지막 제안 : d하나만 필요 하면 전체 프로그램으로 짧습니다 .
ovs

Python 3 버전 : 131 바이트
Adirio

@ovs-모든 골프 주셔서 감사합니다. 부팅 할 다른 두 개를 저장했습니다.
Jonathan Allan

파이썬 조건부 체인을 좋아해야합니다! 또한 스펙은 이제 숫자 10을 건너 뛰지 않습니다.
Quintec

1

Pyth, 60 바이트

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

0-12의 역순으로 매핑됩니다. 여기 에서 온라인으로 시도 하거나 모든 테스트 사례를 한 번에 확인 하십시오 .

사용되는 전체 매핑은 다음과 같습니다.

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.

이것은 주사위 값을 주파수에 매핑 한 다음 여러 규칙의 값을 계산하고 세트의 최대 값을 취함으로써 작동합니다.

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

망막 , 137 126 바이트

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

@Neil 덕분에 -11 바이트 .

출력은 0 색인 ( 0..12)입니다.

온라인으로 시도 하거나 모든 테스트 사례를 확인하십시오 .

설명:

4마다 'A'로 교체하십시오.

4
A

모든 입력 숫자를 정렬하십시오 (A는 뒤에 있음).

O`.

다른 두 줄은 입력을 예상 출력으로 바꿉니다.

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
매우 영리하지만 한 단계 더 나아가서 4범위 1-6를 벗어난 것으로 대체 하여 한쪽 끝으로 자동 정렬 할 수 있다고 생각합니다 (정렬하는 끝이 차이가 있는지 확실하지 않음).
Neil

@ 닐 아, 그것도 영리하다! 감사.
Kevin Cruijssen

1

05AB1E , 57 55 바이트

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

내 초기 접근 방식이 이미 60 바이트이고 아직 완료되지 않았기 때문에 @Neil 의 숯불 답변 포트 . 내 현재 답변은 아마 더 골프를 칠 수 있습니다.

자릿수 목록으로 입력하십시오.

온라인으로 시도 하거나 모든 테스트 사례를 확인하십시오 .

설명:

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

루비 , 100 바이트

->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)}*'')}}

온라인으로 사용해보십시오!

작동 방식 :

배열의 모든 숫자의 발생 횟수를 계산하고, 앞에 1을 더하고 4를 더합니다.

그런 다음 다른 정규식 패턴과 일치 시키십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.