|
Белый кубик | ☑ | ||
---|---|---|---|---|
0
Ненавижу 1С
гуру
11.10.11
✎
08:58
|
Каждую грань белого кубика можно либо оставить белой, либо на ней нарисовать черную диагональ (одну для грани). Сколькими различными способами можно таким образом раскрасить кубик?
Два кубика раскрашены одинаковыми способами, если можно их повернуть в пространстве так, что их рисунки: слева, справа, сверху, снизу, спереди и сзади совпадают. |
|||
128
Ненавижу 1С
гуру
11.10.11
✎
17:09
|
(127) если есть поворот что все рисунки совпадают то одинаковые, в данном случае это одно и тоже
|
|||
129
Axel2009
11.10.11
✎
17:16
|
(128) ну как же совпадают то рисунки??
http://itmages.ru/image/preview/301149/7d4b44f6 |
|||
130
Axel2009
11.10.11
✎
17:18
|
||||
131
Nallama
11.10.11
✎
17:42
|
(126) Теперь осознала. Не сразу понятно, что второй абзац - это ограничение к первому вопросу.
В таком случае, 128 - это число вариантов с допущением, что диагональ ЛВ/ПН и ПВ/ЛН - разные варианты раскраски. Окончательный ответ однозначно меньше 117ти (общее число за вычетом "дублей" с одной диагональю). Остальное считать нужно.. |
|||
132
Axel2009
11.10.11
✎
17:52
|
(131) у меня больше. 203 комбинации получается =))))))
(0) спс за задачку! оч. интересно |
|||
133
Nallama
11.10.11
✎
18:00
|
(132) Аргументируй с позиций комбинаторики ;)
|
|||
134
Axel2009
11.10.11
✎
18:07
|
(131) 128 я тоже выходил на это число в одном из вариантах..
но вопрос, если принять, что 1 - перед 2 - лево 3 - верх 4 - зад 5 - право 6 - низ 022022 202202 220220 одинаковые кубы или нет? |
|||
135
Steel_Wheel
11.10.11
✎
18:11
|
(134) Да. Одинаковые.
|
|||
136
Axel2009
11.10.11
✎
18:43
|
(135) ну скрути и поповорачивай. удивишься =) они разные.
|
|||
137
Steel_Wheel
11.10.11
✎
18:47
|
(136) Так у тебя стоит один и тот же знак (2 -- это же вид знака?) на 4-ех гранях, кроме 2-ух противолежащих. Повернуть можно
|
|||
138
Steel_Wheel
11.10.11
✎
18:49
|
т.е. в одном случае не промаркированы
1) перед и зад 2) лево право 3) верх и низ |
|||
139
Axel2009
11.10.11
✎
18:52
|
(137) смотри (130) там один и тот же знак. 1 стоит, но при этом рисунки разные отображаются
|
|||
140
Axel2009
11.10.11
✎
18:53
|
так наверна понятней будет
http://storage8.static.itmages.ru/i/11/1011/h_1318344802_1453967_2b293fecd7.jpeg |
|||
141
SUA
11.10.11
✎
18:57
|
для 2х линий число вариантов разных посчитали хотя бы?
- линии на противоположных гранях, 2 варианта - линии на соседних гранях, пусть одна из них перед нами, другая сверху - +2 или +4 варианта? - у меня получается +4 т.к. ЛВ в ПН никак не переходит |
|||
142
RomanYS
11.10.11
✎
21:45
|
(141) на соседних гранях 3 варианта:
|\|\| |/|/| |/|\| можно повернуть в |\|/| Итого 5 вариантов для 2-х диагоналей. |
|||
143
RomanYS
12.10.11
✎
00:26
|
0 линий - 1 вариант
1 линия - 1 вариант 2 линии - 5 (смотри (143)) 3 линии - 8 (5 при расположении в линию + 3 варианта "на угле") 4 линии - 16 (6 при свободных клетках напротив + 10 при смежных свободных клетках) 5 линий - 10 вариантов 6 линий - ХЗ (меньше 32) вариантов итого 41+ХЗ |
|||
144
RomanYS
12.10.11
✎
00:32
|
+(143) поправка
3 линии - 9 (5 при расположении в линию + 4 варианта "на углу") итого 42+ХЗ |
|||
145
strh
12.10.11
✎
08:37
|
(108)(120) я тоже сначала так посчитал и получил 57 см.(60)
но потом нашел ошибку в этом алгоритме см.(81) дело в том что во время 4 поворотов значения на гранях куба относительно которых совершаются повороты меняютя т.е. НоваяСтрока.Куб = "" + Сч3 + Сч2 + Сч4 + Сч6 + Сч5 + Сч1; на самом деле надо добавлять если сч2=1 тогда сч2=2; если сч2=2 тогда сч2=1; если сч5=1 тогда сч5=2; если сч5=2 тогда сч5=1; например в (108) 000001 и 000002 оказываются одинаковыми т.к. при вращении 1 меняется на 2 у меня после внесения исправлений получилось 44 варианта, но могу и ошибаться |
|||
146
Axel2009
12.10.11
✎
09:29
|
(145) да я тоже так считал, ща бум разбираться =)
у меня получается из 2х линий 6 кубов. по алгоритму получается 60 кубов со всеми возможными линиями |
|||
147
Alexandr Puzakov
12.10.11
✎
09:30
|
Жостко... Может все-таки попробуем решить через факториалы?
|
|||
148
Axel2009
12.10.11
✎
09:30
|
(147) давай решай, показывай варианты
|
|||
149
Alexandr Puzakov
12.10.11
✎
09:33
|
(148) так я уже пробовал, комбинаторику забыл напрочь :) Нужно либо учебник доставать, либо хороший напутствующий пинок.
|
|||
150
Axel2009
12.10.11
✎
09:35
|
(149) (6!*6!*6!*6!)/6! = 4
|
|||
151
Alexandr Puzakov
12.10.11
✎
09:49
|
(150) чиво?
(6!*6!*6!*6!)/6! = 6!*6!*6! |
|||
152
Alexandr Puzakov
12.10.11
✎
09:51
|
6!*6!*6! = 373248000 многовато будет :)
|
|||
153
Alexandr Puzakov
12.10.11
✎
09:52
|
6! * 6! = 518400 маленько правдивее :)
|
|||
154
Axel2009
12.10.11
✎
09:59
|
(153) вариантов всех различных может быть 17496, не более.
|
|||
155
Axel2009
12.10.11
✎
10:22
|
есть кубик 012012 какие варианты его расположения в пространстве? 24кубика
|
|||
156
deputat2
12.10.11
✎
11:10
|
(145) ты близок к моему ответу 45. см. (80)
|
|||
157
deputat2
12.10.11
✎
11:12
|
(145) через отладчик найди нестыковки по моим линиям и там посмотрим где нестыкуемся...
|
|||
158
Alexandr Puzakov
12.10.11
✎
11:35
|
(154) это кто сказал?
|
|||
159
Axel2009
12.10.11
✎
11:48
|
(158) 2^6*24
|
|||
160
Axel2009
12.10.11
✎
11:48
|
(159)+ *3^6*24
|
|||
161
Mickeleangelo
12.10.11
✎
11:59
|
Повороты, наверно, избыточны, но так проще. Всего получилось 65 вариантов:
|
|||
162
Mickeleangelo
12.10.11
✎
12:00
|
Блин, исправьте, плиз, в (161) 1С на 1C.
|
|||
163
strh
12.10.11
✎
12:01
|
(146) дак смысл в том, что ответ 57 неправильный в предложенных тобой вариантах из (108) 10 и 11 варианты одинаковые
|
|||
164
Axel2009
12.10.11
✎
12:35
|
(163) , глянь (155) не могу найти где косяк у меня
|
|||
165
YV
12.10.11
✎
12:43
|
Каждая грань кубика может принимать 3 состояния (диагональ 1/диагональ 2/ пусто). Кубик имеет 6 граней. Следовательно все возможные комбинации кубика составляют 3 в степени 6 или 729.
|
|||
166
Axel2009
12.10.11
✎
12:49
|
(165) а еще 24 оборота. каждая грань может быть впереди их 6, и 4 оборота вокруг этой грани
|
|||
167
Mickeleangelo
12.10.11
✎
13:06
|
Ошибся в строках
// Вращаем ФТ
Надо: // Вращаем ФТ
Итого 53 варианта: -1 -1 -1 -1 -1 -1
|
|||
168
strh
12.10.11
✎
13:27
|
(164) в (108) ты привел все возможные варианты
вариант 000001 и 000002 получаются один из другого одним поворотом у тебя не учтено что при повороте диагонали меняются одна на другую |
|||
169
Axel2009
12.10.11
✎
13:35
|
(168) про 108 уже закрыли разговор, я там пересчитал все, но я не могу понять почему у меня повороты кубов
220220 и 012012 не сходятся |
|||
170
YV
12.10.11
✎
14:14
|
(166) Кубик можно рассматривать под бесконечно огромным количеством углов, но состояние кубика от этого никак не измениться. Так что не нужно учитывать обороты, только раскраску самого кубика.
Кроме того в некоторых случаях раскраска будет полностью совпадать. Т.е. среди этих 729 случаев есть полные дубли (их можно избежать, если условие задачи наделяет каждую сторону собственным уникальным признаком, например номером). |
|||
171
RomanYS
12.10.11
✎
14:18
|
(170) Вопрос не в том, как изменить условие, чтобы твой ответ стал правильным.
А в том как решить задачу при заданных условиях. |
|||
172
Axel2009
12.10.11
✎
14:25
|
(170) если пронумеровать каждую грань, тогда уже будет не 729 случаев. если мы не разделяем какая грань впереди, тогда 729, я не отрицаю.
|
|||
173
YV
12.10.11
✎
14:59
|
(171) Я не меняю условия. В первой задаче нет ни слова про вращение или разные углы обзора.
>>> "Каждую грань белого кубика можно либо оставить белой, либо на ней нарисовать черную диагональ (одну для грани). Сколькими различными способами можно таким образом раскрасить кубик?" |
|||
174
RomanYS
12.10.11
✎
15:00
|
(173) далее в (0)
"Два кубика раскрашены одинаковыми способами, если можно их повернуть в пространстве так, что их рисунки: слева, справа, сверху, снизу, спереди и сзади совпадают." По-моему как раз про вращение. |
|||
175
YV
12.10.11
✎
15:01
|
(172) Если пронумеровать, то будет 729 случаев, если не нумеровать то будет меньше, потому что в некоторых случаях кубик будет выглядеть одинаково, несмотря на разные стороны.
(174) Это уже вторая задача. |
|||
176
RomanYS
12.10.11
✎
15:03
|
(175) это второй абзац единственной задачи
|
|||
177
YV
12.10.11
✎
15:04
|
(176) Да ты прав. Просто второй абзац очень похож на самостоятельную задачу. Я таки невнимательно прочел и ошибся.
|
|||
178
Axel2009
12.10.11
✎
15:07
|
(175) ага. нумеруем каждую сторону от 1 до 6. и в зависимости от состояния впереди той или иной грани у нас есть 24 разных кубов. а у тебя в 729 куб со сторонами 000000 будет только 1.
|
|||
179
kittystark
13.10.11
✎
04:19
|
у меня 51 получилось
берем развертку куба U LFR D B //маской вида F B R L U D - представим заполнение сторон куба (Front, Back, Right, Left, Up, Down) //на соответствующей позиции цифры означают // 0 - нет диагонали // 1 - диагональ вида "слеш" (/) // 2 - диагональ вида "бэкслеш" (\) function alert(x){ WScript.echo(x) } function next(s){ //следующее число в троичной системе счисления var arr = s.split('') var pos = s.length-1 arr[pos] = parseInt(arr[pos]) + 1 while(arr[pos]==3 && pos>0){ arr[pos--] = 0 arr[pos] = parseInt(arr[pos]) + 1 } return arr.join('') } function dot(ch){ //меняем диагональ, если ее нет, оставляем ноль var n = parseInt(ch) if(n!=0){ return n==1?2:1 }else{ return 0 } } function turn_the_cube( cube, axis ){ var arr = cube.split('') //F B R L U D //0 1 2 3 4 5 switch(axis){ case 'x': // F B R L U D -> F' B' D' U' R' L' return '' + dot(arr[0]) + dot(arr[1]) + dot(arr[5]) + dot(arr[4]) + dot(arr[2]) + dot(arr[3]) case 'y': // F B R L U D -> U D R' L' B F return '' + arr[4] + arr[5] + dot(arr[2]) + dot(arr[3]) + arr[1] + arr[0] case 'z': // F B R L U D -> L R F B U' D' return '' + arr[3] + arr[2] + arr[0] + arr[1] + dot(arr[4]) + dot(arr[5]) } } //оси вокруг которых будем последовательно вращать куб //на 90 градусов против часовой стрелки //(после каждого поворота - анализ совпадений) //для получения 24 положений в пространстве //вращать будем так: на 1-ой оси - 4 раза, на 2-ой - 1 раз, // на следующей - 4, на следующей - 1, // на следующей - 4, на следующей - 1 ... axes = 'zyxzyzxzyxz' axes = axes.split('') var unique = [] for(cube='000000'; cube!='300000'; cube=next(cube)){ turned_cube = cube turn_once = false found = false for(i in axes){ for(j=0; j<(turn_once?1:4); j++){ turned_cube = turn_the_cube( turned_cube, axes[i] ) if(unique[turned_cube] == turned_cube){ found = true break } } if(found) break turn_once = !turn_once } if(!found) unique[cube] = cube } n = 0 for(i in unique){ n++ alert('unique '+ n +':\t'+unique[i]) } alert('всего ' + n + ' вариантов') |
|||
180
Alexandr Puzakov
13.10.11
✎
07:03
|
Мля, пора уже вводить голосовалку:
1. х < 50 2. 50 <= х < 150 3. 150 <= х <= 500 4. х > 500 :) |
|||
181
Alexandr Puzakov
13.10.11
✎
07:05
|
И судя по ответам СиПлюсПлюсников 1Ске пока ничего не грозит ;)
|
|||
182
Shaman100M
19.10.11
✎
13:41
|
у меня тоже 51.
000000 000001 000011 000012 000101 000102 000111 000112 000122 000202 000211 000212 000222 001111 001112 001122 001212 001222 002222 010101 010102 010111 010112 010121 010201 010210 010211 010212 010221 010222 011102 011111 011112 011122 011202 011211 011212 011220 011221 011222 012211 012212 012222 111111 111112 111211 111212 111222 112211 121212 121221 |
|||
183
Shaman100M
19.10.11
✎
13:46
|
Перем Мп[24];
Функция НайтиМинЗначение(ВхЗнач) МинЗнач = "222222"; Для М1 = 1 По 24 Цикл НовЗнач = ""; Для М2 = 1 По 6 Цикл НомерСимвола = Число(Сред(Мп[М1],2*М2 ,1)); ЗнакСимвола = Сред(Мп[М1],2*М2-1 ,1); ТекСимвол = Сред(ВхЗнач,НомерСимвола,1); ТекСимвол = ?((ЗнакСимвола = "-") И (ТекСимвол <> "0"),Строка(3 - Число(ТекСимвол)),ТекСимвол); НовЗнач = НовЗнач + ТекСимвол; КонецЦикла; МинЗнач = Мин(МинЗнач,НовЗнач); КонецЦикла; Возврат МинЗнач; КонецФункции Процедура Сформировать() СписокУникальныхКомбинаций = ЗначениеИзСтрокиВнутр("{""VL"",{}}"); Для М1 = 0 По 2 Цикл Для М2 = 0 По 2 Цикл Для М3 = 0 По 2 Цикл Для М4 = 0 По 2 Цикл Для М5 = 0 По 2 Цикл Для М6 = 0 По 2 Цикл ТекКомбинация = "" + М1 + М2 + М3 + М4 + М5 + М6; МинКомбинация = НайтиМинЗначение(ТекКомбинация); Если СписокУникальныхКомбинаций.НайтиЗначение(МинКомбинация) = 0 Тогда СписокУникальныхКомбинаций.ДобавитьЗначение(МинКомбинация); Сообщить(МинКомбинация); КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; Сообщить("Всего " + СписокУникальныхКомбинаций.РазмерСписка()); КонецПроцедуры //ФТЛПВН // 123456 Мп[1] = " 1 2 3 4 5 6";// Ф . крутим "фасад" по часовой. сам фасад меняется диагональ (на "чет") знак "-" Мп[2] = "-1-2 6 5 3 4";// Ф1 Мп[3] = " 1 2 4 3 6 5";// Ф2 Мп[4] = "-1-2 5 6 4 3";// Ф3 // берем другую грань и также вертим Мп[5] = " 3 4 2 1-5-6";// Л повернули на фасад левую. (Верх против часовой относительно Мп 1. знак "-" - диагональ поменялась) Мп[6] = "-3-4-6-5 2 1"; Мп[7] = " 3 4 1 2-6-5"; Мп[8] = "-3-4-5-6 1 2"; Мп[9] = " 2 1 4 3 5 6";// Т // повернули на фасад тыл. (В2) Мп[10] = "-2-1 6 5 4 3"; Мп[11] = " 2 1 3 4 6 5"; Мп[12] = "-2-1 5 6 3 4"; Мп[13] = " 4 3 1 2-5-6";// П // повернули на фасад правую (В почасовой) Мп[14] = "-4-3-6-5 1 2"; Мп[15] = " 4 3 2 1-6-5"; Мп[16] = "-4-3-5-6 2 1"; Мп[17] = "-5-6-3-4-2-1";// В повернули на фасад верх (Л по часовой) все диагонали инвертировались Мп[18] = " 5 6-1-2-3-4"; Мп[19] = "-5-6-4-3-1-2"; Мп[20] = " 5 6-2-1-4-3"; Мп[21] = "-6-5-3-4-1-2";// Н повернули на фасад низ (л против) Мп[22] = " 6 5-2-1-3-4"; Мп[23] = "-6-5-4-3-2-1"; Мп[24] = " 6 5-1-2-4-3"; |
|||
184
Alexandr Puzakov
19.10.11
✎
14:01
|
(182) фигня...
Смотри как возрастают различные вариации все стороны чистые 000000 одна сторона закрашена первым вариантом 000001 000010 000100 001000 010000 100000 Две стороны первым вариантом 000011 000101 001001 010001 100001 100010 100100 101000 110000 000110 001010 010010 100010 001100 010100 100100 011000 101000 Чувствуешь, что у тебя и всяких сиплюсплюсников лажа? |
|||
185
Alexandr Puzakov
19.10.11
✎
14:06
|
(183) 24 это откуда такое?
|
|||
186
Alexandr Puzakov
19.10.11
✎
14:09
|
(185) а, все, сообразил.
|
|||
187
Shaman100M
19.10.11
✎
14:09
|
(185) рисуем на сторонах куба Ф (фронт), т (тыл), л, п, н, в.
разворачиваем к себе куб стороной ф. крутим по оси фронт-тыл 4 раза. 4 положения. и так на каждой стороне - 24 положения |
|||
188
Alexandr Puzakov
19.10.11
✎
14:12
|
(187) я это уже понял. Осталось только дождаться того, кто правильный алгоритм раскраски напишет :)
|
|||
189
Shaman100M
19.10.11
✎
14:13
|
(184) "одна сторона закрашена первым или втрым вариантом" - все приводится к 000001 поворотами
|
|||
190
Alexandr Puzakov
19.10.11
✎
14:19
|
(189) с чего это? Отдельная сторона это отдельная сторона, а их 6.
|
|||
191
Alexandr Puzakov
19.10.11
✎
14:25
|
Ну или по другому, стороны называются A, B, C, D, E и F. Закрашивая по одной из них одним вариантом, мы может сделать все те же вращения. Итого, для одной только закрашеной стороны 6*24 вариантов, а вы все свели к одному.
|
|||
192
Shaman100M
19.10.11
✎
14:30
|
(191) нужны все варианты или нужны условия задачи?
|
|||
193
Alexandr Puzakov
19.10.11
✎
14:34
|
(192) нужны все варианты. В условии задачи ничего не сказано про сферический кубик в вакууме, у которого при вращении одна сторона становится другой и все стороны являются одной стороной.
|
|||
194
Alexandr Puzakov
19.10.11
✎
14:36
|
(192) ну или если конкретно: какой смысл имеет вращение кубика, если у него стороны никак не различаются?
|
|||
195
Shaman100M
19.10.11
✎
14:38
|
(194) чтобы убедиться в этом.
|
|||
196
Shaman100M
19.10.11
✎
14:41
|
Все варианты?
000000 000001 000002 000010 000020 000100 000200 001000 002000 010000 020000 100000 200000 000011 000022 001100 002200 110000 220000 000012 000021 001200 002100 120000 210000 000101 000110 001001 001010 010002 010020 020200 022000 100002 100020 200200 202000 000102 000120 000201 000210 001002 001020 002001 002010 010001 010010 010200 012000 020002 020020 020100 021000 100001 100010 100200 102000 200002 200020 200100 201000 000111 001011 001101 001110 010022 022200 100022 110002 110020 202200 220200 222000 000112 000121 001012 001021 001201 001210 002101 002110 010012 010021 021200 022100 100012 100021 120002 120020 120200 122000 201200 202100 210002 210020 210200 212000 000122 001022 002201 002210 010011 021100 100011 110200 112000 201100 220002 220020 000202 000220 002002 002020 010100 011000 020001 020010 100100 101000 200001 200010 000211 001102 001120 002011 012200 020022 102200 110001 110010 200022 220100 221000 000212 000221 001202 001220 002012 002021 002102 002120 011200 012100 020012 020021 101200 102100 120001 120010 120100 121000 200012 200021 210001 210010 210100 211000 000222 002022 002202 002220 011100 020011 101100 110100 111000 200011 220001 220010 001111 110022 222200 001112 001121 001211 002111 110012 110021 120022 122200 210022 212200 221200 222100 001122 002211 110011 112200 220022 221100 001212 001221 002112 002121 120012 120021 121200 122100 210012 210021 211200 212100 001222 002122 002212 002221 111200 112100 120011 121100 210011 211100 220012 220021 002222 111100 220011 010101 010120 010202 011002 011010 012020 020110 020201 020220 021001 022002 022010 100102 100110 100220 101001 101020 102002 200101 200202 200210 201010 202001 202020 010102 010110 010220 011001 011020 012002 020101 020202 020210 021010 022001 022020 100101 100120 100202 101002 101010 102020 200110 200201 200220 201001 202002 202010 010111 010122 011011 011022 021101 021110 022201 022210 100111 100122 101011 101022 110202 110220 112002 112020 201101 201110 202201 202210 220202 220220 222002 222020 010112 011021 021210 022101 100121 101012 120202 122020 201201 202110 210220 212002 010121 011012 021201 022110 100112 101021 120220 122002 201210 202101 210202 212020 010201 012010 020120 021002 100210 102001 200102 201020 010210 012001 020102 021020 100201 102010 200120 201002 010211 012011 012201 012210 020122 021022 021102 021120 100211 102011 102201 102210 110201 110210 112001 112010 200122 201022 201102 201120 220102 220120 221002 221020 010212 011210 012021 012101 020112 021021 021220 022102 100221 101201 102012 102110 120102 120201 121020 122010 200121 201012 201202 202120 210120 210210 211002 212001 010221 011201 012012 012110 020121 021012 021202 022120 100212 101210 102021 102101 120120 120210 121002 122001 200112 201021 201220 202102 210102 210201 211020 212010 010222 011101 011110 012022 020111 021011 022202 022220 100222 101101 101110 102022 110102 110120 111002 111020 200111 201011 202202 202220 220201 220210 222001 222010 011102 011120 012202 012220 020211 020222 022011 022022 101102 101120 102202 102220 110101 110110 111001 111010 200211 200222 202011 202022 220101 220110 221001 221010 011111 021111 101111 110122 110222 111022 112022 201111 222201 222202 222210 222220 011112 011121 021211 022111 101112 101121 110112 110121 111012 111021 120222 122022 122202 122220 201211 202111 210222 212022 212202 212220 221201 221210 222101 222110 011122 022211 101122 110111 111011 112202 112220 202211 220222 221101 221110 222022 011202 012120 020221 022012 101220 102102 120110 121001 200212 202021 210101 211010 011211 012111 021112 021121 101211 102111 110212 110221 112012 112021 120122 121022 122201 122210 201112 201121 210122 211022 212201 212210 221202 221220 222102 222120 011212 012121 021221 022112 101221 102112 120112 120221 121021 121201 121220 122012 122102 122110 201212 202121 210121 210212 211012 211202 211210 212021 212101 212120 011220 012102 020212 022021 101202 102120 120101 121010 200221 202012 210110 211001 011221 012112 021212 022121 101212 102121 120121 120212 121012 121202 121210 122021 122101 122120 201221 202112 210112 210221 211021 211201 211220 212012 212102 212110 011222 012122 022212 022221 101222 102122 111202 111220 112102 112120 120111 121011 121101 121110 202212 202221 210111 211011 211101 211110 220212 220221 222012 222021 012211 021122 102211 110211 112011 112201 112210 201122 220122 221022 221102 221120 012212 012221 021222 022122 102212 102221 111201 111210 112101 112110 120211 121102 121120 122011 201222 202122 210211 211102 211120 212011 220112 220121 221012 221021 012222 022222 102222 111101 111102 111110 111120 202222 220111 220211 221011 222011 111111 111122 112222 221111 222211 222222 111112 111121 122222 212222 221211 222111 111211 112111 112212 112221 121122 122211 211122 212211 221112 221121 221222 222122 111212 111221 112112 112121 121112 121121 121211 121222 122111 122122 122212 122221 211112 211121 211211 211222 212111 212122 212212 212221 221212 221221 222112 222121 111222 112122 121111 211111 222212 222221 112211 221122 121212 122121 211221 212112 121221 122112 211212 212121 |
|||
197
Shaman100M
19.10.11
✎
14:44
|
+ (196) расшифровка одной раскраски, 6 цифр, по порядку: фасад - тыл - левая - правая - верх - низ. 0 - белая 1 - "слэш", 2 - "бэкслэш"
|
|||
198
Alexandr Puzakov
19.10.11
✎
14:57
|
(196) не, их будет намного больше
|
|||
199
Alexandr Puzakov
19.10.11
✎
15:01
|
(196) фигани все в один упорядоченный ряд и будет видно.
|
|||
200
xenos
19.10.11
✎
15:10
|
1 - целиком черный
2 - целиком белый 3 - с одной белой 4 - одной черной 5,6 - С двумя белыми 2шт() 7,8 - С двумя черными 2шт() 9,10 - Три белых три черных, подбираем возможные только для одного цвета другие будут обратные. 2шт или привязанны к одной вершине или в форме скобы Итого 10 |
|||
201
Shaman100M
19.10.11
✎
15:40
|
(198) так, давай тогда пример, которого в (196) нет
|
|||
202
Alexandr Puzakov
19.10.11
✎
17:24
|
(201) упорядочь, очень сложно искать.
|
|||
203
xenos
19.10.11
✎
17:47
|
1 - целиком черный
2 - целиком белый 3 - с одной белой 4 - одной черной 5,6 - С двумя белыми 2шт() 7,8 - С двумя черными 2шт() 9,10 - Три белых три черных, подбираем возможные только для одного цвета другие будут обратные. 2шт или привязанны к одной вершине или в форме скобы Итого 10 |
|||
204
Shaman100M
19.10.11
✎
18:05
|
(202) Они уже упорядочены, по-строчно по тождественной раскраске. Можно, конечно, упорядочить в 1 столбец. Получится 729 значений, все по порядку. с 000000 по 222222
|
|||
205
Alexandr Puzakov
19.10.11
✎
18:44
|
(204) не надо тождественного упорядочивания, запихни все в одну колонку ТЗ и отсортируй по возрастанию, вот тогда все будет видно.
|
|||
206
kittystark
20.10.11
✎
10:20
|
(202),(205) вот точно набросаю "визуальный дебаггер" с диагонализируемым кубиком, чтоб по шагам все было видно, какая раскраска как вращается, после вращения каким соответствует, ну и чтоб количество уникальных вариантов (С УЧЕТОМ последнего предложения постановки задачи) можно было "ручками" посчитать
только домой с работы прийду, как доберусь до флэша... |
|||
207
Alexandr Puzakov
21.10.11
✎
07:23
|
(206) а смысл? Даже если вариантов раскраски всего 720 вариантов, то для одного кубика возможных комбинаций раскраска-поворот будет уже 720*24... Не трудновато ли будет все вручную посчитать? :)
|
|||
208
Axel2009
21.10.11
✎
09:57
|
(207) ну уже заколебал с 720, чес слово.
сколько вариантов покраски 2х квадратов тем же способом исходя из твоего алгоритма? |
|||
209
kittystark
21.10.11
✎
10:12
|
(207) предположим за сутки будет обработан один вариант раскраски, итого 729 суток, делим на 365, почти 2 года (за минусом суток)... т.е. время "конечно" и ограничено сверху
ха, делов-то, 2 года :) на самом деле для прохода всех 729 вариантов раскраски таки придется 729 раз нажать кнопку "next", автоматика сама выдаст для каждого шага найдены ли совпадения или нет, ну и поиграться можно будет - самому повращать, попроверять сейчас думаю над алгоритмом поиска минимального количества вращений от одной конфигурации куба к идентичной но повернутой, т.к. по идее цепочка вращений не должна превышать 4-х движений, это вместо максимальных 24-х перебором |
|||
210
Alexandr Puzakov
21.10.11
✎
10:51
|
(209) я и не утверждал, что именно 720...
|
|||
211
Axel2009
21.10.11
✎
10:56
|
(210) а в (12) кто писал? и продолжил про 720 в (207) тоже не ты? =)
|
|||
212
Alexandr Puzakov
21.10.11
✎
13:38
|
(211) в (207) разве утверждение?
|
|||
213
NeeD
21.10.11
✎
13:39
|
У меня получилось 84 варианта.
Заполняем все возможные комбинации, затем перебираем их и удаляем комбинации полученные вращением. Учитываем изменения рисунка! После этого в таблице остаются только уникальные комбинации. Процедура ЗаполнитьВсеКомбинации() Для Грань1 = 0 По 2 Цикл Для Грань2 = 0 По 2 Цикл Для Грань3 = 0 По 2 Цикл Для Грань4 = 0 По 2 Цикл Для Грань5 = 0 По 2 Цикл Для Грань6 = 0 По 2 Цикл Стр = Кубик.Добавить(); Стр.Грань1 = Грань1; Стр.Грань2 = Грань2; Стр.Грань3 = Грань3; Стр.Грань4 = Грань4; Стр.Грань5 = Грань5; Стр.Грань6 = Грань6; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; КонецПроцедуры Функция ПовернутьКубик(Грани, А, Б) ГраниПоворота = Новый Структура("Грань1, Грань2, Грань3, Грань4, Грань5, Грань6"); ГраниПоворота.Грань1 = Грани.Грань1; ГраниПоворота.Грань2 = Грани.Грань2; ГраниПоворота.Грань3 = Грани.Грань3; ГраниПоворота.Грань4 = Грани.Грань4; ГраниПоворота.Грань5 = Грани.Грань5; ГраниПоворота.Грань6 = Грани.Грань6; Если А <> 0 Тогда Если А = 1 ИЛИ А = 3 Тогда ГраниПоворота.Грань5 = ?(ГраниПоворота.Грань5 = 0, 0, ?(ГраниПоворота.Грань5 = 1, 2, 1)); ГраниПоворота.Грань6 = ?(ГраниПоворота.Грань6 = 0, 0, ?(ГраниПоворота.Грань6 = 1, 2, 1)); КонецЕсли; Для Цкл = 1 По А Цикл Пром = ГраниПоворота.Грань1; ГраниПоворота.Грань1 = ГраниПоворота.Грань2; ГраниПоворота.Грань2 = ГраниПоворота.Грань3; ГраниПоворота.Грань3 = ГраниПоворота.Грань4; ГраниПоворота.Грань4 = Пром; КонецЦикла; КонецЕсли; Если Б <> 0 Тогда Если Б = 1 ИЛИ Б = 3 Тогда ГраниПоворота.Грань1 = ?(ГраниПоворота.Грань1 = 0, 0, ?(ГраниПоворота.Грань1 = 1, 2, 1)); ГраниПоворота.Грань3 = ?(ГраниПоворота.Грань3 = 0, 0, ?(ГраниПоворота.Грань3 = 1, 2, 1)); КонецЕсли; Для Цкл = 1 По Б Цикл Пром = ГраниПоворота.Грань2; ГраниПоворота.Грань2 = ГраниПоворота.Грань6; ГраниПоворота.Грань6 = ГраниПоворота.Грань4; ГраниПоворота.Грань4 = ГраниПоворота.Грань5; ГраниПоворота.Грань5 = Пром; КонецЦикла; КонецЕсли; Возврат ГраниПоворота; КонецФункции Процедура УдалитьДубли() Грани = Новый Структура("Грань1, Грань2, Грань3, Грань4, Грань5, Грань6"); Для каждого Комбинация Из Кубик Цикл Грани.Грань1 = Комбинация.Грань1; Грани.Грань2 = Комбинация.Грань2; Грани.Грань3 = Комбинация.Грань3; Грани.Грань4 = Комбинация.Грань4; Грани.Грань5 = Комбинация.Грань5; Грани.Грань6 = Комбинация.Грань6; Для А = 0 По 3 Цикл Для Б = 0 По 3 Цикл ГраниПоворота = ПовернутьКубик(Грани, А, Б); Дубли = Кубик.НайтиСтроки(ГраниПоворота); Для каждого Стр Из Дубли Цикл Если Стр <> Комбинация Тогда Кубик.Удалить(Стр); КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; КонецПроцедуры Процедура КнопкаВыполнитьНажатие(Кнопка) ЗаполнитьВсеКомбинации(); УдалитьДубли(); КонецПроцедуры Если увидите ошибку - дайте знать. |
|||
214
NeeD
21.10.11
✎
13:43
|
Увидел визуально 2 одинаковые комбинации :-) Надо алгоритм подправить.
|
|||
215
NeeD
21.10.11
✎
13:50
|
Не, всё нормально... Я просто в форме колонку "Грань3" не вывел, вот визуально и появились одинаковые строки :-). Одним словом, подтверждаю 84.
|
|||
216
NeeD
21.10.11
✎
14:08
|
И всё таки ошибся... Не довернул кубик по 3-му измерению :-) Исправленный вариант:
Процедура ЗаполнитьВсеКомбинации() Для Грань1 = 0 По 2 Цикл Для Грань2 = 0 По 2 Цикл Для Грань3 = 0 По 2 Цикл Для Грань4 = 0 По 2 Цикл Для Грань5 = 0 По 2 Цикл Для Грань6 = 0 По 2 Цикл Стр = Кубик.Добавить(); Стр.Грань1 = Грань1; Стр.Грань2 = Грань2; Стр.Грань3 = Грань3; Стр.Грань4 = Грань4; Стр.Грань5 = Грань5; Стр.Грань6 = Грань6; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; КонецПроцедуры Функция ПовернутьКубик(Грани, А, Б, В) ГраниПоворота = Новый Структура("Грань1, Грань2, Грань3, Грань4, Грань5, Грань6"); ГраниПоворота.Грань1 = Грани.Грань1; ГраниПоворота.Грань2 = Грани.Грань2; ГраниПоворота.Грань3 = Грани.Грань3; ГраниПоворота.Грань4 = Грани.Грань4; ГраниПоворота.Грань5 = Грани.Грань5; ГраниПоворота.Грань6 = Грани.Грань6; Если А <> 0 Тогда Если А = 1 ИЛИ А = 3 Тогда ГраниПоворота.Грань5 = ?(ГраниПоворота.Грань5 = 0, 0, ?(ГраниПоворота.Грань5 = 1, 2, 1)); ГраниПоворота.Грань6 = ?(ГраниПоворота.Грань6 = 0, 0, ?(ГраниПоворота.Грань6 = 1, 2, 1)); КонецЕсли; Для Цкл = 1 По А Цикл Пром = ГраниПоворота.Грань1; ГраниПоворота.Грань1 = ГраниПоворота.Грань2; ГраниПоворота.Грань2 = ГраниПоворота.Грань3; ГраниПоворота.Грань3 = ГраниПоворота.Грань4; ГраниПоворота.Грань4 = Пром; КонецЦикла; КонецЕсли; Если Б <> 0 Тогда Если Б = 1 ИЛИ Б = 3 Тогда ГраниПоворота.Грань1 = ?(ГраниПоворота.Грань1 = 0, 0, ?(ГраниПоворота.Грань1 = 1, 2, 1)); ГраниПоворота.Грань3 = ?(ГраниПоворота.Грань3 = 0, 0, ?(ГраниПоворота.Грань3 = 1, 2, 1)); КонецЕсли; Для Цкл = 1 По Б Цикл Пром = ГраниПоворота.Грань2; ГраниПоворота.Грань2 = ГраниПоворота.Грань6; ГраниПоворота.Грань6 = ГраниПоворота.Грань4; ГраниПоворота.Грань4 = ГраниПоворота.Грань5; ГраниПоворота.Грань5 = Пром; КонецЦикла; КонецЕсли; Если В <> 0 Тогда Если В = 1 ИЛИ В = 3 Тогда ГраниПоворота.Грань2 = ?(ГраниПоворота.Грань2 = 0, 0, ?(ГраниПоворота.Грань2 = 1, 2, 1)); ГраниПоворота.Грань4 = ?(ГраниПоворота.Грань4 = 0, 0, ?(ГраниПоворота.Грань4 = 1, 2, 1)); КонецЕсли; Для Цкл = 1 По Б Цикл Пром = ГраниПоворота.Грань1; ГраниПоворота.Грань1 = ГраниПоворота.Грань6; ГраниПоворота.Грань6 = ГраниПоворота.Грань3; ГраниПоворота.Грань3 = ГраниПоворота.Грань5; ГраниПоворота.Грань5 = Пром; КонецЦикла; КонецЕсли; Возврат ГраниПоворота; КонецФункции Процедура УдалитьДубли() Грани = Новый Структура("Грань1, Грань2, Грань3, Грань4, Грань5, Грань6"); Для каждого Комбинация Из Кубик Цикл Грани.Грань1 = Комбинация.Грань1; Грани.Грань2 = Комбинация.Грань2; Грани.Грань3 = Комбинация.Грань3; Грани.Грань4 = Комбинация.Грань4; Грани.Грань5 = Комбинация.Грань5; Грани.Грань6 = Комбинация.Грань6; Для А = 0 По 3 Цикл Для Б = 0 По 3 Цикл Для В = 0 По 3 Цикл ГраниПоворота = ПовернутьКубик(Грани, А, Б, В); Дубли = Кубик.НайтиСтроки(ГраниПоворота); Для каждого Стр Из Дубли Цикл Если Стр <> Комбинация Тогда Кубик.Удалить(Стр); КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; КонецПроцедуры Процедура КнопкаВыполнитьНажатие(Кнопка) ЗаполнитьВсеКомбинации(); УдалитьДубли(); КонецПроцедуры Итого получилось 57. |
|||
217
Axel2009
21.10.11
✎
14:10
|
плохо поворачивал. это без поворотов если то 57 получится
|
|||
218
NeeD
21.10.11
✎
14:14
|
Вот ведь... Опять очепятка: Если В <> 0 Тогда
Если В = 1 ИЛИ В = 3 Тогда ГраниПоворота.Грань2 = ?(ГраниПоворота.Грань2 = 0, 0, ?(ГраниПоворота.Грань2 = 1, 2, 1)); ГраниПоворота.Грань4 = ?(ГраниПоворота.Грань4 = 0, 0, ?(ГраниПоворота.Грань4 = 1, 2, 1)); КонецЕсли; Для Цкл = 1 По Б Цикл Пром = ГраниПоворота.Грань1; ГраниПоворота.Грань1 = ГраниПоворота.Грань6; ГраниПоворота.Грань6 = ГраниПоворота.Грань3; ГраниПоворота.Грань3 = ГраниПоворота.Грань5; ГраниПоворота.Грань5 = Пром; КонецЦикла; КонецЕсли; нужно Для Цкл = 1 По В Цикл. Таким образом: Процедура ЗаполнитьВсеКомбинации() Для Грань1 = 0 По 2 Цикл Для Грань2 = 0 По 2 Цикл Для Грань3 = 0 По 2 Цикл Для Грань4 = 0 По 2 Цикл Для Грань5 = 0 По 2 Цикл Для Грань6 = 0 По 2 Цикл Стр = Кубик.Добавить(); Стр.Грань1 = Грань1; Стр.Грань2 = Грань2; Стр.Грань3 = Грань3; Стр.Грань4 = Грань4; Стр.Грань5 = Грань5; Стр.Грань6 = Грань6; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; КонецПроцедуры Функция ПовернутьКубик(Грани, А, Б, В) ГраниПоворота = Новый Структура("Грань1, Грань2, Грань3, Грань4, Грань5, Грань6"); ГраниПоворота.Грань1 = Грани.Грань1; ГраниПоворота.Грань2 = Грани.Грань2; ГраниПоворота.Грань3 = Грани.Грань3; ГраниПоворота.Грань4 = Грани.Грань4; ГраниПоворота.Грань5 = Грани.Грань5; ГраниПоворота.Грань6 = Грани.Грань6; Если А <> 0 Тогда Если А = 1 ИЛИ А = 3 Тогда ГраниПоворота.Грань5 = ?(ГраниПоворота.Грань5 = 0, 0, ?(ГраниПоворота.Грань5 = 1, 2, 1)); ГраниПоворота.Грань6 = ?(ГраниПоворота.Грань6 = 0, 0, ?(ГраниПоворота.Грань6 = 1, 2, 1)); КонецЕсли; Для Цкл = 1 По А Цикл Пром = ГраниПоворота.Грань1; ГраниПоворота.Грань1 = ГраниПоворота.Грань2; ГраниПоворота.Грань2 = ГраниПоворота.Грань3; ГраниПоворота.Грань3 = ГраниПоворота.Грань4; ГраниПоворота.Грань4 = Пром; КонецЦикла; КонецЕсли; Если Б <> 0 Тогда Если Б = 1 ИЛИ Б = 3 Тогда ГраниПоворота.Грань1 = ?(ГраниПоворота.Грань1 = 0, 0, ?(ГраниПоворота.Грань1 = 1, 2, 1)); ГраниПоворота.Грань3 = ?(ГраниПоворота.Грань3 = 0, 0, ?(ГраниПоворота.Грань3 = 1, 2, 1)); КонецЕсли; Для Цкл = 1 По Б Цикл Пром = ГраниПоворота.Грань2; ГраниПоворота.Грань2 = ГраниПоворота.Грань6; ГраниПоворота.Грань6 = ГраниПоворота.Грань4; ГраниПоворота.Грань4 = ГраниПоворота.Грань5; ГраниПоворота.Грань5 = Пром; КонецЦикла; КонецЕсли; Если В <> 0 Тогда Если В = 1 ИЛИ В = 3 Тогда ГраниПоворота.Грань2 = ?(ГраниПоворота.Грань2 = 0, 0, ?(ГраниПоворота.Грань2 = 1, 2, 1)); ГраниПоворота.Грань4 = ?(ГраниПоворота.Грань4 = 0, 0, ?(ГраниПоворота.Грань4 = 1, 2, 1)); КонецЕсли; Для Цкл = 1 По В Цикл Пром = ГраниПоворота.Грань1; ГраниПоворота.Грань1 = ГраниПоворота.Грань6; ГраниПоворота.Грань6 = ГраниПоворота.Грань3; ГраниПоворота.Грань3 = ГраниПоворота.Грань5; ГраниПоворота.Грань5 = Пром; КонецЦикла; КонецЕсли; Возврат ГраниПоворота; КонецФункции Процедура УдалитьДубли() Грани = Новый Структура("Грань1, Грань2, Грань3, Грань4, Грань5, Грань6"); Для каждого Комбинация Из Кубик Цикл Грани.Грань1 = Комбинация.Грань1; Грани.Грань2 = Комбинация.Грань2; Грани.Грань3 = Комбинация.Грань3; Грани.Грань4 = Комбинация.Грань4; Грани.Грань5 = Комбинация.Грань5; Грани.Грань6 = Комбинация.Грань6; Для А = 0 По 3 Цикл Для Б = 0 По 3 Цикл Для В = 0 По 3 Цикл ГраниПоворота = ПовернутьКубик(Грани, А, Б, В); Дубли = Кубик.НайтиСтроки(ГраниПоворота); Для каждого Стр Из Дубли Цикл Если Стр <> Комбинация Тогда Кубик.Удалить(Стр); КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; КонецПроцедуры Процедура КнопкаВыполнитьНажатие(Кнопка) ЗаполнитьВсеКомбинации(); УдалитьДубли(); КонецПроцедуры Получается 50. А кто ни будь ответ знает? |
|||
219
Mickeleangelo
21.10.11
✎
16:35
|
Продолжаю настаивать на 53 вариантах.
Обозначения граней: [Ф]ронт, [Т]ыл, [Л]ево, [П]раво, [В]ерх, [Н]из Обозначения рисунков: -1, 1 — диагонали, 0 — пусто. В таком случае вращение кубика вокруг оси, проходящей через грань записывается просто: Новый рисунок = 0 - Старый рисунок.
Результат:
|
|||
220
RomanYS
21.10.11
✎
17:22
|
У меня 55 получается, перебирал вручную
0: 1 1: 1 2: 5 3: 10 4: 20 5: 10 6: 8 |
|||
221
NeeD
21.10.11
✎
17:44
|
(219) А изменение рисунка при повороте на 90 и 270 учитывали?
|
|||
222
NeeD
21.10.11
✎
17:45
|
Задача сводится к правильному вращению кубика.
|
|||
223
Mickeleangelo
21.10.11
✎
17:54
|
(221) Конечно. Вот пример поворота вокруг оси Верх-низ по часовой стрелке:
ВсеПовороты.Добавить(Раскраска);
|
|||
224
Mickeleangelo
21.10.11
✎
18:03
|
(222)
Для каждого Комбинация Из Кубик Цикл
Этот код может неправильно отработать. Хотя, удаляем только вперед, поэтому ошибки может и не быть.
А вот Ваш метод вращений меня смущает. Тут ранее уже говорилось, что всего есть 24 положения: каждая грань может быть повернута к нам лицом (6 вариантов) и учитываем вращения её по кругу (4 варианта). 4?6=24 |
|||
225
RomanYS
21.10.11
✎
22:50
|
в (220) ошибся
Правильно: 51 вариант 0: 1 1: 1 2: 5 3: 10 4: 16 5: 10 6: 8 с (212) расхождение только при 5-ти диагоналях. При 5-ти диагоналях ставим кубик пустой стороной вниз. Положение верхней диагонали фиксируем, то есть другое положение не расматриваем - их можно получить поворотом на 90 градусов. Имеем лишь одно преобразование, сохраняющее верхнюю диагональ - поворот на 180 относительно вертикальной оси. Без учета этого поворота - 16 = 2^4 вариантов(4 боковых стороны, 2 положения каждой).Из этих 16 вариантов 4 симметричны(относительно указанного поворота) и 6 пар вариантов переходящих друг в друга (внутри каждой пары). Итого 10 различных вариантов при 1 пустой стороне с учетом поворотов. Надеюсь понятно. Иначе можно развертки рисовать крестом, нижнюю сторону можно не учитывать - все равно только 10 вариантов. Попробуй нарисовать свои 12. |
|||
226
kittystark
22.10.11
✎
02:16
|
вот алгоритм поиска минимальной цепочки вращений от одного куба до аналогичного ему
|
|||
227
NeeD
24.10.11
✎
09:06
|
(224) Насчет удаления строк - я уже думал над этим... Попробую найти 100% рабочий вариант удаления строк в данной ситуации. По поводу вращения. Меня тоже такой вариант немного смущает и 24 комбинации - это абсолютно логично. Но, с одной стороны - вращение в 3 плоскостях на углы 90гр. - где противоречие - перебираем все комбинации углов... С другой стороны, вдруг при таком вращении некоторые комбинации просто выпадают... ну чисто теоретически (хотя слабо верится). Одним словом, для проверки моего варианта нужен новый алгоритм удаления строк и новый алгоритм получения 24 комбинаций пространственного положения :-). Практически нужно всё переписать.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |