Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (ns query1 ;;ns is namespace
- (:gen-class)
- (:require [clojure.java.io :as io]
- [clojure.string :as string]
- ))
- (defn reader []
- (io/reader "data/ca.csv"))
- (defn parse-record [line]
- (let [y line
- [city lat long country iso2 admin capital pop poppropper]
- (string/split y #",")]
- (into {} [[:city city]
- [:lat (read-string lat)]
- [:long (read-string long)]
- [:country country]
- [:iso2 iso2]
- [:admin admin]
- [:capital capital]
- [:pop (read-string pop)]
- [:popproper poppropper]]
- )
- ))
- (defn cities []
- (with-open [rdr (reader)]
- (vec
- (for [line (drop 1 (line-seq rdr))]
- (parse-record line)))))
- (defn city ([name var]
- (->> var
- (filter #(= (:city %) name))
- first))
- ([name] (city name (cities))))
- (println " ")
- (println "City Toronto Hash Map")
- (print (city "Toronto"))
- (println " ")
- (defn distance [record1 record2]
- (let [R 6371
- dlat (Math/toRadians (- (:lat record2) (:lat record1)))
- dlon (Math/toRadians (- (:lat record2) (:lat record1)))
- var1 (Math/toRadians (:lat record1))
- var2 (Math/toRadians (:lat record2))
- a (+ (* (Math/sin (/ dlat 2)) (Math/sin (/ dlat 2))) (* (Math/sin (/ dlon 2)) (Math/sin (/ dlon 2)) (Math/cos var1) (Math/cos var2)))]
- (* R 2 (Math/asin (Math/sqrt a)))))
- (defn large [city-record]
- (let [newVec (:pop city-record)]
- (> newVec 0.5E6)))
- (println " ")
- (println "Large?")
- (println (large (city "Toronto")))
- (println " ")
- ; check if the two cities are no more than 600 km apart
- (defn close [c1 c2]
- (let [dist (distance c1 c2)]
- (< dist 600))
- )
- (println " ")
- (println "Are Toronto and La Ronge Close?")
- (println(close (city "Toronto") (city "La Ronge")))
- (println " ")
- ; find distinct pairs of city names of *large* cities
- ; that are close.
- (defn closest-city-pairs []
- (let [y ((cities) vec)
- :when (large y)]
- (for [a (butlast y)
- b (rest y)
- :when (and (not= a b)
- (close a b))]
- [(:city a) (:city b) (distance a b)])))
- (println " ")
- (println "List of closest city pairs")
- (print (closest-city-pairs))
- (println " ")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement