命运逻辑门,活动入口:STEINS;GATE 電脳言語のオルダーソンループ

这次比上次那个《程序员死绝了》简单多了,只给出剧情相关的四个题解

由于咱は日本語本当上手实在不懂日文(全靠浏览器实时翻译成中/英文读题,黑盒测试),只能说一下大概的题意

第一题 正則表現のエントリーポイント

题意

输入两个字符串,在两个字符串间添加分号 ‘;’ 后输出

题解

过于简单,无题解

第二题 性能解析のタイプセーフ

题意

大意是游戏中的角色升级:

第一行输入: N 和 K 代表 N 个角色,以及进行一次游戏能够获得 K 点经验(小数)

之后每行给出每一个角色所需的经验点数

计算需要打多少场游戏

题解

累加角色经验值得到 sum,计算 res 使得 res * k > sum

简单,无代码

第三题 例外処理のタブーサーチ

题意

第一行输入:给出 N、M 和 L,分别代表第一个表格的行数、两个表格的列数、第二个表格的行数

往后的 N 行是第一个表格的元素,再往后的 L 行是第二个表格的元素

根据第二个表格的数据计算出第三个表格,规则为:在第二个表格中,对于每一行数据的每个元素,用下一行的同列元素减去本行元素,得到第三个表格对行对应列的元素

拿第三个表格的数据与第一个表格对比,输出第三个表格中的行在第一个表格中的行数

题解

C# 代码

数据量不大,用了 Linq 和 List<> 的 SequenceEqual(),替换成其他方法效率会高一点

得到差后立即搜索第一个表格,也可以减少时间/空间消耗

using System;
using System.Linq;
using System.Collections.Generic;

namespace Paiza {
    class Program {
        static void Main() {
            List<List<int>> l1 = new List<List<int>>(), l2 = new List<List<int>>(), l3 = new List<List<int>>();

            string[] input = Console.ReadLine().Split();
            int n = Convert.ToInt32(input[0]), m = Convert.ToInt32(input[1]), l = Convert.ToInt32(input[2]);

            for (int i = 0; i < n; i++)
                l1.Add(Console.ReadLine().Split().Select(x => int.Parse(x)).ToList());

            for (int i = 0; i < l; i++)
                l2.Add(Console.ReadLine().Split().Select(x => int.Parse(x)).ToList());

            for (int i = 0; i < l - 1; i++) {
                List<int> subs = new List<int>();
                for (int j = 0; j < m; j++) {
                    subs.Add(l2[i + 1][j] - l2[i][j]);
                }
                l3.Add(subs);
            }

            for (int i = 0; i < l - 1; i++)
                for (int j = 0; j < n; j++)
                    if (l1[j].SequenceEqual(l3[i])) 
                        Console.WriteLine(j + 1);

        }
    }
}

第四题 進化戦略のプロシージャ

Continue reading “Paiza 命运石之门活动 题解”

Tinode 是与 mumble – 自托管语音/文字聊天室 和 部署私人通讯软件DuckChat 类似的可以自托管的即时通讯平台,在 Android、iOS 和 Web 端提供即时聊天服务

如果有开放注册的使用需求,需要搭建机器开启了 SMTP 端口并且有 SMTP 服务器,或者使用其他 SMTP 服务,确保能够正常发送邮件

提交注册信息后需要立即验证邮箱,如果不验证邮箱,账户则不会激活,但是注册信息在提交表单后就写入了数据库,如果再用相同信息注册会提示注册信息重复

以下搭建过程使用预编译文件,不需要 SMTP 服务,同时 Tinode 也无法开放注册

下文将展示如何在 Debian 10 下无域名搭建 Tinode 服务端

环境

  • Debian 10

参考

步骤

Tinode 提供三种数据库支持:RethinkDB、MySQL 和 MongoDB,这里选择 MySQL

以下指令均在 root 用户下执行,其他用户酌情添加 sudo

安装环境

MySQL

Tinode 要求 MySQL 版本必须在 5.7 以上

执行指令安装

wget https://dev.mysql.com/get/mysql-apt-config_0.8.18-1_all.deb
dpkg -i mysql-apt-config_0.8.18-1_all.deb
apt udpate
apt install mysql-server

安装时选择 MySQL 5.7 版本(而不是8.0),记录数据库密码

配置数据库并运行 Tinode

获取并解压预编译包

在 Tinode – Release 获取最新版本链接

mkdir tinode
cd tinode
wget https://github.com/tinode/chat/releases/download/v0.17.6/tinode-mysql.linux-amd64.tar.gz
tar zxvf tinode-mysql.linux-amd64.tar.gz

配置数据库密码

默认情况下 Tinode 以 root 用户和空密码(不使用密码)连接 MySQL,如果安装 MySQL 时配置了密码,则需要在配置文件中手动添加

编辑项目根目录下的 tinode.conf,进入 DataBase Configuration 部分下的 “store_config” – “adapters” – “mysql”,在 “User” 键值对下添加 “Passwd” 键值对

//...
"User": "root",
"Passwd": "[your mysql password]", // 添加此行
"Net": "tcp",
//...

Continue reading “Tinode – 又一个即时聊天平台”