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

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

15.01.2025, 08:26. Показов 1158. Ответов 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,146
Записей в блоге: 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
1233 / 1124 / 175
Регистрация: 21.01.2024
Сообщений: 5,127
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
3806 / 1643 / 428
Регистрация: 14.03.2022
Сообщений: 4,086
15.01.2025, 22:33
Zolotovsky, судя по вопросам - ты роешь подземный ход на чердак...
0
Молодой техлид)
Эксперт JSЭксперт HTML/CSS
 Аватар для mr_dramm
1818 / 1056 / 329
Регистрация: 17.07.2021
Сообщений: 2,146
Записей в блоге: 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
Сообщений: 269
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
1233 / 1124 / 175
Регистрация: 21.01.2024
Сообщений: 5,127
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
3942 / 2046 / 829
Регистрация: 13.03.2010
Сообщений: 6,736
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
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Ниже машинный перевод статьи The Thinkpad X220 Tablet is the best budget school laptop period . Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы,. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru