Имя: Пароль:
IT
 
Белый кубик
0 Ненавижу 1С
 
гуру
11.10.11
08:58
Каждую грань белого кубика можно либо оставить белой, либо на ней нарисовать черную диагональ (одну для грани). Сколькими различными способами можно таким образом раскрасить кубик?

Два кубика раскрашены одинаковыми способами, если можно их повернуть в пространстве так, что их рисунки: слева, справа, сверху, снизу, спереди и сзади совпадают.
1 Нуф-Нуф
 
11.10.11
08:59
Джони, ло ханта эста ми лока. ВАТАФАК?
2 Ненавижу 1С
 
гуру
11.10.11
09:01
(1) засранец ты
3 Нуф-Нуф
 
11.10.11
09:04
(2) ну дык а че ты такие ребусы задаешь...
4 Ненавижу 1С
 
гуру
11.10.11
09:07
(3) попроще задать?
5 skunk
 
11.10.11
09:11
6 бит - это 64 различных значения
6 skunk
 
11.10.11
09:12
вторую часть никуя непонял
7 Темный Эльф
 
11.10.11
09:13
(5)
000001
100000
совпадут. Кроме того, диагонали можно нарисовать двумя способами, а можно оставить грань белой.
8 Ненавижу 1С
 
гуру
11.10.11
09:15
(7) да, если бы не повороты, то было бы 3^6=729 вариантов, но вот повороты все осложняют
9 skunk
 
11.10.11
09:16
(7)одну для грани
10 Темный Эльф
 
11.10.11
09:17
(9)Можно из правого верхнего в левый нижний, а можно из левого верхнего в правый нижний
11 Alexandr Puzakov
 
11.10.11
09:21
Кубик вроде как можно раскрасить 8! (восемь факториал) способами.
12 Alexandr Puzakov
 
11.10.11
09:22
Тьфу-ты! 6! способами :)
13 Темный Эльф
 
11.10.11
09:23
(11)Число способов явно меньше 729, как сказано в (8) :) Другое дело, что среди 729 способов есть совпадающие
14 Темный Эльф
 
11.10.11
09:29
(12)Я знаю седьмой
15 strh
 
11.10.11
09:30
2^0*13+2^1*11+2^2*9+2^3*7+2^4*5+2^5*3+2^6*1=367 как то так
16 Alexandr Puzakov
 
11.10.11
09:30
(13) эт я с разгону ляпнул, будет 6!. Каждый кубик можно также поставить в одно из 6! положений. И тогда получается...

6!*6! это для одного кубика варианты раскраска/поворот. Для двух кубиков будет хотя бы одно совпадение из 6!*6!*6! комбинаций.

Поправьте.
17 strh
 
11.10.11
09:33
(15) ошибся, значительно меньше, попробую посчитать
18 Темный Эльф
 
11.10.11
09:33
(16)6!=720. Только 9 совпадающих позиций? Я тебе с разгона назову вдвое больше.
19 Alexandr Puzakov
 
11.10.11
09:33
Полная дробь будет

(6!*6!*6!*6!)/6!

где в числителе все возможные комбинации каждого кубика, а в знаменателе количество возможных совпадений.
20 Ненавижу 1С
 
гуру
11.10.11
09:35
(19) по-моему полная чушь
21 Alexandr Puzakov
 
11.10.11
09:36
Или 6! это будет все возможные комбинации покраска/поворот для одного кубика?
22 Alexandr Puzakov
 
11.10.11
09:39
(20) ну поправь. Я с ходу решение ляпнул, вполне мог ошибиться. А "по-моему полная чушь" ни разу не опровержение :)
23 Ненавижу 1С
 
гуру
11.10.11
09:40
(22) посмотри (8), это ОЧЕНЬ грубая оценка сверху, но и она меньше чем (19)
24 Alexandr Puzakov
 
11.10.11
09:40
Короче, я склоняюсь к 6!*6! возможных комбинаций раскраска/положение каждого из двух кубиков.
25 Ненавижу 1С
 
гуру
11.10.11
09:41
(24) вот ты пишешь налево-направо факториалы, а какое обоснование его применения?
26 Alexandr Puzakov
 
11.10.11
09:45
(26) как какое? Через факториал как раз и вычисляются количество возможных комбинаций. Только возможно перед знаком факториала будет не n (т. е. 6), а n-1 (т. е. 5).
27 Ненавижу 1С
 
гуру
11.10.11
09:51
(26) вычисляют то вычисляют, но не в данном случае
28 Alexandr Puzakov
 
11.10.11
09:54
(27) а чем данный случай отличается от других случаев нахождения всех возможных комбинаций?
29 mrkorn
 
11.10.11
09:59
у кубика 3 оси симметрии по-идее надо 729 на 3 разделить
30 Ненавижу 1С
 
гуру
11.10.11
10:00
(28) такой пример, есть три монетки 1, 2 и 5 рублей. Каждая может на столе лежать орлом или решкой. Вопрос: сколько всего комбинаций?
31 Ненавижу 1С
 
гуру
11.10.11
10:01
(29) у кубика их больше
32 mrkorn
 
11.10.11
10:03
(31) осей 3 - есть еще плоскости симметрии
33 mikecool
 
11.10.11
10:06
(1) +100500 бугога
34 Ненавижу 1С
 
гуру
11.10.11
10:07
(32) осей больше:
3 через центры граней
4 через вершины
6 через середины ребер
35 mrkorn
 
11.10.11
10:11
14 вариантов раскраске, если грани не уникальные
36 Ненавижу 1С
 
гуру
11.10.11
10:12
(35) как посчитал?
37 Nagaru
 
11.10.11
10:13
(35) Мало
38 mrkorn
 
11.10.11
10:15
посчитал
0 граней черных - 1 вариант
1 - 1
2 - 3
3 - 2
умножить на 2
39 mrkorn
 
11.10.11
10:15
да же вру 2 грани черных  2 варианта
значит все 12
40 Nagaru
 
11.10.11
10:17
так ведь они не полностью черные, а только диагонали, поэтому вариантов больше
41 strh
 
11.10.11
10:17
я тебе сходу дам 15 вариантов это с раскрашенными только от 0 до 3 граней

а так вроде 70 вариантов
42 Alexandr Puzakov
 
11.10.11
10:18
(30) 3! кажется.
43 mrkorn
 
11.10.11
10:19
(40) ясно
44 Nagaru
 
11.10.11
10:19
(42) 3^2 кажется
45 Alexandr Puzakov
 
11.10.11
10:19
Откуда вы взяли цифру 3? У кубика 6 граней...
46 Ненавижу 1С
 
гуру
11.10.11
10:22
(42)(44) мда... ответ на (30) равен 2^3
47 Alexandr Puzakov
 
11.10.11
10:24
(44) количество комбинаций вычисляется факториалами, а не степенями.
48 Ненавижу 1С
 
гуру
11.10.11
10:24
(47) это смотря где ))
49 deputat2
 
11.10.11
10:26
6!*3!=2160
50 Ненавижу 1С
 
гуру
11.10.11
10:27
(49) смотри (8)
51 deputat2
 
11.10.11
10:31
6!*2=1440
52 Nagaru
 
11.10.11
10:34
охренеть, 1440 вариантов, вот уверен, что больше порядок - около 50 вариантов, но 1440... есть хоть одно обоснование того, что надо брать факториал и умножать его на 2 или просто так, понравились цифры и знаки?
53 Nagaru
 
11.10.11
10:35
(47) В том случае именно степенью, только я спутал числа. Факториал там был совершенно не при чем.
54 deputat2
 
11.10.11
10:42
тогда 2*2^6=256
55 Alexandr Puzakov
 
11.10.11
10:43
(50) выкладывай уже ответ и не томи.
56 deputat2
 
11.10.11
10:48
или 3^6-2^6=601
57 Alexandr Puzakov
 
11.10.11
10:55
Кто еще какие комбинации с числами 2, 3 и 6 предложит? :)
58 strh
 
11.10.11
11:10
перебор говорит что 58 вариантов
59 Nagaru
 
11.10.11
11:11
Ну да, как-то так и должно быть, только совсем непонятно почему?
60 strh
 
11.10.11
11:11
+(58) точнее 57
61 Nagaru
 
11.10.11
11:12
кстати, у тебя какие результаты? У меня вот что вышло:
0 линий - 1 вариант
1 линия - 1 вариант
2 линии - 4 варианта
3 линии - 6 вариантов
4 линии - 10 вариантов

Вот дальше я уже не считал.
62 strh
 
11.10.11
11:14
за меня 1с считал, но вообще
0-1
1-1
2-5
3-9
дальше хз
63 Nagaru
 
11.10.11
11:15
а как ты 1с заставил посчитать?
64 deputat2
 
11.10.11
11:15
29
65 deputat2
 
11.10.11
11:16
0 линий - 1 вариант
1 линия - 1 вариант
2 линии - 4 варианта
3 линии - 8 вариантов
4 линии - 7 вариантов
5 линии - 6 вариантов
6 линии - 2 вариантов
66 strh
 
11.10.11
11:21
(63) записываем в тз 3^6-729 вариантов в виде шестизначного числа в троичной системе
потом каждый прокручиваем в 24 положения которые может занимать куб, если такие в тз есть то удаляем, оставшиеся варианты уникальны
(65) см (62)
67 Steel_Wheel
 
11.10.11
11:26
У кубика 6 граней. На каждой грани может не быть диагоналей, быть 1 диагональ (слева-направо, сверху вниз), быть 2-ая диагональ, быть 2-е диагонали. Т.е. для каждой грани возможно 4 варианта...

т.е. вохможна раскраска от 000000 до 444444
68 Nagaru
 
11.10.11
11:29
Нарисовать можно только одну диагональ, две на одной грани - нельзя
69 strh
 
11.10.11
11:30
(67) из (0) "черную диагональ (одну для грани)"
70 Steel_Wheel
 
11.10.11
11:32
(68), (69) Тогда от 000000 до 333333
71 Steel_Wheel
 
11.10.11
11:39
Система будет 4-ичной, соответсвенно, в 10-ой системе: 1365 вариантов, если все грани различимы
72 Steel_Wheel
 
11.10.11
11:39
1366
73 strh
 
11.10.11
11:39
(70) да но при вращении 000001 и 100000 будет одной и той же раскраской
74 Steel_Wheel
 
11.10.11
11:40
(73) если грани неразличимы, тогда гемороя будет больше
75 strh
 
11.10.11
11:40
и не 4-ной а 3-ой от 000000 до 222222
76 Nagaru
 
11.10.11
11:41
Да блин, тут сто процентов надо считать их относительное положение. Количество вариантов не имеет значения.

При относительном расположении первая нарисованная диагональ уже исключается из расчета. Потому что все дальнейшие нарисованы уже относительно неё.

И тогда для двух диагоналей становится понятно как получается число 4

Вторая диагональ может быть нарисована либо на соседней грани, либо на противоположной (2 варианта) и она может быть нарисована параллельно первой или перпендикулярно (два вариантв), то есть всего возможных состояний будет 2^2
77 Nagaru
 
11.10.11
11:41
Да блин, тут сто процентов надо считать их относительное положение. Количество вариантов не имеет значения.

При относительном расположении первая нарисованная диагональ уже исключается из расчета. Потому что все дальнейшие нарисованы уже относительно неё.

И тогда для двух диагоналей становится понятно как получается число 4

Вторая диагональ может быть нарисована либо на соседней грани, либо на противоположной (2 варианта) и она может быть нарисована параллельно первой или перпендикулярно (два вариантв), то есть всего возможных состояний будет 2^2;
78 Steel_Wheel
 
11.10.11
11:41
(75) Православное программирование отрицательно влияет на мозг, ты прав.
79 Steel_Wheel
 
11.10.11
11:45
Значит, надо сдвиги контроллировать: 2 раскраски одинаковы, если "код" одной из них можно сдвинуть вправо/влево таким образом, что получится "код" второй  раскраски
80 deputat2
 
11.10.11
11:54
0 линий - 1 вариант
1 линия - 1 вариант
2 линии - 4 варианта
3 линии - 8 вариантов
4 линии - 10 вариантов
5 линий - 11 вариантов
6 линий - 10 вариантов

итого 45
81 strh
 
11.10.11
12:00
ответ в (60) не правильный, нашел ошибку в алгоритме вращения сейчас исправляю
(80) 0-1, 1 -1
2- варианты на соседних гранях //,\\,/\, на противоположных // и /\ итого 5
3-9...
82 Nagaru
 
11.10.11
12:02
(81) Неправильно, потому что // легко превращается в \\, так что для двух диагоналей вариантов все-таки 4, а не 5
83 deputat2
 
11.10.11
12:02
(81) в 2 ошибка в соседних // и \\ с легкостью переворачиваются отсюда  итого 4
84 deputat2
 
11.10.11
12:03
(81) и в 3 -  8 а не 9
85 Ненавижу 1С
 
гуру
11.10.11
12:03
если что - я ответа не знаю ))
86 Nagaru
 
11.10.11
12:04
может задача не решается формулами вовсе?
87 deputat2
 
11.10.11
12:04
значит 45 - никто пока не опроверг
88 strh
 
11.10.11
12:08
(83) нарисуй и попробуй перевернуть из // \\ не получить
89 Nagaru
 
11.10.11
12:24
(88) Черт побери, действительно не выходит...
90 strh
 
11.10.11
12:32
теперь получилось 44 варианта, надеюсь это мой последний ответ))

а (0) сам знает ответ
91 strh
 
11.10.11
12:33
точнее так
а (0) сам знает ответ???
92 Ненавижу 1С
 
гуру
11.10.11
12:35
(91) смотри (85)
93 deputat2
 
11.10.11
12:48
(92) где ж ты откапал такую задачу
94 Ненавижу 1С
 
гуру
11.10.11
12:48
(93) на просторах инета
95 deputat2
 
11.10.11
12:49
и что там нет ответа?
96 Ненавижу 1С
 
гуру
11.10.11
12:54
(95) нет ((
97 Alexandr Puzakov
 
11.10.11
13:55
Чуваки, не гоните, комбинаторика завещала решать подобные задачи через факториалы...
98 Nagaru
 
11.10.11
14:07
(97) Так ты попробуй тольк с обоснованием
99 Axel2009
 
11.10.11
14:08
всех возможных вариантов расположения кубика с диагоналями может быть 4374
100 salvator
 
11.10.11
14:10
1 0 0
101 Axel2009
 
11.10.11
14:18
даже больше 17496... хехе
102 Ненавижу 1С
 
гуру
11.10.11
14:42
у меня 86 выдала программа на C#
103 Axel2009
 
11.10.11
14:45
57 различных вариантов
104 Axel2009
 
11.10.11
14:48
выкладываем алгоритмы =)))
105 Ненавижу 1С
 
гуру
11.10.11
14:51
брешу, нашел баг: 135
106 Ненавижу 1С
 
гуру
11.10.11
14:52
косяки где-то
107 Axel2009
 
11.10.11
14:53
(105) ищи еще =)
108 Axel2009
 
11.10.11
15:03
N    Куб    Количество
01    000000    1
02    111111    1
03    222222    1
04    001001    3
05    002002    3
06    011011    3
07    022022    3
08    112112    3
09    122122    3
10    000001    6
11    000002    6
12    001002    6
13    011111    6
14    011211    6
15    012012    6
16    022122    6
17    022222    6
18    111112    6
19    122222    6
20    000111    8
21    000222    8
22    111222    8
23    000011    12
24    000022    12
25    001011    12
26    001021    12
27    001111    12
28    001221    12
29    002012    12
30    002022    12
31    002112    12
32    002222    12
33    011012    12
34    011022    12
35    012022    12
36    012112    12
37    012212    12
38    111122    12
39    112122    12
40    112222    12
41    000012    24
42    000112    24
43    000122    24
44    001012    24
45    001022    24
46    001112    24
47    001121    24
48    001122    24
49    001212    24
50    001222    24
51    002122    24
52    011112    24
53    011122    24
54    011212    24
55    011222    24
56    012122    24
57    012222    24
109 Ненавижу 1С
 
гуру
11.10.11
15:17
так стоп, кто делал зеркальную симметрию, тот сильно неправ, ее получить с помощью вращения в пространстве нельзя!
110 Axel2009
 
11.10.11
15:19
(109) я делал не зеркальную симметрию =)
111 Alexandr Puzakov
 
11.10.11
15:19
(108) это только раскраска для одного лишь кубика ;) Да и то, чет кажется варианты пропущены... А еще есть второй, а еще их нужно вращать...
112 Ненавижу 1С
 
гуру
11.10.11
15:20
(110) тогда что означает последний столбец?
113 Ненавижу 1С
 
гуру
11.10.11
15:21
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
   delegate int[] Mute(int[] a);
   class Program
   {
       static bool EqualArray(int[] a, int[] b)
       {
           for (int i = 0; i < 6; i++)
           {
               if (a[i] != b[i])
                   return false;
           }
           return true;
       }
       static int[] OperatorA(int[] s)
       {
           int[] res = new int[6];
           for (int i = 0; i < 6; i++)
           {
               if (i <= 3)
               {
                   res[(i + 1) % 4] = s[i] * (2 * (i % 2) - 1);
               }
               else
               {
                   res[i] = -s[i];
               }
           }
           return res;
       }
       static int[] index = new int[6] {1,4,3,5,0,2};
       static int[] OperatorB(int[] s)
       {
           
           int[] res = new int[6];
           for (int i = 0; i < 6; i++)
           {
               res[index[i]] = s[i];
           }
           return res;
       }
       static void Main(string[] args)
       {            
           int size = 3 * 3 * 3 * 3 * 3 * 3;
           List<int[]> list = new List<int[]>();
           for (int i = 0; i < size; i++)
           {
               list.Add(new int[6]);
               int i0 = i;
               for (int j = 0; j < 6; j++)
               {
                   int d=i0 % 3;
                   if (d == 2)
                   {
                       d = -1;
                   }
                   list[i][j] = d;
                   i0 /= 3;
               }
           }
           int res = 0;
           List<int[]> found = new List<int[]>();
           for (int i = 0; i < size; i++)
           {
               if (found.Exists(x => EqualArray(x, list[i])))
               {
                   continue;
               }
               res++;
               for (int j = 0; j < 6; j++)
               {
                   Console.Write("{0} ",list[i][j]);
               }
               Console.WriteLine();
               Mute M1 = (a => a);
               for (int j = 0; j < 4; j++)
               {
                   Mute M11 = M1;
                   if (j != 0)
                   {
                       M1 = (a => OperatorA(M11(a)));
                   }
                   Mute M2 = M11;
                   for (int k = 0; k < 3; k++)
                   {
                       Mute M22 = M2;
                       if (k != 0)
                       {
                           M2 = (a => OperatorB(M22(a)));
                       }
                       int[] a0 = M2(list[i]);
                       found.Add(a0);
                       //for (int j0 = 0; j0 < 6; j0++)
                       //{
                       //    Console.Write("{0} ", a0[j0]);
                       //}
                       //Console.WriteLine();                        
                   }
               }
               //Console.ReadKey();
           }
           Console.WriteLine(res);
           Console.ReadKey();
       }
   }
}
114 Axel2009
 
11.10.11
15:22
(111) я делал для 17496 вариантов. всех возможных вариантов с расскраской и расположением граней. 57 вариантов и амба
(112)
1 - перед
2 - лево
3 - верх
4 - зад
5 - право
6 - низ
115 Ненавижу 1С
 
гуру
11.10.11
15:23
(114) ничего не понял и вопрос про последний столбец остался
116 Axel2009
 
11.10.11
15:24
(113) извращенец
117 Ненавижу 1С
 
гуру
11.10.11
15:24
+(115) ага количество
а как ты получил из одной позиции целых 24, если без зеркальной симметрии их всего 12?
118 Axel2009
 
11.10.11
15:27
(115) если исходить из того, что мы куб не вращаем когда составляем различные варианты раскраски, и колво вариантов будет 729, то правая колонка означает количество поворотов куба.
ну смотри
если исходить из (114)
то куб имеет вид
123456, где 2 и 5 - лево и право соответственно, когда меняем 5 и 2, то куб будет выглядеть 453126
119 Ненавижу 1С
 
гуру
11.10.11
15:28
(118) ан нет, был неправ
120 Axel2009
 
11.10.11
15:30
Процедура КнопкаВыполнитьНажатие(Кнопка)
   ТЗ = Новый ТаблицаЗначений;
   ТЗ.Колонки.Добавить("Куб");
   Для Сч1 = 0 По 2 Цикл
       Для Сч2 = 0 По 2 Цикл
           Для Сч3 = 0 По 2 Цикл
               Для Сч4 = 0 По 2 Цикл
                   Для Сч5 = 0 По 2 Цикл
                       Для Сч6 = 0 По 2 Цикл
                           НоваяСтрока = ТЗ.Добавить();
                           НоваяСтрока.Куб = "" + Сч1 + Сч2 + Сч3 + Сч4 + Сч5 + Сч6;
                           //Добавить4Поворота(ТЗ, Сч1, Сч2, Сч3, Сч4, Сч5, Сч6);
                           //Добавить4Поворота(ТЗ, Сч4, Сч5, Сч3, Сч1, Сч2, Сч6);
                           //Добавить4Поворота(ТЗ, Сч2, Сч4, Сч3, Сч5, Сч1, Сч6);
                           //Добавить4Поворота(ТЗ, Сч5, Сч1, Сч3, Сч2, Сч4, Сч6);
                           //Добавить4Поворота(ТЗ, Сч1, Сч3, Сч5, Сч4, Сч6, Сч2);
                           //Добавить4Поворота(ТЗ, Сч4, Сч6, Сч5, Сч1, Сч3, Сч2);
                       КонецЦикла;
                   КонецЦикла;
               КонецЦикла;
           КонецЦикла;
       КонецЦикла;
   КонецЦикла;
   //ТЗУник.Очистить();
   ТЗУник = Новый ТаблицаЗначений;
   ТЗУник.Колонки.Добавить("Куб");
   ТЗУник.Колонки.Добавить("Количество");
   Пока ТЗ.Количество() > 0 Цикл
       ОбработкаПрерыванияПользователя();
       ТЗ2 = Новый ТаблицаЗначений;
       ТЗ2.Колонки.Добавить("Куб");
       УникальныйКуб = ТЗ[0].Куб;
       НоваяСтрока = ТЗУник.Добавить();
       НоваяСтрока.Куб = УникальныйКуб;
       Сч1 = Сред(УникальныйКуб, 1, 1);Сч2 = Сред(УникальныйКуб, 2, 1);Сч3 = Сред(УникальныйКуб, 3, 1);
       Сч4 = Сред(УникальныйКуб, 4, 1);Сч5 = Сред(УникальныйКуб, 5, 1);Сч6 = Сред(УникальныйКуб, 6, 1);
       Добавить4Поворота(ТЗ2, Сч1, Сч2, Сч3, Сч4, Сч5, Сч6);
       Добавить4Поворота(ТЗ2, Сч4, Сч5, Сч3, Сч1, Сч2, Сч6);
       
       Добавить4Поворота(ТЗ2, Сч2, Сч4, Сч3, Сч5, Сч1, Сч6);
       Добавить4Поворота(ТЗ2, Сч5, Сч1, Сч3, Сч2, Сч4, Сч6);
       
       Добавить4Поворота(ТЗ2, Сч1, Сч3, Сч5, Сч4, Сч6, Сч2);
       Добавить4Поворота(ТЗ2, Сч4, Сч6, Сч5, Сч1, Сч3, Сч2);
       Сч = 0;
       Для Каждого Строка Из ТЗ2 Цикл
           МассивТЗ = ТЗ.НайтиСтроки(Новый Структура("Куб", Строка.Куб));
           Для Каждого СтрокаТЗ Из МассивТЗ Цикл
               Сч = Сч + 1;
               ТЗ.Удалить(СтрокаТЗ);
           КонецЦикла;
       КонецЦикла;
       НоваяСтрока.Количество = Сч;
   КонецЦикла;
   ТЗУник.Сортировать("Количество, Куб");
   Сообщить(ТЗУник.Количество());
КонецПроцедуры

Процедура Добавить4Поворота(ТЗ, Сч1, Сч2, Сч3, Сч4, Сч5, Сч6)
   
   НоваяСтрока = ТЗ.Добавить();
   НоваяСтрока.Куб = "" + Сч1 + Сч2 + Сч3 + Сч4 + Сч5 + Сч6;
   
   НоваяСтрока = ТЗ.Добавить();
   НоваяСтрока.Куб = "" + Сч3 + Сч2 + Сч4 + Сч6 + Сч5 + Сч1;
   
   НоваяСтрока = ТЗ.Добавить();
   НоваяСтрока.Куб = "" + Сч4 + Сч2 + Сч6 + Сч1 + Сч5 + Сч3;
   
   НоваяСтрока = ТЗ.Добавить();
   НоваяСтрока.Куб = "" + Сч6 + Сч2 + Сч1 + Сч3 + Сч5 + Сч4;
       
КонецПроцедуры
121 Nallama
 
11.10.11
15:48
формула для ответа на первый вопрос - http://storage4.static.itmages.ru/i/11/1011/h_1318333672_8173725_0277d97b4c.png

считать лень
122 Ненавижу 1С
 
гуру
11.10.11
15:53
123 Nallama
 
11.10.11
15:53
(122) Да, похоже на правду
124 Nallama
 
11.10.11
16:11
(0) требую более адекватной формулировки второго вопроса!
125 Axel2009
 
11.10.11
16:18
(121) рассчитай формулу для 2х квадратиков и тем же заполнением из (0), т.е. 3 состояния. какое количество комбинаций??
126 Ненавижу 1С
 
гуру
11.10.11
16:55
(124) там один вопрос
127 Axel2009
 
11.10.11
17:07
(126) вот у нас есть 1 нарисованная сторона куба, и остальные пустые, эту сторону поворачиваем к нам вперед. будет /
если мы поворачиваем куб на 90 градусов по часовой стрелке она станет \ и будет как 2 считаться?
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
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


Функция ПодготовитьСтруктуруКуба(Ф, Т, Л, П, В, Н)
   
   Возврат Новый Структура("Ф, Т, Л, П, В, Н", Ф, Т, Л, П, В, Н);
   
КонецФункции

Функция ПредставлениеКуба(Куб)
   
   Возврат "" + Куб.Ф + " " + Куб.Т + " " + Куб.Л + " " + Куб.П + " " + Куб.В + " " + Куб.Н;
   
КонецФункции

Процедура ДобавитьПоворотыВН(ВсеПовороты, Раскраска)
   
   ВсеПовороты.Добавить(Раскраска);
   ВсеПовороты.Добавить(ПодготовитьСтруктуруКуба(Раскраска.П, Раскраска.Л, Раскраска.Ф, Раскраска.Т, 0-Раскраска.В, 0-Раскраска.Н));
   ВсеПовороты.Добавить(ПодготовитьСтруктуруКуба(Раскраска.Т, Раскраска.Ф, Раскраска.П, Раскраска.Л, Раскраска.В, Раскраска.Н));
   ВсеПовороты.Добавить(ПодготовитьСтруктуруКуба(Раскраска.Л, Раскраска.П, Раскраска.Т, Раскраска.Ф, 0-Раскраска.В, 0-Раскраска.Н));
   
КонецПроцедуры

Функция ВсеПоворотыКуба(Раскраска)
   
   ВсеПовороты = Новый Массив;
   
   ДобавитьПоворотыВН(ВсеПовороты, Раскраска);
   
   // Вращаем ЛП
   ДобавитьПоворотыВН(ВсеПовороты, ПодготовитьСтруктуруКуба(Раскраска.Н, Раскраска.В, 0-Раскраска.Л, 0-Раскраска.П, Раскраска.Ф, Раскраска.Т));
   ДобавитьПоворотыВН(ВсеПовороты, ПодготовитьСтруктуруКуба(Раскраска.Т, Раскраска.Ф, Раскраска.Л, Раскраска.П, Раскраска.Н, Раскраска.В));
   ДобавитьПоворотыВН(ВсеПовороты, ПодготовитьСтруктуруКуба(Раскраска.В, Раскраска.Н, 0-Раскраска.Л, 0-Раскраска.П, Раскраска.Т, Раскраска.Ф));
   
   // Вращаем ФТ
   ДобавитьПоворотыВН(ВсеПовороты, ПодготовитьСтруктуруКуба(Раскраска.Ф, Раскраска.Т, Раскраска.Н, Раскраска.В, Раскраска.Л, Раскраска.П));
   ДобавитьПоворотыВН(ВсеПовороты, ПодготовитьСтруктуруКуба(0-Раскраска.Ф, 0-Раскраска.Т, Раскраска.П, Раскраска.Л, Раскраска.Н, Раскраска.В));
   ДобавитьПоворотыВН(ВсеПовороты, ПодготовитьСтруктуруКуба(Раскраска.Ф, Раскраска.Т, Раскраска.В, Раскраска.Н, Раскраска.П, Раскраска.Л));
   
   Возврат ВсеПовороты;
   
КонецФункции

Процедура КнопкаВыполнитьНажатие(Кнопка)
   
   Результат = "";
   
   Кубы = Новый Соответствие;
   
   Для Ф = -1 По 1 Цикл
       Для Т = -1 По 1 Цикл
           Для Л = -1 По 1 Цикл
               Для П = -1 По 1 Цикл
                   Для В = -1 По 1 Цикл
                       Для Н = -1 По 1 Цикл
                           
                           Раскраска = ПодготовитьСтруктуруКуба(Ф, Т, Л, П, В, Н);
                           
                           Если Кубы.Получить(ПредставлениеКуба(Раскраска)) = Неопределено Тогда
                               
                               МассивПоворотов = ВсеПоворотыКуба(Раскраска);
                               
                               Для Каждого Поворот Из МассивПоворотов Цикл
                                   Кубы.Вставить(ПредставлениеКуба(Поворот), Истина);
                               КонецЦикла;
                               
                               Результат = Результат + Символы.ПС + ПредставлениеКуба(Раскраска);
                               
                           КонецЕсли;
                           
                       КонецЦикла;
                   КонецЦикла;
               КонецЦикла;
           КонецЦикла;
       КонецЦикла;
   КонецЦикла;
   
   Предупреждение(СтрЧислоСтрок(Результат) - 1);
   
КонецПроцедуры


Повороты, наверно, избыточны, но так проще. Всего получилось 65 вариантов:

-1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 0
-1 -1 -1 -1 -1 1
-1 -1 -1 -1 0 0
-1 -1 -1 0 -1 0
-1 -1 -1 0 -1 1
-1 -1 -1 0 0 0
-1 -1 -1 0 0 1
-1 -1 -1 0 1 1
-1 -1 -1 1 -1 1
-1 -1 -1 1 0 0
-1 -1 -1 1 0 1
-1 -1 -1 1 1 1
-1 -1 0 0 0 0
-1 -1 0 0 0 1
-1 -1 0 0 1 1
-1 -1 0 1 -1 -1
-1 -1 0 1 0 1
-1 -1 0 1 1 1
-1 0 -1 0 -1 -1
-1 0 -1 0 -1 0
-1 0 -1 0 -1 1
-1 0 -1 0 0 0
-1 0 -1 0 1 -1
-1 0 -1 1 -1 -1
-1 0 -1 1 -1 1
-1 0 -1 1 0 0
-1 0 -1 1 0 1
-1 0 -1 1 1 0
-1 0 -1 1 1 1
-1 0 0 0 -1 -1
-1 0 0 0 0 0
-1 0 0 0 0 1
-1 0 0 0 1 1
-1 0 0 1 0 -1
-1 0 0 1 0 1
-1 0 1 1 0 -1
-1 0 1 1 1 0
-1 1 -1 1 -1 1
-1 1 -1 1 0 -1
-1 1 -1 1 0 0
-1 1 0 0 -1 -1
-1 1 0 0 -1 0
-1 1 0 0 0 0
-1 1 0 1 -1 1
-1 1 0 1 0 0
-1 1 1 1 0 -1
-1 1 1 1 1 -1
0 0 0 0 0 0
0 0 0 1 -1 1
0 0 1 1 -1 1
0 0 1 1 0 -1
0 1 0 1 -1 1
0 1 0 1 0 -1
0 1 0 1 0 0
0 1 0 1 0 1
0 1 0 1 1 -1
0 1 1 1 -1 1
0 1 1 1 0 -1
0 1 1 1 0 0
0 1 1 1 1 0
1 1 1 1 -1 -1
1 1 1 1 -1 0
1 1 1 1 -1 1
1 1 1 1 0 0
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
Ошибся в строках
  // Вращаем ФТ
  ДобавитьПоворотыВН(ВсеПовороты, ПодготовитьСтруктуруКуба(Раскраска.Ф, Раскраска.Т, Раскраска.Н, Раскраска.В, Раскраска.Л, Раскраска.П));
  ДобавитьПоворотыВН(ВсеПовороты, ПодготовитьСтруктуруКуба(0-Раскраска.Ф, 0-Раскраска.Т, Раскраска.П, Раскраска.Л, Раскраска.Н, Раскраска.В));
  ДобавитьПоворотыВН(ВсеПовороты, ПодготовитьСтруктуруКуба(Раскраска.Ф, Раскраска.Т, Раскраска.В, Раскраска.Н, Раскраска.П, Раскраска.Л));

Надо:
   // Вращаем ФТ
   ДобавитьПоворотыВН(ВсеПовороты, ПодготовитьСтруктуруКуба(0-Раскраска.Ф, 0-Раскраска.Т, Раскраска.Н, Раскраска.В, Раскраска.Л, Раскраска.П));
   ДобавитьПоворотыВН(ВсеПовороты, ПодготовитьСтруктуруКуба(Раскраска.Ф, Раскраска.Т, Раскраска.П, Раскраска.Л, Раскраска.Н, Раскраска.В));
   ДобавитьПоворотыВН(ВсеПовороты, ПодготовитьСтруктуруКуба(0-Раскраска.Ф, 0-Раскраска.Т, Раскраска.В, Раскраска.Н, Раскраска.П, Раскраска.Л));


Итого 53 варианта:
-1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 0
-1 -1 -1 -1 -1 1
-1 -1 -1 -1 0 0
-1 -1 -1 0 -1 -1
-1 -1 -1 0 -1 0
-1 -1 -1 0 -1 1
-1 -1 -1 0 0 0
-1 -1 -1 0 0 1
-1 -1 -1 0 1 1
-1 -1 -1 1 -1 -1
-1 -1 -1 1 -1 0
-1 -1 -1 1 -1 1
-1 -1 -1 1 0 0
-1 -1 -1 1 0 1
-1 -1 -1 1 1 1
-1 -1 0 0 -1 -1
-1 -1 0 0 -1 0
-1 -1 0 0 -1 1
-1 -1 0 0 0 0
-1 -1 0 0 0 1
-1 -1 0 0 1 1
-1 -1 0 1 -1 0
-1 -1 0 1 -1 1
-1 -1 0 1 0 0
-1 -1 0 1 0 1
-1 -1 0 1 1 1
-1 -1 1 1 -1 0
-1 0 -1 0 -1 0
-1 0 -1 0 -1 1
-1 0 -1 0 0 -1
-1 0 -1 0 0 0
-1 0 -1 0 1 -1
-1 0 -1 1 -1 0
-1 0 -1 1 -1 1
-1 0 -1 1 0 -1
-1 0 -1 1 0 0
-1 0 -1 1 0 1
-1 0 -1 1 1 -1
-1 0 -1 1 1 0
-1 0 0 0 -1 0
-1 0 0 0 -1 1
-1 0 0 0 0 0
-1 0 0 0 0 1
-1 1 -1 1 -1 1
-1 1 -1 1 0 0
-1 1 -1 1 1 -1
-1 1 0 0 0 0
0 0 0 0 0 0
0 1 0 1 -1 0
0 1 0 1 0 -1
0 1 1 1 -1 -1
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 - Старый рисунок.


Функция ПодготовитьСтруктуруКуба(Ф, Т, Л, П, В, Н)
   
   Возврат Новый Структура("Ф, Т, Л, П, В, Н", Ф, Т, Л, П, В, Н);
   
КонецФункции

Функция ПредставлениеКуба(Куб)
   
   Возврат "" + Куб.Ф + " " + Куб.Т + " " + Куб.Л + " " + Куб.П + " " + Куб.В + " " + Куб.Н;
   
КонецФункции

Процедура ДобавитьПоворотыВН(ВсеПовороты, Раскраска)
   
   ВсеПовороты.Добавить(Раскраска);
   ВсеПовороты.Добавить(ПодготовитьСтруктуруКуба(Раскраска.П, Раскраска.Л, Раскраска.Ф, Раскраска.Т, 0-Раскраска.В, 0-Раскраска.Н));
   ВсеПовороты.Добавить(ПодготовитьСтруктуруКуба(Раскраска.Т, Раскраска.Ф, Раскраска.П, Раскраска.Л, Раскраска.В, Раскраска.Н));
   ВсеПовороты.Добавить(ПодготовитьСтруктуруКуба(Раскраска.Л, Раскраска.П, Раскраска.Т, Раскраска.Ф, 0-Раскраска.В, 0-Раскраска.Н));
   
КонецПроцедуры

Функция ВсеПоворотыКуба(Раскраска)
   
   ВсеПовороты = Новый Массив;
   
   // Вращаем ВН
   ДобавитьПоворотыВН(ВсеПовороты, Раскраска);
   ДобавитьПоворотыВН(ВсеПовороты, ПодготовитьСтруктуруКуба(Раскраска.Т, Раскраска.Ф, Раскраска.Л, Раскраска.П, Раскраска.Н, Раскраска.В));
   
   // Вращаем ЛП
   ДобавитьПоворотыВН(ВсеПовороты, ПодготовитьСтруктуруКуба(Раскраска.Н, Раскраска.В, 0-Раскраска.Л, 0-Раскраска.П, Раскраска.Ф, Раскраска.Т));
   ДобавитьПоворотыВН(ВсеПовороты, ПодготовитьСтруктуруКуба(Раскраска.В, Раскраска.Н, 0-Раскраска.Л, 0-Раскраска.П, Раскраска.Т, Раскраска.Ф));
   
   // Вращаем ФТ
   ДобавитьПоворотыВН(ВсеПовороты, ПодготовитьСтруктуруКуба(0-Раскраска.Ф, 0-Раскраска.Т, Раскраска.Н, Раскраска.В, Раскраска.Л, Раскраска.П));
   ДобавитьПоворотыВН(ВсеПовороты, ПодготовитьСтруктуруКуба(0-Раскраска.Ф, 0-Раскраска.Т, Раскраска.В, Раскраска.Н, Раскраска.П, Раскраска.Л));
   
   Возврат ВсеПовороты;
   
КонецФункции

Процедура КнопкаВыполнитьНажатие(Кнопка)
   
   Результат = "Ф Т Л П В Н";
   
   Итоги = Новый Массив(7);
   Итоги[0] = 0;
   Итоги[1] = 0;
   Итоги[2] = 0;
   Итоги[3] = 0;
   Итоги[4] = 0;
   Итоги[5] = 0;
   Итоги[6] = 0;
   
   Кубы = Новый Соответствие;
   
   Для Ф = -1 По 1 Цикл
       Для Т = -1 По 1 Цикл
           Для Л = -1 По 1 Цикл
               Для П = -1 По 1 Цикл
                   Для В = -1 По 1 Цикл
                       Для Н = -1 По 1 Цикл
                           
                           Раскраска = ПодготовитьСтруктуруКуба(Ф, Т, Л, П, В, Н);
                           
                           Если Кубы.Получить(ПредставлениеКуба(Раскраска)) = Неопределено Тогда
                               
                               МассивПоворотов = ВсеПоворотыКуба(Раскраска);
                               
                               Для Каждого Поворот Из МассивПоворотов Цикл
                                   Кубы.Вставить(ПредставлениеКуба(Поворот), Истина);
                               КонецЦикла;
                               
                               Результат = Результат + Символы.ПС + ПредставлениеКуба(Раскраска);
                               
                               КоличествоНулей = ?(Раскраска.Ф = 0, 1, 0) + ?(Раскраска.Т = 0, 1, 0) + ?(Раскраска.Л = 0, 1, 0) + ?(Раскраска.П = 0, 1, 0) + ?(Раскраска.В = 0, 1, 0) + ?(Раскраска.Н = 0, 1, 0);
                               Итоги[6-КоличествоНулей] = Итоги[6-КоличествоНулей] + 1;
                               
                           КонецЕсли;
                           
                       КонецЦикла;
                   КонецЦикла;
               КонецЦикла;
           КонецЦикла;
       КонецЦикла;
   КонецЦикла;
   
   Предупреждение(СтрЧислоСтрок(Результат) - 1);
   
   Результат = Результат + Символы.ПС + Символы.ПС + "0: " + Итоги[0] + Символы.ПС + "1: " + Итоги[1] + Символы.ПС + "2: " + Итоги[2] + Символы.ПС + "3: " + Итоги[3] + Символы.ПС + "4: " + Итоги[4] + Символы.ПС + "5: " + Итоги[5] + Символы.ПС + "6: " + Итоги[6];
   
КонецПроцедуры


Результат:

Ф Т Л П В Н
-1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 0
-1 -1 -1 -1 -1 1
-1 -1 -1 -1 0 0
-1 -1 -1 0 -1 -1
-1 -1 -1 0 -1 0
-1 -1 -1 0 -1 1
-1 -1 -1 0 0 0
-1 -1 -1 0 0 1
-1 -1 -1 0 1 1
-1 -1 -1 1 -1 -1
-1 -1 -1 1 -1 0
-1 -1 -1 1 -1 1
-1 -1 -1 1 0 0
-1 -1 -1 1 0 1
-1 -1 -1 1 1 1
-1 -1 0 0 -1 -1
-1 -1 0 0 -1 0
-1 -1 0 0 -1 1
-1 -1 0 0 0 0
-1 -1 0 0 0 1
-1 -1 0 0 1 1
-1 -1 0 1 -1 0
-1 -1 0 1 -1 1
-1 -1 0 1 0 0
-1 -1 0 1 0 1
-1 -1 0 1 1 1
-1 -1 1 1 -1 0
-1 0 -1 0 -1 0
-1 0 -1 0 -1 1
-1 0 -1 0 0 -1
-1 0 -1 0 0 0
-1 0 -1 0 1 -1
-1 0 -1 1 -1 0
-1 0 -1 1 -1 1
-1 0 -1 1 0 -1
-1 0 -1 1 0 0
-1 0 -1 1 0 1
-1 0 -1 1 1 -1
-1 0 -1 1 1 0
-1 0 0 0 -1 0
-1 0 0 0 -1 1
-1 0 0 0 0 0
-1 0 0 0 0 1
-1 1 -1 1 -1 1
-1 1 -1 1 0 0
-1 1 -1 1 1 -1
-1 1 0 0 0 0
0 0 0 0 0 0
0 1 0 1 -1 0
0 1 0 1 0 -1
0 1 1 1 -1 -1
1 1 1 1 -1 -1

0: 1
1: 1
2: 5
3: 10
4: 16
5: 12
6: 8
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) Конечно. Вот пример поворота вокруг оси Верх-низ по часовой стрелке:
   ВсеПовороты.Добавить(Раскраска);
   ВсеПовороты.Добавить(ПодготовитьСтруктуруКуба(Раскраска.П, Раскраска.Л, Раскраска.Ф, Раскраска.Т, 0-Раскраска.В, 0-Раскраска.Н));
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
вот алгоритм поиска минимальной цепочки вращений от одного куба до аналогичного ему

function alert(x){
   WScript.Echo(x)
}
function dot_prod( v1, v2 ){
   //скалярное произведение векторов
   var s = 0
   for(var i=0;i<v1.length;i++) s+=v1[i]*v2[i]
   return s
}
function cross_prod( v1, v2 ){
   //векторное произведение векторов
   res = new Array()
   res[0] = v1[1]*v2[2] - v1[2]*v2[1]
   res[1] = v1[2]*v2[0] - v1[0]*v2[2]
   res[2] = v1[0]*v2[1] - v1[1]*v2[0]
   return res
}
function neg(v){
   //обратный вектор
   res = new Array()
   res[0] = -v[0]
   res[1] = -v[1]
   res[2] = -v[2]
   return res
}

I = [1,0,0] //изначальная позиция вектора U
J = [0,1,0]
K = [0,0,1] //изначальная позиция вектора V

function get_min_turns( u, v ){
   var res = ''
   while( dot_prod(I,u)!=1){
       omega = dot_prod(I,u)!=0 ?  K : cross_prod(u,I)
       res +='поворот \tu = '+u+'\tвокруг\t' + omega + '\n'
       if(dot_prod(omega,u)==0) u = cross_prod( omega, u)
       if(dot_prod(omega,v)==0) v = cross_prod( omega, v)
   }

   while( dot_prod(K,v)!=1){
       omega = dot_prod(K,v)!=0 ? I : cross_prod(v,K)
       res +='поворот \tv = '+v+'\tвокруг\t' + omega + '\n'
       if(dot_prod(omega,u)==0) u = cross_prod( omega, u)
       if(dot_prod(omega,v)==0) v = cross_prod( omega, v)
   }
   res += '--------------------------\nИтого :\tu = ' + u + '\t\tv = ' + v +'\n'
   return res
}

//тестируем:
//1. задаем 24 варианта расположения пары ортогональных векторов
pairs = []
pairs.push([     I , J ])
pairs.push([ neg(I), J ])
pairs.push([     J , K ])
pairs.push([ neg(J), K ])
pairs.push([     K , I ])
pairs.push([ neg(K), I ])

len = pairs.length
for(i=0;i<len;i++){
   v1 = pairs[i][0]
   v2 = pairs[i][1]
   for(j=0;j<3;j++){
       v2 = cross_prod(v1,v2)
       pairs.push([v1,v2])
   }
}

//2. выводим результаты
for(i=0;i<pairs.length;i++){
   v1 = pairs[i][0]
   v2 = pairs[i][1]
   s = ''+i+':\tu = ' + v1 + '\t\tv = ' + v2 +'\n--------------------------\n'
   s += get_min_turns( v1, v2 )
   alert(s)
}
227 NeeD
 
24.10.11
09:06
(224) Насчет удаления строк - я уже думал над этим... Попробую найти 100% рабочий вариант удаления строк в данной ситуации. По поводу вращения. Меня тоже такой вариант немного смущает и 24 комбинации - это абсолютно логично. Но, с одной стороны - вращение в 3 плоскостях на углы 90гр. - где противоречие - перебираем все комбинации углов... С другой стороны, вдруг при таком вращении некоторые комбинации просто выпадают... ну чисто теоретически (хотя слабо верится). Одним словом, для проверки моего варианта нужен новый алгоритм удаления строк и новый алгоритм получения 24 комбинаций пространственного положения :-). Практически нужно всё переписать.