플레이어에게 카드를 처리


15

오늘 밤은 카드 게임의 밤입니다! 당신은 딜러이며 당신의 임무는 플레이어에게 카드를 처리하는 프로그램을 작성하는 것입니다.

다양한 카드와 플레이어 수를 감안할 때 각 플레이어의 카드를 한 손으로 나눠야합니다.

10 장의 카드로 4 명의 플레이어를위한 예

규칙

프로그램은 A0이 아닌 양의 정수뿐만 아니라 비어 있지 않은 배열을받습니다 n. 그런 다음 배열을 n손 으로 나눕니다 . 줄의 길이가 n남은 카드 로 나눌 수없는 경우 가능한 한 균등하게 분배해야합니다.

  • 인 경우 요소로만 n==1배열의 배열을 반환해야합니다.A
  • 경우 n의 길이보다 큰 A, 당신은 모든 손과 빈 손을 반환해야합니다. 경우 n = 4array A = [1,2,3], 당신은 반환해야 [[1],[2],[3]]하거나 [[1],[2],[3],[]]. 비어 있거나 정의되지 않았거나 null 인 빈손을 자유롭게 처리 할 수 ​​있습니다.

  • 배열은 숫자가 아닌 모든 유형을 포함 할 수 있습니다.

  • 처리하는 동안 배열 순서를 변경해서는 안됩니다. 예를 들어 if n = 2A= [1,2,3]보다는 어떤 결과가 [[1,3],[2]]무효가 될 것입니다.

테스트 사례

n   A               Output

1   [1,2,3,4,5,6]   [[1,2,3,4,5,6]]
2   [1,2,3,4,5,6]   [[1,3,5],[2,4,6]]
3   [1,2,3,4,5,6]   [[1,4],[2,5],[3,6]]
4   [1,2,3,4,5,6]   [[1,5],[2,6],[3],[4]]
7   [1,2,3,4,5,6]   [[1],[2],[3],[4],[5],[6]] // or [[1],[2],[3],[4],[5],[6],[]]

데모 프로그램

def deal(cards, n):
	i = 0
	players = [[] for _ in range(n)]
	for card in cards:
		players[i % n].append(card)
		i += 1
	return players

hands = deal([1,2,3,4,5,6], 2)

print(hands)

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

이것은 이므로 각 언어의 최단 바이트가 승자가됩니다.

chau giang에 의해 어레이 에서 청크 생성 에서 영감을 얻음


1
모든 손을 돌려 주어야하고 빈 손 은 마지막 테스트 사례의 첫 번째 결과 가능성 모순됩니다.
Adám

6
앞으로 Sandbox 를 사용하여 문제를 해결하고 커뮤니티 의견을 측정하여 질문을 main에 게시 하는 것이 좋습니다
Jo King

2
@JoKing 나는 전적으로 동의합니다. 편집해야 할 것이 많지 않다고 생각했습니다. 베타 버전을 먼저 배포하지 않고 찌르기를 추진하는 것과 같습니다. 도와 줘서 고마워.
codidact.com로 이동 aloisdg

1
@aloisdg 제안 된 대체 규칙을 파싱 할 수 없습니다. 아이디어가 사람들이 종종 서클을 다루는 것과 같다면 대부분의 카드로 끝나는 모든 플레이어는 시작에 있으며 마지막에있는 플레이어는 카드를 얻지 못할 수 있습니다.
Adám

2
입력 배열 에 ? 가 포함되어 있으면 어떻게 0됩니까?
얽히고 설킨

답변:


12

05AB1E , 3 1 바이트

Adnan 덕분에 2 바이트 절약

ι

온라인으로 사용해보십시오! 또는 테스트 스위트

설명

ι  # uninterleave

도전이 요구하는 것을 정확하게 수행


5
나는 이것이 또한 잘 작동한다고 생각한다 :ι
Adnan

@Adnan : 예, 고마워요 :)에 대한 빈 목록 만 차이점 n=7이지만 이는 허용되는 출력 형식입니다. 나는 그 내장을 완전히 놓쳤다 : /
Emigna

이를 위해 내장 언어가 있습니다! :디
codidact.com로 이동 aloisdg


7

펄 6 , 33 24 바이트

->\b{*.classify:{$++%b}}

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

숫자를 가져 와서 목록을 가져 오는 목록을 반환하는 Whatever lambda를 반환하는 익명의 카레 코드 블록입니다. 리스트의 길이보다 큰 숫자가 주어지면 두 번째 옵션이 필요 f(4)([1,2,3])합니다.[[1],[2],[3]]

설명:

->\b{                  }  # Anonymous code block that takes a number
     *                    # And returns a Whatever lambda
      .classify           # That groups by
               :{$++%b}   # The index modulo the number





4

J , 13 , 11 , 10 , 9 바이트

(|#\)</.]

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

어떻게 (이전 설명, 근본적으로 동일)

] </.~ (| #\)
  </.~          NB. box results of grouping
]               NB. the right arg by...
         |      NB. the remainders of dividing...
       [        NB. the left arg into...
           #\   NB. the length of each prefix of...
              ] NB. the right arg,
                NB. aka, the integers 1 thru
                NB. the length of the right arg

3

, 9 바이트

IEθ✂ηιLηθ

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 순서대로 입력하고 [n, A]각 값을 자체 행에 출력하고 각 핸드를 이전보다 이중 간격으로 출력합니다. 설명:

  θ         First input `n`
 E          Map over implicit range
    η       Second input `A`
   ✂        Sliced
     ι      Starting at current index
      Lη    Ending at length of `A`
        θ   Taking every `n`th element
I           Cast to string
            Implicitly print

"슬라이스"의 상징을 가위로 만들기위한 +1!
요나

2

하스켈 , 39 바이트

import Data.Lists
(transpose.).chunksOf

참고 : Data.Lists타사 라이브러리 목록 에 있으며 스태 키지에 있지 않으므로 Hoogle에 표시되지 않습니다.


Data.Lists존재하지 않는 것 같습니다. 나는 당신이을 의미한다고 가정 Data.List하지만 그것을 포함하지 않습니다 chunksOf.
Joseph Sible-Reinstate Monica

chunksOf서명 만있는 것 같습니다 Int -> Text -> [Text]. 1
Post Rock Garf Hunter

@JosephSible, lists패키지에 있습니다.
dfeuer

@ SriotchilismO'Zaic, Hoogle에는 많은 것들이 나타나지 않습니다. split패키지 에 있으며 패키지로 다시 내 lists보냅니다. chunksOf목록, 텍스트, 시퀀스 및 기타 버전의 버전이 있습니다 .
dfeuer

2

코 틀린 , 53 51 49 바이트

{a,n->(0..n-1).map{a.slice(it..a.size-1 step n)}}

오래되고 잘못된 솔루션은 배열 길이의 제수에 대해서만 작동했습니다. 나는 이것이 골프를 칠 수 있다고 확신한다.

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



n목록 길이의 제수가 아닌 경우 작동 하지 않습니다.
Jo King

고마워요 지금
Adam

나는 이것이
Adam

1
여분의 쌍을 제거 할 수있는 것 같습니다
ASCII 전용


1

APL + WIN 26 또는 31 바이트

개별 손이 2D 행렬의 열로 표시 될 수있는 경우 배열 배열 인 경우 26 바이트 인 경우 5 바이트를 더합니다.

(l,n)⍴((l←⌈(⍴a)÷n)×n←⎕)↑a←⎕

온라인으로 사용해보십시오! Dyalog Classic의 조직

또는

⊂[1](l,n)⍴((l←⌈(⍴a)÷n)×n←⎕)↑a←⎕

온라인으로 사용해보십시오! Dyalog Classic 제공

설명:

카드 배열을위한 a ← ⎕ 프롬프트

((l ← ⌈ (⍴a) ÷ n) × n ← ⎕) ↑ 정수를 입력하라는 프롬프트, 주어진 짝수 손에 0으로 패드 a

(l, n) ⍴ 각 열이 각 손을 나타내는 2D 행렬을 만듭니다.

⊂ [1] 필요한 경우 중첩 벡터로 변환-배열의 APL 배열


1

TSQL, 44 바이트

-- @       : table containing the input 
-- column c: value of the card, 
-- column a: position on the card in the deck
-- @n      : number of players

DECLARE @ table(a int identity(0,1), c varchar(9))
DECLARE @n int = 4

INSERT @ values('1a'),('2c'),('3e'),('4g'),('5i'),('6k')

SELECT string_agg(c,',')FROM @ GROUP BY a%@n

사용해보십시오


1
이 웹 사이트를 방문 할 때마다 새로운 것을보고 "와우 인상적이지만 왜?"
MindSwipe

@MindSwipe 나는 StackOverflow에 대해 많은 질문에 답변했지만 그 질문 중 많은 부분이 동일하거나 거의 동일합니다. 또한 무료로 일하는 것처럼 느낍니다. 코드 골프 질문은 매번 다르며 다른 방법으로는 거의 사용하지 않기 때문에 더 즐겁습니다.
t-clausen.dk

1

MathGolf , 9 바이트

\ô_í\%q╞;

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

설명

\           swap top elements (pops both input onto stack)
 ô          start block of length 6
  _         duplicate TOS (will duplicate the list)
   í        get total number of iterations of for loop (the other input)
    \       swap top elements
     %      modulo (picks every n:th item of the list
      q     print without newline
       ╞    discard from left of string/array (makes the next player pick cards starting with the next in the deck)
        ;   discard TOS (removes some junk in the end)

1

자바 (JDK) , 90 바이트

A->n->{var o="";for(int h=0,i;h<n;o+="\n")for(i=h++;i<A.length;i+=n)o+=" "+A[i];return o;}

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

람다에 대한 Olivier Grégoire 에게 감사 드리며 반복하는 동안 더 잘 증가시킵니다.



@ OlivierGrégoire 감사합니다! 이것에 다소 익숙하고 람다 비트 작업을하고 있었지만 어려움을 겪고있었습니다.
Daniel Widdis

1

루비, 81 바이트

def s a,n;a.each_with_index.inject(([[]]*n).map(&:dup)){|b,(c,d)|b[d%n]<<c;b};end

온라인 시도


1
쉽게 확인할 수 있도록 온라인 테스트 환경에 대한 링크를 추가 할 수 있습니까?
Jonathan Frech 2014 년

@JonathanFrech 당신은 간다.
Avilyn

PPCG에 오신 것을 환영합니다! 길이에 대한 최적화가 많이 있습니다. 예를 들어, each_with_index증분 카운터에 비해 꽤 비싸며 map{[]}기본적으로 map(&:dup)코드를 59 바이트로 줄일 수있는 트릭, 익명 Proc와 같은 기능을 수행합니다. 온라인으로 사용해보십시오! 또한 체크 아웃 루비 도움말 페이지
값 잉크

1

PHP ,85 83 82 바이트

function($a,$n){while($x<$n)$c[]=array_column(array_chunk($a,$n),+$x++);return$c;}

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

이것은 가장 짧은 항목은 아니지만 PHP 배열 함수 내장 기능을 사용하여 시도하는 것이 재미있을 것이라고 생각했습니다. 결과 : 길다.

산출

1   [1,2,3,4,5,6]   [[1,2,3,4,5,6]]
2   [1,2,3,4,5,6]   [[1,3,5],[2,4,6]]
3   [1,2,3,4,5,6]   [[1,4],[2,5],[3,6]]
4   [1,2,3,4,5,6]   [[1,5],[2,6],[3],[4]]
7   [1,2,3,4,5,6]   [[1],[2],[3],[4],[5],[6],[]]
5   ["9C","QD","2S","4H","6D","AS","9D","TH","5C"]  [["9C","AS"],["QD","9D"],["2S","TH"],["4H","5C"],["6D"]]

1
참고로, 샌드 박스를 대신 print_flat할 수 있습니다. 실제로 답변을 변경 하지 마십시오. 언급 할 것이라고 생각했습니다. json_encode
ArtisticPhoenix

물론 @ArtisticPhoenix! 고마워요! :)
640KB


0

C # (Visual C # 대화식 컴파일러) , 43 바이트

a=>b=>{int i=0;return a.GroupBy(_=>i++%b);}

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


@JoKing [1,2,3], 4이 출력해야합니다 [[1],[2],[3]]. 4 명의 플레이어에게 3 장의 카드를주고 있습니다. 주요 질문을 업데이트하겠습니다.
codidact.com로 이동 aloisdg

1
일반적으로 자신의 문제에 즉시 솔루션을 게시하는 것은 바람직하지 않습니다.
얽히고 설킨

1
@Shaggy ok 다음에 고려하겠습니다. epg와 rpg는 괜찮지 만 codegolf의 경쟁 측면으로 인해 직접 게시하는 것이 약간 불공평하다고 생각합니다. 이해하세요
aloisdg codidact.com으로 이동

@ 조 왕 당신이 맞아요! 나는 오타를 만들었습니다 : /
aloisdg codidact.com으로 이동

0

C (gcc), 5 바이트

컴파일러 플래그 -Df=(요청 선행 공간)는 사양을 충족합니다. f(n_cards,n_hands,card_ptr)손 목록에 대한 포인터를 평가합니다.

설명

C에서는 목록 수가 일정하게 유지되지만 모든 목록을 확장 할 수있는 경우 목록 목록을 단일 인터리브 배열로 구현하는 것이 일반적입니다. 예를 들어, 카드를 다루는 경우, 더 많은 핸드가 추가되는 것보다 더 많은 카드가 각 핸드에 추가되는 것이 더 일반적이므로, 핸드리스트를 인터리브 된리스트로 구현하는 것이 합리적입니다. 우연히도, "데크"는 그러한 목록이므로 수정되지 않은 매개 변수를 리턴합니다.

이 도전은 아마도 샌드 박스 였을 것입니다.


우리 모두 샌드 박스에 동의
하는 것 같습니다

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