불가능한 다트 점수 계산하는 것입니다.

다트 체크 아웃에 대한 큰 질문이 있지만이 질문을 이미 찾지 못한 것에 놀랐습니다. 다트가 Codegolf를 만났습니다.

당신의 도전은 ‘n’다트에 대한 최대 점수 아래의 ‘n’다트로 불가능한 점수를 계산하는 것입니다. 예를 들어 n = 3 인 경우 가능한 최대 점수는 180이므로 [163,166,169,172,173,175,176,178,179]를 반환합니다.

베어 본 규칙 요약의 경우 :

단일 다트에 가능한 점수는 다음과 같습니다.

  • 0 (미스)
  • 1-20, 25, 50
  • 1-20의 이중 또는 삼중

규칙 :

  • 표준 코드 골프 규칙 적용
  • 언어가 허용하는 방식에 상관없이 단일 매개 변수 ‘n’을 가져 와서 n 개의 다트로 점수를 매길 수없는 최대 점수 미만의 모든 고유 점수 목록 / 배열을 반환해야합니다. 이 값을 콘솔에 인쇄 할 수도 있습니다.
  • 결과의 순서는 중요하지 않습니다
  • 바이트 단위의 최단 코드 승리


답변

파이썬 3 , 80 79 59 57 바이트

Arnauld 덕분에 -1 바이트
-ArBo 덕분에 -20 바이트
-음수 7 덕분에 -2 바이트

lambda x:[-i-~x*60for i in(x<2)*b'a[YUSOLI'+b'MJGDCA@>=']

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


답변

펄 6 , 42 바이트

{^60*$_∖[X+] [[|(^21 X*^4),25,50]xx$_,]}

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

가능한 모든 다트 값을 해결하는 무차별 대입 솔루션.


답변

자바 스크립트 (ES6),  55  54 바이트

@Shaggy 덕분에 1 바이트 절약

Rod가 사용하는 패턴을 기반으로합니다 .

n=>[...1121213+[n-1?33:2121242426]].map(x=>n-=x,n*=60)

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


답변

Perl 6 , 39 바이트 (37 자)

이것은 분명히 거대한 슬레지 해머를 사용하고 있지만 작동합니다. (그것은 단지 그것을 무차별 적으로 강요하지 않으며, 그것은 잔인하게 무차별 적으로 강제한다)

{^60*$_∖[X+] (|(^21 X*^4),25,50)xx$_}

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

이에 대한 설명은 다음과 같습니다.

{                                   } anonymous block for the
                                       set difference of
 ^60*$_                                   - 0 .. max score (60 * throwcount)
        [X+]                    xx$_      - the cross addition (throwcount times) of
             (                 )              all possible score values, being
              |(    X*  )                       flattened cross multiplication of
                ^21   ^4                          0..20 and 0..3 (for double and triple)
                         ,25,50                 and 25 and 50

X* ^4크로스 승수는 중복 값을 많이 생성 (이 20 + 관여 0과 1이의 될 것입니다 전에 십자가 추가하고), 그러나 우리는 차이 집합 사용하기 때문에 그 어떤 문제가 발생하지 않습니다 고유 값으로 작동합니다.

현재 $n == 1(빈 세트를 반환해야 함) 실패 하지만 문제가 제기 되어 향후 버전에서 작동 할 것입니다. JoKing의 버전 은 조금 더 길지만 $n == 1현재 Rakudo에서 작동합니다 .


답변

젤리 , 19 바이트

20Ż;25×Ɱ3ẎṖœċ⁸§ṪṖḟƊ

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


답변

MATL , 25 23 바이트

실수를 수정하고 2 바이트 를 골프 로 한 @Giuseppe 에게 감사 합니다!

25tE3:!21:q*vZ^!stP:wX-

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

설명

무차별 대입 접근.

25      % Push 25
tE      % Duplicate, double: gives 50
3:!     % Push column vector [1;2;3]
21:q    % Push row vector [0 1 ... 20]
*       % Multiply with broadcast. Gives a matrix with all products
v       % Concatenate everything into a column vector
Z^      % Implicit input: n. Cartesian power with exponent n
!s      % Sum of each row
tP      % Duplicate, flip: The first entry is now 60*n
:       % Push row vector [1 2 ... 60*n]
w       % Swap
X-      % Set difference. Implicit display

답변

J , 48 45 바이트

2&>(35 44,q:626b66jh)&,60&*-1 4 8 14,q:@13090

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

FrownyFrog 덕분에 -3 바이트

무차별 대입 솔루션을 시도했지만이로드의 아이디어를 이길 수 없었습니다.