코드 골프 골프 점수


22

금요일입니다 ... 골프를 타러 가자! 골프 경기에서 홀에 대한 플레이어의 득점을 결정하는 코드를 작성하십시오. 코드는 함수 또는 전체 프로그램 일 수 있습니다. 장르에서 알 수 있듯이 가장 짧은 코드가 승리합니다.

입력 (파라미터 또는 표준 입력, 선택) :

  • 홀의 파를 나타내는 정수로 3에서 6 사이입니다.
  • 골퍼의 점수를 나타내는 정수로 1과 64 사이에 있습니다.

출력 (표준 출력 또는 리턴 인쇄, 후행 줄 바꿈이 허용되지만 필수는 아님) :

  • 점수가 1이면 "Hole in one"을 출력하십시오.
  • score == par-4 및 par> 5이면 "Condor"를 출력하십시오.
  • score == par-3 및 par> 4 인 경우 "Albatross"출력
  • score == par-2 및 par> 3이면 "Eagle"을 출력합니다
  • score == par-1 인 경우 "버디"출력
  • score == par 인 경우 "Par"출력
  • score == par + 1이면 "Bogey"출력
  • score == par + 2 인 경우 "Double Bogey"출력
  • score == par + 3이면 "Triple Bogey"를 출력합니다
  • 점수> par + 3 인 경우 "Haha you loser"

편집 가장 짧은 답변을 얻은 데니스에게 축하합니다!


34
나는 항상 트리플 보리 후의 것이 무엇인지 궁금했습니다.
ThisSuitIsBlackNot

3
우연히 최대 규모는 6이 아니라 7입니다.
Joshua Joshua

4
@Joshua 나는 자신의 게시물을 편집하는 대신 왜 댓글을 달았는지에 대해 일시적으로 혼란 스러웠습니다. 그리고 나에게 맞았다. : P
Rɪᴋᴇʀ

@RikerW 두 Josh의 이름은 명성만큼이나 가깝습니다 : D
cat

2
어떤 순서로 입력 할 수 있습니까?
Doorknob

답변:


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”.

최단 답변을 축하합니다!
Josh

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변수 와 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 : Cheaty 문자열 리터럴 undefined constant plus $r[-1] -> false, 감사합니다 Ismael Miguel!
-24 : 에서 이동하는 explode()(A)에 기능 printf/ %s방향의 변화 이스마엘 미겔 일부 비틀기 더 덕분으로 설정.
-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

05AB1E , 91 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에 언어로 영어가있는 경우) 나타나는 임의의 유니 코드 메시지처럼 보입니다. 그래도 장관처럼 보입니다!
clismique

@DerpfacePython Haha에서 임의의 유니 코드 메시지는 부분적으로 코드의 일부이고 다른 부분은 압축 된 메시지의 일부입니다.
Adnan

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.

이것은 점수가 파에 상대적인지 파악한 다음 다른 줄을 실행하고 다른 줄을 얻음으로써 작동합니다.

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

상세 모드 (똥과 낄낄 거림) :

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

자바 스크립트 (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".


bogeys를 결합하는 예는 다음과 같습니다. ",Double ,Triple ".split`,`[k-1]+"Bogey"where k=s-p.
user48538

솔루션에서 접근 방식을 사용할 수 있습니까?
user48538

@ zyabin101 완전히 표절하지 않는 한 낙담하지 않습니다
cat

@ zyabin101 고마워, 그것이 더 짧아 지는지 볼 것이다. 그리고 네, 당신의 대답에이 접근법을 자유롭게 사용하십시오.
ETHproductions

나는 이미 이것을 사용하고 있습니다.
user48538

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

2
github.com 은 코드 호스팅에 훨씬 능숙합니다 ...
cat

물론, 나는 그것을 설정할 기회가 없었습니다.
Skyl3r

3

Mouse-2002 , 223207 바이트

댓글을 삭제하면 도움이 될 것입니다 ...

??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

떠들썩한 파티, 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

14 바이트의 Dennis에게 감사합니다!


1

파이썬 (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
람다는 더 짧을 것입니다. 또한 파이썬에서 골프를하기위한 팁을
cat

당신은 사이의 공간을 놓을 수 4else
고양이

1
알고리즘을 수정하면 dict 대신 목록을 색인 할 수 있습니다.
cat

당신은 사이의 공간 놓을 수 print{, 당신은 세미콜론을 사용하는 경우를 넣어 a=print같은 줄에, 당신은 공백의 바이트 면도 할 수 있습니다
고양이

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

linesPrelude두 개의 문자 구분 기호 로만 액세스 할 수있는 공백을 포함 해야하는 문자열 목록에서 골프를 생각할 수있는 유일한 방법 입니다.

그럼에도 불구하고, Haskell은 일반적으로 (일반 언어에 비해) 경쟁이 아닙니다.


import
고양이

1

파이썬 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]

파티에 늦었을 때 짧은 파이썬 코드를 만들기가 어렵습니다.


마지막 두 줄은 다음과 같이 변경해야합니다.[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

apt, 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

파이썬 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?

두 번째 대답은 아이러니하게도 파이썬입니다. 골프 팁 감사합니다!


힌트 : 필요하지 않습니다 b.
Leaky Nun

편집하고 NRN 만하겠습니다.
OldBunny2800

이것 좀 봐 .
Leaky Nun

또한 Python 2는 입력을 int자동으로 캐스팅한다고 생각했습니다 .
Leaky Nun

-2

파이썬 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

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