cleaning up a bit before solving 2018/07 part 1

This commit is contained in:
Peter Tillemans 2024-12-01 12:36:06 +01:00
parent 14b3da7893
commit f3ceb796b6
4 changed files with 17 additions and 61 deletions

View file

@ -1,4 +0,0 @@
;;; Directory Local Variables -*- no-byte-compile: t -*-
;;; For more information see (info "(emacs) Directory Variables")
((lisp-mode . ((inferior-lisp-program . "sbcl"))))

1
.gitignore vendored
View file

@ -7,3 +7,4 @@
*.x86f
*~
.#*
*.~undo-tree~

View file

@ -37,64 +37,14 @@ Step F must be finished before step E can begin."))
if (not (member p produced))
collect p))))
(defun dependency-lessp (a b)
(string-lessp (second a) (second b)))
(defun next-ready-rules (dependencies done)
(let ((available (append done (steps-without-dependencies dependencies))))
(sort
(loop for d in dependencies
if (member (first d) available)
if (not (member (second d) available))
if (prerequisites-availablep available (second d) dependencies)
collect d)
#'dependency-lessp)))
(defun merge-steps (steps rule)
(if (member (first rule) steps)
(append steps (list (second rule)))
(append steps rule)))
(defun number-steps (dependencies)
(length
(remove-duplicates
(append
(map 'list #'first dependencies)
(map 'list #'second dependencies)))))
(defparameter *counter* 0)
(setf *counter* 0)
(defparameter *path* '())
(defun assy-order (dependencies)
(let ((todo (queues:make-queue :simple-queue))
(target-length (number-steps dependencies))
(path '()))
(loop for step in (steps-without-dependencies dependencies)
do (queues:qpush todo (list step)))
(queues:print-queue todo)
(loop
do (setf path (queues:qpop todo))
do (setf *path* path)
do (incf *counter*)
while (and path (not (= target-length (length path))))
do (loop
for rule in (next-ready-rules dependencies path)
for tgt = (second rule)
for npath = (append path (list tgt))
do (queues:qpush todo npath)))
path))
(defun print-thread-info ()
(let* ((curr-thread sb-thread:*current-thread*)
(curr-thread-name (sb-thread:thread-name curr-thread))
(all-threads (sb-thread:list-all-threads)))
(format t "Current thread: ~a~%~%" curr-thread)
(format t "Current thread name: ~a~%~%" curr-thread-name)
(format t "All threads:~% ~{~a~%~}~%" all-threads))
nil)

View file

@ -61,3 +61,12 @@
(if val
val
(setf (gethash key *input-data-cache*) (fetch-input-data year day)))))
(defun print-thread-info ()
(let* ((curr-thread sb-thread:*current-thread*)
(curr-thread-name (sb-thread:thread-name curr-thread))
(all-threads (sb-thread:list-all-threads)))
(format t "Current thread: ~a~%~%" curr-thread)
(format t "Current thread name: ~a~%~%" curr-thread-name)
(format t "All threads:~% ~{~a~%~}~%" all-threads))
nil)