골프 골퍼 골프


25

어렸을 때, 나는 " 골프 " 카드 게임을 많이했었다. 당신의 도전은 당신이 그것을 받아들이기로 선택한다면, 골프 핸드의 점수를 계산하는 것입니다. 이 카드 게임 1 에는 9000 가지 이상의 변형이 있으므로 , 우리는 내가 기억하는 규칙을 따라갈 것입니다.

게임의 규칙)

  • 6 장의 카드로 라운드를 끝내고 가능한 적은 점수를 원합니다.

  • 조커는 사용되지 않습니다.

  • 에이스와 2의 가치는 각각 -1, -2 점입니다.

  • 잭과 킹은 모두 0 점입니다.

  • 3에서 10까지의 카드는 액면가입니다. 그러나 페어링하면 해제됩니다. 예를 들어 5는 5 점이지만 두 5는 0입니다. 3 개의 5는 5 점의 가치가 있습니다 (처음 2 개는 짝을 이루지 만 3 번째는 그렇지 않기 때문에).

  • 여왕은 15 점의 가치가 있습니다. 퀸은 취소 할 수 없습니다. 예를 들어 2 개의 퀸은 30 포인트입니다.

규칙 (도전)

입력은 정수 배열 또는 6 개의 개별 정수입니다. 어느 쪽을 좋아하든 1은 에이스, 2-10은 2-10, Jack, Queen, King은 11, 12, 13을 나타냅니다. 출력은 위의 규칙에 따른 핸드의 점수입니다. 모든 입력이 유효하다고 가정 할 수 있습니다. 예를 들어 숫자가 4 번 이상 나타나지 않고 모든 숫자가 범위 안에 있습니다 [1, 13]. 입력 및 출력은 임의의 합리적인 형식 일 수 있습니다.

IO 테스트 :

[11, 10, 3, 1, 2, 2]    --> 8
[4, 5, 5, 3, 8, 7]      --> 22
[2, 2, 2, 2, 1, 1]      --> -10 (The lowest score possible)
[12, 12, 12, 12, 10, 9] --> 79 (The highest score possible)
[9, 9, 9, 9, 11, 1]     --> -1
[8, 8, 8, 8, 11, 13]    --> 0
[10, 9, 3, 7, 12, 2]    --> 42
[1, 2, 3, 4, 5, 6]      --> 15
[10, 9, 2, 3, 4, 1]     --> 23
[10, 3, 12, 3, 7, 12]   --> 47

바이트 단위의 최단 답변이 승리합니다!


1 실제로는 아니지만 많은 변형이 있습니다.

답변:


3

Pyth, 28 27 25 바이트

s+*L%/Qd2}3Tm?<d3_d*15q12

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

설명

  • 먼저, Pyth는 일부 변수를 자동 추가합니다. 코드는 이제 s+*L%/Qd2}3Tm?<d3_d*15q12dQ입니다.
  • }3T목록을 생성합니다 [3, 4, 5, 6, 7, 8, 9, 10].
  • 해당 목록 ( *L)의 각 숫자에 입력 ( /Qd), 모듈러스 2 ( %2) 의 해당 숫자 개수를 곱하십시오 . 결과는 짝을 이루는 숫자의 경우 0이고 짝이없는 숫자의 경우 숫자 자체입니다.
  • 입력 번호 ( mQ) 위에 맵핑하십시오 .
    • 숫자가 3보다 작 으면 ( ?<d3) 무시하십시오 _d.
    • 그렇지 않으면 12 ( q12d) 인지 확인 하고 부울에 15 ( *15)를 곱하십시오 . 결과는 퀸의 경우 15, 다른 항목의 경우 0입니다.
  • 목록을 연결하십시오 ( +). 결과 목록에는 이제 짝을 이루지 않은 숫자 (첫 번째 부분)와 특수 카드 A, 2, Q (두 번째 부분)에 대한 점수가 포함되며 일부 0이 추가됩니다.
  • 마지막으로 결과의 합 ( s)을 가져옵니다 .

대체 25 바이트 솔루션

-+s*L%/Qd2}3T*15/Q12s<#3Q

이것은 첫 번째와 비슷하지만 여왕을 따로 세고 필터로 에이스와 두 개를 무효화합니다.


11

파이썬 2, 72 70 바이트

f=lambda x,*T:[x*(-1)**T.count(x),~x%2*15,-x][(x-3)/8]+(T>()and f(*T))

어느 시점에서 나는 파이썬 0**0 == 0이 한 번만 처리되기를 원 했다 (-condition)**num. 처럼 전화하십시오 f(11, 10, 3, 1, 2, 2).

이전 72 바이트 버전 :

f=lambda x,*T:[~x%2*15,x*(-1)**(x<3or T.count(x))][x<11]+(T>()and f(*T))

5

> <> , 63 57 56 + 2 = 65 59 58 바이트

입력 번호는 프로그램 시작시 스택에있을 것으로 예상되므로 -v플래그의 경우 +2 바이트입니다 . 온라인으로 사용해보십시오!

</!?lp6$+1g6:
3\0
?\::6g2%*{+}1+:b=
;\~16g-26g2*-c6gf*+n

코드 필드에서 사용되지 않은 모든 값이로 초기화됨에 따라에서 0값을 가져 와서 [value,6]증가시키고 코드 필드에 다시 넣어 스택에있는 각 값의 수를 계산하는 데 사용할 수 있습니다 . 그런 다음 총계는 다음과 같이 계산됩니다.

T = 0 + {for x in 3 to 10, x*([x,6]%2)} - [1,6] - 2*[2,6] + 15*[12,6]

편집 : 입력을 재구성하고 계산 단계를 전환하여 6 바이트를 골랐습니다. 이전 버전:

:6g1+$6pl0=?\
/-*2g62-g610/
c ;n$\
6:b=?/>::6g2%*{+}1+!
\gf*+3/

편집 2 : Sp3000 덕분에 1 바이트 저장


0=?몇 번 사용 했거나 비슷한 것을 보았습니다. ?!대신 사용할 수 있습니까?
Sp3000

@ Sp3000 Ack 물론입니다. 감사합니다. 추가하겠습니다
Sok

5

MATL , 27 26 바이트

3:10=s2\7M*G12=15*Gt3<*_vs

입력은 열 배열입니다. 즉, 값은 세미콜론으로 구분됩니다.

온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오 (이렇게하면 모든 입력을 가져 오는 루프가 추가 G되고 1$0G최신 입력을 푸시하도록 대체 됨 ).

설명

3:10=    % Take input implicitly. Compare with range [3 4 ... 10], with broadcast
s        % Sum of each column: how may threes, fours, ... tens there are
2\       % Modulo 2
7M       % Push [3 4 ... 10] again
*        % Element-wise multiply (the sum of this array is the score of 3...10)
G        % Push input again
12=      % Compare with 12, element-wise
15*      % Multiply by 15 (this is the score of 12)
G        % Push input again
t3<      % Duplicate. True for entries 1 or 2
*_       % Multiply and negate (the sum of this array is the score of 1, 2)
v        % Concatenate all stack concents into a vertical array
s        % Sum of array. Implicitly display

4

피시스 -37 36 35

이것은 너무 큰 것 같지만 FGITW입니다.

J<#h;K-QS2++*15/K12sm*d%/Jd2{J_s@S2

테스트 스위트 .


2
"이것은 너무 큰 것 같지만 FGITW입니다." 먼저 골프를합니까?
고양이

난 내 자신의 완료 때까지 나는이 보지 않았다, 그러나 사용을 제외하고 거의 동일 J하고 K완전히 불필요한 것, 그리고 또한 골프 수 +_에이 -:) 내가 31 있어요+*15/Q12-sm*d%/Qd2{>#2<#11Qs@S2
FryAmTheEggman

1
@FryAmTheEggman 24 :+*15/Q12-s*R%/Qd2}3Ts@S2
Jakube

3

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

a=>a.map(e=>r+=e<3?-e:e>10?e-12?0:15:(m[e]^=1)?e:-e,r=0,m=[])|r

또는 원하는 경우

a=>a.map(e=>r-=e<3?e:e>10?e-12?0:-15:(m[e]^=1)?-e:e,r=0,m=[])|r


0

Perl 5.10.0 + -n, 115 64 60 56 바이트

$p+=$_-12?$_>2?$_<11?++$l[$_]%2?$_:-$_:0:-$_:15}{say$p

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

설명:

-n주위 에 루프를 추가 :

# Used variables:
# $_: input (auto)
# $p: points
# $l[n]: number of occurences of n (for 3-10)
while (<>) { # for every input
    $p += $_ - 12 ? # if the input is not 12 (queen) ...
        $_ > 2 ? # then: if it's > 2 (not ace or 2) ...
            $_ < 11 ? # then: if < 11 (3-10) ...
                ++$l[$_] % 2 ? # then: if it's an odd occurence (1st, 3rd, 5th, ...)
                    $_ # add it
                    : -$_ # else subtract it
            : 0 # no points for other stuff (J, K)
        : -$_ # negative points for ace and 2
    : 15 # 15 points for queen
}
{ # after input:
    say $p # output points
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.