隐藏功率计算器


15

我一直喜欢Pokemon的原因之一是因为对于一款简单的游戏,它具有如此多的复杂性。让我们考虑一下“隐藏力量”。在游戏中,每个使用它的口袋妖怪的隐藏力量的类型和力量(至少在第六代之前)都不一样!太酷了吧?现在,如果我告诉您“隐秘力量”的类型和力量不是随机产生的,您会感到惊讶吗?

在所有口袋妖怪游戏中,所有口袋妖怪(不仅仅是派对中的一个,所有口袋妖怪)都有六个内部存储的整数(一个用于HP状态,一个用于攻击状态,一个用于防御状态,一个用于特殊攻击状态,一种用于特殊防御统计,另一种用于速度统计),称为各自的或IV。这些值在0到31之间,并且本质上是影响口袋妖怪总体属性的几个因素之一。但是,它们还可以确定“隐藏电源”的类型和电源!

在第三代到第五代(我们将要实现其算法的几代)中,隐藏功率的类型由以下公式确定(注意方括号,这意味着您需要舍入结果):

其中a,b,c,d,e和f是HP,攻击,防御,速度Sp的最低有效位。攻击和Sp。防御四。(最低有效位是IV mod2。)然后可以使用此图表将此处产生的数字转换为实际类型:

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,攻击,防御,速度Sp的第二个最低有效位。攻击和Sp。防御IV(再次按此顺序)。(第二最低有效位比最低有效位要复杂。如果IV mod 4为2或3,则该位为1,否则为0。如果您的语言具有某种内置的或至少更聪明的方式,为此,您可能应该使用它。)


因此,您可能已经知道,这里的挑战是编写一个程序,该程序通过STDIN接受六个以空格分隔的整数,分别代表HP,攻击,防御,速度,Sp。攻击和Sp。宠物小精灵的防御IV(按顺序),并输出该宠物小精灵的“隐藏力量”的类型和力量。

输入样例:

30 31 31 31 30 31

样本输出:

Grass 70

输入样例:

16 18 25 13 30 22

样本输出:

Poison 61

这是代码高尔夫球,因此最短的代码获胜。祝好运!

(在人们问之前,我在这里使用了V代算法,因为VI摆脱了功率随机化,并使其始终为60。为了应对挑战,我们正在运行第五代游戏。)


抱歉,我错误地省略了示例输入和输出。干得好。
意大利面条

一些额外的测试样本将是不错的:)。
Blackhole,2015年

是的,我不好。固定。
意大利面条

3
我希望看到有关MissingNo的挑战。
mbomb007'9

接下来可能会发生这种情况;)
意大利面条

Answers:


3

Pyth,110个字节

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

这包含不可打印的字符。所以这是一个十六进制转储:

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 | 火狐浏览器


哇,那太快了。不错的工作!
意大利面条

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"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.