oke球模拟器


26

在《口袋妖怪》电子游戏中,玩家被派往世界,迫使野生动物变成小球,并训练它们战斗。当然,每个人都知道没有人在战斗中扮演口袋妖怪。该系列真正吸引人的是神奇宝贝!您的工作是在捕获尝试期间模拟the球。这项挑战将使用V代捕获公式,如下所示:

a =((((3 * HP_max-2 * HP_current)*比率* bonus_ball)/ 3 * HP_max)* bonus_status

HP_max等于目标宠物小精灵的最大生命值。HP_current等于目标宠物小精灵的当前生命值。rate是口袋妖怪的捕获率,bonus_ball是掷出的口袋妖怪的乘数,bonus_status如果目标口袋妖怪处于睡眠或冷冻状态,则为2.5;如果目标口袋妖怪瘫痪,中毒或燃烧,则为1.5;否则为1。

找到后a,您最多要执行三个“抖动检查”。摇动检查成功的概率为65536 / (255 / a)^(1/4)。如果这些检查中的任何一项失败,则口袋妖怪会逃脱其球。如果所有三个检查均成功,则将捕获口袋妖怪!

注意:无论何时执行除法运算,结果都将向下舍入为1/4096的倍数。通常,这是一个很小的细节,但是必须在程序中加以考虑。

您面临的挑战是编写一个程序来执行摇动检查并打印以标出检查状态。在stdin上,您的程序将(至少在下面的详细信息中)接收到宠物小精灵的最大生命值,目标宠物小精灵的捕获率以及宠物小精灵的名称。最大HP和捕获率均保证为整数,而pokeball的名称始终为字符串。只要输入是一致的,此输入就可以以任何顺序出现,并且可以使用任何定界字符。假设输入正确,则不需要错误处理。

这里列出了您需要支持的pokeball的名称及其捕获乘数:

  Poke | 1
 Great | 1.5
 Ultra | 2
Master | 255

您可以假设目标处于睡眠状态并且处于1 HP。输出的预期格式为:

(First check failed)
(no output)

(Second check failed)
*shake*

(Third check failed)
*shake*
*shake*
*shake*

(All checks pass)
*shake*
*shake*
*shake*
Click!

(这不是一个错字,您的程序永远不要只输出两次摇晃。)

这是,因此得分是程序源代码的字节数。最低分获胜。

奖金!

我说过,您可以假设宠物小精灵的生命值是1 HP,并且正在睡觉。或者,您可以允许用户输入神奇宝贝的当前HP和bonus_status。宠物小精灵的当前生命值将始终是等于或小于其最大生命值的整数,并且bonus_status将始终为2.5、1.5或1。 2.5(如果未提供)。您可以从分数中减去15分来实现其中之一,或为25分

此外,您可以实施关键捕获。如果发生严重捕获,则仅执行一次摇动测试。如果失败,程序将静默退出。如果通过,它将输出:

*shake*
Click!

随着玩家收集更多的宠物小精灵,关键的抓捕变得越来越普遍,但是为了简单起见,我们可以假定它们已经“抓到了所有的东西”。如果在0到2047之间随机生成的数字小于a(第一次计算的结果)乘以2.5,则这是一个关键捕获。对关键捕获的支持使您可以从分数中删除25分。

您可以选择支持许多其他的pokeball。它们的名称和渔获系数在这里列出:

Safari | 1.5
 Sport | 1.5
  Lure | 3
   Net | 3
  Dusk | 3.5
  Dive | 3.5
  Moon | 4
  Fast | 4
 Quick | 5
  Love | 8

对于您支持的每个球,您可以从得分中减去(5 +球名称的长度)

最后,对于踢球而言,获得所有这些奖金(当前的HP和来自stdin的致命一击,致命一击以及所有10个可选球)将为您带来比得分高7点的额外奖励,甚至可获得150的总奖励。

输入/输出示例

只是为了确保我们都在同一页面上。

$ ./balls <<< "19,Ultra,255"
*shake*
*shake*
*shake*
Click!

祝你好运,打高尔夫球愉快!


我目前无法判断您给出的概率有多大,65536 / (255 / a)^(1/4)但是我的胆量说它大于1。您是否检查0到65536之间的随机数?如果随机数较大或较小,检查是否成功?
TheConstructor 2014年

如果65536 / (255 / a)^(1/4)大于1,则检查自动成功。我不确定第二个问题是什么意思。
Undergroundmonorail

这样rnd < p的装置的检查是全成与rnd在范围内的0和1
TheConstructor

1
@IsmaelMiguel看到我的评论:您生成一个0到1范围内的随机数,并将其与进行比较65536 / (255 / a)^(1/4),然后如果该随机数较小,则摇动测试成功
TheConstructor

1
作为文本中的状态,pokeball的文本类型,最大马力和捕获率已作为输入程序输入。(可选)您可以要求当前的hp(默认为1)或状态奖励(默认为2.5)
TheConstructor 2014年

Answers:


3

J 301-150 = 151

对于体育运动,所有奖金都实施了,尽管我最好不要:)。我简短地解释了以下内容,但是除非有人明确要求,否则此内容太长,无法详细解释。它实现了所有功能,关键捕获和可选输入。

tm =: =*./@:+.' '=] NB. Template match, match non-blanks in right with left
balls  =: 'MMLLPGSUNDFQ',.12{.'oauo' NB. space = wildcard.
NB. lookup function: name -> bonus_ball
lookup =: 4 255 3 8 1 1.5 1.5 2 3 3.5 4 5 #~ (tm"1&balls)@(2&{.) 

NB. convert given option
options =: ;".`lookup@.(_=_&".);._2 ,&',' i3 NB. parse options to numeric values
NB. add defaults if necessary
complete =: (, 1 2.5{.~(5-$)) options         
NB. formula
r=: <.&.(*&4096)                              NB. round to 1/4096
NB. a=: ((3*zeroth - 2*thirth)*first*second*fourth)/(3*zeroth)
a=:r(1-3%~2*%/3 0{complete)**/1 2 4{complete  NB. A prime, already divided by 255

NB. Critical captures
crit =: >2r5*[:?11^~2: NB. check for critical, k a
mess =: 2 7$'*shake*Click! '"_ NB. Message template
check =: >"0 [:?(4$2^16)"_     NB. Perform 4 checks
mes2 =: mess#~3(<.,<)]          NB. Construct message from number of passed checks
NB. If critical, just output the message array, else do the 4 tests, and execute mes2 on their running and (meaning count the number of uninterrupted trues)
echo mes2@(+/)@(*./\)@(check"0)@(65536%4%:[:r 255%])`mess@.crit a

这里是高尔夫球版

NB. Golfed verion
echo(m#~3(<.,<)])@(+/)@(*./\)@(>"0[:?(4$2^16)"_)@(65536%4%:[:r 255%])`(m=:2 7$'*shake*Click! '"_)@.(>2r5*[:?11^~2:)(r=:<.&.(*&4096))(1-3%~2*%/3 0{co)**/1 2 4{co=:(,1 2.5{.~(5-$));(".`(4 255 3 8 1 1.5 1.5 2 3 3.5 4 5 #~((=*./@:+.' '=])"1)&('MMLLPGSUNDFQ',.12{.'oauo')@(2&{.)))@.(_=_&".);._2,&','stdin''

6

PYTHON 249字节-75的奖金= 174

我第一次尝试打高尔夫球。

import sys,random
y=sys.argv
d,b,f={10:1,1:1.5,15:2,7:1.5,13:255,-2:3.5,6:3,8:3,0:4,11:5},3*int(y[1]),"*shake*\n"
s=lambda:random.random()*(255*b)**.25<65536*((b-2)*int(y[3])*d[ord(y[2][0])-70]*2.5)**.25
if s():print f*3+"Click!" if s()and s()else f

包括选定球在内的奖励:Safari,Sport,Lure,Net,Dusk,Dive,Fast,Quick

给我8 * 5 + 6 + 5 + 4 + 3 + 4 + 4 + 4 + 5 = 75积分

[edit]每次使用时,通过不使用它舍入到12小数位

[edit2]优化pokeball词典


我认为您使用的精度高于1/4096(问题状态Note: Whenever any division is performed, the result is rounded down to a multiple of 1/4096.
TheConstructor

您可能是对的,我对那部分内容不太了解,其他答案似乎和我做的一样。我想我需要做这样的事情: r < 65536/(255/a)^(0.25) <=> r*255^(0.25)/a^(0.25) < 65536 <=> r*255^(0.25) < 65536*a^(0.25)排除所有部门?
索尔斯泰恩

1/4096平均为12个小数位。看看我的解决方案;更直接的方法就是将floor(x*4096)*4096您舍入到小数位。
TheConstructor 2014年

哦,我明白了,谢谢。这可能也应该像您似乎已经做的那样适用于乘法,但是由于规则中未对此进行说明,因此我不必为此担心。:)
索尔斯泰恩

是的,可能他们使用定点算法。但是OP只要求进行四舍五入。
TheConstructor 2014年

6

Perl 1(374-150 = 224 + MissingNo。字节)

sub h{print "*shake*
";}($x,$h,$_,$c,$s)=split(/,/,<>);$G=$$%(/P/?256:/U/?151:201);$S=$G-($s==1?0:$s==1.5?12:25);
$F=255&int(int($h*255/(/G|S/?8:12))/(int($x/4)||1));sub c{for($i=0;$i<3;$i++){do h();}print "Click!
";exit;}
/M/||$S<0||$S<$c&&$F>$$*$$%255&&do c();$W=int(int($c*100/(/P/?255:/U/?150:200))*$F/255)+($s==1?0:$s==1.5?5:10);$W>9&&do h();$W>29&&do h();$W>69&&do h();

参数列表:

current hp, max hp, pokéball, catch rate, status, critical capture

是的,我知道这完全违反了规则,但是我不在乎。如果您没有注意到,这是第一个神奇宝贝生成捕获算法,具有所有怪异功能(在某些情况下,Great Balls比Ultra Balls更好)。这实现了所有功能,包括那些未包含的功能(无论如何,我决定为它们包括点)。关键的捕获将被忽略(但已实施-只是它们不影响捕获速率),而其他Poké球则加载了新的Poké球。

请注意,尽管答案很短,但它违反了所有规则,因此请认为这只是一个有趣的答案,请不要接受。我最初打算在Perl 5中实现Gen5算法,但我决定-为什么不找点乐子。是的,我实际上编译了Perl 1,此代码有效。如果您在较新版本的Perl中运行它,则可能会收到有关过时使用的警告do,但老实说-这是在Perl 1中运行功能的唯一方法。Perl1本身也存在一些怪癖(例如,我不能将行从/M/上一行移到上一行-为什么?-我不知道)。

另外,Perl 1中没有随机数,因此希望您不要因为的模数而杀死我$$。这是我能找到的最接近随机数的东西。

编辑:似乎旧do call()语法已在Perl 5.19.8中删除。确保使用旧版本的Perl来运行此脚本,因为Perl 5.20似乎与Perl 1脚本不兼容。


5

PHP(746 763字节-所有奖金):

<?if(!$i=fgets(STDIN))die('');parse_str($i,$i);$b=array('poke'=>1,'great'=>1.5,'ultra'=>2,'master'=>255,'safari'=>1.5,'sport'=>1.5,'lure'=>3,'net'=>3,'dusk'=>3.5,'dive'=>3.5,'moon'=>4,'fast'=>4,'quick'=>5,'love'=>8);$s=array('sleep'=>2.5,'frozen'=>2.5,'paralyzed'=>1.5,'poisoned'=>1.5,'burnt'=>1.5,''=>1);$i=array_merge(array('ball'=>'poke','hp'=>array('max'=>25,'current'=>1),'status'=>2.5,'rate'=>255),$i);$l='strtolower';$r='mt_rand';$x='*shake*'.PHP_EOL;$c='Click!'.PHP_EOL;$a=(((3*$i[hp][max])-(2*$i[hp][current]))*$i[rate]*$b[$l($i[ball])])/(3*$i[hp][max])*(is_numeric($i[status])?$i[status]:$s[$l($i[status])]);$a=((pow(65536/(255/$a),0.25)*4096)<<0)/4096;if($r(0,1)>$a)die();echo$x;if($a>1)die($c);if($r(0,1)>$a)die();echo$x,$x;if($r(0,1)>$a)die();echo$c;

要使用此功能,必须在STD​​IN上将输入提供为'ball = poke&status = sleep'。

HP必须以“ hp [max]”或“ hp [current]”的形式提供。

该代码可以正常工作,如此处所测试

您可以通过状态名称或乘数提供状态。(问题中不需要)。

这是可读的版本:

if(!$info=fgets(STDIN))die('');
parse_str($info,$info);
$balls=array(//list of pokeballs
    'poke'=>1,
    'great'=>1.5,
    'ultra'=>2,
    'master'=>255,
    'safari'=>1.5,
    'sport'=>1.5,
    'lure'=>3,
    'net'=>3,
    'dusk'=>3.5,
    'dive'=>3.5,
    'moon'=>4,
    'fast'=>4,
    'quick'=>5,
    'love'=>8
);
$status=array(//list of status
    'sleep'=>2.5,
    'frozen'=>2.5,
    'paralyzed'=>1.5,
    'poisoned'=>1.5,
    'burnt'=>1.5,
    ''=>1 //in case there is no status
);
$info=array_merge(//this will set the default values
    array(
        'ball'=>'poke',
        'hp'=>array('max'=>25,'current'=>1),
        'status'=>2.5,
        'rate'=>255
    ),
    $info
);
$a=(((3*$info['hp']['max'])-(2*$info['hp']['current']))*$info['rate']*$balls[strtolower($info['ball'])])/(3*$info['hp']['max'])*(is_numeric($info['status'])?$info['status']:$status[strtolower($info['status'])]);
$a=((pow(65536/(255/$a),0.25)*4096)<<0)/4096;//same as $a=floor(pow(65536/(255/$a),0.25)*4096)/4096;

if(mt_rand(0,1)>$a) die();//test 1
echo '*shake*',PHP_EOL;
if($a>1)die('Click!'.PHP_EOL);//if $a>1, catch it (critical catch)

if(mt_rand(0,1)>$a) die();//test 2
echo'*shake*',PHP_EOL,'*shake*',PHP_EOL;

if(mt_rand(0,1)>$a) die();//test 3
echo 'Click!',PHP_EOL;//passed all tests

我必须对此进行编辑,因为我使用的精度比要求的精度高得多。

该修复程序由TheConstructor提供。


我认为您使用的精度高于1/4096(问题状态注:Whenever any division is performed, the result is rounded down to a multiple of 1/4096.
TheConstructor 2014年

你是对的。我注意到我正在使用来自部门的任何价值。如果您愿意,可以给我一些帮助,因为我不知道如何在PHP中“舍入”为较小的精度。
Ismael Miguel

您可以floor(x*4096)/4096像我一样做或实现定点除法。
TheConstructor 2014年

谢谢您的帮助。我永远不会想到这一点。我已经确定了答案。
Ismael Miguel 2014年

3

爪哇611

import java.util.*;class P{enum B{DI(35),DU(35),FA(40),GR(15),LO(80),LU(30),MA(2550),MO(40),NE(30),PO(10),QU(50),SA(15),SP(15),UL(20);long v;B(int i){v=((long)i<<12)/(long)10;}}public static void main(String[]y){Scanner s=new Scanner(System.in);B b=B.valueOf(s.next().toUpperCase().substring(0,2));long c=(long)(s.nextDouble()*4096);long m=s.nextLong()<<12;long h=(s.hasNextInt()?s.nextLong():1)<<12;long S=(long)((s.hasNextDouble()?s.nextDouble():2.5)*4096);long p=(65536L<<12)/(long)(Math.sqrt(Math.sqrt((255L<<24)/((((3L*m-2L*h)*c>>12)*b.v>>12<<12)/(3L*m)*S>>12)))*512);Random r=new Random();System.out.print(r.nextInt(65536)<p?"*shake*\n"+(r.nextInt(65536)<p?"*shake*\n*shake*\n"+(r.nextInt(65536)<p?"Click!\n":""):""):"");}}

得分:

  • 729字节
  • -93全部球
  • -25个可选的current_hp和bonus_state

=> 611

该程序使用具有12个小数位的定点算术(1/4096是最右边的位的值)。由于Java通常不使用定点,因此代码内部要进行很多转换才能达到预期的结果。有关高尔夫使用的内插算术功能,请参见长版本。

虽然大多数计算都可以对int值进行,但是除法与longs 更好地配合,因为您需要将除数向左再移动12位,以保持所需的精度(否则,您松开所有小数位)。

样本输入(;仅在交互式运行时才需要,即STDIN尚未收到EOF):球,catch_rate,max_hp

Poke 15 255 ;

样本输出:

*shake*

样本输入:球,catch_rate,max_hp,current_hp,bonus_state

Moon 42 255 50 1.5

样本输出:

*shake*
*shake*
*shake*
Click!
import java.math.BigDecimal;
import java.util.Random;
import java.util.Scanner;

class Pokeball {
    static long shift(long i) {
        return i << 12;
    }
    enum B {
        DI(35),DU(35),FA(40),GR(15),LO(80),LU(30),MA(2550),MO(40),NE(30),PO(10),QU(50),SA(15),SP(15),UL(20);
        long v;
        B(int i) {
            v = semiFixedDivision(shift(i),10);
        }
    }

    public static void main(String[] args) {
        final Scanner s = new Scanner(System.in);
        B b = B.valueOf(s.next().toUpperCase().substring(0, 2));
        long catchRate = (long) (s.nextDouble() * 4096);
        long maxHp = shift(s.nextLong());
        long currentHp = shift(s.hasNextInt()?s.nextInt():1);
        long statusBonus = (long) ((s.hasNextDouble()?s.nextDouble():2.5) * 4096);
        long a = fixedMultiplication(fixedDivision(fixedMultiplication(fixedMultiplication(
                semiFixedMultiplication(3, maxHp) - semiFixedMultiplication(2, currentHp), catchRate), b.v),
                                                   semiFixedMultiplication(3, maxHp)), statusBonus);
        println("a=",a);
        long x = fixedFourthRoot(fixedDivision(shift(255), a));
        println("x=",x);
        println("x^4=",fixedMultiplication(fixedMultiplication(x,x), fixedMultiplication(x,x)));
        long p = semiFixedDivision(shift(65536), fixedFourthRoot(fixedDivision(shift(255), a)));
        Random r = new Random();
        System.out.print(r.nextInt(65536) < p ?
                         "*shake*\n" + (r.nextInt(65536) < p ?
                                        "*shake*\n*shake*\n" + (r.nextInt(65536) < p ?
                                                                "Click!\n" :
                                                                "") :
                                        "") :
                         "");
    }

    private static long unshift(long p) {
        return p >> 12;
    }

    private static void println(String s, long v) {
        System.out.print(s);
        println(v);
    }

    private static void println(long v) {
        System.out.printf("%s%n", BigDecimal.valueOf(v).divide(BigDecimal.valueOf(4096)));
    }

    /**
     * Calculates division of {@code a/b} with both number last 12 bits treated as being "right of the dot"
     */
    static long fixedDivision(long a, long b) {
        return (a<<12)/b;
    }

    /**
     * Calculates division of {@code a/b} with {@code a}'s last 12 bits treated as being "right of the dot"
     */
    static long semiFixedDivision(long a, long b) {
        return a/b;
    }
    static long fixedMultiplication(long a, long b) {
        return (a*b) >> 12;
    }
    static long semiFixedMultiplication(long a, long b) {
        return a*b;
    }
    static long fixedFourthRoot(long a) {
        return (long)(Math.sqrt(Math.sqrt(a)) * 512);
    }
}

1

的CoffeeScript - 317 313 310 307 306 294 270 250 242字节

342-25(参数)-75(12个球)= 242

_=process.stdin
l=console.log
m=Math
s=m.sqrt
t=['*shake*','Click!']
n=65536
_.resume()
_.setEncoding 'utf8'
_.on 'data',(d)=>
 [A,B,C,E,F]=d.match /\w+/g;E||=1;F||=2.5;i=0;while i++<3
  if n*(s s (3*A-2*E)*B*{P:1,G:1.5,U:2,M:255,S:1.5,L:3,N:3,D:3.5,F:4,Q:5}[C.charAt 0]*F)<m.floor(m.random()*n)*s s 765*A
   break
  l t[0]
 if i>2
  l t[i-3]

期望输入HP_max,Rate,Ball[,HP_current[,status]]。不支撑MoonLove滚珠。

这是我打高尔夫球的第一件事,不是正则表达式,因此可能还有改进的空间。我无耻地复制了这个想法,只存储部分球名称。;)支持其他两个球根本不值得,甚至连获得所有奖金的额外+7都没有。

非高尔夫版本

这个版本省略了我一开始定义的所有短别名,但确实单独定义了球查找。

balls =
  P: 1
  G: 1.5
  U: 2
  M: 255
  S: 1.5
  L: 3
  N: 3
  D: 3.5
  F: 4
  Q: 5

messages = ['*shake*', 'Click!']

process.stdin.resume()
process.stdin.setEncoding 'utf8'
process.stdin.on 'data', (data) =>
  [HP_max, rate, ball, HP_current, status] = data.match /\w+/g
  HP_current ||= 1
  HP_status ||= 2.5
  i = 0
  while i++ < 3
    if 65536 * (Math.sqrt Math.sqrt (3*HP_max - 2*HP_current)*rate*status*balls[ball.charAt 0]) < Math.floor(Math.random()*65536) * Math.sqrt Math.sqrt 765*HP_max
      break
    console.log messages[0]
  if i > 2
    console.log messages[i-3]

关于概率公式的注释:我已经重新排列了完整的公式(写了a),所以没有除法,并且我(...)^(1/4)通过对平方根进行两次运算来进行计算。


1
Oo p-=p%1/4096似乎真的很在行。(本来会猜测您至少需要写p-=p%(1/4096),然后我仍然不确定两边的分数都采用了模数。尼斯!
TheConstructor 2014年

@TheConstructor哈哈,是的,我实际上必须检查一下……对我来说,它看起来也很奇怪,但%可以用于JS中的一些有趣的事情。重新阅读问题后,我认为该答案不能完全满足四舍五入的要求。我认为应在每次除法后进行四舍五入。我可能需要重新构造一下计算。^^
Martin Ender 2014年

是的,可能还是个好主意
TheConstructor 2014年

@TheConstructor实际上,我确实需要编写p%(1/4096)。我什至在发布前检查了此内容,但不知何故还记得我的测试结果错误。
Martin Ender 2014年

在Chrome中尝试过;在没有()的情况下工作,但可能并非在所有浏览器上都始终如此...
TheConstructor 2014年

0

更新:(C#)

字节数:3600

暴击:-25

所有p球:-91


总计= 3,484

[打高尔夫球]

using System;using System.Text;using System.Security.Cryptography;using System.Linq;namespace Pokemon{public class MainClass{private string[] c(string[] i){if(i.Length <= 3){var v1 =i[0][0];var v2 =i[1][0];var v3 =i[2][0];if(v1>='0'&&v1<='9'&&v2>='a'&&v2<='z'&&v3>='0'&&v3<='9')return new string[]{i[0],i[2],i[1]};else if(v1>='0'&&v1<='9'&&v2>='0'&&v2<='9'&&v3>='a'&&v3<='z')return new string[]{i[0],i[1],i[2]};else if(v1>='a'&&v1<='z'&&v2>='0'&&v2<='9'&&v3>='0'&&v3<='9')return new string[]{i[1],i[2],i[0]};else return null;}else return null;}private static void Main(string[] args){while(true){Console.Clear();MainClass _c = new MainClass();Console.Write("Inputs'please:");var i = Console.ReadLine().ToLower();string[] r = _c.c((string[])(i.Split(new Char[]{' ','.',',','\n','\t','!','@','#','$','%','^','&','&','*','(',')','-','_','+','=','?','/','\\'},StringSplitOptions.RemoveEmptyEntries).Select(p=>p.Trim()).ToList()).ToArray());new w("Processing...\n");if(r== null)new w("Too many errors");else new m(r);}}}public class w{public w(string l){Console.WriteLine(l);}}public class m{public m(string[] v){switch (v[2].Substring(0,2)){case "po":c(v[0],v[1],"1");break;case "ul":c(v[0],v[1],"2");break;case "ma":c(v[0],v[1],"255");break;case "gr":case "sa":case "sp":c(v[0],v[1],"1.5");break;case "lu":case "ne":c(v[0],v[1],"3");break;case "du":case "di":c(v[0],v[1],"3.5");break;case "mo":case "fa":c(v[0],v[1],"4");break;case "qu":c(v[0],v[1],"5");break;case "lo":c(v[0],v[1],"8");break;default:new w("Not supported");break;}}private double y(double v){return Convert.ToDouble(((double)1/(double)4096)*(v/Convert.ToDouble(1/4096)-(v%Convert.ToDouble(1/4096))));}private bool i(double v,double r,double b){if(((double)new Random().Next(0,(int)r))>b*v)return true;else return false;}private double f(double r, double h, double b){return 2.5*y((((3.0*h)-2.0)*r*b)/(3.0*h));}private void c(params string[] v){var s =0.0;var x =0;if(int.Parse(v[1])>100&&int.Parse(v[1])<= 255){s =f(double.Parse(v[0]),double.Parse(v[1]),double.Parse(v[2]));x=0;}else if(int.Parse(v[0])>100&&int.Parse(v[0])<= 255){s =f(double.Parse(v[1]),double.Parse(v[0]),double.Parse(v[2]));x=1;}else{new w(String.Format("Which number is the Max HP? :{0} or {1}:",v[0],v[1]));var c_ = int.Parse(Console.ReadLine());s =f((double.Parse(v[0])+double.Parse(v[1]))-double.Parse(v[c_]),double.Parse(v[c_]),double.Parse(v[2]));x=2;}if(((double)new Random().Next(0, 2047))<s*2.5)new w("*shake*\nClick!");else{for(int c_= 0;c_<3;c_++){new w("*shake*");var r =Math.Pow(65536.0/y(255.0/s),0.25);if(i(r,double.Parse(v[x]),2.5)==true){new w("Click!");break;}else;}}Console.ReadKey();}}}

[定期]

using System;
using System.Text;
using System.Security.Cryptography;
using System.Linq;

namespace Pokemon
{
    public class MainClass
    {
        private string[] c(string[] i)
        {
            if (i.Length <= 3)
            {
                var v1 =i[0][0];
                var v2 =i[1][0];
                var v3 =i[2][0];
                if(v1>='0'&&v1<='9'&&v2>='a'&&v2<='z'&&v3>='0'&&v3<='9')return new string[]{i[0],i[2],i[1]};
                else if(v1>='0'&&v1<='9'&&v2>='0'&&v2<='9'&&v3>='a'&&v3<='z')return new string[]{i[0],i[1],i[2]};
                else if(v1>='a'&&v1<='z'&&v2>='0'&&v2<='9'&&v3>='0'&&v3<='9')return new string[]{i[1],i[2],i[0]};
                else return null;
            }
            else return null;
        }

        private static void Main(string[] args)
        {
            while(true)
            {
                Console.Clear();
                MainClass _c = new MainClass();
                Console.Write("Inputs'please:");
                var i = Console.ReadLine().ToLower();
                string[] r = _c.c((string[])(i.Split(new Char[]{' ','.',',','\n','\t','!','@','#','$','%','^','&','&','*','(',')','-','_','+','=','?','/','\\'},StringSplitOptions.RemoveEmptyEntries).Select(p=>p.Trim()).ToList()).ToArray());
                new w("Processing...\n");
                if(r== null)new w("Too many errors");
                else new m(r);
            }
        }
    }

    public class w
    {
        public w(string l)
        {
            Console.WriteLine(l);
        }
    }

    public class m
    {
        public m(string[] v)
        {
            switch (v[2].Substring(0,2))
            {
                case "po":
                    c(v[0],v[1],"1");
                    break;
                case "ul":
                    c(v[0],v[1],"2");
                    break;
                case "ma":
                    c(v[0],v[1],"255");
                    break;
                case "gr":
                case "sa":
                case "sp":
                    c(v[0],v[1],"1.5");
                    break;
                case "lu":
                case "ne":
                    c(v[0],v[1],"3");
                    break;
                case "du":
                case "di":
                    c(v[0],v[1],"3.5");
                    break;
                case "mo":
                case "fa":
                    c(v[0],v[1],"4");
                    break;
                case "qu":
                    c(v[0],v[1],"5");
                    break;
                case "lo":
                    c(v[0],v[1],"8");
                    break;
                default:
                    new w("Not supported");
                    break;
            }
        }

        private double y(double v){return Convert.ToDouble(((double)1/(double)4096)*(v/Convert.ToDouble(1/4096)-(v%Convert.ToDouble(1/4096))));}

        private bool i(double v,double r,double b){if(((double)new Random().Next(0,(int)r))>b*v)return true;else return false;}

        private double f(double r, double h, double b){return 2.5*y((((3.0*h)-2.0)*r*b)/(3.0*h));}

        private void c(params string[] v)
        {
            var s =0.0;
            var x =0;
            if(int.Parse(v[1])>100&&int.Parse(v[1])<= 255){s =f(double.Parse(v[0]),double.Parse(v[1]),double.Parse(v[2]));x=0;}
            else if(int.Parse(v[0])>100&&int.Parse(v[0])<= 255){s =f(double.Parse(v[1]),double.Parse(v[0]),double.Parse(v[2]));x=1;}
            else
            {
                new w(String.Format("Which number is the Max HP? :{0} or {1}:",v[0],v[1]));
                var c_ = int.Parse(Console.ReadLine());
                s =f((double.Parse(v[0])+double.Parse(v[1]))-double.Parse(v[c_]),double.Parse(v[c_]),double.Parse(v[2]));
                x=2;
            }
            if (((double)new Random().Next(0, 2047))<s*2.5)new w("*shake*\nClick!");
            else
            {
                for(int c_= 0;c_<3;c_++)
                {
                    new w("*shake*");
                    var r =Math.Pow(65536.0/y(255.0/s),0.25);
                    if (i(r,double.Parse(v[x]),2.5)==true){new w("Click!");break;}else;
                }
            }
            Console.ReadKey();
        }    
      }
  }

这是代码打高尔夫球。您应该减少答案(例如:去除空格)。您仍然可以提供当前答案作为可读版本。
Ismael Miguel
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.