【问题标题】:Need help for an algo [closed]需要算法帮助[关闭]
【发布时间】:2021-11-12 08:58:21
【问题描述】:

我创建了一个网站,其中 div 的颜色与这个数组相比是随机生成的:

let pastelColor = [
    'ffaacc','ffbbcc','ffcccc','ffddcc','ffeecc','ffffcc','ffaadd','ffbbdd','ffccdd','ffdddd','ffeedd','ffffdd',
    'ffaaee','ffbbee','ffccee','ffddee','ffeeee','ffffee','ffaaff','ffbbff','ffccff','ffddff','ffeeff','ffffff',
    'ccaaff','ccbbff','ccccff','ccddff','cceeff','ccffff','ccaaee','ccbbee','ccccee','ccddee','cceeee','ccffee',
    'ccaadd','ccbbdd','ccccdd','ccdddd','cceedd','ccffdd','ccaacc','ccbbcc','cccccc','ccddcc','cceecc','ccffcc'
]

我尝试了几个带有 Case Switch 的算法,但该函数占用了太多空间,我好奇地想知道算法是否能够生成这个数组?

提前感谢那些回答的人

【问题讨论】:

  • 请选择一个可以帮助其他人解决相同问题的标题,因为 SO 是问题和答案的存储库,而不是个人帮助台。谢谢
  • 欢迎您!你为解决这个问题做了哪些努力?
  • 要生成这个数组,你需要尝试描述模式。仅凭外观很难猜测。如果你能分享你迄今为止尝试过的东西也会非常有帮助(请修正标题)
  • console.log(`hsla(${~~(360 * Math.random())},100%,70%,0.8)`)
  • “函数占用了太多空间”:怎么回事?那里有包含数千行代码的库?向我们展示该代码,以及它是如何出现问题的。

标签: javascript arrays algorithm


【解决方案1】:

如果算法能够生成这个数组?

当然。如果您需要该数组的确切顺序:

let pastelColor = Array.from("abcdef".repeat(8), (ch, i) => 
    (([a,...r]) => a+a+ch+ch+r[~~(i/6)%4].repeat(2))(i<24 ? "fcdef" : "cfedc")
);

console.log(pastelColor);

如果您对带有颜色代码的数组并不真正感兴趣,而只是对从中生成随机颜色感兴趣,那么:

let pick = str => str[Math.floor(Math.random() * str.length)].repeat(2);
let pastelColor = pick("cf") + pick("abcdef") + pick("cdef");

console.log(pastelColor);

【讨论】:

  • 或者,对于一个可能仅用于随机选择的数组,要荒谬迂腐,Array.from("abcdef".repeat(8), (ch, i) =&gt; (i&lt;24 ? "ff" : "cc") + ch.repeat(2) + (i &lt; 24 ? "cdef" : "fedc")[~~(i/6)%4].repeat(2))。 :-)
  • @Scott,谢谢。错过了那个特定的订单。更新了答案。
【解决方案2】:

您需要用转换后的十六进制颜色用随机生成的整数从 0 到 255 填充数组,如下所示:

const getRandomInt = (min, max) => {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min) + min);
}

const getRandomColorUnit = () => {
    const color = getRandomInt(0, 256).toString(16);
    if (color.length < 2) return '0' + color;
    return color;
};

const getRandomColor = () => `#${getRandomColorUnit()}${getRandomColorUnit()}${getRandomColorUnit()}`;

const colors = new Array(100).fill(0).map(getRandomColor);

console.log(colors);

【讨论】:

    猜你喜欢
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 2014-09-22
    • 2014-08-31
    • 2018-02-15
    • 2012-07-12
    • 1970-01-01
    相关资源
    最近更新 更多