이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
이승중
가입: 2010년 6월 22일 올린 글: 561
|
올려짐: 2011년10월5일 10:22 주제: 숙제 3: maze-check에 필요한 함수와 maze-pp |
|
|
미로 검증에 필요한 함수 can-enter, same-room?, empty-set, add-element, is-member? is-subset? 함수를 제공해 드립니다.
절대로 이 함수들의 내부구현을 사용해서 maze-check를 작성하지 마시기 바랍니다.
채점시에는 같은 이름의 내부구조를 다르게 구현한 함수들로 테스트할 것입니다.
코드: | (define (can-enter room maze)
(list-ref (cdr maze) room))
(define same-room? equal?)
(define empty-set ())
(define add-element cons)
(define (is-member? room roomset)
(cond ((null? roomset) #f)
((equal? room (car roomset)) #t)
(else (is-member? room (cdr roomset)))))
(define (is-subset? rs1 rs2)
(cond ((null? rs1) #t)
((is-member? (car rs1) rs2) (is-subset? (cdr rs1) rs2))
(else #f)))
(define maze1
(cons 4
'((1 4) (0 5) (3 6) (2 7)
(0 5 8) (1 4) (2) (3)
(4 12) (10 13) (9 11 14) (10)
(8 13) (9 12) (10 15) (14))))
(define room1 0)
(define room2 15)
(define room3 7)
(define (maze-check maze start end) ...)
(maze-check maze1 room1 room2)
(maze-check maze1 room2 room3) |
이승중 가 2011년10월12일 9:38에 수정함, 총 3 번 수정됨 |
|
위로 |
|
|
이승중
가입: 2010년 6월 22일 올린 글: 561
|
올려짐: 2011년10월5일 10:26 주제: |
|
|
1번과 마찬가지로 maze-pp 함수와 init-maze, open-n, open-s, open-se, open-sw, open-ne, open-nw 를 제공해드립니다.
maze.ps 파일을 만드는 방식이며 만들어진 파일은
윈도우/리눅스에서는 ghostview로 볼 수 있고, 맥에서는 pdf로 변환시킬 수 있습니다.
https://ropas.snu.ac.kr/phpbb/viewtopic.php?t=2307
코드: | ; maze (example)
; Jin
(define (init-maze n m)
(define (make-list elem cnt)
(if (= cnt 0)
()
(cons elem (make-list elem (- cnt 1)))))
(cons (cons n m) (make-list (make-list (make-list #f 6) m) n)))
(define (change-list3 x y z lst elem)
(define (change-list2 x y lst elem)
(define (change-list1 x lst elem)
(if (= x 0)
(cons elem (cdr lst))
(cons (car lst) (change-list1 (- x 1) (cdr lst) elem))))
(if (= x 0)
(cons (change-list1 y (car lst) elem) (cdr lst))
(cons (car lst) (change-list2 (- x 1) y (cdr lst) elem))))
(if (= x 0)
(cons (change-list2 y z (car lst) elem) (cdr lst))
(cons (car lst) (change-list3 (- x 1) y z (cdr lst) elem))))
(define (open x y z maze)
(define n (caar maze))
(define m (cdar maze))
(define lst (cdr maze))
(if (and (<= 0 x) (< x n) (<= 0 y) (< y m) (<= 0 z) (< z 6))
(cons (cons n m) (change-list3 x y z lst #t))
maze))
(define (open-n x y maze) (open x (- y 1) 3 (open x y 0 maze)))
(define (open-s x y maze) (open x (+ y 1) 0 (open x y 3 maze)))
(define (open-ne x y maze)
(if (odd? x)
(open (+ x 1) (- y 1) 4 (open x y 1 maze))
(open (+ x 1) y 4 (open x y 1 maze))))
(define (open-nw x y maze)
(if (odd? x)
(open (- x 1) (- y 1) 2 (open x y 5 maze))
(open (- x 1) y 2 (open x y 5 maze))))
(define (open-se x y maze)
(if (odd? x)
(open (+ x 1) y 5 (open x y 2 maze))
(open (+ x 1) (+ y 1) 5 (open x y 2 maze))))
(define (all2 n m)
(define (all n)
(if (= n 0)
()
(cons (- n 1) (all (- n 1)))))
(define (product l1 l2)
(if (null? l1)
()
(append (map (lambda (x) (cons (car l1) x)) l2) (product (cdr l1) l2))))
(product (all n) (all m)))
(define (open-sw x y maze)
(if (odd? x)
(open (- x 1) y 1 (open x y 4 maze))
(open (- x 1) (+ y 1) 1 (open x y 4 maze))))
(define (maze-pp maze)
(define n (caar maze))
(define m (cdar maze))
(define lst (cdr maze))
(define file (open-output-file "maze.ps" 'replace))
(define (draw co)
(define x (car co))
(define y (cdr co))
(define elem (list-ref (list-ref lst x) y))
(define (draw-line x y x1 y1 x2 y2)
(define X (* 2.4 x))
(define Y (- (* 2.8 y) (* (modulo x 2) 1.4)))
(begin (display (+ X x1) file) (display " " file) (display (+ Y y1) file) (display " moveto " file)
(display (+ X x2) file) (display " " file) (display (+ Y y2) file) (display " lineto\n" file)))
(begin
(if (list-ref elem 0) (void) (draw-line x y 1 0 2.4 0))
(if (list-ref elem 1) (void) (draw-line x y 2.4 0 3.4 1.4))
(if (list-ref elem 2) (void) (draw-line x y 3.4 1.4 2.4 2.8))
(if (list-ref elem 3) (void) (draw-line x y 2.4 2.8 1 2.8))
(if (list-ref elem 4) (void) (draw-line x y 1 2.8 0 1.4))
(if (list-ref elem 5) (void) (draw-line x y 0 1.4 1 0))
))
(begin
(display "%!PS\n" file)
(display "%%Creator: Jin Yung Kim\n" file)
(display "[7 0 0 -7 20 700] concat\n" file)
(display "0.05 setlinewidth\n" file)
(for-each draw (all2 n m))
(display "stroke\n" file)
(close-output-port file)
(void)
))
(maze-pp (init-maze 33 33)) |
이승중 가 2011년10월5일 10:41에 수정함, 총 1 번 수정됨 |
|
위로 |
|
|
이승중
가입: 2010년 6월 22일 올린 글: 561
|
올려짐: 2011년10월5일 10:38 주제: 좌표계 정의 |
|
|
육각 미로에서 좌표계는 가로가 x좌표 세로가 y좌표로
오른쪽으로, 아래로 내려갈 수록 좌표가 커집니다.
따라서 nxm의 미로에서
왼쪽위의 좌표는 (0,0)이고, 가장 오른쪽 아래의 좌표는 (n-1, m-1)입니다.
|
|
위로 |
|
|
김상우
가입: 2011년 9월 10일 올린 글: 50
|
올려짐: 2011년10월5일 14:39 주제: 저 그림대로면.. |
|
|
저 그림대로면 e w ... 등등의 방향은 어디인가요? |
|
위로 |
|
|
이승중
가입: 2010년 6월 22일 올린 글: 561
|
|
위로 |
|
|
|