Q:

Algorithmic braiding - for mother's day

Task:
Your task is to create a program that, when given a number of strands and number of iterations of a braid, will tell where each strand goes. Rules are as follows:

The number of strands will always be odd, and between 3 and 6000 (inclusive)
When you start, the strands will be divided into 2 (almost) equal bunches, the left and the right. The left will have one more strand when you start. 

For an input of 7:
/ / / / \ \ \
1 2 3 4 5 6 7

Every iteration, the outermost strand of the side with more strands will be put in the center facing the opposite direction. The center is defined as between opposite facing strands: ////middle\\\.

1 iteration of input 7 (strand 1 was moved to the center):
/ / / \ \ \ \
2 3 4 1 5 6 7

Example:
Input:
3 4

Computations:
1 2 3
 \
2 1 3
   /
2 3 1
 \
3 2 1
   /
3 1 2

Output: 
3 1 2

Rules:

You do not need to display the slashes for strand direction, only the numbers.
You only need to display the numbers after the last iteration.
Your output will be space-deliminated ids of the strands
Input will be in the form: strands [space] iterations
The number of strands will always be odd, and 3<=x<=6000
This is code-golf, so the shortest code wins!

A:

GolfScript, 33 characters
~\),(@{:^1$[=]:y-.,2//y*^~}*;' '*

The input must be provided on stdin.
Examples (you may test online):
> 7 1
2 3 4 1 5 6 7

> 3 4
3 1 2

> 11 2
2 3 4 5 6 11 1 7 8 9 10

A:

Python: 179 240, 152 characters
First, the 179
For N strands and i iterations, this answer uses O(1) space and O(N) time. I simply compute the end position of each strand, never iterating over the intermediate positions!
big edit: golfed this answer by changing conditionals to boolean algebra. I also wrote a lengthy explanation of how it works. TL;DR: formulaic patterns, modulo division.
from sys import *
N,i=map(int,stdin.readline().split())
h,t=N/2,3*N
f=lambda p:(p>N)*(t/2-(p&-2))+p/2+1
for s in xrange(N):print f((2*s+1+(s>h)*(t-4*s-2)+i*(N+1-N*(s!=h)))%(2*N)),

Now the 152
This is more reasonably golfed python. (edit: thanks to Alex Thornton for editing from 165 to 152)
from sys import*;l=map;r=range;n,m=l(int,stdin.readline().split());b=r(1,n+1)
for k in r(m):v=b.pop((0,n-1)[k%2]);b.insert(n/2,v)
print' '.join(l(str,b)

