challenge テキスト行の正規化

改行文字を複数個含むテキストデータを格納する文字列を
最大長の行を除く各行末に指定したパディング文字を適切な数だけ追加して、
すべての行が最大長の行と同じ長さに揃う文字列に変換する
手続あるいは関数を書いてください。

元の文字列の最後は改行です。
行の長さはその行に含まれる(行末の改行を除く)文字の数です。

変換前の文字列例
"○○○○\n○○○○○○○\n\n○○○○○\n"

上の文字列例をパディング文字'☆'を指定して変換した文字列
"○○○○☆☆☆\n○○○○○○○\n☆☆☆☆☆☆☆\n○○○○○☆☆\n"

必須ではありませんが、
テキストデータをトラバースする回数を減らす工夫をすると面白いかもしれません。

Posted feedbacks - Common Lisp

なんのひねりも無いのですが、とりあえず…
(pad "○○○○
○○○○○○○

○○○○○
" #\☆)
;=> "○○○○☆☆☆
○○○○○○○
☆☆☆☆☆☆☆
○○○○○☆☆
"
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
(defun pad (string &optional (padchar #\Space))
  (with-output-to-string (out)
    (with-input-from-string (in string)
      (loop :for line := (read-line in nil) :while line
            :maximize (length line) :into maxlen
            :collect line :into lines
            :finally (dolist (line lines)
                       (let ((base (make-string maxlen 
                                                :initial-element padchar)))
                         (format out "~A~%" (replace base line))))))))

Index

Feed

Other

Link

Pathtraq

loading...