Mã Golf Golf


22

Đó là thứ Sáu ... vì vậy hãy đi chơi golf! Viết mã xác định điểm của người chơi trên một lỗ trong trò chơi golf. Mã có thể là một chức năng hoặc toàn bộ chương trình. Như thể loại cho thấy, mã ngắn nhất sẽ thắng.

Đầu vào (tham số hoặc stdin, sự lựa chọn của bạn):

  • Một số nguyên biểu thị mệnh của lỗ, được đảm bảo nằm trong khoảng từ 3 đến 6
  • Một số nguyên biểu thị điểm số của người chơi gôn, được đảm bảo trong khoảng từ 1 đến 64

Đầu ra (in ra thiết bị xuất chuẩn hoặc trả về, theo dõi dòng mới được phép nhưng không bắt buộc, lựa chọn của bạn):

  • nếu điểm là 1, hãy xuất "Hole in one"
  • nếu điểm == par - 4 và par> 5, xuất "Condor"
  • nếu điểm == par - 3 và par> 4, xuất "Albatross"
  • nếu điểm == par - 2 và par> 3, xuất "Eagle"
  • nếu điểm == par - 1, xuất "Birdie"
  • if points == par, xuất "Par"
  • nếu điểm == par + 1, xuất "Bogey"
  • nếu điểm == par + 2, xuất ra "Double Bogey"
  • nếu điểm == par + 3, xuất ra "Triple Bogey"
  • nếu điểm> par + 3, xuất ra "Haha bạn thua"

EDIT Chúc mừng Dennis có câu trả lời ngắn nhất!


34
Tôi luôn tự hỏi những gì sau ba bogey.
ThisSuitIsBlackNot

3
Ngẫu nhiên, mệnh giá lớn nhất là 7 chứ không phải 6.
Joshua

4
@Joshua Tôi tạm thời bối rối về lý do tại sao bạn bình luận thay vì chỉnh sửa bài đăng của riêng bạn. Rồi nó đánh tôi. : P
Rɪᴋᴇʀ

@RikerW hai tên của Josh gần giống như danh tiếng của họ: D
cat

2
Đầu vào có thể theo thứ tự nào không?
Doorknob

Câu trả lời:


6

Thạch , 61 byte

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

Hãy thử trực tuyến!

Lý lịch

Điều này sử dụng nén từ điển tĩnh của Jelly. Bạn có thể tìm thấy một máy nén ở đây . Cách này,

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

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

cũng như

“µḣ⁻×⁵ñBƑ»

“Hole in one”

là tương đương.

Làm thế nào nó hoạt động

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

Chúc mừng câu trả lời ngắn nhất!
Josh

13

PHP 5.3+, 173 167 166 159 156 151 127 121 byte

echo[Condor,Albatross,Eagle,Birdie,Par,$b=Bogey,"Double $b","Triple $b","Haha you loser"][min(4+$s-$p,8)]?:"Hole in one";
Phiên bản không có thông báo, 139 137 byte
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";

Đặt $scác $pbiến lõi và ar trước echovà tắt.

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

Chỉnh sửa
-6: Không lưu trữ mảng, chỉ cần gọi nó nếu cần.
-1: Lật ngược chim nhạn xung quanh.
-7: Thấp nhất $s-$pvới $s>1-4, do đó max()là không cần thiết, vì 4+$s-$p >= 0.
-3 : Array -> explode() , cảm ơn CoolestVeto!
-5: Cheaty chuỗi ký tự không xác định cộng với hằng số $r[-1] -> false, cảm ơn Ismael Miguel!
-24: Chuyển từ một explode()chức năng sang printf/ %sthiết lập, với một số điều chỉnh, hơn nữa là nhờ Ismael Miguel cho việc thay đổi hướng.
-6: Swerve , chúng tôi trở lại echomột lần nữa!


1
Bạn có thể biến nó thành một chuỗi và phân chia bởi một ký tự tùy ý không?
Addison Crump

@CoolestVeto Như một vấn đề thực tế, tôi có thể. Thật kỳ lạ, nó tiết kiệm ít byte hơn dự kiến, nhưng bất kỳ byte nào tốt hơn không có byte!
ricdesi

1
Bạn có thể thay thế $b="Bogey";bằng $b=Bogey;để lưu 2 byte. Ngoài ra, thay thế của bạn $s-1? ... : ...;với một echo ... ?: ...;. Đây là phiên bản dài 151 byte: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

Không có ý tưởng bạn có thể gian lận chuỗi chữ, gọn gàng.
ricdesi

1
Đây là một (có thể) làm việc và ngắn hơn : 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);. Về cơ bản: Đã xóa khai báo hàm, xóa explore, trích dẫn, sử dụng một mảng và sử dụng $argv. Mã cuối cùng dài 139 byte.
Ismael Miguel

10

05AB1E , 91 90 byte

Mã số:

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

Giải trình:

Phần 1:

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

Phần 2:

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

Điều này giống như "Condor Albatross Eagle Birdie Par 0Bogey Double0Bogey Triple0Bogey"sử dụng nén chuỗi và nội suy chuỗi. Chúng tôi sau đó phân chia trên không gian, sử dụng ð¡.

Phần 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

Phát hiện ra rất nhiều lỗi, sử dụng mã hóa CP-1252 .

Hãy thử trực tuyến!


... Whoa. Hoàn thành tốt
mèo

2
@tac Cảm ơn! :)
Ad Nam

Mã này trông giống như các thông báo Unicode ngẫu nhiên mà bạn nhận được khi bạn cài đặt một thứ .exe không phải tiếng Anh (nếu bạn có tiếng Anh là ngôn ngữ của mình trong các thứ của Windows). Trông thật ngoạn mục!
clismique

@DerpfacePython Haha, các tin nhắn unicode ngẫu nhiên là một phần của mã và phần khác là một phần của tin nhắn nén.
Ad Nam

6

Vitsy, 131 byte

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

Giải trình:

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.

Điều này hoạt động bằng cách tìm ra điểm số có liên quan đến mệnh giá, sau đó thực hiện các dòng khác nhau (và đạt được các chuỗi khác nhau).

Dùng thử trực tuyến!

Chế độ dài dòng (dành cho poops và cười khúc khích):

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;

"Đẩy 9. Điều này buộc bất kỳ mục nào lớn hơn 8 trở thành 9." Wat?
mèo

@tac Điều này là để buộc đầu vào sẽ dẫn đến "Haha bạn thua cuộc" đi đến dòng có chứa "Haha bạn thua cuộc".
Addison Crump

5

JavaScript (ES6), 125 124 byte

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

Gán cho một biến f=p=>s=>, ví dụ , sau đó gọi nó như vậy: f(6)(2)Par trước, sau đó ghi điểm.

Có thể rút ngắn bằng cách kết hợp "Bogey"s.


Một ví dụ về việc kết hợp các bogey là: ",Double ,Triple ".split`,`[k-1]+"Bogey"ở đâu k=s-p.
dùng48538

Tôi có thể sử dụng phương pháp của bạn trong giải pháp của tôi?
dùng48538

@ zyabin101 không được khuyến khích, miễn là nó không hoàn toàn đạo văn
mèo

@ zyabin101 Cảm ơn, tôi sẽ xem nếu điều đó làm cho nó ngắn hơn. Và vâng, hãy sử dụng phương pháp này trong câu trả lời của bạn.
Sản xuất ETH

Tôi đã sử dụng cái này.
dùng48538

4

LittleLua - 160 Byte (không cạnh tranh)

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])

Tôi tương đối chắc chắn tôi đã làm đúng.

Chấp nhận hai số nguyên, mệnh và điểm của người chơi.

Phiên bản của Little Lua mà tôi đã sử dụng để thực hiện điều này đã được tải lên sau khi thử thách này được đăng, nhưng không được chỉnh sửa sau đó. Nó tương đối rõ ràng từ mã không có gì được thêm vào để đơn giản hóa thách thức này

Thông tin của LittleLua:

Khi tôi hài lòng với các bản dựng sẵn và chức năng của Little Lua, nguồn sẽ có sẵn cùng với một thông tin.

LittleLua V0.02


2
Điều này không cạnh tranh vì tệp đã được tải lên Dropbox 2 giờ sau khi thử thách được đăng.
Mego

2
github.com tốt hơn nhiều trong việc lưu trữ mã ...
cat

Hoàn toàn, tôi chỉ chưa có cơ hội để thiết lập nó.
Skyl3r

3

Chuột-2002 , 223 207 byte

Xóa bình luận có thể sẽ giúp ...

??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"]$

Ung dung:

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

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

Chạy thử nghiệm:

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

Cảm ơn Dennis vì 14 byte!


1

Python 2, 186 179 158 byte

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])]

EDIT 1: đã thêm trường hợp "lỗ trong một" bị thiếu ...

EDIT 2: đánh ra một số byte (nhờ tac)


1
Một lambda sẽ ngắn hơn, cũng xem các mẹo để chơi gôn trong Python
cat

bạn có thể thả khoảng trống giữa 4else
mèo

1
Nếu bạn sửa đổi thuật toán, bạn chỉ có thể lập chỉ mục một danh sách chứ không phải là dict
cat

bạn có thể thả khoảng trắng giữa print{và nếu bạn sử dụng dấu chấm phẩy để đặt a=printtrên cùng một dòng, bạn có thể cạo một byte khoảng trắng
cat

1
@tac thực sự "c = lambda x, y:" dài hơn "def c (x, y):", cảm ơn vì những đề xuất khác
Max

1

Haskell - 131 byte (tính dòng mới)

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

lineslà cách duy nhất tôi có thể nghĩ đến để chơi golf trong một danh sách các chuỗi phải chứa các khoảng trống chỉ có quyền truy cập để Preludebị mắc kẹt với hai ký tự phân cách.

Tuy nhiên, Haskell thường không cạnh tranh (ít nhất là đối với các ngôn ngữ chung).


Bạn có thể làm importbất cứ điều gì bạn thích, không chỉ là các nội trang
mèo

1

Python 2.7, 226 byte

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]

Thật khó để đưa ra một mã trăn ngắn khi bạn đến bữa tiệc muộn, tốt nhất tôi có thể nghĩ ra.


Hai dòng cuối cùng nên được đổi thành một:[print r for r in l if r]
mèo

1

C, 198 byte

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 byte

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

Chứa một loạt các dấu vết. Kiểm tra nó trực tuyến!

Làm thế nào nó hoạt động

`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 byte

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

Ungolfed / giải thích:

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?

Câu trả lời thứ hai của tôi, trớ trêu thay cả hai đều bằng Python. Lời khuyên chơi golf đánh giá cao!


Gợi ý: bạn thậm chí không cần b.
Rò rỉ Nun

Tôi sẽ chỉnh sửa, chỉ cần nrn.
OldBunny2800

Có một cái nhìn về điều này .
Rò rỉ Nun

Ngoài ra, tôi nghĩ Python 2 sẽ inttự động nhập dữ liệu của bạn .
Rò rỉ Nun

-2

Python 2, 302 284 byte

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"

Nếu khoảng trắng hàng đầu được cho phép, đó sẽ là 282 byte:

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
Việc sử dụng một chuỗi chuỗi sẽ giúp bạn nghiêm túc ở đây.
Addison Crump

Đồng ý, điều này dường như thực sự không được tối ưu hóa. Bất kỳ sự kết hợp của các điều khoản / kết quả sẽ rút ngắn câu trả lời.
ricdesi

Tại sao bạn cần raw_input ()? Bạn không thể sử dụng đầu vào ()?
OldBunny2800

@ricdesi Tôi kết hợp các bogey.
dùng48538
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.