⚠️ Warning: This is a draft ⚠️

This means it might contain formatting issues, incorrect code, conceptual problems, or other severe issues.

If you want to help to improve and eventually enable this page, please fork RosettaGit's repository and open a merge request on GitHub.

== Racket code == Why is the Racket code published off-site? Can we move it to the wiki or is it copyrighted? [[User:Fwend|Fwend]] ([[User talk:Fwend|talk]]) 23:33, 22 April 2016 (UTC)

== Task specification == Should the task define specific rules the birds follow, so implementations won't be too arbitrary? --[[User:Ledrug|Ledrug]] 18:40, 7 January 2013 (UTC)

:: There are several variants of the three rules of boids movements, but the original ones should be enough for this task. -[[User:Bearophile|bearophile]] 23:29, 7 January 2013 (UTC)

:Yep. We really do need something concrete to implement rather than a vague link to a Wikipedia article that does not seem to have any pseudo-code to follow. --[[User:Paddy3118|Paddy3118]] 19:58, 7 January 2013 (UTC)

:: I agree the Task specification is incomplete and needs improvements. (I think a Boids task is good for RosettaCode because the code needed for such simulation is not too much long, and it's a kind of task not overrepresented in RC.) -[[User:Bearophile|bearophile]] 23:29, 7 January 2013 (UTC)

::: This Python version is readable and it doesn't have obstacles. http://code.activestate.com/recipes/502240-boids-version-11/ Removing the GUI code it's about 120 lines of non-comment Python code. Is this too much for a RosettaCode Task? ::::It's not very good practice to rely on code as an explanation for an entire task. Explaining things in English, pseudocode, or diagrams/tables is preferred. Not everybody can read Python (including me). --[[User:Mwn3d|Mwn3d]] 04:27, 8 January 2013 (UTC)

::: A few things would be helpful: :::# What each bird would consider its ''local'' flock; :::# How much does individuals in a local flock affect a bird's steering (how close is crowded, by how much does a bird adjust its current heading to fit into its local flock, etc) :::# You asked for the birds to fly from left to right and avoid obstacles, again how much does each weigh in each bird's steering consideration. ::: I haven't looked into it carefully, but I think these should be mandated by the task for consistent implementations. Also it's questionable if a console text representation has enough spatial resolution to make the simulation workable, but that's a separate issue. --[[User:Ledrug|Ledrug]] 07:16, 8 January 2013 (UTC)

Huh. The output of that Racket implementation just crashes my browser about half a second in. It's been a while since I've come across such a total JS implementation bug. There ''might'' be a bug in the Racket code — I've not checked, to be honest — but the browser keeling over in response is really wrong. –[[User:Dkf|Donal Fellows]] ([[User talk:Dkf|talk]]) 12:31, 25 January 2014 (UTC) : It worked find for me. Like you said, no matter what the Racked output does, the browser should not crash, so I think we should focus the blame on your browser for now (what is it, BTW?). --[[User:Ledrug|Ledrug]] ([[User talk:Ledrug|talk]]) 00:25, 26 January 2014 (UTC)

== Python code for cave generation == The board was generated by this simple Python code:

from array import array
from math import hypot

nx = 85
ny = 16
background = '.'
foreground = '#'

mat = [array("c", background) * nx for _ in xrange(ny)]

def add_circle(mat, (cx, cy, r)):
    for y in xrange(cy - r, cy + r + 1):
        for x in xrange(cx - r, cx + r + 1):
            if hypot(cx - x, cy - y) <= r:
                if x >= 0 and x < len(mat[0]) and y >= 0 and y < len(mat):
                    mat[y][x] = foreground

for c in [(14, 2, 8), (nx / 2, ny / 2, 3), (nx - 17, ny - 2, 9)]:
    add_circle(mat, c)

for row in mat:
    print row.tostring()