유커에서 최고의 카드를 재생


13

입력:

먼저 다음
과 같은 형식의 각 플레이어가 사용하는 카드를 나타내는 3 장의 카드 배열

[JD][TH][9S]

대표

Jack of Diamonds, 10 of Hearts, and Nine of Spades.

Euchre에서 항상 팀원과 함께 앉으면 두 번째 요소는 팀원의 플레이를 나타냅니다. 여기 TH.

둘째로 다음
과 같은 형식의 트럼프 슈트를 나타내는 단일 문자, 문자열 등

S, D, C, H

대표

Spades, Diamonds, Clubs, Hearts

셋째, 손 모양을 나타내는 4 장의 카드 배열

[KD][JC][QH][AS]

대표

King of Diamonds, Jack of Clubs, Queen of Hearts, Ace of Spades

객관적인:

세 개의 입력이 주어지면 다음 기준을 충족하도록 재생 된 카드에 추가 할 수있는 최상의 카드를 출력하십시오.

  1. 가장 가치있는 카드를 출력하지 않으면 가능하다면 손을 잡습니다.
  2. 할 수 있으면 손이 걸리지 만 피할 수없는 한 팀원을 넘어 뜨리지 않습니다.
  3. 손을 잡을 수 있다면 가장 가치가없는 카드를 사용하면됩니다. (당신이 손을 이길 수있는 에이스와 여왕이 있다면, 당신은 여왕을 플레이합니다).
  4. 모든 연극은 하단의 규칙에 따라 적절하게 따라야합니다.

같은 출력 형식 [JD]

서식

A - Ace
K - King
Q - Queen
J - Jack
T - Ten
9 - Nine

H - Hearts
D - Diamonds
S - Spades
C - Clubs

TH, 9D, JD, QH, AD, 9C, TC

에서 : [QD][KD][9C], "C",[AH][JH][QH][9H]

밖: 9H

이유 : 클럽이 트럼프 할 때 9C가 이기고 있습니다. 손을 잡을 수 없으므로 가장 낮은 카드를 버려야합니다. 9H

에서 : [QD][KD][AD], "H",[AH][JH][QH][9H]

밖: 9H

이유 : 하트가 트럼프이므로, Ace of Diamonds가 현재 이기고 있습니다. 우리는 가장 낮은 카드를 사용해야합니다. 9H

에서 : [QD][KD][TD], "D",[AD][JH][QH][9D]

밖: 9D

이유 : 다이아몬드가 트럼프이고 현재 이기고 있으므로 파트너가 현재 이기고 있기 때문에 9D를 플레이해야 9D합니다.AD

에서 : [QH][KH][JH], "D",[AD][JD][QH][9D]

밖: QH

이유 : 다이아몬드가 트럼프이기 때문에 상대방이 왼쪽 바우어로 승리 JH합니다. 오른쪽 바우어가 있지만 QH가 이끌려서 트럼프를 나눌 수 없습니다.QH

에서 : [QH][KH][JH], "D",[AD][JD][QC][9D]

밖: JD

이유 : 다이아몬드가 트럼프이기 때문에 상대방이 왼쪽 Bower로 승리합니다. 오른쪽 Bower JH가 있고 우리가 없기 Diamonds때문에JD

유커 카드의 강점

하트가 트럼프 인 경우 :

JH
JD
AH
KH
QH
TH
9H

당신이 다른 카드의 강도에 익숙하지 않은 경우 유커 규칙을 참조하십시오 유커

이것이 코드 골프이기 때문에 가장 짧은 코드가 승리합니다!

행운을 빌고 재미있게 보내!


2
놀이는 링크가 아닌 여기에 설명되어야한다고 생각합니다.
Jonathan Allan

@JonathanAllan 그것에 대해 생각했지만 링크에 더 잘 설명되어 있습니다. 아마도 게임에 익숙하지 않은 사람들에게는 최선의 도전이 아닐 것입니다. 그들이 즉시 배우고 싶지 않다면.
jacksonecac

9D결과가 있는 예제 에는 하트가 트럼프로 설정되어 있지만이 결과에 영향을 미치지 않는다고 생각합니다.
Jonathan Allan

@JonathanAllan 좋은 캐치, 감사합니다.
jacksonecac

1
@ jacksonecac 문제에 감사드립니다. 재미있었습니다.
Dave

답변:


2

펄- 557532511490482384 363

($p,$t,$h)=@ARGV;%L=(H=>D,D=>H,C=>S,S=>C);$B=%L{$t};$_="\]$p$h\[";s/(.$t)/0$1/g;s/J$B/01$B/;s/0J/00/;s/J/R/g;s/9/Z/g;($T,@C)=split/\]\[/,$_;$s=$C[0];$s=~s/.+(.)/$1/;$s=~s/$t/0/;$X=(sort@C[0..2])[0];@M=@C[3..6];@F=(grep{/$s/}@M);@M=@F if@F;$w=(sort@M)[@M-1];push@M,$X;foreach$g(sort@M){$g ne$X?$b=$g:last}$_=$C[1]eq$X||!$b?$w:$b;s/.(..)/$1/;s/Z/9/;s/0|1|R/J/;print

작동 원리

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

먼저 args를 읽고 해시 조회로 왼쪽 바우어 슈트 (트럼프와 같은 색의 잭)를 찾습니다.

($p,$t,$h)=@ARGV;
%L=(H=>D,D=>H,C=>S,S=>C);
$B=%L{$t};

그런 다음 모든 카드를 하나의 문자열로 결합하고 대체를 수행하여 카드를 자연스럽게 올바른 순서로 정렬합니다.

$_="\]$p$h\[";
s/(.$t)/0$1/g; # trump cards start with '0'
s/J$B/01$B/;   # left-bauer's 'J' changes to '01', making it trump
s/0J/00/;      # right-bauer's 'J' changes to '0'
s/J/R/g;       # all other jacks have 'J' changed to 'R'
s/9/Z/g;       # all 9s change to Z
($T,@C)=split/\]\[/,$_;

이 블록의 끝에서 카드 문자열은 괄호로 나뉘어 다음과 같은 모든 카드 배열을 만듭니다.

  • 인덱스 0 = 상대방의 리드 카드

  • 색인 1 = 팀원의 카드

  • 인덱스 2 = 다른 상대방의 카드

  • 인덱스 3-6은 손을 나타냅니다

리드 슈트는 첫 번째 카드에서 파싱되지만 트럼프가 나왔을 때 트럼프를 나타 내기 위해 슈트가 '0'으로 변경됩니다.

$s=$C[0];
$s=~s/.+(.)/$1/;
$s=~s/$t/0/;

플레이 중 가장 좋은 카드는 처음 세 카드를 정렬하고 첫 번째 카드를 검색하여 찾습니다.

$X=(sort@C[0..2])[0];

재생 가능한 카드가 있습니다. 사용중인 카드가 리드 슈트와 일치하면 해당 카드 만 남습니다. 그렇지 않으면 모든 카드를 사용할 수 있습니다 :

@M=@C[3..6];
@F=(grep{/$s/}@M);
@M=@F if@F;

'throwaway'카드는 정렬 된 재생 가능한 카드 배열에서 마지막 카드를 반환하여 찾습니다.

$w=(sort@M)[@M-1];

트릭을 이길 수있는 가장 낮은 '승자'카드는 재생 가능한 카드 배열에 가장 높은 카드를 추가하고 배열을 정렬 한 다음 가장 높은 카드가 검색 될 때까지 반복하여 찾습니다. '승리'카드는 이전 반복의 카드입니다.

push@M,$X;
foreach$g(sort@M){$g ne$X?$b=$g:last}

그런 다음 올바른 플레이가 평가됩니다. 'throwaway'카드는 다음 중 하나에 해당하면 선택됩니다.

  1. 표에서 가장 좋은 카드는 모든 카드의 정렬되지 않은 배열에서 1의 색인을 가지며 이는 우리 팀원에게 속함을 의미합니다.
  2. 가장 낮은 '승자'카드 검색이 무효화되었습니다. 이는 상대방의 최고 카드가 모든 카드보다 높음을 의미합니다.

그렇지 않으면 '승자'카드가 반환됩니다.

$_=$C[1]eq$X||!$b?$w:$b;
s/.(..)/$1/; # remove the '0' that indicated trump
s/Z/9/;      # get those 9s back
s/0|1|R/J/;  # fix the jacks
print
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.