爪装置

爪装置

代码日历2024年第13天

第1部分

big gulp:每个置换?

又一个令人头疼的最短路径挑战。

所幸,给定的约束条件使问题看起来可解:最多100次按键 – 这意味着如果存在解,它就存在于10,000个排列中的一个:100 * 100 = 10,000;输入中每台机器用3行(加1行空行)表示,共4行。

我的输入有1280行。

因此,我的算法最多执行的计算次数为:

    100  * 100 ------  10000*   1280  /   4 ------    320 ======3200000

320万次计算,不算太坏。蛮力法可能是第一部分的一种选择。

值得一试!尝试破解解决方案。将字符串转换为整数。首先,我需要从每台机器的输入中提取六个重要数字:

“`javascript

input.split(‘n’).map(block => {let [ax, ay, bx, by, px, py] = […block.matchall(/d+/g).map(el => +el[0])]})

我在这里写下了代码。然后在代码编辑器中运行它。然后我进行调试和修复,直到看到我期望的结果。我的工作算法如下所示:```javascriptinput  .split('nn')  .map(block => [      ...block.matchall(/d+/g)    ].map(el => +el[0])  )

我犯了一些愚蠢的错误,但我现在在我的控制台中看到了以下内容:

[  [ 94, 34, 22, 67, 8400, 5400 ],  [ 26, 66, 67, 21, 12748, 12176 ],  [ 17, 86, 84, 37, 7870, 6450 ],  [ 69, 23, 27, 71, 18641, 10279 ]]

完美!准备进行10k次排列。

一些带有初始值的跟踪变量,嵌套循环计数为100,所有这些都减少了处理每台机器的过程:

let part1 = input.reduce( (total, machine) => {  let [ax, ay, bx, by, px, py] = machine  let min = Infinity  let mina = Infinity  let minb = Infinity  for (let a = 0; a < 100; a++) {    for (let b = 0; b < 100; b++) {      // ...    }  }  // ...})

接下来,一些条件、加法和乘法:

// 在嵌套循环内if ((a ax + b bx == px) && (a ay + b by == py)) {if (3 a + b a + b;}}

再次,我首先在这里写下了代码。

然后我将其复制到我的代码编辑器中并运行。

我看到了预期的获胜代币数量!

我兴奋地写下了其余的算法。

清理和调试后,这是最终的工作代码:

let part1 = input.reduce( (total, machine) => {    let [AX, AY, BX, BY, PX, PY] = machine    let min = Infinity    for (let A = 0; A < 100; A++) {        for (let B = 0; B < 100; B++) {            if ((A * AX + B * BX === PX) && (A * AY + B * BY === PY)) {                min = Math.min(min, 3 * A + B);            }        }    }    return total + min;}, 0);

在示例输入上运行它会产生正确的答案。

在我的难题输入上呢?

好吧,它在一秒钟内就完成了,并在数千个答案中生成了一个答案。

正确吗?

是的!

太棒了!

我不需要计算机科学知识就能将我的蛮力算法重构为可以解决第二部分的东西。

不过,我还是很高兴看到这个结果!

第2部分

yyyuuupp。正是我所担心的。

1万亿?哎呀!

就像昨天的第二部分一样,我感到很沮丧。

太糟糕了。在连续10天获得2星后,我连续3天获得1星。

公平地说,这通常是我每年获得0星或1星的地方。至少我得到了1星!

开始第14天。

以上就是爪装置的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1501165.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 23:19:52
下一篇 2025年12月19日 23:20:05

相关推荐

  • 解决 Mongoose/MongoDB 脚本挂起问题:深入理解连接生命周期

    本文深入探讨了 Mongoose/MongoDB 脚本在执行 drop() 或 insertMany() 等操作时出现挂起的问题。核心原因在于对 Mongoose 连接状态和事件监听机制的误解,特别是滥用 connection.once(‘connected’, &#8230…

    2025年12月20日
    000
  • React 组件间数据传递:核心策略与实践

    在 React 应用中,组件间的数据传递是构建复杂界面的核心。本文将深入探讨如何通过 Props 实现父子组件间的单向数据流,以及如何利用状态提升(Lifting State Up)在兄弟组件或非直接关联组件间共享和更新数据。我们还将简要提及 Context API、Redux 等高级状态管理方案,…

    2025年12月20日
    000
  • JavaScript动态操作CSS:正确访问CSSRule对象的样式属性

    本教程详细介绍了在JavaScript中如何正确访问和操作通过document.styleSheets获取的CSS规则(CSSRule)的样式属性。核心在于,CSS属性值需通过CSSRule对象的style属性来访问,而非直接在CSSRule对象上查找。文章提供了示例代码,并强调了使用驼峰命名法访问…

    2025年12月20日
    000
  • JavaScript 中 CSSRule 对象的属性访问指南

    本文深入探讨了在 JavaScript 中如何正确访问 document.styleSheets 获取到的 CSS 样式规则(CSSRule)中的属性值。许多开发者可能错误地尝试直接从 CSSRule 对象访问属性,导致获取到 undefined。本教程将明确指出,正确的做法是通过 CSSRule …

    2025年12月20日
    000
  • Node.js中事件循环和性能分析的关系

    node.js事件循环是性能优化的核心,其阻塞会导致任务延迟和服务崩溃。识别事件循环阻塞点的方法包括:1. 使用系统级监控观察cpu使用率;2. 利用node.js内置的profiling工具生成火焰图;3. 使用0x工具进行函数级别的cpu消耗分析;4. 通过自定义埋点和日志记录关键代码耗时。此外…

    2025年12月20日 好文分享
    000
  • 使用JavaScript的map方法和索引高效更新对象数组

    本教程详细介绍了如何利用JavaScript的Array.prototype.map()方法及其回调函数的第二个参数(索引),结合ES6的展开语法(Spread Syntax),高效且不可变地更新对象数组中的特定属性。文章通过一个实际案例,演示了如何将外部数组的值根据索引同步映射到对象数组的对应元素…

    2025年12月20日
    000
  • JavaScript 中使用 .map() 和索引高效更新对象数组属性

    本文详细介绍了如何在 JavaScript 中利用数组的 map() 方法及其回调函数的第二个参数(索引),结合 ES6 的展开语法(spread syntax),高效且不可变地更新对象数组中特定属性的值。通过一个将员工姓氏从单独的数组更新到员工对象中的实际案例,展示了如何精确匹配数据并生成新的、更…

    2025年12月20日
    000
  • JavaScript中异步编程的模块化设计

    javascript中异步编程的模块化设计核心在于封装独立异步操作为可复用单元,依赖promises与async/await实现清晰边界和高效协作。首先将异步操作(如网络请求)封装为返回promise的函数,通过.then()/.catch()或async/await处理结果;其次使用esm或com…

    2025年12月20日 好文分享
    000
  • JavaScript中事件循环和同步代码的执行顺序

    javascript中同步代码的执行优先级最高,它会先被彻底执行完,之后事件循环才会处理异步任务。1.同步代码立即推入调用栈按先进后出顺序执行,是阻塞式的。2.异步任务如定时器、网络请求会被交给宿主环境处理,完成后回调放入任务队列。3.事件循环检查调用栈是否为空,若空则优先清空微任务队列(如prom…

    2025年12月20日 好文分享
    000
  • React中实现动态类名切换与UI反馈

    本文详细介绍了在React应用中如何利用useState Hook和classnames工具库,高效且优雅地实现元素的动态类名切换,从而提供即时视觉反馈。通过管理组件状态来控制类名的增删,结合classnames简化条件逻辑,开发者可以轻松创建响应用户交互的动态UI效果,例如游戏中的正确/错误提示闪…

    2025年12月20日
    000
  • 如何在React中动态修改现有元素的CSS类名

    本文详细阐述了在React应用中,如何通过状态管理(useState Hook)结合条件渲染和第三方工具库(classnames),实现对现有DOM元素CSS类名的动态修改。教程将通过一个记忆游戏示例,展示如何根据用户交互(如答案对错)即时更新组件的视觉反馈,确保UI与数据状态保持同步,并提供清晰的…

    2025年12月20日
    000
  • React中利用setTimeout控制组件状态的精确方法与最佳实践

    本文深入探讨了在React应用中,如何利用setTimeout进行异步操作时,准确地管理组件状态的更新。我们将分析useState与异步操作结合时常见的陷阱,并提供两种有效的解决方案:一是通过在setTimeout回调中精确判断任务完成时机来更新状态,二是通过useEffect钩子监听状态变化以执行…

    2025年12月20日
    000
  • 在React应用中实现动态CSS类名切换的教程

    本教程详细讲解如何在React应用中利用useState管理组件状态,并结合classnames工具库动态修改现有元素的CSS类名,从而实现如游戏反馈(正确/错误提示)等视觉效果。通过更新状态触发组件重新渲染,实现灵活的UI变化,提升用户体验。 在react开发中,我们经常需要根据应用程序的状态变化…

    2025年12月20日
    000
  • React组件中动态管理CSS类名以实现交互反馈

    本教程详细介绍了在React应用中如何利用useState钩子和classnames工具库,动态地修改现有DOM元素的CSS类名,从而实现如游戏胜负提示、状态高亮等交互式视觉反馈。文章通过一个实际的游戏场景案例,演示了如何根据用户输入结果更新组件状态,并基于此状态条件性地应用不同的CSS样式,确保U…

    2025年12月20日
    000
  • React组件中基于状态动态管理CSS类名

    本教程探讨在React应用中如何通过useState Hook和classnames工具库,实现对现有DOM元素的CSS类名进行动态修改,以提供实时的视觉反馈。我们将以一个记忆游戏为例,展示如何根据用户输入结果(正确或错误)来动态添加或移除类名,从而触发元素闪烁绿色或红色效果,提升用户体验。 1. …

    2025年12月20日
    000
  • 使用 Prisma 进行分组和按月求和

    本文介绍了如何使用 Prisma 从 MongoDB 数据库中按月对订单总金额进行分组和求和。由于 Prisma 目前没有直接支持按月分组和求和的内置功能,因此我们采用先使用 Prisma 获取数据,然后在 JavaScript 中进行处理的方法来实现目标。 实现按月分组求和 Prisma 是一个强…

    2025年12月20日
    000
  • Prisma 中按月分组并计算总和的实现方法

    本文将介绍在使用 Prisma 连接 MongoDB 数据库时,如何按月份对数据进行分组并计算总金额。由于 Prisma 目前原生不支持直接在数据库层面实现这种复杂的聚合操作,本文提供了一种结合 Prisma 的数据查询能力和 JavaScript 的数据处理能力来实现目标的方法。 在使用 Pris…

    2025年12月20日
    000
  • Prisma 中按月分组并计算总和

    本文介绍了如何使用 Prisma 从 MongoDB 数据库中按月分组订单数据,并计算每个月的总金额。由于 Prisma 目前没有直接支持按月分组求和的聚合查询,我们将通过 Prisma 获取所有订单数据,然后在 JavaScript 中进行分组和计算。 Prisma 是一个现代化的数据库工具,它提…

    2025年12月20日
    000
  • Prisma 中按日期分组并计算总和的实现方法

    本文将介绍在使用 Prisma 连接 MongoDB 数据库时,如何根据日期对数据进行分组,并计算每个月总金额的实现方法。由于 Prisma 目前尚不支持直接在数据库层面进行灵活的分组和聚合操作,因此我们采用先从数据库获取数据,然后在 JavaScript 中进行处理的方式来实现需求。 在使用 Pr…

    2025年12月20日
    000
  • JavaScript中异步操作的进度跟踪

    在javascript中跟踪异步操作进度的核心方法包括:1. 使用xmlhttprequest的onprogress事件监听上传或下载进度;2. 利用fetch api结合readablestream实现更细粒度的进度控制;3. 封装自定义promise支持进度回调;4. 通过websockets接…

    2025年12月20日 好文分享
    000

发表回复

登录后才能评论
关注微信