фишкуМаджонгаМожноВыбрать = (индексы, индекс) => { var позиция = позицияИндексаФишкиМаджонга(индекс); // Проверяем заблокированность фишки одновременно с обеих сторон. var слева = уФишкиМаджонгаЕстьСоседи(индексы, позиция, 0, -2); var справа = уФишкиМаджонгаЕстьСоседи(индексы, позиция, 0, 2); if (слева && справа) { return false; } // Проверяем заблокированность сверху. for (var смещениеСтолбца = -1; смещениеСтолбца < 2; ++смещениеСтолбца) { if (уФишкиМаджонгаЕстьСоседи(индексы, позиция, 1, смещениеСтолбца)) { return false; } } return true; }; // // // // уФишкиМаджонгаЕстьСоседи = (индексы, позиция, смещениеСлоя, смещениеСтолбца) => { for (var смещениеРяда = -1; смещениеРяда < 2; ++смещениеРяда) { var позицияСоседа = [ позиция[0] + смещениеСлоя, позиция[1] + смещениеРяда, позиция[2] + смещениеСтолбца, ]; var индексСоседа = индексПозицииФишкиМаджонга(позицияСоседа); if (индексСоседа in индексы) { return true; } } return false; }; // // // // позицияИндексаФишкиМаджонга = (индекс) => { const x = Math.round(индекс / 1000000); const y = Math.round((индекс - x * 1000000) / 1000); const z = индекс - x * 1000000 - y * 1000; return [x, y, z]; }; // // // // индексПозицииФишкиМаджонга = (позиция) => { return позиция[0] * 1000000 + позиция[1] * 1000 + позиция[2]; };