# A chess engine written in nim For now, that's about it. # Installation First, install [mimalloc](https://github.com/microsoft/mimalloc), because Nim's default allocator is fast but also borked beyond repair with threads, and malloc is slow as fuck. Use your distro's package manager to do this. THEN Just run `nimble install` # Testing Just run `nimble test`: sit back, relax, get yourself a cup of coffee and wait for it to finish :) # General info Estimated elo: ~2100 ## Feature list ### Search - [X] Null move pruning - [X] Late move reductions - [X] Quiescent search - [ ] Aspiration windows - [ ] Futility pruning - [ ] Late move pruning - [X] Move reordering - [X] Alpha-beta pruning - [X] Check extensions - [X] QSEE pruning - [X] Reverse futility pruning - [X] Principal variation search - [X] Iterative deepening - [X] Transposition table - [X] Cutoffs - [X] Move ordering - [X] MVV-LVA - [X] Static exchange evaluation - [X] History heuristic - [X] History gravity - [ ] History malus - [ ] History aging - [X] Killer heuristic - [X] Null-window search - [ ] Capture history - [ ] Continuation history - [X] Parallel search (lazy SMP) - [X] Pondering - [ ] Counter moves ### Eval - [X] Piece-square tables - [X] Tempo - [ ] King safety - [ ] Pawn shield - [ ] Mobility - [ ] Minor piece outpost - [ ] Bishop pair - [ ] Rook/Queen on (semi-)open file - [ ] Major piece on 7th rank - [ ] Pawn structure - [ ] Isolated pawns - [ ] Weak pawns - [ ] Strong pawns - [ ] Doubled pawns - [ ] Passed pawns - [ ] Frozen pawns (blocked by an enemy pawn)