mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			49 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
#!/usr/bin/env newlisp
 | 
						|
 | 
						|
(constant 'NUM 8)
 | 
						|
 | 
						|
(define (intersects? q1 q2)
 | 
						|
	(or 
 | 
						|
		(= (q1 0) (q2 0)) 
 | 
						|
		(= (q1 1) (q2 1))
 | 
						|
		(= (abs (- (q1 0) (q2 0))) (abs (- (q1 1) (q2 1))))))
 | 
						|
 | 
						|
(define (variant? alist)
 | 
						|
	(set 'logic nil)
 | 
						|
	(cond
 | 
						|
		((= (length alist) 1) true)
 | 
						|
		((> (length alist) 1)
 | 
						|
			(while (> (length alist) 1)
 | 
						|
				(set 'q (pop alist -1))
 | 
						|
				(dolist (el alist)
 | 
						|
					(push 
 | 
						|
						(intersects? 
 | 
						|
							(list q (inc (length alist)))
 | 
						|
							(list el (+ 1 $idx)))
 | 
						|
					logic -1)))
 | 
						|
			(not (apply or logic)))))
 | 
						|
 | 
						|
(define (fork-by-line alist)
 | 
						|
	(let (res '())
 | 
						|
		(dolist (i (sequence 1 NUM))
 | 
						|
			(set 'tmp alist)
 | 
						|
			(push i tmp -1)
 | 
						|
			(setf res (push tmp res -1)))
 | 
						|
		res))
 | 
						|
 | 
						|
(define (find-variants num)
 | 
						|
	(let (res '())
 | 
						|
		(cond 
 | 
						|
			((< num 1) 
 | 
						|
				(begin (println "num < 1") (exit)))
 | 
						|
			((= num 1) 
 | 
						|
				(dolist (i (sequence 1 NUM)) (push (list i) res -1)))
 | 
						|
			((> num 1) 
 | 
						|
				(dolist (v (find-variants (dec num))) 
 | 
						|
					(set 'passed (filter variant? (fork-by-line v)))
 | 
						|
					(if (not (empty? passed)) (extend res passed)))))
 | 
						|
		res))
 | 
						|
		
 | 
						|
(set 'solutions (find-variants NUM))
 | 
						|
(println (length solutions))
 | 
						|
;;(exit) |