{"ScriptPreparationCode":null,"TestCases":[{"Name":"transform1","Code":"var transform1 = (rowTemplate) =\u003E {\r\n if (!rowTemplate?.length) {\r\n return [[]];\r\n }\r\n\r\n const rows = rowTemplate.length;\r\n const cols = rowTemplate[0].length;\r\n\r\n const tiles = new Map();\r\n\r\n for (let row = 0; row \u003C rows; row\u002B\u002B) {\r\n for (let col = 0; col \u003C cols; col\u002B\u002B) {\r\n const id = rowTemplate[row][col];\r\n\r\n if (!tiles.has(id)) {\r\n tiles.set(id, { positions: [] });\r\n }\r\n\r\n tiles.get(id)?.positions.push({ row, col });\r\n }\r\n }\r\n\r\n const tilesByColumn = Array.from(tiles.keys()).sort((idA, idB) =\u003E {\r\n const posA = tiles.get(idA)?.positions[0];\r\n const posB = tiles.get(idB)?.positions[0];\r\n\r\n return posA.col === posB.col\r\n ? posA.row - posB.row\r\n : posA.col - posB.col;\r\n });\r\n\r\n const tilesByRow = Array.from(tiles.keys()).sort((idA, idB) =\u003E {\r\n const posA = tiles.get(idA)?.positions[0];\r\n const posB = tiles.get(idB)?.positions[0];\r\n\r\n return posA.row === posB.row\r\n ? posA.col - posB.col\r\n : posA.row - posB.row;\r\n });\r\n\r\n const tileMap = {};\r\n\r\n tilesByRow.forEach((rowId, index) =\u003E {\r\n tileMap[rowId] = tilesByColumn[index];\r\n });\r\n\r\n const result = Array(rows).fill(null)\r\n .map(() =\u003E Array(cols).fill(null));\r\n\r\n for (let row = 0; row \u003C rows; row\u002B\u002B) {\r\n for (let col = 0; col \u003C cols; col\u002B\u002B) {\r\n const originalId = rowTemplate[row][col];\r\n result[row][col] = tileMap[originalId];\r\n }\r\n }\r\n\r\n return result;\r\n};\r\n\r\nvar t1 = [\r\n [\u00221\u0022, \u00221\u0022, \u00222\u0022, \u00223\u0022, \u00224\u0022, \u00224\u0022],\r\n [\u00221\u0022, \u00221\u0022, \u00225\u0022, \u00226\u0022, \u00224\u0022, \u00224\u0022]\r\n];\r\n\r\nfor (var i=0; i \u003C 10000; i\u002B\u002B) {\r\n\ttransform1(t1);\r\n}","IsDeferred":false},{"Name":"transform2","Code":"var transform2 = (rowTemplate) =\u003E {\r\n if (!rowTemplate?.length) return [[]];\r\n\r\n const rows = rowTemplate.length;\r\n const cols = rowTemplate[0].length;\r\n \r\n const firstPositions = {};\r\n \r\n for (let row = 0; row \u003C rows; row\u002B\u002B) {\r\n for (let col = 0; col \u003C cols; col\u002B\u002B) {\r\n const id = rowTemplate[row][col];\r\n if (firstPositions[id] === undefined) {\r\n firstPositions[id] = {row, col};\r\n }\r\n }\r\n }\r\n \r\n const uniqueIds = Object.keys(firstPositions);\r\n \r\n const rowIds = [...uniqueIds].sort((a, b) =\u003E {\r\n const posA = firstPositions[a];\r\n const posB = firstPositions[b];\r\n return posA.row === posB.row ? posA.col - posB.col : posA.row - posB.row;\r\n });\r\n \r\n const colIds = [...uniqueIds].sort((a, b) =\u003E {\r\n const posA = firstPositions[a];\r\n const posB = firstPositions[b];\r\n return posA.col === posB.col ? posA.row - posB.row : posA.col - posB.col;\r\n });\r\n \r\n const tileMap = {};\r\n \r\n for (let i = 0; i \u003C rowIds.length; i\u002B\u002B) {\r\n tileMap[rowIds[i]] = colIds[i];\r\n }\r\n \r\n const result = Array(rows);\r\n for (let row = 0; row \u003C rows; row\u002B\u002B) {\r\n result[row] = new Array(cols);\r\n for (let col = 0; col \u003C cols; col\u002B\u002B) {\r\n result[row][col] = tileMap[rowTemplate[row][col]];\r\n }\r\n }\r\n \r\n return result;\r\n};\r\n\r\nvar t1 = [\r\n [\u00221\u0022, \u00221\u0022, \u00222\u0022, \u00223\u0022, \u00224\u0022, \u00224\u0022],\r\n [\u00221\u0022, \u00221\u0022, \u00225\u0022, \u00226\u0022, \u00224\u0022, \u00224\u0022]\r\n];\r\n\r\n\r\nfor (var i=0; i \u003C 10000; i\u002B\u002B) {\r\n\ttransform2(t1);\r\n}","IsDeferred":false}]}