fork download
  1.  
  2. def parse_line(line_str)
  3. line = {}
  4. i = 0
  5. line_str.chars.each do |c|
  6. case c
  7. when '1'..'8'
  8. i += c.to_i
  9. else
  10. line[i] = c
  11. i += 1
  12. end
  13. end
  14.  
  15. line
  16. end
  17.  
  18. def is_capture_possible(board)
  19. last_line = {}
  20.  
  21. board.split('/').each do |line_str|
  22. line = parse_line line_str
  23.  
  24. return true if (0..8).any?{ |i| last_line[i] == 'p' && (line[i-1] == 'P' || line[i+1] == 'P') }
  25.  
  26. last_line = line
  27. end
  28.  
  29. false
  30. end
  31.  
  32.  
  33.  
  34. require 'minitest/autorun'
  35.  
  36. describe :parse_line do
  37. it('parses empty lines') { parse_line('8').must_equal({}) }
  38.  
  39. it('recognizes pawns at correct indices') do
  40. parse_line('7p').must_equal({ 7 => 'p' })
  41. parse_line('2p2P2').must_equal({ 2 => 'p', 5 => 'P' })
  42. parse_line('pP1p4').must_equal({ 0 => 'p', 1 => 'P', 3 => 'p' })
  43. end
  44. end
  45.  
  46. describe :is_capture_possible do
  47. it('recognizes when capture is possible') do
  48. assert is_capture_possible('8/7p/6P1/8/8/8/8/8')
  49. assert is_capture_possible('8/8/p7/1P6/3P3p/8/8/8')
  50. assert is_capture_possible('8/2P5/8/4P1p1/2p2P2/3p4/3p1P2/8')
  51. assert is_capture_possible('8/P7/8/5P2/2pp4/3P2p1/3pP3/8')
  52. assert is_capture_possible('8/P7/p7/p1P1P3/1P3p2/8/1p6/8')
  53. assert is_capture_possible('8/4p1P1/2P2P1P/2p1pPpp/8/6P1/pP1p4/8')
  54. end
  55.  
  56. it('recognizes when capture is impossible') do
  57. refute is_capture_possible('8/8/8/8/8/8/8/8')
  58. refute is_capture_possible('8/7P/6p1/8/8/8/8/8')
  59. refute is_capture_possible('8/7p/7P/8/8/8/8/8')
  60. refute is_capture_possible('8/pppppppp/8/8/8/8/PPPPPPPP/8')
  61. refute is_capture_possible('8/p7/8/1p6/5P2/8/8/8')
  62. refute is_capture_possible('8/p7/P7/2P1p1p1/2p5/8/PP6/8')
  63. end
  64. end
Success #stdin #stdout 0.09s 10704KB
stdin
Standard input is empty
stdout
Run options: --seed 16375

# Running tests:

....

Finished tests in 0.002302s, 1737.7327 tests/s, 6950.9308 assertions/s.

4 tests, 16 assertions, 0 failures, 0 errors, 0 skips