게시판 인덱스

 
 FAQFAQ   검색검색   멤버리스트멤버리스트   사용자 그룹사용자 그룹   사용자 등록하기사용자 등록하기 
 개인 정보개인 정보   비공개 메시지를 확인하려면 로그인하십시오비공개 메시지를 확인하려면 로그인하십시오   로그인로그인 

숙제3-3 미로를 그려보기 위한 샘플코드 (3-2 도움코드 추가)

 
글 쓰기   답변 달기     게시판 인덱스 -> 4190.210 Principles of Programming (Fall 2012)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
강동옥



가입: 2009년 9월 18일
올린 글: 602

올리기올려짐: 2012년9월22일 10:21    주제: 숙제3-3 미로를 그려보기 위한 샘플코드 (3-2 도움코드 추가) 인용과 함께 답변

숙제3-3에서
maze-pp는 아마 mazeGen을 구현하시는데 쓸모가 없을 것입니다.
하지만 여러분이 미로를 봐가면서 코딩할 수 있도록 인터페이스에 대한 샘플코드를 제공해드립니다.

채점시에는 속 구현을 다르게 해서 채점하니 이 함수들의 속구현을 이용하지 마시기 바랍니다.

maze-pp 함수를 실행시키면 프로그램 코드와 같은 디렉토리에 maze.ps라는 파일로 미로를 출력해 줍니다. 이 ps 형식의 파일은 맥에서는 바로 pdf로 변환해 주고, 윈도의 경우 적절한 ps-pdf변환기나 Ghostview 등을 설치하시면 pdf 형식으로 보실 수 있습니다.

ghostview
http://pages.cs.wisc.edu/~ghost/gsview/get50.htm
ghostview를 쓰기 위한 ghostscript
http://sourceforge.net/projects/ghostscript/files/GPL%20Ghostscript/9.02/

주의하실 것은, maze.ps라는 파일이 이미 존재하면 에러가 납니다. 파일 이름은 maze-pp 함수 안에서 여러분들이 바꾸실 수 있으니, 적당히 바꾸어 가며 실행시켜 보시기 바랍니다.
혹시 에러가 나지 않고 바로 덮어쓸수 있게 하시고 싶으시다면
코드:
(define file (open-output-file "maze.ps"))


코드:
(define file (open-output-file "maze.ps" 'replace))

로 바꾸십시요

크기는 33 by 33 정도까지면 적당히 짤리지 않고 출력될 것입니다. 채점할 때에도 이 크기를 벗어나는 데이터는 넣지 않겠습니다.

http://ropas.snu.ac.kr/~ta/4190.210/12/docs/hw/maze.scm

코드:

; 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))
코드:


강동옥 가 2012년10월8일 13:41에 수정함, 총 2 번 수정됨
위로
사용자 정보 보기 비밀 메시지 보내기
조동철



가입: 2011년 9월 6일
올린 글: 35

올리기올려짐: 2012년9월22일 13:35    주제: 구현에 대한 질문 인용과 함께 답변

제공되는 함수들의 속구현이 달라져도

코드:
(maze-pp (init-maze n m))


의 결과 (미로 그림)은 같은가요? (한개의 가로줄에 n개의 방, 총 m개의 줄)

3-3 과제를 하다보니 미로의 좌표들은 서로 약속되어 있어야 될거 같은데,

이 역시 속구현에 따라 달라지는 것인지 궁급합니다.

예를 들어, 현재 제시된 함수에서는

(3,2)방의 NE위치의 방은 (4,1)방인데,

다른 속구현을 가진 maze함수를 사용해도 이 사실은 안 바뀌는 것인지 알고 싶습니다.


조동철 가 2012년9월24일 18:48에 수정함, 총 1 번 수정됨
위로
사용자 정보 보기 비밀 메시지 보내기
강동옥



가입: 2009년 9월 18일
올린 글: 602

올리기올려짐: 2012년9월22일 15:15    주제: 인용과 함께 답변

네, 그림대로 하도록 하겠습니다.

왼쪽위의 좌표는 (0,0)이고, 가장 오른쪽 아래의 좌표는 (n-1, m-1)입니다.

위로
사용자 정보 보기 비밀 메시지 보내기
강동옥



가입: 2009년 9월 18일
올린 글: 602

올리기올려짐: 2012년9월24일 17:44    주제: 숙제3-2 샘플코드 인용과 함께 답변

미로의 핵심에서 헤매지 않도록 검증용도의 샘플코드를 제공합니다.
다만 채점할때는 구현을 바꾸니 주의하세요

코드:
(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)
위로
사용자 정보 보기 비밀 메시지 보내기
서석준



가입: 2012년 9월 13일
올린 글: 59

올리기올려짐: 2012년9월24일 23:50    주제: 조교님께서 주신 코드로 3-2를 시험했을때 인용과 함께 답변

#t
#f
가 나오면 올바른 결과인가요?
위로
사용자 정보 보기 비밀 메시지 보내기
강동옥



가입: 2009년 9월 18일
올린 글: 602

올리기올려짐: 2012년9월25일 10:22    주제: 인용과 함께 답변

네 맞습니다.
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
글 쓰기   답변 달기     게시판 인덱스 -> 4190.210 Principles of Programming (Fall 2012) 시간대: GMT + 9 시간(한국)
페이지 11

 
건너뛰기:  
새로운 주제를 올릴 수 없습니다
답글을 올릴 수 없습니다
주제를 수정할 수 없습니다
올린 글을 삭제할 수 없습니다
투표를 할 수 없습니다


Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group
Translated by kss & drssay