;;; Scheme Recursive Art Contest Entry ;;; ;;; Please do not include your name or personal info in this file. ;;; ;;; Title: Pseudorandom Cubes ;;; ;;; Description: ;;; Many wrong parentheses ;;; they cause misery to 61A ;;; praise extra credit (define (min x y) (if (< x y) x y ) ) (define (set_color_from_pos base) (color (rgb (min 1 (abs (/ (+ (get_x) (/ (screen_width) 2)) (screen_width)))) base (min 1 (abs (/ (+ (get_y) (/ (screen_height) 2)) (screen_height)))) ) ) ) (define (jump x y) (begin (penup) (setpos x y) (pendown) ) ) (define (int_to_list int) (define (helper int result) (if (= int 0) result (helper (quotient int 10) (append result (list (modulo int 10)))) ) ) (helper int '()) ) (define (digits_to_range lst min) (define (helper lst result) (if (null? lst) result (helper (cdr lst) (cons (+ (car lst) min) result)) ) ) (helper lst '()) ) (define (skip lst n) (if (= n 0) lst (skip (append (cdr lst) (list (car lst))) (- n 1)) ) ) (define (cube side len) (define (draw_face l) (cond ((zero? l)) (else (if (zero? (modulo l 2)) (left 60) (left 120) ) (forward len) (draw_face (- l 1)) ) ) ) (cond ((zero? side)) (else (cond ((= 3 side) (set_color_from_pos 0.5)) ((= 2 side) (set_color_from_pos 0.9)) (else (set_color_from_pos 0)) ) (right 60) (begin (penup) (forward len) (pendown)) (begin_fill) (draw_face 3) (end_fill) (cube (- side 1) len) ) ) ) (define (line_of_cubes len y rand_lst) (if (< len 0) nil (begin (cube 3 (car rand_lst)) (jump (+ (get_x) 35) y) (line_of_cubes (- len 35) y (skip rand_lst 9)) ) ) ) (define (fill_cubes len offset rand_lst) (if (< len 0) nil (begin (line_of_cubes (+ (screen_width) offset) (get_y) rand_lst) (jump (+ (- (/ (screen_width) 2)) offset) (- (get_y) 33)) (fill_cubes (- len 33) (- offset) (skip rand_lst 21)) ) ) ) (define (draw) (begin (define seed (digits_to_range (int_to_list 25102122103189852212181093924816717622718105832251441881377522712821973223123521432100156108184414296) 11) ) (speed 0) (bgcolor "white") (jump (- (/ (screen_width) 2)) (/ (screen_height) 2)) (fill_cubes (screen_height) 10 seed) (exitonclick) )) ; Please leave this last line alone. You may add additional procedures above ; this line. (draw)