多边形数


12

多边形数是ksize的一个点中的点数n

您将得到nk,并且您的任务是编写一个输出/打印相应编号的程序/功能。

计分

这是。以字节为单位的最短解决方案获胜。

第三六角数

3RD六边形数(k=6, n=3)是28因为有28上面的点。

测试用例

可以从此Pyth测试套件生成。

用法:每个测试用例n在上,k下两行。

n    k  output
10   3  55
10   5  145
100  3  5050
1000 24 10990000

更多信息


1
那不是图片中的第四个六角形数字吗?
尼尔

@Neil我们从零开始计数。
Leaky Nun

2
您确实在进行问题发布热潮,不是吗?
R. Kap

该示例可能已关闭。如果您将n=3k=6放入测试套件中,则会得到15。如果您输入n=4k=6,您将得到28
NonlinearFruit

Answers:


9

果冻,7 个字节

’;’;PH+

这使用公式

式

计算Ñ 小号 -gonal数。

在线尝试!

怎么运行的

’;’;PH+  Main link. Arguments: s, n

’        Decrement; yield s - 1.
 ;       Concatenate; yield [s - 1, n].
  ’      Decrement; yield [s - 2, n - 1].
   ;     Concatenate; yield [s - 2, n - 1, n].
    P    Product; yield (s - 2)(n - 1)n.
     H   Halve; yield (s - 2)(n - 1)n ÷ 2.
      +  Add; yield (s - 2)(n - 1)n ÷ 2 + n.

4

六边形,25字节

?(({"+!@/"*'+{/?('*})/2':

展开:

   ? ( ( {
  " + ! @ /
 " * ' + { /
? ( ' * } ) /
 2 ' : . . .
  . . . . .
   . . . .

读取k第一和n第二(使用任何分隔符)。

在线尝试!

说明

该程序是完全线性的,但是像在Hexagony中一样,执行的顺序到处都是:

在此处输入图片说明

路径以灰色深蓝色红色浅蓝色深绿色粉红色的顺序执行。如您所见,这三个/仅用于重定向流程。此外,.禁止操作。除去所有六边形的幻想,所得的线性程序为:

?(({?('*})"*'+{2':"+!@

这将计算标准公式

式

像其他大多数答案一样。为此,它使用以下五个内存边缘,并且内存指针(MP)以红色显示开始:

在此处输入图片说明

这样做的方法如下:

?    Read integer input s into edge A.
((   Decrement twice to get (s-2).
{    Move the MP forwards onto edge B.
?    Read integer input n into edge B.
(    Decrement to get (n-1).
'    Move the MP backwards onto edge C.
*    Multiply edges A and B to store the result (s-2)(n-1) in edge C.
}    Move the MP forwards onto edge B.
)    Increment to restore the value n.
"    Move the MP backwards onto edge A.
*    Multiply edge B and C to store the result (s-2)(n-1)n in edge A.
'    Move the MP backwards onto edge D.
+    Add edges E (initially 0) and A to copy (s-2)(n-1)n into edge D.
{    Move the MP forwards onto edge E.
2    Set the memory edge to value 2.
'    Move the MP backwards onto edge A.
:    Divide edge D by edge E to store (s-2)(n-1)n/2 in edge A.
"    Move the MP backwards onto edge C.
+    Add edges A and B to store (s-2)(n-1)n/2+n in edge C.
!    Print as integer.
@    Terminate the program.

如此简单的公式...需要25个字节?
Leaky Nun

4
@KennyLau毕竟这六角形的……
Martin Ender

六角形元问题
downrep_nation

3

05AB1E,8个字节

码:

D<LOIÍ*+

说明:

D         # Duplicate the input
 <LO      # Compute n × (n - 1) / 2
    IÍ    # Compute k - 2
      *   # Multiply, resulting into (k - 2)(n - 1)(n) / 2
       +  # Add, resulting into n + (k - 2)(n - 1)(n) / 2

使用CP-1252编码。在线尝试!


3

迷宫,13字节

?::(*?((*#/+!

在线尝试!

说明

由于其单字符命令(仅是语言的2D形式的必要条件),对于线性程序而言,迷宫可能令人惊讶。

这使用与其他几个答案相同的公式:

式

Op  Explanation                 Stack
?   Read n.                     [n]
::  Make two copies.            [n n n]
(   Decrement.                  [n n (n-1)]
*   Multiply.                   [n (n*(n-1))]
?   Read s.                     [n (n*(n-1)) s]
((  Decrement twice.            [n (n*(n-1)) (s-2)]
*   Multiply.                   [n (n*(n-1)*(s-2))]
#   Push stack depth, 2.        [n (n*(n-1)*(s-2)) 2]
/   Divide.                     [n (n*(n-1)*(s-2))/2]
+   Add.                        [(n+(n*(n-1)*(s-2))/2)]
!   Print.                      []

此时,指令指针碰到死胡同并转过身来。现在+再次执行,这是一个空操作(因为堆栈的底部隐含了无限数量的零),然后/尝试被零除以错误终止程序。


2

JavaScript(ES6),24个 22字节

(k,n)=>n+n*--n*(k-2)/2

说明:每个n-gon都可以看作是沿着一侧的n个点以及大小为n-1的k-2个三角形,即n + n(n-1)(k-2)/ 2。


k--*n--+2-n尚未经过测试
Leaky Nun

@KennyLau抱歉,(k,n)=>n*(--k*--n-n+2)/2仍然是24个字节。
尼尔

@KennyLau实际上,我忽略了--nfor 的明显用法(n-1)。天哪!
尼尔

@NeiI好,很好。
Leaky Nun

您可以通过以下方式节省再见:k=>n=>n+n*--n*(k-2)/2
丹尼斯


2

APL(Dyalog扩展),11 字节SBCS

感谢Adám提出此替代版本的帮助。

⊢+-∘2⍤⊣×2!⊢

在线尝试!

说明

⊢+-∘2⍤⊣×2!⊢  Right argument (⊢) is n. Left argument (⊣) is s.

        2!⊢  Binomial(n, 2) == n*(n-1)/2.
  -∘2⍤⊣×     Multiply (×) with by getLeftArgument (⊢) with (⍤) minus 2 (-∘2) called on it.
             In short, multiply binomial(n,2) with (s-2).
⊢+           Add n.

APL(Dyalog Unicode)12 11 字节SBCS

感谢Adám在打高尔夫球方面的帮助。

编辑:-1字节从ngn。

⊢+{⍺-22!⊢

在线尝试!

开球

⊢+{⍺-22!⊢  Right argument (⊢) is n. Left argument (⊣) is s.

        2!⊢  Binomial(n, 2) == n*(n-1)/2.
  {⍺-2     Multiply it by s-2.
⊢+           Add n.

1

其实是12个位元组

3@n(¬@D3╟π½+

在线尝试!

说明:

3@n(¬@D3╟π½+
3@n           push 3 copies of n (stack: [n, n, n, k])
   (¬         bring k to front and subtract 2 ([k-2, n, n, n])
     @D       bring an n to front and subtract 1 ([n-1, k-2, n, n])
       3╟π    product of top 3 elements ([n*(n-1)*(k-2), n])
          ½   divide by 2 ([n*(n-1)*(k-2)/2, n])
           +  add ([n*(n-1)*(k-2)/2 + n])

1

dc,14个字节

?dd1-*2/?2-*+p

在线尝试!

说明

这利用了以下公式(请注意,T n = n*(n-1)/2):

多边形数

                # inputs              | N S                  | 10 5
?dd             # push N three times  | N, N, N              | 10, 10, 10
   1-           # subtract 1          | (N-1), N, N          | 9, 10, 10
     *          # multiply            | (N-1)*N, N           | 90, 10
      2/        # divide by two       | (N-1)*N/2, N         | 45, 10
        ?       # push S              | S, (N-1)*N/2, N      | 5, 45, 10
         2-     # subtract 2          | (S-2), (N-1)*N/2, N  | 3, 45, 10
           *    # multiply            | (S-2)*(N-1)*N/2, N   | 135, 10
            +   # add                 | (S-2)*(N-1)*N/2 + N  | 145
             p  # print to stdout


1

MathGolf,8个字节

_┐*½?⌡*+

在线尝试!

n=10,k=5

_          duplicate first implicit input, stack is [10, 10]
 ┐         push TOS-1 without popping, stack is [10, 10, 9]
  *        multiply, stack is [10, 90]
   ½       halve TOS, stack is [10, 45]
    ?      rotate top 3 stack elements, popping k to the top: [10, 45, 5]
     ⌡     decrement TOS twice: [10, 45, 3]
      *    multiply: [10, 135]
       +   add: [145]

另一种选择是8位,是┼┐*½\⌡*+,它以相反的顺序输入。



0

Mathematica,17个字节

(#2-2)#(#-1)/2+#&

公式的直接应用。

用法

  f = (#2-2)#(#-1)/2+#&
  f[10, 3]
55
  f[10, 5]
145
  f[100, 3]
5050
  f[1000, 24]
10990000

0

J,14个字节

]++/@i.@]*[-2:

根据公式。

P(k, n) = (k - 2) * T(n - 1) + n where T(n) = n * (n + 1) / 2
        = (k - 2) * n * (n - 1) / 2 + n

用法

   f =: ]++/@i.@]*[-2:
   3 f 10
55
   5 f 10
145
   3 f 100
5050
   24 f 1000
10990000

说明

]++/@i.@]*[-2:
            2:  The constant function 2
          [     Get k
           -    Subtract to get k-2
        ]       Get n
     i.@        Make a range from 0 to n-1
  +/@           Sum the range to get the (n-1) Triangle number = n*(n-1)/2
                The nth Triangle number is also the sum of the first n numbers
         *      Multiply n*(n-1)/2 with (k-2)
]               Get n
 +              Add n to (k-2)*n*(n-1)/2

使用我的方法要多长时间?
Leaky Nun

0

TI基本(20字节)

Prompt K,N:(K-2)N(N-1)/2+N

0

GameMaker语言,44字节

n=argument1;return (argument0-2)*n*(n-1)/2+n

需要空间吗?
Leaky Nun

0

Python 3中,31个 30 28字节

Wiki文章中的简单公式

lambda s,n:(s-2)*(n-1)*n/2+n

感谢@Mego节省了一个字节!


您可以删除冒号和括号之间的空间。
Mego

0

傅里叶,18个字节

I-2~SI~Nv*N/2*S+No

在FourIDE上尝试!

将k作为第一输入,将n作为第二输入。使用公式:

伪代码说明:

S = Input - 2
N = Input
Print (N - 1) * N / 2 *S + N

0

Excel,22个字节

计算第- A1B1角数。

=(B1-2)*A1*(A1-1)/2+A1

0

Java 8,21字节

字节长度相等的所有单个答案:

k->n->n+n*~-n*(k-2)/2
k->n->n+n*--n*(k-2)/2
k->n->n+n*~-n*~-~-k/2
k->n->n+n*--n*~-~-k/2

说明:

在这里尝试。

k->n->            // Method with two integer parameters and integer return-type
  n+              //  Return `n` plus
    n*            //   `n` multiplied by
      ~-n         //   `n-1`
         *(k-2)   //   Multiplied by `k-2`
               /2 //   Divided by 2
                  // End of method (implicit / single-line return-statement)


0

外壳,9个字节

S+~*-2(Σ←

在线尝试!

说明

使用与我的dc答案相同的公式:

多边形数

            -- implicit inputs S, N                     | 5, 10
S+          -- compute N + the result of the following  | 10 + 
  ~*        --   multiply these two together            |      (   ) * 
    -2      --     S-2                                  |       S-2
      (Σ←)  --     triangle number of (N-1)             |              tri(N-1)

0

APL(NARS),16个字符,32个字节

{⍵+(⍺-2)×+/⍳⍵-1}

它基于以下事实:n×(n-1)/ 2 = sum(1..n-1)测试:

  f←{⍵+(⍺-2)×+/⍳⍵-1}
  10 f 3
27
  3 f 10
55
  5 f 19
532
  3 f 10
55
  5 f 10
145
  3 f 100
5050
  24 f 1000
10990000
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.