Алгоримика плетения резинок. Глава 1

Мир Когнито
Итак, теперь я готов формально записывать алгоритм плетения из резинок. (он зависит от вида применяемого приспособления, поэтому начнём с простейшего – рогатки. (или вилки с 2-мя зубьями.)
(это поможет не только (быстро и точно) учиться плетению изделий, но и затем придумывать свои изделия. Для чего, собственно, в конечном счёте и создана эта отрасль рукоделия.
Как, впрочем, и все остальные.)

Но сначала введём базовые обозначения:
1)Объекты:
Ст1 – это левый столбик (зуб) вилки, при её стандартном расположении – выемками к исполнителю.(в дальнейшем это имеется в виду без оговорок. Это важно, поскольку задаёт систему отсчёта координат для описания алгоритма).
Ст2 – это правый столбик.
(для более сложных приспособлений получится, понятноее дело, более сложная система обозначений столбиков. А для некоторых даже 2х-мерная. Например, для станков или двойных (оппозитных) вилок.)
К1 – левый конец (надеваемой) резинки.
К2 – правый конец резинки.
Р1 - резинка 1-го цвета (из набора цветов, устанавливаемых в начале описания алгоритма)
Р2 - резинка 2-го цвета и т.д.
П1 – резинка, надетая на столбик в 1-ой позиции, начиная сверху.
ПН – резинка, надетая на столбик в самой нижней позиции.
Под(<номер позиции>) – снятие резинки под
(а не над, как обычно. Поэтому по умолчанию здесь над. А это значит, что данная опция (операции) – может быть не указана.)
резинкой более высокой позиции.(а именно под номером <номер позиции>)

2)Операции:
Н - надеть. Например, н(к1, р1,  ст1) – надеть левый конец резинки 1-го цвета на левый столбик.

В – повернуть.(от русского слова вращение) Например в(к2, р1, по) – повернуть
(свободный.
Такое, понятное дело, получается, если конец резинки еще (ни разу) не надет или надет, а потом снят.)
правый конец резинки 1-го цвета на 180 градусов по часовой стрелке. (учитывать направление поворота тоже важно, т.к. в противном случае получится другой (или варьирующий. Причём случайно.) узор)
А, поскольку снимать под в одном шаге мы можем и в отношении нескольких позиций (А1-), то отображение данной опции может быть и таким: под(1,2) (то есть под позициями 1 и 2) Или таким под(1-3)(что означает под позициями 1,2,3)

С – снять. Например: с(п3, ст2, под(2) – снять резинку в 3-ьей позиции с правого столбика  под резинкой во 2-ой позиции.
Но снимать за 1 шаг мы можем сразу несколько резинок, не так ли? Поэтому обозначение операции снятия усложняется. Например, так:
с(п(2-3), ст2, под(1)) – снять за один шаг резинки в позициях 2 и 3 со правого столбика(, пронеся их) под резинкой в позиции 1.

Как, впрочем, и надевать.(за 1 шаг мы можем сразу несколько резинок) Поэтому и обозначение операции надевания усложняется. И понятно, как:
н(к1, р(1,2),  ст1)
Стоп, но что тут такое р(1,2)? Но ведь р1 и р2 – это соответственно резинки 1-го и 2-го цветов. Но нам-то (для алгоритма) важны позиции, а не цвета. А к тому же разве можем мы надеть куда-то резинку (пусть и какой-то конец её), еще не свободную (то есть не снятую (на данном конце. Который, впрочем, определяется тем, с какого столбика снимали) или не надетую вообще)
Отсюда понятно, что нужна реформа обозначений.

А именно, при надевании (за исключением первичного надевания – это, как теперь понятно, отдельная операция) нужно указывать не цвет надеваемой резинки, а (бывшую) позицию (на столбике) только что снятой резинки. Стоп, но разве бывшие позиции надеваемых резинок не приведены в предыдущей операции снятия? (потому что именно резинки этих позиций становятся в результате свободными)
Отсюда идея: а что если совместить в одном обозначении две операции, снятие и надевание? И назвать эту операцию перенос.

Тогда получится:
М – перенос.(по английски move - двигать) Например, м(п(2-3), ст1, под(1), ст2) (позицию на принимающем столбике указывать не надо, т.к. она всегда (по сути плетения) 1-ая) – снять с левого столбика резинки в позициях 2 и 3, пронеся их под резинкой в позиции 1 и надеть на правый столбик.
А кроме того, нужно первичное надевание резинки отображать сразу для обеих её концов (при этом поворот 2-го конца (в порядке надевания. А значит, его, порядок, тоже нужно указывать. А значит, нельзя список столбцов надевания отображать в виде нач.ст-кон.ст), если он есть, укажем в опциях операции:
Н(р1, ст(1,2), в(пр)) – надеть резинку 1-го цвета на столбик в последовательности 1,2, повернув её (перед надеванием на столбик 2 (А3-)) на 180 градусов против часовой стрелки.

А4-: Вот, забыл еще операцию:
Сбросить со столбика и отпустить между столбиков. Как её обозначить?
м(п(1), п(между 1,2)
А поскольку для вилки других вариантов (места) отпускания нет, то (для неё) можно 2-ую опцию не указывать – это и будет означать отпускание между столбиков)
Точно также для вилки (с 2-мя зубьями) можно не указывать столбики при надевании, ведь она надевается только на1-2 столбики.
А хотя, стоп,ведь можно, надев 1-ый её конец на 1-ый столбик, повернуть 2-ой, свободный, конец её на 180 градусов по часовой стрелке и надеть его на 1-ый же столбик. Тогда как это запишется? Вот так:
Н(ст1, в(по), ст1)
Но не может быть, конечно, такого: н(ст1-1) (с точки зрения реализации)

Примечания:
-А1: Резинка, конечно, может, поворачиваться (-скручиваться) и на другие углы. Например, кратные 90 град или вообще любые (но, желательно кратные (а точнее, делители) 360) Но этого пока, для решаемых задач, не требуется. Поэтому ждём соответствующих задач.

-А2: А вот надевать как потом будем всё это хозяйство? Всё вместе или по отдельности? Ну, вилка нам 2-ой возможности не даёт (так как при ней все свободные (в данный момент) концы резинок мы должны сразу надеть), а вот если воспользоваться станком (или хотя бы многозубчатой вилкой), то 2-ое – вполне возможно. А именно, путём надевания после одновременного снятия, разных резинок на разные столбики. Стоп, но как это практически реализовать?
Да уж, тут надо быть виртуозом где-то на уровне Паганини.

-А3: А если столбиков, на которые (сразу) надевается резинка будет не 2, а больше?
Отсюда идея (для развития): в дальнейшем указывать перед надеванием на какой столбик делать (даный) поворот. А поэтому его, данного поворота, параметры нужно указывать применительно к  каждому столбику, перед надеванием на который делается поворот (даже если он всего один)
Например, так: н(р1, ст1, в(по), ст2)

Что ж, теперь мы совершенно готовы для записи конкретных алгоритмов! Так сделаем же это!
Начнём с алгоритма цепочки «Сердце ангела». http://www.youtube.com/watch?v=Li3ousobIiE Заметим тут, что любой алгоритм в этой области – состоит из 3-х частей: начало, цикл, завершение. О 1-ой и 3-ьей частях поговорим позже (потому что их специфика – зависит от специфики 2-ой, главной, части), а начнём со 2-ой части. Потому что она наиболее проста. Ибо представляет из себя многократное (в зависимости от желаемой длины изделия) повторение одной и той же последовательности действий (-операций) (которую в дальнейшем я буду называть тело цикла), то есть это цикл.

Каково же тело цикла для цепочки «Сердце ангела»? Вот оно:
1.н(р2, ст1-2) –> н(р2)
2.(-А4) м(пн, ст1)
3.м(п1, ст2, ст1)
4.н(р2, ст1-2) -> н(р2)
5.м(пк, ст2)
6.м(п1, ст1, ст2)
7.н(р1, ст1-2)
8.м(п(2), ст1,)
9.м(пн, ст1, под(н-1))
10.м(п2, ст2)
11.м(пн, ст2, под(н-1)
Здесь новое обозначение: п(н-1) – позиция на 1 этаж выше, чем самая нижняя.

Каково же начало этого алгоритма? Оно готовит плетение, а также и завершение плетения (на котором совершается замыкание изделия, чтобы оно не распалось после плетения)
1.н(р1, ст1, в(по), ст2)
Вот и всё! Далее можно выполнять цикл.
Каково же завершение (этого) алгоритма?
1.м(пн, ст1)
2.м(пн, ст2)
3.м(п1, ст1, ст2)
4.р(п1-2, ст2, ст1) (вот и новая операция появилась?
Растянуть надетые на ст2 резинки в позициях 1-2(а на самом деле это (могут быть) 2 конца одной резинки)  так, чтобы другие их концы наделись на ст1)(это – вспомогательная операция, но очень упрощающая выполнение дальнейших действий)
5.н(з, п1-2, ст2) – надеть застежку (это новый объект, а именно крючок о 2-х концах (А7-)) на резинки в позициях 1 и 2 на правом столбике.
6.с(з, ст2) – снять застежку со столбика 2
7.ц(з,у0, ст1) – сцепить застежку (2-ой её крючок) за узел0 цепочки.(находящийся на столбике1)
А именно, за тот узел, который получился из самого 1-го шага алгоритма (включая его начало) и представляет сейчас из себя сложенную 8-кой резинку, сцеленную с последующим звеном цепочки.
8.с(у0, ст1)
Всё, изделие готово!

Далее приведу алгоритм браслета «Тротуар32 http://www.youtube.com/watch?v=dNDH28T5MsY  (он же «Французская коса»)
Начало:
1.н(р1*2,в(по)  - надеть 2 новые резинки 1-го цвета, повернув обе перед надеванием их  на правой столбик на 180 град по часовой стрелке
2.н(р2*2) – надеть 2 новые резинки 2-го цвета на оба столбика.
3.м(п(н,н-3), ст2, ст1)
4.н(р1*2)
5.м(п(н, н-3), ст1, ст2)
6.н(р2*2)
7.м(п(н, н-3), ст2, ст1)
8.повтор шага 4
Отсюда вывод: реальный повтор начинается на шаге 4 и заканчивается на шаге 7. В итоге тело цикла таково:
1.н(р1*2)
2.м(п(н, н-3), ст1, ст2)
3.н(р2*2)
4.м(п(н, н-3), ст2, ст1)

(а тело начала – это шаги 1-3):
1.н(р1*2,в(по)  - надеть 2 новые резинки 1-го цвета, повернув обе перед надеванием их  на правой столбик на 180 град по часовой стрелке
2.н(р2*2) – надеть 2 новые резинки 2-го цвета на оба столбика.
3.м(п(н,н-3), ст2, ст1)

Каково же завершение этого алгоритма?
1.м(п1,ст2)
2.м(п1,ст1) (в итоге одна резинка, а именно верхняя на обоих столбиках (полностью) высвобождается)
3.м(п1,ст2,ст1)
4.ц(з, п1-2, ст1)
5.с(з, ст1) – снять застежку (с зацепленными за неё резинками) со столбика 1
7.ц(з,у0, ст2)
8.с(у0, ст2)
Всё, изделие готово!

вперёд http://www.proza.ru/2015/08/01/1391