Kalkulator Daya Tersembunyi

15

Salah satu alasan saya selalu menyukai Pokemon adalah karena untuk gim yang tampak sederhana, ia memiliki begitu banyak lapisan kerumitan. Mari kita perhatikan langkah Hidden Power. Dalam gim, jenis dan kekuatan (setidaknya sebelum Generasi VI) dari Hidden Power berbeda untuk setiap Pokemon yang menggunakannya! Itu keren, bukan? Sekarang, apakah Anda akan terkejut jika saya memberi tahu Anda bahwa jenis dan kekuatan Kekuatan Tersembunyi tidak dihasilkan secara acak?

Di semua gim Pokemon, semua Pokemon (bukan hanya yang ada di pesta Anda, ALL POKEMON) memiliki enam bilangan bulat yang disimpan secara internal (satu untuk stat HP, satu untuk stat serangan, satu untuk stat pertahanan, satu untuk stat serangan khusus, satu untuk stat pertahanan khusus dan satu untuk stat kecepatan) yang disebut nilai individualnya, atau infus. Nilai-nilai ini berkisar antara 0 dan 31, dan mereka pada dasarnya adalah salah satu dari beberapa faktor yang memengaruhi statistik Pokemon secara keseluruhan. NAMUN, mereka juga menentukan jenis dan kekuatan Kekuatan Tersembunyi!

Dalam Generasi III ke V (generasi yang algoritmanya akan kami implementasikan), tipe Kekuatan Tersembunyi ditentukan oleh rumus berikut (perhatikan kurung lantai, yang berarti Anda perlu membulatkan hasilnya):

di mana a, b, c, d, e dan f adalah bit paling tidak signifikan dari HP, Attack, Defense, Speed, Sp. Serang, dan Sp. Pertahanan IV masing-masing. (Bit paling tidak signifikan adalah IV mod 2.) Jumlah yang dihasilkan di sini kemudian dapat dikonversi ke tipe aktual menggunakan grafik ini:

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

Untuk tenaga, formula yang sama digunakan:

Namun, di sini, u, v, w, x, y, dan z mewakili bit kedua paling tidak signifikan dari HP, Attack, Defense, Speed, Sp. Attack dan Sp. IV pertahanan (dalam urutan itu lagi). (Bit paling signifikan kedua lebih rumit daripada bit signifikan. Jika IV mod 4 adalah 2 atau 3, maka bitnya adalah 1, jika tidak maka adalah 0. Jika bahasa Anda memiliki semacam built-in atau setidaknya cara yang lebih pintar. untuk melakukan ini, Anda mungkin harus menggunakannya.)


Jadi, seperti yang mungkin sudah Anda ketahui, tantangan di sini adalah menulis sebuah program yang mengambil enam bilangan bulat yang dipisahkan oleh spasi melalui STDIN yang mewakili HP, Attack, Defense, Speed, Sp. Attack dan Sp. Pertahanan IV dari Pokemon (dalam urutan itu) dan menampilkan jenis dan kekuatan Pokemon Hidden Power.

Input sampel:

30 31 31 31 30 31

Output sampel:

Grass 70

Input sampel:

16 18 25 13 30 22

Output sampel:

Poison 61

Ini kode-golf, jadi kode terpendek menang. Semoga berhasil!

(Dan sebelum orang bertanya, saya menggunakan algoritma Generation V di sini karena Generasi VI menghilangkan pengacakan daya dan membuatnya selalu 60. Saya tidak hanya berpikir ini sangat timpang, saya pikir itu membuat tantangan BANYAK KURANG MENARIK. Jadi untuk tujuan tantangan, kami menjalankan game Gen V.)

sebuah spaghetto
sumber
Maaf, saya meninggalkan input dan output sampel secara tidak sengaja. Ini dia
spaghetto
Beberapa contoh uji tambahan akan menyenangkan :).
Blackhole
Ya, salahku. Tetap.
spaghetto
3
Saya ingin melihat tantangan tentang MissingNo.
mbomb007
Itu mungkin terjadi selanjutnya;)
spaghetto

Jawaban:

3

Pyth, 110 byte

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

Ini berisi karakter yang tidak diinginkan. Jadi inilah 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  -#[email protected]/m
00000060: d2 ca c6 23 22 32 36 29 47 33 2b 33 30 48        ...#"26)G3+30H

Anda juga dapat mengunduh file pokemon.pyth dan menjalankannyapython3 pyth.py pokemon.pyth

Input 30, 31, 31, 31, 30, 31tercetak

Grass
70

Penjelasan:

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
Jakube
sumber
3
Saya merasa agak lucu bahwa ekstensi file Anda untuk file pyth lebih verbose daripada ekstensi file python: ^)
FryAmTheEggman
5

Ruby, 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}"

Pertama kali bermain golf, jadi saya kira ini adalah solusi yang cukup jelas.

Borsunho
sumber
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+

Perhatikan bahwa kode tersebut mengandung karakter yang tidak dapat dicetak.

Cobalah online di penerjemah CJam: Chrome | Firefox

Dennis
sumber
Wow, itu cepat. Pekerjaan yang baik!
spaghetto
2

Javascript (ES6), 251 byte

Agak lama, setidaknya untuk saat ini. Daftar jenis dan matematika kompleks membutuhkan jumlah ruang yang sama. Saya mencari cara untuk mempersingkat keduanya.

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

Seperti biasa, saran diterima!

Produksi ETH
sumber
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))

Contoh berjalan:

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

f(16,18,25,13,30,22)
> "Poison 61"
Dendrobium
sumber