在“口袋妖怪”中有18种:
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的伤害乘数。一个口袋妖怪可以是双弱,双重抵抗或任何其他组合攻击类型。乘以乘数,得到一个整体的有效性。
编写一个程序或函数,给出移动类型,然后输入精灵,输出攻击的总伤害乘数。口袋妖怪类型总是写成A
或A/B
**,其中** A
和B
是与上面列表不同的类型。您必须接受这种格式的精灵输入。除此限制外,您可以以任何合理的方式接受输入。一个可以接受的示例输入格式是:
"Ice", "Dragon/Flying"
但这是不可接受的:
["Ice", ["Dragon", "Flying"]]
您的输出必须正好是以下字符串之一,后面跟着可选的尾换行符:
0x 0.25x 0.5x 1x 2x 4x
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):
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
以字节为单位的最短代码获胜。
发布于 2015-09-01 19:59:15
我还没有看到好的压缩类型,所以这里有一个。
(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'
未高尔夫球:
(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';
}
哦,这是我的图表(记住它是订购的,这样字母就不会与下面列出的任何单词匹配):
"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"
发布于 2015-09-02 01:04:44
proc p a\ d [zlib i ...361 bytes...]
脚本包含压缩数据,包括非UTF-8字节.下面是在base 64中编码的确切脚本:
cHJvYyBwIGFcIGQgW3psaWIgaSDFU7FugzAQ/ZU3pEuGlljqwlilibpUUVw7dEBc
Zo7jghUHI9uREiH+vUDA2NCqY2SJXDt87969XDvb5dkaXCTfSp+oxUN2QWKZjOPm
L1dlHC9RLetEnmiJPRJTSmGxOOApRSVFceAXVNVcbsOKHp/bb28nq0ZFeswtTm4+
SJBPhkiDX7nYEBmYSVijw6489l5Jx3/Dj0pIj47GWp0lXh2fN6w9R5FcdHasP1dE
HH7oMVxupkRmfpfn+lx298NOHXOADmbqKXcT9NDE1Se/dDFiRybiT7rb+Sunm1xb
0J1fwceOM/JcIoEfBaz+HVx0XHt0XjCROa/T587wvxPx7+dU4TS/wdQ1Emk41SxH
9d4+NomNyHIrilxmG3ltzU5cdKNcbmy1OhcHfCh2xMs5wzZXxuLTct6maI4varlu
YNQYvErOrBZcZlw7c2V5Y98Yx1rTrCFaU1x9xIZcblx9rbGg6Z0F7NM6TdMfXQ==
使用zlib
命令进行压缩。
发布于 2015-09-02 04:02:21
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 Grass
或Water Steel/Electric
。
存储的表是一个字符串,其中每个字符的索引在40到103之间,并表示3种类型的组合。类型列表存储为每种类型的第3和第4(如果存在)字符,这些字符与每种输入类型的第3和第4字符相比较。
https://codegolf.stackexchange.com/questions/55823
复制相似问题