|
|
wrest, спасибо! Не могу процитировать Ваше сообщение, типовые проблемы с обрезанием страницы. Удобнее выдавать количество идущих подряд дырок перед проходом, что то же самое, как и после предыдущего прохода, конечно; добавил, для  выглядит так:
- 1 1L 0 [1, 6, 11, 16, 21, 26, 31, 36, 41, 46, 51, 56, 61, 66, 71, 76]
- 1 1R 1 [3, 8, 13, 18, 23, 28, 33, 38, 43, 48, 53, 58, 63, 68, 73]
- 1 2L 1 [2, 9, 16, 23, 30, 37, 44, 51, 58, 65, 72]
- 1 2R 3 [4, 11, 18, 25, 32, 39, 46, 53, 60, 67, 74]
- 2 1L 4 [5, 16, 27, 38, 49, 60, 71]
- 2 1R 6 [9, 20, 31, 42, 53, 64, 75]
- 2 2L 6 [7, 20, 33, 46, 59, 72]
- 2 2R 9 [11, 24, 37, 50, 63, 76]
- 3 1L 9 [10, 27, 44, 61]
- 3 1R 11 [16, 33, 50, 67]
- 3 2L 11 [12, 31, 50, 69]
- 3 2R 13 [18, 37, 56, 75]
- 4 1L 13 [14, 37, 60]
- 4 1R 14 [22, 45, 68]
- 4 2L 14 [15, 40, 65]
- 4 2R 16 [23, 48, 73]
- 5 1L 16 [17, 46, 75]
- 5 1R 18 [27, 56]
- 5 2L 18 [19, 50]
- 5 2R 28 [29, 60]
- 6 1L 33 [34, 69]
- 6 1R 34 [46]
- 6 2L 34 [35, 72]
- 6 2R 46 [47]
- 7 1L 51 [52]
- 7 1R 53 [66]
- 7 2L 53 [54]
- 7 2R 54 [68]
- 8 1L 54 [55]
- 8 1R 56 [71]
- 8 2L 56 [57]
- 8 2R 61 [73]
- 9 1L 61 [62]
- 9 1R 69 []
- 9 2L 69 [70]
Код:
- ffork(k)={
- my(L=8*k+4,s=vector(L,i,i));
- for(i=1,k,
- if(s==[],return(s));
- s1=s[1];
- d1=6*i-1;
- sex=vector((L-s1)\d1+1,ii,s1+(ii-1)*d1);
- print(i," 1L ",s1-1," ",sex);
- s=setminus(s,sex);
-
- if(s==[],return(s));
- smin=s[1];
- s1=s1+2*i;
- sex=vector((L-s1)\d1+1,ii,s1+(ii-1)*d1);
- print(i," 1R ",smin-1," ",sex);
- s=setminus(s,sex);
-
- if(s==[],return(s));
- s2=s[1];
- d2=6*i+1;
- sex=vector((L-s2)\d2+1,ii,s2+(ii-1)*d2);
- print(i," 2L ",s2-1," ",sex);
- s=setminus(s,sex);
-
- if(s==[],return(s));
- smin=s[1];
- s2=s2+2*i;
- sex=vector((L-s2)\d2+1,ii,s2+(ii-1)*d2);
- print(i," 2R ",smin-1," ",sex);
- s=setminus(s,sex);
-
- );\\for i
- return(s);
- };
|
|