<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://blog.yunshu.site/blog</id>
    <title>YunShu'Blog Blog</title>
    <updated>2024-09-15T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://blog.yunshu.site/blog"/>
    <subtitle>YunShu'Blog Blog</subtitle>
    <icon>https://blog.yunshu.site/img/favicon.png</icon>
    <entry>
        <title type="html"><![CDATA[随机数生成器]]></title>
        <id>https://blog.yunshu.site/blog/2024/09/15/随机数生成器</id>
        <link href="https://blog.yunshu.site/blog/2024/09/15/随机数生成器"/>
        <updated>2024-09-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[rand32]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="rand32" src="https://blog.yunshu.site/assets/images/image-e5b453eb49d3d7bd4c48d83a31d08341.png" width="830" height="276" class="img_ev3q"></p>
<p>很久以前闲得没事逛 Justine Tunney 的 GitHub 时看到这一段代码，很奇怪为什么可以生产随机数。</p>
<p>commit 在此：<a href="https://github.com/jart/morton/blob/fe5fdb10b507404233ff303b8ccbcffd3ed30d27/bench.c#L30" target="_blank" rel="noopener noreferrer">https://github.com/jart/morton/blob/fe5fdb10b507404233ff303b8ccbcffd3ed30d27/bench.c#L30</a></p>
<p>这段代码实际上就是使用<a href="https://zh.wikipedia.org/wiki/%E7%B7%9A%E6%80%A7%E5%90%8C%E9%A4%98%E6%96%B9%E6%B3%95" target="_blank" rel="noopener noreferrer">线性同余方法</a>实现了个伪随机数生成器。</p>
<p>线性同余方法的递推关系式为：</p>
<span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>N</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub><mo>=</mo><mo stretchy="false">(</mo><mi>a</mi><mo>⋅</mo><msub><mi>N</mi><mi>i</mi></msub><mo>+</mo><mi>c</mi><mo stretchy="false">)</mo><mspace></mspace><mspace width="1em"></mspace><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow><mtext> </mtext><mtext> </mtext><mi>m</mi></mrow><annotation encoding="application/x-tex">N_{i+1} = (a \cdot N_i + c) \mod m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8917em;vertical-align:-0.2083em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10903em">N</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em"><span style="top:-2.55em;margin-left:-0.109em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10903em">N</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em"><span style="top:-2.55em;margin-left:-0.109em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal">c</span><span class="mclose">)</span><span class="mspace allowbreak"></span><span class="mspace" style="margin-right:1em"></span></span><span class="base"><span class="strut" style="height:0.6944em"></span><span class="mord"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.1667em"></span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">m</span></span></span></span></span>
<p>其中 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi></mrow><annotation encoding="application/x-tex">a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">a</span></span></span></span>、<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi></mrow><annotation encoding="application/x-tex">c</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">c</span></span></span></span>、<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi></mrow><annotation encoding="application/x-tex">m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">m</span></span></span></span> 是常数，<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>N</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">N_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10903em">N</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em"><span style="top:-2.55em;margin-left:-0.109em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span> 是第 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em"></span><span class="mord mathnormal">i</span></span></span></span> 个随机数。</p>
<p>在这段代码中，<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi></mrow><annotation encoding="application/x-tex">a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">a</span></span></span></span>、<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi></mrow><annotation encoding="application/x-tex">c</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">c</span></span></span></span>、<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi></mrow><annotation encoding="application/x-tex">m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">m</span></span></span></span> 分别是 6364136223846793005、1442695040888963407、<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>64</mn></msup></mrow><annotation encoding="application/x-tex">2^{64}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">64</span></span></span></span></span></span></span></span></span></span></span></span>，<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>N</mi><mn>0</mn></msub></mrow><annotation encoding="application/x-tex">N_0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10903em">N</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:-0.109em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span> 是 1。</p>
<p>伪随机数的一个致命缺陷是周期性，不同的参数会有不同的周期。</p>
<p>从<a href="https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use" target="_blank" rel="noopener noreferrer">Linear congruential generator-常用参数</a>这里看，这两个参数来源于 Donald Knuth 的 MMIX。</p>
<p>这段代码还对随机数进行了一次截断，只取了 32 位，有两个原因：</p>
<ol>
<li>要求输出 32 位随机数</li>
<li>一般来说，高 32 位比低 32 位的周期更长。</li>
</ol>]]></content>
        <author>
            <name>YunShu</name>
            <uri>https://github.com/Selflocking</uri>
        </author>
        <category label="cpp" term="cpp"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[腾讯云测试开发二面]]></title>
        <id>https://blog.yunshu.site/blog/2024/03/27/腾讯云测试开发二面</id>
        <link href="https://blog.yunshu.site/blog/2024/03/27/腾讯云测试开发二面"/>
        <updated>2024-03-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[面试前还是有点紧张。]]></summary>
        <content type="html"><![CDATA[<p>面试前还是有点紧张。</p>
<p>这次换成了腾讯会议，有面吧插件，但是没让我写题。</p>
<p>时间比较短，20 多分钟就面完了。</p>
<p>上来显示问了下开源社区的实习，然后开始拷打 miniob 项目。</p>
<p>后悔了，面试前应该把自己简历上的项目再看一遍的，这样就不会卡壳了。</p>
<p>一面和二面都问了 mvcc, 但是我都答的不好，都没回答出来隔离级别。</p>
<p>miniob 的 mvcc 隔离级别是快照，即可重复读，指一个事务执行过程中看到的数据，一直跟这个事务启动时看到的数据是一致的，MySQL InnoDB 引擎的默认隔离级别；</p>
<p>我只说出来了大致意思，就是事务在执行过程中能看到的只能是开始时的数据。</p>
<p>接着开始聊部门，面试官说他是做数据库相关的测试的，怪不得面我。</p>
<p>聊了聊当今数据库的火热，说了下自己对测开的看法。</p>
<p>反问了下流程是怎么样的，我看到网上说有可能有三面技术面，面试官说三面就是说之前的面试不好，然后就交给了另一个团队重新面试，面试流程没断而已，一般来说是两面技术面。</p>
<p>感觉聊的还挺开心，希望能过吧。</p>]]></content>
        <author>
            <name>YunShu</name>
            <uri>https://github.com/Selflocking</uri>
        </author>
        <category label="tencent" term="tencent"/>
        <category label="面经" term="面经"/>
        <category label="测试开发" term="测试开发"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[腾讯云测试开发一面]]></title>
        <id>https://blog.yunshu.site/blog/2024/03/25/腾讯云测试开发一面</id>
        <link href="https://blog.yunshu.site/blog/2024/03/25/腾讯云测试开发一面"/>
        <updated>2024-03-25T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[第一次面试，有点紧张，面试官看着有点憔悴，不知道是不是工作太累了。]]></summary>
        <content type="html"><![CDATA[<p>第一次面试，有点紧张，面试官看着有点憔悴，不知道是不是工作太累了。</p>
<p>上来先是自我介绍，我就照着简历念了一遍。</p>
<p>面试官先问的青训营项目：</p>
<ol start="0">
<li>
<p>数据库用的什么, 用的什么语言</p>
<p>postgresql， go</p>
</li>
<li>
<p>用户业务怎么设计的</p>
<p>认证中间件
表结构：id, name, email...， 加主键</p>
</li>
<li>
<p>点赞怎么设计的</p>
<p>一张表 user_id video_id, 加主键</p>
</li>
<li>
<p>如何筛选出两个用户都点赞了的视频</p>
<p>支支吾吾，想了半天。
先说的 where,但是仔细一想 where 好像做不到
又说是 inner join,面试官让我写出来，但是我不会写，就直说了不会，能不能跳过
面试官说好好好，知道 join 就行</p>
<p>答案：<a href="https://blog.yunshu.site/docs/%E6%89%BE%E5%B7%A5%E4%BD%9C/learn-by-question#%E4%B8%89%E5%BC%A0%E8%A1%A8user-video-favorite%E6%B1%82%E4%B8%A4%E4%B8%AA%E7%94%A8%E6%88%B7%E9%83%BD%E7%82%B9%E8%B5%9E%E7%9A%84%E8%A7%86%E9%A2%91">求两个用户同时点赞的视频</a></p>
</li>
<li>
<p>协程的实现</p>
<p>不会，就提了一句协程是轻量级的线程，跳过了</p>
</li>
</ol>
<p>接着问 miniob：</p>
<ol>
<li>
<p>那些是你做的</p>
<p>update, drop table, subquery, mvcc, null 等</p>
</li>
<li>
<p>讲讲 mvcc</p>
<p>这个我也不太懂，miniob 的 mvcc 是残废的。
说了一下是基于时间戳或者版本号的多版本并发控制。讲了讲多线程同时访问会这么样。
面试官问了问锁级别，什么隔离级别。</p>
</li>
<li>
<p>讲讲多线程同时访问会怎么样</p>
<p>miniob 自己实现了，我没去了解过</p>
</li>
<li>
<p>sql 解析是你们做的吗，怎么做的</p>
<p>miniob 自带一些解析，有些是我们自己实现的，用的 flex bison</p>
</li>
<li>
<p>内存管理怎么做的</p>
<p>误解了面试官的意思，我先说的是智能指针，每个 operator 都有自己的数据结构，使用智能指针管理内存。
其实面试官想问的是数据库的内存管理。
答：miniob 自己实现好了，但是我了解过一些，讲了讲 LRU 和 LRU 的实现。</p>
</li>
</ol>
<p>场景：</p>
<ol>
<li>
<p>如果让你设计一个 web 服务器，你会怎么设计</p>
<p>不会，提了一下 io 多路复用，没深入了解过。然后又说加个多线程，接着就不会了。</p>
</li>
</ol>
<p>C++:</p>
<ol>
<li>
<p>虚函数</p>
<p>讲了讲多态，虚类充当接口，派生类实现接口。</p>
</li>
<li>
<p>虚函数表</p>
<p>不会</p>
</li>
<li>
<p>内存对齐</p>
<p>不知道面试官想问什么，我就说了一下默认是 4 字节对齐。
面试官问如果我申请 6 个字节，会怎么样，我说会补齐到 8 字节。</p>
</li>
</ol>
<p>编程：</p>
<ol>
<li>
<p>实现一个栈，要求不能使用内置数据结构</p>
<p>我用链表实现的。</p>
</li>
<li>
<p>给你一个数组，长度为 n,你只可以交换 i 和 (i+1)%n。问是否可以使其递增</p>
<p>腾讯系统有问题，我没看到题目，以为面试官在选题，面试官以为我在思考，我们俩就这样沉默了快十分钟。
我问了一下面试大概什么时候，面试官说没事你先想吧，这才发现。
我的思路是，可以看成是两个数组，奇数位数组和偶数位数组，分别排序，然后检查是否递增。</p>
</li>
</ol>
<p>介绍岗位内容：</p>
<p>主要是做测试工具，服务其他部门，主要是写脚本，写 CI/CD，写测试工具。</p>
<p>我的提问：</p>
<ol>
<li>
<p>我二面应该准备什么：</p>
<p>面试官：基础准备以下，最好不要答不上来</p>
</li>
<li>
<p>工作期间可以转岗吗：</p>
<p>面试官：一般工作两年以内是不可以的，如果你想做开发，你可以去投一下开发的岗位</p>
</li>
<li>
<p>实习生工作时间：</p>
<p>面试官：看你，如果你面试过了，随时可以来
其实我想问的是实习生累不累，每天工作几小时</p>
</li>
</ol>
<p>面试官还是很好说话的，就是回答完问题后，面试官那边会有鼠标声，不知道是不是在写面评。</p>
<p>有一些东西记不清了，面试官一直问我 c++内存，经过别人的提醒才知道面试官可能是想问内存序，我都没听过。</p>]]></content>
        <author>
            <name>YunShu</name>
            <uri>https://github.com/Selflocking</uri>
        </author>
        <category label="tencent" term="tencent"/>
        <category label="面经" term="面经"/>
        <category label="测试开发" term="测试开发"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Doris 开发日志]]></title>
        <id>https://blog.yunshu.site/blog/2024/03/01/doris</id>
        <link href="https://blog.yunshu.site/blog/2024/03/01/doris"/>
        <updated>2024-03-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[想申请 Apache Doris 的 GSoC 2024，于是开始了解 Doris，这里记录一些开发经验。]]></summary>
        <content type="html"><![CDATA[<p>想申请 Apache Doris 的 GSoC 2024，于是开始了解 Doris，这里记录一些开发经验。</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="编译">编译<a href="https://blog.yunshu.site/blog/2024/03/01/doris#%E7%BC%96%E8%AF%91" class="hash-link" aria-label="编译的直接链接" title="编译的直接链接">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="电脑信息">电脑信息<a href="https://blog.yunshu.site/blog/2024/03/01/doris#%E7%94%B5%E8%84%91%E4%BF%A1%E6%81%AF" class="hash-link" aria-label="电脑信息的直接链接" title="电脑信息的直接链接">​</a></h3>
<p>我的电脑信息：</p>
<table><thead><tr><th>系统</th><th>Arch Linux</th></tr></thead><tbody><tr><td>内核</td><td>6.7.6-arch1-2</td></tr><tr><td>CPU</td><td>AMD Ryzen 5 5600H with Radeon Graphics</td></tr><tr><td>RAM</td><td>13.5 GB</td></tr><tr><td>SWAP</td><td>32 GB</td></tr></tbody></table>
<p>编译时可能需要很大的内存，目前我电脑在内存满载时有卡死的情况，所以我设置了 32 GB 的 SWAP。</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="编译方式">编译方式<a href="https://blog.yunshu.site/blog/2024/03/01/doris#%E7%BC%96%E8%AF%91%E6%96%B9%E5%BC%8F" class="hash-link" aria-label="编译方式的直接链接" title="编译方式的直接链接">​</a></h3>
<p>官方文档一共给出了 3 种编译方式，分别是：Docker 开发镜像编译，直接编译，以及使用 LDB Toolchain 编译。</p>
<p>Docker 开发镜像实际上就是配置好了 LDB Toolchain 的 Docker 镜像，但是由于开发镜像的系统版本太低，VSCode 提示已经不支持，所以放弃了这种方式。</p>
<p>直接编译基本不可能成功，需要配置的东西太多。</p>
<p>于是就只剩下了 LDB Toolchain 编译，经过我的尝试，这种方式是可以成功的，但是要注意选好 LDB Toolchain 的版本。</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="依赖安装">依赖安装<a href="https://blog.yunshu.site/blog/2024/03/01/doris#%E4%BE%9D%E8%B5%96%E5%AE%89%E8%A3%85" class="hash-link" aria-label="依赖安装的直接链接" title="依赖安装的直接链接">​</a></h3>
<p>Doris 的依赖比较多，当运行 <code>build.sh</code> 时，如果缺少依赖，就会自动下载源码并编译，但是这个过程很长，并且容易出错，我尝试了直接编译和使用 LDB Toolchain 编译，都失败了。</p>
<p>另一种安装依赖的方法就是下载官方编译好的依赖，第三方依赖的仓库为：<a href="https://github.com/apache/doris-thirdparty" target="_blank" rel="noopener noreferrer">https://github.com/apache/doris-thirdparty</a></p>
<p>根据官方的 GitHub Actions 配置文件，master 分支应该安装 <a href="https://github.com/apache/doris-thirdparty/releases/tag/automation" target="_blank" rel="noopener noreferrer">tag<!-- -->:automation</a>的依赖, branch-2 分支应该安装 <a href="https://github.com/apache/doris-thirdparty/releases/tag/automation-2.0" target="_blank" rel="noopener noreferrer">tag<!-- -->:automation-2<!-- -->.0</a> 的依赖。</p>
<p>将压缩包下载到本地，解压后得到一个 <code>installed</code> 文件夹，将其放到 Doris 仓库的 <code>thirdparty</code> 文件夹下，然后运行 <code>build.sh</code> 即可。</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="使用-ldb-toolchain-编译">使用 LDB Toolchain 编译<a href="https://blog.yunshu.site/blog/2024/03/01/doris#%E4%BD%BF%E7%94%A8-ldb-toolchain-%E7%BC%96%E8%AF%91" class="hash-link" aria-label="使用 LDB Toolchain 编译的直接链接" title="使用 LDB Toolchain 编译的直接链接">​</a></h3>
<p>根据官方 GitHub Actions 配置文件和我的尝试，LDB Toolchain 的版本应该使用这个 Release：<a href="https://github.com/amosbird/ldb_toolchain_gen/releases/tag/v0.18" target="_blank" rel="noopener noreferrer">https://github.com/amosbird/ldb_toolchain_gen/releases/tag/v0.18</a></p>
<p>下载 <code>ldb_toolchain_gen.sh</code>, 然后执行<code>sh ldb_toolchain_gen.sh /path/to/ldb_toolchain/</code>, 其中 <code>/path/to/ldb_toolchain/</code> 是要安装 toolchain 的路径，仅支持绝对路径。</p>
<p>之后在 Doris 仓库的根目录下新建一个 custom_env.sh 文件，命令如下：</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">touch</span><span class="token plain"> custom_env.sh</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">chmod</span><span class="token plain"> a+x custom_env.sh</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">echo</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'export PATH="/path/to/ldb_toolchain/bin:/path/to/doris/thirdparty/installed":$PATH'</span><span class="token plain"> </span><span class="token operator">&gt;</span><span class="token plain"> custom_env.sh</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>其中 <code>/path/to/ldb_toolchain/</code> 是 LDB Toolchain 的路径，<code>/path/to/doris/thirdparty/installed</code> 是第三方依赖的路径。</p>
<p>接着安装 JDK，使用包管理器或者官网下载都可以，然后在 <code>custom_env.sh</code> 中指定 JDK 的路径：</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token builtin class-name" style="color:rgb(189, 147, 249)">export</span><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">JAVA_HOME</span><span class="token operator">=</span><span class="token plain">/path/to/jdk</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>之后运行 <code>build.sh</code> 即可, 会自动运行 <code>custom_env.sh</code>。</p>
<p>接下来给出几种常用的编译配置:</p>
<ul>
<li>
<p>BUILD_TYPE</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># Debug 版本</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">BUILD_TYPE</span><span class="token operator">=</span><span class="token plain">Debug </span><span class="token function" style="color:rgb(80, 250, 123)">sh</span><span class="token plain"> build.sh</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># Release 版本</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">BUILD_TYPE</span><span class="token operator">=</span><span class="token plain">Release </span><span class="token function" style="color:rgb(80, 250, 123)">sh</span><span class="token plain"> build.sh</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
</li>
<li>
<p>DORIS_TOOLCHAIN</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># gcc</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">DORIS_TOOLCHAIN</span><span class="token operator">=</span><span class="token plain">gcc </span><span class="token function" style="color:rgb(80, 250, 123)">sh</span><span class="token plain"> build.sh</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># clang</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">DORIS_TOOLCHAIN</span><span class="token operator">=</span><span class="token plain">clang </span><span class="token function" style="color:rgb(80, 250, 123)">sh</span><span class="token plain"> build.sh</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
</li>
<li>
<p>ENABLE_PCH</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># 开启预编译头</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">ENABLE_PCH</span><span class="token operator">=</span><span class="token plain">ON </span><span class="token function" style="color:rgb(80, 250, 123)">sh</span><span class="token plain"> build.sh</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># 关闭预编译头</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">ENABLE_PCH</span><span class="token operator">=</span><span class="token plain">OFF </span><span class="token function" style="color:rgb(80, 250, 123)">sh</span><span class="token plain"> build.sh</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>根据<a href="https://doris.apache.org/zh-CN/docs/dev/install/source-install/compilation-general#%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98" target="_blank" rel="noopener noreferrer">官方文档</a>, 使用 Clang 编译时需要关闭 PCH：</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">DORIS_TOOLCHAIN</span><span class="token operator">=</span><span class="token plain">clang </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">ENABLE_PCH</span><span class="token operator">=</span><span class="token plain">OFF </span><span class="token function" style="color:rgb(80, 250, 123)">sh</span><span class="token plain"> build.sh</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
</li>
<li>
<p>清理</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># 清理编译产物</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">sh</span><span class="token plain"> build.sh </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">--clean</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
</li>
<li>
<p>指定编译线程数</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">sh</span><span class="token plain"> build.sh </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-j</span><span class="token plain"> </span><span class="token number">4</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="2024-03-08">2024-03-08<a href="https://blog.yunshu.site/blog/2024/03/01/doris#2024-03-08" class="hash-link" aria-label="2024-03-08的直接链接" title="2024-03-08的直接链接">​</a></h2>
<p>官方把 JDK 版本升级到了 17, 强制要求使用 JDK 17 编译，所以需要安装 JDK 17。</p>
<p>因为我仓库里有 JDK 17, 我就直接使用包管理器安装了：</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">yay </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-Syu</span><span class="token plain"> jdk17-openjdk</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">sudo</span><span class="token plain"> archlinux-java </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">set</span><span class="token plain"> java-17-openjdk</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>之后在 <code>custom_env.sh</code> 中添加：</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token builtin class-name" style="color:rgb(189, 147, 249)">export</span><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">JAVA_HOME</span><span class="token operator">=</span><span class="token plain">/usr/lib/jvm/java-17-openjdk</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>根据这篇 email: <a href="https://lists.apache.org/list?dev@doris.apache.org:lte=1M:JDK_17" target="_blank" rel="noopener noreferrer">https://lists.apache.org/list?dev@doris.apache.org:lte=1M:JDK_17</a></p>
<p>master 分支的 JDK 版本要求 17, 其他是 11/8。</p>
<p>设置方法是默认使用 JDK8, 定义环境变量 <code>JDK_17</code> 指定 JDK 17 的路径。</p>
<p>看到官方的 CI 没有这样设置，就去提了第一个 PR: <a href="https://github.com/apache/doris/pull/32018" target="_blank" rel="noopener noreferrer">https://github.com/apache/doris/pull/32018</a></p>
<p>睡觉。</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="最后">最后<a href="https://blog.yunshu.site/blog/2024/03/01/doris#%E6%9C%80%E5%90%8E" class="hash-link" aria-label="最后的直接链接" title="最后的直接链接">​</a></h2>
<p>PR 待了好几天，最后被员工用其他方法解决了问题，PR 就 close 了。</p>
<p>还是先去学学 15445 沉淀一下吧，不能急躁。</p>]]></content>
        <author>
            <name>YunShu</name>
            <uri>https://github.com/Selflocking</uri>
        </author>
        <category label="doris" term="doris"/>
        <category label="cpp" term="cpp"/>
        <category label="database" term="database"/>
        <category label="gsoc" term="gsoc"/>
        <category label="apache" term="apache"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[使用平板充当 Linux 的副屏]]></title>
        <id>https://blog.yunshu.site/blog/2024/02/19/screen</id>
        <link href="https://blog.yunshu.site/blog/2024/02/19/screen"/>
        <updated>2024-02-19T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[系统环境]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorWithStickyNavbar_LWe7" id="系统环境">系统环境<a href="https://blog.yunshu.site/blog/2024/02/19/screen#%E7%B3%BB%E7%BB%9F%E7%8E%AF%E5%A2%83" class="hash-link" aria-label="系统环境的直接链接" title="系统环境的直接链接">​</a></h2>
<table><thead><tr><th>系统</th><th>Arch Linux</th></tr></thead><tbody><tr><td>内核</td><td>6.7.6-arch1-1</td></tr><tr><td>CPU</td><td>AMD Ryzen 5 5600H with Radeon Graphics</td></tr><tr><td>显示器</td><td>2560x1600</td></tr><tr><td>平板</td><td>小新 Pad Plus 2021 2000x1000</td></tr><tr><td>图形协议</td><td>X11</td></tr></tbody></table>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="创建虚拟屏幕">创建虚拟屏幕<a href="https://blog.yunshu.site/blog/2024/02/19/screen#%E5%88%9B%E5%BB%BA%E8%99%9A%E6%8B%9F%E5%B1%8F%E5%B9%95" class="hash-link" aria-label="创建虚拟屏幕的直接链接" title="创建虚拟屏幕的直接链接">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="使用-xrandr-不推荐">使用 xrandr (不推荐)<a href="https://blog.yunshu.site/blog/2024/02/19/screen#%E4%BD%BF%E7%94%A8-xrandr-%E4%B8%8D%E6%8E%A8%E8%8D%90" class="hash-link" aria-label="使用 xrandr (不推荐)的直接链接" title="使用 xrandr (不推荐)的直接链接">​</a></h3>
<p>可以使用<code>xrandr</code>命令查看当前的显示器配置，例如：</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">$ xrandr</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Screen 0: minimum 320 x 200, current 5120 x 1600, maximum 16384 x 16384</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">eDP connected primary 2560x1600+2560+0 (normal left inverted right x axis y axis) 345mm x 215mm</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">   2560x1600    120.01*+  96.03    72.01    60.00    50.01    48.00</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">   1920x1200    120.01</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">   1920x1080    120.01</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">   1600x1200    120.01</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">   1680x1050    120.01</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">   1280x1024    120.01</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">   1440x900     120.01</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">   1280x800     120.01</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">   1280x720     120.01</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">   1024x768     120.01</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">   800x600      120.01</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">   640x480      120.01</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">HDMI-A-0 connected 2560x1440+0+80 (normal left inverted right x axis y axis) 530mm x 290mm</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">   2560x1440     59.95*+</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">   1920x1200     59.95</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">   1920x1080     60.00    60.00    50.00    59.94    30.00    25.00    24.00    29.97    23.98</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">   1600x1200     59.95</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">   1680x1050     59.88</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">   1600x900      60.00</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">   1280x1024     75.02    60.02</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">   1440x900      59.90</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">   1280x960      60.00</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">   1280x800      59.91</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">   1152x864      75.00</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">   1280x720      60.00    50.00    30.00    25.00    59.94    29.97    24.00    23.98</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">   1024x768      75.03    60.00</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">   800x600       75.00    60.32</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">   720x480       60.00    59.94</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">   640x480       75.00    60.00    59.94</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">DisplayPort-0 disconnected (normal left inverted right x axis y axis)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>可以看到有一个空闲接口 <code>DisplayPort-0</code>, 我们可以使用这个空闲接口创建虚拟屏幕。</p>
<p>首先使用 <code>gtf</code> 命令生成一个模式：</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain"># gtf 宽 高 刷新率</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">$ gtf 2000 1000 60</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  # 2000x1000 @ 60.00 Hz (GTF) hsync: 62.10 kHz; pclk: 165.93 MHz</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  Modeline "2000x1000_60.00"  165.93  2000 2120 2336 2672  1000 1001 1004 1035  -HSync +Vsync</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>接着将其导入到 xrandr 中：</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">$ xrandr --newmode "2000x1200_60.00"  201.50  2000 2136 2352 2704  1200 1201 1204 1242  -HSync +Vsync</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">$ xrandr --addmode DisplayPort-0 "2000x1200_60.00"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>最后激活显示器：</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">$ xrandr --output DisplayPort-0 --mode "2000x1200_60.00" --right-of eDP</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p><code>eDP</code> 是我的笔记本内置屏幕，同时也是主屏幕，<code>--right-of</code> 表示将虚拟屏幕放在右边。同时还有 <code>--left-of</code> <code>--above</code> <code>--below</code> 等选项。</p>
<p>这样创建的虚拟屏幕有些缺点，例如黑色背景，有些软件会崩溃等。</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="使用-hdmi-dummy-推荐">使用 HDMI Dummy (推荐)<a href="https://blog.yunshu.site/blog/2024/02/19/screen#%E4%BD%BF%E7%94%A8-hdmi-dummy-%E6%8E%A8%E8%8D%90" class="hash-link" aria-label="使用 HDMI Dummy (推荐)的直接链接" title="使用 HDMI Dummy (推荐)的直接链接">​</a></h3>
<p>HDMI Dummy 可以翻译为 HDMI 欺骗器、HDMI 虚拟显示器等等。某宝上几块钱就可以买一个，插入后系统会认为有一个显示器连接上了。</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="串流到平板">串流到平板<a href="https://blog.yunshu.site/blog/2024/02/19/screen#%E4%B8%B2%E6%B5%81%E5%88%B0%E5%B9%B3%E6%9D%BF" class="hash-link" aria-label="串流到平板的直接链接" title="串流到平板的直接链接">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="使用-sunshine--moonlight">使用 Sunshine + Moonlight<a href="https://blog.yunshu.site/blog/2024/02/19/screen#%E4%BD%BF%E7%94%A8-sunshine--moonlight" class="hash-link" aria-label="使用 Sunshine + Moonlight的直接链接" title="使用 Sunshine + Moonlight的直接链接">​</a></h3>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="使用-deskreen">使用 Deskreen<a href="https://blog.yunshu.site/blog/2024/02/19/screen#%E4%BD%BF%E7%94%A8-deskreen" class="hash-link" aria-label="使用 Deskreen的直接链接" title="使用 Deskreen的直接链接">​</a></h3>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="使用-vnc">使用 VNC<a href="https://blog.yunshu.site/blog/2024/02/19/screen#%E4%BD%BF%E7%94%A8-vnc" class="hash-link" aria-label="使用 VNC的直接链接" title="使用 VNC的直接链接">​</a></h3>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="使用-weylus">使用 Weylus<a href="https://blog.yunshu.site/blog/2024/02/19/screen#%E4%BD%BF%E7%94%A8-weylus" class="hash-link" aria-label="使用 Weylus的直接链接" title="使用 Weylus的直接链接">​</a></h3>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="参考">参考<a href="https://blog.yunshu.site/blog/2024/02/19/screen#%E5%8F%82%E8%80%83" class="hash-link" aria-label="参考的直接链接" title="参考的直接链接">​</a></h2>
<ul>
<li><a href="https://blog.chyk.ink/2022/07/17/linux-virtual-display/" target="_blank" rel="noopener noreferrer">📲 在 Linux 上把手机/平板当作虚拟副屏，游戏聊天两不误</a></li>
<li><a href="https://www.sxrhhh.top/blog/2024/01/16/sunshine-moonlight-to-create-a-virtual-monitor/" target="_blank" rel="noopener noreferrer">Sunshine + Moonlight 纯软件实现全平台设备作 Linux 副屏</a></li>
</ul>]]></content>
        <author>
            <name>YunShu</name>
            <uri>https://github.com/Selflocking</uri>
        </author>
        <category label="linux" term="linux"/>
        <category label="moonlight" term="moonlight"/>
        <category label="x11" term="x11"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Advent of Code 2023]]></title>
        <id>https://blog.yunshu.site/blog/2023/12/01/aoc2023</id>
        <link href="https://blog.yunshu.site/blog/2023/12/01/aoc2023"/>
        <updated>2023-12-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Advent of Code 是一个为期 25 天的编程挑战赛，从 12 月 1 日持续到 25 日，每天的东部时间凌晨（北京时间的午后 1 点）发布一道题目。不限制语言，不考究算法，只要能提交正确答案，都可以算作通过并得分。这个活动从 2015 年开始，已经成为了全球程序员的年度盛事之一。]]></summary>
        <content type="html"><![CDATA[<p>Advent of Code 是一个为期 25 天的编程挑战赛，从 12 月 1 日持续到 25 日，每天的东部时间凌晨（北京时间的午后 1 点）发布一道题目。不限制语言，不考究算法，只要能提交正确答案，都可以算作通过并得分。这个活动从 2015 年开始，已经成为了全球程序员的年度盛事之一。</p>
<p>每天的题目会分为两个部分，全部完成可得两颗金星，只完成第一部分则获得一颗银星。解题的时间越早，排名越靠前。第一个解决问题的将获得 100 颗星星，接下来每位递减一颗星星，直到递减到一颗星。也就是说每天最多能获得 200 颗星星。</p>
<p>只有少数大佬是为了冲榜，普通人可以一天一语言完成题目。也可以用奇技淫巧解决问题。可以在 <a href="https://www.reddit.com/r/adventofcode/" target="_blank" rel="noopener noreferrer">r/adventofcode</a> 上看到各种奇技淫巧。</p>
<p>代码：<a href="https://github.com/Selflocking/Code/tree/master/others/AOC2023" target="_blank" rel="noopener noreferrer">https://github.com/Selflocking/Code/tree/master/others/AOC2023</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="day-1-c">Day 1 (C++)<a href="https://blog.yunshu.site/blog/2023/12/01/aoc2023#day-1-c" class="hash-link" aria-label="Day 1 (C++)的直接链接" title="Day 1 (C++)的直接链接">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="part-1">Part 1<a href="https://blog.yunshu.site/blog/2023/12/01/aoc2023#part-1" class="hash-link" aria-label="Part 1的直接链接" title="Part 1的直接链接">​</a></h3>
<p>给你多行字符串，请找出每行中第一个和最后一个数字，将其组成一个二位数。然后将所有的二位数相加。</p>
<p>例如：</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">1abc2</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">pqr3stu8vwx</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">a1b2c3d4e5f</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">treb7uchet</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>第一行中的数字是 12，第二行中的数字是 38，第三行中的数字是 15，第四行中的数字是 77。将这些数字相加，得到 142。</p>
<p>第一部分简单，只需要从行首遍历到行未，找到第一个数字和最后一个数字，然后组成二位数相加即可。</p>
<div class="language-cpp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-cpp codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token macro property directive-hash">#</span><span class="token macro property directive keyword" style="color:rgb(189, 147, 249);font-style:italic">include</span><span class="token macro property"> </span><span class="token macro property string" style="color:rgb(255, 121, 198)">&lt;bits/stdc++.h&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">using</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">namespace</span><span class="token plain"> std</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">int</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">main</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    ios</span><span class="token double-colon punctuation" style="color:rgb(248, 248, 242)">::</span><span class="token function" style="color:rgb(80, 250, 123)">sync_with_stdio</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token boolean">false</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    cin</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">tie</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">nullptr</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    fstream in</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    in</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">open</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"input.txt"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token operator">!</span><span class="token plain">in</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">is_open</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        cerr </span><span class="token operator">&lt;&lt;</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Failed to open file"</span><span class="token plain"> </span><span class="token operator">&lt;&lt;</span><span class="token plain"> endl</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token function" style="color:rgb(80, 250, 123)">exit</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">int</span><span class="token plain"> ans </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">while</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token operator">!</span><span class="token plain">in</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">eof</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        string s</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        in </span><span class="token operator">&gt;&gt;</span><span class="token plain"> s</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">int</span><span class="token plain"> first </span><span class="token operator">=</span><span class="token plain"> </span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">int</span><span class="token plain"> last </span><span class="token operator">=</span><span class="token plain"> </span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">auto</span><span class="token plain"> c </span><span class="token operator">:</span><span class="token plain"> s</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">c </span><span class="token operator">&gt;=</span><span class="token plain"> </span><span class="token char" style="color:rgb(255, 121, 198)">'0'</span><span class="token plain"> </span><span class="token operator">&amp;&amp;</span><span class="token plain"> c </span><span class="token operator">&lt;=</span><span class="token plain"> </span><span class="token char" style="color:rgb(255, 121, 198)">'9'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">first </span><span class="token operator">==</span><span class="token plain"> </span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                    first </span><span class="token operator">=</span><span class="token plain"> c </span><span class="token operator">-</span><span class="token plain"> </span><span class="token char" style="color:rgb(255, 121, 198)">'0'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                last </span><span class="token operator">=</span><span class="token plain"> c </span><span class="token operator">-</span><span class="token plain"> </span><span class="token char" style="color:rgb(255, 121, 198)">'0'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">first </span><span class="token operator">==</span><span class="token plain"> </span><span class="token operator">-</span><span class="token number">1</span><span class="token plain"> </span><span class="token operator">||</span><span class="token plain"> last </span><span class="token operator">==</span><span class="token plain"> </span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            cout </span><span class="token operator">&lt;&lt;</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"error"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        ans </span><span class="token operator">+=</span><span class="token plain"> first </span><span class="token operator">*</span><span class="token plain"> </span><span class="token number">10</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"> last</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    cout </span><span class="token operator">&lt;&lt;</span><span class="token plain"> ans </span><span class="token operator">&lt;&lt;</span><span class="token plain"> endl</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="part-2">Part 2<a href="https://blog.yunshu.site/blog/2023/12/01/aoc2023#part-2" class="hash-link" aria-label="Part 2的直接链接" title="Part 2的直接链接">​</a></h3>
<a href="https://www.reddit.com/r/adventofcode/comments/1885e88/2023_day_1_did_not_expect_that/" target="_blank" style="display:flex;justify-content:center" no-referrer="true"><img src="https://blog.yunshu.site/assets/images/day1-part2-5effc5d76cc29285f9005e8822954452.jpg" alt="day1-part2" loading="lazy"></a>
<p><code>one</code>, <code>two</code>, <code>three</code>, <code>four</code>, <code>five</code>, <code>six</code>, <code>seven</code>, <code>eight</code>, 和 <code>nine</code> 这些单词也算数字，例如 <code>two1nine</code> 组成的数字是 29。求所有行组成的数字的和。</p>
<p>这部分我做了很久，我最开始的思路是：对于每一行，先找第一个数字，再找第二个数字。接着找英文单词数字，使用<code>string::find</code> 函数找每个单词的位置，比较哪个才是最小的，哪个是最大的。但是我忽略了每行可能有多个同一单词的情况，例如 <code>one2one</code>, 正确应该是 11, 我的程序输出的是 12。</p>
<p>看了下 Reddit 上的讨论，有些人是从头遍历字符串，遇到 <code>one</code> 等就将其替换成 1。但是会遇到 <code>twone</code> 这种情况。</p>
<p>最后我的做法是先找到第一个单词，接着将字符串反转，找第一个单词。</p>
<div class="language-cpp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-cpp codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token macro property directive-hash">#</span><span class="token macro property directive keyword" style="color:rgb(189, 147, 249);font-style:italic">include</span><span class="token macro property"> </span><span class="token macro property string" style="color:rgb(255, 121, 198)">&lt;algorithm&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token macro property directive-hash">#</span><span class="token macro property directive keyword" style="color:rgb(189, 147, 249);font-style:italic">include</span><span class="token macro property"> </span><span class="token macro property string" style="color:rgb(255, 121, 198)">&lt;bits/stdc++.h&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token macro property directive-hash">#</span><span class="token macro property directive keyword" style="color:rgb(189, 147, 249);font-style:italic">include</span><span class="token macro property"> </span><span class="token macro property string" style="color:rgb(255, 121, 198)">&lt;cctype&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token macro property directive-hash">#</span><span class="token macro property directive keyword" style="color:rgb(189, 147, 249);font-style:italic">include</span><span class="token macro property"> </span><span class="token macro property string" style="color:rgb(255, 121, 198)">&lt;fstream&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token macro property directive-hash">#</span><span class="token macro property directive keyword" style="color:rgb(189, 147, 249);font-style:italic">include</span><span class="token macro property"> </span><span class="token macro property string" style="color:rgb(255, 121, 198)">&lt;iostream&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token macro property directive-hash">#</span><span class="token macro property directive keyword" style="color:rgb(189, 147, 249);font-style:italic">include</span><span class="token macro property"> </span><span class="token macro property string" style="color:rgb(255, 121, 198)">&lt;unordered_map&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">using</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">namespace</span><span class="token plain"> std</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">auto</span><span class="token plain"> NumToString </span><span class="token operator">=</span><span class="token plain"> unordered_map</span><span class="token operator">&lt;</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">int</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> string</span><span class="token operator">&gt;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token number">1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"one"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token number">2</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"two"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">   </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token number">3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"three"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token number">4</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"four"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token number">5</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"five"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token number">6</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"six"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token number">7</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"seven"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token number">8</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"eight"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token number">9</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"nine"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">class</span><span class="token plain"> </span><span class="token class-name">Num</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">public</span><span class="token operator">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">bool</span><span class="token plain"> used </span><span class="token operator">=</span><span class="token plain"> </span><span class="token boolean">false</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    string</span><span class="token double-colon punctuation" style="color:rgb(248, 248, 242)">::</span><span class="token plain">size_type loc </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">int</span><span class="token plain"> value </span><span class="token operator">=</span><span class="token plain"> </span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">bool</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">operator</span><span class="token operator">&lt;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> Num </span><span class="token operator">&amp;</span><span class="token plain">other</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">this</span><span class="token operator">-&gt;</span><span class="token plain">loc </span><span class="token operator">&lt;</span><span class="token plain"> other</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">loc</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">int</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">main</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    ios</span><span class="token double-colon punctuation" style="color:rgb(248, 248, 242)">::</span><span class="token function" style="color:rgb(80, 250, 123)">sync_with_stdio</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token boolean">false</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    cin</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">tie</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">nullptr</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    fstream in</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token comment" style="color:rgb(98, 114, 164)">// in.open("example2.txt");</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    in</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">open</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"input.txt"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token operator">!</span><span class="token plain">in</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">is_open</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token function" style="color:rgb(80, 250, 123)">exit</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">int</span><span class="token plain"> ans </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">while</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token operator">!</span><span class="token plain">in</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">eof</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        string s</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        in </span><span class="token operator">&gt;&gt;</span><span class="token plain"> s</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        Num first</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        Num last</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">string</span><span class="token double-colon punctuation" style="color:rgb(248, 248, 242)">::</span><span class="token plain">size_type i </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> i </span><span class="token operator">&lt;</span><span class="token plain"> s</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">size</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><span class="token operator">++</span><span class="token plain">i</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">auto</span><span class="token plain"> </span><span class="token operator">&amp;</span><span class="token plain">c </span><span class="token operator">=</span><span class="token plain"> s</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">i</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">c </span><span class="token operator">&gt;=</span><span class="token plain"> </span><span class="token char" style="color:rgb(255, 121, 198)">'0'</span><span class="token plain"> </span><span class="token operator">&amp;&amp;</span><span class="token plain"> c </span><span class="token operator">&lt;=</span><span class="token plain"> </span><span class="token char" style="color:rgb(255, 121, 198)">'9'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                Num value</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> i</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> c </span><span class="token operator">-</span><span class="token plain"> </span><span class="token char" style="color:rgb(255, 121, 198)">'0'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token operator">!</span><span class="token plain">first</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">used</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                    first </span><span class="token operator">=</span><span class="token plain"> value</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                last </span><span class="token operator">=</span><span class="token plain"> value</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">auto</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">n</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> str</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> </span><span class="token operator">:</span><span class="token plain"> NumToString</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">auto</span><span class="token plain"> loc </span><span class="token operator">=</span><span class="token plain"> s</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">find</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">str</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">loc </span><span class="token operator">!=</span><span class="token plain"> string</span><span class="token double-colon punctuation" style="color:rgb(248, 248, 242)">::</span><span class="token plain">npos</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                Num value</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> loc</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> n</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token operator">!</span><span class="token plain">first</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">used</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                    first </span><span class="token operator">=</span><span class="token plain"> value</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                    first </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">min</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">first</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> value</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token function" style="color:rgb(80, 250, 123)">reverse</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">s</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">begin</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> s</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">end</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">auto</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">n</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> str</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> </span><span class="token operator">:</span><span class="token plain"> NumToString</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token function" style="color:rgb(80, 250, 123)">reverse</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">str</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">begin</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> str</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">end</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">auto</span><span class="token plain"> loc </span><span class="token operator">=</span><span class="token plain"> s</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">find</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">str</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">loc </span><span class="token operator">!=</span><span class="token plain"> string</span><span class="token double-colon punctuation" style="color:rgb(248, 248, 242)">::</span><span class="token plain">npos</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                Num value</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> s</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">size</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">-</span><span class="token plain"> loc </span><span class="token operator">-</span><span class="token plain"> str</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">size</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> n</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token operator">!</span><span class="token plain">last</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">used</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                    last </span><span class="token operator">=</span><span class="token plain"> value</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                    last </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">max</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">last</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> value</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token operator">!</span><span class="token plain">first</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">used </span><span class="token operator">||</span><span class="token plain"> </span><span class="token operator">!</span><span class="token plain">last</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">used</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            cerr </span><span class="token operator">&lt;&lt;</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"error"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">auto</span><span class="token plain"> add </span><span class="token operator">=</span><span class="token plain"> first</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">value </span><span class="token operator">*</span><span class="token plain"> </span><span class="token number">10</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"> last</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">value</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        ans </span><span class="token operator">+=</span><span class="token plain"> add</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    cout </span><span class="token operator">&lt;&lt;</span><span class="token plain"> ans </span><span class="token operator">&lt;&lt;</span><span class="token plain"> endl</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>]]></content>
        <author>
            <name>YunShu</name>
            <uri>https://github.com/Selflocking</uri>
        </author>
        <category label="AOC" term="AOC"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[修复基于 Btrfs 的 Manjaro 的系统引导]]></title>
        <id>https://blog.yunshu.site/blog/2023/11/29/fix-manjaro-boot</id>
        <link href="https://blog.yunshu.site/blog/2023/11/29/fix-manjaro-boot"/>
        <updated>2023-11-29T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[参考：https://lyh543.github.io/posts/2021-10-15-fix-efi-grub-on-manjaro.html]]></summary>
        <content type="html"><![CDATA[<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>备注</div><div class="admonitionContent_BuS1"><p>参考：<a href="https://lyh543.github.io/posts/2021-10-15-fix-efi-grub-on-manjaro.html" target="_blank" rel="noopener noreferrer">https://lyh543.github.io/posts/2021-10-15-fix-efi-grub-on-manjaro.html</a></p></div></div>
<p>今天更新了一下 BIOS, 结果 BIOS 恢复出厂设置了，EFI 分区被改，引导项全丢了。Windows 还打开了已关闭的 BitLocker。</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="启动硬盘里的-manjaro">启动硬盘里的 Manjaro<a href="https://blog.yunshu.site/blog/2023/11/29/fix-manjaro-boot#%E5%90%AF%E5%8A%A8%E7%A1%AC%E7%9B%98%E9%87%8C%E7%9A%84-manjaro" class="hash-link" aria-label="启动硬盘里的 Manjaro的直接链接" title="启动硬盘里的 Manjaro的直接链接">​</a></h2>
<p>首先准备一个 Manjaro 的启动盘，推荐使用 <a href="https://www.ventoy.net/" target="_blank" rel="noopener noreferrer">Ventoy</a> 制作启动盘。</p>
<p>查看分区信息：</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">$ </span><span class="token function" style="color:rgb(80, 250, 123)">sudo</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">fdisk</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-l</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Disk /dev/nvme0n1：476.94 GiB，512110190592 字节，1000215216 个扇区</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">磁盘型号：WDC PC SN730 SDBPNTY-512G-1101</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">单元：扇区 / </span><span class="token number">1</span><span class="token plain"> * </span><span class="token number">512</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">512</span><span class="token plain"> 字节</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">扇区大小</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">逻辑/物理</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain">：512 字节 / </span><span class="token number">512</span><span class="token plain"> 字节</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">I/O 大小</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">最小/最佳</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain">：512 字节 / </span><span class="token number">512</span><span class="token plain"> 字节</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">磁盘标签类型：gpt</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">磁盘标识符：4B5AB150-F8D6-409B-AC38-403BDE6744BF</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">设备                起点       末尾      扇区   大小 类型</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">/dev/nvme0n1p1      </span><span class="token number">2048</span><span class="token plain">    </span><span class="token number">2099199</span><span class="token plain">   </span><span class="token number">2097152</span><span class="token plain">     1G EFI 系统</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">/dev/nvme0n1p2   </span><span class="token number">2099200</span><span class="token plain">    </span><span class="token number">2131967</span><span class="token plain">     </span><span class="token number">32768</span><span class="token plain">    16M Microsoft 保留</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">/dev/nvme0n1p3   </span><span class="token number">2131968</span><span class="token plain">  </span><span class="token number">580947967</span><span class="token plain"> </span><span class="token number">578816000</span><span class="token plain">   276G Microsoft 基本数据</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">/dev/nvme0n1p4 </span><span class="token number">580947968</span><span class="token plain"> </span><span class="token number">1000215182</span><span class="token plain"> </span><span class="token number">419267215</span><span class="token plain"> </span><span class="token number">199</span><span class="token plain">.9G Linux 文件系统</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>可以看到 EFI 分区是 <code>/dev/nvme0n1p1</code>，Manjaro 根分区是 <code>/dev/nvme0n1p4</code>。</p>
<p>挂载分区：</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">$ </span><span class="token function" style="color:rgb(80, 250, 123)">sudo</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">mount</span><span class="token plain"> /dev/nvme0n1p4 /mnt</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>查看分区：</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">$ </span><span class="token function" style="color:rgb(80, 250, 123)">ls</span><span class="token plain"> /mnt</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">@  @home  @cache @log </span><span class="token punctuation" style="color:rgb(248, 248, 242)">..</span><span class="token plain">.</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>chroot 到 Manjaro：</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">manjaro-chroot /mnt/@</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="安装-grub">安装 grub<a href="https://blog.yunshu.site/blog/2023/11/29/fix-manjaro-boot#%E5%AE%89%E8%A3%85-grub" class="hash-link" aria-label="安装 grub的直接链接" title="安装 grub的直接链接">​</a></h2>
<p>挂载 EFI 分区：</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">$ </span><span class="token function" style="color:rgb(80, 250, 123)">sudo</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">mount</span><span class="token plain"> /dev/nvme0n1p1 /boot/efi</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>安装 grub：</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">$ grub-install </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">--recheck</span><span class="token plain"> /dev/nvme0n1 --efi-directory</span><span class="token operator">=</span><span class="token plain">/boot/efi</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Installing </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> x86_64-efi platform.</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Installation finished. No error reported.</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="生成-grub-配置文件">生成 grub 配置文件<a href="https://blog.yunshu.site/blog/2023/11/29/fix-manjaro-boot#%E7%94%9F%E6%88%90-grub-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6" class="hash-link" aria-label="生成 grub 配置文件的直接链接" title="生成 grub 配置文件的直接链接">​</a></h2>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">$ </span><span class="token function" style="color:rgb(80, 250, 123)">mkdir</span><span class="token plain"> /boot/efi/grub</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">$ </span><span class="token function" style="color:rgb(80, 250, 123)">grub-mkconfig</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-o</span><span class="token plain"> /boot/efi/grub/grub.cfg</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>之后重启就可以了。</p>]]></content>
        <author>
            <name>YunShu</name>
            <uri>https://github.com/Selflocking</uri>
        </author>
        <category label="btrfs" term="btrfs"/>
        <category label="manjaro" term="manjaro"/>
        <category label="grub" term="grub"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[使用 wakapi 统计你的编程时间]]></title>
        <id>https://blog.yunshu.site/blog/2023/11/16/wakapi</id>
        <link href="https://blog.yunshu.site/blog/2023/11/16/wakapi"/>
        <updated>2023-11-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[之前用过一段时间的 wakatime，但是 wakatime free 只能保存两周的数据，最近才发现了开源的 wakapi，可以自己搭建一个 wakatime 服务器，保存自己的数据。]]></summary>
        <content type="html"><![CDATA[<p>之前用过一段时间的 wakatime，但是 wakatime free 只能保存两周的数据，最近才发现了开源的 wakapi，可以自己搭建一个 wakatime 服务器，保存自己的数据。</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="安装必要的软件">安装必要的软件<a href="https://blog.yunshu.site/blog/2023/11/16/wakapi#%E5%AE%89%E8%A3%85%E5%BF%85%E8%A6%81%E7%9A%84%E8%BD%AF%E4%BB%B6" class="hash-link" aria-label="安装必要的软件的直接链接" title="安装必要的软件的直接链接">​</a></h2>
<p>首先安装 docker 和 caddy，这里不再赘述，可以参考 <a href="https://blog.yunshu.site/docs/vps/docker">Docker</a> 和 <a href="https://blog.yunshu.site/docs/vps/caddy">Caddy</a>。</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="使用-docker-启动-wakapi">使用 docker 启动 wakapi<a href="https://blog.yunshu.site/blog/2023/11/16/wakapi#%E4%BD%BF%E7%94%A8-docker-%E5%90%AF%E5%8A%A8-wakapi" class="hash-link" aria-label="使用 docker 启动 wakapi的直接链接" title="使用 docker 启动 wakapi的直接链接">​</a></h2>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># 创建一个数据卷</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">docker</span><span class="token plain"> volume create wakapi-data</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SALT</span><span class="token operator">=</span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">$(</span><span class="token string variable function" style="color:rgb(80, 250, 123);font-style:italic">cat</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic"> /dev/urandom </span><span class="token string variable operator" style="color:rgb(189, 147, 249);font-style:italic">|</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic"> </span><span class="token string variable function" style="color:rgb(80, 250, 123);font-style:italic">tr</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic"> </span><span class="token string variable parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-dc</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic"> </span><span class="token string variable string" style="color:rgb(255, 121, 198);font-style:italic">'a-zA-Z0-9'</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic"> </span><span class="token string variable operator" style="color:rgb(189, 147, 249);font-style:italic">|</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic"> </span><span class="token string variable function" style="color:rgb(80, 250, 123);font-style:italic">fold</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic"> </span><span class="token string variable parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-w</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic"> $</span><span class="token string variable punctuation" style="color:rgb(248, 248, 242);font-style:italic">{</span><span class="token string variable number" style="color:rgb(189, 147, 249);font-style:italic">1</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">:-32</span><span class="token string variable punctuation" style="color:rgb(248, 248, 242);font-style:italic">}</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic"> </span><span class="token string variable operator" style="color:rgb(189, 147, 249);font-style:italic">|</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic"> </span><span class="token string variable function" style="color:rgb(80, 250, 123);font-style:italic">head</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic"> </span><span class="token string variable parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-n</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic"> </span><span class="token string variable number" style="color:rgb(189, 147, 249);font-style:italic">1</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">)</span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># 启动容器</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">docker</span><span class="token plain"> run </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-d</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-p</span><span class="token plain"> </span><span class="token number">3000</span><span class="token plain">:3000 </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-e</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"WAKAPI_PASSWORD_SALT=</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">$SALT</span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-v</span><span class="token plain"> wakapi-data:/data </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">--name</span><span class="token plain"> wakapi </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  ghcr.io/muety/wakapi:latest</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="配置-caddy">配置 caddy<a href="https://blog.yunshu.site/blog/2023/11/16/wakapi#%E9%85%8D%E7%BD%AE-caddy" class="hash-link" aria-label="配置 caddy的直接链接" title="配置 caddy的直接链接">​</a></h2>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">nano</span><span class="token plain"> /etc/caddy/Caddyfile</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<div class="language-nginx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-nginx codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token directive keyword" style="color:rgb(189, 147, 249);font-style:italic">wakapi.example.com</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token directive keyword" style="color:rgb(189, 147, 249);font-style:italic">encode</span><span class="token directive"> zstd gzip</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token directive"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token directive">    header</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        Strict-Transport-Security "max-age=2592000</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> includeSubDomains"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token directive keyword" style="color:rgb(189, 147, 249);font-style:italic">log</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        output file /var/log/caddy/wakapi.dev.access.log</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        format single_field common_log</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    reverse_proxy http://[::1]:3000</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    @api path_regexp "^/api.*"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    @notapi not path_regexp "^/api.*"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    push @notapi /assets/vendor/source-sans-3.css</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    push @notapi /assets/css/app.dist.css</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    push @notapi /assets/vendor/petite-vue.min.js</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    push @notapi /assets/vendor/chart.min.js</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    push @notapi /assets/vendor/iconify.basic.min.js</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    push @notapi /assets/js/icons.dist.js</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    push @notapi /assets/js/base.js</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    push @notapi /assets/images/logo.svg</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">systemctl restart caddy</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="配置-wakatime">配置 wakatime<a href="https://blog.yunshu.site/blog/2023/11/16/wakapi#%E9%85%8D%E7%BD%AE-wakatime" class="hash-link" aria-label="配置 wakatime的直接链接" title="配置 wakatime的直接链接">​</a></h2>
<p>打开 wakapi.example.com，点击右上角的 <code>Sign Up</code> 注册一个账号，第一个注册的账号会自动成为管理员。</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="禁止注册">禁止注册<a href="https://blog.yunshu.site/blog/2023/11/16/wakapi#%E7%A6%81%E6%AD%A2%E6%B3%A8%E5%86%8C" class="hash-link" aria-label="禁止注册的直接链接" title="禁止注册的直接链接">​</a></h2>
<p>如果不想让其他人注册，可以在 <code>docker run</code> 的时候添加 <code>-e "WAKAPI_ALLOW_SIGNUP=false"</code>，或者在 <code>docker exec -it wakapi bash</code> 进入容器后，修改 <code>config.yml</code> 文件，将 <code>security.allow_signup</code> 改为 <code>false</code>。</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">docker</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">rm</span><span class="token plain"> wakapi</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">docker</span><span class="token plain"> run </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-d</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-p</span><span class="token plain"> </span><span class="token number">3000</span><span class="token plain">:3000 </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-e</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"WAKAPI_PASSWORD_SALT=</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">$SALT</span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-e</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"WAKAPI_ALLOW_SIGNUP=false"</span><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-v</span><span class="token plain"> wakapi-data:/data </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">--name</span><span class="token plain"> wakapi </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  ghcr.io/muety/wakapi:latest</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="配置-wakatime-插件">配置 wakatime 插件<a href="https://blog.yunshu.site/blog/2023/11/16/wakapi#%E9%85%8D%E7%BD%AE-wakatime-%E6%8F%92%E4%BB%B6" class="hash-link" aria-label="配置 wakatime 插件的直接链接" title="配置 wakatime 插件的直接链接">​</a></h2>
<p>本地使用首先要创建一个文件</p>
<div class="language-ini codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockTitle_Ktv7">~/.wakatime.cfg</div><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ini codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token section punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token section section-name selector" style="color:rgb(255, 121, 198)">settings</span><span class="token section punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key attr-name" style="color:rgb(241, 250, 140)">api_url</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token value attr-value">https://wakapi.example.com/api</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key attr-name" style="color:rgb(241, 250, 140)">api_key</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token value attr-value">00000000-0000-0000-0000-000000000000</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>接着去 IDE 中安装 wakatime 即可。</p>]]></content>
        <author>
            <name>YunShu</name>
            <uri>https://github.com/Selflocking</uri>
        </author>
        <category label="wakapi" term="wakapi"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[博客重构]]></title>
        <id>https://blog.yunshu.site/blog/2023/11/09/refactor-blog</id>
        <link href="https://blog.yunshu.site/blog/2023/11/09/refactor-blog"/>
        <updated>2023-11-09T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[之前的博客使用 hexo + icarus 构建，技术栈比较旧。不支持某些功能例如暗色模式。于是开始重构博客。]]></summary>
        <content type="html"><![CDATA[<p>之前的博客使用 hexo + icarus 构建，技术栈比较旧。不支持某些功能例如暗色模式。于是开始重构博客。</p>]]></content>
        <author>
            <name>YunShu</name>
            <uri>https://github.com/Selflocking</uri>
        </author>
        <category label="blog" term="blog"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[The End-of-Line Story]]></title>
        <id>https://blog.yunshu.site/blog/2023/03/04/The-End-of-Line-Story</id>
        <link href="https://blog.yunshu.site/blog/2023/03/04/The-End-of-Line-Story"/>
        <updated>2023-03-04T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[闲的没有事情做，把以前看到的一篇文章翻译一下]]></summary>
        <content type="html"><![CDATA[<p>闲的没有事情做，把以前看到的一篇文章翻译一下</p>
<p>面向文本的 ASCII 标准并未定义一个 行终止符（ end-of-line，EOL）。相反的，ASCII 标准定义了两个独立且互不相关的代表打印头移动方式的字符：回车（Carriage Return，CR）和 换行（Line Feed，LF）。IBM 的 EBCDIC 并没有犯这个错误，它定义了一个代表新的一行的字符（New Line，NL）。早期操作系统设计者不得不采纳一些使用 CR 和 LF 代表 end-of-line 的约定：有些人使用 LF，有些人使用 CR，还有一些人使用 LF CR 或者 CR LF。</p>
<p>在 ARPAnet 的早期研究时期（大约在 1970 ~ 1972），操作系统采用的EOL的多样化使得不同系统间的网络通讯变得困难。经过一些讨论之后（被记录在早期的 RFC 中），研究者们选择了一个约定：</p>
<blockquote>
<p>在网络中传输的 ASCII 文本必须使用 CR LF 作为 EOL</p>
</blockquote>
<p>TODO</p>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>links</div><div class="admonitionContent_BuS1"><p><a href="https://www.rfc-editor.org/old/EOLstory.txt" target="_blank" rel="noopener noreferrer">https://www.rfc-editor.org/old/EOLstory.txt</a></p></div></div>]]></content>
        <author>
            <name>YunShu</name>
            <uri>https://github.com/Selflocking</uri>
        </author>
        <category label="翻译" term="翻译"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Advent of Code 2022]]></title>
        <id>https://blog.yunshu.site/blog/2022/12/02/Advent-of-Code-2022</id>
        <link href="https://blog.yunshu.site/blog/2022/12/02/Advent-of-Code-2022"/>
        <updated>2022-12-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[看群友聊天才知道有这样一个比赛：Advent of Code 2022]]></summary>
        <content type="html"><![CDATA[<p>看群友聊天才知道有这样一个比赛：<a href="https://adventofcode.com/2022" target="_blank" rel="noopener noreferrer">Advent of Code 2022</a></p>
<blockquote>
<p>我的代码及数据仓库：<a href="https://github.com/Selflocking/Code/tree/master/others/AOC2022" target="_blank" rel="noopener noreferrer">https://github.com/Selflocking/Code/tree/master/others/AOC2022</a></p>
</blockquote>
<p>比赛从12月1日开始，一直到圣诞节12月25日，每天发一道题，不限解题方法，只要最后答案，同时为了限制作弊，每个人拿到的数据不一样。</p>
<p>第一位解出题的人将获得100分，第二位获得99分，依次递减，最低递减到1。</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="day-1-calorie-counting"><a href="https://adventofcode.com/2022/day/1" target="_blank" rel="noopener noreferrer">Day 1: Calorie Counting</a><a href="https://blog.yunshu.site/blog/2022/12/02/Advent-of-Code-2022#day-1-calorie-counting" class="hash-link" aria-label="day-1-calorie-counting的直接链接" title="day-1-calorie-counting的直接链接">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="part-1">Part 1<a href="https://blog.yunshu.site/blog/2022/12/02/Advent-of-Code-2022#part-1" class="hash-link" aria-label="Part 1的直接链接" title="Part 1的直接链接">​</a></h3>
<p>大概意思是给你类似于如下的数据</p>
<div class="language-txt codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-txt codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">1000</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">2000</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">3000</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">4000</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">5000</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">6000</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">7000</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">8000</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">9000</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">10000</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>数字被空行分隔开，求最大的数字和。
比如上面数据中，最大的数字和为：7000+8000+9000 = 24000</p>
<div class="language-cpp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-cpp codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token macro property directive-hash">#</span><span class="token macro property directive keyword" style="color:rgb(189, 147, 249);font-style:italic">include</span><span class="token macro property"> </span><span class="token macro property string" style="color:rgb(255, 121, 198)">&lt;iostream&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token macro property directive-hash">#</span><span class="token macro property directive keyword" style="color:rgb(189, 147, 249);font-style:italic">include</span><span class="token macro property"> </span><span class="token macro property string" style="color:rgb(255, 121, 198)">&lt;string&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">using</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">namespace</span><span class="token plain"> std</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">int</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">main</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token function" style="color:rgb(80, 250, 123)">freopen</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"data.in"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"r"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">stdin</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token function" style="color:rgb(80, 250, 123)">freopen</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"data.out"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"w"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">stdout</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">int</span><span class="token plain"> ans </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">int</span><span class="token plain"> tmp </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    string s</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">while</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token function" style="color:rgb(80, 250, 123)">getline</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">cin</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> s</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">s</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">size</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">==</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            ans </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">max</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">ans</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> tmp</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            tmp </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            tmp </span><span class="token operator">+=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">stoi</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">s</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    cout </span><span class="token operator">&lt;&lt;</span><span class="token plain"> ans</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token function" style="color:rgb(80, 250, 123)">fclose</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token constant" style="color:rgb(189, 147, 249)">stdin</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token function" style="color:rgb(80, 250, 123)">fclose</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token constant" style="color:rgb(189, 147, 249)">stdout</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>按<code>ctrl+d</code>结束输入，得到答案。</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="part-2">Part 2<a href="https://blog.yunshu.site/blog/2022/12/02/Advent-of-Code-2022#part-2" class="hash-link" aria-label="Part 2的直接链接" title="Part 2的直接链接">​</a></h3>
<p>要求输出最大的三个数字和的和。</p>
<div class="language-cpp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-cpp codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token macro property directive-hash">#</span><span class="token macro property directive keyword" style="color:rgb(189, 147, 249);font-style:italic">include</span><span class="token macro property"> </span><span class="token macro property string" style="color:rgb(255, 121, 198)">&lt;algorithm&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token macro property directive-hash">#</span><span class="token macro property directive keyword" style="color:rgb(189, 147, 249);font-style:italic">include</span><span class="token macro property"> </span><span class="token macro property string" style="color:rgb(255, 121, 198)">&lt;iostream&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token macro property directive-hash">#</span><span class="token macro property directive keyword" style="color:rgb(189, 147, 249);font-style:italic">include</span><span class="token macro property"> </span><span class="token macro property string" style="color:rgb(255, 121, 198)">&lt;string&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token macro property directive-hash">#</span><span class="token macro property directive keyword" style="color:rgb(189, 147, 249);font-style:italic">include</span><span class="token macro property"> </span><span class="token macro property string" style="color:rgb(255, 121, 198)">&lt;vector&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">using</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">namespace</span><span class="token plain"> std</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">vector</span><span class="token operator">&lt;</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">int</span><span class="token operator">&gt;</span><span class="token plain"> ans</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">int</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">main</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token function" style="color:rgb(80, 250, 123)">freopen</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"data.in"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"r"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">stdin</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token function" style="color:rgb(80, 250, 123)">freopen</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"data.out"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"w"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">stdout</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token comment" style="color:rgb(98, 114, 164)">// int ans = 0;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">int</span><span class="token plain"> tmp </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    string s</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">while</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token function" style="color:rgb(80, 250, 123)">getline</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">cin</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> s</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">s</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">size</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">==</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token comment" style="color:rgb(98, 114, 164)">// ans = max(ans, tmp);</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            ans</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">emplace_back</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">tmp</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            tmp </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            tmp </span><span class="token operator">+=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">stoi</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">s</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token function" style="color:rgb(80, 250, 123)">sort</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">ans</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">begin</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> ans</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">end</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    cout </span><span class="token operator">&lt;&lt;</span><span class="token plain"> ans</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">ans</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">size</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">-</span><span class="token plain"> </span><span class="token number">1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"> ans</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">ans</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">size</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">-</span><span class="token plain"> </span><span class="token number">2</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"> ans</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">ans</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">size</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">-</span><span class="token plain"> </span><span class="token number">3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">         </span><span class="token operator">&lt;&lt;</span><span class="token plain"> endl</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token comment" style="color:rgb(98, 114, 164)">// cout &lt;&lt; ans;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token function" style="color:rgb(80, 250, 123)">fclose</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token constant" style="color:rgb(189, 147, 249)">stdin</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token function" style="color:rgb(80, 250, 123)">fclose</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token constant" style="color:rgb(189, 147, 249)">stdout</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>最后喜提2分，排名 119865。😥</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="day-2-rock-paper-scissors"><a href="https://adventofcode.com/2022/day/2" target="_blank" rel="noopener noreferrer">Day 2: Rock Paper Scissors</a><a href="https://blog.yunshu.site/blog/2022/12/02/Advent-of-Code-2022#day-2-rock-paper-scissors" class="hash-link" aria-label="day-2-rock-paper-scissors的直接链接" title="day-2-rock-paper-scissors的直接链接">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="part-1-1">Part 1<a href="https://blog.yunshu.site/blog/2022/12/02/Advent-of-Code-2022#part-1-1" class="hash-link" aria-label="Part 1的直接链接" title="Part 1的直接链接">​</a></h3>
<p>题目样例：</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">A Y</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">B X</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">C Z</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>A石头 B布 C剪刀
X石头 Y布 Z剪刀
石头 1 分，布 2 分，剪刀 3 分
输了 0 分，平局 3 分，赢了 6 分</p>
<p>故样例总共得15分。</p>
<p><del>if else 就完了</del></p>
<div class="language-cpp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-cpp codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token macro property directive-hash">#</span><span class="token macro property directive keyword" style="color:rgb(189, 147, 249);font-style:italic">include</span><span class="token macro property"> </span><span class="token macro property string" style="color:rgb(255, 121, 198)">&lt;iostream&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">using</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">namespace</span><span class="token plain"> std</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// A石头 B布 C剪刀</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// X石头 Y布 Z剪刀</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// 石头 1 分，布 2 分，剪刀 3 分</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// 输了 0 分，平局 3 分，赢了 6 分</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">int</span><span class="token plain"> score </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">int</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">main</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token function" style="color:rgb(80, 250, 123)">freopen</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"data.in"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"r"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">stdin</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token function" style="color:rgb(80, 250, 123)">freopen</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"data.out"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"w"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">stdout</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">char</span><span class="token plain"> a</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> b</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">while</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">cin </span><span class="token operator">&gt;&gt;</span><span class="token plain"> a </span><span class="token operator">&gt;&gt;</span><span class="token plain"> b</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">a </span><span class="token operator">==</span><span class="token plain"> </span><span class="token char" style="color:rgb(255, 121, 198)">'A'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">b </span><span class="token operator">==</span><span class="token plain"> </span><span class="token char" style="color:rgb(255, 121, 198)">'X'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                score </span><span class="token operator">+=</span><span class="token plain"> </span><span class="token number">1</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"> </span><span class="token number">3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">b </span><span class="token operator">==</span><span class="token plain"> </span><span class="token char" style="color:rgb(255, 121, 198)">'Y'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                score </span><span class="token operator">+=</span><span class="token plain"> </span><span class="token number">2</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"> </span><span class="token number">6</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                score </span><span class="token operator">+=</span><span class="token plain"> </span><span class="token number">3</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">a </span><span class="token operator">==</span><span class="token plain"> </span><span class="token char" style="color:rgb(255, 121, 198)">'B'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">b </span><span class="token operator">==</span><span class="token plain"> </span><span class="token char" style="color:rgb(255, 121, 198)">'X'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                score </span><span class="token operator">+=</span><span class="token plain"> </span><span class="token number">1</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">b </span><span class="token operator">==</span><span class="token plain"> </span><span class="token char" style="color:rgb(255, 121, 198)">'Y'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                score </span><span class="token operator">+=</span><span class="token plain"> </span><span class="token number">2</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"> </span><span class="token number">3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                score </span><span class="token operator">+=</span><span class="token plain"> </span><span class="token number">3</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"> </span><span class="token number">6</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">b </span><span class="token operator">==</span><span class="token plain"> </span><span class="token char" style="color:rgb(255, 121, 198)">'X'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                score </span><span class="token operator">+=</span><span class="token plain"> </span><span class="token number">1</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"> </span><span class="token number">6</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">b </span><span class="token operator">==</span><span class="token plain"> </span><span class="token char" style="color:rgb(255, 121, 198)">'Y'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                score </span><span class="token operator">+=</span><span class="token plain"> </span><span class="token number">2</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                score </span><span class="token operator">+=</span><span class="token plain"> </span><span class="token number">3</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"> </span><span class="token number">3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    cout </span><span class="token operator">&lt;&lt;</span><span class="token plain"> score </span><span class="token operator">&lt;&lt;</span><span class="token plain"> endl</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token function" style="color:rgb(80, 250, 123)">fclose</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token constant" style="color:rgb(189, 147, 249)">stdin</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token function" style="color:rgb(80, 250, 123)">fclose</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token constant" style="color:rgb(189, 147, 249)">stdout</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="�复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="part-2-1">Part 2<a href="https://blog.yunshu.site/blog/2022/12/02/Advent-of-Code-2022#part-2-1" class="hash-link" aria-label="Part 2的直接链接" title="Part 2的直接链接">​</a></h3>
<p>A石头 B布 C剪刀
X输 Y平局 Z赢
石头 1 分，布 2 分，剪刀 3 分
输了 0 分，平局 3 分，赢了 6 分</p>
<div class="language-cpp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-cpp codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token macro property directive-hash">#</span><span class="token macro property directive keyword" style="color:rgb(189, 147, 249);font-style:italic">include</span><span class="token macro property"> </span><span class="token macro property string" style="color:rgb(255, 121, 198)">&lt;iostream&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">using</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">namespace</span><span class="token plain"> std</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// A石头 B布 C剪刀</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// X输 Y平局 Z赢</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// 石头 1 分，布 2 分，剪刀 3 分</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// 输了 0 分，平局 3 分，赢了 6 分</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">int</span><span class="token plain"> score </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">int</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">main</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token function" style="color:rgb(80, 250, 123)">freopen</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"data.in"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"r"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">stdin</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token function" style="color:rgb(80, 250, 123)">freopen</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"data.out"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"w"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">stdout</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">char</span><span class="token plain"> a</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> b</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">while</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">cin </span><span class="token operator">&gt;&gt;</span><span class="token plain"> a </span><span class="token operator">&gt;&gt;</span><span class="token plain"> b</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">a </span><span class="token operator">==</span><span class="token plain"> </span><span class="token char" style="color:rgb(255, 121, 198)">'A'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">//石头</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">b </span><span class="token operator">==</span><span class="token plain"> </span><span class="token char" style="color:rgb(255, 121, 198)">'X'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                score </span><span class="token operator">+=</span><span class="token plain"> </span><span class="token number">0</span><span class="token operator">+</span><span class="token number">3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">b </span><span class="token operator">==</span><span class="token plain"> </span><span class="token char" style="color:rgb(255, 121, 198)">'Y'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                score </span><span class="token operator">+=</span><span class="token plain"> </span><span class="token number">3</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                score </span><span class="token operator">+=</span><span class="token plain"> </span><span class="token number">6</span><span class="token operator">+</span><span class="token number">2</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">a </span><span class="token operator">==</span><span class="token plain"> </span><span class="token char" style="color:rgb(255, 121, 198)">'B'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">//布</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">b </span><span class="token operator">==</span><span class="token plain"> </span><span class="token char" style="color:rgb(255, 121, 198)">'X'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                score </span><span class="token operator">+=</span><span class="token plain"> </span><span class="token number">0</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">b </span><span class="token operator">==</span><span class="token plain"> </span><span class="token char" style="color:rgb(255, 121, 198)">'Y'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                score </span><span class="token operator">+=</span><span class="token plain"> </span><span class="token number">3</span><span class="token operator">+</span><span class="token number">2</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                score </span><span class="token operator">+=</span><span class="token plain"> </span><span class="token number">6</span><span class="token operator">+</span><span class="token number">3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">//剪刀</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">b </span><span class="token operator">==</span><span class="token plain"> </span><span class="token char" style="color:rgb(255, 121, 198)">'X'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                score </span><span class="token operator">+=</span><span class="token plain"> </span><span class="token number">0</span><span class="token operator">+</span><span class="token number">2</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">b </span><span class="token operator">==</span><span class="token plain"> </span><span class="token char" style="color:rgb(255, 121, 198)">'Y'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                score </span><span class="token operator">+=</span><span class="token plain"> </span><span class="token number">3</span><span class="token operator">+</span><span class="token number">3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                score </span><span class="token operator">+=</span><span class="token plain"> </span><span class="token number">6</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    cout </span><span class="token operator">&lt;&lt;</span><span class="token plain"> score </span><span class="token operator">&lt;&lt;</span><span class="token plain"> endl</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token function" style="color:rgb(80, 250, 123)">fclose</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token constant" style="color:rgb(189, 147, 249)">stdin</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token function" style="color:rgb(80, 250, 123)">fclose</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token constant" style="color:rgb(189, 147, 249)">stdout</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>4分了😅</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="day-3-rucksack-reorganization"><a href="https://adventofcode.com/2022/day/3" target="_blank" rel="noopener noreferrer">Day 3: Rucksack Reorganization</a><a href="https://blog.yunshu.site/blog/2022/12/02/Advent-of-Code-2022#day-3-rucksack-reorganization" class="hash-link" aria-label="day-3-rucksack-reorganization的直接链接" title="day-3-rucksack-reorganization的直接链接">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="part-1-2">Part 1<a href="https://blog.yunshu.site/blog/2022/12/02/Advent-of-Code-2022#part-1-2" class="hash-link" aria-label="Part 1的直接链接" title="Part 1的直接链接">​</a></h3>
<p>给一堆字符串，对半分，求两半的公共字符。</p>
<p>a-z 分别赋分 1-26</p>
<p>A-Z 分别赋分 27-52</p>
<p>鸽了很多天，这么多天不做的原因是很多人都是在整活，有人用小众语言写，有人用ChatGPT写，甚至还有人用Excel写。。。</p>
<p>才疏学浅，整不出活，憋了半天用蹩脚的js写了一个:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> dataUrl </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"https://adventofcode.com/2022/day/3/input"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> ansUrl </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"https://adventofcode.com/2022/day/3/answer"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> cookie </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"paste your cookie here"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> request </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">Request</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">dataUrl</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token literal-property property">method</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'GET'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token literal-property property">headers</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token literal-property property">cookie</span><span class="token operator">:</span><span class="token plain"> cookie</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">fetch</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">request</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">then</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token parameter">res</span><span class="token plain"> </span><span class="token arrow operator">=&gt;</span><span class="token plain"> res</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">text</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">then</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token parameter">data</span><span class="token plain"> </span><span class="token arrow operator">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token comment" style="color:rgb(98, 114, 164)">// console.log(typeof data);</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> arr </span><span class="token operator">=</span><span class="token plain"> data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">split</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'\n'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token comment" style="color:rgb(98, 114, 164)">// console.log(arr.length);</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">let</span><span class="token plain"> cnt </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        arr</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">forEach</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token parameter">str</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token arrow operator">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">let</span><span class="token plain"> set </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">Set</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">let</span><span class="token plain"> i </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> i </span><span class="token operator">&lt;</span><span class="token plain"> str</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">length</span><span class="token plain"> </span><span class="token operator">/</span><span class="token plain"> </span><span class="token number">2</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><span class="token operator">++</span><span class="token plain">i</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                set</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">add</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">str</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">i</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">let</span><span class="token plain"> i </span><span class="token operator">=</span><span class="token plain"> str</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">length</span><span class="token plain"> </span><span class="token operator">/</span><span class="token plain"> </span><span class="token number">2</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> i </span><span class="token operator">&lt;</span><span class="token plain"> str</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">length</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><span class="token operator">++</span><span class="token plain">i</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">set</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">has</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">str</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">i</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                    </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token regex regex-delimiter">/</span><span class="token regex regex-source language-regex char-class char-class-punctuation punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token regex regex-source language-regex char-class range">A</span><span class="token regex regex-source language-regex char-class range range-punctuation operator">-</span><span class="token regex regex-source language-regex char-class range">Z</span><span class="token regex regex-source language-regex char-class char-class-punctuation punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token regex regex-delimiter">/</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">test</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">str</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">i</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                        cnt </span><span class="token operator">+=</span><span class="token plain"> str</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">i</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">charCodeAt</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">-</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'A'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">charCodeAt</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"> </span><span class="token number">27</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                        cnt </span><span class="token operator">+=</span><span class="token plain"> str</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">i</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">charCodeAt</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">-</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'a'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">charCodeAt</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"> </span><span class="token number">1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                    </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">break</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token console class-name">console</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">log</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"The answer is"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> cnt</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> cnt</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">then</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token parameter">result</span><span class="token plain"> </span><span class="token arrow operator">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">let</span><span class="token plain"> formData </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">FormData</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        formData</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">append</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"level"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token number">1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        formData</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">append</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"answer"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> result</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token comment" style="color:rgb(98, 114, 164)">// console.log(formData);</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token function" style="color:rgb(80, 250, 123)">fetch</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">ansUrl</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token literal-property property">method</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"POST"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token literal-property property">headers</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token literal-property property">cookie</span><span class="token operator">:</span><span class="token plain"> cookie</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token literal-property property">body</span><span class="token operator">:</span><span class="token plain"> formData</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">then</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token parameter">res</span><span class="token plain"> </span><span class="token arrow operator">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token console class-name">console</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">log</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">res</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">headers</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">get</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"content-length"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token comment" style="color:rgb(98, 114, 164)">// return res.text();</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token comment" style="color:rgb(98, 114, 164)">// .then(data =&gt; console.log(data))</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>答案是正确的，本来想做成自动提交答案，没整成，在一次测试中不小心提交了答案，导致不能再测试了</p>]]></content>
        <author>
            <name>YunShu</name>
            <uri>https://github.com/Selflocking</uri>
        </author>
        <category label="比赛" term="比赛"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[优雅的处理自我赋值]]></title>
        <id>https://blog.yunshu.site/blog/2022/06/23/Gracefully_handle_self-copy_assignment</id>
        <link href="https://blog.yunshu.site/blog/2022/06/23/Gracefully_handle_self-copy_assignment"/>
        <updated>2022-06-23T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[之前写过一个简单的vector，Clang-tidy警告：]]></summary>
        <content type="html"><![CDATA[<p>之前写过一个简单的vector，Clang-tidy警告：</p>
<blockquote>
<p>Operator=() does not handle self-assignment properly</p>
</blockquote>
<p>为什么要警惕自我赋值呢？一个经典的例子是当你赋值的时候需要先删除原来的值时，不做处理的自我赋值就会造成错误。
例如如下代码：</p>
<div class="language-c++ codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-c++ codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">class T {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    int* p;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  public:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    // rhs 即 Right Hand Side 。</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    T(const T&amp; rhs){</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        if(rhs.p)   p = new int(*rhs.p);</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        else p = nullptr;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    ~T() { delete p; }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    // ...</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    T&amp; operator=(const T&amp; rhs) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        delete p;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        p = new int(*rhs.p);</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        return *this;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">};</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>这时如果有一个<code>T</code>类型的变量<code>a</code>, 并且执行<code>a = a</code>的话，就会出现错误。</p>
<p>一种显然的解决办法是，先判断是否为自己，如果是，则不做处理。
代码如下：</p>
<div class="language-c++ codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-c++ codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">class T {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    int* p;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  public:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    // rhs 即 Right Hand Side 。</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    T(const T&amp; rhs){</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        if(rhs.p)   p = new int(*rhs.p);</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        else p = nullptr;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    ~T() { delete p; }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    // ...</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    T&amp; operator=(const T&amp; rhs) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        if (this == &amp;rhs)   return *this;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        delete p;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        p = new int(*rhs.p);</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        return *this;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">};</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>这样的代码就完美了吗，并没有，</p>
<div class="language-c++ codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-c++ codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">class T {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    int* p;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  public:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    // rhs 即 Right Hand Side 。</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    T(const T&amp; rhs) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        if (rhs.p)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            p = new int(*rhs.p);</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        else</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            p = nullptr;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    ~T() { delete p; }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    // ...</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    T&amp; operator=(const T&amp; rhs) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        if (this == &amp;rhs) return *this;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        delete p;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        try {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            p = new int(*rhs.p);</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        } catch (std::bad_alloc&amp;) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            p = nullptr;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            throw;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        return *this;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">};</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>未完待续。。。</p>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>links</div><div class="admonitionContent_BuS1"><ol>
<li>bugprone-unhandled-self-assignment：<a href="https://releases.llvm.org/13.0.0/tools/clang/tools/extra/docs/clang-tidy/checks/bugprone-unhandled-self-assignment.html" target="_blank" rel="noopener noreferrer">https://releases.llvm.org/13.0.0/tools/clang/tools/extra/docs/clang-tidy/checks/bugprone-unhandled-self-assignment.html</a></li>
<li>OOP54-CPP. Gracefully handle self-copy assignment：<a href="https://wiki.sei.cmu.edu/confluence/display/cplusplus/OOP54-CPP.+Gracefully+handle+self-copy+assignment" target="_blank" rel="noopener noreferrer">https://wiki.sei.cmu.edu/confluence/display/cplusplus/OOP54-CPP.+Gracefully+handle+self-copy+assignment</a></li>
</ol></div></div>]]></content>
        <author>
            <name>YunShu</name>
            <uri>https://github.com/Selflocking</uri>
        </author>
        <category label="C++" term="C++"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[开源物理密钥Canokey开箱]]></title>
        <id>https://blog.yunshu.site/blog/2022/06/12/canokey</id>
        <link href="https://blog.yunshu.site/blog/2022/06/12/canokey"/>
        <updated>2022-06-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[看到canokey发售，没忍住剁手买了一个]]></summary>
        <content type="html"><![CDATA[<p>看到canokey发售，没忍住剁手买了一个</p>
<p><img decoding="async" loading="lazy" alt="all" src="https://blog.yunshu.site/assets/images/all-0459b61d7a2fba10bf38f912ffaed5e2.jpg" width="4208" height="2524" class="img_ev3q"></p>]]></content>
        <author>
            <name>YunShu</name>
            <uri>https://github.com/Selflocking</uri>
        </author>
        <category label="开箱" term="开箱"/>
        <category label="U2F" term="U2F"/>
        <category label="OpenPGP" term="OpenPGP"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[值得一试的在线项目推荐]]></title>
        <id>https://blog.yunshu.site/blog/2022/05/05/valuable_projects</id>
        <link href="https://blog.yunshu.site/blog/2022/05/05/valuable_projects"/>
        <updated>2022-05-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[记录一下目前我知道的可以在线参加的计算机相关项目，欢迎补充。]]></summary>
        <content type="html"><![CDATA[<p>记录一下目前我知道的可以在线参加的计算机相关项目，欢迎补充。</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="一一生一芯">一，一生一芯<a href="https://blog.yunshu.site/blog/2022/05/05/valuable_projects#%E4%B8%80%E4%B8%80%E7%94%9F%E4%B8%80%E8%8A%AF" class="hash-link" aria-label="一，一生一芯的直接链接" title="一，一生一芯的直接链接">​</a></h2>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="二字节跳动青训营">二，字节跳动青训营<a href="https://blog.yunshu.site/blog/2022/05/05/valuable_projects#%E4%BA%8C%E5%AD%97%E8%8A%82%E8%B7%B3%E5%8A%A8%E9%9D%92%E8%AE%AD%E8%90%A5" class="hash-link" aria-label="二，字节跳动青训营的直接链接" title="二，字节跳动青训营的直接链接">​</a></h2>
<h1>贡献类</h1>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="google-summer-of-code-gsoc">Google Summer of Code (gsoc)<a href="https://blog.yunshu.site/blog/2022/05/05/valuable_projects#google-summer-of-code-gsoc" class="hash-link" aria-label="Google Summer of Code (gsoc)的直接链接" title="Google Summer of Code (gsoc)的直接链接">​</a></h2>
<h1>开源之夏 (ospp)</h1>]]></content>
        <author>
            <name>YunShu</name>
            <uri>https://github.com/Selflocking</uri>
        </author>
        <category label="推荐" term="推荐"/>
        <category label="分享" term="分享"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[利用Vaultwarden搭建自己的密码库]]></title>
        <id>https://blog.yunshu.site/blog/2022/01/12/valutwarden</id>
        <link href="https://blog.yunshu.site/blog/2022/01/12/valutwarden"/>
        <updated>2022-01-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[你有多少个账号呢，有多少个不同的密码捏？]]></summary>
        <content type="html"><![CDATA[<p>你有多少个账号呢，有多少个不同的密码捏？</p>
<p>Bitwarden是一个安全，开源，跨平台的密码管理器。提供免费/付费个人计划，团队计划，商业计划等等。详见：<a href="https://bitwarden.com/pricing/" target="_blank" rel="noopener noreferrer">https://bitwarden.com/pricing/</a></p>
<p>Bitwarden也提供了<a href="https://github.com/bitwarden/server" target="_blank" rel="noopener noreferrer">服务端</a>用于自行部署。不过官方服务端性能要求高，所以我使用了用rust编写的非官方服务端<a href="https://github.com/dani-garcia/vaultwarden" target="_blank" rel="noopener noreferrer">vaultwarden</a>(原名bitwarden_rs)。</p>
<p>在使用bitwarden之前，窝总共有四五个密码。最最开始所有账号用的都是同一个密码，后来害怕密码泄露，又想了三四个密码，小网站/小APP使用最简单的密码，即使泄露也无伤大雅，比较重要的账户使用中等复杂的密码，重要的账号/涉及支付的账号使用最复杂的密码。</p>
<p>但是这样还是会有一些小问题，比如1. 一些小网站就要求大小写字母加符号。而有一些APP竟然不允许密码中包含符号。。。绝了 2. 有时候我也不知道某个账号用的是哪个密码，只好所有密码都试一遍。3. 有时候我记不住账号(┬┬﹏┬┬)，因为我有多个邮箱和用户名。</p>
<p>所以我开始使用密码管理器，如果你没有自己的服务器，域名，和比较富裕的时间，我建议使用官方服务，官方免费服务足够个人使用（需要有一定科学上网能力，来接收Google reCAPTCHA）。</p>
<p>Bitwarden提供优秀的自动填充服务,并且可以利用系统的生物识别(指纹,人脸等)进行认证。</p>
<p>同时Bitwarden不止可以用来存储密码，还可以存储文件/文本/银行卡/个人信息。并且提供安全分享功能（seed）。</p>
<h1>搭建教程</h1>
<p>需要有一台vps，一个域名，如果服务器位于国内则需备案。
我使用的是腾讯云1h 2g 5m, Debian 10系统</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="一-安装docker和caddy">(一) 安装Docker和Caddy<a href="https://blog.yunshu.site/blog/2022/01/12/valutwarden#%E4%B8%80-%E5%AE%89%E8%A3%85docker%E5%92%8Ccaddy" class="hash-link" aria-label="(一) 安装Docker和Caddy的直接链接" title="(一) 安装Docker和Caddy的直接链接">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="1-安装必要软件">1. 安装必要软件<a href="https://blog.yunshu.site/blog/2022/01/12/valutwarden#1-%E5%AE%89%E8%A3%85%E5%BF%85%E8%A6%81%E8%BD%AF%E4%BB%B6" class="hash-link" aria-label="1. 安装必要软件的直接链接" title="1. 安装必要软件的直接链接">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">sudo</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">apt</span><span class="token plain"> update</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">sudo</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">apt</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">install</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    ca-certificates </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    gnupg </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    lsb-release</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="2-添加官方密钥">2. 添加官方密钥<a href="https://blog.yunshu.site/blog/2022/01/12/valutwarden#2-%E6%B7%BB%E5%8A%A0%E5%AE%98%E6%96%B9%E5%AF%86%E9%92%A5" class="hash-link" aria-label="2. 添加官方密钥的直接链接" title="2. 添加官方密钥的直接链接">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-fsSL</span><span class="token plain"> https://download.docker.com/linux/debian/gpg </span><span class="token operator">|</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">sudo</span><span class="token plain"> gpg </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">--dearmor</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-o</span><span class="token plain"> /usr/share/keyrings/docker-archive-keyring.gpg</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="3-添加仓库">3. 添加仓库<a href="https://blog.yunshu.site/blog/2022/01/12/valutwarden#3-%E6%B7%BB%E5%8A%A0%E4%BB%93%E5%BA%93" class="hash-link" aria-label="3. 添加仓库的直接链接" title="3. 添加仓库的直接链接">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token builtin class-name" style="color:rgb(189, 147, 249)">echo</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token string" style="color:rgb(255, 121, 198)">"deb [arch=</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">$(</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">dpkg --print-architecture</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">)</span><span class="token string" style="color:rgb(255, 121, 198)"> signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  </span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">$(</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">lsb_release </span><span class="token string variable parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-cs</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">)</span><span class="token string" style="color:rgb(255, 121, 198)"> stable"</span><span class="token plain"> </span><span class="token operator">|</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">sudo</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">tee</span><span class="token plain"> /etc/apt/sources.list.d/docker.list </span><span class="token operator">&gt;</span><span class="token plain"> /dev/null</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="4-安装docker">4. 安装Docker<a href="https://blog.yunshu.site/blog/2022/01/12/valutwarden#4-%E5%AE%89%E8%A3%85docker" class="hash-link" aria-label="4. 安装Docker的直接链接" title="4. 安装Docker的直接链接">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">sudo</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">apt</span><span class="token plain"> update</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">sudo</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">apt</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">install</span><span class="token plain"> docker-ce docker-ce-cli containerd.io</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="5-安装caddy">5. 安装Caddy<a href="https://blog.yunshu.site/blog/2022/01/12/valutwarden#5-%E5%AE%89%E8%A3%85caddy" class="hash-link" aria-label="5. 安装Caddy的直接链接" title="5. 安装Caddy的直接链接">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">sudo</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">apt</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">install</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-y</span><span class="token plain"> debian-keyring debian-archive-keyring apt-transport-https</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-1sLf</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'https://dl.cloudsmith.io/public/caddy/stable/gpg.key'</span><span class="token plain"> </span><span class="token operator">|</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">sudo</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">tee</span><span class="token plain"> /etc/apt/trusted.gpg.d/caddy-stable.asc</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-1sLf</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt'</span><span class="token plain"> </span><span class="token operator">|</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">sudo</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">tee</span><span class="token plain"> /etc/apt/sources.list.d/caddy-stable.list</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">sudo</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">apt</span><span class="token plain"> update</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">sudo</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">apt</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">install</span><span class="token plain"> caddy</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="二-部署vaultwarden">(二) 部署Vaultwarden<a href="https://blog.yunshu.site/blog/2022/01/12/valutwarden#%E4%BA%8C-%E9%83%A8%E7%BD%B2vaultwarden" class="hash-link" aria-label="(二) 部署Vaultwarden的直接链接" title="(二) 部署Vaultwarden的直接链接">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="1-拉取镜像">1. 拉取镜像<a href="https://blog.yunshu.site/blog/2022/01/12/valutwarden#1-%E6%8B%89%E5%8F%96%E9%95%9C%E5%83%8F" class="hash-link" aria-label="1. 拉取镜像的直接链接" title="1. 拉取镜像的直接链接">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">docker</span><span class="token plain"> pull vaultwarden/server</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="2-启动容器">2. 启动容器<a href="https://blog.yunshu.site/blog/2022/01/12/valutwarden#2-%E5%90%AF%E5%8A%A8%E5%AE%B9%E5%99%A8" class="hash-link" aria-label="2. 启动容器的直接链接" title="2. 启动容器的直接链接">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">docker</span><span class="token plain"> run </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-d</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">--name</span><span class="token plain"> vaultwarden </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-v</span><span class="token plain"> /vw-data/:/data/ </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-p</span><span class="token plain"> </span><span class="token number">8080</span><span class="token plain">:80 vaultwarden/server:latest</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>这将创建一个名字叫vaultwarden,将容器的/data/目录映射到机器的/vm-data/目录,将容器的80端口映射到机器的8080端口,使用的镜像为vaultwarden/server<!-- -->:latest<!-- -->.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="3-配置caddy">3. 配置Caddy<a href="https://blog.yunshu.site/blog/2022/01/12/valutwarden#3-%E9%85%8D%E7%BD%AEcaddy" class="hash-link" aria-label="3. 配置Caddy的直接链接" title="3. 配置Caddy的直接链接">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">mkdir</span><span class="token plain"> /etc/caddy</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">touch</span><span class="token plain"> /etc/caddy/Caddyfile</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">vi</span><span class="token plain"> /etc/caddy/Caddyfile</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>按i进入编辑模式,输入</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">password.example.com {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    reverse_proxy localhost:8080</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>之后输入<code>sudo systemctl reload caddy</code>重启Caddy。
去DNS服务商那里把域名解析到vps,
浏览器访问password.example.com,出现bitwarden的界面就ok.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="4-注册">4. 注册<a href="https://blog.yunshu.site/blog/2022/01/12/valutwarden#4-%E6%B3%A8%E5%86%8C" class="hash-link" aria-label="4. 注册的直接链接" title="4. 注册的直接链接">​</a></h3>
<p>点击创建账号,填写电子邮件,设置主密码.
主密码一定不能太简单.
只有知道主密码才能访问密码库,即使别人盗取了你的数据库,在不知道你主密码的情况下依然无法访问你的密码库,所以主密码一定要设置复杂一点.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="三-设置vaultwarden">(三) 设置Vaultwarden<a href="https://blog.yunshu.site/blog/2022/01/12/valutwarden#%E4%B8%89-%EF%BF%BD%EF%BF%BD%E8%AE%BE%E7%BD%AEvaultwarden" class="hash-link" aria-label="(三) 设置Vaultwarden的直接链接" title="(三) 设置Vaultwarden的直接链接">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="1-禁止新用户注册并开启websocket">1. 禁止新用户注册并开启WebSocket<a href="https://blog.yunshu.site/blog/2022/01/12/valutwarden#1-%E7%A6%81%E6%AD%A2%E6%96%B0%E7%94%A8%E6%88%B7%E6%B3%A8%E5%86%8C%E5%B9%B6%E5%BC%80%E5%90%AFwebsocket" class="hash-link" aria-label="1. 禁止新用户注册并开启WebSocket的直接链接" title="1. 禁止新用户注册并开启WebSocket的直接链接">​</a></h3>
<p>为了防止他人注册,需要禁止新用户注册.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">docker</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">rm</span><span class="token plain"> vaultwarden</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">docker</span><span class="token plain"> run </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-d</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">--name</span><span class="token plain"> vaultwarden </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-e</span><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SIGNUPS_ALLOWED</span><span class="token operator">=</span><span class="token plain">false </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-e</span><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">WEBSOCKET_ENABLED</span><span class="token operator">=</span><span class="token plain">true </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-v</span><span class="token plain"> /vw-data/:/data/ </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-p</span><span class="token plain"> </span><span class="token number">8081</span><span class="token plain">:80 </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-p</span><span class="token plain"> </span><span class="token number">30122</span><span class="token plain">:3012 </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  vaultwarden/server:latest</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>之后去修改<code>Caddyfile</code>, 添加</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">reverse_proxy localhost:30122</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="四-获取bitwarden应用">(四) 获取Bitwarden应用<a href="https://blog.yunshu.site/blog/2022/01/12/valutwarden#%E5%9B%9B-%E8%8E%B7%E5%8F%96bitwarden%E5%BA%94%E7%94%A8" class="hash-link" aria-label="(四) 获取Bitwarden应用的直接链接" title="(四) 获取Bitwarden应用的直接链接">​</a></h2>
<p>访问 <a href="https://bitwarden.com/download/" target="_blank" rel="noopener noreferrer">https://bitwarden.com/download/</a> 获取各平台应用</p>
<p><del>请选择你的英雄</del></p>
<blockquote>
<p><a href="https://www.microsoft.com/store/apps/9PJSDV0VPK04" target="_blank" rel="noopener noreferrer">Windows</a><br>
<a href="https://vault.bitwarden.com/download/?app=desktop&amp;platform=linux&amp;variant=appimage" target="_blank" rel="noopener noreferrer">Linux</a>
<a href="https://github.com/bitwarden/mobile/releases" target="_blank" rel="noopener noreferrer">移动端</a></p>
</blockquote>
<blockquote>
<p><a href="https://chrome.google.com/webstore/detail/bitwarden-free-password-m/nngceckbapebfimnlniiiahkandclblb" target="_blank" rel="noopener noreferrer">Chrome</a>
<a href="https://chrome.google.com/webstore/detail/bitwarden-free-password-m/nngceckbapebfimnlniiiahkandclblb" target="_blank" rel="noopener noreferrer">Edge</a>
<a href="https://addons.mozilla.org/firefox/addon/bitwarden-password-manager/" target="_blank" rel="noopener noreferrer">Firefox</a>
<a href="https://addons.mozilla.org/firefox/addon/bitwarden-password-manager/" target="_blank" rel="noopener noreferrer">Tor</a></p>
</blockquote>
<h1>后记</h1>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="密码">密码<a href="https://blog.yunshu.site/blog/2022/01/12/valutwarden#%E5%AF%86%E7%A0%81" class="hash-link" aria-label="密码的直接链接" title="密码的直接链接">​</a></h2>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="二次验证">二次验证<a href="https://blog.yunshu.site/blog/2022/01/12/valutwarden#%E4%BA%8C%E6%AC%A1%E9%AA%8C%E8%AF%81" class="hash-link" aria-label="二次验证的直接链接" title="二次验证的直接链接">​</a></h2>
<hr>
<p>2022-04-06
因为服务器上部署着另一个服务，并且我也担心自己没有能力保证数据安全，最后还是换成了官方服务。🤣</p>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>links</div><div class="admonitionContent_BuS1"><ol>
<li>Vaultwarden： <a href="https://github.com/dani-garcia/vaultwarden" target="_blank" rel="noopener noreferrer">https://github.com/dani-garcia/vaultwarden</a></li>
<li>Docker安装教程：<a href="https://docs.docker.com/engine/install/debian/" target="_blank" rel="noopener noreferrer">https://docs.docker.com/engine/install/debian/</a></li>
<li>Caddy安装教程：<a href="https://caddyserver.com/docs/install#debian-ubuntu-raspbian" target="_blank" rel="noopener noreferrer">https://caddyserver.com/docs/install#debian-ubuntu-raspbian</a></li>
<li>Caddy使用教程：<a href="https://caddyserver.com/docs/quick-starts/reverse-proxy" target="_blank" rel="noopener noreferrer">https://caddyserver.com/docs/quick-starts/reverse-proxy</a></li>
<li>Bitwarden官网: <a href="https://bitwarden.com/" target="_blank" rel="noopener noreferrer">https://bitwarden.com/</a></li>
</ol></div></div>]]></content>
        <author>
            <name>YunShu</name>
            <uri>https://github.com/Selflocking</uri>
        </author>
        <category label="教程" term="教程"/>
        <category label="分享" term="分享"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[配置VSCode,打造舒适的C/C++学习环境]]></title>
        <id>https://blog.yunshu.site/blog/2021/11/06/vscode-cpp</id>
        <link href="https://blog.yunshu.site/blog/2021/11/06/vscode-cpp"/>
        <updated>2021-11-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[好久没写过博客了，有很多想写的，又感觉自己写不好 😢.]]></summary>
        <content type="html"><![CDATA[<p>好久没写过博客了，有很多想写的，又感觉自己写不好 😢.</p>
<p>从 <a href="https://winlibs.com/" target="_blank" rel="noopener noreferrer">Winlibs.com</a> 中下载最新构建的 MinGW-w64。</p>
<p>一般选择 GCC _ + LLVM/Clang/LLD/LLDB _ + MinGW-w64 _ (UCRT) - release _ ，win64 即可。</p>
<p><img decoding="async" loading="lazy" alt="Winlibs" src="https://blog.yunshu.site/assets/images/winlibs-6616c2ee9ba74ee7229c4013c9df75b1.png" width="834" height="468" class="img_ev3q"></p>
<p>关于 UCRT 与 MSVCRT 的区别请看 MSYS2 的<a href="https://www.msys2.org/docs/environments/" target="_blank" rel="noopener noreferrer">官网说明</a>:</p>
<blockquote>
<p>These are two variants of the C standard library on Microsoft Windows.</p>
<p><strong>MSVCRT</strong> (Microsoft Visual C++ Runtime) is available by default on all Microsoft Windows versions, but due to backwards compatibility issues is stuck in the past, not C99 compatible and is missing some features.</p>
<ul>
<li>It isn't C99 compatible, for example the printf() function family, but...</li>
<li>mingw-w64 provides replacement functions to make things C99 compatible in many cases</li>
<li>It doesn't support the UTF-8 locale</li>
<li>Binaries linked with MSVCRT should not be mixed with UCRT ones because the internal structures and data types are different. (More strictly, object files or static libraries built for different targets shouldn't be mixed. DLLs built for different CRTs can be mixed as long as they don't share CRT objects, e.g. FILE*, across DLL boundaries.) Same rule is applied for MSVC compiled binaries because MSVC uses UCRT by default (if not changed).</li>
<li>Works out of the box on every Microsoft Windows versions.</li>
</ul>
<p><strong>UCRT</strong> (Universal C Runtime) is a newer version which is also used by Microsoft Visual Studio by default. It should work and behave as if the code was compiled with MSVC.</p>
<ul>
<li>Better compatibility with MSVC, both at build time and at run time.</li>
<li>It only ships by default on Windows 10 and for older versions you have to provide it yourself or depend on the user having it installed.</li>
</ul>
</blockquote>
<p>解压到某个位置，例如 C:\mingw64 。</p>
<p>然后将 C:\mingw64\bin 添加到 PATH 环境变量中。
可以按 <code>win+r</code> 输入 <code>rundll32.exe sysdm.cpl,EditEnvironmentVariables</code> 打开环境变量设置，也可以手动打开：设置-系统信息-高级系统设置-环境变量。</p>
<p>一般添加到用户环境变量的 PATH 中即可。</p>
<p>打开终端输入 <code>gcc -v</code> 有输出即成功。</p>
<p>新建一个文件夹，例如 C:\Studio\Code 。使用 VS Code 打开此文件夹。</p>
<p>点击左侧 “拓展” ，安装 <a href="https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb" target="_blank" rel="noopener noreferrer">CodeLLDB</a>，<a href="https://marketplace.visualstudio.com/items?itemName=llvm-vs-code-extensions.vscode-clangd" target="_blank" rel="noopener noreferrer">Clangd</a>.</p>
<p>CodeLLDB 可能安装失败，需要挂代理，或者从 GitHub 下载手动安装。</p>
<p>新建一个 <code>.vscode</code> 文件夹，里面新建 <code>tasks.json</code> 和 <code>launch.json</code> 这两个文件相当于当前工作区的配置文件。
新建一个 <code>.build</code> 文件夹，里面会存放我们编译完成的程序。
这里我给一个示例:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">{</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  "version": "2.0.0",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  "tasks": [</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      "type": "process",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      "label": "build", //任务名称</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      "command": "clang++", //程序名称</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      "args": [</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        //arguments 参数</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        "${file}",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        "-o",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        "${workspaceFolder}\\.build\\${fileBasenameNoExtension}.exe",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        //添加调试信息</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        "-glldb",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        //设置c++版本为17</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        "-std=c++17",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        //启用彩色警告</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        "-fdiagnostics-color=always",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        // 启用诊断</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        "-pedantic",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        "-Wall",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        "-Wextra"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      ],</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      "options": {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        "cwd": "${fileDirname}" //程序工作目录</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      },</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      "presentation": {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        // 执行任务时是否跳转到终端面板，可以为always，silent，never。具体参见VSC的文档，即使设为never，手动点进去还是可以看到</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        "reveal": "never",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        // 不同的文件的编译信息共享一个终端面板</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        "panel": "shared"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      },</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      "group": {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        "kind": "build",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        "isDefault": true //设置为默认生成任务</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      },</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      "detail": "编译C/C++程序"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  ]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">{</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  // 使用 IntelliSense 了解相关属性。</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  // 悬停以查看现有属性的描述。</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  // 欲了解更多信息，请访问: https://go.microsoft.com/fwlink/?linkid=830387</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  "version": "0.2.0",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  "configurations": [</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      "type": "lldb", //有黄色波浪线说明没有安装codelldb插件</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      "request": "launch",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      "name": "C/C++单文件调试", //名称</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      "program": "${workspaceFolder}\\.build\\${fileBasenameNoExtension}.exe", //程序路径</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      "args": [], //启动参数</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      "cwd": "${fileDirname}", //程序工作目录</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      //设置成为neverOpen，这样在第一次运行的时候不会跳转到调试控制台</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      "internalConsoleOptions": "neverOpen",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      "preLaunchTask": "build" //需要提前执行的任务</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  ]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>新建一个 cpp 文件：</p>
<div class="language-cpp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-cpp codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token macro property directive-hash">#</span><span class="token macro property directive keyword" style="color:rgb(189, 147, 249);font-style:italic">include</span><span class="token macro property string" style="color:rgb(255, 121, 198)">&lt;iostream&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">int</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">main</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    std</span><span class="token double-colon punctuation" style="color:rgb(248, 248, 242)">::</span><span class="token plain">cout</span><span class="token operator">&lt;&lt;</span><span class="token string" style="color:rgb(255, 121, 198)">"Hello World!"</span><span class="token operator">&lt;&lt;</span><span class="token plain">std</span><span class="token double-colon punctuation" style="color:rgb(248, 248, 242)">::</span><span class="token plain">endl</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>按 <code>F5</code> ,输出 <code>Hello World!</code> 即成功。</p>]]></content>
        <author>
            <name>YunShu</name>
            <uri>https://github.com/Selflocking</uri>
        </author>
        <category label="教程" term="教程"/>
        <category label="VSCode" term="VSCode"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[魔百盒cm101h拆机线刷破解教程]]></title>
        <id>https://blog.yunshu.site/blog/2021/02/12/cm101h</id>
        <link href="https://blog.yunshu.site/blog/2021/02/12/cm101h"/>
        <updated>2021-02-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[前几天家里的卫星锅机顶盒不能看了,尝试维修无果.家里还有一个以前办理iptv送的魔百盒cm101h,要使用这款定制机顶盒必须要认证.于是开始寻找破解教程.]]></summary>
        <content type="html"><![CDATA[<p>前几天家里的卫星锅机顶盒不能看了,尝试维修无果.家里还有一个以前办理iptv送的魔百盒cm101h,要使用这款定制机顶盒必须要认证.于是开始寻找破解教程.</p>
<p>cm101h似乎有多个版本,请首先确定你的配置和我一样再继续.</p>
<p>根据标识,摘下机顶盒背面支脚上的橡胶,就可以看到螺丝,拧下螺丝,打开后盖,可以看得一个银色条格状的散热片,<strong>旁边有两个闪存</strong>,再往下看,可以看到一个在白色长方形内的<strong>emmc芯片</strong>.如果芯片两侧有针脚则是NAND芯片.<a href="https://www.szjytx.com/?id=12529" target="_blank" rel="noopener noreferrer">详细区分教程</a>.再往下有一个条形码,<strong>是WP8开头的</strong>.</p>
<h1>准备工作</h1>
<ol>
<li>双公头USB线: 将两条USB<strong>数据线</strong>剪开,按照颜色重新接上即可制成.剪开线后可以看得四条线的即为数据线</li>
<li>下载<a href="https://pan.yunshu.site/%E5%88%B7%E6%9C%BA/cm101h/Amlogic_USB_Burning_Tool_v2.1.6.8.zip" target="_blank" rel="noopener noreferrer">Amlogic_USB_Burning_Tool_v2.1.6.8</a>并安装.</li>
<li>下载<a href="https://pan.yunshu.site/%E5%88%B7%E6%9C%BA/cm101h/%E4%B8%AD%E5%85%B4B860AV2.1_905L-%E5%AE%89%E5%8D%934.4.2-dangbei-%E5%8F%8C%E7%9B%B4%E6%92%AD%E9%80%9A%E5%88%B7%E5%9B%BA%E4%BB%B6-20180109%E7%89%88-%E8%A7%A3%E5%86%B3%E4%B8%80%E4%BA%9B%E7%9B%B4%E6%92%AD%E5%8D%A1%E9%A1%BF%E9%97%AE%E9%A2%98.img" target="_blank" rel="noopener noreferrer">系统镜像</a>.(来源网络)(因为cm101h与中兴B860av2.1配置几乎完全一样,所以这里使用b860av2.1的系统镜像)</li>
<li>相关文件备份 天翼网盘分享:<a href="https://cloud.189.cn/t/AvUB32JRnIbm" target="_blank" rel="noopener noreferrer">https://cloud.189.cn/t/AvUB32JRnIbm</a></li>
</ol>
<h1>刷机步骤</h1>
<ol>
<li>打开USB_Burning_Tool,依次点击左上角文件-导入烧录包,在弹出的窗口中选择你下载的系统镜像.</li>
<li>首先确保机顶盒没有通电,没有插USB线,接着在机顶盒主板背面白线旁边找到C125.拿一个螺丝刀短接它,接着在靠近网口的USB口中插上USB线,再插入电源.听到电脑响了一下,且USB_Burning_Tool中显示连接成功即可移开螺丝刀.</li>
<li>烧录配置保持默认.</li>
<li>点开始.等待完成.</li>
</ol>
<h1>参考</h1>
<ol>
<li><a href="https://www.znds.com/forum.php?mod=viewthread&amp;tid=1159254&amp;page=123#pid61036611" target="_blank" rel="noopener noreferrer">https://www.znds.com/forum.php?mod=viewthread&amp;tid=1159254&amp;page=123#pid61036611</a></li>
<li><a href="https://tieba.baidu.com/p/7193311186" target="_blank" rel="noopener noreferrer">https://tieba.baidu.com/p/7193311186</a></li>
<li><a href="https://blog.csdn.net/ulvge0/article/details/101193545" target="_blank" rel="noopener noreferrer">https://blog.csdn.net/ulvge0/article/details/101193545</a></li>
<li><a href="https://www.szjytx.com/?id=13079" target="_blank" rel="noopener noreferrer">https://www.szjytx.com/?id=13079</a></li>
</ol>
<h1>ADB开启教程</h1>
<p>下载ChashCode:</p>
<ol>
<li><a href="https://yunshu.herokuapp.com/%E5%88%B7%E6%9C%BA/cm101h/ChashCode_1.0.apk" target="_blank" rel="noopener noreferrer">https://yunshu.herokuapp.com/%E5%88%B7%E6%9C%BA/cm101h/ChashCode_1.0.apk</a></li>
<li><a href="https://cloud.189.cn/t/AvUB32JRnIbm" target="_blank" rel="noopener noreferrer">https://cloud.189.cn/t/AvUB32JRnIbm</a></li>
</ol>
<p>打开机顶盒设置,密码10086.找到<code>开启ADB</code>选项,点击获取MAC地址和随机数.将两个数输入到ChashCode中,随机数不带C的选择<code>计算2017巴拉巴拉</code>,带C的选择<code>计算2018巴拉巴拉</code></p>
<h1>后言</h1>
<p>如果有钱,直接买一个就好了,也就不用这么麻烦了.(˘•灬•˘)</p>]]></content>
        <author>
            <name>YunShu</name>
            <uri>https://github.com/Selflocking</uri>
        </author>
        <category label="教程" term="教程"/>
        <category label="破解" term="破解"/>
        <category label="刷机" term="刷机"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Promise]]></title>
        <id>https://blog.yunshu.site/blog/2020/10/02/Promise</id>
        <link href="https://blog.yunshu.site/blog/2020/10/02/Promise"/>
        <updated>2020-10-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[学嘤语: 联合国儿童基金会 United Nations International Children's Emergency Fund,简称 UNICEF]]></summary>
        <content type="html"><![CDATA[<p>学嘤语: 联合国儿童基金会 United Nations International Children's Emergency Fund,简称 UNICEF</p>
<p>某日,在酷安上刷到一个动态,是酷友@楼下小王他姓黑 的联合国儿童基金会月捐纪念戒指开箱动态.回想起自己每年都腆着脸办理国家助学金,却并没有给社会做出过什么贡献.自惭形秽.慈善,是我从小听到大的一个事业,但是从没有去认真思考过.</p>
<p><img decoding="async" loading="lazy" alt="酷友动态" src="https://blog.yunshu.site/assets/images/kuyou-b73d12c6f1983d132d527da6545209a0.jpg" width="288" height="512" class="img_ev3q"></p>
<p>2020 新春伊始,新冠爆发.但身在河北的我并不是主要的的受害者.感觉每天铺天盖地的报道离我很近又离我很远.每天的生活也并没有多大的不同.但总有人是清醒的有良知的,和我同年级的一位同学把自己寒假打工赚的 500 元直接就捐给了武汉红十字会.<del>虽然后来武汉红十字会被曝</del>
机缘巧合,我在暑假里也赚了 500 元.让我兴奋了好几天(ノ￣ ▽ ￣).这次看到酷友的动态,真是冥冥之中自有天意.
我以前一向是讨厌这种做慈善还要发出来的行为,可是我似乎明白了我们虽然不能高高在上施舍一般的帮助他人,也不能一声不吭自高自大.博客/动态是为了分享,而不是炫耀.</p>
<blockquote>
<p>剩下的以后再更,假期太短了啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊阿
2020.11.15 更新博客,最近家里出了大事,到今天算是快完结了.</p>
</blockquote>
<p>想要加入月捐很简单,报名网址:<a href="https://ecare.unicef.cn/campaign/201904cws/index.php" target="_blank" rel="noopener noreferrer">https://ecare.unicef.cn/campaign/201904cws/index.php</a>
最低月捐款 30 元,支持支付宝,微信,银行卡.在第一个月扣款成功后 UNICEF 就会发顺丰把戒指,信和证书发给你,注意接听电话.
在提交信息的数日内,会有工作人员致电访问调查并表示感谢,总共有四个问题,都是选择题.具体内容记不清了.
手机相机糊,将就看吧.</p>
<p><img decoding="async" loading="lazy" alt="快递" src="https://blog.yunshu.site/assets/images/shunfeng-cd9cdc4e3823b59b041e82bb155e2118.jpg" width="832" height="624" class="img_ev3q"></p>
<p>年轻人的第一封信:</p>
<p><img decoding="async" loading="lazy" alt="信封" src="https://blog.yunshu.site/assets/images/xin-b4f8ebda838e02e1b6f30c35902f7953.jpg" width="832" height="624" class="img_ev3q"></p>
<p>证书和信</p>
<p><img decoding="async" loading="lazy" alt="证书" src="https://blog.yunshu.site/assets/images/zhengshu-6730520e8050e5a6877f92ad223df95a.jpg" width="832" height="624" class="img_ev3q"></p>
<p>戒指包装:</p>
<p><img decoding="async" loading="lazy" alt="包装" src="https://blog.yunshu.site/assets/images/jiezhizheng-a75f144bff63153fde7f279041eb060d.jpg" width="832" height="624" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" alt="包装反面" src="https://blog.yunshu.site/assets/images/jiezhifan-6d5d8208d18c19f265c212ca212ab9ea.jpg" width="832" height="624" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" alt="主角" src="https://blog.yunshu.site/assets/images/jiezhinei-b193ce981628819efd3cb0c3dea3c77a.jpg" width="624" height="832" class="img_ev3q"></p>
<p>戒指细节:</p>
<p><img decoding="async" loading="lazy" alt="UNICEF" src="https://blog.yunshu.site/assets/images/unicefzi-b65ac76954baa20010b8142271321f38.jpg" width="624" height="832" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" alt="Promise" src="https://blog.yunshu.site/assets/images/promise-5ec52d510caea2c1679aa60f7851a24d.jpg" width="624" height="832" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" alt="心形" src="https://blog.yunshu.site/assets/images/xinxing-66a6b994dcc6c843422aa6604419e69e.jpg" width="624" height="832" class="img_ev3q"></p>
<blockquote>
<p>可以来<a href="https://www.unicef.cn/frequently-asked-questions" target="_blank" rel="noopener noreferrer">这里</a>查看常见问题和解答,推荐看一下,因为 UNICEF 和我们想象的慈善机构不太一样,并不会单独援助某个儿童.</p>
</blockquote>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="20211007-更新">2021.10.07 更新<a href="https://blog.yunshu.site/blog/2020/10/02/Promise#20211007-%E6%9B%B4%E6%96%B0" class="hash-link" aria-label="2021.10.07 更新的直接链接" title="2021.10.07 更新的直接链接">​</a></h3>
<p>记得大概是高考的时候(6.5),工作人员打来了电话，跟我聊了很多，最后很直接的表示让我提额，我说我还是个学生，现在就不加钱了。等我暑假打工挣了钱可以加。结果对面说：“哦，还是个学生呢，那我可不可以称呼你*同学呢”。（之前她一直叫我先生）直接给我愣住了。能当上工作人员果然不一般，太会聊了。</p>
<p>接着又说：“你看你现在还是个学生，没有经济来源，但是我们能不能少加一点呢，比如说加个十元。”</p>
<p>十块钱，也不多，我就同意了。</p>
<p>现在上了大学，资金都要自己管理。让我颇为惊讶的是，这个暑假我领了 9000 元的奖学金，这还没算上两份未到账的奖学金。现在我有现在我有近 14000 的资金。投入了 13500 到某活期产品（随用随取）中，每天的收益大概是 1 块多，这意味着我可以在不影响日常生活的情况下继续坚持 promise。</p>
<p>昨天又去看了下月捐计划，下限改成 20 元了，为了省钱，我就提交申请改成了 20。到了今天后悔了，又改成了 30，这样刚好可以和我的收益持平。</p>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>信息</div><div class="admonitionContent_BuS1"><p>共勉</p></div></div>]]></content>
        <author>
            <name>YunShu</name>
            <uri>https://github.com/Selflocking</uri>
        </author>
        <category label="分享" term="分享"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[抢先体验Twikoo-静态网站评论系统]]></title>
        <id>https://blog.yunshu.site/blog/2020/09/12/Twikoo</id>
        <link href="https://blog.yunshu.site/blog/2020/09/12/Twikoo"/>
        <updated>2020-09-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[最近看到了这个评论系统,挺好看的]]></summary>
        <content type="html"><![CDATA[<p>最近看到了这个评论系统,挺好看的</p>
<p>一个新的静态网站评论系统,免费搭建,安全性高.基于腾讯云云开发</p>
<p>作者博客: <a href="https://www.imaegoo.com/2020/hello-twikoo/" target="_blank" rel="noopener noreferrer">https://www.imaegoo.com/2020/hello-twikoo/</a></p>
<p>项目仓库: <a href="https://github.com/imaegoo/twikoo" target="_blank" rel="noopener noreferrer">https://github.com/imaegoo/twikoo</a></p>
<p>搭建教程:</p>
<ol>
<li>首先注册登录疼逊云 <a href="https://console.cloud.tencent.com/tcb/" target="_blank" rel="noopener noreferrer">https://console.cloud.tencent.com/tcb/</a></li>
<li>下载项目,解压</li>
<li>进入项目文件夹,执行以下命令</li>
</ol>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">npm</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">install</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">npx tcb login</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<ol start="4">
<li>进入<a href="https://console.cloud.tencent.com/tcb/env/index" target="_blank" rel="noopener noreferrer">https://console.cloud.tencent.com/tcb/env/index</a> 查看自己的环境名称,例如我的史<code>yunshu</code>,更改<code>_config.js</code></li>
</ol>
<div class="language-diff codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-diff codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain"> -  envId: 'imaegoo-16fe3d'</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> +  envId: 'yunshu'</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<ol start="5">
<li>
<p>执行<code>npx tcb functions:deploy</code>部署,登录云开发,点击云函数,会发现已经多出来几个函数.</p>
<p><img decoding="async" loading="lazy" alt="tcbscf" src="https://blog.yunshu.site/assets/images/tcbscf-1e062b49ab47f7770b6c5294b80ef3f7.png" width="1920" height="933" class="img_ev3q"></p>
</li>
<li>
<p>点击<code>migrate</code>进入函数详情,点击右上角的测试,运行测试.之后会在数据库页发现多了三个数据库: <code>comment</code> <code>config</code> <code>counter</code></p>
</li>
<li>
<p>进入<code>config</code>,点击添加文档.和<a href="https://github.com/DesertsP/Valine-Admin" target="_blank" rel="noopener noreferrer">Valine-Admin</a>类似</p>
</li>
</ol>
<table><thead><tr><th style="text-align:center">字段</th><th style="text-align:center">值</th></tr></thead><tbody><tr><td style="text-align:center">SITE_NAME</td><td style="text-align:center">网站名称</td></tr><tr><td style="text-align:center">SITE_URL</td><td style="text-align:center">网站链接</td></tr><tr><td style="text-align:center">SMTP_SERVICE</td><td style="text-align:center">邮箱服务商</td></tr><tr><td style="text-align:center">SMTP_USER</td><td style="text-align:center">邮箱账户</td></tr><tr><td style="text-align:center">SMTP_PASS</td><td style="text-align:center">邮箱SMTP服务密码</td></tr><tr><td style="text-align:center">SENDER_NAME</td><td style="text-align:center">发送名字</td></tr><tr><td style="text-align:center">SENDER_EMAIL</td><td style="text-align:center">发送的邮箱</td></tr><tr><td style="text-align:center">BLOGGER_EMAIL</td><td style="text-align:center">博客的邮箱</td></tr><tr><td style="text-align:center">...</td><td style="text-align:center">...</td></tr></tbody></table>
<ol start="8">
<li>
<p>之后点击侧栏<code>环境</code>- <code>登陆授权</code>,勾选<code>匿名登录</code>.</p>
</li>
<li>
<p>更换自己博客的评论系统,如果你和我一样也是icarus主题.那么请参照这个<a href="https://github.com/imaegoo/hexo-theme-icarus/pull/7/commits/42d286a44294413277bfc5632c7b0fb537aaee57" target="_blank" rel="noopener noreferrer">commit</a>.之后更改主题<code>_config.yml</code>即可</p>
</li>
</ol>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token key atrule">comment</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> twikoo</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">envId</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> yunshu</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>​			如果你正在使用其他主题,请参照主题自行修改.</p>
<p>完工啦,这只是抢先体验的教程,更加详细易用的文档作者近期会发出.</p>
<p>趁着放假又水了一篇文章(x</p>]]></content>
        <author>
            <name>YunShu</name>
            <uri>https://github.com/Selflocking</uri>
        </author>
        <category label="hexo" term="hexo"/>
        <category label="建站" term="建站"/>
        <category label="分享" term="分享"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[使用uptimerobot来搭建你的网站状态页]]></title>
        <id>https://blog.yunshu.site/blog/2020/08/28/uptimerobot</id>
        <link href="https://blog.yunshu.site/blog/2020/08/28/uptimerobot"/>
        <updated>2020-08-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[水~~]]></summary>
        <content type="html"><![CDATA[<p>水~~</p>
<p>首先打开UptimeRobot官方网站<a href="https://uptimerobot.com/" target="_blank" rel="noopener noreferrer">https://uptimerobot.com/</a></p>
<p><img decoding="async" loading="lazy" alt="UptimeRobotsite" src="https://blog.yunshu.site/assets/images/UptimeRobotsite-4238c18ca82867a9a6946c33e3cdb629.png" width="1914" height="939" class="img_ev3q"></p>
<p>点击红框中的<code>Start #%@^#%@&amp;#^</code>按照要求注册账号,验证邮箱</p>
<p>之后登陆会自动转到仪表盘</p>
<p><img decoding="async" loading="lazy" alt="yibiaopan" src="https://blog.yunshu.site/assets/images/yibiaopan-40cca11504110be8b75f951f51e1a130.png" width="1918" height="939" class="img_ev3q"></p>
<p>点击<code>Add New Monitor</code>来添加监控,监控分<code>HTTP(s)</code> <code>Keyword</code> <code>Ping</code> <code>Port</code>和<code>Heartbeat</code>五种.有的还会有一些更高级,更细致的设置.当然,大部分都要专业版.</p>
<p>按照自己的需求设置好后,点击<code>My Setting</code>--&gt; <code>Public Status Pages</code>--&gt; <code>Add Public Status Page </code>来设置公开页</p>
<p><img decoding="async" loading="lazy" alt="mysettings" src="https://blog.yunshu.site/assets/images/mysettings-fcf98e5ebe29e91b1e4c9c1d2e0b010d.jpg" width="1919" height="941" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" alt="statusshili" src="https://blog.yunshu.site/assets/images/statusshili-a88222625582c538f19549f7b573fe3c.jpg" width="1918" height="937" class="img_ev3q"></p>
<p>之后进入域名管理,CNAME到<code>stats.uptimerobot.com</code>即可.</p>
<p>最后效果如下</p>
<p><img decoding="async" loading="lazy" alt="statuswebsite" src="https://blog.yunshu.site/assets/images/statuswebsite-ed8c42ceece063ddffdc90d1202de185.jpg" width="1920" height="931" class="img_ev3q"></p>
<p>还可以借助UptimeRobot的api搭建更加美观的状态页.</p>
<p>例如: <a href="https://github.com/giuem/uptimerobot-page" target="_blank" rel="noopener noreferrer">https://github.com/giuem/uptimerobot-page</a></p>]]></content>
        <author>
            <name>YunShu</name>
            <uri>https://github.com/Selflocking</uri>
        </author>
        <category label="教程" term="教程"/>
        <category label="分享" term="分享"/>
        <category label="web" term="web"/>
    </entry>
</feed>