J2EE之巔

           

          2012年10月15日

          The Clojure Program To solve N Queens Problem (Without back tracing)

          Not like the previous solution here http://www.aygfsteel.com/chaocai/archive/2012/08/05/384844.html
          The following solution not using the back tracing way is more concise and readable, but for the searching space becomes huger, the performance is much worser then the previous one.

          (ns SICP.unit3)
          (defn conflictInCol? [s col]
            (some #(= col %) s)
          )

          (defn conflictInDia? [s col]
            (let [dia (count s)
                  n1 (fn [c
          ] (Math/abs (- dia (.indexOf s c))))
                  n2 (fn [c] (Math/abs (- col c)))]
              (some #(= (n1 %) (n2 %)) s)
            )
          )

          (defn safe? [s col] 
            (not (or (conflictInCol? s col) (conflictInDia? s col)))
          )
            
          (defn next-level-queens [solutions-for-prev-level board-size current-level]
            (let [solutions (atom [])]
              (doseq [s solutions-for-prev-level]
                (doseq [col (range 0 board-size)]
                  (if (safe? s col)
                    (reset! solutions (cons (conj s col) @solutions))
               
                  )
                 )
             
              )
             
                (if (< current-level (dec board-size))
                  (recur @solutions board-size (inc current-level))
                  (count @solutions)
                )
             )
          )

          (defn queens [board-size]
            (next-level-queens  (apply vector (map #(vector %) (range 0 board-size))) board-size 1)
          )

          Chao Cai (蔡超)
          Sr. SDE
          Amazon


           

          posted @ 2012-11-26 12:21 超越巔峰 閱讀(2843) | 評論 (0)編輯 收藏

          Clojure XPath

          The functions to support using XPath in Clojure.

          Source Code

           1 ;The code was implemented by caichao@amazon.com
           2 ;You could use the code anyway, but should keep the comments
           3 ;Created 2012.10
           4 (ns clojure.ccsoft.xml
           5   (:require [clojure.xml :as xml]))
           6  
           7 (import '(java.io StringReader)
           8         '(java.io ByteArrayInputStream))
           9  
          10 (defn xml-structure [xml-txt] 
          11    [ (xml/parse (-> xml-txt
          12               (.getBytes)
          13               (ByteArrayInputStream.)
          14      )
          15     )]
          16 )
          17  
          18 (defn node [tag xmlStruct]
          19  
          20   (first (filter #(= (:tag %) tag) (:content xmlStruct)))
          21 )
          22  
          23 (defn node [path xml-txt]
          24    (loop [path path 
          25           xml-content (xml-structure xml-txt) 
          26           ]
          27       (let [current-tag (first path) current-elem (first xml-content)]
          28         (if (= (:tag current-elem ) current-tag)
          29  
          30           (if (= (count path) 1)
          31             current-elem 
          32             (recur  (rest path) (:content current-elem ))
          33           )
          34           (if (> (count  xml-content) 1)
          35            (recur path  (rest xml-content))
          36           )
          37         )
          38      )
          39     )
          40  )

          How to Use

          (def cmd-example "<command>
                             <header>
                               
          <type>script</type>
                               
          <transaction_id>12345</transaction_id>
                             
          </header>
                             
          <body>
                                println 
          3+4;
                             
          </body>
                            
          </command>")
           
           
          (node [:command :header :transaction_id] cmd
          -example)


          posted @ 2012-10-15 10:15 超越巔峰 閱讀(2876) | 評論 (0)編輯 收藏

          導航

          統計

          常用鏈接

          留言簿(12)

          隨筆分類(54)

          隨筆檔案(59)

          文章分類(2)

          文章檔案(1)

          相冊

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 邵阳县| 通河县| 德保县| 剑河县| 南江县| 赤城县| 拜城县| 闽侯县| 社旗县| 罗平县| 丰都县| 台江县| 洪湖市| 东山县| 清徐县| 汽车| 永德县| 蓬安县| 萝北县| 黄龙县| 石棉县| 旺苍县| 仙居县| 靖宇县| 加查县| 东宁县| 新兴县| 永济市| 蒙城县| 巴南区| 昌江| 滁州市| 玉林市| 腾冲县| 城步| 凌云县| 新龙县| 高州市| 射洪县| 禹城市| 伊川县|