ポケボールシミュレーター


26

ポケモンのビデオゲームでは、プレイヤーは世界に送り出され、野生動物を小さなボールに押し込み、戦いの訓練をします。もちろん、誰もが戦闘のためにポケモンをプレイしないことを知ってます。シリーズが持っている本当のドローは、それ自体を捕まえるポケモンです!あなたの仕事は、キャプチャの試行中にポケットボールをシミュレートすることです。この課題では、次のようなジェネレーションVキャプチャ式を使用します。

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

HP_maxターゲットポケモンの最大HPと等しい。HP_currentターゲットポケモンの現在のHPに等しい。rateは、ポケモンのキャッチ率bonus_ball、スローされたポケボールの乗数でありbonus_status、ターゲットポケモンがスリープ状態またはフリーズ状態の場合は2.5、ターゲットポケモンが麻痺、中毒、または燃焼した場合は1.5、それ以外の場合は1です。

を見つけaたら、最大3つの「シェイクチェック」を実行します。シェイクチェックが成功する確率は65536 / (255 / a)^(1/4)です。これらのチェックのいずれかが失敗した場合、ポケモンはボールをエスケープします。3つのチェックすべてが成功すると、ポケモンが捕まえられます!

注:除算が実行されるたびに、結果は1/4096の倍数に切り捨てられます。通常、これは重要ではありませんが、プログラムで考慮する必要があります。

あなたの課題は、シェイクチェックを実行し、チェックのステータスを標準出力するプログラムを作成することです。stdinでは、プログラムはポケモンの最大HP、ターゲットポケモンのキャッチ率、およびポケボールの名前(少なくとも、以下の詳細)を受け取ります。最大HPとキャッチ率は両方とも整数であることが保証されていますが、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!

(これはタイプミスではなく、プログラムは2回のシェークを出力するべきではありません。)

これはなので、スコアはプログラムのソースコードのバイトカウントになります。最低スコアが勝ちます。

ボーナス!

ポケモンは1 HPで眠っていると仮定してもよいと言いました。または、ポケモンの現在のHPとをユーザーが入力できるようにすることもできますbonus_status。ポケモンの現在のHPは常に最大HP以下の整数であり、bonus_status常に2.5、1.5または1のいずれかになります。その場合、入力の最後にこれらの値が必要で、デフォルトは1および2.5提供されていない場合。これらのいずれかを実装する場合、スコアから15ポイントを差し引くか、両方を25ポイント差し引くことができます。

さらに、重要なキャプチャを実装できます。重大なキャプチャが発生した場合、1回のシェイクテストのみが実行されます。失敗した場合、プログラムはサイレントに終了します。渡された場合、以下を出力します。

*shake*
Click!

プレイヤーがより多くのポケモンを収集するにつれて、クリティカルキャプチャはより一般的になりますが、簡単にするために、それらはすでに「すべてを捕まえた」と仮定できます。0から2047の間のランダムに生成された数値がa(最初の計算の結果)2.5 より小さい場合、それは重要なキャプチャです。重要なキャプチャのサポートにより、スコアから25ポイントを削除できます。

サポートすることを選択できる他のいくつかのポケットボールがあります。名前とキャッチ乗数は次のとおりです。

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からのBonus_Status、クリティカルキャプチャ、10個のオプションボールすべて)を達成すると、スコアから7ポイントの追加報酬が得られ、合計150ボーナスになります。

入出力の例

全員が同じページにいることを確認するためです。

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

頑張って、幸せなゴルフを!


私は現在、あなたが与える可能性がどれほど大きいかを判断することはできません65536 / (255 / a)^(1/4)が、私の勇気はそれが1より大きいと言います。0から65536の範囲の乱数に対してチェックしますか?乱数が大きい場合、または小さい場合、チェックは成功しますか?
TheConstructor 14年

65536 / (255 / a)^(1/4)が1より大きい場合、チェックは自動的に成功します。2番目の質問の意味がわかりません。
地下

つまりrnd < p、チェックはrnd0〜1の範囲で成功します。
TheConstructor14年

1
@IsmaelMiguel私のコメントを参照してください:0から1の範囲の乱数を生成し、それと比較します。65536 / (255 / a)^(1/4)乱数が小さい場合、シェイクテストは成功しました
TheConstructor 14年

1
テキストの状態として、テキスト形式のポークボール、最大馬力、キャッチ率はプログラムへの入力として過去のものです。オプションで、現在のHP(デフォルト1)またはステータスボーナス(デフォルト2.5)を要求できます
TheConstructor

回答:


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

選択したボールを含めるためのボーナス:サファリ、スポーツ、ルアー、ネット、夕暮れ、ダイブ、ファスト、クイック

8 * 5 + 6 + 5 + 4 + 3 + 4 + 4 + 4 + 5 = 75ボーナスポイントをくれ

[編集]除算を使用しないときは、除算を使用するたびに12の小数ビットに切り捨てます

[編集2]ポケボール辞書を最適化する


1/4096より高い精度を使用していると思います(質問状態Note: Whenever any division is performed, the result is rounded down to a multiple of 1/4096.
TheConstructor 14年

あなたはおそらく正しいでしょう、私はその部分をよく理解していませんでした、そして、他の答えは私がしたのと同じようにそれをするようでした。私はこのようなことをする必要があると思います: r < 65536/(255/a)^(0.25) <=> r*255^(0.25)/a^(0.25) < 65536 <=> r*255^(0.25) < 65536*a^(0.25)すべての部門を除外するには?
コルスタイン14年

1/4096は12の小数ビットを意味します。私の解決策を見てください。より直接的なアプローチは、floor(x*4096)*4096小数点以下を切り捨てるのと同じようになります。
TheConstructor 14年

なるほど、ありがとう。これはおそらくあなたがやったように乗算にも当てはまるはずですが、それがルールに記載されていないので、私はそれについて心配するつもりはありません。:)
Þorsteinn

はい、おそらく固定小数点演算を使用します。しかし、OPは除算のみを要求しました。
TheConstructor 14年

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

はい、私はこれが完全にルールに違反していることを知っていますが、私は気にしません。気付いていない場合、これは最初のポケモン生成キャプチャアルゴリズムであり、すべての癖があります(特定の条件では、グレートボールはウルトラボールよりも優れています)。これにより、含まれていないものも含めてすべての機能が実装されます(とにかくそれらのポイントを含めることにしました)。重要なキャプチャーは無視されますが(キャプチャー率に影響しないというだけで実装されています)、新しいポケボールは他のポケボールのデータをロードします。

この回答は短いですが、すべてのルールに違反していることに注意してください。したがって、単に楽しい回答であると考えてください。受け入れないでください。私は当初、Perl 5でGen5アルゴリズムを実装するつもりでしたが、私は決めました。はい、実際にPerl 1をコンパイルしましたが、このコードは機能します。Perlの新しいバージョンで実行すると、の使用が推奨されないという警告が表示される場合がありますがdo、正直なところ、Perl 1で関数を実行する唯一の方法です。で始まる行/M/を前の行に移動します-なぜ?-わかりません)。

また、Perl 1には乱数がないため、のモジュロで私を殺さないでください$$。これは、私が見つけた乱数に最も近いものです。

編集:古いdo call()構文はPerl 5.19.8で削除されたようです。Perl 5.20はPerl 1スクリプトと互換性がないように見えるため、このスクリプトの実行には必ず古いバージョンのPerlを使用してください。


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;

これを使用するには、STDINで「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 14年

そしてあなたは正しい。私は、部門からもたらされる価値を使用していることに気付きました。必要に応じて、PHPでより小さな精度に「丸める」方法がまったくわからないため、いくつかのヘルプを提供できます。
イスマエルミゲル14年

私とfloor(x*4096)/4096同じように、固定小数点除算を実行または実装できます。
TheConstructor 14年

ご協力ありがとうございました。私はそれを決して考えません。答えを修正しました。
イスマエルミゲル

3

Java、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値に対して実行できますがlong、希望する精度を維持するために配当をさらに12ビット左にシフトする必要があるため、除算はsでよりうまく機能します(そうでない場合、すべての小数ビットを失います)。

サンプル入力(;インタラクティブに実行する場合、つまりSTDINがEOFを受信して​​いない場合にのみ必要):Ball、catch_rate、max_hp

Poke 15 255 ;

サンプル出力:

*shake*

サンプル入力:Ball、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]]MoonまたはLoveボールをサポートしていません。

これは正規表現ではない、私がこれまでにゴルフをした最初のことなので、おそらく改善の余地があるでしょう。部分的なボール名のみを保存するというアイデアを恥知らずにコピーしました。;)他の2つのボールをサポートすることは、それだけの価値はありません。すべてのボーナスを得るための追加の+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)平方根を2回取得して計算しています。


1
優位性があなたの側にあるように見えますOoはp-=p%1/4096本当に機能しているようです。(書込みに少なくとも必要であなたをう推測しているだろうp-=p%(1/4096)し、その後、まだ私は、弾性率の両方の側の分画のために実装されていることを確認しないとニース。!
TheConstructor

@TheConstructorハハ、ええ、私は実際にそれを確認しなければなりませんでした...それも私には本当に奇妙に見えましたが、%JSでいくつかの面白いことに使用できます。質問を読み直した後、この答えは丸めの要件を完全には満たしていないと思います。分割後に丸めを適用する必要があると思います。計算を少し再構築する必要があるかもしれません。^^
マーティン・エンダー14年

はい、おそらくまだ良いアイデア
TheConstructor

@TheConstructor実際、私はを書く必要がありますp%(1/4096)。投稿する前にこれもチェックしましたが、どういうわけか私のテストの結果は間違っていました。
マーティンエンダー14年

Chromeで試しました。...しかし、そうでないかもしれない、常にかどうか、すべてのブラウザで()なしで働いていた
TheConstructor

0

更新:(C#)

バイト数:3,600

クリティカル:-25

すべてのポケボール:-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();
        }    
      }
  }

これはコードゴルフです。回答を減らす必要があります(例:空白の削除)。現在の回答を読みやすいバージョンとして提供できます。
イスマエルミゲル14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.