Add tasks for all the new languages
This commit is contained in:
parent
9dc3c2bb62
commit
bba7bfd280
13208 changed files with 134745 additions and 0 deletions
26
Task/Topological-sort/EchoLisp/topological-sort-1.echolisp
Normal file
26
Task/Topological-sort/EchoLisp/topological-sort-1.echolisp
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
(define dependencies
|
||||
'((des_system_lib std synopsys std_cell_lib des_system_lib dw02 dw01 ramlib ieee)
|
||||
(dw01 ieee dw01 dware gtech) ;; bad graph add dw04
|
||||
(dw02 ieee dw02 dware )
|
||||
(dw03 std synopsys dware dw03 dw02 dw01 ieee gtech)
|
||||
(dw04 dw04 ieee dw01 dware gtech)
|
||||
(dw05 dw05 ieee dware)
|
||||
(dw06 dw06 ieee dware)
|
||||
(dw07 ieee dware)
|
||||
(dware ieee dware)
|
||||
(gtech ieee gtech)
|
||||
(ramlib std ieee )
|
||||
(std_cell_lib ieee std_cell_lib)
|
||||
(synopsys )))
|
||||
|
||||
|
||||
;; build dependency graph
|
||||
;; a depends on b
|
||||
;; add arc (arrow) a --> b
|
||||
(lib 'graph.lib)
|
||||
(define (a->b g a b)
|
||||
(unless (equal? a b)
|
||||
(graph-make-arc g (graph-make-vertex g a) (graph-make-vertex g b))))
|
||||
|
||||
(define (add-dependencies g dep-list)
|
||||
(for* ((dep dep-list) (b (rest dep))) (a->b g b (first dep))))
|
||||
31
Task/Topological-sort/EchoLisp/topological-sort-2.echolisp
Normal file
31
Task/Topological-sort/EchoLisp/topological-sort-2.echolisp
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
;; topological sort
|
||||
;;
|
||||
;; Complexity O (# of vertices + # of edges)
|
||||
|
||||
(define (t-sort g)
|
||||
(stack 'Z) ; vertices of d°(0)
|
||||
(stack 'S) ; ordered result
|
||||
|
||||
;; mark all vertices with their in-degree = # of incoming arcs
|
||||
;; push all vertices u such as d°(u) = 0
|
||||
(for ((u g)) (mark u (graph-vertex-indegree g u))
|
||||
(when (zero? (mark? u)) (push 'Z u)))
|
||||
|
||||
;pop a d°(0) vertex u - add it to result
|
||||
;decrement in-degree of all v vertices u->v
|
||||
; if d°(v) = 0, push it
|
||||
|
||||
(while (not (stack-empty? 'Z))
|
||||
(let (( u (pop 'Z)))
|
||||
(push 'S u)
|
||||
(for ((v (graph-vertex-out g u)))
|
||||
(mark v (1- (mark? v)))
|
||||
(when (zero? (mark? v)) (push 'Z v)))))
|
||||
|
||||
;; finish
|
||||
(writeln 't-sort (map vertex-label (stack->list 'S)))
|
||||
|
||||
;; check no one remaining
|
||||
(for ((u g))
|
||||
(unless (zero? (mark? u))
|
||||
(error " ♻️ t-sort:cyclic" (map vertex-label (graph-cycle g))))))
|
||||
13
Task/Topological-sort/EchoLisp/topological-sort-3.echolisp
Normal file
13
Task/Topological-sort/EchoLisp/topological-sort-3.echolisp
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
(define g (make-graph "VHDL"))
|
||||
(add-dependencies g dependencies)
|
||||
(graph-print g)
|
||||
|
||||
(t-sort g)
|
||||
→ t-sort (std synopsys ieee dware dw02 dw05 dw06 dw07 gtech dw01 dw03 dw04 ramlib
|
||||
std_cell_lib des_system_lib)
|
||||
|
||||
;; Error case
|
||||
;; add dw01 -> dw04
|
||||
(t-sort g)
|
||||
t-sort (std synopsys ieee dware dw02 dw05 dw06 dw07 gtech ramlib std_cell_lib)
|
||||
⛔️ error: ♻️ t-sort:cyclic (dw04 dw01)
|
||||
Loading…
Add table
Add a link
Reference in a new issue