Máy tính ẩn


15

Một trong những lý do tôi luôn yêu thích Pokemon là vì một trò chơi có vẻ đơn giản như vậy, nó có quá nhiều lớp phức tạp. Hãy xem xét việc di chuyển Sức mạnh tiềm ẩn. Trong trò chơi, loại và sức mạnh (ít nhất là trước Thế hệ VI) của Sức mạnh tiềm ẩn là khác nhau đối với mỗi Pokemon sử dụng nó! Điều đó thật tuyệt phải không? Bây giờ, bạn có ngạc nhiên không nếu tôi nói với bạn rằng loại và sức mạnh của Sức mạnh tiềm ẩn không được tạo ngẫu nhiên?

Trong tất cả các trò chơi Pokemon, tất cả các Pokemon (không chỉ một người trong nhóm của bạn, TẤT CẢ POKEMON) đều có sáu số nguyên được lưu trữ bên trong (một cho chỉ số HP, một cho chỉ số tấn công, một cho chỉ số phòng thủ, một cho chỉ số tấn công đặc biệt, một cho chỉ số phòng thủ đặc biệt và một cho chỉ số tốc độ) được gọi là giá trị riêng của chúng , hoặc IV. Các giá trị này nằm trong khoảng từ 0 đến 31 và về cơ bản chúng là một trong một vài yếu tố ảnh hưởng đến chỉ số chung của Pokemon. TUY NHIÊN, họ cũng xác định loại và sức mạnh của Sức mạnh tiềm ẩn!

Trong Thế hệ III đến V (các thế hệ sẽ thực hiện thuật toán), loại Sức mạnh tiềm ẩn được xác định theo công thức sau (lưu ý dấu ngoặc sàn, có nghĩa là bạn cần làm tròn kết quả):

trong đó a, b, c, d, e và f là các bit có trọng số thấp nhất của HP, Tấn công, Phòng thủ, Tốc độ, Sp. Tấn công và Sp. IV phòng thủ tương ứng. (Ít nhất là bit đáng kể là IV mod 2.) Số được tạo ở đây sau đó có thể được chuyển đổi thành loại thực tế bằng biểu đồ này:

0 Fighting
1 Flying
2 Poison
3 Ground
4 Rock
5 Bug
6 Ghost
7 Steel
8 Fire
9 Water
10 Grass
11 Electric
12 Psychic
13 Ice
14 Dragon
15 Dark

Đối với quyền lực, một công thức tương tự được sử dụng:

Tuy nhiên, ở đây, u, v, w, x, y và z đại diện cho bit đáng kể thứ hai của HP, Tấn công, Phòng thủ, Tốc độ, Sp. Tấn công và Sp. IV phòng thủ (theo thứ tự đó một lần nữa). (Bit có ý nghĩa thứ hai ít phức tạp hơn thì bit đáng kể nhất. Nếu IV mod 4 là 2 hoặc 3, thì bit là 1, nếu không là 0. Nếu ngôn ngữ của bạn có một số loại tích hợp hoặc ít nhất là một cách thông minh hơn để làm điều này, có lẽ bạn nên sử dụng nó.)


Vì vậy, như bạn có thể đã tìm ra, thử thách ở đây là viết một chương trình gồm sáu số nguyên cách nhau bởi các khoảng trắng thông qua STDIN đại diện cho HP, Tấn công, Phòng thủ, Tốc độ, Sp. Tấn công và Sp. Bảo vệ IV của Pokemon (theo thứ tự đó) và xuất ra loại và sức mạnh của Sức mạnh tiềm ẩn của Pokemon đó.

Đầu vào mẫu:

30 31 31 31 30 31

Đầu ra mẫu:

Grass 70

Đầu vào mẫu:

16 18 25 13 30 22

Đầu ra mẫu:

Poison 61

Đây là mã golf, vì vậy mã ngắn nhất sẽ thắng. Chúc may mắn!

(Và trước khi mọi người hỏi, tôi đã sử dụng thuật toán Thế hệ V ở đây vì Thế hệ VI đã loại bỏ ngẫu nhiên hóa năng lượng và luôn luôn là 60. Tôi không chỉ nghĩ rằng điều này là vô cùng khập khiễng, tôi nghĩ rằng nó còn thách thức RẤT NHIỀU LÃI SUẤT. với mục đích thử thách, chúng tôi đang chạy một trò chơi Gen V.)


Xin lỗi, tôi đã bỏ qua đầu vào và đầu ra mẫu do nhầm lẫn. Bạn đi đây
một spaghetto

Một số mẫu thử nghiệm bổ sung sẽ tốt đẹp :).
Hố đen

Vâng, xấu của tôi. Đã sửa.
một spaghetto

3
Tôi muốn thấy một thách thức về Mất tích.
mbomb007

Điều đó có thể xảy ra tiếp theo;)
một spaghetto

Câu trả lời:


3

Bình thường, 110 byte

J+dGA.b/*iN2CY63Cm_+0jd2_Q"("r@cs@LJjC"!�W��Zm�����A�zB0i��ȏ\"���?wC�ǀ�-#ך
?ЫܦO@�J/m���#"26)G3+30H

Điều này có chứa ký tự không thể in được. Vì vậy, đây là một hexdump:

00000000: 4a 2b 64 47 41 2e 62 2f 2a 69 4e 32 43 59 36 33  J+dGA.b/*iN2CY63
00000010: 43 6d 5f 2b 30 6a 64 32 5f 51 22 0f 28 22 72 40  Cm_+0jd2_Q".("r@
00000020: 63 73 40 4c 4a 6a 43 22 10 21 de 57 ad c8 5a 1c  cs@LJjC".!.W..Z.
00000030: 10 6d e0 d6 12 f6 80 bc 41 85 7a 42 30 69 ae 80  .m......A.zB0i..
00000040: c8 8f 5c 22 a0 84 ab 3f 77 43 01 ca c7 80 d0 1d  ..\"...?wC......
00000050: 2d 23 d7 9a 0a 3f d0 ab dc a6 4f 40 b9 4a 2f 6d  -#...?....O@.J/m
00000060: d2 ca c6 23 22 32 36 29 47 33 2b 33 30 48        ...#"26)G3+30H

Bạn cũng có thể tải xuống tệp pokemon.pyth và chạy nó vớipython3 pyth.py pokemon.pyth

Các đầu vào 30, 31, 31, 31, 30, 31in

Grass
70

Giải trình:

J+dGA.b/*iN2CY63Cm_+0jd2_Q".("
J+dG                            store the string " abc...xyz" in J
                 m      _Q      map each number d in reverse(input list) to:
                     jd2          convert d to base 2
                   +0             add a zero (list must have >= 2 items)
                  _               reverse the list
                C               zip
                          ".("  string with the ascii values 15 and 40
     .b                         map each N of ^^ and Y of ^ to:
         iN2                       convert N from base 2 to base 10
        *   CY                     multiply with the ascii value of Y
       /      63                   and divide by 63
    A                           G, H = ^

r@cs@LJjC"longstring"26)G3+30H
        C"longstring"           interpret the string as bytes and convert 
                                from base 256 to base 10
       j             26         convert to base 26
   s@LJ                         lookup their value in J and create a string
                                this gives "fighting flying ... dark"
  c                    )        split by spaces
 @                      G       take the Gth element
r                        3      make the first letter upper-case and print
                          +30H  print 30 + H

3
Tôi thấy khá thú vị khi phần mở rộng tệp của bạn cho các tệp pyth dài hơn so với phần mở rộng tệp của python: ^)
FryAmTheEggman

5

Hồng ngọc, 210

a=$*.map.with_index{|a,i|[a.to_i%2<<i,a.to_i[1]<<i]}.transpose.map{|a|a.inject &:+}
$><<"#{%w(Fighting
Flying
Poison
Ground
Rock
Bug
Ghost
Steel
Fire
Water
Grass
Electric
Psychic
Ice
Dragon
Dark)[a[0]*15/63]} #{a[1]*40/63+30}"

Lần đầu chơi golf, vì vậy tôi đoán đây là giải pháp khá rõ ràng.


3

CJam, 140 115 byte

q~]W%_1f&2bF*63/"GMÿD>BÙl½}YÛöí6P¶;óKs¯¿/·dǯã®Å[YÑÌÞ%HJ9¹G4Àv"256b25b'af+'j/=(euooSo2f/1f&2b40*63/30+

Lưu ý rằng mã chứa các ký tự không thể in được.

Dùng thử trực tuyến trong trình thông dịch CJam: Chrome | Firefox


Ồ nó rất nhanh. Công việc tốt!
một spaghetto

2

Javascript (ES6), 251 byte

Kinda dài, ít nhất là bây giờ. Danh sách các loại và toán học phức tạp chiếm cùng một dung lượng. Tôi đang tìm cách để rút ngắn một trong hai hoặc cả hai.

x=>([a,b,c,d,e,f]=x.split` `,`Fighting
Flying
Poison
Ground
Rock
Bug
Ghost
Steel
Fire
Water
Grass
Electric
Psychic
Ice
Dragon
Dark`.split`
`[(a%2+b%2*2+c%2*4+d%2*8+e%2*16+f%2*32)*5/21|0]+' '+((a/2%2+(b&2)+(c&2)*2+(d&2)*4+(e&2)*8+(f&2)*16)*40/63+30|0))

Như thường lệ, đề nghị chào đón!


1

Javascript (ES6), 203 byte

f=(...l)=>(q=(b,m)=>~~(l.reduce((p,c,x)=>p+(!!(c&b)<<x),0)*m/63),'Fighting0Flying0Poison0Ground0Rock0Bug0Ghost0Steel0Fire0Water0Grass0Electric0Psychic0Ice0Dragon0Dark'.split(0)[q(1,15)]+' '+(q(2,40)+30))

Ví dụ chạy:

f(30,31,31,31,30,31)
> "Grass 70"

f(16,18,25,13,30,22)
> "Poison 61"
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.