summaryrefslogtreecommitdiffstats
path: root/189.lua
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2009-05-13 23:32:40 -0500
committerJesse Luehrs <doy@tozt.net>2009-05-13 23:32:40 -0500
commit7e7b56db42ceb8d2b8973eae678fa4b58d5d3659 (patch)
tree7a5cb816809d632e30227c1e39485ed63b500e80 /189.lua
downloadprojecteuler-7e7b56db42ceb8d2b8973eae678fa4b58d5d3659.tar.gz
projecteuler-7e7b56db42ceb8d2b8973eae678fa4b58d5d3659.zip
add old solutions
Diffstat (limited to '189.lua')
-rw-r--r--189.lua27
1 files changed, 27 insertions, 0 deletions
diff --git a/189.lua b/189.lua
new file mode 100644
index 0000000..a4ae546
--- /dev/null
+++ b/189.lua
@@ -0,0 +1,27 @@
+local triangle_graph = {
+}
+
+--[[
+http://en.wikipedia.org/wiki/Graph_coloring#Computing_the_chromatic_polynomial
+]]
+function chromatic_polynomial(g, t)
+ local edge_start
+ for v1, edges in ipairs(g) do
+ for v2index, v2 in ipairs(edges) do
+ if v1 == v2 then return 0 end
+ if not edge_start then edge_start = v1 end
+ end
+ end
+
+ if edge_start == nil then return t^#g end
+
+ local edge_end = table.remove(g[edge_start])
+ local edge_removed = chromatic_polynomial(g, t)
+ table.insert(g[edge_start], edge_end)
+
+ -- need to contract the edge here
+ local edge_contracted = chromatic_polynomial(g, t)
+ -- and then fix it back up
+
+ return edge_removed - edge_contracted
+end