什么是标准刮擦?


12

在高尔夫中,使用以下公式计算球场的标准划痕:

(3*num_of_3_par_holes + 4*num_of_4_par_holes + 5*num_of_5_par_holes) - difficulty_rating

给定这4个输入,您的任务是计算高尔夫球场的标准刮擦度。

您应该以任何标准格式输入格式

[num_of_3_pars, num_of_4_pars, num_of_5_pars], difficulty rating

但是如果保存字节,那么许多人会以不同的方式接受输入。

您应该通过meta上任何可接受的方法(例如从函数返回)输出最终结果。

最短的代码获胜,因为这是


所有输入都将是整数且至少为1吗?(此外,输出将始终为正吗?)
门把手

我们可以将输入取反吗?
完全人类

13
尽管这是微不足道的,但是一些测试用例将是不错的。
丹尼斯

9
有趣的是,关于高尔夫的代码高尔夫。
sergiol

Answers:


28

划痕,145个字节

-2感谢boboquack
-??? 因为用Oto写的比英文短

(因为暂存是标准暂存。)

adi()-temi(a)kuati(thadi adi()-temi(b)kuati(thadi adi()-temi(c)kuati(thadi adi()-temi(d)kuati(thadi ma(((c) -(((a)+(d)))+((4)*(((a)(b))+(c translation:ask()and wait set(a)to(answer ask()and wait set( b)至(answer ask()and wait set(c)至(answer ask()and wait set(d)to(answer say(((c)-((a)+(d)))+((4 )*((((a)+(b))+(c

这是一个示例运行:

a = 18,b = 13,c = 41,d = 23; answer = 124


18

果冻,6个字节

JḊ~æ.N

在线尝试!

怎么运行的

JḊ~æ.N  Main link. Argument: [a, b, c, d]

J       Indices; yield [1, 2, 3, 4].
 Ḋ      Dequeue; yield [2, 3, 4].
  ~     Bitwise NOT; yield [-3, -4, -5].
     N  Negate; yield [-a, -b, -c, -d].
   æ.   Dot product; yield
        (-3)(-a) + (-4)(-b) + (-5)(-c) + (-d) = 3a + 4b + 5c - d.


6

Haskell,22个字节

(a#b)c d=3*a+4*b+5*c-d

在线尝试!用法:(3#2)5 7产量35

这种不太好的输入格式比简单的解决方案短一个字节:

f a b c d=3*a+4*b+5*c-d

无点的漂亮输入格式:(23字节)

(-).sum.zipWith(*)[3..]

在线尝试!绑定到f并与通话f [3,2,5] 7


5

Mathematica,13岁 14 个字节

{3,4,5,-1}.#&

感谢@GregMartin。将输入作为长度为4的列表。


多亏了“但是,如果它节省字节,那么许多人会以不同的方式接受输入”,我认为您应该将输入作为长度为4的列表,并将第二个解决方案缩短为{3,4,5,-1}.#&(13个字节)。
格雷格·马丁

你是对的..
科宇甘



4

Perl6,16个字符

3* *+4* *+5* *-*

(是的,这是一个子。)

样品运行:

> say 3* *+4* *+5* *-*
{ ... }

> say (3* *+4* *+5* *-*)(4, 3, 2, 1)
33

在线尝试!




3

x86-64机器码,14字节

8D 3C 7F 8D 14 92 8D 04 B7 01 D0 29 C8 C3

遵循System V AMD64调用约定(在Gnu / Linux系统上普遍存在)的函数,该函数采用四个整数参数:

  • EDI = num_of_3_par_holes
  • ESI = num_of_4_par_holes
  • EDX = num_of_5_par_holes
  • ECX =难度评分

它在EAX寄存器中返回一个值,即标准暂存器。

非高尔夫装配助记符:

; int ComputeStandardScratch(int num_of_3_par_holes,
;                            int num_of_4_par_holes,
;                            int num_of_5_par_holes,
;                            int difficulty_rating);
lea   edi, [rdi+rdi*2]    ; EDI = num_of_3_par_holes * 3
lea   edx, [rdx+rdx*4]    ; EDX = num_of_5_par_holes * 5
lea   eax, [rdi+rsi*4]    ; EAX = EDI + (num_of_4_par_holes * 4)
add   eax, edx            ; EAX += EDX
sub   eax, ecx            ; EAX -= difficulty_rating
ret                       ; return, leaving result in EAX

只是公式的简单翻译。有趣的是,这基本上与您在优化速度时也会编写的代码相同。这确实显示了86年代的功率LEA指令,其目的是 OAD的Ë ffective 一个 ddress,但可以(通过2个低功率乘法)在单个指令做加法和缩放,使其成为一个功能强大的多功能算术主力。


3

果冻10 7字节

3r5×⁸S_

在线尝试!

-3个字节感谢Erik The Outgolfer!

怎么运行的!

3r5×⁸S_  Main link: a, the pars as a list and b, the difficulty rating

     S   The sum of
3r5        [3, 4, 5]
   ×       each element times
    ⁸      the left argument (a)
      _  Subtract the right argument (b)

省略列表的标准方法是省略,[]但是您可以3r5×⁸S_更多地使用它(3r5-> [3, 4, 5]= left参数将其与区别开来S×是可交换的)。
暴民埃里克(Erik the Outgolfer)

3

八度,14字节

@(a)[3:5 -1]*a

在线尝试!

大约是MATL回答的两倍。最初,我从字面上将其移植到MATL,但事实证明iY*它比更长*s。请注意,按a顺序包含孔和难度的输入应为列向量。


正如问题说,你可以把输入的任何格式,如果这样可以节省字节,这个工程的14: @(a)[3:5 -1]*a。输入是[3 holes; 4 holes; 5holes; difficulty]
Tom Carpenter

@TomCarpenter哦,我认为列表+数字部分是强制性的。这有点奇怪:“你应该……但是你可以”。我想我会修改我的答案。
桑契斯'17


2

Neim,7个字节

'π𝐂𝕋𝐬S𝕊

说明:

'π         Push 345
           The character ' pushes the next character's index in the codepage plus 100.
           The characters ", + and * do that same thing except add a different number.
           This means that in Neim, all 3 digit numbers can be expressed with 2 characters.
           This commit was pushed 8 days before the answer was posted.
  𝐂        Get the characters
   𝕋       Vectorised multiply with the input
    𝐬       Sum the resulting list
     S𝕊    Subtract the input

替代程序: 3𝐈ᛖ𝕋𝐬S𝕊

而不是先推送345然后获取字符,而是[1 2 3]使用创建数组3𝐈,然后使用来向每个元素添加2

在线尝试!


This commit was pushed 8 days before the answer was posted.好吧,您实际上并不需要这个。
暴民埃里克(Erik the Outgolfer)

@EriktheOutgolfer当然可以。但是我也不需要解释。您要我删除它吗?
Okx

基本上,由于元共识已更改,因此您不必担心不竞争。
暴民埃里克(Erik the Outgolfer)

@EriktheOutgolfer我确实担心不竞争,因为元共识是主观和不清楚的。但是在这种情况下,没有理由抱怨它在那里。与没有发布该评论相比,您要花费更多的时间。
Okx

由于某些原因,内联代码块中的大多数Neim字符看起来像?盒子。
CalculatorFeline


2

迅速325 19个字节

我意识到您不需要var f=,因为您可以像Python lambda那样调用它:

{$0*3+$1*4+$2*5-$3}

在线测试!

用法: {$0*3+$1*4+$2*5-$3}(a,b,c,d)a,b,c,d参数在哪里。


2

brainfuck,39个字节

,[->+++<],[->++++<],[->+++++<],[->-<]>.

在线尝试!

接受输入并将输出打印为ASCII字符;例如,值99将表示为c。

说明:

,                                       Take the first input in Cell 0
 [      ]                               While the data being pointed to (Cell 0) is nonzero
  ->+++<                                Decrement Cell 0 and add 3 to Cell 1
                                        Now 4 times the first input is in Cell 1
         ,                              Take the second input in Cell 0
          [->++++<]                     Add 4 times the second input to Cell 1
                   ,[->+++++<]          Take the third input in Cell 0 and add five times its value to Cell 1
                              ,         Take the fourth input in Cell 0
                               [    ]   While the data being pointed to (Cell 0) is nonzero
                                ->-<    Decrement Cells 0 and 1
                                     >. Print the value in Cell 1


2

dc,14个字符

?3*?4*+?5*+?-p

数字需要在单独的行中传递。

样品运行:

bash-4.4$ dc -e '?3*?4*+?5*+?-p' <<< '4
> 3
> 2
> 1'
33

在线尝试!



2

,,, 12个字节

↻5×↻4×↻3×↻-#

说明

以输入4、3、2、1为例。

↻5×↻4×↻3×↻-#

              implicit input                  [4, 3, 2, 1]
↻             rotate the stack clockwise      [1, 4, 3, 2]
 5            push 5                          [1, 4, 3, 2, 5]
  ×           pop 2 and 5 and push 2 * 5      [1, 4, 3, 10]
   ↻          rotate the stack clockwise      [10, 1, 4, 3]
    4         push 4                          [10, 1, 4, 3, 4]
     ×        pop 3 and 4 and push 3 * 4      [10, 1, 4, 12]
      ↻       rotate the stack clockwise      [12, 10, 1, 4]
       3      push 3                          [12, 10, 1, 4, 3]
        ×     pop 4 and 3 and push 4 * 3      [12, 10, 1, 12]
         ↻    rotate the stack clockwise      [12, 12, 10, 1]
          -   pop 10 and 1 and push 10 - 1    [12, 12, 9]
           #  pop 12, 12, 9 and push the sum  [33]
              implicit output

2

库比克斯,36字节

w;r5*U4I;I3*r;UW;;r;<\r/;r-I/+p+O@;w

在线尝试!

      w ; r
      5 * U
      4 I ;
I 3 * r ; U W ; ; r ; <
\ r / ; r - I / + p + O
@ ; w . . . . . . . . .
      . . .
      . . .
      . . .

观看它运行

一个相当线性的程序,会绕回自身几次。基本步骤:

  • I3*r;U; 得到第一个输入,乘以3并清理堆栈
  • I4*/r\ 获取下一个输入并乘以4。将结果向下旋转。
  • Iw5*Ur;w<;r;;W 获取下一个输入,乘以5并清理堆栈
  • I-r;w; 获取最后一个输入,从par 5结果中减去并清理堆栈
  • /+p+O\@ 添加到par 4结果,将par3结果置于顶部添加,输出和暂停

2

HP-15C(RPN),14个字节

指令十六进制代码:

41 C4 F5 FC C5 F4 FC FA C5 F3 FC FA 31 FB

可读版本:

001 {       44  1 } STO 1
002 {          33 } R⬇
003 {           5 } 5
004 {          20 } ×
005 {          34 } x↔y
006 {           4 } 4
007 {          20 } ×
008 {          40 } +
009 {          34 } x↔y
010 {           3 } 3
011 {          20 } ×
012 {          40 } +
013 {       45  1 } RCL 1
014 {          30 } −

在运行程序之前,将这四个数字按顺序装入堆栈。


不错的第一答案。欢迎来到PPCG!
musicman523

2

Excel VBA,20字节

匿名VBE立即窗口函数,其输入范围[A3:A6]分别[A3:A5]代表345par孔的数量,并[A6]代表难度。输出到VBE立即窗口

?[3*A3+4*A4+5*A5-A6]

上面是电话的精简版

Debug.Print Application.Evaluate("=3*A3+4*A4+5*A5-A6")

"=3*A3+4*A4+5*A5-A6"[...]包装器指示,其中给出是匿名单元格的公式,?Print带有隐式Debug.by上下文的不推荐使用的版本

更有趣的版本,34字节

具有与上述相同的I / O条件的匿名VBE立即窗口功能。

?[SUMPRODUCT(A3:A5,ROW(A3:A5))-A6]

上面是电话的精简版

Debug.Print Application.Evaluate("=SUMPRODUCT(A3:A5,ROW(A3:A5))")

"=SUMPRODUCT(A3:A5,ROW(A3:A5))"[...]包装程序指示,其中给出的是匿名单元格的公式,?是使用Print隐式Debug.by上下文的不推荐使用的版本。在此版本中,范围[A3:A5]和该范围的行号(ROWS(A3:A5))作为数组传递

Excel版本,18字节

当然,以上版本因此适用于excel版本

=3*A3+4*A4+5*A5-A6

=SUMPRODUCT(A3:A5,ROW(A3:A5))-A6





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.