Pop-Up Thingie
Sidebar
Too Lazy BBS
Home
Forum
Files
Chat
Bulletins
Dark
Register
Log in
Username
Password
Who's Online
System Info
Sysop:
Amessyroom
Location:
Fayetteville, NC
Users:
40
Nodes:
6 (
0
/
6
)
Uptime:
10:28:13
Calls:
291
Files:
910
Messages:
76,424
Sidebar
Forum
Usenet
COMP.LANG.LISP
Theater logic puzzle
From
B. Pym
@21:1/5 to
All
on Tue Aug 13 09:50:02 2024
stackoverflow.com/questions/78401940/prolog-code-wont-complete-due-to-computational-bug
newLISP
;;
;; Before the permutation is completely formed,
;; check for validity.
;;
;; n at a time.
(define (permute n__permute seq__permute func__permute
(chk__permute or) (built__permute '()))
(when (or (null? built__permute) (chk__permute built__permute))
(if (or (zero? n__permute) (null? seq__permute))
(func__permute built__permute)
(dotimes (i__permute (length seq__permute))
(unless (zero? i__permute) (rotate seq__permute -1))
(permute (- n__permute 1)
(rest seq__permute)
func__permute
chk__permute
(append built__permute (0 1 seq__permute)))))))
(define (subtract lst0 lst1) (difference lst0 lst1))
(define (in-this-order adjacent?)
(let (screens
(map
(lambda(pair) (apply find pair))
$args))
(if (not (for-all true? screens))
;; If an item wasn't found, return true.
true
(let (test (if adjacent? (fn (n) (= 1 n)) (fn (n) (> n 0))))
(for-all (lambda (xs) (test (apply - xs)))
(map list
(rest screens)
(0 -1 screens)))))))
(define (in-sequence) (apply in-this-order (cons true $args)))
(define (in-order) (apply in-this-order (cons nil $args)))
(define (do-titles genres)
(letn ((title-names '(Brisbane Ellipsis Frostfire JetSet LongShot
Pigeon Newton Gentleman Tower Vulture)))
(permute -1 title-names
(fn (titles)
(println genres)
(println titles)
(++ cnt)) ;; Dynamic scope!
(fn (titles , a b c d) ;; Local variables: a b c d
(and
(or (< (length titles) 3) (member 'Tower (0 3 titles)))
(in-sequence (list 'doc genres) (list 'Vulture titles))
(in-sequence (list 'Newton titles) (list 'horror genres))
;; Not at same theater.
(or (in-order (list 'Gentleman titles) (list 'scifi genres))
(in-order (list 'scifi genres) (list 'Gentleman titles)))
(in-sequence (list 'hist genres)
(list 'Brisbane titles)
(list 'LongShot titles))
(in-sequence (list 'Gentleman titles)
(list 'comedy genres)
(list 'Frostfire titles))
(in-sequence (list 'action genres)
(list 'Ellipsis titles)
(list 'scifi genres))
(in-order (list 'Pigeon titles)
(list 'JetSet titles)
(list 'western genres))
(begin
(setq a (find 'Newton titles))
(setq b (find 'Vulture titles))
(setq c (find 'Gentleman titles))
(setq d (find 'Tower titles))
(if (for-all true? (list a b c d))
(= (abs (- a b)) (abs (- c d)))
true)))))))
(define (foo)
(letn ((genre-names '(action comedy doc hist horror musical
romance spy scifi western))
(genres1--3 '(action hist romance)) ;; In some order.
(cnt 0))
(permute -1 genre-names
(fn (genres)
(do-titles genres))
(fn (genres)
(and
(or (< (length genres) 3) (= 3 (length (union (0 3 genres) genres1--3))))
;; The musical is playing on screen 4.
(or (< (length genres) 4) (= 3 (find 'musical genres)))
(in-order (list 'comedy genres) (list 'doc genres)))))
(println "\nNumber of solutions: " cnt)))
(foo)
(hist romance action musical scifi horror comedy spy doc western)
(Tower Brisbane LongShot Ellipsis Newton Gentleman Pigeon
Frostfire JetSet Vulture)
Number of solutions: 1
--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)