이 부분이 잘린 삼각 숫자입니까?


20

관련 OEIS 시퀀스 : A008867

잘린 삼각형 수

삼각형 숫자의 일반적인 속성은 삼각형으로 배열 할 수 있다는 것입니다. 예를 들어, 21을 취하고 os 의 삼각형으로 정렬하십시오 .

     영형 
    OO
   ooo
  oooo
 ooooo
oooooo

각 모서리에서 같은 크기의 삼각형을 자르는 "절단 :"을 정의 해 봅시다. 21을 자르는 한 가지 방법은 다음과 같습니다.

     . 
    . .
   ooo
  oooo
 . ooo.
. . oo. .

(삼각형은 .원본에서 잘립니다).

12 개가 있습니다 o나머지들 때문에 12 잘린 삼각형 번호입니다.

태스크

당신의 작업은 정수를 취하고 숫자가 잘린 삼각형 숫자인지 반환하는 (또는 표준 출력 방법을 사용하는) 프로그램이나 함수 (또는 동등한)를 작성하는 것입니다.

규칙

  • 표준 허점이 없습니다.
  • 입력은 음이 아닌 정수입니다.
  • 컷은 원래 삼각형의 절반을 초과하는 측면 길이를 가질 수 없습니다 (즉, 컷이 겹칠 수 없음)
  • 컷의 측면 길이는 0입니다.

테스트 사례

진실한 :

0
1
3
6
7
10
12
15
18
19

거짓 :

2
4
5
8
9
11
13
14
16
17
20

최대 50 개의 모든 정수에 대한 테스트 사례 : TIO Link

이것은 이므로 각 언어에서 가장 짧은 바이트 수로 제출하면 승리합니다!

code-golf  math  decision-problem  number-theory  integer  code-golf  number  decision-problem  functional-programming  code-golf  array-manipulation  matrix  code-golf  string  classification  string  code-challenge  binary  compression  decode  code-golf  string  string  code-challenge  balanced-string  encode  code-golf  number-theory  integer  base-conversion  code-golf  math  number-theory  geometry  abstract-algebra  code-golf  array-manipulation  sorting  optimization  code-golf  math  geometry  image-processing  generation  code-golf  string  cops-and-robbers  repeated-transformation  grammars  cops-and-robbers  repeated-transformation  grammars  code-challenge  restricted-source  tips  source-layout  javascript  code-challenge  kolmogorov-complexity  restricted-source  code-golf  combinatorics  counting  math  fastest-code  linear-algebra  code-golf  math  permutations  matrix  linear-algebra  code-golf  string  decision-problem  restricted-source  code-golf  number  array-manipulation  subsequence  code-golf  number  array-manipulation  matrix  code-golf  brainfuck  code-golf  color  code-golf  quine  source-layout  code-golf  subsequence  code-golf  string  ascii-art  code-golf  string  ascii-art  alphabet  code-golf  decision-problem  interpreter  hexagonal-grid  halting-problem  code-golf  string  polynomials  calculus  code-golf  math  decision-problem  matrix  complex-numbers  code-golf  random  code-golf  number  arithmetic 

1
우리는 진실되고 잘못된 결과를 출력해야합니까, 아니면 두 가지 일관된 값이 괜찮습니까?
밀 마법사

@WheatWizard 두 가지 일관된 값을 사용할 수 있습니다.
JungHwan Min

잘림이 많이 겹치더라도 결과는 잘림이 더 작은 작은 삼각형과 같습니다 (잘림의 측면 길이가 0 일 수있는 경우).
Asone Tuhid

답변:



7

하스켈 , 46 바이트

f n=or[mod(gcd(p^n)(4*n-1)-5)12<3|p<-[1..4*n]]

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

문제 (@flawr 덕분에)에 많은 수의 이론을 던져서이 특성을 발견했습니다.

n4n-1의 소인수 분해에서 5 mod 12 또는 7 mod 12 형식의 소수 가 짝수 번 나타나는 경우 정확하게 절단 된 삼각수 입니다.

예를 들어, 4n-15 2 = 25 로 더 이상 나눌 수 없고 총 5 개의 요인이 짝수 인 경우를 제외하고 5로 나눌 수 없습니다 .

Haskell에는 인수 분해 기능이 내장되어 있지 않지만 즉흥적으로 처리 할 수 ​​있습니다. 12 = 3 * 4 와 같은 소인수로 인수 분해를 사용하면 다음과 같은 진술을 사용할 수 있습니다.

n4n-1의 주요 거듭 제곱으로 인수 분해가 5 mod 12 또는 7 mod 12의 조건이없는 경우 잘린 삼각수 입니다.

k 로 나타나는 소수 p 의 검정력을로 추출 할 수 있습니다 . 그런 다음 결과 r 이 5 또는 7 모듈로 12가 아닌지 확인합니다 . 참고 R은 홀수이다. 우리는 또한 합성물을 p 로 확인 하고 소수에서 알 수있는 방법이 없지만 검사는 요인이하는 한 통과합니다.gcd(p^k)kmod(r-5)12>2

마지막으로, 부정 >2<3스위칭 True/ False출력하는 것은 우리가 사용할 수 있도록함으로써 바이트를 저장 or하는 대신 and.


관련된 특성은 4n-1로 취한 모듈로 12 의 제수 가 5와 7보다 총 1과 11이 더 많다는 것입니다.

53 바이트

f n=sum[abs(mod k 12-6)-3|k<-[1..4*n],mod(4*n)k==1]<0

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


정말 좋은 설명입니다!
Amphibological

6

파이썬 2 , 52 바이트

f=lambda n,b=1:b>n+1or(8*n-2+3*b*b)**.5%1>0<f(n,b+1)

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

출력 True/ False반전. 이 특성화를 사용합니다.

8n-2 가 일부 정수 a, b에 대해 2 -3b 2 를 형성 하는 경우 n 은 정확히 잘린 삼각 수 입니다.

에서 까지 8*n-2+3*b*b의 완벽한 사각형 인지 확인합니다 . when 이면 음수의 제곱근에 오류가 있기 때문에 피해야 하지만 홀수 만 작동 하기 때문에 아프지 않습니다 .b1n+1b=0n==0b

비재 귀적으로 수행 :

파이썬 2 , 53 바이트

lambda n:0in[(8*n-2+3*b*b)**.5%1for b in range(~n,0)]

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


재귀 및 비 재귀 솔루션은 일반적으로 파이썬에서 서로 경쟁이 있습니까?
boboquack

@boboquack 일반적으로 재귀 솔루션은 몇 바이트 이상 이깁니다 range. b>n+1기본 케이스가 길고 0in짧기 때문에 가깝습니다 .
xnor

5

R , 45 43 바이트

Vlo 덕분에 -2 바이트

(n=scan())%in%outer(T<-cumsum(0:n),3*T,"-")

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

나는 우리가 이것에 대한 첫 번째 n삼각형 숫자 만 확인하면된다고 확신 합니다. 무차별 대입 n은 삼각 숫자와 트리플의 쌍별 차이에 있는지 확인합니다 .


scan() n<-scan();n%in%outer(T<-cumsum(0:n),3*T,"-")
Vlo

@Vlo facepalm 나는 모든 곳에서 함수를 사용하는 습관에 빠져 들었다.
Giuseppe

그리고 방금 (n = scan ()) 대신 <-대입을 사용하는 습관에 들어갔습니다 ... tsk tsk
Vlo

5

젤리 , 10 바이트

0r+\ð_÷3f⁸

정수를 받아들이고 진리 값 (비 비어있는 목록) 또는 거짓 값 (비어있는 목록)을 반환하는 모나드 링크

온라인으로 사용해보십시오! (바닥 글은[0]결과를 그대로보여주기 위해 Python 표현을 수행합니다.)
... 또는 테스트 슈트를 봅니다(0에서 20까지 실행)

방법?

N이 주어지면 첫 번째 N 개의 삼각형 숫자를 형성하고, 각각에서 N을 빼고, 각 결과를 3으로 나누고 첫 번째 N 삼각형 숫자 중 하나 인 결과를 유지합니다.

0r+\ð_÷3f⁸ - Link: integer, N             e.g. 7
0r         - zero inclusive range N            [    0, 1, 2,   3,    4, 5,   6,   7]
  +\       - cumulative reduce with addition   [    0, 1, 3,   6,   10,15,  21,  28]
    ð      - start a new dyadic link with that, t, on the left and N on the right
     _     - t subtract N (vectorises)         [   -7,-6,-3,  -1,    3, 8,  14,  21]
      ÷3   - divivde by three (vectorises)     [-2.33,-2,-1.33,-0.33,1,2.67,4.67, 7]
         ⁸ - chain's left argument, t          [    0, 1, 3,   6,   10,15,  21,  28]
        f  - filter keep                       [                     1             ]
                                               - a non-empty list, so truthy

4

Pyt , 10 바이트

Đř△Đ3*ɐ-Ƒ∈

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

설명:

        Implicit input
Đ       Duplicate input
ř       Push [1,2,...,input]
△       For each element k in the array, get the kth triangle number
Đ       Duplicate the top of the stack
3*      Multiply by 3
ɐ       ɐ - All possible:
 -                       subtractions between elements of the two arrays  
Ƒ       Flatten the nested array
∈       Is the input in the array

당신도 나를 이겼습니다, +1 GG
FantaC

@tfbninja 내가 무엇을위한 더 좋은 설명이 있었으면 좋겠다 ɐ-않습니다
mudkip201을

1
추가, 원하는 경우 롤백 할 수 있습니다
FantaC


3

J , 22 바이트

e.[:,@(-/3*])2![:i.2+]

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

간단하고 다소 빈약 한 접근 방식.

설명

e.[:,@(-/3*])2![:i.2+]
             2![:i.2+]  Range of triangular numbers up to N
      (-/3*])           All possible subtractions of 3T from T 
                        where T is triangular up to the Nth triangular number
    ,@                  Flattened into a single list
e.                      Is N in the list?

e.2,@(!-/3*!)[:i.2+]
FrownyFrog

e.2,@(!-/3*!)1+i.,]아마
FrownyFrog

3

MATL , 12 바이트

tQ:qYst!3*-m

출력 1truthy를 들어, 0falsy합니다.

온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오 .

예제와 함께 작동하는 방식

입력 고려 6

t      % Implicit input. Duplicate
       % STACK: 6, 6
Q:q    % Increase, range, decrease element-wise. Gives [0 1 ... n]
       % STACK: 6, [0 1 ... 6]
Ys     % Cumulative sum
       % STACK: 6, [0 1 3 6 10 15]
t!     % Duplicate, transpose
       % STACK: 6, [0 1 3 6 10 15], [0;
                                     1;
                                     3;
                                     6;
                                     10;
                                     15]
3*     % Times 3, element-wise
       % STACK: 6, [0 1 3 6 10 15 21 28 36 45 55], [0;
                                                    3;
                                                    9;
                                                    18;
                                                    30;
                                                    45]
-      % Subtract, element-wise with broadcast
       % STACK: 6, [  0   1   3   6  10  15  21;
                     -3  -2   0   3   7  12  18;
                     -9  -8  -6  -3   1   6  12;
                    -18 -17 -15 -12  -8  -3   3;
                    -30 -29 -27 -24 -20 -15  -9;
                    -45 -44 -42 -39 -35 -30 -24;
                     -63 -62 -60 -57 -53 -48 -42]
m      % Ismember. Implicit display
       % STACK: 1



1

05AB1E , 11 바이트

ÅT3*+8*>ŲZ

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

설명

ÅT            # get a list of triangle numbers upto input
  3*          # multiply each by 3
    +         # add input to each
     8*       # multiply each by 8
       >      # increment each
        Ų    # check each for squareness
          Z   # max

이것은 홀수 완전 제곱 이면 숫자 T 가 삼각형 이라는 사실에 근거합니다 8T+1.
잘라낼 수있는 삼각형 목록에서 시작하여 가능한 큰 삼각형을 계산하고 실제로 삼각형인지 확인합니다.



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