2^i * 3^j * 5^k なる整数
Posted feedbacks - Emacs Lisp
#7671のExcelの解が面白かったので、GNU Emacsに移植してみました。ネタ実装です。
できるだけプログラミング言語というよりエディターのマクロって感じの書きかたを目指しました。カラムの表現は面倒なのでS式にしちゃいましたが。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | (defun hamming (num)
(interactive (list (read-minibuffer "Number: " "100")))
(let ((n 1) (c 0))
(switch-to-buffer "*Hamming*")
(erase-buffer)
(insert "(nil 0 0 0)")
(beginning-of-buffer)
(while (< c num)
(unless (eolp)
(save-excursion
(let ((s (read (current-buffer))))
(setq c (1+ c))
(backward-kill-sexp)
(prin1 (cons n (cdr s)) (current-buffer))
(mapc (lambda (i)
(hamming::goto-line-force (* n i))
(if (eolp)
(prin1 (cons nil
(mapcar (lambda (j)
(+ (nth (/ (1+ j) 2) s)
(if (= i j) 1 0) ))
'(2 3 5) ))
(current-buffer) )))
'(2 3 5) ))))
(setq n (1+ n))
(forward-line) ))
(setq outline-regexp "([0-9]")
(outline-mode)
(hide-body) )
(defun hamming::goto-line-force (n)
(let ((r (goto-line n)))
(unless (bolp) (insert ?\n))
(while (< 0 r)
(insert ?\n)
(setq r (1- r) ))))
|

leque
#7554()
Rating1/3=0.33
2^i * 3^j * 5^k の形で表される整数を小さい方から順に 100 個列挙するプログラムを書いてください。 i, j, k は 0 以上の整数です。アルゴリズムのオーダーについても考えてみてください。
例えば最初の 10 個は次のようになります:
※解答では i, j, k の各値を示す必要はありません。
[ reply ]