Gizli Güç Hesaplayıcı


15

Pokemon'u her zaman sevmemin nedenlerinden biri, böylesine basit görünen bir oyun için çok fazla karmaşıklığa sahip olmasıdır. Gizli Güç hareketini düşünelim. Oyunda, Gizli Gücün tipi ve gücü (en azından VI. Nesilden önce) onu kullanan her Pokemon için farklıdır! Çok güzel, değil mi? Şimdi, size Gizli Gücün türü ve gücünün rastgele üretilmediğini söylesem şaşırır mıydınız?

Tüm Pokemon oyunlarında, tüm Pokemon'larda (sadece partinizdeki, ALL POKEMON'da değil) altı dahili olarak saklanan tamsayı vardır (biri HP stat için, biri saldırı statüsü için, biri savunma statüsü için, biri özel saldırı statüsü için, biri özel savunma statüsü için ve diğeri hız statüsü için) kendi değerleri veya IV'ler olarak adlandırılır. Bu değerler 0 ile 31 arasındadır ve aslında bir Pokemon'un genel istatistiklerini etkileyen birkaç faktörden biridir. ANCAK, Gizli Gücün türünü ve gücünü de belirliyorlar!

Nesil III'den V'ye (algoritmasını uygulayacağımız nesiller), Gizli Güç türü aşağıdaki formülle belirlenir (taban parantezlerine dikkat edin, bu da sonucu yuvarlamanız gerektiği anlamına gelir):

burada a, b, c, d, e ve f, HP, Saldırı, Savunma, Hız, Sp. Saldırı ve Sp. Sırasıyla Savunma IV'leri. (En az anlamlı bit IV mod 2'dir.) Burada üretilen sayı, bu grafik kullanılarak gerçek türe dönüştürülebilir:

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

Güç için benzer bir formül kullanılır:

Ancak burada u, v, w, x, y ve z, HP, Saldırı, Savunma, Hız, Sp. Saldırı ve Sp. Savunma IV'leri (yine aynı sırayla). (İkinci en az anlamlı bit, en az anlamlı bitten daha karmaşıktır. IV mod 4 2 veya 3 ise, bit 1'dir, aksi takdirde 0'dır. Dilinizde bir tür yerleşik veya en azından daha akıllı bir yol varsa bunu yapmak için muhtemelen kullanmalısınız.)


Muhtemelen daha önce de anlaştığınız gibi, burada zorluk, HP, Saldırı, Savunma, Hız, Sp. Saldırı ve Sp. Bir Pokemon'un IV'lerini (bu sırayla) koruyun ve Pokemonun Gizli Gücünün türünü ve gücünü verin.

Örnek giriş:

30 31 31 31 30 31

Örnek çıktı:

Grass 70

Örnek giriş:

16 18 25 13 30 22

Örnek çıktı:

Poison 61

Bu kod golf, bu yüzden en kısa kod kazanır. İyi şanslar!

(Ve insanlar sormadan önce, burada V. Nesil algoritmasını kullandım çünkü VI. Jenerasyon güç randomizasyonundan kurtulur ve her zaman 60 yapar. Sadece bunun inanılmaz derecede topal olduğunu düşünmekle kalmaz, bence bu meydan okumayı DAHA AZ İLGİ ÇEKİCİ yapar. meydan okuma amacıyla bir Gen V oyunu oynuyoruz.)


Üzgünüm, yanlışlıkla örnek giriş ve çıkışını bıraktım. Hadi bakalım.
spaghetto

Bazı ek test örnekleri iyi olurdu :).
Kara Delik

Evet, kötüyüm. Sabit.
spaghetto

3
MissingNo ile ilgili bir meydan okuma görmek istiyorum.
mbomb007

Yani bundan sonra ne olabilir;)
Bir Spaghetto

Yanıtlar:


3

Pyth, 110 bayt

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

Bu, yazdırılamaz grafikler içeriyor. İşte bir 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

Ayrıca pokemon.pyth dosyasını indirebilir vepython3 pyth.py pokemon.pyth

Giriş 30, 31, 31, 31, 30, 31yazdırılır

Grass
70

Açıklama:

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
Daha doğrusu pyth dosyaları için dosya uzantısının python dosya uzantısından daha ayrıntılı olduğunu eğlenceli buluyorum: ^)
FryAmTheEggman

5

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

İlk kez golf, bu yüzden bu oldukça açık bir çözüm sanırım.


3

CJam, 140 115 bayt

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+

Kodun yazdırılamaz karakterler içerdiğini unutmayın.

CJam yorumlayıcısında çevrimiçi deneyin: Chrome | Firefox


Vay canına, bu hızlıydı. İyi iş!
spaghetto

2

Javascript (ES6), 251 bayt

Biraz uzun, en azından şimdilik. Türlerin listesi ve karmaşık matematik yaklaşık olarak aynı miktarda yer kaplar. İkisini de / ikisini kısaltmanın yollarını arıyorum.

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

Her zamanki gibi, öneriler hoş geldiniz!


1

Javascript (ES6), 203 bayt

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

Örnek çalıştırmalar:

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

f(16,18,25,13,30,22)
> "Poison 61"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.