在此链接指定的编码竞赛中,您需要读取大量数据stdin,进行一些计算并提供大量数据stdout.
在我的基准测试中,尽管我尽可能地尝试优化它,但几乎只有I/O才需要时间.
你输入的是一个字符串(1 <= len <= 100'000)和q行的一对int,其中q也是1 <= q <= 100'000.
我在100倍大的数据集(len = 10M,q = 10M)上对我的代码进行基准测试,这就是结果:
Activity time accumulated
Read text: 0.004 0.004
Read numbers: 0.146 0.150
Parse numbers: 0.200 0.350
Calc answers: 0.001 0.351
Format output: 0.037 0.388
Print output: 0.143 0.531
Run Code Online (Sandbox Code Playgroud)
通过实现我自己的格式化和数字解析内联我设法将时间缩短到使用printf和时间的1/3 scanf.
然而,当我将我的解决方案上传到比赛网页时,我的解决方案需要1.88秒(我认为这是超过22个数据集的总时间).当我看到高分时,有几个实现(在c ++中)在0.05秒内完成,比我快了近40倍!怎么可能?
我想我可以通过使用2个线程来加速它,然后我可以开始计算并写入stdout,同时仍然从stdin读取.然而,这将减少min(0.150, 0.143)我的大型数据集的理论上最佳情况的时间.我仍然没有接近高分...
在下图中,您可以看到消耗时间的统计信息.
该程序由网站编译,具有以下选项:
gcc -g -O2 -std=gnu99 -static my_file.c -lm
Run Code Online (Sandbox Code Playgroud)
和定时这样:
time ./a.out < sample.in > sample.out …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 dtd 验证读取 XML 文件,但不知道我是怎么做的,好像程序没有读取我的 dtd 文件。我将问题集中在一个小的 xml 文件和一个小的 dtd 文件上:
test.xml - 位于 c:\test.xml
<?xml version="1.0"?>
<!DOCTYPE Product SYSTEM "test.dtd">
<Product ProductID="123">
<ProductName>Rugby jersey</ProductName>
</Product>
Run Code Online (Sandbox Code Playgroud)
test.dtd - 位于 c:\test.dtd
<!ELEMENT Product (ProductName)>
<!ATTLIST Product ProductID CDATA #REQUIRED>
<!ELEMENT ProductName (#PCDATA)>
Run Code Online (Sandbox Code Playgroud)
我的 C# 程序看起来像这样
namespace XML_to_csv_converter
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
ReadXMLwithDTD();
}
public void ReadXMLwithDTD()
{
// Set the validation settings.
XmlReaderSettings settings = …Run Code Online (Sandbox Code Playgroud) 我最近想出了一种我认为是在C代码中声明函数返回状态的奇怪方法。执行任务的功能通常会根据成功或错误返回状态代码。这通常以整数或枚举的形式发送,该枚举在文件(或另一个文件)中的其他位置声明。我发现通过在函数签名中声明枚举,我们可以:
例如:
// implementation.h
enum {
OK,
INTERNAL_ERROR,
NO_PARAMETERS
} do_that();
// implementation.c
enum {
OK,
INTERNAL_ERROR,
NO_PARAMETERS
} do_that() {
if (this())
return OK;
else if (that())
return NO_PARAMETERS;
return INTERNAL_ERROR;
}
Run Code Online (Sandbox Code Playgroud)
我从未见过有人使用过这种风格。有效吗 如果没有,为什么不呢?
我看到的一个缺点是,您必须在c文件和头文件中都声明可能的返回值,但这也使它更可用,并且在查看签名时可以直接清除。
另一个问题是,据我了解,即使在学究的c语言中,枚举类型之间也可以进行隐式转换,这意味着在函数声明和实现(c和h文件)中声明不同的返回状态不会生成警告或错误。
当在终端模拟器(例如终结器)中使用 Fish shell 以及输出大量文本的命令时,在输出上获取一些颜色编码可能会很有用。我知道脚本可以将颜色代码信息添加到输出中,例如“ grep --color=auto ”。我想可以修改鱼终端以扫描输出并将其添加到特殊位置吗?
我想要做的是,任何脚本的输出中出现的文本“错误”始终标记为红色,而“警告”始终标记为黄色。任何人都知道这是否可以通过在~/.config/fish/functions目录或类似目录中引入函数文件来实现?
c ×2
c# ×1
dtd ×1
enums ×1
fish ×1
linux ×1
optimization ×1
performance ×1
return-value ×1
shell ×1
stdin ×1
stdout ×1
terminal ×1
xml ×1