Comment detail
文字列の均等分割 (Nested Flatten)だいたいこんな処理になってます。
divid-1: 分割すべき位置を近似的に見つける
"ゆめよりもはかなき世のなかを...", 4
->
("ゆめよりもはかなき世のなかを..." "をなげきわびつゝあかしくらす..."
"すほどに四月十よひにもなりぬ..." "ぬれば木のしたくらがりもてゆく"
"ゆく")
divid-2: 末尾が空になるまでひとつずつずらす
("ゆめよりも..." "をなげきわ..." "すほどに四..." "ぬれば木の..." "ゆく")
-> ("ゆめよりも..." "なげきわ..." "ほどに四..." "れば木の..." "く")
-> ("ゆめよりも..." "なげきわ..." "どに四..." "ば木の..." "")
divid: 重複部分を削る
("ゆめよりもはかなき世のなかをなげき..." "なげきわびつゝあかしくらすほどに四..."
"どに四月十よひにもなりぬれば木のし..." "ば木のしたくらがりもてゆく" "")
->
("ゆめよりもはかなき世のなかを" "なげきわびつゝあかしくらすほ"
"どに四月十よひにもなりぬれ" "ば木のしたくらがりもてゆく")





kozima
#4231()
[
Common Lisp
]
Rating0/0=0.00
行数以外は数値を使ってません。 もっとよく考えればきれいに書けるかも。
(defun divid-1 (string n) (loop with list = (coerce string 'list) with list2 = (nthcdr n list) for slow on list for fast = list2 then (or (nthcdr n fast) list2) if (eq list2 fast) collect slow)) (defun divid-2 (string n) (loop with list = (divid-1 string n) with last = (last list) for sublist on (cdr list) while (car last) do (mapl (lambda (l) (pop (car l))) sublist) finally (return (mapcar #'ldiff list (cdr list))))) (defun divid (string n) (mapcar (lambda (l) (format nil "~{~C~}" l)) (divid-2 string n)))Rating0/0=0.00-0+
1 reply [ reply ]