AoC &#- Day 仔细考虑(C# 和 Python)

aoc

仔细考虑一下

今天的挑战我第一次看到regex时就尖叫起来,主要是因为每当我看到“提取该字符串的一部分”时,regex就是我的首选;

基本概念和要求

所以我们需要找到所有 mul(number1, number2) 并将它们相乘,但忽略所有其他字符。

所以我们需要找到一种机制来查找所有有效的 mul() 函数声明。

立即学习“Python免费学习笔记(深入)”;

第1部分

为此,我们可以利用正则表达式的强大功能,使用以下模式

mul([0-9]{1,3},[0-9]{1,3})”

将匹配 mul( 0-9 之间的任何数字,1 > 3 次 右括号。​​

一旦我们获得了 mul() 匹配项,我们就可以再次利用正则表达式来提取数字,解析这些数字并添加到总数中。

非常简单直接的解决方案。

void part1(){    const string regex = @"mul([0-9]{1,3},[0-9]{1,3})";    var matches = regex.matches(input, regex);    var total = 0;    foreach (match match in matches)    {        var numbers = getnumbers(match);        total += numbers[0] * numbers[1];    }}int[] getnumbers(match match){    var numbers = regex.matches(match.value, "d{1,3}");    var a = int.parse(numbers[0].value);    var b = int.parse(numbers[1].value);    return [a, b];}

第2部分

这添加了稍微复杂的指令,添加了 do() 和 dont() 短语将启用或禁用 mil() 函数的警告。

处理这个问题的最佳方法似乎很简单,更新正则表达式模式以考虑 do() dont() 或 mul(number, number

正则表达式现在将使用 | 来查找这些短语中的任何一个。运算符。

然后我们可以循环遍历这些并使用 switch 语句来决定我们是否正在查看 do、dont 或 mil() 匹配,并相应地更新启用标志。

然后简单检查其 mul() 和 isenabled 是否为 true,然后再相乘并添加到总数中。

以下两种解决方案的完整代码

using system.text.regularexpressions;var input = file.readalltext("./input1.txt");// var input = @"xmul(2,4)&mul[3,7]!^don't()_mul(5,5)+mul(32,64](mul(11,8)undo()?mul(8,5))";part1();part2();return;void part1(){    const string regex = @"mul([0-9]{1,3},[0-9]{1,3})";    var matches = regex.matches(input, regex);    var total = 0;    foreach (match match in matches)    {        var numbers = getnumbers(match);        total += numbers[0] * numbers[1];    }    console.writeline("total: " + total);}void part2(){    const string regex = @"do()|don't()|mul([0-9]{1,3},[0-9]{1,3})";    var matches = regex.matches(input, regex);    // at the start, mul instructions are enabled    var isenabled = true;    var total = 0;    // loop over the matches (e.g do(), dont() or mul(x, y)    foreach (match match in matches)    {        switch (match.value)        {            case "do()":                isenabled = true;                break;            case "don't()":                isenabled = false;                break;            default:            {                if (match.value.startswith("mul") && isenabled)                {                    var numbers = getnumbers(match);                    total += numbers[0] * numbers[1];                }                break;            }        }    }    console.writeline("total: " + total);}int[] getnumbers(match match){    var numbers = regex.matches(match.value, "d{1,3}");    var a = int.parse(numbers[0].value);    var b = int.parse(numbers[1].value);    return [a, b];}

python解决方案尝试

如果您是我的系列的新手,我将重申,我正在使用 aoc ’24 来帮助学习和提高我现有的 python 技能 – 因此所有解决方案都将包括 c# 和 python 尝试。

我们可以使用类似的概念,但利用 python 语言和函数:

import re# Read input from filewith open("./input1.txt", "r") as file:    input_text = file.read()# Part 1def part1():    regex = r"mul(d{1,3},d{1,3})"    matches = re.findall(regex, input_text)    total = 0    for match in matches:        a, b = get_numbers(match)        total += a * b    print(f"Total: {total}")# Part 2def part2():    regex = r"do()|don't()|mul(d{1,3},d{1,3})"    matches = re.findall(regex, input_text)    is_enabled = True  # At the start, mul instructions are enabled    total = 0    for match in matches:        if match == "do()":            is_enabled = True        elif match == "don't()":            is_enabled = False        elif match.startswith("mul") and is_enabled:            a, b = get_numbers(match)            total += a * b    print(f"Total: {total}")# Helper function to extract numbers from a matchdef get_numbers(match):    numbers = re.findall(r"d{1,3}", match)    return int(numbers[0]), int(numbers[1])# Execute partspart1()part2()

一如既往,您可以在 twitter 上关注我,或者在 github 上查看整个存储库以获取更多解决方案。

以上就是AoC &#- Day 仔细考虑(C# 和 Python)的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月13日 18:39:44
下一篇 2025年12月11日 07:28:30

相关推荐

  • 了解 Python 语法和变量

    嘿,python 爱好者!如果您想深入了解 python 世界或提高自己的技能,那么掌握 python 的语法和变量是一个绝佳的起点。 python 以其简单性和可读性而闻名,使其成为各个级别开发人员的首选。在本指南中,我们将通过大量实际示例和最佳实践来阐明 python 语法和变量的基础知识。所以…

    2025年12月13日
    000
  • 打包 Python RPM

    最近,我正在为 Red Hat 工作的当前项目中执行一项非常具体的任务,即 RHEL LightspeedShellAI,这个项目相对较新,但我们想开始发货开发 RPM,让我们的 QE 朋友开始使用该工具并在他们的管道中进行测试。 我知道包装和一般Python东西的方法,但是伙计,我必须告诉你,这个…

    2025年12月13日
    000
  • python中decimal用法

    Decimal 模块:用于精确十进制数操作。为什么使用 Decimal?精确度:不会出现浮点数舍入误差。可比性:精确比较,避免浮点数比较误差。可转换性:轻松转换为其他数值类型。如何创建 Decimal 对象?从字符串创建:decimal.Decimal(string)从数字创建:decimal.De…

    2025年12月13日
    000
  • python中str的用法举例

    Python 中的 str 用于表示字符串,提供多种方法和属性操作和处理字符串。其用法举例包括:创建字符串、连接、复制、切片、查找和替换。str 类还提供有用属性,如长度、大小写、是否全部小写/大写的检查。 Python 中 str 的用法举例 str 是 Python 中用于表示字符串的内置数据类…

    2025年12月13日
    000
  • 1在python中的含义

    Python 中的 1 表示整数一,是 int 数据类型的一个实例,通常用十进制形式表示。它广泛用于算术运算、条件语句和数据结构中,例如:1 + 2 输出为 3,if 1 > 0 输出为 “1 大于 0″,1, 2, 3 输出为 1。 1 在 Python 中的含义 概…

    2025年12月13日
    000
  • python中九九乘法表怎么打

    Python中九九乘法表的实现方式有四种:列表生成式(最简洁);嵌套循环(稍低效);NumPy数组(高级矩阵操作);Pandas数据框(表状结构)。 Python中九九乘法表的实现 1. 列表生成式 最简洁的方式是使用列表生成式: result = [(i * j) for i in range(1…

    2025年12月13日
    000
  • python中//代表什么

    Python 中 // 表示地板除,是一种整数除法,结果为除法商的整数部分。它与标准除法(/)不同,后者始终返回浮点数,即使被除数和除数都是整数。地板除通常用于计算整数商,例如分割数组、求余数绝对值和计算重复次数。 Python 中 // 的含义 在 Python 中,// 表示除法运算的 地板除。…

    2025年12月13日
    000
  • python中grid的用法

    Python 中的 Tkinter 库中的网格小部件用于创建带有规则排列行和列的网格状布局,以便组织和对齐图形元素。要使用网格,可以使用以下步骤:使用 Grid 类创建网格。使用 rowconfigure() 和 columnconfigure() 方法配置行和列的属性。使用 grid() 方法将小…

    2025年12月13日
    000
  • python中/和//的区别

    在 Python 中,/ 和 // 都用于除法,但行为不同:/:浮点除法,返回浮点数结果。//:整数除法,返回整数结果,且总是正数。 Python 中 / 和 // 的区别 在 Python 中,/ 和 // 都是除法运算符,但它们的行为不同。 1. /:浮点除法 / 运算符用于浮点除法,返回一个浮…

    2025年12月13日
    000
  • python中score用法

    score() 函数在 Python NLTK 中用于计算文本的情感得分,介于 -1(负面)和 1(正面)之间。其用法如下:导入 SentiText 类。创建一个 SentiText 对象。使用 score() 方法计算文本的情感得分。 Python 中的 score 用法 score 是 Pyth…

    2025年12月13日
    000
  • 为什么 Spark 慢?

    为什么 spark 慢? 从一个引人注目的标题“spark 为什么这么慢?”开始,值得注意的是,称 spark“慢”可能意味着多种含义。聚合速度慢吗?数据加载?存在不同的情况。此外,“spark”是一个广泛的术语,其性能取决于编程语言和使用上下文等因素。因此,在深入讨论之前,让我们将标题改进得更加精…

    2025年12月13日
    000
  • AoC ‘- 日历史学家歇斯底里(C# 和 Python)#剧透

    今天的挑战非常简单: 第 1 部分:为了解决这个问题,我们必须 根据字符串输入创建 2 个数字列表,按升序排序对于list1中的每个数字,在list2中获取相同的索引,并找到两个数字之间的距离。 然后将距离相加 简单吧。 第 2 部分: 这有点棘手,但我的解决方案的主要概念是: 立即学习“Pytho…

    2025年12月13日
    000
  • 如何使用 Python 抓取 Google 搜索结果

    抓取 google 搜索可提供基本的 serp 分析、seo 优化和数据收集功能。现代抓取工具使这个过程更快、更可靠。 我们的一位社区成员撰写了此博客,作为对 crawlee 博客的贡献。如果您想向 crawlee 博客贡献此类博客,请通过我们的 discord 频道与我们联系。 在本指南中,我们将…

    2025年12月13日 好文分享
    000
  • 爬虫python怎么读

    Python 网页爬取可通过 requests 库获取响应内容,再用 BeautifulSoup 库解析 HTML 结构。首先导入 requests 库发送 HTTP 请求,然后导入 BeautifulSoup 库解析内容,可查找和提取 HTML 元素,从而获取网页内容。requests 库适用于发…

    2025年12月13日
    000
  • python爬虫怎么点按钮

    使用 Seleniumwebdriver 来模拟浏览器操作,通过单击元素的 ID 或 XPath 来点击按钮。步骤包括:安装 Seleniumwebdriver、导入模块、创建 WebDriver 实例、导航到页面、定位按钮(使用 find_element_by_id() 或 find_elemen…

    2025年12月13日
    000
  • python爬虫代码怎么操作

    如何操作 Python 爬虫代码?导入 Python 库(requests、BeautifulSoup);发送 HTTP 请求获得 HTML 代码;解析 HTML 代码形成树形结构;查找所需的 HTML 元素;提取所需的数据;对提取的数据进行处理;输出处理后的数据。 如何操作 Python 爬虫代码…

    2025年12月13日
    000
  • python 怎么验证反爬虫

    Python 中验证反爬虫措施的步骤包括:检查 HTTP 状态码;分析响应头;提取 капча;分析 JavaScript 行为;检查限速机制;使用代理;使用防浏览器检测工具库;人工验证。 如何验证 Python 中的反爬虫措施 在网络爬取过程中,网站通常会实施反爬虫措施来防止滥用或过量爬取。验证反…

    2025年12月13日
    000
  • python爬虫时怎么设置访问时间间隔

    回答:使用 Python 爬虫时,设置访问时间间隔至关重要,以避免服务器过载和封禁。方法如下:导入 time 模块。设置时间间隔(以秒为单位)。访问网页。等待时间间隔。时间间隔的好处包括减少服务器负载、避免封禁和提高爬取效率。最佳间隔取决于流量大小(高流量网站需要较长间隔)。其他注意事项包括网站限制…

    2025年12月13日
    000
  • python爬虫不按顺序怎么办

    解决 Python 爬虫页面抓取无序问题的方法:并行抓取:使用同步机制(如队列)按请求顺序抓取页面。动态页面:使用 JavaScript 渲染引擎模拟用户交互以获得一致视图。服务器端排序:分析排序规则,禁用排序机制或使用 headless 浏览器。爬虫速度过快:调整延迟或速度,使用代理避免被识别为爬…

    2025年12月13日
    000
  • python3爬虫实习报告怎么写

    Python3 爬虫实习收获:熟练掌握 Python3 爬虫技术,精通 Scrapy 框架。培养了问题解决能力,了解了反爬虫技术和应对策略。参与团队协作,提升了沟通和协作能力。了解了互联网数据采集行业的现状和发展趋势。提升了就业竞争力,拓宽了职业视野。 Python3 爬虫实习报告 引言随着互联网技…

    2025年12月13日
    000

发表回复

登录后才能评论
关注微信