高尔夫代码高尔夫得分


22

今天是星期五...所以我们去打高尔夫球吧!编写确定球员在高尔夫球比赛中的得分的代码。该代码可以是一个函数或整个程序。如体裁所示,最短的代码胜出。

输入(参数或标准输入,您可以选择):

  • 表示孔的面值的整数,保证在3到6之间
  • 代表高尔夫球手得分的整数,保证介于1到64之间

输出(打印到标准输出或返回,允许但不要求尾随换行符):

  • 如果得分为1,则输出“孔合一”
  • 如果得分== par-4且par> 5,则输出“神鹰”
  • 如果分数==参数-3且参数> 4,则输出“信天翁”
  • 如果得分== par-2且par> 3,则输出“ Eagle”
  • 如果score == par-1,输出“ Birdie”
  • 如果成绩==标准杆,则输出“标准杆”
  • 如果得分==标准杆+ 1,则输出“柏忌”
  • 如果得分== par + 2,则输出“双柏忌”
  • 如果分数== par + 3,则输出“三柏忌”
  • 如果得分> par + 3,则输出“哈哈,你输了”

编辑祝贺丹尼斯答案最短!


34
我一直想知道三柏忌之后会发生什么。
ThisSuitIsBlackNot

3
顺便最大的面值是7不是6.
约书亚

4
@Joshua我对您为什么评论而不是编辑自己的帖子感到困惑。然后打我。:P
Rɪᴋᴇʀ

@RikerW两个乔希的名字是亲如他们的名声:d

2
输入可以按任何顺序进行吗?
门把手

Answers:


6

果冻,61 字节

_«4ị“Ƙḷ“&SẆ@ẓ“&T¡UQ“½⁽Ð'÷ṿɼ“½Œż“¡œM“v⁵“¥⁻c“£Ḋ⁶»
瓵ḣ⁻×⁵ñBƑ»’?

在线尝试!

背景

这使用了Jelly的静态字典压缩。您可以在这里找到压缩机。这条路,

“Ƙḷ“&SẆ@ẓ“&T¡UQ“½⁽Ð'÷ṿɼ“½Œż“¡œM“v⁵“¥⁻c“£Ḋ⁶»

“Bogey“Double Bogey“Triple Bogey“Haha you loser“Condor“Albatross“Eagle“Birdie“Par”

以及

“µḣ⁻×⁵ñBƑ»

“Hole in one”

是等效的。

怎么运行的

_«4ị“Ƙḷ“&SẆ@ẓ“&T¡UQ“½⁽Ð'÷ṿɼ“½Œż“¡œM“v⁵“¥⁻c“£Ḋ⁶»  Helper link. Arguments: score, par

_                                                Subtract the par from the score.
 «4                                              Cap the difference at 4.
   ị                                             Index into the list at the right.
    “Ƙḷ“&SẆ@ẓ“&T¡UQ“½⁽Ð'÷ṿɼ“½Œż“¡œM“v⁵“¥⁻c“£Ḋ⁶»  Yield a list of strings.


瓵ḣ⁻×⁵ñBƑ»’?  Main link. Arguments: score, pair

            ?  If...
           ’   the decremented score if non-zero:
ç                Call the helper link on both input arguments.
 “µḣ⁻×⁵ñBƑ»      Else, return “Hole in one”.


13

PHP 5.3+,173 167 166 159 156个 151 127 121字节

echo[Condor,Albatross,Eagle,Birdie,Par,$b=Bogey,"Double $b","Triple $b","Haha you loser"][min(4+$s-$p,8)]?:"Hole in one";
免公告版本,139137字节
echo$s-1?["Condor","Albatross","Eagle","Birdie","Par",$b="Bogey","Double $b","Triple $b","Haha you loser"][min(4+$s-$p,8)]:"Hole in one";

$s$p之前设置core和ar变量echo

分解图
echo [Condor,
      Albatross,
      Eagle,
      Birdie,
      Par,
      $b = Bogey,
      "Double $b",
      "Triple $b",
      "Haha you loser"][ min( 4+$s-$p,8 ) ]
  ?: "Hole in one";

编辑
-6:不存储数组,仅在需要时调用它。
-1:翻转三元组。
-7:最低$s-$p$s>1-4,所以max()是不必要的,因为4+$s-$p >= 0
-3 Array -> explode():,谢谢CoolestVeto!
-5:欺骗字符串字面量未定义常量加$r[-1] -> false,感谢Ismael Miguel!
-24:explode()通过一些调整功能移至printf/ %s设置,这要多亏Ismael Miguel改变了方向。
-6: Swerve,我们又回到echo了!


1
您可以将其转换为一个字符串并用任意字符分割吗?
Addison Crump

@CoolestVeto事实上,我可以。奇怪的是,它节省的字节数少于预期的字节数,但是任何字节总比没有字节好!
ricdesi

1
您可以替换$b="Bogey";使用$b=Bogey;,以节省2个字节。另外,用替换您$s-1? ... : ...;echo ... ?: ...;。这是151个字节的长版本:function g($s,$p){$b=Bogey;echo explode("-","Condor-Albatross-Eagle-Birdie-Par-$b-Double $b-Triple $b-Haha you loser")[min(4+$s-$p,8)]?:"Hole in one";}
Ismael Miguel

不知道您可以欺骗字符串文字,整洁。
ricdesi

1
这是一个(可能)工作而又简短的工作:printf([Condor,Albatross,Eagle,Birdie,Par,'%s','Double %s','Triple %s','Haha you loser'][min(4+$argv[1]-$argv[2],8)]?:'Hole in one',Bogey);。基本上:删除了函数声明,删除了explore,删除了引号,使用了一个数组并使用了$argv。最终代码为139个字节长。
Ismael Miguel

10

05AB1E91 90字节

码:

-5+U“¥Ê€†€µ“ª"0Bogey"ДCondor Albatross²è Birdie Par ÿ‹¶ÿ½¿ÿ”ð¡“Haha€î loser“X0¹1Qm*@0ð:ðÛ

说明:

第1部分:

-5+                          # Computes Score - Par + 5
   U                         # Store in X
    “¥Ê€†€µ“ª                # Short for "Hole in one"
             "0Bogey"        # Push this string
                     Ð       # Triplicate

第2部分:

”Condor Albatross²è Birdie Par ÿ‹¶ÿ½¿ÿ”ð¡

这与"Condor Albatross Eagle Birdie Par 0Bogey Double0Bogey Triple0Bogey"使用字符串压缩和字符串插值相同。然后,我们使用分割空格ð¡

第3部分:

“Haha€î loser“                # Push "Haha you loser"
              X               # Push X
               0¹1Qm          # Compute 0 ^ (score == 1), this translates 1 to 0 and 
                                everything else to 1.
                    *         # Multiply the top two items
                     @        # Get the string from that position
                      0ð:     # Replace zeros with spaces
                         ðÛ   # Trim off leading spaces

发现很多错误,使用CP-1252编码。

在线尝试!


哇 做得很好。

2
@tac谢谢!:)
Adnan

该代码有点像安装非英语.exe程序时(如果您在Windows程序中将英语作为语言)安装时收到的随机Unicode消息。看起来很棒!
clismique

@DerpfacePython哈哈,随机unicode消息是代码的一部分,另一部分是压缩消息的一部分。
阿德南

6

Vitsy,131个字节

D1-)["eno ni eloH"rZ;]r-5+D9/([X9]mZ
"rodnoC"
"ssortablA"
"elgaE"
"eidriB"
"raP"
"yegoB"
4m" elbuoD"
4m" elpirT"
"resol uoy ahaH"

说明:

D1-)["eno ni eloH"rZ;]r-5+D9/([X9]mZ
D1-)[                ]      If the second input is 1, do the bracketed stuff.
     "eno ni eloH"rZ;       Output "Hole in one" and quit.
r                           Reverse the stack.
 -                          Subtract the top two items.
  5+                        Add 5 to fix for negative values of score.
    D9/([  ]                If the result of that is greater than 8, do the stuff in brackets.
         X                  Remove the top item.
          9                 Push 9. This forces any items greater than 8 to be 9.
            m               Execute this number line.
             Z              Output everything in the stack.

这是通过弄清楚分数相对于par的分数,然后执行其不同的行(并获得不同的字符串)来实现的。

在线尝试!

详细模式(用于便便和傻笑):

duplicate top item;
push 1;
subtract top two;
if (int) top is not 0;
begin recursive area;
toggle double quote;
push 14;
eval(stack);
capture stack as object with next;
 ;
eval(stack);
push input item;
 ;
push 14;
push length of stack;
capture stack as object with next;
push all ints between second to top and top;
toggle double quote;
reverse stack;
output stack as chars;
generic exit;
end recursive area;
reverse stack;
subtract top two;
push 5;
add top two;
duplicate top item;
push 9;
divide top two;
if (int) top is 0;
begin recursive area;
remove top;
push 9;
end recursive area;
goto top method;
output stack as chars;
:toggle double quote;
reverse stack;
capture stack as object with next;
push 13;
eval(stack);
capture stack as object with next;
push cosine of top;
toggle double quote;
:toggle double quote;
push inverse sine of top;
push inverse sine of top;
capture stack as object with next;
reverse stack;
push inverse tangent of top;
push 10;
push 11;
push length of stack;
push inverse cosine of top;
toggle double quote;
:toggle double quote;
push 14;
push length of stack;
g;
push 10;
push e;
toggle double quote;
:toggle double quote;
push 14;
push input item;
push 13;
reverse stack;
push input item;
B;
toggle double quote;
:toggle double quote;
reverse stack;
push 10;
push pi;
toggle double quote;
:toggle double quote;
push number of stacks;
push 14;
g;
capture stack as object with next;
B;
toggle double quote;
:push 4;
goto top method;
toggle double quote;
 ;
push 14;
push length of stack;
push 11;
flatten top two stacks;
capture stack as object with next;
duplicate top item;
toggle double quote;
:push 4;
goto top method;
toggle double quote;
 ;
push 14;
push length of stack;
push whether (int) top item is prime;
push input item;
reverse stack;
push tangent of top;
toggle double quote;
;
;
:toggle double quote;
reverse stack;
push 14;
push inverse sine of top;
capture stack as object with next;
push length of stack;
 ;
flatten top two stacks;
capture stack as object with next;
push number of stacks;
 ;
push 10;
factorize top item;
push 10;
push all ints between second to top and top;
toggle double quote;

“按下9。这将迫使大于8的任何项目变为9。” ?

@tac这将强制导致“ Haha you失败者”的输入转到包含“ Haha you失败者”的行。
Addison Crump

5

JavaScript(ES6),125 124字节

p=>s=>"Hole in one,Condor,Albatross,Eagle,Birdie,Par,Bogey,Double Bogey,Triple Bogey".split`,`[s-1&&s-p+5]||"Haha you loser"

分配给变量,例如 f=p=>s=>,然后像这样调用它:f(6)(2)首先获得标准杆,然后得分。

可以通过组合"Bogey"s 来缩短。


合并柏忌的一个示例是:",Double ,Triple ".split`,`[k-1]+"Bogey"where k=s-p
user48538

我可以在解决方案中使用您的方法吗?
user48538

@ zyabin101并不令人沮丧,只要它不是彻底的窃

@ zyabin101谢谢,我看看是否能使它更短。是的,请随时在您的答案中使用此方法。
ETHproductions 2013年

我已经在用这个了。
user48538,2013年

4

LittleLua-160字节(非竞争性)

r()P=I B="Bogey"r()Z={"Hole in one","Condor","Albatross","Eagle","Birdie","Par",B,"Double "..B,"Triple "..B,"Haha, you loser"}p(I=='1'a Z[1]or Z[I-P+6]or Z[10])

我相对确定我做对了。

接受两个整数,标准杆和玩家的分数。

发布此挑战后,我曾经上传过的Little Lua版本已上传,但此后未进行编辑。从代码中可以明显看出,没有添加任何内容来简化此挑战

LittleLua信息:

一旦我对Little Lua的内置功能和功能感到满意,将在信息页面中提供源代码。

LittleLua V0.02


2
这是非竞争性的,因为在发布挑战后2小时,文件已上传到Dropbox。
Mego 2016年

2
github.com是代码托管好得多......

绝对,我只是没有机会进行设置。
Skyl3r

3

鼠标2002年223 207字节

删除评论可能会有所帮助...

??s:p:s.1=["Hole in one"]s.p.4-=p.5>["Condor"]s.p.3-=p.4>["Albatross"]s.p.2-=p.3>["Eagle"]s.p.1-=["Birdie"]s.p.=["Par"]s.p.1+=["Bogey"]s.p.2+=["Double Bogey"]s.p.2+=["Double Bogey"]s.p.3+>["Haha you loser"]$

取消高尔夫:

? ? s: p:

s. 1 = [
  "Hole in one"
]

~ 1
s. p. 4 - = p. 5 > [
  "Condor"
]

~ 2
s. p. 3 - = p. 4 > [
  "Albatross"
]

~ 3
s. p. 2 - = p. 3 > [
  "Eagle"
]

~ 4
s. p. 1 - = [
  "Birdie"
]

~ 5
s. p. = [
  "Par"
]

~ 6
s. p. 1 + = [
  "Bogey"
]

~ 7
s. p. 2 + = [
  "Double Bogey"
]

~ 8
s. p. 2 + = [
  "Double Bogey"
]

s. p. 3 + > [
  "Haha you loser"
]


$

2

bash中,150个 136字节

b=Bogey
(($2<2))&&echo Hole in one||tail -$[$2-$1+5]<<<"Haha you loser
Triple $b
Double $b
$b
Par
Birdie
Eagle
Albatross
Condor"|head -1

测试运行:

llama@llama:...code/shell/ppcg74767golfgolf$ for x in {1..11}; do bash golfgolf.sh 6 $x; done                                                          
Hole in one
Condor
Albatross
Eagle
Birdie
Par
Bogey
Double Bogey
Triple Bogey
Haha you loser
Haha you loser

感谢Dennis提供14个字节!


1

Python 2中,186个 179 158字节

def c(s,p):a="Bogey";print["Condor","Albatross","Eagle","Birdie","Par",a,"Double "+a,"Triple "+a,"Haha you loser","Hole in one"][([[s-p+4,8][s-p>3],9][s==1])]

编辑1:添加了丢失的“一个洞”的情况下...

编辑2:打出一些字节(感谢TAC)


1
Lambda会更短,另请参见Python打高尔夫球的技巧

你可以滴之间的空间4else

1
如果您修改算法,则只需索引列表即可,而不是字典
Cat

您可以在print和之间删除空格{,如果使用分号将a=and print放在同一行,则可以删除一个字节的空白
Cat

1
@tac实际上“ c = lambda x,y:”比“ def c(x,y):”长,感谢其他建议
Max

1

Haskell-131字节(计数换行符)

1%p="Hole in one"
s%p=lines"Condore\nAlbatros\nEagle\nBirdie\nPar\nBogey\nDouble Bogey\nTriple Bogey\nHaha you loser"!!min(4-p+s)8

lines 这是我想想的唯一方法,那就是在必须包含只能访问空格的空格的字符串列表中打高尔夫球 Prelude使用两个字符定界符。

尽管如此,Haskell通常并不具有这种竞争力(至少与通用语言相比)。


你可以import任何你喜欢的,不只是建宏

1

Python 2.7,226个字节

p,s=input()
b="Bogey"
l={s==1:"Hole in one",5<p==s+4:"Condor",4<p==s+3:"Albatross",3<p==s+2:"Eagle",s==p-1:"Birdie",s==p:"Par",s==p+1:b,s==p+2:"Double "+b,s==p+3:"Triple "+b,s>p+3:"Haha you loser"}
for r in l:
 if r:print l[r]

迟到聚会时很难拿出一个简短的python代码,这是我能想到的。


最后两行应改为:[print r for r in l if r]
cat

1

C,198字节

main(){char s=8,p=4,m[]="Hole in one.Condor.Albatross.Eagle.Birdie.Par.Bogey.Double Bogey.Triple Bogey.Haha you loser",*t,*x,i=0;for(x=m;t=strtok(x,".");x=0,i++)if((s-1?s-p>3?9:s-p+5:0)==i)puts(t);}

0

Japt,97个字节

`Ho¤  e
CÆBr
AlßNoss
Eag¤
Bir¹e
P
zD½e zTp¤ zHa y lo r`rz"Bogey
" ·g9m´V©V-U+6

包含一堆无法打印的内容。 在线测试!

怎么运行的

`Ho¤  e\nCÆBr\nAlßNoss\nEag¤\nBir¹e\nP\nzD½e zTp¤ zHa y lo r`                        rz"Bogey\n" ·  g9m´ V© V-U+6
"Hole in one\nCondor\nAlbatross\nEagle\nBirdie\nPar\nzDouble zTriple zHaha you loser"rz"Bogey\n" qR g9m--V&&V-U+6

              // Implicit: U = par, V = score
"..."         // Take this long, compressed string.
rz"Bogey\n"   // Replace each instance of "z" with "Bogey\n".
qR            // Split at newlines.

--V&&V-U+6    // If V is 1, take 0; otherwise, take V-U+5.
9m            // Take the smaller of this and 9.
g             // Get the item at this index in the previous list of words.
              // Implicit output

0

Python 2.7.2,275个字节

s=int(input())
p=int(input())
a="Bogey"
if s==1:b="Hole in one"
elif p-4==s:b="Condor"
elif p-3==s:b="Albatross"
elif p-2==s:b="Eagle"
elif p-1==s:b="Birdie"
elif p==s:b="Par"
elif p+1==s:b=a
elif p+2==s:b="Double "+a
elif p+3==s:b="Triple "+a
else:b="Haha you loser"
print b

取消高尔夫/解释:

score = int(input())
par = int(input)
foo = "Bogey" # a shortcut for 3 of the outputs
if score == 1:
    output = "Hole in one"
elif par - 4 == score:
    output = "Condor"
...
elif par == score:
    output = "Par"
elif par + 1 == score:
    output = foo # See what I mean?
elif par + 2 == score:
    output = "Double " + foo # Huh? Huh?
elif par + 3 == score:
    output = "Triple " + foo # That makes 3.
else:
    output = "Haha you loser"
print output # Make sense?

我的第二个答案,具有讽刺意味的是,两者都在Python中。高尔夫技巧表示赞赏!


提示:您甚至不需要b
Leaky Nun

我要编辑,只是nrn。
OldBunny2800 '16

看看这个
Leaky Nun

另外,我认为Python 2会int自动将您的输入强制转换。
Leaky Nun

-2

Python 2中,302个 284字节

i=input();j=input()
if j==1:print"Hole in one"
if(j==i-4)&(i>5):print"Condor"
if(j==i-3)&(i>4):print"Albatross"
if(j==i-2)&(i>3):print"Eagle"
if j==i-1:print"Birdie"
if j==i:print"Par"
if j>i:
 k=j-i
 if k<4:
  print["","Double ","Triple "][k-1]+"Bogey"
 else:
  print"Haha you loser"

如果允许前导空格,则为282个字节:

i=input();j=input()
if j==1:print"Hole in one"
if(j==i-4)&(i>5):print"Condor"
if(j==i-3)&(i>4):print"Albatross"
if(j==i-2)&(i>3):print"Eagle"
if j==i-1:print"Birdie"
if j==i:print"Par"
if j>i:
 k=j-i
 if k<4:
  print["","Double","Triple"][k-1],"Bogey"
 else:
  print"Haha you loser"

12
字符串数组的使用将对您有很大帮助。
Addison Crump

同意,这似乎没有优化。术语/结果的任何组合都会缩短答案。
ricdesi

为什么需要raw_input()?您不能只使用input()吗?
OldBunny2800'3

@ricdesi我合并了柏忌。
user48538
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.