Golfceptionが到着


8

ゴルフしながらゴルフをしましょう。

問題:

  • 穴までの距離は当初700m
  • ボールに当たるたびに、250-350mの穴まで進みます。これはランダムです。
  • 各ヒットは水に入る確率が5%であり、これによりペナルティとしてヒット数が1ずつ増加します。
  • ボールが250m未満の場合、80%の確率で行方不明の距離の70%から90%(再びランダム)進み、14%の確率で90%から99%進み、10%(およびフィニッシュ)の1%と5ペナルティとして水に出てヒット数を1増やす割合。
  • ボールが10m未満になると、95%がホールに入る(フィニッシング)と5%がミッシングパスの75%進みます。水に行く可能性はありません。

明確化:

-ボールが穴から270mにあると想像してください。300mヒットすると、穴までの距離は30になります。つまり、距離は絶対値になります。

-数字が常に整数になるのは、たとえばボールが穴から300m離れているときに300mが当たる確率に対処するためです。

-ヒットのmの数を切り捨てます。1mにいると想像してください。穴に入らないことの5%に落ちると、0進みます。

入力:

何もない

出力:

各ヒットの穴までの距離/ n

総ヒット数

出力例(コメントを印刷しないでください)

433m // 267mのヒット(700-267 = 433)

130m // 303mのヒット(433-303 = 130)

130m //水球+1ペナルティヒット

35m // 95mヒット(130-95 = 35)

7m // 28分間ヒット(35-28 = 7

0m //穴の上のボール

合計ヒット7 // 6ヒット+1ペナルティ

これはコードゴルフです!


例題全体を追加できますか?ボールが水中に入った場合、それは、打たれたときの距離、または水中になかった場合の距離です。
TheLethalCoder 2017年

@TheLethalCoder水に出ても距離が変わらない場合は、最後のヒットを繰り返し
ます

@NeilSlater問題は、どれだけのヒットがあり、何個の入力があるか分からないことです。
Java Gonzar 2017年

おい!PPCGへようこそ!私の意見では、これは良い最初の挑戦です!今後ともよろしくお願いいたします。:)
Arjun

ボールが10m未満の場合でも、ボールが水中に入る可能性は5%ありますか?
musicman523 2017年

回答:


1

JavaScript、204 198バイト

P=console.log
r=x=>Math.random()*x
for(d=700,h=0;d;)x=r(100),D=d>=250?r(20)<1?h++*0:250+r(100):d*(d<10?x<5?.75:1:x<5?h++*0:x<6?1:.9+r(x<20?.09:-.2)),d=Math.abs(d-D|0),h++,P(d+'m')
P('Total hits '+h)

より少ないゴルフ:

r=x=>Math.random()*x
for(d=700,h=0;d;){
    x=r(100),
    D=
        d>=250
            ? r(20)<1
                ? h++*0
                : 250+r(100)
        : d * (d<10
            ? x<5
                ? .75
                : 1
        : x<5
            ? h++*0
        : x<6
            ? 1
        : .9 + r(
            x<20
                ? .09
                : -.2
            )
        ),
    d=Math.abs(d-D|0),
    h++,
    console.log(d+'m')
}

console.log('Total hits '+h)

コードを実行して、この出力を 1回取得しました。250メートル以内に入ると距離が長くなるとは思いませんが、コードが問題の基準をどのように満たしているかを説明できますか?
musicman523 2017年

1
@ musicman523距離のパーセンテージはなく、パーセンテージ値を距離に追加したようです。これを修正しました。
darrylyeo

3

Python 3.6、250バイト

isaacgのおかげで4バイト、KoishoreRoyのおかげで1バイト節約されました。

d=700                    # Current distance
from random import*
r=randrange              # Function that gets a random value in the range [0, input)
i=0                      # Number of strokes
while d:
 i+=1;x=r(20)<1          # x is False 95% of the time
                         # My justification for reusing this random value
                         # is that it's used once and only once, separate by if/elif
 if d<10:d-=[d,d*.75][x] # We're within putting range; goes in if x is true; otherwise makes 75% progress
 elif x:i+=1             # Goes in the water, add a stroke
 elif d<250:
  s=r(95);d-=[d,d*[.7+r(21)/100,.9*r(10)/100][s<15]][s>0]
                         # Only 95 because we already checked to see if it would go in the water
                         # 99% of the time (s>0), it doesn't go in
                         # 14% of the time (s<15), it makes 90-99% progress
                         # Otherwise, it makes 70-90% progress
 else:d-=250+r(101)      # Lose 250-350 yards
 d=int(abs(d));print(f'{d}m')
print(f'Total hits {i}')

オンラインでお試しください!(TIOはまだPython 3.6をサポートしていないため、6バイトのコストでPython 3.5印刷構文を使用します。)


ヒット数が不足している(ボールが水に入ってヒットを追加できることを忘れないでください)
Java Gonzar

更新してさらに少しゴルフをしました!
musicman523

1
@KoishoreRoyそうですね、そうではありません。理由がわからないようです。私がセミコロンを使い始める前にそれは間違いなく機能しましたが、セミコロンを取り除くことは役に立たないようです。何かご意見は?
musicman523 2017年

1
それは最後の終わりでエラーを報告しています。すべてのスペースをタブに置き換えてみましたが、それも何もわかりませんでした。また、コードの実行とは関係なく、以下を使用すると数バイトを節約できますfrom random import randrange as r
Koishore Roy

1
私の悪い。先ほど言ったことは実際には1バイト増加します!from random import*;r=randrange代わりに使用してください。これにより1バイトが削減されます。
Koishore Roy 2017

2

Perl 6、212バイト

my&p=(^*).pick;say 'Total hits ',(700,->\d{my \n=d>249??abs d-(p(20)??250+p
100!!0)!!d>9??d-(|((d*(70+p 21)div 100) xx 80),|((d*(90+p 10)div 100) xx
14),d,|(0 xx 5))[p 100]!!p(20)??d div 4!!0;"{n}m".say;n}...0)-1

&pは、0引数を1から1 までランダムに選択するヘルパー関数です。後の式'Total hits 'は、前の要素に基づいて各要素を生成する遅延構成リストです。要素は生成されたときに出力されますが、あまり機能的ではありませんが、中間配列に格納するよりも短いです。

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