旋转8x8位矩阵(由8个十六进制值表示)的高效JavaScript方法
我有一些字体表示为8个十六进制值的数组,它们依次表示8x8 LED数组中LED的状态 每个十六进制值等于位矩阵中的一行 例如,旋转8x8位矩阵(由8个十六进制值表示)的高效JavaScript方法,javascript,arrays,node.js,matrix,Javascript,Arrays,Node.js,Matrix,我有一些字体表示为8个十六进制值的数组,它们依次表示8x8 LED数组中LED的状态 每个十六进制值等于位矩阵中的一行 例如,[0x41,0x7F,0x7F,0x49,0x5D,0x41,0x63,0x00]/'E'表示字符“E”,如下所示: 011001 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 0 0 1 0 0 1 0 1 0 1 1 1 0 1 0 1 0 0 0 0 0 1 0 1 1 0 0 0 1 1 0 0 0 0 0 或者,更明显的是:
[0x41,0x7F,0x7F,0x49,0x5D,0x41,0x63,0x00]/'E'
表示字符“E”,如下所示:
011001
0 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1
0 1 0 0 1 0 0 1
0 1 0 1 1 1 0 1
0 1 0 0 0 0 0 1
0 1 1 0 0 0 1 1
0 0 0 0 0
或者,更明显的是:
█ █
█ █ █ █ █ █ █
█ █ █ █ █ █ █
█ █ █
█ █ █ █ █
█ █
█ █ █ █
在保持“阵列中的8个十六进制值”格式(作为输出)的同时,顺时针/逆时针旋转阵列的最佳选项(效率方面)是什么
const-lette=[0x41、0x7F、0x7F、0x49、0x5D、0x41、0x63、0x00];
控制台日志(字母);
const convertToByteMatrix=hexArray=>hexArray
.map(r=>r
.toString(2)
.padStart(六边形长度,“0”)
.拆分(“”)
);
const convertToHexArray=byteMatrix=>byteMatrix
.map(r=>parseInt(r
.join(“”,2)
.toString(16)
);
console.log(convertToByteMatrix(lette));
//改编自https://stackoverflow.com/a/42535/2407212
常量旋转顺时针=六边形=>{
常量byteMatrix=转换字节矩阵(六边形);
常量大小=六边形长度;
const rotatedByteArray=Array(size.fill().map(()=>Array(size.fill());
for(设i=0;i 控制台日志(旋转字母)代码>你所说的“效率”是什么意思?你不可能比O(n²)
(n是矩阵的宽度/高度)Hm更糟糕,也许“优雅”这个词更合适。我不太喜欢JavaScript的内置方法,所以我希望有一个比嵌套for循环更好的选项。当然,你可以使用reduce
或Array之类的东西。从开始,但最终总是归结为嵌套循环-只是语法不同。这就是我想要的,因为这样更容易理解它。