Skor Golf Kode Golf

22

Ini hari Jumat ... jadi mari kita bermain golf! Tulis kode yang menentukan skor pemain pada hole di permainan golf. Kode dapat berupa fungsi atau keseluruhan program. Seperti yang ditunjukkan genre, kode terpendek menang.

Input (parameter atau stdin, pilihan Anda):

  • Integer yang mewakili par hole, dijamin antara 3 dan 6
  • Integer yang mewakili skor pegolf, dijamin antara 1 dan 64

Output (cetak ke stdout atau kembali, mengikuti baris baru diizinkan tetapi tidak diperlukan, pilihan Anda):

  • jika skor 1, hasilkan "Lubang dalam satu"
  • jika skor == par - 4 dan par> 5, output "Condor"
  • jika skor == par - 3 dan par> 4, output "Albatross"
  • jika skor == par - 2 dan par> 3, output "Eagle"
  • jika skor == par - 1, hasilkan "Birdie"
  • jika skor == par, output "Par"
  • jika skor == par + 1, hasilkan "Bogey"
  • jika skor == par + 2, hasilkan "Bogey Ganda"
  • jika skor == par + 3, hasilkan "Triple Bogey"
  • jika skor> par + 3, hasilkan "Haha you loser"

EDIT Selamat kepada Dennis karena memiliki jawaban terpendek!

Josh
sumber
34
Saya selalu bertanya-tanya apa yang terjadi setelah triple bogey.
ThisSuitIsBlackNot
3
Kebetulan par terbesar adalah 7 bukan 6.
Joshua
4
@ Yosua, saya sementara bingung tentang mengapa Anda berkomentar bukannya mengedit posting Anda sendiri. Lalu aku tersadar. : P
Rɪᴋᴇʀ
@RikerW kedua nama Josh sedekat reputasi mereka: D
cat
2
Apakah input bisa dalam urutan apa pun?
Gagang Pintu

Jawaban:

6

Jelly , 61 byte

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

Cobalah online!

Latar Belakang

Ini menggunakan kompresi kamus statis Jelly. Anda dapat menemukan kompresor di sini . Cara ini,

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

dan

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

sebaik

“µḣ⁻×⁵ñBƑ»

dan

“Hole in one”

adalah setara.

Bagaimana itu bekerja

_«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”.
Dennis
sumber
Selamat atas jawaban tersingkat!
Josh
13

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

echo[Condor,Albatross,Eagle,Birdie,Par,$b=Bogey,"Double $b","Triple $b","Haha you loser"][min(4+$s-$p,8)]?:"Hole in one";
Versi bebas pemberitahuan, 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";

Tetapkan variabel $sinti dan $par sebelum echodan Anda tidak aktif.

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

Suntingan
-6: Tidak menyimpan array, panggil saja jika perlu.
-1: Membalik terner sekitar.
-7: Yang terendah $s-$pdengan $s>1itu -4, jadi yang max()tidak perlu, karena 4+$s-$p >= 0.
-3 Array -> explode() :, terima kasih CoolestVeto!
-5: String konstan Cheaty undefined plus $r[-1] -> false, terima kasih Ismael Miguel!
-24: Beralih dari explode()fungsi ke printf/ %ssetup, dengan beberapa penyesuaian, lebih banyak terima kasih kepada Ismael Miguel untuk perubahan arah.
-6: Membelokkan , kita kembali echolagi!

ricdesi
sumber
1
Bisakah Anda mengubahnya menjadi satu string dan dipisah oleh karakter yang berubah-ubah?
Addison Crump
@ CoolestVeto Sebenarnya, saya bisa. Anehnya, ini menyimpan lebih sedikit byte dari yang diharapkan, tetapi setiap byte lebih baik daripada tidak ada byte!
ricdesi
1
Anda dapat mengganti $b="Bogey";dengan $b=Bogey;untuk menyimpan 2 byte. Juga, ganti $s-1? ... : ...;dengan Anda dengan echo ... ?: ...;. Ini versi panjang 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
Tidak tahu Anda bisa menipu string literal, rapi.
ricdesi
1
Berikut adalah (mungkin) kerja dan lebih pendek: 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);. Pada dasarnya: Menghapus deklarasi fungsi, menghapus explore, menghapus tanda kutip, menggunakan array dan digunakan $argv. Kode terakhir adalah 139 byte.
Ismael Miguel
10

05AB1E , 91 90 byte

Kode:

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

Penjelasan:

Bagian 1:

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

Bagian 2:

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

Ini sama dengan "Condor Albatross Eagle Birdie Par 0Bogey Double0Bogey Triple0Bogey" menggunakan kompresi string dan interpolasi string. Kami kemudian berpisah pada spasi, menggunakan ð¡.

Bagian 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

Menemukan banyak bug, menggunakan CP-1252 pengkodean .

Cobalah online!

Adnan
sumber
... Wah Bagus sekali.
kucing
2
@tac, terima kasih! :)
Adnan
Kode ini agak seperti pesan Unicode acak yang Anda dapatkan ketika Anda menginstal hal .exe non-Inggris (jika Anda menggunakan bahasa Inggris sebagai bahasa Anda di Windows). Tampak spektakuler!
clismique
@DerpfacePython Haha, pesan unicode acak adalah bagian dari kode dan bagian lainnya adalah bagian dari pesan terkompresi.
Adnan
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"

Penjelasan:

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.

Ini bekerja dengan mencari tahu apa skor relatif terhadap par, kemudian mengeksekusi baris yang berbeda (dan mendapatkan string yang berbeda).

Cobalah secara Online!

Mode Verbose (untuk kotoran dan cekikikan):

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;
Addison Crump
sumber
"Dorong 9. Ini memaksa item yang lebih besar dari 8 menjadi 9." Wat?
kucing
@tac Ini untuk memaksa input yang menghasilkan "Haha you loser" untuk masuk ke baris yang berisi "Haha you loser".
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"

Tetapkan ke variabel misalnya f=p=>s=> , lalu panggil seperti: f(6)(2)Par pertama, lalu skor.

Mungkin dapat dipersingkat dengan menggabungkan "Bogey"s.

Produksi ETH
sumber
Contoh menggabungkan bogey adalah: di ",Double ,Triple ".split`,`[k-1]+"Bogey"mana k=s-p.
user48538
Bisakah saya menggunakan pendekatan Anda dalam solusi saya?
user48538
@ zyabin101 yang tidak berkecil hati, asalkan itu bukan plagiarisme
kucing
@ zyabin101 Terima kasih, saya akan melihat apakah itu membuatnya lebih pendek. Dan ya, jangan ragu untuk menggunakan pendekatan ini dalam jawaban Anda.
ETHproduksi
Saya sudah menggunakan ini.
user48538
4

LittleLua - 160 Bytes (tidak kompetitif)

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

Saya relatif yakin saya melakukan ini dengan benar.

Menerima dua bilangan bulat, par dan skor pemain.

Versi Little Lua yang saya gunakan untuk membuat ini diunggah setelah tantangan ini diposting, tetapi tidak diedit sesudahnya. Secara relatif jelas dari kode bahwa tidak ada yang ditambahkan untuk menyederhanakan tantangan ini

Info LittleLua:

Setelah saya puas dengan built in dan fungsionalitas Little Lua, sumber akan tersedia bersama dengan infopage.

LittleLua V0.02

Skyl3r
sumber
2
Ini tidak kompetitif karena file diunggah ke Dropbox 2 jam setelah tantangan diposting.
Mego
2
github.com jauh lebih baik di kode hosting ...
cat
Tentu saja, saya tidak punya kesempatan untuk mengaturnya.
Skyl3r
3

Mouse-2002 , 223 207 byte

Menghapus komentar kemungkinan akan membantu ...

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

Tidak Disatukan:

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


$
kucing
sumber
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

Uji coba:

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

Terima kasih kepada Dennis untuk 14 byte!

Gagang pintu
sumber
1

Python 2, 186 179 158 bytes

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: menambahkan case "hole in one" yang hilang ...

EDIT 2: mengeluarkan beberapa byte (terima kasih untuk tac)

Maks
sumber
1
Seekor lambda akan lebih pendek, juga lihat tips untuk bermain golf di Python
cat
Anda dapat menjatuhkan spasi antara 4danelse
kucing
1
Jika Anda memodifikasi algoritme, Anda hanya dapat mengindeks daftar daripada dict
cat
Anda dapat meletakkan spasi di antara printdan {, dan jika Anda menggunakan titik koma untuk meletakkan a=dan printpada baris yang sama, Anda dapat mencukur byte spasi putih
cat
1
@tac sebenarnya "c = lambda x, y:" lebih panjang dari "def c (x, y):", terima kasih atas saran yang lain
Max
1

Haskell - 131 byte (menghitung baris baru)

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 adalah satu-satunya cara yang dapat saya pikirkan untuk bermain golf dalam daftar string yang harus berisi ruang dengan akses hanya Prelude jadi terjebak dengan pembatas dua karakter.

Meski demikian, Haskell biasanya tidak kompetitif ini (setidaknya terhadap bahasa umum).

Steven Armstrong
sumber
Anda dapat melakukan importapa pun yang Anda suka, bukan hanya builtin
cat
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]

Sulit untuk datang dengan kode python pendek ketika Anda terlambat ke pesta, terbaik yang bisa saya pikirkan.

janrn
sumber
Dua baris terakhir harus diubah menjadi satu:[print r for r in l if r]
cat
1

C, 198 Bytes

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);}
Johan du Toit
sumber
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

Berisi banyak hal yang tidak patut. Uji secara online!

Bagaimana itu bekerja

`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
Produksi ETH
sumber
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

Tidak digabungkan / dijelaskan:

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?

Jawaban kedua saya, ironisnya keduanya ada di Python. Tips bermain golf dihargai!

OldBunny2800
sumber
Petunjuk: Anda bahkan tidak perlu b.
Leaky Nun
Saya akan mengedit, hanya nrn.
OldBunny2800
Lihatlah ini .
Leaky Nun
Juga, saya pikir Python 2 memberikan input Anda intsecara otomatis.
Leaky 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"

Jika memimpin ruang putih diizinkan, itu akan menjadi 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"
pengguna48538
sumber
12
Penggunaan array string akan sangat membantu Anda di sini.
Addison Crump
Setuju, ini sepertinya sangat tidak dioptimalkan. Kombinasi istilah / hasil apa pun akan mempersingkat jawabannya.
ricdesi
Mengapa Anda perlu raw_input ()? Tidak bisakah Anda menggunakan input () saja?
OldBunny2800
@ricdesi Saya menggabungkan bogeys.
user48538