scratch/output/Scratch/en/blog/Haskell-Mandelbrot/index.html
Yann Esposito (Yogsototh) c53114f72a Merge branch 'master' into next
(Recompiled)

Conflicts:
	output/Scratch/assets/css/main.css
	output/Scratch/en/blog/Yesod-excellent-ideas/index.html
	output/Scratch/en/blog/feed/feed.xml
	output/Scratch/en/blog/index.html
	output/Scratch/en/index.html
	output/Scratch/fr/blog/Yesod-excellent-ideas/index.html
	output/Scratch/fr/blog/feed/feed.xml
	output/Scratch/fr/blog/index.html
	output/Scratch/fr/index.html
	output/Scratch/sitemap.xml
	output/index.html
2011-11-16 13:08:26 +01:00

290 lines
No EOL
19 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="keywords" content="mandelbrot, haskell, ASCII, golfed">
<link rel="shortcut icon" type="image/x-icon" href="/Scratch/img/favicon.ico" />
<link rel="stylesheet" type="text/css" href="/Scratch/assets/css/main.css" />
<link rel="stylesheet" type="text/css" href="/Scratch/css/twilight.css" />
<link rel="stylesheet" type="text/css" href="/Scratch/css/idc.css" />
<link rel="alternate" type="application/rss+xml" title="RSS" href="http://feeds.feedburner.com/yannespositocomen"/>
<link rel="alternate" lang="fr" xml:lang="fr" title="Mandelbrot avec haskell" type="text/html" hreflang="fr" href="/Scratch/fr/blog/Haskell-Mandelbrot/" />
<link rel="alternate" lang="en" xml:lang="en" title="ASCII Haskell Mandelbrot" type="text/html" hreflang="en" href="/Scratch/en/blog/Haskell-Mandelbrot/" />
<script type="text/javascript" src="/Scratch/js/jquery-1.3.1.min.js"></script>
<script type="text/javascript" src="/Scratch/js/jquery.cookie.js"></script>
<script type="text/javascript" src="/Scratch/js/index.js"></script>
<!--[if lt IE 9]>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js"></script>
<![endif]-->
<title>ASCII Haskell Mandelbrot</title>
</head>
<body lang="en" class="article">
<script type="text/javascript">// <![CDATA[
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
// ]]>
</script>
<div id="content">
<div id="choix">
<div class="return"><a href="#entete">&darr; Menu &darr;</a></div>
<div id="choixlang">
<a href="/Scratch/fr/blog/Haskell-Mandelbrot/" onclick="setLanguage('fr')">en Français</a>
</div>
<div class="flush"></div>
</div>
<div id="titre">
<h1>
ASCII Haskell Mandelbrot
</h1>
</div>
<div class="flush"></div>
<div class="flush"></div>
<div id="afterheader">
<div class="corps">
<p>Here is the obfuscated code:</p>
<div class="code"><div class="file"><a href="/Scratch/en/blog/Haskell-Mandelbrot/code/animandel.hs"> &#x27A5; animandel.hs </a></div><div class="withfile">
<pre class="twilight">
a=27;b=79;c=<span class="Constant">C</span>(-2.0,-1.0);d=<span class="Constant">C</span>(1.0,1.0);e=<span class="Constant">C</span>(-2.501,-1.003)
<span class="Keyword">newtype</span> <span class="Constant">C</span> = <span class="Constant">C</span> (<span class="Constant">Double</span>,<span class="Constant">Double</span>) <span class="Keyword">deriving</span> (<span class="Constant">Show</span>,<span class="Constant">Eq</span>)
<span class="Keyword">instance</span> <span class="Constant">Num</span> <span class="Constant">C</span> <span class="Keyword">where</span> <span class="Constant">C</span>(x,y)*<span class="Constant">C</span>(z,t)=<span class="Constant">C</span>(z*x-y*t,y*z+x*t);<span class="Constant">C</span>(x,y)+<span class="Constant">C</span>(z,t)=<span class="Constant">C</span>(x+z,y+t);<span class="Entity">abs</span>(<span class="Constant">C</span>(x,y))=<span class="Constant">C</span>(<span class="Entity">sqrt</span>(x*x+y*y),0.0)
r(<span class="Constant">C</span>(x,y))=x;i(<span class="Constant">C</span>(x,y))=y
f c z 0=0;f c z n=<span class="Keyword">if</span>(r(<span class="Entity">abs</span>(z))&gt;2)<span class="Keyword">then</span> n <span class="Keyword">else</span> f c ((z*z)+c) (n-1)
h j k = <span class="Entity">map</span> (\z&rarr;(f (<span class="Constant">C</span> z) (<span class="Constant">C</span>(0,0)) 32,(<span class="Entity">fst</span> z&gt;l - q/2))) [(x,y)|y&larr;[p,(p+((o-p)/a))..o],x&larr;[m,(m + q)..l]] <span class="Keyword">where</span> o=i k;p=i j;m=r j;l=r k;q=(l-m)/b
u j k = <span class="Entity">concat</span> $ <span class="Entity">map</span> v $ h j k <span class="Keyword">where</span> v (i,p)=(<span class="String"><span class="String">&quot;</span> .,`'°<span class="StringConstant">\&quot;</span>:;-+oO0123456789=!%*§&amp;$@#<span class="String">&quot;</span></span>!!i):rst p;rst <span class="Constant">True</span>=<span class="String"><span class="String">&quot;</span><span class="StringConstant">\n</span><span class="String">&quot;</span></span>;rst <span class="Constant">False</span>=<span class="String"><span class="String">&quot;</span><span class="String">&quot;</span></span>
main = <span class="Entity">putStrLn</span> $ im 0 <span class="Keyword">where</span> cl n (<span class="Constant">C</span> (x,y))=<span class="Keyword">let</span> cs=(1.1**n-1) <span class="Keyword">in</span> <span class="Constant">C</span> ((x+cs*(r e))/cs+1,(y+cs*(i e))/cs+1);bl n=cl n c;tr n=cl n d;im n=u (bl n) (tr n)++<span class="String"><span class="String">&quot;</span><span class="StringConstant">\x</span>1b[H<span class="StringConstant">\x</span>1b[25A<span class="String">&quot;</span></span>++im (n+1)
</pre>
</div></div>
<p>To launch it, youll need to have <a href="http://haskell.org">haskell</a> installed and to run:</p>
<pre class="twilight">ghc --make animandel.hs <span class="Keyword">&amp;&amp;</span> animandel
</pre>
<p>Here is some image after 50 iterations:</p>
<pre>
###@@@@@@@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$&amp;&amp;&amp;&amp;&amp;WWOOClbUOWW&amp;&amp;$$$$$$$$$$$$$$
##@@@@@@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$&amp;&amp;&amp;&amp;&WWUCUb; ,jUOWW&amp;&amp;&amp;$$$$$$$$$$$$
#@@@@@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$&amp;&amp;&amp;WWWWWUb ooCWW&amp;&amp;&amp;&amp;&amp;&amp;$$$$$$$$
@@@@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$&amp;&amp;WWWWWWWWOU uUOWWWW&amp;&amp;&amp;&amp;&amp;&amp;$$$$$
@@@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$&amp;&amp;&amp;WOUObUOOOUUUCbi rbCUUUOWWWWWOUW&amp;$$$
@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$&amp;&amp;&amp;&amp;&amp;&amp;WWWUcr,iiCb o wUUUUUC;OW&amp;$$
$$$$$$$$$$$$$$$$$$$$$$$$$$&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;WWWWOUC, j llW&amp;&amp;$
$$$$$$$$$$$$$$$$$$$$$&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;WWWWWWOCCbi bWWW&amp;&amp;
$$$$$$$$$$$$$$$$$&amp;&amp;WWWWWWW&amp;&amp;&amp;WWWWWWWWOUo jUOWW&amp;&amp;
$$$$$$$$$$$$$$&amp;&amp;&amp;WWOwOOWWWOUUOWWWWWOOUbw j.blW&amp;
$$$$$$$$$$$&amp;&amp;&amp;&amp;&amp;WWWObiijbUCl bCiUUUUUCj, bOW&amp;
$$$$$$$$$&amp;&amp;&amp;&amp;&amp;&amp;&amp;WWWOUbw &nbsp;; oobCbl jUWW&amp;
$$$$$$$&amp;&amp;&amp;&amp;&amp;&amp;&amp;WWWWOcbi ij jUW&amp;&amp;
$$$$$&amp;&amp;WWWWWWWOwUUCbw WW&amp;&amp;
WWWOWWWWWWWWWUUbo UWWW&amp;&amp;
: wbUOWW&amp;&amp;&amp;
WWWOWWWWWWWWWUUbo UWWW&amp;&amp;
$$$$$&amp;&amp;WWWWWWWOwUUCbw WW&amp;&amp;
$$$$$$$&amp;&amp;&amp;&amp;&amp;&amp;&amp;WWWWOcbi ij jUW&amp;&amp;
$$$$$$$$$&amp;&amp;&amp;&amp;&amp;&amp;&amp;WWWOUbw &nbsp;; oobCbl jUWW&amp;
$$$$$$$$$$$&amp;&amp;&amp;&amp;&amp;WWWObiijbUCl bCiUUUUUCj, bOW&amp;
$$$$$$$$$$$$$$&amp;&amp;&amp;WWOwOOWWWOUUOWWWWWOOUbw j.blW&amp;
$$$$$$$$$$$$$$$$$&amp;&amp;WWWWWWW&amp;&amp;&amp;WWWWWWWWOUo jUOWW&amp;&amp;
$$$$$$$$$$$$$$$$$$$$$&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;WWWWWWOCCbi bWWW&amp;&amp;
$$$$$$$$$$$$$$$$$$$$$$$$$$&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;WWWWOUC, j llW&amp;&amp;$
@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$&amp;&amp;&amp;&amp;&amp;&amp;WWWUcr,iiCb o wUUUUUC;OW&amp;$$
</pre>
<p>Here is the more readable version. I believe with this far more readable version, no more explanation is needed.</p>
<pre class="twilight">
nbvert = 30
nbhor = 79
zoomfactor = 1.01
init_bottom_left = <span class="Constant">C</span> (-2.0,-2.0)
init_top_right = <span class="Constant">C</span> (3.0,2.0)
interrest = <span class="Constant">C</span> (-1.713,-0.000)
<span class="Keyword">newtype</span> <span class="Constant">Complex</span> = <span class="Constant">C</span> (<span class="Constant">Float</span>,<span class="Constant">Float</span>) <span class="Keyword">deriving</span> (<span class="Constant">Show</span>,<span class="Constant">Eq</span>)
<span class="Keyword">instance</span> <span class="Constant">Num</span> <span class="Constant">Complex</span> <span class="Keyword">where</span>
<span class="Entity">fromInteger</span> n = <span class="Constant">C</span> (<span class="Entity">fromIntegral</span> n,0.0)
<span class="Constant">C</span> (x,y) * <span class="Constant">C</span> (z,t) = <span class="Constant">C</span> (z*x - y*t, y*z + x*t)
<span class="Constant">C</span> (x,y) + <span class="Constant">C</span> (z,t) = <span class="Constant">C</span> (x+z, y+t)
<span class="Entity">abs</span> (<span class="Constant">C</span> (x,y)) = <span class="Constant">C</span> (<span class="Entity">sqrt</span> (x*x + y*y),0.0)
<span class="Entity">signum</span> (<span class="Constant">C</span> (x,y)) = <span class="Constant">C</span> (<span class="Entity">signum</span> x , 0.0)
<span class="Entity">real</span>&nbsp;:: <span class="Constant">Complex</span> &rarr; <span class="Constant">Float</span>
real (<span class="Constant">C</span> (x,y)) = x
<span class="Entity">im</span>&nbsp;:: <span class="Constant">Complex</span> &rarr; <span class="Constant">Float</span>
im (<span class="Constant">C</span> (x,y)) = y
<span class="Entity">cabs</span>&nbsp;:: <span class="Constant">Complex</span> &rarr; <span class="Constant">Float</span>
cabs = real.<span class="Entity">abs</span>
<span class="Entity">f</span>&nbsp;:: <span class="Constant">Complex</span> &rarr; <span class="Constant">Complex</span> &rarr; <span class="Constant">Int</span> &rarr; <span class="Constant">Int</span>
f c z 0 = 0
f c z n = <span class="Keyword">if</span> (cabs z &gt; 2) <span class="Keyword">then</span> n <span class="Keyword">else</span> f c ((z*z)+c) (n-1)
bmandel bottomleft topright = <span class="Entity">map</span> (\z &rarr; (f (<span class="Constant">C</span> z) (<span class="Constant">C</span>(0,0)) 32, (<span class="Entity">fst</span> z &gt; right - hstep/2 ))) [(x,y) | y &larr; [bottom,(bottom + vstep)..top], x&larr;[left,(left + hstep)..right]]
<span class="Keyword">where</span>
top = im topright
bottom = im bottomleft
left = real bottomleft
right = real topright
vstep=(top-bottom)/nbvert
hstep=(right-left)/nbhor
<span class="Entity">mandel</span>&nbsp;:: (<span class="Constant">Complex,Complex</span>) &rarr; <span class="Constant">String</span>
mandel (bottomleft,topright) = <span class="Entity">concat</span> $ <span class="Entity">map</span> treat $ bmandel bottomleft topright
<span class="Keyword">where</span>
treat (i,jump) = <span class="String"><span class="String">&quot;</span> .,:;rcuowijlbCUOW&amp;$@#<span class="String">&quot;</span></span>&nbsp;!! (<span class="Entity">div</span> (i*22) 32):rst jump
rst <span class="Constant">True</span> = <span class="String"><span class="String">&quot;</span><span class="StringConstant">\n</span><span class="String">&quot;</span></span>
rst <span class="Constant">False</span> = <span class="String"><span class="String">&quot;</span><span class="String">&quot;</span></span>
<span class="Entity">cdiv</span>&nbsp;:: <span class="Constant">Complex</span> &rarr; <span class="Constant">Float</span> &rarr; <span class="Constant">Complex</span>
cdiv (<span class="Constant">C</span>(x,y)) r = <span class="Constant">C</span>(x/r, y/r)
<span class="Entity">cmul</span>&nbsp;:: <span class="Constant">Complex</span> &rarr; <span class="Constant">Float</span> &rarr; <span class="Constant">Complex</span>
cmul (<span class="Constant">C</span>(x,y)) r = <span class="Constant">C</span>(x*r, y*r)
<span class="Entity">zoom</span>&nbsp;:: <span class="Constant">Complex</span> &rarr; <span class="Constant">Complex</span> &rarr; <span class="Constant">Complex</span> &rarr; <span class="Constant">Float</span> &rarr; (<span class="Constant">Complex,Complex</span>)
zoom bl tr center magn = (f bl, f tr)
<span class="Keyword">where</span>
f point = ((center <span class="Entity"><span class="Entity">`</span>cmul` magn) + point ) `cdiv<span class="Entity">`</span></span> (magn + 1)
main = <span class="Keyword">do</span>
x &larr; <span class="Entity">getContents</span>
<span class="Entity">putStrLn</span> $ infinitemandel 0
<span class="Keyword">where</span>
window n = zoom init_bottom_left init_top_right interrest (zoomfactor**n)
infinitemandel n = mandel (window n) ++ <span class="String"><span class="String">&quot;</span><span class="StringConstant">\x</span>1b[H<span class="StringConstant">\x</span>1b[25A<span class="String">&quot;</span></span> ++ infinitemandel (n+1)
</pre>
</div>
<div id="choixrss">
<a id="rss" href="http://feeds.feedburner.com/yannespositocomen">
Subscribe
</a>
</div>
<script type="text/javascript">
$(document).ready(function(){
$('#comment').hide();
$('#clickcomment').click(showComments);
});
function showComments() {
$('#comment').show();
$('#clickcomment').fadeOut();
}
document.write('<div id="clickcomment">Comments</div>');
</script>
<div class="flush"></div>
<div class="corps" id="comment">
<h2 class="first">comments</h2>
<noscript>
You must enable javascript to comment.
</noscript>
<script type="text/javascript">
var idcomments_acct = 'a307f0044511ff1b5cfca573fc0a52e7';
var idcomments_post_id = '/Scratch/en/blog/Haskell-Mandelbrot/';
var idcomments_post_url = 'http://yannesposito.com/Scratch/en/blog/Haskell-Mandelbrot/';
</script>
<span id="IDCommentsPostTitle" style="display:none"></span>
<script type='text/javascript' src='/Scratch/js/genericCommentWrapperV2.js'></script>
</div>
<div id="entete" class="corps_spaced">
<div id="liens">
<ul><li><a href="/Scratch/en/">Home</a></li>
<li><a href="/Scratch/en/blog/">Blog</a></li>
<li><a href="/Scratch/en/softwares/">Softwares</a></li>
<li><a href="/Scratch/en/about/">About</a></li></ul>
</div>
<div class="flush"></div>
<hr/>
<div id="next_before_articles">
<div id="previous_articles">
previous entries
<div class="previous_article">
<a href="/Scratch/en/blog/Password-Management/"><span class="nicer">«</span>&nbsp;40 character's passwords</a>
</div>
<div class="previous_article">
<a href="/Scratch/en/blog/2011-04-20-Now-hosted-on-github/"><span class="nicer">«</span>&nbsp;Now hosted on github</a>
</div>
<div class="previous_article">
<a href="/Scratch/en/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/"><span class="nicer">«</span>&nbsp;Why I won't use CoffeeScript (sadly)</a>
</div>
</div>
<div id="next_articles">
next entries
<div class="next_article">
<a href="/Scratch/en/blog/A-more-convenient-diff/">A more convenient diff&nbsp;<span class="nicer">»</span></a>
</div>
<div class="next_article">
<a href="/Scratch/en/blog/Learn-Vim-Progressively/">Learn Vim Progressively&nbsp;<span class="nicer">»</span></a>
</div>
<div class="next_article">
<a href="/Scratch/en/blog/programming-language-experience/">Programming Language Experience&nbsp;<span class="nicer">»</span></a>
</div>
</div>
<div class="flush"></div>
</div>
</div>
<div id="bottom">
<div>
<a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/">Copyright ©, Yann Esposito</a>
</div>
<div id="lastmod">
Created: 07/10/2011
Modified: 07/31/2011
</div>
<div>
Entirely done with
<a href="http://www.vim.org">Vim</a>
and
<a href="http://nanoc.stoneship.org">nanoc</a>
</div>
<div>
<a href="/Scratch/en/validation/">Validation</a>
<a href="http://validator.w3.org/check?uri=referer"> [xhtml] </a>
.
<a href="http://jigsaw.w3.org/css-validator/check/referer?profile=css3"> [css] </a>
.
<a href="http://validator.w3.org/feed/check.cgi?url=http%3A//yannesposito.com/Scratch/en/blog/feed/feed.xml">[rss]</a>
</div>
</div>
<div class="clear"></div>
</div>
</body>
</html>