득점 브리스 콜라


11

소개

브리스 콜라 는 이탈리아에서 가장 인기있는 카드 게임 중 하나입니다. Bridge와 같은 트릭 테이킹 카드 게임입니다. 브리스 콜라는 기괴한 포인트 시스템으로 유명합니다. 이 챌린지에서, 두 장의 카드가 주어지면, 첫 번째 카드가 Briscola의 포인트 시스템에서 두 번째 카드보다 더 많거나 적거나 같은 수의 점수를 얻을 수 있습니다.

도전

브리스 콜라는 이탈리안 트럼프 카드로 플레이합니다. 갑판에는 40 개의 카드가 있으며 컵, 칼, 클럽, 동전 등 4 가지 정장마다 1-10 개가 있습니다. 우리는이 도전에 대한 소송을 무시할 것입니다. 카드 2-7은 숫자 카드이고 카드 8, 9 및 10은 얼굴 카드입니다. 가장 높은 카드부터 가장 낮은 카드의 순위는 다음과 같습니다.

 +------------------------+-------------+
 |     Cards, by Rank     | Point Value |
 +------------------------+-------------+
 | Ace (1)                |     11      |
 | Three (3)              |     10      |
 | King (10)              |      4      |
 | Knight (9)             |      3      |
 | Jack (8)               |      2      |
 | Numeric Cards (2, 4-7) |      0      |
 +------------------------+-------------+

멋진 테이블을 위해 Orphevs에게 감사드립니다! :)

당신의 임무는 카드 순위를 나타내는 1-10의 두 숫자를 받아들이고 첫 번째 카드의 포인트 값이 두 번째 카드. 추가 사항 :

  • 프로그램은보다 작거나 크거나 같음을 나타내는 세 가지 값을 출력 할 수 있지만 매번 각 조건에 대해 동일한 값을 출력해야합니다.
  • 프로그램은 IO 기본값을 사용할 수 있습니다 .
  • 표준 허점 은 허용되지 않습니다.
  • 전체 기능 또는 프로그램이 허용됩니다.
  • 이 질문은 이므로 바이트 수가 가장 적습니다.

  • 다음은 샘플 입력 및 출력입니다.

     1, 4 => 이상 (ace 점수 11 점, 4 점 0 점, 첫 번째는 두 번째 이상입니다.
     8, 3 =>보다 작음 (8 점수 2, 3 점수 10, 첫 번째는 두 번째보다 작습니다.
     5, 2 => 같음 (5와 2 모두 0 점)

궁금한 점이 있으면 언제든지 문의하십시오. 행운을 빕니다!


1
나는 항상 Scopa의 primiera 가 더 기괴 하다고 생각했다 .)
FryAmTheEggman

@FryAmTheEggman 당신이 맞아요, 내가 바꿨습니다. 또한, 당신은 primiera에 대해 요점을 가질 수 있습니다 ...;)
Amphibological

입력 값으로 두 값을 가진 배열을 취할 수 있습니까?
digEmAll

1
@digEmAll 확실합니다.
Amphibological

그 기괴한 아니에요 포르투갈어 수에 카와 비 스카 카드 게임에서도 비슷한 점수를 얻습니다!
sergiol

답변:


2

젤리 , 12 11 바이트

“®µ½¤¢‘iⱮIṠ

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

  • Luis Mendo의 방법 을 사용하여 -1 바이트 .

0같음, -1크거나 작음에 대한 출력 1. “®µ½¤¢‘로 평가되는 코드 페이지 색인 을 사용합니다 [8, 9, 10, 3, 1].

한 쌍의 카드로 입력을받습니다. 1,2예를 들어 사용하십시오 .

“®µ½¤¢‘iⱮIṠ
“®µ½¤¢‘       [8,9,10,3,1]
       i      index of 
        Ɱ     each element in the input -> 5,0
         I    Finds the forward difference: 0-5 = -5.
          Ṡ   Sign -> -1.
                When ranks are equal, Ṡ returns 0 and when the rank of the second
                card is higher, Ṡ returns 1.

1
짜증나 지 않지만 누가 공감할 수 있습니까?
dylnan

실수로 다운 보트가 된 경우 (마지막 편집 이후에 발생했다고 가정 할 경우) 다운 보터가 무언가 잘못되었다는 것을 알게되면 취소 할 수 있도록 포스트에 더미 업데이트를 수행하는 것이 좋습니다.
Arnauld

5

MATL , 12 바이트

[DEXIl]&mdZS

입력은 두 숫자의 배열입니다. 출력되고 -1, 0그리고 1각각에 대한 더 이상 , 동일 또는 미만 .

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

설명

[1 4]예를 들어 입력 을 고려하십시오 .

[DEXIl]    % Push [8 9 10 3 1]
           % STACK: [8 9 10 3 1] 
&m         % Implicit input. Index (1-based) of membership, 0 if not member
           % STACK: [5 0]
d          % Consecutive difference
           % STACK: -5
ZS         % Sign. Implicit display
           % STACK: -1

5

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

카레 구문에서 두 등급을 취합니다 (a)(b). 반환 1이상 , -1이하 또는 0 에 대한 동일 .

a=>b=>Math.sign((s="05040000123")[a]-s[b])

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


48 바이트의 수식 사용

이것은 룩업 테이블을 사용하는 것보다 확실히 길지만 조금 더 흥미 롭습니다.

동일한 I / O 형식

a=>b=>Math.sign((g=n=>(1<<n&1802)*6%13)(a)-g(b))

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

어떻게?

0

=2 과 (21+2+28+29+210)
=2 과 1802
  n (card)   | 2**n | AND 1802
-------------+------+----------
  1 (Ace)    |    2 |      2
  2          |    4 |      0
  3 (Three)  |    8 |      8
  4          |   16 |      0
  5          |   32 |      0
  6          |   64 |      0
  7          |  128 |      0
  8 (Jack)   |  256 |    256
  9 (Knight) |  512 |    512
 10 (King)   | 1024 |   1024

나머지 0이 아닌 값을 올바른 순서로 정렬 할 수있는 방식으로 변환하려고합니다. 우리는 사용:

=6모드13
    p (card)   |   6p | MOD 13
---------------+------+--------
    2 (Ace)    |   12 |   12
    8 (Three)  |   48 |    9
  256 (Jack)   | 1536 |    2     --> Ace > Three > King > Knight > Jack
  512 (Knight) | 3072 |    4
 1024 (King)   | 6144 |    8

커리 매개 변수를 사용하여이 방법에 대한 메타 토론이 있습니까? 기술적으로 이것은 당신이 작성한 함수가 답변이 아닌 함수를 반환하기 때문에이 도전과 일치하지 않습니다.
Sparr


3

Japt , 25 21 16 바이트

  • 1 => 이상
  • -1 => 이하
  • 0 => 같음

£"78920"bXÉÃr- g

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


-g플래그를 사용하여 2 바이트를 저장할 수 있습니다 .
얽히고 설킨

13 바이트 솔루션이 있습니다 (또한 -g시도하고 싶다면 플래그를 사용하십시오 ).
얽히고 설킨

@Shaggy 나는 2 바이트를 절약한다고 말하지 않았으며 플래그가 지정된 제출은 별도의 언어 솔루션이며 순수한 Japt 솔루션으로 간주되지 않습니다.
Nit

플래그를 사용하지 않으려면 위에서 언급 한 솔루션이 15 바이트가됩니다. (힌트 : [8,9,10,3,1]배열과 기본 변환을 사용합니다 )
Shaggy

3

Japt -g , 13 바이트

출력 -1에 대한 >, 1대한 <0대한 ===.

m!b#ù991ìD)rn

시도 하거나 여러 테스트를 실행 하십시오 (두 번째 줄 -g은 플래그가 여러 입력을 처리하는 데 사용될 수 있도록 플래그 의 기능을 복제합니다 )


설명

                   :Implicit input of 2 integer array
m                  :Map
   #ù991           :  249991
        ìD         :  Convert to array of base-13 digits = [8,9,10,3,1]
 !b                :  Get the index of the current element in that
          )        :End map
           rn      :Reduce by subtraction
                   :Implicitly output the sign of the result

2

R , 35 바이트

rank(c(6,0,5,1:4*0,1:3)[scan()])[1]

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

  • @JayCe 제안 덕분에 기능 대신 전체 프로그램으로 전환하기 위해 -6 바이트

이 프로그램은 반환 2을 위해 'greater than', 1위해 'less than', 1.5위해'equal'

설명 :

      c(6,0,5,1:4*0,1:3)[v]          # extract the score of each card in v (got from scan());
                                     # cards in v are used as indexes in the cards rank 
                                     # vector, which is based on briscola scores vector 
                                     # c(11,0,10,0,0,0,0,2,3,4) but divided by 2 and rounded 
                                     # to integer preserving the original order

rank(                      )[1]      # rank returns : c(1,  2)   if v[1] < v[2]
                                     #                c(2,  1)   if v[1] > v[2]
                                     #                c(1.5,1.5) if v[1] == v[2]
                                     # and we select the first value

1
rank(c(6,0,5,1:4*0,1:3)[scan()])[1](전체 프로그램) 6 바이트를 절약합니다
JayCe

@JayCe : 네 나는 그것을 발견,하지만, 난 여전히, 어쨌든 ... 전체 프로그램 때 고양이를 ()를 추가 할 필요성에 대해 혼동 내 코드를 업데이트하고있어)
digEmAll

2

자바 8, 69 66 바이트

a->b->Math.signum("05040000123".charAt(a)-"05040000123".charAt(b))

Arnauld 의 JavaScript 응답 포트 인 currying 구문에서 매개 변수를 사용하는 Lambda .

반환 0.0 과 동일 , 1.0에 대한 보다 큰 , 그리고 -1.0에 대한 보다 . 여기에서 온라인으로 사용해보십시오 .

3 바이트 골프 를 한 Kevin Cruijssen 에게 감사 합니다.


1
"05040000123".charAt(...)정수 배열 대신 두 번의 직접 리턴을 수행하여 3 바이트를 절약 할 수 있습니다 .a->b->Math.signum("05040000123".charAt(a)-"05040000123".charAt(b))
Kevin Cruijssen

2

MarioLANG , 578 548 530 바이트

 )                    <
 ====================="
                   >-[!)
                   "==#)
                >-[!)) )
                "==#=) +
         >-----[!))) + +
         "======#==  + +
     >--[!)))   ++++              -(- <
     "===#===================    ====="
  >-[!)))+++++                    >) [!)+:
; "==#=======================     "===#===
>[!                      )))[!((>[!)[!):
"=#==========================#====#==#===
!;((                         <       >)-:
#============================"       "===

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

설명:

  • 첫 번째, 큰 성은 카드 번호를 입력으로 읽고 0(입력 없음)을 읽을 때까지 동등한 포인트 값을 계산합니다 . 이것은 입력으로 두 개의 엄격하게 양수 값만 있다고 가정합니다.
  • 실제로 필요하지 않은 적절한 포인트 값을 설정하지는 않습니다. 포인트 값을 포인트 값으로 설정 [1-5]하여 가장 많은 포인트 값을 가진 카드를 계산하는 데 도움이됩니다.
  • 두 번째 작은 성은 계산 된 두 점 값을 비교합니다.
  • 이것은 반환 1제 포인트 값은, 상기 제 1보다 큰 경우 -1상기 제 포인트 값은 첫 번째보다 큰 경우 및 0포인트 값이 동일한 경우.



1

05AB1E , 14 바이트

ε78920S>sk}`.S

반환 1, -1또는 0이상; 보다 작음; 또는 각각 동일합니다.

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

설명:

ε              # Loop over the input-array
 78920S>       #  Convert 78920 to a list of digits, and increase each by 1,
               #  resulting in [8,9,10,3,1]
        sk     #  Index this list with the input-number (-1 if not found)
               #   i.e. [1,4] → [4,-1]
          }    # Stop the loop
`              # Put all items of the now mapped list separated onto the stack
 .S            # Take the signum (1 if a>b; -1 if a<b; 0 if a==b)
               #  i.e. 4 and -1 → 1

1

PHP , 51 45 바이트

<?=($m=_5040000123)[$argv[1]]<=>$m[$argv[2]];

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

그것을 실행하려면 :

php -n <filename> <card1> <card2>

예:

php -n briscola_score.php 3 1

참고 : 이 코드는 PHP 7의 우주선 연산자를 사용 합니다. 따라서 7 이전의 PHP 버전에서는 작동하지 않습니다.


산출:

  • 1 = 이상 ( card1 > card2)
  • 0 = 같음 ( card1 == card2)
  • -1 = 미만 ( card1 < card2)

어떻게?

다른 많은 답변에서 사용되는 접근 방식과 동일하지만 PHP에서 사용되는 접근 방식과 동일합니다. 카드에 대한 값 맵을 작성하고 카드 값을 비교합니다. 맵에서 값의 위치는 카드 번호와 동일합니다.


0

자바 스크립트 ES2016 +, 73 자

가장 짧지는 않지만 수학과 오버플로로 인해 흥미 롭기를 바랍니다. :)

(x,y)=>Math.sign((x&8?x:(16-(x**40|0)%7)^16)-(y&8?y:(16-(y**40|0)%7)^16))

불행히도 74 문자가있는 다른 버전 :

(x,y)=>eval('(x>y)-(x<y)'.replace(/\w/g,'($&&8?$&:(16-($&**40|0)%7)^16)'))

테스트

실행하기 전에 브라우저 콘솔을여십시오

f=(x,y)=>Math.sign((x&8?x:(16-(x**40|0)%7)^16)-(y&8?y:(16-(y**40|0)%7)^16))
console.table(Array(11).fill().map((x,i)=>Array(11).fill().map((x,j)=>f(i,j))))

스크린 샷

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