fork(1) download
  1. IS_CAPTURE_POSSIBLE=
  2. ->b{l={}
  3. r=p
  4. b.split(?/).map{|s|c={}
  5. i=0
  6. s.chars.map{|x|n=x.to_i;c[i]=x;i+=n<1?1:n;x==?P&&r||=l[i-2]==?p||l[i]==?p}
  7. l=c}
  8. r}
  9.  
  10.  
  11. require 'minitest/autorun'
  12.  
  13. describe :IS_CAPTURE_POSSIBLE do
  14. it('recognizes when capture is possible') do
  15. assert IS_CAPTURE_POSSIBLE['8/7p/6P1/8/8/8/8/8']
  16. assert IS_CAPTURE_POSSIBLE['8/8/p7/1P6/3P3p/8/8/8']
  17. assert IS_CAPTURE_POSSIBLE['8/2P5/8/4P1p1/2p2P2/3p4/3p1P2/8']
  18. assert IS_CAPTURE_POSSIBLE['8/P7/8/5P2/2pp4/3P2p1/3pP3/8']
  19. assert IS_CAPTURE_POSSIBLE['8/P7/p7/p1P1P3/1P3p2/8/1p6/8']
  20. assert IS_CAPTURE_POSSIBLE['8/4p1P1/2P2P1P/2p1pPpp/8/6P1/pP1p4/8']
  21. end
  22.  
  23. it('recognizes when capture is impossible') do
  24. refute IS_CAPTURE_POSSIBLE['8/8/8/8/8/8/8/8']
  25. refute IS_CAPTURE_POSSIBLE['8/7P/6p1/8/8/8/8/8']
  26. refute IS_CAPTURE_POSSIBLE['8/7p/7P/8/8/8/8/8']
  27. refute IS_CAPTURE_POSSIBLE['8/pppppppp/8/8/8/8/PPPPPPPP/8']
  28. refute IS_CAPTURE_POSSIBLE['8/p7/8/1p6/5P2/8/8/8']
  29. refute IS_CAPTURE_POSSIBLE['8/p7/P7/2P1p1p1/2p5/8/PP6/8']
  30. end
  31. end
Success #stdin #stdout 0.1s 10792KB
stdin
Standard input is empty
stdout
Run options: --seed 63149

# Running tests:

..

Finished tests in 0.001528s, 1309.0050 tests/s, 7854.0302 assertions/s.

2 tests, 12 assertions, 0 failures, 0 errors, 0 skips