home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 116.lha / SmallTalk / Sources / QUEEN.ST < prev    next >
Text File  |  1986-11-20  |  1KB  |  66 lines

  1. Class Queen Object #row #column #neighbor
  2. Method Queen
  3.     setColumn: aNumber neighbor: aQueen
  4.         column <- aNumber.
  5.         neighbor <- aQueen
  6.  
  7. |
  8. Method Queen
  9.     checkRow: testRow column: testColumn | columnDifference |
  10.         columnDifference <- testColumn - column.
  11.         (((row = testRow) or: 
  12.             [ row + columnDifference = testRow]) or:
  13.             [ row - columnDifference = testRow])
  14.                 ifTrue: [ ^ true ].
  15.         (neighbor notNil)
  16.             ifTrue: [ ^ neighbor checkRow: testRow 
  17.                     column: testColumn ]
  18.             ifFalse: [ ^ false ]
  19.  
  20. |
  21. Method Queen
  22.     first
  23.         (neighbor notNil)
  24.             ifTrue: [ neighbor first ].
  25.         row <- 1.
  26.         ^ self testPosition
  27.  
  28. |
  29. Method Queen
  30.     next
  31.         (row = 8)
  32.             ifTrue: [ ((neighbor isNil) or: [neighbor next isNil])
  33.                 ifTrue: [ ^ nil ].
  34.                 row <- 0 ].
  35.         row <- row + 1.
  36.         ^ self testPosition
  37.  
  38. |
  39. Method Queen
  40.     testPosition
  41.         (neighbor isNil) ifTrue: [ ^ self ].
  42.         (neighbor checkRow: row column: column)
  43.             ifTrue: [ ^ self next ]
  44.             ifFalse: [ ^ self ]
  45.  
  46. |
  47. Method Queen
  48.     result
  49.         ^ ((neighbor isNil)
  50.             ifTrue: [ List new ]
  51.             ifFalse: [ neighbor result ] )
  52.                 addLast: row
  53.  
  54. |
  55. Method Test
  56.     queen        | lastQueen |
  57.         lastQueen <- nil.
  58.         (1 to: 8) do: [:i | lastQueen <- Queen new;
  59.                     setColumn: i neighbor: lastQueen ].
  60.         lastQueen first.
  61.         (lastQueen result asArray = #(1 5 8 6 3 7 2 4) )
  62.             ifTrue: ['8 queens test passed' print]
  63.             ifFalse: [smalltalk error: '8queen test failed']
  64.  
  65. |
  66.