Computer Chess Biggest Liar

General discussion about computer chess...
Post Reply
User avatar
thorstenczub
Posts: 592
Joined: Wed Jun 09, 2010 12:51 pm
Real Name: Thorsten Czub
Location: United States of Europe, germany, NRW, Lünen
Contact:

Re: Computer Chess Biggest Liar

Post by thorstenczub » Fri Oct 14, 2011 12:50 am

Prima wrote:Just curios....
1. what's your take on current Fruit / Crafty => Rybka/Vas case?

Vas has taken code from others.

2. Was it okay for VR to plagiarized Fruit / Crafty codes without due credit to their respective authors, claiming "Rybka is 100% original at the source code level", but we found that to be a lie?


no it was not ok.



3. Was it OK for the ICGA to ban Vas?

of course it was ok.


4. Do you think Bob Hyatt etc, should not have dug up the truth?


of course bob should bring out the truth.

5. What do you think about Fabien Letouzey and the FSF considering the legal avenue?

IMO fabien should go to court and get money from vas rajlich.

User avatar
kingliveson
Posts: 1388
Joined: Thu Jun 10, 2010 1:22 am
Real Name: Franklin Titus
Location: 28°32'1"N 81°22'33"W

Re: Computer Chess Biggest Liar

Post by kingliveson » Fri Oct 14, 2011 2:34 am

To review: On pages 2 & 3 of this thread, RobboLito's/Houdini's main() are posted. Since Houdini is RobboLito with modifications, the functions called in main() are the same, the code in those functions are the same, and the call order are the same. As previously stated, the difference with casual observation is of course due to modified/shuffled routines, compiler, and optimization flags.

Houdini's binary was re-opened with different decompiling option and the addresses (not content) have changed.

Houdini's main():

Code: Select all

int __cdecl main(int argc, const char **argv, const char **envp)
{
  int v3; // eax@1
  DWORD v4; // ecx@1
  struct _SYSTEM_INFO SystemInfo; // [sp+4h] [bp-24h]@1

  sub_428B5A("Houdini w32 1_CPU\nbuild %d-%.2d-%.2d \nby Robert Houdart\n", 2010);
  v3 = sub_4287BF();
  fflush((FILE *)(v3 + 32));
  GetSystemInfo(&SystemInfo);
  v4 = SystemInfo.dwNumberOfProcessors;
  dword_926878 = SystemInfo.dwNumberOfProcessors;
  if ( (signed __int32)SystemInfo.dwNumberOfProcessors > 1 )
    v4 = 1;
  dword_43CED0 = v4;
  dword_4840C8 = 0;
  if ( (signed int)v4 > 0 )
  {
    dword_4840C8 = (int)_aligned_malloc(0x200000u, 0x40u);
    memset((void *)dword_4840C8, 0, 0x200000u);
  }
  sub_40F0D0(128);
  memset32(&word_8FB368, 134219776, 0x200u);
  sub_409310();
  sub_421F80();
  _cfltcvt_init();
  sub_428340();
  sub_40F760();
  sub_4240A0();
  sub_4274B0(1);
  while ( 1 )
    sub_426470();
}
RobboLito's main():

Code: Select all

int main()
    {
    show_version();
    pawn_zobrist_initialization();
    initialization_zobrist(128);
    history_reset();
    initialization_capture();
    pile_initialization();
    pawn_initialization();
    initialization_value();
    static_initialization();
    game_new(TRUE);

    while( 1 )
        input_console();
    return 0;
    }
On the previous pages, decompilation of static_initialization() was not posted so here it is.

For comparison, here is RobboLito's static table initialization dis-assembled:

Code: Select all

signed int __cdecl sub_422920()
{
  _UNKNOWN *v0; // ecx@24
  signed int result; // eax@24
  signed int v2; // esi@1
  signed int v3; // edi@1
  int v4; // ebx@2
  signed int v5; // edi@3
  int v6; // ebx@4
  signed int v7; // edi@5
  int v8; // ecx@6
  signed int v9; // eax@6
  int v10; // ebp@7
  int v11; // ebx@9
  int v12; // eax@11
  signed int v13; // edi@12
  int v14; // ecx@13
  signed int v15; // eax@13
  int v16; // ebp@14
  int v17; // ebx@16
  int v18; // eax@18
  signed int v19; // eax@19
  _UNKNOWN *v20; // ecx@19
  int v21; // ebp@20
  int v22; // ebp@20
  int v23; // ebp@20
  int v24; // ebp@20
  int v25; // edx@20
  int v26; // edx@20
  int v27; // ebp@20
  int v28; // ebp@20
  signed int v29; // edi@21
  int v30; // ebx@22
  int v31; // edi@23
  int v32; // [sp+Ch] [bp-40h]@20
  int v33; // [sp+10h] [bp-3Ch]@20
  int v34; // [sp+14h] [bp-38h]@20
  int v35; // [sp+18h] [bp-34h]@20
  int v36; // [sp+1Ch] [bp-30h]@20
  int v37; // [sp+20h] [bp-2Ch]@20
  int v38; // [sp+24h] [bp-28h]@20
  int v39; // [sp+28h] [bp-24h]@20
  int v40; // [sp+2Ch] [bp-20h]@6
  int v41; // [sp+30h] [bp-1Ch]@6
  int v42; // [sp+34h] [bp-18h]@6
  int v43; // [sp+38h] [bp-14h]@6
  int v44; // [sp+3Ch] [bp-10h]@6
  int v45; // [sp+40h] [bp-Ch]@6
  int v46; // [sp+44h] [bp-8h]@6
  int v47; // [sp+48h] [bp-4h]@6

  v2 = 0;
  v3 = 0;
  do
  {
    v4 = sub_4222A0(v3) << 16;
    dword_781900[v3] = sub_422340(v3) + v4;
    ++v3;
  }
  while ( v3 <= 63 );
  v5 = 0;
  do
  {
    v6 = sub_4223E0(v5) << 16;
    dword_781A00[v5] = sub_422480(v5) + v6;
    ++v5;
  }
  while ( v5 <= 63 );
  v7 = 0;
  do
  {
    v44 = -2;
    v45 = -2;
    v46 = -3;
    v47 = -3;
    v8 = v7 & 7;
    v9 = v7 >> 3;
    v40 = 3;
    v41 = 2;
    v42 = 0;
    v43 = 0;
    if ( (v7 & 7) - (v7 >> 3) < 0 )
      v10 = v9 - v8;
    else
      v10 = (v7 & 7) - (v7 >> 3);
    v11 = v8 + v9 - 7;
    if ( v11 < 0 )
      v11 = 7 - v8 - v9;
    v12 = sub_422560(v7++);
    dword_781BFC[v7] = *(&v40 + v10) + *(&v40 + v11) + (v12 << 16);
  }
  while ( v7 <= 63 );
  v13 = 0;
  do
  {
    v44 = -2;
    v45 = -2;
    v46 = -3;
    v47 = -3;
    v14 = v13 & 7;
    v15 = v13 >> 3;
    v40 = 3;
    v41 = 2;
    v42 = 0;
    v43 = 0;
    if ( (v13 & 7) - (v13 >> 3) < 0 )
      v16 = v15 - v14;
    else
      v16 = (v13 & 7) - (v13 >> 3);
    v17 = v14 + v15 - 7;
    if ( v17 < 0 )
      v17 = 7 - v14 - v15;
    v18 = sub_422560(v13++);
    dword_781CFC[v13] = *(&v40 + v16) + *(&v40 + v17) + (v18 << 16);
  }
  while ( v13 <= 63 );
  v19 = 2;
  v20 = &unk_781E04;
  do
  {
    v32 = -4;
    v39 = -4;
    v44 = 1;
    v45 = 1;
    v46 = 1;
    v33 = 0;
    v34 = 4;
    v35 = 8;
    v36 = 8;
    v37 = 4;
    v38 = 0;
    v21 = *(&v32 + (((_BYTE)v19 - 2) & 7)) << 16;
    v40 = 0;
    v41 = 0;
    v42 = 0;
    v43 = 0;
    v47 = -2;
    v22 = *(&v40 + ((v19 - 2) >> 3)) + v21;
    v32 = -4;
    v39 = -4;
    v44 = 1;
    v45 = 1;
    v46 = 1;
    *((_DWORD *)v20 - 1) = v22;
    v33 = 0;
    v34 = 4;
    v35 = 8;
    v36 = 8;
    v37 = 4;
    v38 = 0;
    v23 = *(&v32 + (((_BYTE)v19 - 1) & 7)) << 16;
    v40 = 0;
    v41 = 0;
    v42 = 0;
    v43 = 0;
    v47 = -2;
    v24 = *(&v40 + ((v19 - 1) >> 3)) + v23;
    v32 = -4;
    v39 = -4;
    v44 = 1;
    v45 = 1;
    v46 = 1;
    *(_DWORD *)v20 = v24;
    v33 = 0;
    v34 = 4;
    v35 = 8;
    v36 = 8;
    v37 = 4;
    v38 = 0;
    v25 = *(&v32 + (v19 & 7)) << 16;
    v40 = 0;
    v41 = 0;
    v42 = 0;
    v43 = 0;
    v47 = -2;
    v26 = *(&v40 + (v19 >> 3)) + v25;
    v33 = 0;
    *((_DWORD *)v20 + 1) = v26;
    v32 = -4;
    v39 = -4;
    v44 = 1;
    v45 = 1;
    v46 = 1;
    v34 = 4;
    v35 = 8;
    v36 = 8;
    v37 = 4;
    v38 = 0;
    v27 = *(&v32 + (((_BYTE)v19 + 1) & 7)) << 16;
    v40 = 0;
    v41 = 0;
    v42 = 0;
    v43 = 0;
    v47 = -2;
    v28 = *(&v40 + ((v19 + 1) >> 3)) + v27;
    v19 += 4;
    *((_DWORD *)v20 + 2) = v28;
    v20 = (char *)v20 + 16;
  }
  while ( v19 - 2 <= 63 );
  v29 = 0;
  do
  {
    v30 = sub_422620(v20) << 16;
    dword_781F00[v29] = sub_4226E0(v29) + v30;
    ++v29;
  }
  while ( v29 <= 63 );
  do
  {
    v31 = sub_4227A0(v2) << 16;
    dword_781B00[v2++] = sub_422830() + v31;
  }
  while ( v2 <= 63 );
  v0 = &unk_782200;
  result = (signed int)&unk_781AFC;
  do
  {
    *((_DWORD *)v0 - 64) = -*(_DWORD *)(result - 256);
    *(_DWORD *)v0 = -*(_DWORD *)result;
    *((_DWORD *)v0 + 128) = -*(_DWORD *)(result + 512);
    *((_DWORD *)v0 + 192) = -*(_DWORD *)(result + 768);
    *((_DWORD *)v0 + 256) = -*(_DWORD *)(result + 1024);
    *((_DWORD *)v0 + 320) = -*(_DWORD *)(result + 1280);
    *((_DWORD *)v0 + 64) = -*(_DWORD *)(result + 256);
    result -= 4;
    v0 = (char *)v0 + 4;
  }
  while ( result >= (signed int)dword_781A00 );
  return result;
}
Houdini's static table initialization:

Code: Select all

int __cdecl sub_4240A0()
{
  int v0; // ebp@1
  signed int v1; // esi@1
  signed int v2; // ebx@1
  int v3; // edi@3
  int v4; // edi@3
  int v5; // edi@3
  int v6; // edi@3
  int v7; // ebp@3
  int v8; // eax@3
  int v9; // eax@3
  int v10; // eax@3
  int v11; // eax@3
  int v12; // eax@3
  int v13; // eax@3
  int v14; // eax@3
  int v15; // edi@3
  int v16; // edi@3
  int v17; // edi@3
  int result; // eax@3
  int v19; // edi@3
  int v20; // [sp+10h] [bp-4Ch]@1
  int v21; // [sp+14h] [bp-48h]@3
  int v22; // [sp+18h] [bp-44h]@3
  int v23; // [sp+1Ch] [bp-40h]@3
  int v24; // [sp+20h] [bp-3Ch]@3
  int v25; // [sp+24h] [bp-38h]@3
  int v26; // [sp+28h] [bp-34h]@3
  int v27; // [sp+2Ch] [bp-30h]@3
  int v28; // [sp+30h] [bp-2Ch]@3
  int v29; // [sp+34h] [bp-28h]@3
  int v30; // [sp+38h] [bp-24h]@3
  int v31; // [sp+3Ch] [bp-20h]@3
  int v32; // [sp+40h] [bp-1Ch]@3
  int v33; // [sp+44h] [bp-18h]@3
  int v34; // [sp+48h] [bp-14h]@3
  int v35; // [sp+4Ch] [bp-10h]@3
  int v36; // [sp+50h] [bp-Ch]@3
  int v37; // [sp+54h] [bp-8h]@3
  unsigned int v38; // [sp+58h] [bp-4h]@1

  v38 = (unsigned int)&v20 ^ __security_cookie;
  v0 = 0;
  v1 = 0;
  v2 = (signed int)&unk_932A8C;
  while ( 1 )
  {
    v3 = sub_423970(v1) << 16;
    v4 = 2 * (sub_423A30(v1) + v3);
    dword_932090[v1] = v4;
    *(_DWORD *)(v2 - 256) = -v4;
    v5 = sub_423AF0(v1) << 16;
    v6 = 2 * (sub_423BB0(v1) + v5);
    dword_932190[v1] = v6;
    *(_DWORD *)v2 = -v6;
    v24 = v0;
    v25 = v0;
    v26 = -2;
    v27 = -2;
    v22 = 3;
    v23 = 2;
    v28 = -3;
    v29 = -3;
    v7 = v1 & 7;
    v21 = sub_423CB0(v1) << 16;
    v8 = abs(v7 - (v1 >> 3));
    v20 = v8;
    v9 = *(&v22 + v8) + *(&v22 + abs((v1 >> 3) + v7 - 7));
    v22 = 3;
    v23 = 2;
    v10 = 2 * (v21 + v9);
    dword_932390[v1] = v10;
    *(_DWORD *)(v2 + 512) = -v10;
    v24 = 0;
    v25 = 0;
    v26 = -2;
    v27 = -2;
    v28 = -3;
    v29 = -3;
    v11 = abs(v7 - (v1 >> 3));
    v20 = v11;
    v12 = 2 * (v21 + *(&v22 + v11) + *(&v22 + abs((v1 >> 3) + v7 - 7)));
    dword_932490[v1] = v12;
    *(_DWORD *)(v2 + 768) = -v12;
    v23 = 0;
    v28 = 0;
    v30 = 0;
    v31 = 0;
    v32 = 0;
    v33 = 0;
    v34 = 1;
    v35 = 1;
    v36 = 1;
    v24 = 4;
    v25 = 8;
    v26 = 8;
    v27 = 4;
    v22 = -4;
    v29 = -4;
    v13 = *(&v22 + v7) << 16;
    v37 = -2;
    v14 = 2 * (*(&v30 + (v1 >> 3)) + v13);
    dword_932590[v1] = v14;
    *(_DWORD *)(v2 + 1024) = -v14;
    v15 = sub_423D70(v1) << 16;
    v16 = 2 * (sub_423E40(v1) + v15);
    dword_932690[v1] = v16;
    *(_DWORD *)(v2 + 1280) = -v16;
    v17 = sub_423F00(v1) << 16;
    result = sub_423FB0(v1);
    v19 = 2 * (result + v17);
    dword_932290[v1] = v19;
    *(_DWORD *)(v2 + 256) = -v19;
    v2 -= 4;
    ++v1;
    if ( v2 < (signed int)&unk_932990 )
      break;
    v0 = 0;
  }
  return result;
}
Bishop ending, Rook opening/ending are in the above de-compiled routine for reasons that become apparent when compared to the others, at least to programmers who these posts are for anyways...

RobboLito's Bishop ending static table, (static.c):

Code: Select all

static int endgame_bishop( int qu )
    {
    int V[8] =
        {
        3, 2, 0, 0, -2, -2, -3, -3
        };

    int tr = RANK(qu), co = FILE(qu);
    int d = ABSOLUTE_(co - tr), e = ABSOLUTE_(co + tr - 7);
    return V[d] + V[e];
    }
RobboLito's Rook opening static table, (static.c):

Code: Select all

static int opening_rook( int qu )
    {
    int C[8] =
        {
        -4, 0, 4, 8, 8, 4, 0, -4
        };

    return C[FILE(qu)];
    }
RobboLito's Rook ending static table, (static.c):

Code: Select all

static int endgame_rook( int qu )
    {
    int T[8] =
        {
        0, 0, 0, 0, 1, 1, 1, -2
        };

    return T[RANK(qu)];
    }
Houdini's Pawn opening static table:

Code: Select all

int __cdecl sub_423970(signed int a1)
{
  signed int v1; // ecx@1
  int result; // eax@3
  int v3; // [sp+0h] [bp-44h]@1
  int v4; // [sp+4h] [bp-40h]@1
  int v5; // [sp+8h] [bp-3Ch]@1
  int v6; // [sp+Ch] [bp-38h]@1
  int v7; // [sp+10h] [bp-34h]@1
  int v8; // [sp+14h] [bp-30h]@1
  int v9; // [sp+18h] [bp-2Ch]@1
  int v10; // [sp+1Ch] [bp-28h]@1
  int v11; // [sp+20h] [bp-24h]@1
  int v12; // [sp+24h] [bp-20h]@1
  int v13; // [sp+28h] [bp-1Ch]@1
  int v14; // [sp+2Ch] [bp-18h]@1
  int v15; // [sp+30h] [bp-14h]@1
  int v16; // [sp+34h] [bp-10h]@1
  int v17; // [sp+38h] [bp-Ch]@1
  int v18; // [sp+3Ch] [bp-8h]@1
  unsigned int v19; // [sp+40h] [bp-4h]@1

  v19 = (unsigned int)&v3 ^ __security_cookie;
  v5 = -2;
  v8 = -2;
  v13 = -2;
  v6 = 5;
  v7 = 5;
  v1 = a1 >> 3;
  v3 = -20;
  v4 = -8;
  v9 = -8;
  v10 = -20;
  v11 = 0;
  v12 = -3;
  v14 = -1;
  v15 = 1;
  v16 = 2;
  v17 = 3;
  v18 = 0;
  if ( a1 >> 3 && v1 != 7 )
    result = *(&v11 + v1) + *(&v3 + (a1 & 7));
  else
    result = 0;
  return result;
}
RobboLito's, (static.c):

Code: Select all

static int opening_pawn( int qu )
    {
    int C[8] =
        {
        -20, -8, -2, 5, 5, -2, -8, -20
        };

    int T[8] =
        {
        0, -3, -2, -1, 1, 2, 3, 0
        };

    int co = FILE(qu), tr = RANK(qu);

    if( tr == T1 || tr == T8 )
        return 0;
    return C[co] + T[tr];
    }
Houdini's Pawn ending static table:

Code: Select all

int __cdecl sub_423A30(signed int a1)
{
  signed int v1; // ecx@1
  int result; // eax@3
  int v3; // [sp+0h] [bp-44h]@1
  int v4; // [sp+4h] [bp-40h]@1
  int v5; // [sp+8h] [bp-3Ch]@1
  int v6; // [sp+Ch] [bp-38h]@1
  int v7; // [sp+10h] [bp-34h]@1
  int v8; // [sp+14h] [bp-30h]@1
  int v9; // [sp+18h] [bp-2Ch]@1
  int v10; // [sp+1Ch] [bp-28h]@1
  int v11; // [sp+20h] [bp-24h]@1
  int v12; // [sp+24h] [bp-20h]@1
  int v13; // [sp+28h] [bp-1Ch]@1
  int v14; // [sp+2Ch] [bp-18h]@1
  int v15; // [sp+30h] [bp-14h]@1
  int v16; // [sp+34h] [bp-10h]@1
  int v17; // [sp+38h] [bp-Ch]@1
  int v18; // [sp+3Ch] [bp-8h]@1
  unsigned int v19; // [sp+40h] [bp-4h]@1

  v19 = (unsigned int)&v3 ^ __security_cookie;
  v6 = -10;
  v7 = -10;
  v12 = -3;
  v13 = -3;
  v5 = -8;
  v8 = -8;
  v1 = a1 >> 3;
  v3 = -4;
  v4 = -6;
  v9 = -6;
  v10 = -4;
  v11 = 0;
  v14 = -2;
  v15 = -1;
  v16 = 0;
  v17 = 2;
  v18 = 0;
  if ( a1 >> 3 && v1 != 7 )
    result = *(&v11 + v1) + *(&v3 + (a1 & 7));
  else
    result = 0;
  return result;
}
RobboLito's, (static.c):

Code: Select all

static int endgame_pawn( int qu )
    {
    int C[8] =
        {
        -4, -6, -8, -10, -10, -8, -6, -4
        };

    int T[8] =
        {
        0, -3, -3, -2, -1, 0, 2, 0
        };

    int co = FILE(qu), tr = RANK(qu);

    if( tr == T1 || tr == T8 )
        return 0;
    return C[co] + T[tr];
    }
Houdini's Knight opening static table:

Code: Select all

int __fastcall sub_423AF0(signed int a1)
{
  int result; // eax@3
  int v2; // [sp+0h] [bp-44h]@1
  int v3; // [sp+4h] [bp-40h]@1
  int v4; // [sp+8h] [bp-3Ch]@1
  int v5; // [sp+Ch] [bp-38h]@1
  int v6; // [sp+10h] [bp-34h]@1
  int v7; // [sp+14h] [bp-30h]@1
  int v8; // [sp+18h] [bp-2Ch]@1
  int v9; // [sp+1Ch] [bp-28h]@1
  int v10; // [sp+20h] [bp-24h]@1
  int v11; // [sp+24h] [bp-20h]@1
  int v12; // [sp+28h] [bp-1Ch]@1
  int v13; // [sp+2Ch] [bp-18h]@1
  int v14; // [sp+30h] [bp-14h]@1
  int v15; // [sp+34h] [bp-10h]@1
  int v16; // [sp+38h] [bp-Ch]@1
  int v17; // [sp+3Ch] [bp-8h]@1
  unsigned int v18; // [sp+40h] [bp-4h]@1

  v18 = (unsigned int)&v2 ^ __security_cookie;
  v10 = -32;
  v11 = -10;
  v12 = 6;
  v13 = 15;
  v14 = 21;
  v15 = 19;
  v16 = 10;
  v17 = -11;
  v2 = -26;
  v3 = -10;
  v4 = 1;
  v5 = 5;
  v6 = 5;
  v7 = 1;
  v8 = -10;
  v9 = -26;
  if ( a1 == 56 || a1 == 63 )
    result = -120;
  else
    result = *(&v10 + (a1 >> 3)) + *(&v2 + (a1 & 7));
  return result;
}
RobboLito's, (static.c):

Code: Select all

static int opening_knight( int qu )
    {
    int T[8] =
        {
        -32, -10, 6, 15, 21, 19, 10, -11
        };

    int C[8] =
        {
        -26, -10, 1, 5, 5, 1, -10, -26
        };

    int tr = RANK(qu), co = FILE(qu);
    return (qu == A8 || qu == H8) ? (-120) : (T[tr] + C[co]);
    }
Houdini's Knight ending static table:

Code: Select all

int __cdecl sub_423BB0(signed int a1)
{
  __int64 v1; // qax@1
  int v3; // [sp+Ch] [bp-64h]@1
  int v4; // [sp+10h] [bp-60h]@1
  int v5; // [sp+14h] [bp-5Ch]@1
  int v6; // [sp+18h] [bp-58h]@1
  int v7; // [sp+1Ch] [bp-54h]@1
  int v8; // [sp+20h] [bp-50h]@1
  int v9; // [sp+24h] [bp-4Ch]@1
  int v10; // [sp+28h] [bp-48h]@1
  int v11; // [sp+2Ch] [bp-44h]@1
  int v12; // [sp+30h] [bp-40h]@1
  int v13; // [sp+34h] [bp-3Ch]@1
  int v14; // [sp+38h] [bp-38h]@1
  int v15; // [sp+3Ch] [bp-34h]@1
  int v16; // [sp+40h] [bp-30h]@1
  int v17; // [sp+44h] [bp-2Ch]@1
  int v18; // [sp+48h] [bp-28h]@1
  int v19; // [sp+4Ch] [bp-24h]@1
  int v20; // [sp+50h] [bp-20h]@1
  int v21; // [sp+54h] [bp-1Ch]@1
  int v22; // [sp+58h] [bp-18h]@1
  int v23; // [sp+5Ch] [bp-14h]@1
  int v24; // [sp+60h] [bp-10h]@1
  int v25; // [sp+64h] [bp-Ch]@1
  int v26; // [sp+68h] [bp-8h]@1
  unsigned int v27; // [sp+6Ch] [bp-4h]@1

  v27 = (unsigned int)&v3 ^ __security_cookie;
  v3 = 2;
  v25 = 2;
  v13 = 2;
  v16 = 2;
  v6 = -1;
  v12 = -1;
  v17 = -1;
  v8 = -4;
  v10 = -10;
  v19 = -10;
  v11 = -4;
  v18 = -4;
  v1 = (a1 & 7) + (a1 >> 3) - 7;
  v14 = 4;
  v15 = 4;
  v7 = -2;
  v21 = -2;
  v4 = 1;
  v5 = 0;
  v9 = -7;
  LODWORD(v1) = *(&v11 + (a1 & 7))
              + *(&v3 + abs((a1 & 7) - (a1 >> 3)))
              + *(&v3 + (HIDWORD(v1) ^ ((a1 & 7) + (a1 >> 3) - 7)) - HIDWORD(v1));
  v20 = -5;
  v22 = 1;
  v23 = 3;
  v24 = 5;
  v26 = -3;
  return *(&v19 + (a1 >> 3)) + v1;
}
RobboLito's, (static.c):

Code: Select all

static int endgame_knight( int qu )
    {
    int V[8] =
        {
        2, 1, 0, -1, -2, -4, -7, -10
        };

    int T[8] =
        {
        -10, -5, -2, 1, 3, 5, 2, -3
        };

    int C[8] =
        {
        -4, -1, 2, 4, 4, 2, -1, -4
        };

    int tr = RANK(qu), co = FILE(qu);
    int d = ABSOLUTE_(co - tr), e = ABSOLUTE_(co + tr - 7);
    return V[d] + V[e] + T[tr] + C[co];
    }
Houdini's Bishop opening static table:

Code: Select all

  int v13; // [sp+30h] [bp-1Ch]@1
  int v14; // [sp+34h] [bp-18h]@1
  int v15; // [sp+38h] [bp-14h]@1
  int v16; // [sp+3Ch] [bp-10h]@1
  int v17; // [sp+40h] [bp-Ch]@1
  int v18; // [sp+44h] [bp-8h]@1
  unsigned int v19; // [sp+48h] [bp-4h]@1

  v19 = (unsigned int)&v3 ^ __security_cookie;
  v7 = -5;
  v11 = -5;
  v12 = 0;
  v13 = 0;
  v14 = 0;
  v15 = 0;
  v16 = 0;
  v17 = 0;
  v18 = 0;
  v1 = (a1 & 7) + (a1 >> 3) - 7;
  v3 = 10;
  v4 = 5;
  v5 = 1;
  v6 = -3;
  v8 = -7;
  v9 = -8;
  v10 = -12;
  return *(&v11 + (a1 >> 3))
       + *(&v3 + abs((a1 & 7) - (a1 >> 3)))
       + *(&v3 + (HIDWORD(v1) ^ ((a1 & 7) + (a1 >> 3) - 7)) - HIDWORD(v1));
}
RobboLito's, (static.c):

Code: Select all

static int opening_bishop( int qu )
    {
    int V[8] =
        {
        10, 5, 1, -3, -5, -7, -8, -12
        };

    int W[8] =
        {
        -5, 0, 0, 0, 0, 0, 0, 0
        };

    int tr = RANK(qu), co = FILE(qu);
    int d = ABSOLUTE_(co - tr), e = ABSOLUTE_(co + tr - 7);
    return V[d] + V[e] + W[tr];
    }
Houdini's Queen opening static table:

Code: Select all

int __cdecl sub_423D70(signed int a1)
{
  __int64 v1; // qax@1
  int v3; // [sp+Ch] [bp-44h]@1
  int v4; // [sp+10h] [bp-40h]@1
  int v5; // [sp+14h] [bp-3Ch]@1
  int v6; // [sp+18h] [bp-38h]@1
  int v7; // [sp+1Ch] [bp-34h]@1
  int v8; // [sp+20h] [bp-30h]@1
  int v9; // [sp+24h] [bp-2Ch]@1
  int v10; // [sp+28h] [bp-28h]@1
  int v11; // [sp+2Ch] [bp-24h]@1
  int v12; // [sp+30h] [bp-20h]@1
  int v13; // [sp+34h] [bp-1Ch]@1
  int v14; // [sp+38h] [bp-18h]@1
  int v15; // [sp+3Ch] [bp-14h]@1
  int v16; // [sp+40h] [bp-10h]@1
  int v17; // [sp+44h] [bp-Ch]@1
  int v18; // [sp+48h] [bp-8h]@1
  unsigned int v19; // [sp+4Ch] [bp-4h]@1

  v19 = (unsigned int)&v3 ^ __security_cookie;
  v7 = -2;
  v11 = -2;
  v18 = -2;
  v4 = 2;
  v14 = 2;
  v15 = 2;
  v5 = 1;
  v13 = 1;
  v16 = 1;
  v1 = (a1 & 7) + (a1 >> 3) - 7;
  v3 = 3;
  v6 = 0;
  v8 = -4;
  v9 = -7;
  v10 = -10;
  LODWORD(v1) = *(&v3 + abs((a1 & 7) - (a1 >> 3))) + *(&v3 + (HIDWORD(v1) ^ ((a1 & 7) + (a1 >> 3) - 7)) - HIDWORD(v1));
  v12 = 0;
  v17 = 0;
  return *(&v11 + (a1 >> 3)) + *(&v11 + (a1 & 7)) - 5 * (a1 >> 3 == 0) + v1;
}
RobboLito's, (static.c):

Code: Select all

static int opening_queen( int qu )
    {
    int V[8] =
        {
        3, 2, 1, 0, -2, -4, -7, -10
        };

    int W[8] =
        {
        -2, 0, 1, 2, 2, 1, 0, -2
        };

    int tr = RANK(qu), co = FILE(qu);
    int d = ABSOLUTE_(co - tr), e = ABSOLUTE_(co + tr - 7);
    return V[d] + V[e] + W[tr] + W[co] - 5 * (tr == T1);
    }
Houdini's Queen ending static table:

Code: Select all

int __cdecl sub_423E40(signed int a1)
{
  __int64 v1; // qax@1
  int v3; // [sp+Ch] [bp-44h]@1
  int v4; // [sp+10h] [bp-40h]@1
  int v5; // [sp+14h] [bp-3Ch]@1
  int v6; // [sp+18h] [bp-38h]@1
  int v7; // [sp+1Ch] [bp-34h]@1
  int v8; // [sp+20h] [bp-30h]@1
  int v9; // [sp+24h] [bp-2Ch]@1
  int v10; // [sp+28h] [bp-28h]@1
  int v11; // [sp+2Ch] [bp-24h]@1
  int v12; // [sp+30h] [bp-20h]@1
  int v13; // [sp+34h] [bp-1Ch]@1
  int v14; // [sp+38h] [bp-18h]@1
  int v15; // [sp+3Ch] [bp-14h]@1
  int v16; // [sp+40h] [bp-10h]@1
  int v17; // [sp+44h] [bp-Ch]@1
  int v18; // [sp+48h] [bp-8h]@1
  unsigned int v19; // [sp+4Ch] [bp-4h]@1

  v19 = (unsigned int)&v3 ^ __security_cookie;
  v4 = 0;
  v12 = 0;
  v17 = 0;
  v14 = 2;
  v15 = 2;
  v3 = 1;
  v13 = 1;
  v16 = 1;
  v1 = (a1 & 7) + (a1 >> 3) - 7;
  v11 = -2;
  v18 = -2;
  v5 = -1;
  v6 = -3;
  v7 = -4;
  v8 = -6;
  v9 = -8;
  v10 = -12;
  return *(&v11 + (a1 >> 3))
       + *(&v11 + (a1 & 7))
       + *(&v3 + abs((a1 & 7) - (a1 >> 3)))
       + *(&v3 + (HIDWORD(v1) ^ ((a1 & 7) + (a1 >> 3) - 7)) - HIDWORD(v1));
}
RobboLito's, (static.c):

Code: Select all

static int endgame_queen( int qu )
    {
    int V[8] =
        {
        1, 0, -1, -3, -4, -6, -8, -12
        };

    int W[8] =
        {
        -2, 0, 1, 2, 2, 1, 0, -2
        };

    int tr = RANK(qu), co = FILE(qu);
    int d = ABSOLUTE_(co - tr), e = ABSOLUTE_(co + tr - 7);
    return V[d] + V[e] + W[tr] + W[co];
    }

Houdini King opening static table:

Code: Select all

int __fastcall sub_423F00(signed int a1)
{
  int v1; // eax@1
  int v3; // [sp+0h] [bp-44h]@1
  int v4; // [sp+4h] [bp-40h]@1
  int v5; // [sp+8h] [bp-3Ch]@1
  int v6; // [sp+Ch] [bp-38h]@1
  int v7; // [sp+10h] [bp-34h]@1
  int v8; // [sp+14h] [bp-30h]@1
  int v9; // [sp+18h] [bp-2Ch]@1
  int v10; // [sp+1Ch] [bp-28h]@1
  int v11; // [sp+20h] [bp-24h]@1
  int v12; // [sp+24h] [bp-20h]@1
  int v13; // [sp+28h] [bp-1Ch]@1
  int v14; // [sp+2Ch] [bp-18h]@1
  int v15; // [sp+30h] [bp-14h]@1
  int v16; // [sp+34h] [bp-10h]@1
  int v17; // [sp+38h] [bp-Ch]@1
  int v18; // [sp+3Ch] [bp-8h]@1
  unsigned int v19; // [sp+40h] [bp-4h]@1

  v19 = (unsigned int)&v3 ^ __security_cookie;
  v14 = -5;
  v6 = -5;
  v7 = -5;
  v3 = 40;
  v4 = 45;
  v5 = 15;
  v8 = 15;
  v9 = 45;
  v10 = 40;
  v1 = *(&v3 + (a1 & 7));
  v11 = 4;
  v12 = 1;
  v13 = -2;
  v15 = -10;
  v16 = -15;
  v17 = -25;
  v18 = -35;
  return *(&v11 + (a1 >> 3)) + v1;
}
RobboLito's, (static.c):

Code: Select all

static int opening_king( int qu )
    {
    int T[8] =
        {
        4, 1, -2, -5, -10, -15, -25, -35
        };

    int C[8] =
        {
        40, 45, 15, -5, -5, 15, 45, 40
        };

    int tr = RANK(qu), co = FILE(qu);
    return T[tr] + C[co];
    }
Houdini's King ending static table:

Code: Select all

int __cdecl sub_423FB0(signed int a1)
{
  __int64 v1; // qax@1
  int v3; // [sp+Ch] [bp-64h]@1
  int v4; // [sp+10h] [bp-60h]@1
  int v5; // [sp+14h] [bp-5Ch]@1
  int v6; // [sp+18h] [bp-58h]@1
  int v7; // [sp+1Ch] [bp-54h]@1
  int v8; // [sp+20h] [bp-50h]@1
  int v9; // [sp+24h] [bp-4Ch]@1
  int v10; // [sp+28h] [bp-48h]@1
  int v11; // [sp+2Ch] [bp-44h]@1
  int v12; // [sp+30h] [bp-40h]@1
  int v13; // [sp+34h] [bp-3Ch]@1
  int v14; // [sp+38h] [bp-38h]@1
  int v15; // [sp+3Ch] [bp-34h]@1
  int v16; // [sp+40h] [bp-30h]@1
  int v17; // [sp+44h] [bp-2Ch]@1
  int v18; // [sp+48h] [bp-28h]@1
  int v19; // [sp+4Ch] [bp-24h]@1
  int v20; // [sp+50h] [bp-20h]@1
  int v21; // [sp+54h] [bp-1Ch]@1
  int v22; // [sp+58h] [bp-18h]@1
  int v23; // [sp+5Ch] [bp-14h]@1
  int v24; // [sp+60h] [bp-10h]@1
  int v25; // [sp+64h] [bp-Ch]@1
  int v26; // [sp+68h] [bp-8h]@1
  unsigned int v27; // [sp+6Ch] [bp-4h]@1

  v27 = (unsigned int)&v3 ^ __security_cookie;
  v6 = -5;
  v20 = -5;
  v4 = 0;
  v21 = 0;
  v25 = 0;
  v12 = 0;
  v17 = 0;
  v22 = 5;
  v24 = 5;
  v10 = -30;
  v19 = -30;
  v14 = 15;
  v15 = 15;
  v23 = 10;
  v13 = 10;
  v16 = 10;
  v1 = (a1 & 7) + (a1 >> 3) - 7;
  v11 = -15;
  v18 = -15;
  v3 = 2;
  v5 = -2;
  v7 = -8;
  v8 = -12;
  v9 = -20;
  LODWORD(v1) = *(&v11 + (a1 & 7))
              + *(&v3 + abs((a1 & 7) - (a1 >> 3)))
              + *(&v3 + (HIDWORD(v1) ^ ((a1 & 7) + (a1 >> 3) - 7)) - HIDWORD(v1));
  v26 = -10;
  return *(&v19 + (a1 >> 3)) + v1;
}
RobboLito's, (static.c):

Code: Select all

static int endgame_king( int qu )
    {
    int V[8] =
        {
        2, 0, -2, -5, -8, -12, -20, -30
        };

    int T[8] =
        {
        -30, -5, 0, 5, 10, 5, 0, -10
        };

    int C[8] =
        {
        -15, 0, 10, 15, 15, 10, 0, -15
        };

    int tr = RANK(qu), co = FILE(qu);
    int d = ABSOLUTE_(co - tr), e = ABSOLUTE_(co + tr - 7);
    return V[d] + V[e] + T[tr] + C[co];
    }
RobboLito's static table Initialization, (static.c):

Code: Select all

void static_initialization()
    {
    int qu;

    for ( qu = A1; qu <= H8; qu++ )
        static_value[count_pawn_white][qu] = absorb(opening_pawn(qu), endgame_pawn(qu));

    for ( qu = A1; qu <= H8; qu++ )
        static_value[count_knight_white][qu] = absorb(opening_knight(qu), endgame_knight(qu));

    for ( qu = A1; qu <= H8; qu++ )
        static_value[count_clear_white][qu] = absorb(opening_bishop(qu), endgame_bishop(qu));

    for ( qu = A1; qu <= H8; qu++ )
        static_value[count_dark_white][qu] = absorb(opening_bishop(qu), endgame_bishop(qu));

    for ( qu = A1; qu <= H8; qu++ )
        static_value[count_rook_white][qu] = absorb(opening_rook(qu), endgame_rook(qu));

    for ( qu = A1; qu <= H8; qu++ )
        static_value[count_queen_white][qu] = absorb(opening_queen(qu), endgame_queen(qu));

    for ( qu = A1; qu <= H8; qu++ )
        static_value[count_king_white][qu] = absorb(opening_king(qu), endgame_king(qu));
    black_white();
    }
Robert Houdart actually stated to the computer chess community that "Houdini does NOT contain any Ippolit code," when in fact Houdini is RobboLito (IPPOLIT) modified. It is time for the community to tell Mr. Houdart, 'you lied to us,' and pressure him to come clean.
PAWN : Knight >> Bishop >> Rook >>Queen

User avatar
kingliveson
Posts: 1388
Joined: Thu Jun 10, 2010 1:22 am
Real Name: Franklin Titus
Location: 28°32'1"N 81°22'33"W

Re: Computer Chess Biggest Liar

Post by kingliveson » Fri Oct 14, 2011 4:59 pm

Jeremy Bernstein wrote:
kingliveson wrote:
Jeremy Bernstein wrote:
thorstenczub wrote:
Jeremy Bernstein wrote: I'm pretty appalled by the new separation of CC-enthusiasts into an dippy majority who just says "who cares, as long as it's strong?" and a bitter, aggravated minority who thinks this is a big deal.

ok lets stone him.
...
:roll:
Eh, no? People should know what they're buying, though, and there's no particular reason why other chess programmers should breathe the same air as Houdart does. Compare Houdart to Norman Schmidt -- Houdart is a genius for adding some tasty, buttery Elo to someone else's code and Schmidt a mere parasite when he does the same?

I can't understand how you can say "liar, thief" to a Vasik Rajlich, to a Norman Schmidt, and not to a Robert Houdart -- why are you defending this?

Jeremy

Funny you should bring up the Norm comparison whom when confronted with trying to sell a modified open-source program, did the honorable thing by refunding the money. I am going to assume Gerd is not aware of the current discussion because if you were to read the profiles of both individuals on http://chessprogramming.wikispaces.com/People, it might leave you scratching your head.
Maybe someone needs to write an Open Letter to get his attention... :D

jb
I think that Gerd ought to take a look at strong and convincing evidence posted on this thread, and update Mr. Houdart's profile to a plagiarizer. Politico, just yesterday fired a reporter, Kendra Marr, who "borrowed from the work of others, without attribution, in ways which we cannot defend and will not tolerate." Robert Houdart saying that he only took ideas is false -- Houdini's base code is RobboLito which he modified.

http://chessprogramming.wikispaces.com is pretty much where we get information these days relating to computer chess, and it should reflect what know as fact.
PAWN : Knight >> Bishop >> Rook >>Queen

Hood
Posts: 200
Joined: Thu Jun 10, 2010 2:36 pm
Real Name: Krzych C.

Re: Computer Chess Biggest Liar

Post by Hood » Fri Oct 14, 2011 5:15 pm

hyatt wrote:He might well not understand your example, so here's one everyone can relate to.

1. Take a book by Matt Reilly. Tear the cover off. White out the title. Give it to someone that reads a lot of fiction. You won't get past chapter one before figuring out who wrote the thing. Reilly has the fastest-pace books I have ever read.

2. Take a book by Clive Cussler. Do the same. Cussler always starts off with some historic "fabrication" that seems irrelevant until 1/2-2/3 of the way thru his story where it suddenly becomes a critical linchpin that makes the "great escape" possible.

3. The same is true for many other authors. Once you have read several books by a given author, you can read other books and pick out his in several ways. The cast of characters. The way the story line is developed. The way the characters speak/act.

This is just as true of a programmer. Programming languages offer a rich set of choices in how to express an algorithm. So rich that two students won't write the same basic algorithm (say a sort) in the same way. Much less a chess program or a big part of a chess program. The way a person programs is almost as unique as their finger print or retinal scan or DNA.

To think two different programmers (Vas and Fabien) would write so much code that is EXACTLY the same is simply a ridiculous idea in the first place. And the last place. And anywhere in between.

And there is other side as always. :-)

There are software companies were certain way of programming is an obligation. Your code is checked by a boss and a team if it is fullfiling the standards and everyone do not have problems with understanding and modifying your code.
The reason is obvious...
Smolensk 2010. Murder or accident... Cui bono ?

There are not bugs free programms. There are programms with undiscovered bugs.
Alleluia.

User avatar
Uly
Posts: 838
Joined: Thu Jun 10, 2010 5:33 am

Re: Computer Chess Biggest Liar

Post by Uly » Fri Oct 14, 2011 5:38 pm

hyatt wrote: You won't get past chapter one before figuring out who wrote the thing.
What if you only figure it out 5 years later?

hyatt
Posts: 1242
Joined: Thu Jun 10, 2010 2:13 am
Real Name: Bob Hyatt (Robert M. Hyatt)
Location: University of Alabama at Birmingham
Contact:

Re: Computer Chess Biggest Liar

Post by hyatt » Fri Oct 14, 2011 6:11 pm

Uly wrote:
hyatt wrote: You won't get past chapter one before figuring out who wrote the thing.
What if you only figure it out 5 years later?
Would it matter? Copyright law considers that. The infringed party can demand any profits generated by the infringing work...

I know of one court case (1963 civil rights church bombing in Birmingham) that was taken to court and won 40+ years after the act. Sometimes it takes time. Sometimes not.

Jeremy Bernstein
Site Admin
Posts: 1226
Joined: Wed Jun 09, 2010 7:49 am
Real Name: Jeremy Bernstein
Location: Berlin, Germany
Contact:

Re: Computer Chess Biggest Liar

Post by Jeremy Bernstein » Fri Oct 14, 2011 6:18 pm

kingliveson wrote:I think that Gerd ought to take a look at strong and convincing evidence posted on this thread, and update Mr. Houdart's profile to a plagiarizer. Politico, just yesterday fired a reporter, Kendra Marr, who "borrowed from the work of others, without attribution, in ways which we cannot defend and will not tolerate." Robert Houdart saying that he only took ideas is false -- Houdini's base code is RobboLito which he modified.

http://chessprogramming.wikispaces.com is pretty much where we get information these days relating to computer chess, and it should reflect what know as fact.
He has a link to this thread, I'm not sure if he's had a chance to look at it yet.

Jeremy

Jeremy Bernstein
Site Admin
Posts: 1226
Joined: Wed Jun 09, 2010 7:49 am
Real Name: Jeremy Bernstein
Location: Berlin, Germany
Contact:

Re: Computer Chess Biggest Liar

Post by Jeremy Bernstein » Fri Oct 14, 2011 6:21 pm

Hood wrote:
hyatt wrote:He might well not understand your example, so here's one everyone can relate to.

1. Take a book by Matt Reilly. Tear the cover off. White out the title. Give it to someone that reads a lot of fiction. You won't get past chapter one before figuring out who wrote the thing. Reilly has the fastest-pace books I have ever read.

2. Take a book by Clive Cussler. Do the same. Cussler always starts off with some historic "fabrication" that seems irrelevant until 1/2-2/3 of the way thru his story where it suddenly becomes a critical linchpin that makes the "great escape" possible.

3. The same is true for many other authors. Once you have read several books by a given author, you can read other books and pick out his in several ways. The cast of characters. The way the story line is developed. The way the characters speak/act.

This is just as true of a programmer. Programming languages offer a rich set of choices in how to express an algorithm. So rich that two students won't write the same basic algorithm (say a sort) in the same way. Much less a chess program or a big part of a chess program. The way a person programs is almost as unique as their finger print or retinal scan or DNA.

To think two different programmers (Vas and Fabien) would write so much code that is EXACTLY the same is simply a ridiculous idea in the first place. And the last place. And anywhere in between.

And there is other side as always. :-)

There are software companies were certain way of programming is an obligation. Your code is checked by a boss and a team if it is fullfiling the standards and everyone do not have problems with understanding and modifying your code.
The reason is obvious...
Coding standards (with which I also have some professional experience) cannot erase the "fingerprint" we're talking about, any more than a style guide causes every journalist to write the same.

Jeremy

Jeremy Bernstein
Site Admin
Posts: 1226
Joined: Wed Jun 09, 2010 7:49 am
Real Name: Jeremy Bernstein
Location: Berlin, Germany
Contact:

Re: Computer Chess Biggest Liar

Post by Jeremy Bernstein » Fri Oct 14, 2011 6:23 pm

Uly wrote:
hyatt wrote: You won't get past chapter one before figuring out who wrote the thing.
What if you only figure it out 5 years later?
"...but he got away with it for soooo long! Doesn't that count for something?" -- do you really take that argument seriously?

hyatt
Posts: 1242
Joined: Thu Jun 10, 2010 2:13 am
Real Name: Bob Hyatt (Robert M. Hyatt)
Location: University of Alabama at Birmingham
Contact:

Re: Computer Chess Biggest Liar

Post by hyatt » Fri Oct 14, 2011 6:57 pm

Jeremy Bernstein wrote:
Uly wrote:
hyatt wrote: You won't get past chapter one before figuring out who wrote the thing.
What if you only figure it out 5 years later?
"...but he got away with it for soooo long! Doesn't that count for something?" -- do you really take that argument seriously?

We occasionally see a case where someone committed a major crime. Even murder. They disappear for 25 years, become "model citizens" where they live, then get caught and off to prison they go. Sad, because they seem to have gotten their life back on the right path, but still, they did the crime... I'm sympathetic in that case. But for Vas? Hardly. Why? Have you seen ANY evidence that he has turned himself around? Admitted his wrongdoing? Tried to explain why he did it? Just continual denials and false statements. Hard to have much sympathy there...

Post Reply