小编Ric*_*ove的帖子

Typescript:联合类型到可选值的深度交集(难度:95+级)

我需要将联合对象类型(可能有嵌套联合)转换为可选值类型的深度交集。本质上,所有可能的字段都会相交,并且仅当它存在于联合的一侧时才是可选的 - 并对所有嵌套对象执行此操作。

注意:这不是简单的并集到交集

内嵌附加评论:

type DateOnly = string;
type DayOfWeek = string;
type DayOfMonth = string;

// Input Type:
type DateIntervals_Union = {
    kind: 'weekly';
    weekly: {
        startDayOfWeek: DayOfWeek;
        endDayOfWeek: DayOfWeek;
        startDate: DateOnly;
        endDate?: DateOnly;
    };
} | {
    kind: 'monthly';
    monthly: {
        startDayOfMonth: DayOfMonth;
        endDayOfMonth: DayOfMonth;
        startDate: DateOnly;
        endDate?: DateOnly;
    };
} | {
    kind: 'dates';
    dates: {
        dateRanges: {
            startDate: DateOnly;
            endDate: DateOnly;
        }[];
    };
};

// Expected Type:
type DateIntervals_Optionals = {
    // This …
Run Code Online (Sandbox Code Playgroud)

types typescript

9
推荐指数
1
解决办法
2129
查看次数

找到包含所有可能的3x3位模式的NxM网格

更新:这被称为de Brujin torus,但我仍需要在C#中找出一个简单的算法.

http://en.wikipedia.org/wiki/De_Bruijn_torus

http://datagenetics.com/blog/october22013/index.html


我需要尽可能密集地组合3x3位网格的所有值.通过一个3x3位网格,我的意思是一个3x3网格,其中每个地方有点类似于这个问题中的打孔概念:

找到3x3打孔的所有组合

3x3位网格示例:

XXX .X. ...
XXX .X. .X.
XXX .X. ...
Run Code Online (Sandbox Code Playgroud)

目标

我想打包所有512(实际上256,因为中心位始终打开)可能的值,以便它们在单个NxM网格中重叠.

不完整的例子:

此示例将~25个可能值打包到7x7网格中.

.......
.X.XXX.
.......
.X.XXX.
.X.XXX.
.X.XXX.
.......
Run Code Online (Sandbox Code Playgroud)

已知的事情:

  • 有2 ^ 9(512)个唯一值.
  • 我只关心2 ^ 8(256)个值,因为我需要始终打开中心位.

尝试

我手动尝试了许多不同的技术,但无法提出简单的算法.

所以,我想写一个C#程序来创建它,但我也没有看到一个简单的方法.

对我来说,甚至没有一种明显的蛮力方法.似乎任何暴力尝试都会接近512!在更坏的情况下组合.

意见

每条边只有8个可能的值.

X...X.XXX. //(8+2 bits) Exhausts all values in the same problem with 1-Dimension.

.X.XXX.    //(5+2 bits) The above simplifies when the center bit must be on. 
Run Code Online (Sandbox Code Playgroud)

目的

这实际上将用于基于2d拼图的游戏.

游戏中有N个可能的碎片.鉴于地面可以在任何情况下发生,设计师需要一种方法来表达应该针对任何给定情况选择哪个区块.

包含所有可能情况的紧凑网格是指定在每种情况下使用哪个磁贴并消除所有冗余的最有效方法.

更新

....
.XX.
.XX.
....
Run Code Online (Sandbox Code Playgroud)

以上是允许表达4种情况的基本模式,我将修改它以使用其他ascii值来表示应在每种情况下使用的结果:

....
.AG.
.HH. …
Run Code Online (Sandbox Code Playgroud)

c# algorithm bit-packing

8
推荐指数
1
解决办法
604
查看次数

多个 Response.writeAsync 调用

我一直在研究 Asp.Net Security,我发现了一些令人惊讶的代码:

奇怪的代码?

context.Response.ContentType = "text/html";
await context.Response.WriteAsync("<html><body>");
await context.Response.WriteAsync("An remote error has occured: " + context.Request.Query["ErrorMessage"] + "<br>");
await context.Response.WriteAsync("<a href=\"/\">Home</a>");
await context.Response.WriteAsync("</body></html>");
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是多次使用短字符串调用 WriteAsync。

我会做什么

我会使用带有 String.Format 或 StringBuilder 的模板来连接字符串,然后在一次调用中写入:

var template = @"
<html><body>
An remote error has occured:{0}<br>
<a href=\"/\">Home</a>
</body></html>
";

var html = string.format(template, context.Request.Query["ErrorMessage"]);
await context.Response.WriteAsync(html);
Run Code Online (Sandbox Code Playgroud)

我观察到的差异

  • 我的代码更容易修改。
  • 我有一些额外的空白。
  • 我的代码使用更大的硬编码字符串而不是一堆小的硬编码字符串。
  • 我使用 String.Format ,与串联相比,它可能会影响性能。
  • 如果应避免字符串连接,则应拆分此部分:

    "An remote error has occured: " + context.Request.Query["ErrorMessage"] + "<br>"
    
    Run Code Online (Sandbox Code Playgroud)

问题

出于讨论的目的。让我们假设这是在一个平均有大约 10,000 个同时活跃用户的 Web 服务器的上下文中:所以性能很重要。 …

c# asp.net performance asynchronous async-await

4
推荐指数
1
解决办法
3102
查看次数

在C语言中,可以同时使用&和[]快速获取指向数组中对象的指针吗?

我知道这可以获取索引(并自动执行指针算术):

struct Obj *c = &p[i];

但是,与手动执行指针算术相比,这是否会对性能产生影响?

struct Obj *c = p+i;

有什么理由可以避免使用第一个?

c performance

-1
推荐指数
1
解决办法
68
查看次数