도전
Bar Dice는 주사위가 달린 바에서 플레이하는 간단한 게임입니다. 6 면체 주사위 5 개를 굴려서 최고의 핸드를 만드십시오.
스코어링은 동일한 숫자로 주사위의 가장 큰 수를 모으는 것을 기반으로합니다. 유효한 핸드가 되려면 각 핸드에 최소한 하나의 “에이스”또는 하나를 포함해야합니다. 에이스는 “와일드”의 역할을하며 다른 숫자와 쌍을 이룰 수 있습니다. 플레이어의 손의 힘은 먼저 자릿수와 그 자릿수에 따라 달라집니다. 예를 들어, 3이 4 인 손 (와일드 카운팅)은 5가 3 인 손보다 낫지 만 5가 2 인 손보다 낫지는 않습니다. Wikipedia 기사
에서 가져온
이것은 가장 높은 순위의 핸드가 6과 1로 이루어져 있고 가장 낮은 핸드는 1이없는 핸드입니다.
당신의 도전은 두 손을 잡고 어느 플레이어가 이겼는지 또는 묶었는지 반환하는 것입니다.
입력
1에서 6까지의 5 개의 숫자로 구성된 2 개의 정렬되지 않은 목록. 각 목록은 플레이어의 손을 나타냅니다. 입력 형식이 유연합니다.
산출
플레이어 1 또는 플레이어 2가 이겼는지 또는 동점인지를 나타내는 세 가지의 일관된 정적 값 (범위는 허용되지 않음). 무엇을 위해 어떤 값을 사용하고 있는지 답하십시오. 예를 들어, -1
P1이 이기면, 0
동점 일 1
경우, P2가 이기면 반환 할 수 있습니다 .
규칙
- 입력은 항상 유효합니다
- 각 핸드의 최고 점수 만 승자를 결정하는 데 사용됩니다. 타이 브레이커가 없습니다. 예를 들면,
[1,4,4,3,3]
타이 것[1,4,4,2,2]
대신 구분자로서 3의 2 개의를 사용. - 출력은 매번 선택한 3 가지 값 중 하나 여야합니다. 모든 음수를 간단히 매핑하는
P1 Wins
것은 허용되지 않으며 정규화되어야합니다. - 유효하지 않은 손, 즉 1이없는 손은 모든 유효한 손을 잃지 만 다른 모든 유효하지 않은 손과 묶습니다. 예,
[2,2,2,2,2]
관계[3,3,3,3,3]
. - 손의
[1,1,1,1,1]
수는 순위를 정하기 위해 유효한 6 세트로 간주됩니다. - 이것은 코드 골프 이므로 가장 짧은 바이트 수가 이깁니다.
예
#You guys are pretty good at finding edge-cases that break things. Good job!
Input: [2,1,5,6,6], [6,2,6,6,6]
Output: P1 Wins
Input: [2,4,5,6,6], [6,2,6,6,6]
Output: Tie
Input: [1,2,3,4,5], [5,4,3,2,1]
Output: Tie
Input: [1,5,5,3,2], [5,4,1,6,6]
Output: P2 Wins
Input: [3,2,2,2,1], [4,1,3,6,6]
Output: P1 Wins
Input: [1,1,1,1,1], [6,1,1,6,6]
Output: Tie
Input: [1,3,3,4,4], [1,2,2,5,5]
Output: P2 Wins
Input: [1,3,3,5,5], [1,3,3,2,2]
Output: P1 Wins
Input: [1,3,3,3,4], [1,1,3,3,3]
Output: P2 Wins
Input: [2,2,2,6,1], [5,3,3,1,2]
Output: P1 Wins
Input: [5,5,5,1,5], [1,1,1,1,1]
Output: P2 Wins
Input: [1,1,1,1,1], [1,1,5,1,1]
Output: P1 Wins
답변
젤리 , 17 14 바이트
ċⱮ6Ḣ©+$®aĖUṀ)M
두 목록의 목록을 인수로 사용 [1]
하여 플레이어 1 승리, [2]
플레이어 2 승리 및 [1, 2]
동점에 대해 리턴하는 모나드 링크 . TIO 링크는 이것을 표시하도록 정리합니다.
3 바이트를 절약 한 @JonathanAllan에게 감사합니다!
설명
) | For each input list (e.g. of one list 1,1,3,3,4)
ċⱮ6 | - Count each of 1..6 (e.g. 2,0,2,1,0,0)
$ | - Following as a monad:
Ḣ | - Head (number of 1s)
©︎ | - Copy to register
+ | - Add (e.g. 2,4,3,0,0)
®a | - Register logical and with this
Ė | - Enumerate (e.g. [1,2],[2,4],[3,3],[4,0],[5,0])
U | - Reverse each (e.g. [2,1],[4,2],[3,3],[0,4],[0,5])
Ṁ | - Max (e.g. 4,2)
M | Index/indices of maximal score
답변
R , 115 96 바이트
주세페 덕분에 -6 바이트.
Aaron Hayman 덕분에 -6 바이트.
JavaScript 응답 의 출력 형식에 따라 Arnauld 덕분에 -2 바이트 .
function(i,j)(f(i)-f(j))/0
f=function(x,s=tabulate(x,6),l=s[1]+s[-1]*!!s[1])max(l)*6+order(l)[5]
Inf
P1, NaN
넥타이, -Inf
P2에 대해 반환 합니다 .
f
각 손에 대한 점수를 계산하는 도우미 기능 을 사용합니다 . 점수는 다음과 같이 정의됩니다. d
가장 많이 반복 n
되는 숫자 와 반복 횟수를 지정하십시오. 그런 다음 점수는 6*n+d
하나 이상의 에이스 0
가 있고 에이스가없는 경우입니다. 그런 다음 가장 높은 점수를받은 플레이어를 찾아야합니다.
언 골프 드 :
f = function(x) {
s = tabulate(x, 6) # number of occurrences of each integer
l = s[1] + s[-1] * !!s[1] # add the number of wild aces to all values; set to 0 if s[1] == 0
max(l) * 6 + # highest number of repetitions (apart from aces)
order(l)[5] # most repeated integer (take largest in case of tie)
}
function(i, j){
sign(f(i) - f(j))
}
답변
자바 스크립트 (ES6), 97 90 바이트
로 입력을 (a)(b)
받습니다. +Infinity
P1, -Infinity
P2 또는 NaN
타이에 대해 반환 합니다 .
a=>b=>((g=(x,m)=>x>6?m*/1/.test(a):g(-~x,a.map(k=>n+=k<2|k==x,n=x/6)|m>n?m:n))()-g(a=b))/0
댓글
a => b => ( // a[] = dice of P1; b[] = dice of P2
( g = ( // g is a recursive function taking:
x, // x = dice value to test; initially, it is either undefined
// or set to a non-numeric value
m // m = maximum score so far, initially undefined
) => //
x > 6 ? // if x is greater than 6:
m * /1/.test(a) // return m, or 0 if a[] does not contain any 1
: // else:
g( // do a recursive call:
-~x, // increment x (or set it to 1 if it's non-numeric)
a.map(k => // for each dice value k in a[]:
n += // add 1 to n if:
k < 2 | // k is equal to 1
k == x, // or k is equal to x
n = x / 6 // start with n = x / 6
) | // end of map()
m > n ? // if m is defined and greater than n:
m // pass m unchanged
: // else:
n // update m to n
) // end of recursive call
)() // first call to g, using a[]
- g(a = b) // subtract the result of a 2nd call, using b[]
) / 0 // divide by 0 to force one of the 3 consistent output values
답변
05AB1E , 16 15 바이트
JonathanAllan 덕분에 -1 바이트
εWΘ*6L¢ć+°ƶà}ZQ
P1 승의 경우 [1, 0], 타이의 경우 [1, 1], P2 승의 경우 [0, 1]을 반환합니다.
2 개의 튜플 (주사위 수, 주사위 값)에서 사전 식 순서를 사용하는 대신 점수를 10 ** 주사위 수 * 주사위 값으로 계산합니다. 1 점수가없는 손 5.
ε } # map each hand to its computed score
WΘ # minimum == 1 (1 if the hand contains a 1, 0 otherwise)
* # multiply (sets hands without 1 to [0, 0, 0, 0, 0])
6L # range [1..6]
¢ # count occurences of each in the hand
ć # head extract (stack is now [2-count, ..., 6-count], 1-count)
+ # add the 1-count to all the other counts
° # 10**x
ƶ # multiply each element by its 1-based index
à # take the maximum
Z # maximum
Q # equality test (vectorizes)
답변
파이썬 2 , 85 81 80 바이트
lambda p:cmp(*[max((h.count(i)+h.count(i>1),i)*(1in h)for i in[6]+h)for h in p])
1
P1, 0
타이 및 -1
P2에 대해 반환 합니다 .
오징어 덕분에 -1 바이트
답변
펄 6 , 60 49 바이트
&[cmp]o*.map:{.{1}&&max (.{2..6}X+.{1})Z ^5}o&bag
반환 More
, Same
, Less
대한 P1 Wins
, Tie
, P2 Wins
.
설명
*.map: # Map input lists
&bag # Convert to Bag
{ }o # Pass to block
.{1}&& # Return 0 if no 1s
max # Maximum of
.{2..6} # number of 2s,3s,4s,5s,6s
X+.{1} # plus number of 1s
( )Z # zipped with
^5 # secondary key 0,1,2,3,4
&[cmp]o # Compare mapped values
답변
T-SQL 쿼리, 148 바이트
테이블 변수를 입력으로 사용
p : 플레이어
v : 롤 값
DECLARE @ table(p int,v int)
INSERT @ values(1,5),(1,5),(1,5),(1,5),(1,5)
INSERT @ values(2,4),(2,3),(2,3),(2,1),(2,4)
SELECT sign(min(u)+max(u))FROM(SELECT(p*2-3)*(s+sum(sign(s)-1/v))*(s/5*5+v+30)u
FROM(SELECT*,sum(1/v)over(partition by p)s FROM @)c GROUP BY v,s,p)x
Player 1 wins returns -1
Tie returns 0
Player 2 wins returns 1