lib/string-utils.rkt
#lang racket

(provide (contract-out 
          [string-fill (->* (string? char? (and/c positive? integer?)) (#:direction symbol?) string?)]
          ))

(define (string-fill str char len #:direction [direction 'left])
  (let* ([str-len (string-length str)]
         [distance (- len str-len)])

    (if (> distance 0)
        (with-output-to-string 
          (lambda ()
            
            (when (eq? direction 'right)
              (printf str))

            (let ([count 0])
              (letrec ([recur
                        (lambda ()
                          (set! count (add1 count))

                          (when (<= count distance)
                            (printf "~a" char)
                            (recur)))])
                (recur)))

            (when (eq? direction 'left)
              (printf str))))
        str)))