;;; Scheme Recursive Art Contest Entry ;;; ;;; Please do not include your name or personal info in this file. ;;; ;;; Title: Campanile ;;; ;;; Description: ;;; Turn right, ;;; Turn left, ;;; Hilber forward ; decompressing colors (define-macro (decompress defs code) (define (helper defs) (if (null? defs) '() (begin (define def (car defs)) (define name (car def)) (define val (car (cdr def))) (cons (list 'define name val) (helper (cdr defs))) ) ) ) (append '(begin) (helper defs) code) ) ; repetitions (define (reps e n) (define (helper e n total) (if (> n 0) (helper e (- n 1) (if (pair? e) (append e total) (cons e total))) total) ) (helper e n '()) ) ; recursively compressed colors (define colors (decompress ( (seq0 (reps "#424443" 2)) (seq1 (reps "#a0a1a5" 2)) (seq2 (reps "#424443" 15)) (seq3 (reps "#a0a1a5" 3)) (seq4 (reps "#424443" 8)) (seq5 (reps "#a0a1a5" 10)) (seq6 (reps "#424443" 12)) (seq8 (reps "#424443" 9)) (seq9 (reps "#424443" 23)) (seq10 (reps "#fbf651" 2)) (seq11 (reps "#424443" 3)) (seq12 (reps "#fbf651" 4)) (seq13 (reps "#fbf651" 5)) (seq14 (reps "#424443" 6)) (seq15 (reps "#a0a1a5" 5)) (seq16 (reps "#424443" 5)) (seq17 (reps "#a0a1a5" 12)) (seq18 (reps "#fbf651" 7)) (seq19 (reps "#a0a1a5" 9)) (seq22 (reps "#fbf651" 3)) (seq23 (reps "#fbf651" 9)) (seq25 (reps "#fbf651" 15)) (seq26 (reps "#a0a1a5" 4)) (seq27 (reps "#fbf651" 11)) (seq28 (reps "#a0a1a5" 13)) (seq29 (reps "#a0a1a5" 7)) (seq30 (reps "#424443" 4)) (seq31 (reps "#a0a1a5" 6)) (seq32 (reps "#a0a1a5" 8)) (seq33 (reps "#fbf651" 8)) (seq34 (reps "#424443" 25)) (seq36 (reps "#424443" 49)) (seq39 (reps "#424443" 38)) (seq40 (reps "#424443" 37)) (seq41 (reps "#424443" 10)) (seq43 (reps "#fbf651" 6)) (seq44 (reps "#424443" 46)) (seq45 (reps "#424443" 13)) (seq48 (reps "#a0a1a5" 42)) (seq56 (reps "#424443" 11)) (seq57 (reps "#424443" 7)) (seq61 (reps "#424443" 17)) (seq63 (reps "#a0a1a5" 11)) (seq67 (reps "#424443" 14)) (seq70 (reps "#424443" 34)) (seq75 (reps "#a0a1a5" 17)) (seq77 (reps "#fbf651" 10)) (seq83 (reps "#424443" 24)) (seq86 (reps "#424443" 16)) (seq95 (append '("#a0a1a5") seq0 seq1 )) (seq96 (append seq2 '("#a0a1a5" "#424443") )) (seq97 (append seq3 '("#424443") )) (seq98 (append seq3 '("#424443") seq1 )) (seq99 (append seq6 '("#a0a1a5") )) (seq100 (append seq6 '("#a0a1a5") seq4 '("#a0a1a5") )) (seq101 (append '("#a0a1a5") seq8 )) (seq102 (append '("#a0a1a5") seq8 '("#a0a1a5") )) (seq103 (append seq1 seq0 )) (seq104 (append seq1 seq0 '("#a0a1a5") seq0 seq1 )) (seq105 (append seq0 '("#a0a1a5") )) (seq106 (append seq11 seq10 '("#424443") )) (seq107 (append seq11 seq10 '("#424443") seq13 )) (seq108 '("#fbf651" "#a0a1a5") ) (seq109 (append '("#fbf651" "#a0a1a5") seq11 )) (seq110 (append seq13 seq1 )) (seq111 (append seq11 seq1 )) (seq112 (append seq11 seq1 '("#424443") )) (seq113 (append '("#a0a1a5") seq14 seq1 )) (seq114 (append seq15 '("#424443") )) (seq115 (append seq1 '("#424443") )) (seq116 (append seq1 '("#424443" "#a0a1a5") )) (seq117 (append seq0 '("#a0a1a5") seq11 '("#a0a1a5") seq0 seq1 )) (seq118 (append seq16 seq1 )) (seq119 (append seq11 seq1 seq11 )) (seq120 (append seq11 seq1 seq0 )) (seq121 (append seq10 seq1 )) (seq122 (append seq13 '("#a0a1a5") )) (seq123 (append seq13 '("#a0a1a5") seq10 )) (seq124 (append seq22 '("#a0a1a5") )) (seq125 (append seq28 '("#424443") )) (seq126 (append seq26 seq4 )) (seq127 (append seq30 '("#a0a1a5" "#424443") )) (seq128 (append seq31 '("#424443") )) (seq129 '("#a0a1a5" "#424443" )) (seq130 (append '("#a0a1a5" "#424443") seq3 )) (seq131 (append '("#a0a1a5") seq0 seq1 seq0 )) (seq132 (append '("#a0a1a5") seq0 )) (seq133 (append seq29 '("#424443") )) (seq134 (append seq15 '("#fbf651") )) (seq135 (append seq33 '("#a0a1a5") )) (seq136 (append seq15 '("#424443" "#a0a1a5") )) (seq137 (append seq0 '("#a0a1a5" "#424443") )) (seq138 (append '("#a0a1a5") seq4 )) (seq139 (append '("#a0a1a5") seq0 seq19 )) (seq140 (append seq16 '("#a0a1a5") )) (seq141 (append '("#a0a1a5") seq11 '("#a0a1a5") )) (seq142 (append '("#a0a1a5" "#424443" "#a0a1a5") )) (seq143 (append '("#424443") seq10 )) (seq144 (append seq16 seq10 )) (seq145 (append seq22 '("#a0a1a5" "#fbf651") )) (seq146 (append (reps "#424443" 18) '("#a0a1a5") )) (seq147 (append seq0 seq22 )) (seq148 (append seq22 seq0 seq10 )) (seq149 (append '("#fbf651" "#a0a1a5" "#424443") )) (seq150 (append seq1 seq0 '("#a0a1a5") )) (seq151 (append seq30 '("#a0a1a5") )) (seq152 (append seq30 '("#a0a1a5") seq41 '("#a0a1a5") )) (seq153 '("#fbf651" "#424443") ) (seq154 (append seq43 '("#424443") )) (seq155 (append seq43 '("#a0a1a5") )) (seq156 (append '("#fbf651") seq16 seq10 )) (seq157 (append '("#a0a1a5") seq45 seq1 seq0 )) (seq158 (append seq11 '("#a0a1a5") )) (seq159 (append seq11 '("#a0a1a5" "#424443") )) (seq160 (append '("#fbf651" "#a0a1a5") seq18 )) (seq161 (append '("#424443" "#fbf651") )) (seq162 (append seq26 '("#424443") )) (seq163 (append seq1 seq10 )) (seq164 (append seq26 seq0 seq32 )) (seq165 (append (reps "#a0a1a5" 16) '("#424443") )) (seq166 (append seq3 seq10 )) (seq167 (append '("#424443" "#a0a1a5" "#424443") )) (seq168 (append seq26 seq0 '("#a0a1a5") )) (seq169 (append seq10 '("#424443") )) (seq170 (append seq33 '("#424443") )) (seq171 (append '("#a0a1a5") seq16 '("#fbf651") )) (seq172 (append seq45 '("#a0a1a5") )) (seq173 (append seq0 '("#a0a1a5") seq0 )) (seq174 (append seq15 seq0 )) (seq175 (append seq14 '("#a0a1a5") )) (seq176 (append seq1 '("#424443") seq31 )) (seq177 (append seq30 seq1 )) (seq178 (append seq30 seq3 '("#424443") )) (seq179 (append seq30 '("#a0a1a5") seq8 )) (seq180 (append '("#a0a1a5") seq4 '("#a0a1a5") )) (seq181 (append seq1 seq16 '("#a0a1a5") )) (seq182 (append seq3 seq11 '("#a0a1a5") )) (seq183 (append seq56 seq3 )) (seq184 (append seq0 seq1 )) (seq185 (append '("#424443") seq3 )) (seq186 (append seq0 seq1 seq0 )) (seq187 (append '("#424443") seq1 seq0 )) (seq188 (append seq0 '("#a0a1a5") seq0 '("#a0a1a5") )) (seq189 (append seq1 seq0 seq1 )) (seq190 (append seq4 '("#a0a1a5") )) (seq191 (append (reps "#424443" 45) '("#a0a1a5") )) (seq192 (append seq67 '("#a0a1a5" "#424443") )) (seq193 (append seq4 seq32 )) (seq194 (append seq4 seq17 )) (seq195 (append (reps "#424443" 19) '("#a0a1a5") )) (seq196 (append seq0 '("#a0a1a5" "#424443") seq1 )) (seq197 (append seq0 '("#a0a1a5") seq16 '("#a0a1a5") )) (seq198 (append '("#a0a1a5") seq11 seq1 seq0 )) (seq199 (append '("#a0a1a5") seq14 )) (seq200 (append seq11 '("#a0a1a5") seq0 )) (seq201 (append seq32 seq0 )) (seq202 (append '("#a0a1a5") seq10 )) (seq203 (append '("#fbf651") seq1 )) (seq204 (append '("#a0a1a5") seq11 '("#a0a1a5") seq0 '("#a0a1a5") )) ) ( ; build the vector ; break up long list for not hitting the recursion limit (append (append seq95 seq96 seq98 seq4 seq5 seq100 (reps "#424443" 30) seq102 seq96 seq104 seq105 seq9 seq10 seq11 seq12 seq107 seq0 seq109 seq110 seq112 seq113 seq6 seq114 seq116 seq117 seq118 seq119 seq17 seq120 seq18 seq19 seq121 '("#fbf651") (reps "#a0a1a5" 89) seq123 (reps "#a0a1a5" 22) '("#fbf651") seq17 seq124 seq23 (reps "#a0a1a5" 20) seq25 seq26 seq27 seq125 seq126 seq29 seq111 '("#fbf651") seq127 seq128 seq130 seq0 seq131 seq3 seq119 seq132 seq133 seq134 seq15 seq12 seq32 seq33 seq5 seq135 '("#fbf651") seq136 seq137 seq138 seq129 seq10 seq139 seq140 seq9 seq141 seq9 seq142 seq34 '("#fbf651") seq6 seq18 seq143 seq144 (reps "#424443" 61) seq129 seq145 seq106 '("#fbf651") seq36 '("#a0a1a5") seq146 (reps "#424443" 179) seq18 seq147 '("#424443") seq142 seq148 seq147 seq39 seq12 '("#424443") seq149 seq1 seq127 seq19 seq40 seq129 seq150 seq152 (reps "#424443" 184) '("#fbf651") seq112 seq153 seq13 seq134 '("#424443") seq154 seq115 seq155 seq156 seq44 seq157 seq125 seq115 seq22 seq158 (reps "#fbf651" 25) seq159 seq109 seq142 seq105 seq30 seq148 seq16 seq31 seq160 seq26 seq121 seq12 seq26 seq13 seq3 seq18 seq5 seq160 seq1 seq145 (reps "#a0a1a5" 44) seq161 seq162 seq48 seq121 seq10 seq28 seq23 seq163 '("#424443") seq164 seq18 seq165 seq31 seq112 seq166 seq167 seq135 seq149 seq155 seq124 seq167 seq168 seq169 '("#a0a1a5") seq122 seq18 seq105 (reps "#424443" 33) seq170 seq13 seq11 seq13 '("#424443") seq22 seq127 seq171 seq0 seq121 seq13 seq32 seq140 seq172 seq173 seq174 seq48 seq0 (reps "#a0a1a5" 1298) seq175 seq137 seq139 '("#424443") (reps "#a0a1a5" 5082) '("#424443") seq157 seq176 seq177 seq41 seq129 seq113 seq178 seq142 seq179 seq104 seq16 seq168 seq41 seq180 seq30 seq115 (reps "#a0a1a5" 108) '("#424443") (reps "#a0a1a5" 19) '("#424443") seq181 (reps "#424443" 36) seq182 seq183 seq184 seq177 seq151 seq57 seq132 seq31 seq0 (reps "#a0a1a5" 15) seq185 seq178 (reps "#a0a1a5" 1325) seq0 seq97 seq129 (reps "#a0a1a5" 18) seq186 seq162 seq114 seq26 seq111 seq183 seq105 seq61 seq115 seq17 seq0 (reps "#a0a1a5" 116) seq187 seq63 '("#424443") seq102 seq151 seq117 seq188 seq112 seq5 seq4 (reps "#a0a1a5" 36) seq30 (reps "#a0a1a5" 973) seq186 seq28 seq16 seq189 seq61 seq95 seq185 seq190 seq179 seq103 seq126 seq1 seq191 seq192 seq142 seq118 seq190 seq36 seq114 seq31 seq193 seq194 seq191 seq99 seq8 seq181 seq16 seq95 seq30 seq138 seq150 seq195 seq140 seq192 ) (append seq129 seq1 seq56 '("#a0a1a5") seq44 seq128 seq15 seq4 (reps "#a0a1a5" 780) seq195 seq175 seq57 seq1 seq6 seq17 seq194 seq2 seq103 seq141 seq99 '("#424443") seq141 seq34 '("#a0a1a5") seq196 seq11 seq133 seq168 seq158 seq137 seq114 seq182 seq111 seq70 seq1 seq120 seq97 seq114 seq131 seq136 seq158 seq197 (reps "#424443" 22) '("#a0a1a5") (reps "#424443" 29) seq19 seq193 seq39 seq129 seq32 seq193 (reps "#424443" 54) seq198 seq199 seq142 seq120 seq132 seq32 seq4 seq129 seq141 seq158 seq57 '("#a0a1a5") seq200 seq97 '("#a0a1a5") seq159 seq1 seq11 seq162 seq115 seq133 seq26 seq200 seq114 seq162 seq130 seq11 seq3 seq120 '("#a0a1a5") seq151 seq11 seq95 seq173 (reps "#a0a1a5" 768) seq185 seq16 seq176 seq196 seq120 seq129 seq115 seq95 '("#424443") seq128 seq162 seq97 seq165 seq29 seq0 seq201 seq3 seq11 seq201 seq115 seq75 '("#424443") seq19 '("#424443") seq115 seq103 seq115 seq174 seq164 seq0 (reps "#a0a1a5" 27) '("#424443") seq32 seq77 seq130 seq30 '("#fbf651") seq14 seq32 seq187 seq115 (reps "#a0a1a5" 26) seq57 seq201 seq15 seq108 seq43 seq29 seq25 seq166 (reps "#a0a1a5" 39) seq10 seq202 seq75 seq203 seq124 seq22 seq31 seq110 '("#fbf651") (reps "#a0a1a5" 54) '("#fbf651") seq5 '("#fbf651") (reps "#a0a1a5" 31) '("#424443") seq97 seq32 seq203 seq27 seq1 seq23 seq175 seq188 seq4 seq204 seq41 seq17 '("#424443") seq63 seq124 seq43 seq116 seq149 seq154 seq170 seq153 '("#fbf651") seq70 seq171 seq100 seq41 seq182 (reps "#424443" 83) '("#a0a1a5") seq83 seq1 seq146 (reps "#424443" 39) seq199 seq26 (reps "#424443" 111) '("#a0a1a5") seq57 seq204 seq158 seq30 seq108 seq12 seq16 seq13 seq161 seq175 seq118 seq159 seq26 seq30 seq189 seq86 seq150 seq137 seq15 seq83 seq129 seq142 seq86 seq116 seq61 seq1 seq172 (reps "#424443" 65) '("#a0a1a5") seq197 seq30 seq141 (reps "#424443" 28) '("#a0a1a5") seq16 seq12 seq0 seq169 seq1 seq12 '("#a0a1a5") seq152 seq105 seq67 seq198 seq26 seq41 '("#a0a1a5") seq105 seq57 seq123 seq105 seq158 seq107 '("#424443" "#a0a1a5") seq156 '("#424443") seq202 seq161 seq143 '("#424443") seq163 seq143 '("#a0a1a5" "#fbf651") seq162 seq98 seq186 seq129 seq28 seq111 seq151 seq41 seq43 seq30 seq153 seq121 seq43 seq4 seq18 seq41 seq10 seq41 seq19 seq6 seq3 seq184 seq158 seq151 seq112 seq33 seq105 seq11 seq153 seq77 seq141 (reps "#424443" 32) '("#a0a1a5") (reps "#424443" 20) seq17 seq4 (reps "#a0a1a5" 136) seq194 (reps "#424443" 48) '("#a0a1a5") (reps "#424443" 52) seq180 seq197 seq40 seq189 (reps "#424443" 182) )) ))) ; getting colors (define (get-color) (define result (car colors)) (set-car! colors (car (cdr colors))) (set-cdr! colors (cdr (cdr colors))) result) ; recursive curve (define (left) (lt 90)) (define (right) (rt 90)) (define (forward) (color (get-color)) (fd 5)) ; step defined here (define (hilbert rule depth) (if (> depth 0) (begin (define (a) (hilbert 'a (- depth 1))) (define (b) (hilbert 'b (- depth 1))) (if (eq? rule 'a) (begin (left) (b) (forward) (right) (a) (forward) (a) (right) (forward) (b) (left)) (begin (right) (a) (forward) (left) (b) (forward) (b) (left) (forward) (a) (right)) ) ) ) ) ; drawing (define (draw) (speed 0) (bgcolor "black") (penup)(lt 90)(fd 320)(lt 90)(fd 300)(lt 90)(pendown) (hilbert 'a 7) (exitonclick)) ; Please leave this last line alone. You may add additional procedures above ; this line. (draw)