src/turing-omnibus/wallpaper.lisp @ f2a11ed01196 default tip
Add Needleman-Wunsch
| author | Steve Losh <steve@stevelosh.com> |
|---|---|
| date | Sat, 02 Nov 2019 11:06:08 -0400 |
| parents | bc8ed2a9b4c0 |
| children | (none) |
(losh:eval-dammit (ql:quickload '(:trivial-ppm))) (defpackage :sand.turing-omnibus.wallpaper (:use :cl :losh :iterate :sand.quickutils :sand.utils)) (in-package :sand.turing-omnibus.wallpaper) ;;;; From The New Turing Omnibus, Chapter 1 (defun draw (width height &optional (side 200.0d0) (colors 2)) (declare (optimize speed) (type (integer 2 4) colors) (type (integer 0 50000) width height) (type double-float side)) (let ((image (make-array (list width height))) (palette #(#(86 50 16) #(255 209 105) #(204 132 76) #(165 144 125)))) (time (dotimes (i width) (dotimes (j height) (let* ((x (* i (/ side width))) (y (* j (/ side height))) (c (truncate (+ (* x x) (* y y))))) (setf (aref image i j) (elt palette (mod c colors))))))) (time (trivial-ppm:write-to-file "wallpaper.ppm" image :format :ppm :if-exists :supersede))))