#lang racket ; TODO 1 (define (all-equal? L) (or (null? L) (null? (cdr L)) (and (equal? (first L) (second L)) (all-equal? (cdr L))))) ; TODO 2 (define (interchange A B pos) (list (append (take A pos) (list (list-ref B pos)) (drop A (add1 pos))) (append (take B pos) (list (list-ref A pos)) (drop B (add1 pos))))) ; TODO 3 (define (get-hole square) (define n (length square)) (let loop ((s square) (row 0)) (let ((res (member 0 (car s)))) (if res (cons row (- n (length res))) (loop (cdr s) (add1 row)))))) ; TODO 4 (define (magic-square? square) (define transposed (apply map list square)) (all-equal? (map (λ (row) (apply + row)) (append square transposed)))) ; TODO 5 (define (magic-stream square moves) (let loop ((seed (list square))) (stream-cons seed (loop (apply append ; concatenează listele interioare (map (λ (sq) (filter identity (map (λ (move) (move sq)) moves))) seed)))))) ; TODO 6 (define (steps-to-destination final? s) (let loop ((s s) (step 0)) (if (null? (filter final? (stream-first s))) (loop (stream-rest s) (add1 step)) step)))