Advertisement
waf9000

Untitled

Apr 5th, 2018
288
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Racket 2.72 KB | None | 0 0
  1. #lang racket
  2.  
  3. (require debug)
  4. (define stdout (current-output-port))
  5. (define ((appls f) l) (apply f l))
  6. (define (char+ . args)
  7.   (integer->char (apply + (map (λ(x)
  8.                                  (cond
  9.                                    [(char? x) (char->integer x)]
  10.                                    [(integer? x) x])) args))))
  11. (define (char- . args)
  12.   (integer->char (apply - (map (λ(x)
  13.                                  (cond
  14.                                    [(char? x) (char->integer x)]
  15.                                    [(integer? x) x])) args))))
  16.  
  17. (define (print-stars brd ls)
  18.   (begin
  19.     (printf "\n\u3000~a\n"
  20.             (string-join (map (λ(i) (string (char+ #\uff21 i))) (range 8))
  21.                          "\u3000" #:before-first "\u3000" #:after-last "\u3000"))
  22.     (printf "\u3000┏~a┓\n" (string-join
  23.                             (build-list 8 (λ(x) (if (member `(,x 0) ls) "┳" "━"))) "┳"))
  24.     (for {[row brd]
  25.           [y (in-naturals)]}
  26.       (printf "~a" (char- #\uFF18 y))
  27.       (for {[cell row]
  28.             [x (in-naturals)]}
  29.         (match (list (member? `(,x,y) ls) (member? `(,(- x 1),y) ls))
  30.           ['(#t #t)
  31.            (printf "╋~a" cell)]
  32.           ['(#t #f)
  33.            (printf "┣~a" cell)]
  34.           ['(#f #t)
  35.            (printf "┫~a" cell)]
  36.           [else
  37.            (printf "┃~a" cell)]))
  38.       (if (member `(7,y) ls)
  39.           (printf "┫~a\n\u3000" (char- #\uFF18 y))
  40.           (printf "┃~a\n\u3000" (char- #\uFF18 y)))
  41.       (if (< y 7)
  42.           (printf "┣~a┫\n" (string-join (build-list
  43.                                          8 (λ(x)
  44.                                              (match (list(member? `(,x,y) ls)(member?`(,x,(+ y 1)) ls))
  45.                                                ['(#t #t) "╋"]
  46.                                                ['(#t #f) "┻"]
  47.                                                ['(#f #t) "┳"]
  48.                                                [else "━"]))) "╋"))
  49.           (printf "┗~a┛\n" (string-join
  50.                             (build-list 8 (λ(x) (if (member `(,x,y) ls) "┻" "━"))) "┻"))))
  51.     (printf "\u3000~a\n\n"
  52.             (string-join (map (λ(i) (string (char+ #\uff21 i))) (range 8)) "\u3000"
  53.                          #:before-first "\u3000" #:after-last "\u3000"))))
  54.  
  55. (struct posn (x y))
  56. (define mk-posn
  57.   (case-lambda
  58.     [(ls) (posn (car ls) (cadr ls))]
  59.     [(x y) (posn x y)]))
  60.  
  61. (struct board (cells)
  62.   #:methods gen:custom-write
  63.   [(define write-proc
  64.      (λ(brd port mode)
  65.        (parameterize {[current-output-port port]}
  66.          (print-stars (board-cells brd) '()))))])
  67.  
  68. (define (empty-piece pos)
  69.   (match-define (posn x y) pos)
  70.   (if (= 0 (modulo (- x y) 2)) #\space #\_))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement