Trong các trò chơi video Pokemon, người chơi được gửi ra thế giới để buộc các động vật hoang dã thành những quả bóng nhỏ và huấn luyện chúng chiến đấu. Tất nhiên, mọi người đều biết rằng không ai chơi Pokemon cho trận chiến. Điểm thu hút thực sự của bộ truyện là pokemon bắt chính nó! Công việc của bạn là mô phỏng pokeball trong nỗ lực bắt giữ. Thử thách này sẽ sử dụng công thức chụp V thế hệ, như sau:

HP_maxbằng với lượng HP tối đa của pokemon mục tiêu. HP_currentbằng với HP hiện tại của pokemon mục tiêu. ratelà tỷ lệ bắt của pokemon, bonus_balllà hệ số nhân của pokeball và bonus_statuslà 2,5 nếu pokemon mục tiêu đang ngủ hoặc bị đóng băng, 1,5 nếu pokemon mục tiêu bị tê liệt, bị nhiễm độc hoặc bị đốt cháy và 1 cách khác.
Sau khi tìm thấy a, bạn phải thực hiện tối đa ba "kiểm tra lắc". Xác suất của một kiểm tra lắc thành công là 65536 / (255 / a)^(1/4). Nếu bất kỳ một trong những kiểm tra này thất bại, pokemon thoát khỏi quả bóng của nó. Nếu cả ba lần kiểm tra đều thành công, pokemon sẽ bị bắt!
Lưu ý: Bất cứ khi nào bất kỳ phân chia nào được thực hiện, kết quả được làm tròn xuống bội số của 1/4096. Đây thường là một chi tiết không đáng kể, nhưng nó phải được tính trong chương trình của bạn.
Thử thách của bạn là viết một chương trình thực hiện kiểm tra lắc và in để đánh bật trạng thái của séc. Trên stdin, chương trình của bạn sẽ nhận được (ít nhất, chi tiết bên dưới) lượng HP tối đa của pokemon, tốc độ bắt của pokemon mục tiêu và tên của pokeball. HP tối đa và tốc độ bắt đều được đảm bảo là số nguyên, trong khi tên của pokeball luôn là một chuỗi. Đầu vào này có thể đến theo bất kỳ thứ tự nào và với bất kỳ (các) ký tự phân định nào đều thuận tiện cho bạn, miễn là nó phù hợp. Giả sử rằng đầu vào là chính xác, không cần xử lý lỗi.
Tên của các pokeball mà bạn được yêu cầu hỗ trợ và số nhân bắt của chúng được liệt kê ở đây:
Poke | 1
Great | 1.5
Ultra | 2
Master | 255
Bạn có thể cho rằng mục tiêu đang ngủ và ở mức 1 HP. Định dạng dự kiến cho đầu ra là:
(First check failed)
(no output)
(Second check failed)
*shake*
(Third check failed)
*shake*
*shake*
*shake*
(All checks pass)
*shake*
*shake*
*shake*
Click!
(Đó không phải là một lỗi đánh máy, chương trình của bạn sẽ không bao giờ xuất ra chỉ hai lần lắc.)
Đây là môn đánh gôn , vì vậy điểm của bạn là số byte của mã nguồn chương trình của bạn. Điểm số thấp nhất chiến thắng.
Tiền thưởng!
Tôi đã nói rằng bạn có thể cho rằng pokemon đang ở mức 1 HP và đang ngủ. Ngoài ra, bạn có thể cho phép người dùng nhập HP hiện tại của pokemon và bonus_status. HP hiện tại của pokemon sẽ luôn là một số nguyên bằng hoặc nhỏ hơn HP tối đa của nó và bonus_statussẽ luôn là 2,5, 1,5 hoặc 1. Nếu bạn làm như vậy, bạn phải có các giá trị này ở cuối đầu vào của mình và mặc định là 1 và 2.5 nếu chúng không được cung cấp. Bạn có thể trừ 15 điểm từ điểm số của mình để thực hiện một trong số này hoặc 25 điểm cho cả hai.
Ngoài ra, bạn có thể thực hiện các cảnh quay quan trọng. Nếu một sự bắt giữ quan trọng xảy ra, chỉ có một thử nghiệm lắc được thực hiện. Nếu thất bại, chương trình thoát ra âm thầm. Nếu được thông qua, nó xuất ra:
*shake*
Click!
Việc bắt giữ quan trọng trở nên phổ biến hơn khi người chơi thu thập nhiều pokemon hơn, nhưng để đơn giản, chúng ta có thể cho rằng họ đã "bắt được tất cả". Nếu một số được tạo ngẫu nhiên trong khoảng từ 0 đến 2047 nhỏ hơn a(kết quả của phép tính đầu tiên) nhân với 2,5, thì đó là một sự bắt giữ quan trọng. Hỗ trợ cho các ảnh chụp quan trọng cho phép bạn xóa 25 điểm khỏi điểm số của mình.
Có một số pokeball khác bạn có thể chọn để hỗ trợ. Tên và số nhân bắt của chúng được liệt kê ở đây:
Safari | 1.5
Sport | 1.5
Lure | 3
Net | 3
Dusk | 3.5
Dive | 3.5
Moon | 4
Fast | 4
Quick | 5
Love | 8
Đối với mỗi quả bóng bạn thêm hỗ trợ, bạn có thể trừ (5 + chiều dài tên của quả bóng) khỏi điểm số của bạn.
Cuối cùng, đối với các cú đá, đạt được tất cả các phần thưởng này (HP hiện tại và Bonus_status từ stdin, bắt giữ quan trọng và tất cả 10 quả bóng tùy chọn) sẽ mang lại cho bạn phần thưởng thêm 7 điểm từ điểm số của bạn, với tổng số tiền thưởng là 150 .
Ví dụ đầu vào / đầu ra
Chỉ để đảm bảo tất cả chúng ta trên cùng một trang.
$ ./balls <<< "19,Ultra,255"
*shake*
*shake*
*shake*
Click!
Chúc may mắn và chơi golf vui vẻ!
65536 / (255 / a)^(1/4)lớn hơn 1, kiểm tra tự động thành công. Tôi không chắc ý của bạn về câu hỏi thứ hai.
rnd < pcó nghĩa là kiểm tra thành công với rndphạm vi 0 và 1.
65536 / (255 / a)^(1/4)đó, nếu số ngẫu nhiên ít hơn thì thử nghiệm lắc đã thành công
65536 / (255 / a)^(1/4)có thể lớn đến mức nào nhưng can đảm của tôi nói rằng nó lớn hơn 1. Bạn có kiểm tra số ngẫu nhiên trong khoảng từ 0 đến 65536 không? Kiểm tra thành công nếu số ngẫu nhiên lớn hơn hoặc nếu nó thấp hơn?