Re: MH雑談47は素数です ( No.229 )
日時: 2009/11/19 20:35
名前: 夭 ◆/.s.....S. (ID: ???)

>>228
☆ 色違いの判定
前作までは個体値を使って判定していましたが、今作からは性格値とIDで判定しています。
判定式:
( ( ( (ID上位)xor(ID下位) )xor(性格値上位) )xor(性格値下位) )
が7以下なら色違いになります。
解説するとID上位2バイトとID下位2バイトをxorし、それと性格値上位2バイトをxorし、さらにそれと性格値下位2バイトをxorしたものが7以下なら色違いです。
xorとは排他的論理和のことでビットごとに比較して片方のみが1(もう一方は0)のときのみに1になります。(Windowsの電卓を関数電卓にすればxor演算ができます)

具体例その1:(性格値:DF6503E8 ID:98AE562Fのとき)
ID上位:98AE ID下位:562F 性格値上位:DF65 性格値下位:03E8となります。
この数を上の式に当てはめると
( ( ( 98AE xor 562F ) xor DF65 ) xor 03E8 ) = 120C > 7
なので色違いではありません。
詳しくは
16進数:( 98AE xor 562F ) = CE81
2進数:( 1001100010101110 xor 0101011000101111 ) = 1100111010000001

16進数:( CE81 xor DF65 ) = 11E4
2進数:( 1100111010000001 xor 1101111101100101 ) = 0001000111100100

16進数:( 11E4 xor 03E8 ) = 120C
2進数:( 0001000111100100 xor 0000001111101000 ) = 0001001000001100

具体例その2:(性格値:AB41 ID:210A8473のとき)
ID上位:210A ID下位:8473 性格値上位:AB41 性格値下位:0E3Dとなります。
この数を上の式に当てはめると
( ( ( 210A xor 8473 ) xor AB41 ) xor 0E3D ) = 0005 <= 7
なので色違いになります。
詳しくは
16進数:( 210A xor 8473 ) = A579
2進数:( 0010000100001010 xor 1000010001110011 ) = 1010010101111001

16進数:( A579 xor AB41 ) = 0E38
2進数:( 1010010101111001xor 1010101101000001 ) = 0000111000111000

16進数:( 0E38 xor 0E3D ) = 0005
2進数:( 0000111000111000 xor 0000111000111101 ) = 0000000000000101

ってこれGBA時代のものだった
どちらにせよ配達員からでは多分色違いは出ないと思うよ