Skip to content

Instantly share code, notes, and snippets.

@kosugi
Created May 26, 2012 18:14
Show Gist options
  • Select an option

  • Save kosugi/2794820 to your computer and use it in GitHub Desktop.

Select an option

Save kosugi/2794820 to your computer and use it in GitHub Desktop.
(use srfi-1)
(define (deal n s)
(let* ((size-s (string-size s))
(max-xs (- size-s (remainder size-s n)))
(xs (take (string->list s) max-xs))
(ys (make-vector n '())))
(let loop ((m 0) (xs xs))
(if (null? xs)
(map (lambda (xs) (list->string (reverse xs))) (vector->list ys))
(begin
(vector-set! ys m (cons (car xs) (vector-ref ys m)))
(loop (remainder (+ 1 m) n) (cdr xs)))))))
(use gauche.test)
(test "" '["111" "222" "333"] (lambda () (deal 3 "123123123")))
(test "" '["12" "23" "31" "12"] (lambda () (deal 4 "123123123")))
(test "" '["000" "111" "222" "333" "444" "555"] (lambda () (deal 6 "012345012345012345")))
(test "" '["123" "123" "123" "123"] (lambda () (deal 4 "111122223333")))
(test "" '["012345012345012345"] (lambda () (deal 1 "012345012345012345")))
(test "" '["" "" "" "" "" ""] (lambda () (deal 6 "01234")))
(test "" '["" ""] (lambda () (deal 2 "")))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment