Initial commit
This commit is contained in:
commit
f242d2b0df
420 changed files with 62521 additions and 0 deletions
35
2018/day07/day07.ss
Normal file
35
2018/day07/day07.ss
Normal file
|
@ -0,0 +1,35 @@
|
|||
(import :gerbil/gambit/ports)
|
||||
(import :std/iter)
|
||||
(import :std/pregexp)
|
||||
(import :std/srfi/1)
|
||||
(import :std/sort)
|
||||
|
||||
(export main)
|
||||
|
||||
(def (no-incoming? edges m)
|
||||
(not (member m (map cadr edges))))
|
||||
|
||||
(def (find-no-incoming edges)
|
||||
(sort
|
||||
(filter (lambda (m) (no-incoming? edges m)) (delete-duplicates (apply append edges)))
|
||||
char<?))
|
||||
|
||||
(def (topological-sort edges)
|
||||
(def (aux edges l s)
|
||||
(match s
|
||||
([] l)
|
||||
([n . rest] (let* ((new-edges (filter (lambda (e) (not (eq? n (car e)))) edges))
|
||||
(additional-s (map cadr (filter (lambda (e)
|
||||
(and (eq? n (car e)) (no-incoming? new-edges (cadr e))))
|
||||
edges)))
|
||||
(new-s (sort (delete-duplicates (append rest additional-s)) char<?)))
|
||||
(aux new-edges (cons n l) new-s)))))
|
||||
(reverse (aux edges [] (find-no-incoming edges))))
|
||||
|
||||
(def (main . args)
|
||||
(def edges
|
||||
(map (lambda (e)
|
||||
(map (lambda (s) (car (string->list s)))
|
||||
(cdr (pregexp-match "Step (.) must be finished before step (.) can begin." e))))
|
||||
(call-with-input-file "input.txt" (lambda (p) (read-all p read-line)))))
|
||||
(displayln (list->string (topological-sort edges))))
|
101
2018/day07/input.txt
Normal file
101
2018/day07/input.txt
Normal file
|
@ -0,0 +1,101 @@
|
|||
Step C must be finished before step P can begin.
|
||||
Step V must be finished before step Q can begin.
|
||||
Step T must be finished before step X can begin.
|
||||
Step B must be finished before step U can begin.
|
||||
Step Z must be finished before step O can begin.
|
||||
Step P must be finished before step I can begin.
|
||||
Step D must be finished before step G can begin.
|
||||
Step A must be finished before step Y can begin.
|
||||
Step R must be finished before step O can begin.
|
||||
Step J must be finished before step E can begin.
|
||||
Step N must be finished before step S can begin.
|
||||
Step X must be finished before step H can begin.
|
||||
Step F must be finished before step L can begin.
|
||||
Step S must be finished before step I can begin.
|
||||
Step W must be finished before step Q can begin.
|
||||
Step H must be finished before step K can begin.
|
||||
Step K must be finished before step Q can begin.
|
||||
Step E must be finished before step L can begin.
|
||||
Step Q must be finished before step O can begin.
|
||||
Step U must be finished before step G can begin.
|
||||
Step L must be finished before step O can begin.
|
||||
Step Y must be finished before step G can begin.
|
||||
Step G must be finished before step I can begin.
|
||||
Step M must be finished before step I can begin.
|
||||
Step I must be finished before step O can begin.
|
||||
Step A must be finished before step N can begin.
|
||||
Step H must be finished before step O can begin.
|
||||
Step T must be finished before step O can begin.
|
||||
Step H must be finished before step U can begin.
|
||||
Step A must be finished before step I can begin.
|
||||
Step B must be finished before step R can begin.
|
||||
Step V must be finished before step T can begin.
|
||||
Step H must be finished before step M can begin.
|
||||
Step C must be finished before step A can begin.
|
||||
Step B must be finished before step G can begin.
|
||||
Step L must be finished before step Y can begin.
|
||||
Step T must be finished before step J can begin.
|
||||
Step A must be finished before step R can begin.
|
||||
Step X must be finished before step L can begin.
|
||||
Step B must be finished before step L can begin.
|
||||
Step A must be finished before step F can begin.
|
||||
Step K must be finished before step O can begin.
|
||||
Step W must be finished before step M can begin.
|
||||
Step Z must be finished before step N can begin.
|
||||
Step Z must be finished before step S can begin.
|
||||
Step R must be finished before step K can begin.
|
||||
Step Q must be finished before step L can begin.
|
||||
Step G must be finished before step O can begin.
|
||||
Step F must be finished before step Y can begin.
|
||||
Step V must be finished before step H can begin.
|
||||
Step E must be finished before step I can begin.
|
||||
Step W must be finished before step Y can begin.
|
||||
Step U must be finished before step I can begin.
|
||||
Step F must be finished before step K can begin.
|
||||
Step M must be finished before step O can begin.
|
||||
Step Z must be finished before step H can begin.
|
||||
Step X must be finished before step S can begin.
|
||||
Step J must be finished before step O can begin.
|
||||
Step B must be finished before step I can begin.
|
||||
Step F must be finished before step H can begin.
|
||||
Step D must be finished before step U can begin.
|
||||
Step E must be finished before step M can begin.
|
||||
Step Z must be finished before step X can begin.
|
||||
Step P must be finished before step L can begin.
|
||||
Step W must be finished before step H can begin.
|
||||
Step C must be finished before step D can begin.
|
||||
Step A must be finished before step X can begin.
|
||||
Step Q must be finished before step I can begin.
|
||||
Step R must be finished before step Y can begin.
|
||||
Step B must be finished before step A can begin.
|
||||
Step N must be finished before step L can begin.
|
||||
Step H must be finished before step G can begin.
|
||||
Step Y must be finished before step M can begin.
|
||||
Step L must be finished before step G can begin.
|
||||
Step G must be finished before step M can begin.
|
||||
Step Z must be finished before step R can begin.
|
||||
Step S must be finished before step Q can begin.
|
||||
Step P must be finished before step J can begin.
|
||||
Step V must be finished before step J can begin.
|
||||
Step J must be finished before step I can begin.
|
||||
Step J must be finished before step X can begin.
|
||||
Step W must be finished before step O can begin.
|
||||
Step B must be finished before step F can begin.
|
||||
Step R must be finished before step M can begin.
|
||||
Step V must be finished before step S can begin.
|
||||
Step H must be finished before step E can begin.
|
||||
Step E must be finished before step U can begin.
|
||||
Step R must be finished before step W can begin.
|
||||
Step X must be finished before step Q can begin.
|
||||
Step N must be finished before step G can begin.
|
||||
Step T must be finished before step I can begin.
|
||||
Step L must be finished before step M can begin.
|
||||
Step H must be finished before step I can begin.
|
||||
Step U must be finished before step M can begin.
|
||||
Step C must be finished before step H can begin.
|
||||
Step P must be finished before step H can begin.
|
||||
Step J must be finished before step F can begin.
|
||||
Step A must be finished before step O can begin.
|
||||
Step X must be finished before step M can begin.
|
||||
Step H must be finished before step L can begin.
|
||||
Step W must be finished before step K can begin.
|
Loading…
Add table
Add a link
Reference in a new issue