tag:blogger.com,1999:blog-50747035900638093902024-03-13T14:49:14.737-07:00Methinks it is like a weaselImplementations of Richard Dawkins' "weasel" programnullifidianhttp://www.blogger.com/profile/17525511015814128503noreply@blogger.comBlogger10125tag:blogger.com,1999:blog-5074703590063809390.post-2913851414897610302009-03-30T12:51:00.000-07:002009-03-30T12:55:55.992-07:00C# weaselSubmitted by Robert Welbourn<br /><br /><a href="http://www.welbourn.com/weasel/">http://www.welbourn.com/weasel/</a><br /><br />Includes the source code, an installer and a screenshot.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.welbourn.com/weasel/weasel.JPG"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 519px; height: 404px;" src="http://www.welbourn.com/weasel/weasel.JPG" border="0" alt="" /></a>nullifidianhttp://www.blogger.com/profile/17525511015814128503noreply@blogger.com0tag:blogger.com,1999:blog-5074703590063809390.post-6628820295040759592009-03-30T10:21:00.000-07:002009-03-30T10:23:19.793-07:00The "cdesign proponentists" weasel<pre><br />#!/usr/bin/env magic<br /></pre>nullifidianhttp://www.blogger.com/profile/17525511015814128503noreply@blogger.com0tag:blogger.com,1999:blog-5074703590063809390.post-8596113200279781792009-03-29T04:42:00.000-07:002009-03-29T04:45:51.190-07:00Tcl the weaselSubmitted by Eric Amundsen<br /><br /><pre><br />#!/usr/bin/env tclsh<br />proc pick {{range 27}} {<br /> return [expr {int(rand() * $range)}]<br />} <br /><br />set alphabet " abcdefghijklmnopqrstuvwxyz"<br />for {set j 0} {$j < [string length $alphabet]} {incr j} {<br /> set ::[string index $alphabet $j] $j<br />}<br /><br />proc calcOffspringScore {offspring} {<br /> set score 0<br /> for {set j 0} {$j < [string length $::target]} {incr j} {<br /> set score [expr {$score + abs([set ::[string index $::target $j]] - [set ::[string index $offspring $j]])}]<br /> }<br /> return $score<br />}<br /><br />proc createOffspring {parent} {<br /> set splitPoint [pick [string length $parent]]<br /> set offspring [string range $parent 0 [expr {$splitPoint - 1}]]<br /> append offspring [string index $::alphabet [pick]]<br /> append offspring [string range $parent [expr {$splitPoint + 1}] end]<br /> return $offspring<br />}<br /><br />proc breed {parent numOffspring} {<br /> set bestKid -1<br /> set bestScore 10000<br /> for {set j 0} {$j < $numOffspring} {incr j} {<br /> set kid [createOffspring $parent] <br /> set kids($j) $kid<br /> set score [calcOffspringScore $kid]<br /> if {$bestScore > $score} {<br /> set bestKid $j<br /> set bestScore $score<br /> }<br /> }<br /> return $kids($bestKid)<br />}<br /><br />if {[llength $argv] == 0} {<br /> puts "methink.tcl usage : <br />methink.tcl <# offspring / gen> <(optional) target string><br />default target => \"methinks it is like a weasle\"<br />target string can only include a-z lowercase and space"<br /> return<br />} elseif {[llength $argv] == 1} {<br /> set ::target "methinks it is like a weasle"<br />} else {<br /> set ::target [lindex $argv 1]<br />}<br /><br />set numOffspring [lindex $argv 0]<br /><br />set initString ""<br />for {set j 0} {$j < [string length $target]} {incr j} {<br /> append initString [string index $alphabet [pick]]<br />}<br /><br />puts [set genString $initString]<br />for {set j 0} {$j < 10000000} {incr j} {<br /> puts [set genString [breed $genString $numOffspring]]<br /> if {$genString == $target} {<br /> puts "[incr j] generations"<br /> return<br /> }<br />}<br />puts "sorry, gave up after [incr j] generations"<br /></pre>nullifidianhttp://www.blogger.com/profile/17525511015814128503noreply@blogger.com0tag:blogger.com,1999:blog-5074703590063809390.post-60134338268277104382009-03-28T14:36:00.000-07:002009-03-28T14:45:42.988-07:00VBA Excel weaselSubmitted by Ian Rhile<br /><br /><pre><br />Sub weasel()<br />'An Excel macro for Dawkin's weasel algorithm<br />gentarget = 0<br />mutationrate = 0.05<br />Sheets("Sheet1").Cells.ClearContents<br />target = "methinks it is like a weasel"<br />alphabet = "abcdefghijklmnopqrstuvwxyz "<br />'generate initial random string<br />For x = 1 To Len(target)<br /> y = Int(27 * Rnd + 1)<br /> seq = seq + Mid(alphabet, y, 1)<br />Next x<br />Sheets("Sheet1").Range("A1").Value = "original sequence:"<br />Sheets("Sheet1").Range("B1").Value = seq<br />Sheets("Sheet1").Range("A2").Value = "generation"<br />Sheets("Sheet1").Range("B2").Value = "original generational sequence"<br />Sheets("Sheet1").Range("C2").Value = "matches"<br />50 gen = gen + 1<br />Sheets("Sheet1").Cells(gen + 2, 1) = gen<br />Sheets("Sheet1").Cells(gen + 2, 2) = seq<br />maxfit = 0<br />maxfitseq = seq<br />For x = 1 To 100<br /> newseq = seq<br /> For u = 1 To Len(seq)<br /> If Rnd < mutationrate Then<br /> w = Int(27 * Rnd + 1)<br /> Mid(newseq, u, 1) = Mid(alphabet, w, 1)<br /> End If<br /> Next u<br /> Sheets("Sheet1").Cells(gen + 2, x + 4) = newseq<br /> fit = 0<br /> For t = 1 To Len(newseq)<br /> If Mid(target, t, 1) = Mid(newseq, t, 1) Then fit = fit + 1<br /> Next t<br /> If fit > maxfit Then<br /> maxfit = fit<br /> maxfitseq = x<br /> End If<br />Next x<br />Sheets("Sheet1").Cells(gen + 2, 3) = maxfit<br /> <br />seq = Sheets("Sheet1").Cells(gen + 2, maxfitseq + 4).Value<br />If gentarget > 0 And gen > gentarget Then GoTo 100<br />If seq = target Then<br /> If gentarget > 0 Then GoTo 50<br /> gentarget = gen + 100<br />End If<br />GoTo 50<br />100 End Sub<br /></pre>nullifidianhttp://www.blogger.com/profile/17525511015814128503noreply@blogger.com1tag:blogger.com,1999:blog-5074703590063809390.post-37975149692702111332009-03-28T14:18:00.000-07:002009-03-28T14:19:43.717-07:00Another Python weaselThe Atavism: Another Weasel<br /><br /><a href="http://theatavism.blogspot.com/2009/03/another-weasel.html">http://theatavism.blogspot.com/2009/03/another-weasel.html</a>nullifidianhttp://www.blogger.com/profile/17525511015814128503noreply@blogger.com0tag:blogger.com,1999:blog-5074703590063809390.post-92025127740021201622009-03-28T13:32:00.000-07:002009-03-28T13:33:49.749-07:00Lisp weaselPatrick May: Dawkins' Weasel<br /><br /><a href="http://www.spe.com/pjm/weasel.html">http://www.spe.com/pjm/weasel.html</a>nullifidianhttp://www.blogger.com/profile/17525511015814128503noreply@blogger.com0tag:blogger.com,1999:blog-5074703590063809390.post-61403650451529142402009-03-28T13:25:00.000-07:002009-03-28T13:30:37.992-07:00Perl one line weaselJim Lund: Dawkins ‘Weasel’ program as a Perl one-liner<br /><br /><a href="http://elegans.uky.edu/blog/?p=127">http://elegans.uky.edu/blog/?p=127</a>nullifidianhttp://www.blogger.com/profile/17525511015814128503noreply@blogger.com0tag:blogger.com,1999:blog-5074703590063809390.post-49064307228132571292009-03-28T13:22:00.000-07:002009-03-28T13:25:49.424-07:00JavaScript weaselWesley R. Elsberry: Interactive JavaScript weasel<br /><br /><a href="http://www.antievolution.org/features/ec/weasel102.html">http://www.antievolution.org/features/ec/weasel102.html</a>nullifidianhttp://www.blogger.com/profile/17525511015814128503noreply@blogger.com0tag:blogger.com,1999:blog-5074703590063809390.post-88824402067850664172009-03-28T13:18:00.000-07:002009-03-28T13:22:48.886-07:00Pythonic weaselsAnders Gorm Pedersen: Non-locking and locking weasels in Python<br /><br /><a href="http://www.cbs.dtu.dk/courses/27615.mol/weasel.php">http://www.cbs.dtu.dk/courses/27615.mol/weasel.php</a>nullifidianhttp://www.blogger.com/profile/17525511015814128503noreply@blogger.com0tag:blogger.com,1999:blog-5074703590063809390.post-79602798030459652872009-03-28T11:21:00.000-07:002009-03-28T11:54:07.476-07:00Richard Dawkins': The Blind Watchmaker video<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/5sUQIpFajsg&hl=en&fs=1"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/5sUQIpFajsg&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>nullifidianhttp://www.blogger.com/profile/17525511015814128503noreply@blogger.com0