Fizzbuzz

提供:GizmoLabs - だいたい CAD LISP なサイト
2012年7月19日 (木) 23:15時点におけるGizmon (トーク | 投稿記録)による版
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

fizzbuzz 問題を AutoLISP でやってみる

fizzbuzz 問題

  • 1から順に1づつ増やした数字を表示する
  • 3で割り切れる時は "fizz" を表示
  • 5で割り切れる時は "buzz" を表示
  • 3と5の両方で割り切れる時は "fizz buzz" を表示
  • (但し、プログラムの中に剰余関数を使わない事)

最後の剰余関数使わない事っていうのはあったりなかったりするみたいです。 で、使わない方法で素直めに書いてみたのが下のやつ。

(defun fizzbuzz (/ ct ct3 ct5)
	(setq ct 1  ct3 3  ct5 5)
	(while 
	  (princ (strcat "\n" 
		(cond 
		  ((= ct ct3 ct5) (progn (setq ct3 (+ 3 ct3) ct5 (+ 5 ct5)) '"fizz buzz"))
		  ((= ct ct3) (progn (setq ct3 (+ 3 ct3)) '"fizz"))
		  ((= ct ct5) (progn (setq ct5 (+ 5 ct5)) '"buzz"))
		  (T (itoa ct)) )))
	  (setq ct (1+ ct)))
)
; カウントし続けて止まらないので esc で止めてね
  • xで割り切れる = xの倍数だよね?
  • xとxで割り切れる+カウントアップ = 同じ数字だよね?

ってことで足し算使いましたよw