[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bfree-prj 49] Example of frtm



浪花です.

B-Free のページからリンクを張っていただいたおかげで frtm の Web ペー
ジのアクセスが急増しておりますが,アーカイブを持っていかれる方は少
ないですね (^^;).ディレクトリだけが表示されるというのも不親切だろ
うということで,件の URL でドキュメントが表示されるようにしておき
ました.

また,frtm でこんなこともできるという例題のつもりで N Queens を解
くプログラムを作りました.N x N の盤上にチェスの Queen を N 個お互
いに取られないように置くというパズルです.

: N 2 * 3 + ;
: disp dup N ndup 0 for 
    dup N ndup 0 for over I = 
      if (Q ) echo else (. ) echo endif 
    loop cr drop drop 
  loop drop ;
: copy 1+ dup 1 for dup ndup swap loop drop ;
: check over 0 for 
    3 ndup 6 ndup = if drop 0 else 
        3 ndup 6 ndup - abs 3 ndup 6 ndup - = if drop 0 else 1 = endif 
    endif
    5 nrot 5 nrot drop drop 
  loop rotr drop drop ;
: nq dup N ndup 0 for 
    I over 1+ dup N 1- copy 1 check if 
      dup N ndup over 1+ = if 
        dup N copy disp cr 
        else nq endif 
    endif
  drop drop loop ;
: queens dup 0 for I 0 nq drop drop loop drop ;

4 queens

で 4 x 4 の場合の全ての解が表示されます.標準の設定で 10 x 10 まで
は解けるのを確認しました.

なお frtm-bf の現在のバージョンは 1.1.3 です.

---
(putprop '浪花 智英
    'affiliation  '(山口大学大学院 理工学研究科 環境共生工学専攻)
    'e-mail	  '(naniwa@mechgw.mech.yamaguchi-u.ac.jp)
    'URL  '(http://scserv.mech.yamaguchi-u.ac.jp/staff/naniwa.html))