コードゴルフゴルフスコア


22

金曜日だから...ゴルフに行こう!ゴルフのゲームのホールでのプレーヤーの得点を決定するコードを記述します。コードは、関数またはプログラム全体のいずれかです。ジャンルが示唆するように、最短のコードが勝ちます。

入力(パラメーターまたはstdin、選択):

  • ホールのパーを表す整数で、3〜6の間にあることが保証されています
  • ゴルファーのスコアを表す整数で、1から64の間であることが保証されています

出力(stdoutまたはreturnに出力、末尾の改行は許可されますが必須ではありません、選択):

  • スコアが1の場合、「Hole in one」を出力します
  • スコア== par-4およびpar> 5の場合、「Condor」を出力します
  • スコア==パー-3およびパー> 4の場合、「アルバトロス」を出力します
  • スコア== par-2およびpar> 3の場合、「Eagle」を出力します
  • スコア==パー-1の場合、「Birdie」を出力します
  • スコア==パーの場合、「パー」を出力します
  • スコア==パー+ 1の場合、「Bogey」を出力します
  • スコア==パー+ 2の場合、「Double Bogey」を出力します
  • スコア==パー+ 3の場合、「トリプルボギー」を出力します
  • スコア>パー+ 3の場合、「Haha you loser」を出力します

編集最短の回答を得て、デニスにおめでとうございます!


34
私はいつもトリプルボギーの後に何があるのだろうと思った。
ThisSuitIsBlackNot

3
ちなみに、最大額は6ではなく7です
ジョシュア

4
@Joshua自分の投稿を編集するのではなく、コメントした理由について一時的に混乱していました。それから私にぶつかった :P
Rɪᴋᴇʀ

@RikerW 2つのジョシュの名前は評判と同じくらい近いです:D-

2
入力は任意の順序で行えますか?
ドアノブ

回答:


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";
通知なしのバージョン、139 137バイト
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コアと$par変数を設定する前に、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: 3値を反転します。
-7:の最小値$s-$p$s>1です-4ので、max()は必要ありません4+$s-$p >= 0
-3: Array -> explode()、CoolestVetoに感謝します!
-5:不正な文字列リテラル未定義定数plus $r[-1] -> false、Ismael Miguelに感謝!
-24:explode()機能からprintf/ %sセットアップに移動し、いくつかの調整を行いました。方向の変更についてはIsmael Miguelに感謝します。
-6: 曲がってechoまた戻ってきました!


1
それを1つの文字列に変えて、任意の文字で分割できますか?
アディソンクランプ

@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";}
イスマエルミゲル

文字列リテラルをチートできるとは思っていませんでした。
-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バイトです。
イスマエルミゲル

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ありがとう!:)
アドナン

このコードは、英語以外の.exeをインストールするときに表示されるランダムなUnicodeメッセージのように見えます(Windowsの言語として英語を使用している場合)。しかし、見事です!
-clismique

@DerpfacePythonハハ、ランダムなユニコードメッセージは部分的にコードの一部であり、他の部分は圧縮されたメッセージの一部です。
アドナン

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 loser」となる入力を「Haha you loser」を含む行に強制的に移動させることです。
アディソンクランプ

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"ここk=s-p
user48538

ソリューションであなたのアプローチを使用できますか?
user48538

@ zyabin101それは、あからさまな盗作でない限り、落胆しない

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

私はこれが正しいことを比較的確信しています。

パーとプレイヤーのスコアの2つの整数を受け入れます。

これを作成するのに使用したLittle Luaのバージョンは、このチャレンジが投稿された後にアップロードされましたが、その後編集されませんでした。この課題を単純化するために何も追加されていないことは、コードから比較的明らかです。

LittleLua情報:

Little Luaの組み込み機能と機能に満足したら、情報ページと共にソースを利用できるようになります。

LittleLua V0.02


2
チャレンジが投稿されてから2時間後にファイルがDropboxにアップロードされたため、これは非競争的です。
Mego

2
github.comはコードホスティングの方がはるかに優れています...-
cat

絶対に、私はそれをセットアップする機会がありませんでした。
Skyl3r

3

マウス-2002223の 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

14バイトのDennisに感謝します!


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
ラムダは参照も、短くなり、Pythonでゴルフをするためのヒント

あなたは、間にスペースをドロップすることができます4し、else

1
アルゴリズムを変更すると、辞書ではなくリストにインデックスを付けることができます
cat

あなたは、間にスペースをドロップすることができますprintし、{、あなたは置くためにセミコロンを使用した場合a=print同じ行に、あなたは空白のバイトを剃ることができます

1
、他の提案のためのおかげ@tac実際に"C =ラムダX、Y:" "DEF C(X、Y)"よりも長い
マックス

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 2つの文字区切り記号で立ち往生しです。

それでも、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コードを思い付くのは難しい、と私は考えることができます。


最後の2行を1行に変更する必要があります[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?

皮肉なことに、私の2番目の答えは両方ともPythonです。ゴルフのヒントは大歓迎です!


ヒント:必要さえありませんb
リーキー修道女

編集します、nrnだけです。
OldBunny2800


また、Python 2は入力をint自動的にキャストすると思っていました。
リーキー修道女

-2

Python 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
文字列配列を使用すると、ここで非常に役立ちます。
アディソンクランプ

同意して、これは本当に最適化されていないように見えました。用語/結果の組み合わせは答えを短くします。
-ricdesi

なぜraw_input()が必要なのですか?input()だけを使用することはできませんか?
OldBunny2800

@ricdesiボギーを組み合わせました。
user48538
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.