首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >太有效了!

太有效了!
EN

Code Golf用户
提问于 2015-09-01 15:38:01
回答 3查看 8.9K关注 0票数 42

在“口袋妖怪”中有18种:

代码语言:javascript
复制
Normal    Fighting  Flying  Poison  Ground  Rock
Bug       Ghost     Steel   Fire    Water   Grass
Electric  Psychic   Ice     Dragon  Dark    Fairy

口袋妖怪可以进行单输入或双输入。例如,Pikachu是Electric,Tyranitar是Rock/Dark。类型的顺序并不重要。口袋妖怪不能有两次相同的类型。进攻性移动正是上述18种类型中的一种。

  • 一些口袋妖怪类型是弱于某种类型的攻击。例如,Fire口袋妖怪对Water攻击的抵抗力很弱。这给了一个2的伤害乘数。
  • 一些口袋妖怪类型可以抵抗某种类型的攻击。例如,Rock精灵抵抗Normal攻击。这给出了0.5的伤害乘数。
  • 一些口袋妖怪类型对某种类型的攻击免疫。例如,Flying口袋妖怪对Ground攻击免疫。这提供了一个0的伤害乘数。

一个口袋妖怪可以是双弱,双重抵抗或任何其他组合攻击类型。乘以乘数,得到一个整体的有效性。

编写一个程序或函数,给出移动类型,然后输入精灵,输出攻击的总伤害乘数。口袋妖怪类型总是写成AA/B**,其中** AB是与上面列表不同的类型。您必须接受这种格式的精灵输入。除此限制外,您可以以任何合理的方式接受输入。一个可以接受的示例输入格式是:

代码语言:javascript
复制
"Ice", "Dragon/Flying"

但这是不可接受的:

代码语言:javascript
复制
["Ice", ["Dragon", "Flying"]]

您的输出必须正好是以下字符串之一,后面跟着可选的尾换行符:

代码语言:javascript
复制
0x    0.25x    0.5x    1x    2x    4x

示例

代码语言:javascript
复制
Ground, Fire -> 2x
Normal, Rock/Dragon -> 0.5x
Fighting, Ghost/Steel -> 0x
Steel, Water/Steel -> 0.25x
Ice, Dragon/Flying -> 4x
Water, Ground/Water -> 1x
Ghost, Ghost -> 2x

型效能

要获得一个人性化的类型图,我想请您参考Gamepedia。为了使高尔夫的过程更快一点,我会给你一个压缩的电脑友好的矩阵的有效性。将每个数字除以2,得到真正的乘数(1 -> 0.5,4 -> 2):

代码语言:javascript
复制
              Defending type
               (same order)

   Normal   222221201222222222
   Fighting 421124104222214241
A  Flying   242221421224122222
t  Poison   222111210224222224
t  Ground   220424124421422222
a  Rock     214212421422224222
c  Bug      211122211124242241
k  Ghost    022222242222242212
i  Steel    222224221112124224
n  Fire     222221424114224122
g  Water    222244222411222122
   Grass    221144121141222122
T  Electric 224202222241122122
y  Psychic  242422221222212202
p  Ice      224242221114221422
e  Dragon   222222221222222420
   Dark     212222242222242211
   Fairy    242122221122222442

以字节为单位的最短代码获胜。

EN

回答 3

Code Golf用户

发布于 2015-09-01 19:59:15

JavaScript (ES6),287号

我还没有看到好的压缩类型,所以这里有一个。

代码语言:javascript
复制
(a,b)=>b.split('/').reduce((j,p)=>j*[0,.5,1,2][parseInt("kjwhcgnj2xd6elihtlneemw82duxijsazl3sh4iz5akjmlmsqds06xf1sbb8d0rl1nu7a2kjwi3mykjwlbpmk1up4mzl1iuenedor0bdmkjwmpk6rhcg4h3en3pew5".substr((g=x=>[..."BWSEIRNulkcDPotyeG"].findIndex(c=>x.match(c)))(a)*7,7),36).toString(4)[g(p)]],1)+'x'

未高尔夫球:

代码语言:javascript
复制
(a,b)=>{
  // keys is a list of letters found in the types of attacks/defenses
  keys = [..."BWSEIRNulkcDPotyeG"]; 

  // getIndex is a single case statement.
  // it checks each of keys, one-by-one, falling through until we've found the proper index
  getIndex=x=>keys.findIndex(c=>x.match(c));

  // encodedValues is a list, indexed by `keys`, where each value is 7-characters.
  encodedValues = "kjwhcgnj2xd6elihtlneemw82duxijsazl3sh4iz5akjmlmsqds06xf1sbb8d0rl1nu7a2kjwi3mykjwlbpmk1up4mzl1iuenedor0bdmkjwmpk6rhcg4h3en3pew5";

  // the 7-character value (e.g., B=0="kjwhcgn", W=1="j2xd6el") were created by 
  // turning base4 values into base36, so let's turn this back into a string the same way
  valuesForAttack = parseInt(encodedValues.substr(getIndex(a)*7,7),36).toString(4);

  // valuesForAttack is indexed by defenseType.  The value will be 0..3, depending on the multiplier

  // let's get an array of the multipliers and reduce...
  multiplier = b.split('/').reduce((oldMultiplier,defenseType)=>oldMultiplier * [0,.5,1,2][valuesForAttack[getIndex(defenseType)]],1);

  return multiplier+'x';
}

哦,这是我的图表(记住它是订购的,这样字母就不会与下面列出的任何单词匹配):

代码语言:javascript
复制
"Bug" => "B",
"Water" => "W",
"Steel" => "S",
"Electric" => "E",
"Ice" => "I",
"Rock" => "R",
"Normal" => "N",
"Ground" => "u",
"Flying" => "l",
"Dark" => "k",
"Psychic" => "c",
"Dragon" => "D",
"Poison" => "P",
"Ghost" => "o",
"Fighting" => "t",
"Fairy" => "y",
"Fire" => "e",
"Grass" => "G"
票数 9
EN

Code Golf用户

发布于 2015-09-02 01:04:44

Tcl,382

代码语言:javascript
复制
proc p a\ d [zlib i ...361 bytes...]

脚本包含压缩数据,包括非UTF-8字节.下面是在base 64中编码的确切脚本:

代码语言:javascript
复制
cHJvYyBwIGFcIGQgW3psaWIgaSDFU7FugzAQ/ZU3pEuGlljqwlilibpUUVw7dEBc
Zo7jghUHI9uREiH+vUDA2NCqY2SJXDt87969XDvb5dkaXCTfSp+oxUN2QWKZjOPm
L1dlHC9RLetEnmiJPRJTSmGxOOApRSVFceAXVNVcbsOKHp/bb28nq0ZFeswtTm4+
SJBPhkiDX7nYEBmYSVijw6489l5Jx3/Dj0pIj47GWp0lXh2fN6w9R5FcdHasP1dE
HH7oMVxupkRmfpfn+lx298NOHXOADmbqKXcT9NDE1Se/dDFiRybiT7rb+Sunm1xb
0J1fwceOM/JcIoEfBaz+HVx0XHt0XjCROa/T587wvxPx7+dU4TS/wdQ1Emk41SxH
9d4+NomNyHIrilxmG3ltzU5cdKNcbmy1OhcHfCh2xMs5wzZXxuLTct6maI4varlu
YNQYvErOrBZcZlw7c2V5Y98Yx1rTrCFaU1x9xIZcblx9rbGg6Z0F7NM6TdMfXQ== 

使用zlib命令进行压缩。

票数 3
EN

Code Golf用户

发布于 2015-09-02 04:02:21

Python 3- 362

代码语言:javascript
复制
k,*l=['rm gh yi is ou ck g os ee re te as ec yc e ag rk ir'.split().index(x[2:4])for x in input().replace('/',' ').split()]
s=[[0,0.5,1,2][[(ord(m)-40)//4**q%4 for m in'RB:RRRCaYR^FVBCbQRR=.bRb2caCSR^NCSbR>Q>aVFPRVRVNRbBMabRBc]bQRfR?RQBeAERQbJRFQQVSBRNJbVB]BSRRBRR3NRVRV>VQBQRW'for q in(0,1,2)][k*18+z]]for z in l]
v=s[0]*(s[1:]or[1])[0]
print(str(v//1+v%1)+'x')

输入格式是move类型和Pokemon类型,由空格分隔。例如,Fire GrassWater Steel/Electric

存储的表是一个字符串,其中每个字符的索引在40到103之间,并表示3种类型的组合。类型列表存储为每种类型的第3和第4(如果存在)字符,这些字符与每种输入类型的第3和第4字符相比较。

票数 2
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/55823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档