小编ŹV *_*V -的帖子

正则表达式仅匹配行尾的X个字符

下面你将看到来自专有路由设备的32b内存转储中字符串'octeon'的一小段匹配.正如您所看到的,它包含一些调整后的ASCII,从行尾开始延伸到16个字符,然后是4个32位字(当然每个8个字符),然后是地址偏移量.

000b27a0: 41646a75 7374206f 6374656f 6e5f6970    Adjust octeon_ip
000b2850: 73740a00 00000000 6f637465 6f6e5f72    st......octeon_r
000b2870: 5f73697a 65000000 6f637465 6f6e5f72    _size...octeon_r
000b2990: 6164696e 672e0a00 6f637465 6f6e5f72    ading...octeon_r
000b29b0: 785f7369 7a650000 6f637465 6f6e5f72    x_size..octeon_r
000b3050: 780a0000 00000000 6f637465 6f6e5f70    x.......octeon_p
000b3650: 6564204f 6374656f 6e206d6f 64656c0a    ed Octeon model.
000bade0: 20307825 71780a00 6f637465 6f6e5f6c     0x%qx..octeon_l
000bafd0: 696e6720 4f637465 6f6e2045 78656375    ing Octeon Execu
000bd710: 6564204f 6374656f 6e204d6f 64656c21    ed Octeon Model!
000bd950: 4f435445 4f4e2070 61737320 3120646f    OCTEON pass 1 do
000bda20: 6564206f 6374656f …
Run Code Online (Sandbox Code Playgroud)

regex grep string-search

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

为什么要比较各种各样的麻烦?

Timsort,Quicksort和Mergesort等算法主宰了" 真实世界 "的排序方法.这些比较类型的情况非常实用 - 它们已被证明是各种环境中性能最高,最稳定,多用途的排序算法.

但是,似乎我们在计算机上排序的几乎所有内容都是可数/部分排序的.数字,字符,字符串,甚至函数都适用于某些有意义的非比较排序方法.这里的候选人是Radix排序.一般情况下,它会比O(n*log(n))表现得更快,在许多情况下以大范围击败n*log(n)的理论比较排序限制,复杂度为O(K*n) - K是表示特定项目所需的位数.

是什么赋予了?

sorting algorithm quicksort radix-sort

8
推荐指数
2
解决办法
1133
查看次数

典型算法为"每次访问一次门"的问题

有许多谜题是经典的"7 Bridges of Konigsberg"拼图的变体,你必须在没有两次使用门的情况下找到通过一组房间的路线.

这是一个没有解决方案的例子. 测试

...... 正如你在这里看到的那样,是一个有一点解决方案的解决方案. 假

我对解决这类问题的程序化方法感兴趣,虽然有很多方法可以确定房间和门的特定配置没有解决方案,但我有兴趣计算要访问的门列表来解决难题.查看问题的一种方法是将其配置转换为图形并求解哈密顿量.然而,这种问题需要加强不优雅的逻辑,因为禁止"U-Turns"的约束.

我在几分钟内修复了一个解决方案以显示问题.这是一个蛮力的解决方案,将"房间"分组,增加的不变量,你不能从一个"门"移动到同一个房间的另一个"门"(这将需要做一个掉头).

我觉得必须有一个更好的抽象来表示这个问题,而不是诉诸于以下"技巧":

  1. 当路径刚刚来自那个房间时,有额外的逻辑来移除同一房间内的门作为有效选择.

  2. 生成与输入房间配置不同构的图形.

  3. 过滤所有不满足掉头约束的配置.(#1的变体)

是否存在解决这类问题的现有文献,如果是这样,他们的结论是什么?房间问题是否与最知名的图算法采用的方法基本不一致,因此它需要这种特殊的逻辑?如果有一个更好的解决方案不是对图表的转换,我也很乐意听到这一点.

这是现有的代码,它们起作用,组代表第一个问题,被注释掉的组代表后一个问题:

// I renamed "groups" to rooms to make the code more clear.
var rooms = {
    1: ['A','B','C','D'],
    //1: ['A','B','C','D','P'],
    2: ['E', 'D', 'F', 'G'],
    3: ['F','I','J','H'],
    //3: ['F','I','P','J', 'H'],
    4: ['I', 'M', 'N', 'O'],
    5: ['C','J','M','L','K'],
    OUTER: ['A', 'B', 'E', 'G', 'H', 'O', 'N', 'L', 'K']
}

class Graph {
    constructor(rooms) {
        // This is a map of a door …
Run Code Online (Sandbox Code Playgroud)

javascript graph-theory hamiltonian-cycle

6
推荐指数
1
解决办法
218
查看次数

C99将作为文字初始化值传递的值定义为结构,失败为非const

在(旧)Linux源代码(用C89编写)中,使用标准C89结构文字初始化语法#define在结构(ide_pci_device_s)的初始化中用作文字,但是,当我使用支持C99的编译器进行编译时,我得到错误initializer element is not constant,下面是我正在使用的代码示例,它会抛出错误.

#define ON_BOARD 1

#define PCI_VENDOR_ID_INTEL     0x8086
#define PCI_DEVICE_ID_INTEL_82371FB_0   0x122e

#define DEVID_PIIXa     ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL,   PCI_DEVICE_ID_INTEL_82371FB_0})

typedef char byte;

typedef struct ide_pci_devid_t {
        int one, two;
} ide_pci_devid_t;

typedef struct ide_hwif_t {
        int whatever;
} ide_hwif_t;

typedef struct ide_pci_enablebit_s {
    byte        reg;    /* byte pci reg holding the enable-bit */
        byte    mask;   /* mask to isolate the enable-bit */
        byte    val;    /* value of masked reg when "enabled" */
} ide_pci_enablebit_t;

typedef …
Run Code Online (Sandbox Code Playgroud)

c struct const

5
推荐指数
1
解决办法
181
查看次数

显示或重定向shell的作业控制消息

TL; DR

所有作业控制/崩溃消息在函数内发生时都会被隐藏.我将在下面详细介绍,但是@Barmar已经指出可以通过在函数内部运行崩溃二进制来重现此问题,例如:

crun() { 
  /tmp/faulty $1 $2 $3
}
Run Code Online (Sandbox Code Playgroud)

我已经定义了一个函数.zshrc来编译和运行源代码,使用下面的函数:

crun() {
    local file=$1
    shift
    local exepath="$(mktemp)"

    if [[ $file =~ "\.c$" ]]; then
        gcc -g -Wall $file -o $exepath || return $?
    else
        echo "no filetype detected"
        return 126
    fi

    $exepath "$@"
}
Run Code Online (Sandbox Code Playgroud)

可以这种方式调用:

% crun source.cc arg_1 arg_2
Run Code Online (Sandbox Code Playgroud)

这适用于普通程序,但是存在shell的作业控制消息(例如从段错误生成的消息)不会出现的问题.

举个例子:

% echo 'int main=0;' >> /tmp/faulty.c # a crashing c program
% crun faulty.c
% # no output generated
Run Code Online (Sandbox Code Playgroud)

而等效的交互式命令会产生这样的:

% g++ faulty.c …
Run Code Online (Sandbox Code Playgroud)

linux shell signals zsh

5
推荐指数
1
解决办法
168
查看次数