Ich versuche, ein 3x3 Schachbrett für das Problem mit vier Rittern zu bekommen. Hier ist der Code in der Schläger SpracheKann den Fehler in DrRacket nicht verstehen
#lang racket
(define N 3)
(define nexts ; construct the graph
(let ([ds (for*/list ([x 2] [x* '(+1 -1)] [y* '(+1 -1)])
(cons (* x* (+ 1 x)) (* y* (- 2 x))))])
(for*/vector ([i N] [j N])
(filter values (for/list ([d ds])
(let ([i (+ i (car d))] [j (+ j (cdr d))])
(and (< -1 i N) (< -1 j N) (+ j (* N i)))))))))
(define (tour x y)
(define xy (+ x (* N y)))
(let loop ([seen (list xy)] [ns (vector-ref nexts xy)] [n (sub1 (* N N))])
(if (zero? n) (reverse seen)
(for/or ([next (sort (map (λ(n) (cons n (remq* seen (vector-ref nexts n)))) ns)
< #:key length #:cache-keys? #t)])
(loop (cons (car next) seen) (cdr next) (sub1 n))))))
(define (draw tour)
(define v (make-vector (* N N)))
(for ([n tour] [i (in-naturals 1)]) (vector-set! v n i))
(for ([i N])
(displayln (string-join (for/list ([j (in-range i (* N N) N)])
(~a (vector-ref v j) #:width 2 #:align 'right))
" "))))
(draw (tour (random N) (random N)))
Und es gibt mir diesen Fehler for: expected a sequence for n, got something else: #f
und Highlights in diesem Abschnitt meines Code:
(define (draw tour)
(define v (make-vector (* N N)))
(for ([n tour] [i (in-naturals 1)]) (vector-set! v n i))
(for ([i N])
(displayln (string-join (for/list ([j (in-range i (* N N) N)])
(~a (vector-ref v j) #:width 2 #:align 'right))
" "))))
Und ich bin nicht sicher, was das Problem ist. Das ist für den Unterricht und ich habe keine Erfahrung mit der Schlägersprache. Jede Hilfe wäre willkommen.
Dank
Ich bin nicht sicher, dass es ein erstes Element haben soll, da es zufällig generiert wird. Wenn ich das N zu irgendeiner Zahl über 4 ändere, funktioniert es, aber nicht darunter, und ich brauche es, um für 3 zu arbeiten – butimnotarapper
@Butimnotarapper Ich habe meine Antwort aktualisiert. Sie werden keine Lösungen für Startpositionen auf 3x3 und 4x4 Boards finden, da es keine gibt. – Sylwester