Advertisement
nullzero

Untitled

Aug 21st, 2017
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Racket 1.33 KB | None | 0 0
  1. #lang racket
  2.  
  3. (define (add-level level content tree)
  4.   (cond
  5.     [(zero? level) (cons (list content) tree)]
  6.     [else (cons (add-level (sub1 level) content (first tree))
  7.                 (rest tree))]))
  8.  
  9. (define (flip-all tree)
  10.   (cond
  11.     [(list? tree) (map flip-all (reverse tree))]
  12.     [else tree]))
  13.  
  14. (define (compute)
  15.   (let iter ([tree empty])
  16.     (match (read-line)
  17.       [(== eof) (flip-all tree)]
  18.       [(pregexp #px"(\\**) (.*)" (list _ star content))
  19.        (iter (add-level (sub1 (string-length star)) content tree))])))
  20.  
  21. (module+ test
  22.   (require rackunit)
  23.   (parameterize
  24.       ([current-input-port
  25.         (open-input-string
  26.          (string-append
  27.           "* ความสามารถพิเศษ\n* รายวิชา\n** GAT\n** PAT1\n** PAT2\n"
  28.           "** อื่น ๆ\n*** ไม่บอก\n*** บอกแล้ว\n** PAT50\n* จํานวนรับ"))])
  29.     (check-equal? (compute)
  30.                   '(("ความสามารถพิเศษ")
  31.                     ("รายวิชา" ("GAT")
  32.                                ("PAT1")
  33.                                ("PAT2")
  34.                                ("อื่น ๆ" ("ไม่บอก") ("บอกแล้ว"))
  35.                                ("PAT50"))
  36.                     ("จํานวนรับ")))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement