ファイル内の重複行削除(後優先)
Posted feedbacks - Common Lisp
素朴に最初に思い付いたままな感じで…。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | (defpackage #:doukaku-66 (:use #:cl #:pg))
(in-package #:doukaku-66)
(defun no-dup (file &optional (output t))
(with-open-file (input file :direction :input)
(flet ((rl () (read-line input nil 'eof)))
(do ((line (rl) (rl))
result)
((eql 'eof line)
(mapc (lambda (l) (format output "~&~A~%" l))
(delete nil (nreverse result))))
(aif (member line result :test #'string=)
(setf (car it) nil))
(push line result)))))
|
簡潔さ最優先で書きました。
1 2 | (loop for s = (read-line nil nil) while s collect s into lines
finally (mapc #'write-line (delete-duplicates lines :test #'string=)))
|


raynstard
#3422()
Rating1/1=1.00
入力されたテキストデータから重複する行をとりのぞいて、その結果を標準出力へ出力するプログラムを作成してください。
重複行の排除については、以下の仕様を満たしてください。
#4.はおまけですがある/なしで作りが変わってくると思われるので追加しました。
この問題はraynstardさんにご投稿いただきました。ご協力ありがとうございます。 ところで、素朴な実装のしかたをするとメモリ容量の数倍のサイズのすべての行が異なっているファイルを読ませたときに大変なことが起こりそうな気がしますが、そういうシビアなお題設定ではないので素朴に解いてしまって構いません。シビアなのは続編にしたいと思います。
[ reply ]