さて、ひきつづき、問題Bです。
こちらも、乱暴な事ができるLispの出番です。
(defun convert-to-zero-filled-str (num len) (format nil "~v,'0,,D" len num)) (defun next-num (num len) (let* ((num-str (convert-to-zero-filled-str num len)) (max-num (parse-integer (sort num-str #'> :key #'char-code))) (mix-num (parse-integer (sort num-str #'< :key #'char-code)))) (- max-num mix-num))) (defun find-min-i (num len) (labels ((%find-min-i (num len i acc) (if (member num acc) (let ((j (position num (reverse acc)))) `(,j ,num ,(- i j))) (%find-min-i (next-num num len) len (1+ i) (cons num acc))))) (%find-min-i num len 0 ()))) (defun main () (loop for a0 = (read) for L = (read) until (and (zerop a0) (zerop L)) do (format t "~{~A~^ ~}~%" (find-min-i a0 L))))
うん、こんな感じですかね。formatの制御文字がおもしろいのはいつもどおりですかね。