这是一个截断的三角形数字吗?


20

相关OEIS序列:A008867

截断三角数

三角数的一个共同属性是它们可以排列成三角形。例如,取21并排列成os 的三角形:

     Ø 
    OO
   oo
  oo
 oo
oo

让我们定义一个“截断:”从每个角切割相同大小的三角形。截断21的一种方法如下:

     。 
    。。
   oo
  oo
 。oo。
。。哦。。

(的三角形.是从原始三角形切出的)。

o剩下12 秒,因此12是一个截断的三角形数字。

任务

您的工作是编写一个程序或函数(或等效函数),该程序或函数采用整数并返回(或使用任何标准输出方法)数字是否为截断的三角形数字。

规则

  • 没有标准漏洞。
  • 输入是非负整数。
  • 切口的边长不能超过原始三角形的一半(即,切口不能重叠)
  • 切口的边长可以为零。

测试用例

真相:

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

Answers:



7

Haskell,46个字节

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

在线尝试!

在对这个问题提出了大量的数论(感谢@flawr)之后,我发现了这个特征:

如果在4n-1的素数分解中,形式为5 mod 127 mod 12的任何素数出现偶数次,则n是一个截断的三角数。

例如,这意味着4n-1可能无法被5整除,除非它被5 2 = 25进一步整除并且5个因子的总数是偶数。

Haskell没有内置分解因数,但是我们可以即兴进行。如果我们将分解分解为质数幂,例如12 = 3 * 4,则可以使用等效语句:

如果将4n-1分解为素幂,则n不为形式5 mod 127 mod 12时,n就是一个截断的三角数。

我们可以提取素数的力量 p出现在ķ作为gcd(p^k)k。然后,我们检查结果r是否不是5或7模12的模mod(r-5)12>2。注意r是奇数。我们也将复合材料检查为p,但缺少一种将它们从质数中区分出来的方法,但是只要其因素能够通过,检查就会通过。

最后,否定>2<3和开关True/ False输出通过让我们使用节省了字节or代替and


一个相关的特征是取模为12 的4n-1的除数的总1和11的总数多于5和7的总数。

53个字节

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

在线尝试!


真的很好解释!
血液学

6

Python 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已经形成一个2 -3b 2对于某些整数A,B

我们检查从到的8*n-2+3*b*b任何平方是否是一个完美的平方。我们避免b1n+1b=0因为当时,它给出负数平方根的误差n==0,但这不会造成伤害,因为只有奇数b有效。

以非递归方式进行:

Python 2,53字节

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

在线尝试!


递归和非递归解决方案通常在python中相互竞争吗?
boboquack

@boboquack通常,递归解决方案胜出几个字节range。这是封闭的,因为它 b>n+1是一个较长的基本案例,而且0in很短。
xnor

5

R45 43字节

-2个字节归功于Vlo

(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的
习惯

5

果冻,10 字节

0r+\ð_÷3f⁸

接受整数并返回真实值(非空列表)或虚假值(空列表)的单子链接。

在线尝试!(页脚执行Python表示以按[0]原样显示结果)
...或查看测试套件(运行0到20(含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'Mar 3''5

@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

输出1为真,0为假。

在线尝试!验证所有测试用例

举例说明

考虑输入 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

这是基于以下事实:如果T8T+1是一个奇数完美的平方,则T为三角形。
我们从可以截断的三角形列表开始,根据它们计算可能的较大三角形,并检查其是否实际上是三角形。


1

Japt,16字节

ò å+ d@Zd_-3*X¶U

试试吧 | 检查所有测试用例


说明

                     :Implicit input of integer U
ò                    :Range [0,U]
  å+                 :Cumulative reduction by addition
     d@              :Does any X in array Z return true when passed through this function?
       Zd_           :  Does any element in Z return true when passe through this function?
          -3*X       :    Subtract 3*X
              ¶U     :    Check for equality with U

另类

ò å+ £Zm-3*XÃdøU

试试吧


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.