隠された電力計算機


15

私がいつもポケモンを愛してきた理由の1つは、そのような単純に見えるゲームのために、非常に多くの複雑さの層があるためです。隠された力の動きを考えてみましょう。ゲームでは、隠されたパワーのタイプとパワー(少なくともジェネレーションVIの前)は、それを使用するポケモンごとに異なります!それはかなりクールですよね?さて、隠し力の種類と力はランダムに生成されないと言ったら驚かれますか?

すべてのポケモンゲームでは、すべてのポケモン(パーティの1つだけでなく、すべてのポケモン)には6つの内部に格納された整数があります(1つはHP統計、1つは攻撃統計、1つは防御統計、1つは特別な攻撃統計、 1つは特別な防御の統計用で、もう1つは速度の統計用))個々の値、またはIV と呼ばれます。これらの値の範囲は0から31であり、基本的にポケモンの全体的な統計に影響を与えるいくつかの要因の1つです。ただし、Hidden Powerのタイプとパワーも決定します!

Generation IIIからV(アルゴリズムを実装する世代)では、Hidden Powerのタイプは次の式で決定されます(フロアブラケットに注意してください。つまり、結果を切り捨てる必要があります)。

ここで、a、b、c、d、e、およびfは、HP、攻撃、防御、速度、Spの最下位ビットです。攻撃、およびSp。それぞれ防衛IV。(最下位ビットはIV mod 2です。)ここで生成された数値は、このチャートを使用して実際のタイプに変換できます。

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

電力については、同様の式が使用されます。

ただし、ここで、u、v、w、x、y、およびzは、HPの2番目に重要度の低いビット、Attack、Defense、Speed、Spを表します。攻撃とSp 防衛IV(再びこの順序で)。(2番目の最下位ビットは最下位ビットよりも複雑です。IVmod 4が2または3の場合、ビットは1です。それ以外の場合は0です。言語に何らかの組み込みまたは少なくともより賢い方法がある場合これを行うには、おそらくそれを使用する必要があります。)


既におわかりのように、ここでの課題は、HP、攻撃、防御、速度、Spを表すSTDINを介してスペースで区切られた6つの整数を取り込むプログラムを作成することです。攻撃とSp ポケモンの防御IV(この順序で)およびそのポケモンの隠された力のタイプと力を出力します。

サンプル入力:

30 31 31 31 30 31

サンプル出力:

Grass 70

サンプル入力:

16 18 25 13 30 22

サンプル出力:

Poison 61

これはコードゴルフなので、最短のコードが優先されます。幸運を!

(そして、人々が尋ねる前に、Generation VIはパワーランダム化を取り除き、常に60にするため、ここでGeneration Vアルゴリズムを使用しました。チャレンジのために、Gen Vゲームを実行しています。)


申し訳ありませんが、サンプルの入力と出力を誤って省略しました。どうぞ。
spaghetto

いくつかの追加のテストサンプルがいいでしょう:)。
ブラックホール

はい、私の悪い。修繕。
spaghetto

3
MissingNoについてのチャレンジをご覧ください。
mbomb007

それは次に何が起こるかもしれません。)
spaghetto

回答:


3

Pyth、110バイト

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

これには印刷できない文字が含まれています。だから、これは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

ファイルpokemon.pythをダウンロードして実行することもできますpython3 pyth.py pokemon.pyth

入力が30, 31, 31, 31, 30, 31印刷されます

Grass
70

説明:

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
pythファイルのファイル拡張子がpythonのファイル拡張子よりも冗長であることはむしろ面白いと思います:^)
FryAmTheEggman

5

ルビー、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}"

初めてのゴルフなので、これはかなり明白な解決策だと思います。


3

CJam、140 115バイト

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+

コードには印刷できない文字が含まれていることに注意してください。

CJamインタープリターでオンラインで試してください:Chrome | Firefox


うわー、それは速かった。良くやった!
spaghetto

2

Javascript(ES6)、251バイト

少なくとも今のところは長い。型のリストと複雑な数学は、ほぼ同じスペースを占有します。どちらか/両方を短縮する方法を探しています。

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

いつものように、提案を歓迎します!


1

Javascript(ES6)、203バイト

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

実行例:

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

f(16,18,25,13,30,22)
> "Poison 61"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.