Golfception đến


8

Hãy chơi golf trong khi chúng ta chơi gôn.

Vấn đề:

  • Khoảng cách đến lỗ ban đầu là 700m
  • Mỗi cú đánh vào bóng sẽ khiến nó tiến tới lỗ 250-350m, điều này là ngẫu nhiên.
  • Mỗi lần truy cập có 5% xác suất rơi vào nước, điều này sẽ khiến số lần truy cập tăng thêm 1 lần như một hình phạt.
  • Khi bóng dưới 250m, nó sẽ tăng 70% đến 90% (lại ngẫu nhiên) khoảng cách bị thiếu với xác suất 80%, Tiến 90% đến 99% với Xác suất 14%, 1% thực hiện 10% (và kết thúc) và 5 % đi xuống nước và tăng số lần truy cập lên 1 như một hình phạt.
  • Khi bóng dưới 10m, nó có 95% đi vào lỗ (hoàn thiện) và 5% tiến 75% của con đường còn thiếu. Không có xác suất đi nước.

Làm rõ:

-Hình bóng cách lỗ 270m, nếu chúng ta đánh trong 300m, khoảng cách đến lỗ bây giờ là 30, điều này có nghĩa, khoảng cách sẽ là giá trị tuyệt đối.

-Numbers sẽ luôn là số nguyên do xác suất đánh trúng ví dụ 300m khi bóng cách lỗ 300m.

-Tìm xuống số m của cú đánh, hãy tưởng tượng bạn đang ở độ cao 1m, nếu bạn rơi vào 5% không đi vào lỗ, nó sẽ tiến lên 0.

Đầu vào:

Không có gì

Đầu ra:

Khoảng cách đến lỗ trong mỗi lần nhấn / n

Tổng số lượt truy cập

Ví dụ đầu ra (không in bình luận)

433m // Lượt truy cập cho 267m (700-267 = 433)

130m // Lượt truy cập cho 303m (433-303 = 130)

130m // Bóng trên nước +1 cú sút phạt

35m // Lượt trong 95m (130-95 = 35)

7m // Lượt trong 28m (35-28 = 7

0m // Bóng trên lỗ

Tổng số lần truy cập 7 // 6 lần truy cập +1 hình phạt

Đây là cá tuyết!


Bạn có thể thêm một tác phẩm đầy đủ thông qua ví dụ? Nếu quả bóng đi trong nước là khoảng cách khi nó bị đánh hoặc nó sẽ ở đâu nếu nó không ở trong nước?
TheLethalCoder

@TheLethalCoder nếu nó đi vào khoảng cách không thay đổi, hãy lặp lại lần truy cập cuối cùng
Java Gonzar

@NeilSlater vấn đề là bạn không biết sẽ có bao nhiêu lượt truy cập nên có bao nhiêu đầu vào?
Java Gonzar

Chào! Chào mừng đến với PPCG! Theo tôi, đây là một thử thách đầu tiên tốt! Chúc may mắn cho tương lai! :)
Arjun

Khi bóng dưới 10m, vẫn còn 5% cơ hội bóng đi trong nước?
sĩ523

Câu trả lời:


1

JavaScript, 204 198 byte

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)

Ít chơi gôn hơn:

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)

Chạy mã của bạn, tôi đã nhận được đầu ra này một lần. Tôi không nghĩ khoảng cách có thể tăng lên khi bạn đi trong phạm vi 250 mét, bạn có thể giải thích cách mã của bạn đáp ứng các tiêu chí của vấn đề không?
sĩ523

1
@ musicman523 Dường như tôi đã thêm giá trị phần trăm vào khoảng cách thay vì tỷ lệ phần trăm của khoảng cách. Bây giờ tôi đã sửa nó.
darrylyeo

3

Python 3.6 , 250 byte

Đã lưu 4 byte nhờ isaacg và 1 nhờ KoishoreRoy!

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}')

Hãy thử trực tuyến! (Sử dụng cú pháp in Python 3.5 với chi phí 6 byte do TIO chưa hỗ trợ Python 3.6.)


Bạn đang thiếu số lần truy cập (hãy nhớ rằng quả bóng có thể đi vào nước và thêm một cú đánh)
Java Gonzar

Cập nhật và chơi gôn hơn một chút!
sĩ523

1
@KoishoreRoy Bạn nói đúng, không. Tôi dường như không thể hiểu tại sao. Nó chắc chắn hoạt động trước khi tôi bắt đầu sử dụng dấu chấm phẩy, nhưng việc loại bỏ chúng dường như không có ích. Có suy nghĩ gì không?
sĩ523

1
nó đánh dấu một lỗi trong cuối cùng. Tôi đã thử thay thế tất cả các khoảng trắng bằng các tab và điều đó cũng không giúp tôi tìm ra bất cứ điều gì. Ngoài ra, không liên quan đến việc chạy mã, bạn có thể lưu một vài byte bằng cách sử dụngfrom random import randrange as r
Koishore Roy

1
Lỗi của tôi. Những gì tôi nói trước đó thực sự tăng 1 byte! Sử dụng from random import*;r=randrangethay thế. Điều đó làm giảm 1 byte.
Koishore Roy

2

Perl 6 , 212 byte

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

&plà một hàm trợ giúp chọn một số ngẫu nhiên từ 0một đến ít hơn một đối số của nó. Biểu thức sau 'Total hits 'là một danh sách được xây dựng lười biếng tạo ra từng phần tử dựa trên phần tử trước đó. Các phần tử được in khi chúng được tạo, không có nhiều chức năng, nhưng nó ngắn hơn việc lưu trữ chúng trong một mảng trung gian.

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.