Last active
October 14, 2016 01:15
-
-
Save fogus/8bad1f6ac285977d48aa10e38ebd06fc to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#{[:africa/east :africa/south] | |
[:africa/east :africa/west] | |
[:africa/east :asia/west] | |
[:africa/east :europe/south] | |
[:africa/south :africa/east] | |
[:africa/south :africa/west] | |
[:africa/south :australia/west] | |
[:africa/south :south-america/east] | |
[:africa/south :south-america/south] | |
[:africa/west :africa/east] | |
[:africa/west :africa/south] | |
[:africa/west :europe/west] | |
[:africa/west :north-america/south] | |
[:africa/west :south-america/east] | |
[:asia/east :asia/north] | |
[:asia/east :asia/west] | |
[:asia/east :australia/east] | |
[:asia/east :australia/north] | |
[:asia/east :south-america/west] | |
[:asia/north :asia/east] | |
[:asia/north :asia/west] | |
[:asia/north :europe/east] | |
[:asia/north :north-america/east] | |
[:asia/north :north-america/west] | |
[:asia/west :africa/east] | |
[:asia/west :asia/east] | |
[:asia/west :asia/north] | |
[:asia/west :australia/north] | |
[:asia/west :europe/south] | |
[:australia/east :asia/east] | |
[:australia/east :australia/north] | |
[:australia/east :australia/west] | |
[:australia/east :north-america/south] | |
[:australia/east :south-america/south] | |
[:australia/north :asia/east] | |
[:australia/north :asia/west] | |
[:australia/north :australia/east] | |
[:australia/north :australia/west] | |
[:australia/north :europe/south] | |
[:australia/west :africa/south] | |
[:australia/west :australia/east] | |
[:australia/west :australia/north] | |
[:australia/west :south-america/south] | |
[:europe/east :asia/north] | |
[:europe/east :europe/south] | |
[:europe/east :europe/west] | |
[:europe/east :north-america/east] | |
[:europe/east :north-america/south] | |
[:europe/south :africa/east] | |
[:europe/south :asia/west] | |
[:europe/south :australia/north] | |
[:europe/south :europe/east] | |
[:europe/south :europe/west] | |
[:europe/west :africa/west] | |
[:europe/west :europe/east] | |
[:europe/west :europe/south] | |
[:europe/west :north-america/east] | |
[:europe/west :south-america/east] | |
[:north-america/east :asia/north] | |
[:north-america/east :europe/east] | |
[:north-america/east :europe/west] | |
[:north-america/east :north-america/south] | |
[:north-america/east :north-america/west] | |
[:north-america/south :africa/west] | |
[:north-america/south :australia/east] | |
[:north-america/south :europe/east] | |
[:north-america/south :north-america/east] | |
[:north-america/south :north-america/west] | |
[:north-america/south :south-america/west] | |
[:north-america/west :asia/north] | |
[:north-america/west :north-america/east] | |
[:north-america/west :north-america/south] | |
[:north-america/west :south-america/west] | |
[:south-america/east :africa/south] | |
[:south-america/east :africa/west] | |
[:south-america/east :europe/west] | |
[:south-america/east :south-america/south] | |
[:south-america/east :south-america/west] | |
[:south-america/south :africa/south] | |
[:south-america/south :australia/east] | |
[:south-america/south :australia/west] | |
[:south-america/south :south-america/east] | |
[:south-america/south :south-america/west] | |
[:south-america/west :asia/east] | |
[:south-america/west :north-america/south] | |
[:south-america/west :north-america/west] | |
[:south-america/west :south-america/east] | |
[:south-america/west :south-america/south]} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns ww5.core | |
(:require [datomic.api :as d])) | |
(def groups {:north-america #{:north-america/south :north-america/west :north-america/east} | |
:south-america #{:south-america/south :south-america/west :south-america/east} | |
:europe #{:europe/west :europe/east :europe/south} | |
:africa #{:africa/west :africa/east :africa/south} | |
:asia #{:asia/west :asia/east :asia/north} | |
:australia #{:australia/west :australia/east :australia/north}}) | |
(def map-seed | |
[ | |
[:north-america/south :south-america/west] | |
[:north-america/south :australia/east] | |
[:north-america/south :europe/east] | |
[:north-america/south :africa/west] | |
[:north-america/west :asia/north] | |
[:north-america/west :south-america/west] | |
[:north-america/east :asia/north] | |
[:north-america/east :europe/east] | |
[:north-america/east :europe/west] | |
[:south-america/south :australia/east] | |
[:south-america/south :africa/south] | |
[:south-america/south :australia/west] | |
[:south-america/west :asia/east] | |
[:south-america/east :europe/west] | |
[:south-america/east :africa/west] | |
[:south-america/east :africa/south] | |
[:europe/south :africa/east] | |
[:europe/south :asia/west] | |
[:europe/south :australia/north] | |
[:europe/east :asia/north] | |
[:europe/west :africa/west] | |
[:africa/south :australia/west] | |
[:africa/east :europe/south] | |
[:africa/east :asia/west] | |
[:asia/west :australia/north] | |
[:asia/east :australia/east] | |
[:asia/east :australia/north] | |
]) | |
(defn ^:private infer-group-connections [from groups] | |
(let [group-name (keyword (namespace from)) | |
adjacents (remove #(= % from) (get groups group-name))] | |
(map vec (partition 2 (interleave (repeat from) adjacents))))) | |
(defn expand-connections | |
"Takes a seed map (with all one-way links) and a | |
group definition and returns a fully expanded | |
map." | |
[seed groups] | |
(reduce (fn [acc pair] | |
(let [[start end] pair] | |
(-> acc | |
(conj [end start]) | |
(conj [start end]) | |
(into (infer-group-connections start groups)) | |
(into (infer-group-connections end groups))))) | |
(sorted-set) | |
seed)) | |
(def uri "datomic:mem://ww5") | |
(d/create-database uri) | |
(def conn (d/connect uri)) | |
(def schema [{:db/id #db/id[:db.part/db -1] | |
:db/ident :map/group | |
:db/valueType :db.type/ref | |
:db/cardinality :db.cardinality/one | |
:db/doc "" | |
:db.install/_attribute :db.part/db} | |
{:db/id #db/id[:db.part/db -2] | |
:db/ident :map/region | |
:db/valueType :db.type/ref | |
:db/cardinality :db.cardinality/one | |
:db/doc "" | |
:db.install/_attribute :db.part/db} | |
{:db/id #db/id[:db.part/db -3] | |
:db/ident :region/connections | |
:db/valueType :db.type/ref | |
:db/cardinality :db.cardinality/many | |
:db/doc "" | |
:db.install/_attribute :db.part/db} | |
{:db/id #db/id[:db.part/db -4] | |
:db/ident :group/components | |
:db/valueType :db.type/ref | |
:db/cardinality :db.cardinality/many | |
:db/doc "" | |
:db.install/_attribute :db.part/db}]) | |
(defn ^:private datomify-groups [graph] | |
(for [key (keys graph)] | |
(let [tid (d/tempid :db.part/user)] | |
[tid :map/group key]))) | |
(comment | |
(-> map-seed | |
(expand-connections groups) | |
) | |
clojure.java.io/writer | |
(datomify-groups groups) | |
) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment