Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
 Аватар для Zolotovsky
0 / 0 / 0
Регистрация: 11.06.2022
Сообщений: 5

Кубик-Рубик, кратчайший алгоритм сборки

15.01.2025, 08:26. Показов 1187. Ответов 10

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Подскажите пожалуйста по Javascript.
Пытаюсь запрограммировать Кубик-Рубик.
Чтобы найти кротчайший алгоритм сборки.
Я создал класс Cubic
Let cubic1=new Cubic(name, X,Y,Z, color)
и таких cубиков у меня 3Х9=27.
Вапрос:
Как мне по координатам (x,y,z) определить какой это кубик (cubic1 или субик 21).
Тоесть к примеру координаты кубика я могу определить как cubic1.x, cubic1.y, cubic1.z,.

1). Как по координатам найти cubicN, который находится в точке (1,2,1)?

2). Как сделать цикл for 1 to 27 и перебирать cubic1-cubic27?

3) Как вставить в имя класса переменную N?
чтобы найти cubicN, cubicN+1 и. т.д.

С уважением
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.01.2025, 08:26
Ответы с готовыми решениями:

Кубик Рубика алгоритм сборки
Добрый вечер форумчане нужно реализовать сборку кубика рубика у меня щас только идея с вербального языка перевести на компьютерный язык но...

Кубик-рубик
Решил написать программу по сборке кубика рубика для ленивых, идея состоит в том что пользователю на екране показывается кубик 3 на 3, с 6...

Дорисовать кубик рубик
Господа требуется через canvas на форме нарисовать кубик рубик Лицевую часть сделал, а вот боковую и верхнуюю не смог procedure...

10
Молодой техлид)
Эксперт JSЭксперт HTML/CSS
 Аватар для mr_dramm
1818 / 1056 / 329
Регистрация: 17.07.2021
Сообщений: 2,147
Записей в блоге: 14
15.01.2025, 19:51
Лучший ответ Сообщение было отмечено Zolotovsky как решение

Решение

Цитата Сообщение от Zolotovsky Посмотреть сообщение
1). Как по координатам найти cubicN, который находится в точке (1,2,1)?
самый простой вариант использовать хеш таблицу Object, в качестве ключей использовать строки

JavaScript
1
const dict = {"1,1,1":  cubic1, "1,1,2":  cubic2, ... "3,3,3", cubic27}
Цитата Сообщение от Zolotovsky Посмотреть сообщение
2). Как сделать цикл for 1 to 27 и перебирать cubic1-cubic27?
можно написать функцию перебора например так
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
const dictByCoords = {},
  dictByN = {};
 
class Cubic {
  constructor(n, coord) {
    this.n = n;
    this.coord = coord
  }
}
 
const forEach = (cb) => {
  for (let x = 1; x <= 3; x++)
    for (let y = 1; y <= 3; y++) {
      for (let z = 1; z <= 3; z++) {
        cb(`${x},${y},${z}`);
      }
    }
};
 
const buildCubic = () => {
  let indx = 1;
  forEach((key) => {
    const cubic = new Cubic(indx, key);
    dictByCoords[key] = cubic;
    dictByN[indx] = cubic;
    indx++;
  });
};
buildCubic();
в данном случае forEach перебирает все координаты и создает новый кубик, в функцию forEach можно передать другой cb который будет делать чтото другое
также можно просто запустить цикл для перебора кубиков от 1 до 27
JavaScript
1
2
3
for(let i = 1; i <=27; i++) {
    dictByN[i]
}
Цитата Сообщение от Zolotovsky Посмотреть сообщение
3) Как вставить в имя класса переменную N?
может в имя переменной? создавать отдельный класс для каждого кубика не понятно зачем.

в моем вариант все экземпляры кубика хранятся в словарях dictByCoords и dictByN, если нужно достать кубик по координатам используем dictByCoords по индексу dictByN
1
 Аватар для voraa
1272 / 1237 / 183
Регистрация: 21.01.2024
Сообщений: 5,703
15.01.2025, 20:46
Цитата Сообщение от Zolotovsky Посмотреть сообщение
Я создал класс Cubic
Let cubic1=new Cubic(name, X,Y,Z, color)
и таких cубиков у меня 3Х9=27.
Что такое name что такое X,Y,Z
Цитата Сообщение от Zolotovsky Посмотреть сообщение
и таких cубиков у меня 3Х9=27.
Что такое 27 кубиков? Зачем 27? Или это составные части основного кубика-Рубика?
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3837 / 1682 / 431
Регистрация: 14.03.2022
Сообщений: 4,250
15.01.2025, 22:33
Zolotovsky, судя по вопросам - ты роешь подземный ход на чердак...
0
Молодой техлид)
Эксперт JSЭксперт HTML/CSS
 Аватар для mr_dramm
1818 / 1056 / 329
Регистрация: 17.07.2021
Сообщений: 2,147
Записей в блоге: 14
16.01.2025, 12:45
Цитата Сообщение от mr_dramm Посмотреть сообщение
также можно просто запустить цикл для перебора кубиков от 1 до 27
для dictByN лучше использовать массивы, тогда перебирвать кубики будет проще

тогда название переменной dictByN немного не верное dictionary - осначает словарь ключ значение и обычно используется с хеш таблицами, лучше назвать пременную cubics образуется как множественное от объекта который содержится в массиве

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
const dictByCoords = {},
  cubics = [];
 
class Cubic {
  constructor(indx, coord) {
    this.indx = indx;
    this.coord = coord;
  }
}
 
const forEachXYZ = (cb, startIndx = 1) => {
  let indx = startIndx
  for (let x = 1; x <= 3; x++)
    for (let y = 1; y <= 3; y++) {
      for (let z = 1; z <= 3; z++) {
        cb(`${x},${y},${z}`, indx);
        indx++
      }
    }
};
 
const buildCubic = () => {
  forEachXYZ((key, indx) => {
    const cubic = new Cubic(indx, key);
    dictByCoords[key] = cubic;
    cubics.push(cubic);
  });
};
buildCubic();
 
// перебираем в порядке добавления в массив
for (const cubic of cubics) console.log(cubic);
cubics.forEach((cubic) => console.log(cubic));
1
 Аватар для MallSerg
91 / 58 / 14
Регистрация: 16.11.2018
Сообщений: 274
16.01.2025, 14:24
У кубика не только 27 сегментов но и еще у каждого сегмента есть ориентация в пространстве. (6ть гипотетически возможных ориентаций в пространстве или от одной до трех реально возможных ориентаций для выбранного положения сегмента).
Все сегменты уникальны и не повторяются.
Гипотетически у кубика три варианта правильной сборки (ну или 12 если считать зеркальные отражения по осям).

Заданные вопросы имхо не имеют разумного ответа ну или скорее код не полный, вопрос задан недостаточно формально что бы дать разумный ответ =).
0
 Аватар для Zolotovsky
0 / 0 / 0
Регистрация: 11.06.2022
Сообщений: 5
16.01.2025, 16:09  [ТС]
Попробую уточнить вопрос:
У меня есть 27 кубиков, каждый кубик имеет свою координату и цвет.
JavaScript
1
2
3
4
5
6
7
8
9
Let cubic1=new Cubic(name, X,Y,Z, color);
Let cubic2=new Cubic(name, X,Y,Z, color);
...
Let cubic27=new Cubic(name, X,Y,Z, color);
Мне нужно сделать цикл 
For i=1 to 27
{
console.log("цвет=" +cubic{i}.color '); /* вот эта строка у меня не работает*/
}
Чтобы посмотреть цвета всех кубиков.

Не могу вставить переменную i в имя кубика.
0
 Аватар для voraa
1272 / 1237 / 183
Регистрация: 21.01.2024
Сообщений: 5,703
16.01.2025, 17:16
Цитата Сообщение от Zolotovsky Посмотреть сообщение
Не могу вставить переменную i в имя кубика.
Не знаю, зачем вам 27 кубиков, но если чего то несколько, то делается массив.
JavaScript
1
2
3
4
5
6
let cubics = [];
for (let i = 0; i < 27; i++)
    cubics.push(new Cubic(name, X, Y, Z, color));
 
for (let i = 0; i < 27; i++)
    console.log("цвет=", cubics{[i].color );
Цитата Сообщение от Zolotovsky Посмотреть сообщение
For i=1 to 27
Это на каком?
1
 Аватар для Zolotovsky
0 / 0 / 0
Регистрация: 11.06.2022
Сообщений: 5
17.01.2025, 08:06  [ТС]
Как-то-Так!

https://zlotik.ru/img/Cubic-Rubic.mp4
0
Супер-модератор
Эксперт JSЭксперт HTML/CSSЭксперт PHP
 Аватар для gogolik
3963 / 2081 / 832
Регистрация: 13.03.2010
Сообщений: 6,864
17.01.2025, 19:19
Zolotovsky, приведите полный пример, чтобы можно было воспроизвести проблему. Сейчас обрывки из обрывков, из которых никому ничего не понятно.
Ну а штатные экстрасенсы в отпуске.
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
18.01.2025, 18:33
Zolotovsky, вообще-то малых кубиков в кубике Рубика всего 26, центрального нет вовсе
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.01.2025, 18:33
Помогаю со студенческими работами здесь

Консольный кубик-рубик
Имеется массис 6х3х3, представляющий собой кубик-рубика, в нем есть 8 действий, 'Line 1 left/right', 'Line 3 left/right', 'Line 1/(1/3)...

Игра кубик рубик
Всем доброго времени суток. Помогите, пожалуйста, реализовать алгоритм программы, собирающей кубик рубик. Желательно, ещё псевдокод. ...

Кубик рубик с разными гранями
Купил кубик рубик с разными гранями. Не могли бы подсказать как его собрать. Алгоритмы сборки.

Кубик рубик С++ & OpenGL
Здравствуйте, я начал изучать С++ и мне дали задание сделать кубик рубика на С++ и OpenGL, до этого был front-end программистом, базу знаю....

Кубик Рубик в OpenGL - вращение
Недавно начал осваивать OpenGL, попытался сделать кубик рубика, но столкнулся с проблемой вращения его, до этого делал вращение только...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru