Advertisement
Guest User

Magic square

a guest
Nov 22nd, 2014
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 1.39 KB | None | 0 0
  1. #lang racket
  2.  
  3. ; reduce
  4. ( define ( reduce op start-value l )
  5.    ( cond
  6.       ( ( null? l ) start-value )
  7.       ( else ( op ( car l ) ( reduce op start-value ( cdr l ) ) ) )
  8.     )
  9.  )
  10. ; nth
  11. (define (nth index list)
  12. (cond
  13. ((= index 0) (car list))
  14. (else (nth (- index 1) (cdr list)))))
  15.  
  16. ; 2)
  17. ( define ( row index M )
  18.    ( nth index M )
  19.  )
  20.  
  21. ; 3)
  22. ( define ( column index M )
  23.    (map (lambda (row) ( nth index row )) M)
  24.  )
  25.  
  26. ; 4)
  27. ( define ( diagonal M )
  28.    ( map ( lambda (index row) ( nth index row ) ) (range 0 (- (length (car M )) 0) ) M ) ; something is broken when -1 ; same sh*t with car
  29.  )
  30.  
  31. ( define ( secondary M )
  32.    ( diagonal (transpose M ) )
  33. )
  34.  
  35. ; 5)
  36. ( define (transpose M)
  37.    ( map ( lambda (index) (column index M) ) (range 0 (- (length M) 0) ) ) ; something is broken when -1
  38.  )
  39.  
  40. ( define ( sum-list row )
  41.    ( reduce + 0 row )
  42.  )
  43.  
  44. ( define ( all? pred? l )
  45.   ( reduce ( lambda ( x y ) ( and x y ) ) #t ( map pred? l ) )
  46.  )
  47.  
  48. ( define ( same? items )
  49.   (all? (lambda(x)( equal? (car items) x) ) (cdr items))
  50. )
  51.  
  52. ( define ( sum-rows M )
  53.    ( map ( lambda (x) ( sum-list x ) ) M )
  54.  )
  55.  
  56. ( define ( sum-diags M )
  57.     ( list ( sum-list ( diagonal M ) ) ( sum-list ( secondary M ) ) )
  58.  )
  59.  
  60. ( define ( sum-cols M )
  61.    ( sum-rows ( transpose M ) )
  62.  )
  63.  
  64. ( define ( magic-square? M )
  65.    ( and ( same? ( sum-rows M ) ) ( same? ( sum-cols M ) ) ( same? ( sum-diags M ) ) )
  66.  )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement