Fractal Diamond-Square Terrain Generation in Perl
The title is mostly for search engines for anyone who encounters this in the future.
I have, for no particular reason, decided to implement the fractal diamond-square terrain generation algorithm in Perl. Sometimes it's nice to just play.
$$$$$$$$$$$$$$$$$$$$$$$####################*********************!**!!!!!!!!!!!!!
$$$$$$$$$$$$$$$$$$$$$$#####################****************************!!!!!!!!!
$$$$$$$$$$$$$$$$$$$$$$###########################*#*##*#*####************!!!!!!!
####$####$#$#$$$$$$$$$##########################################**********!!!!!!
################$$$$$$$$##########################################**********!!!!
#################$$$$$$$$$##########################################**********!!
*###############$$$$$$$$$$$#########################$##$#$$$$########**********!
****#*############$$#$##$##########################$$$$$$$$$$$########**********
********#############################################$$$$$$$$#########**********
*************#########################################$#$##$########************
!*!*************###################################################*************
!!!!!!*!**********####*##*#*#######################################*************
!!!!!!!!!!!*****************############$##########################*************
=!!!!!!!!!!!!***************###########$$$##########################**#*#*******
====!!!!!!!!!!!!***********############$$$$$#############################*******
;=======!!=!!!!!!!**********##**#######$##############################**********
;;;;;;========!!!!!!!***************###############################*************
;;;;;;;;========!!!!!!!!*!*!**********############*##############************###
;;;;;;;;;;;=====!!!!!!!!!!!!!!!********#*#**************######*************#####
:;;;;;;;;;;======!!!!!!!!!!!!!!!***************************#*#*********#########
:::;;;;;;;;;======!!!!!!!!!!!!!!!*************************************##########
::::::;;;;;;=======!!!!!!!!!!!!!!!*!*******************************#############
~:::::;;;;;;;;=========!!=!!!!!!!!!!!!!*!***************************############
~~::::::;;;;;;;;=;===========!=!=!!!!!!!!!!!!!!!*********************#*#########
~~~~:::::::;;;;;;;;=;===============!!!!!!!!!!!!!!!*********************########
~~~~~~:::::::;;;;;;;;;;;;;=;==========!!!!!!!!!!!!!*!*******************########
-~~~~~~~::::::::::;;;;;;;;;;;;;==========!=!!!!!!!!!!!!*****************########
----~~~~~~~::::::::::;;;;;;;;;;;;=============!!!!!!!!!***************##########
------~~~~~~~~:~:::::::;;;;;;;;;;;;;============!!!!!!!!**************#######$$$
,--------~-~~~~~~~:::::::::::;;;;;;;;;==========!!!!!!!!!***********#########$$$
Note that it's not actually tied to a particular output format, so if you prefer HTML:
C implementation? Here you go. Straight conversion from Perl, though:
https://gist.github.com/tsee/5461671
It's pretty naively implemented. On top of that, if you use the TCC hack (see test.pl in the gist and https://github.com/tsee/p5-XS-TCC) to compile & run in memory, then the Perl code isn't so much slower than the C. In this case, that's because all the perl API C macros used are expanded and compiled with TCC, which is much less efficient than your system compiler. So just go ahead and use XS to wrap the C instead. That's easy as pie, too.