我需要将联合对象类型(可能有嵌套联合)转换为可选值类型的深度交集。本质上,所有可能的字段都会相交,并且仅当它存在于联合的一侧时才是可选的 - 并对所有嵌套对象执行此操作。
注意:这不是简单的并集到交集
内嵌附加评论:
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) 更新:这被称为de Brujin torus,但我仍需要在C#中找出一个简单的算法.
http://en.wikipedia.org/wiki/De_Bruijn_torus
http://datagenetics.com/blog/october22013/index.html
我需要尽可能密集地组合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)
我手动尝试了许多不同的技术,但无法提出简单的算法.
所以,我想写一个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) 我一直在研究 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)
如果应避免字符串连接,则应拆分此部分:
"An remote error has occured: " + context.Request.Query["ErrorMessage"] + "<br>"
Run Code Online (Sandbox Code Playgroud)出于讨论的目的。让我们假设这是在一个平均有大约 10,000 个同时活跃用户的 Web 服务器的上下文中:所以性能很重要。 …
我知道这可以获取索引(并自动执行指针算术):
struct Obj *c = &p[i];
但是,与手动执行指针算术相比,这是否会对性能产生影响?
struct Obj *c = p+i;
有什么理由可以避免使用第一个?
c# ×2
performance ×2
algorithm ×1
asp.net ×1
async-await ×1
asynchronous ×1
bit-packing ×1
c ×1
types ×1
typescript ×1