小编Ste*_*lli的帖子

坐标(x,y)列表用螺旋算法排序

我有一个用螺旋算法排序的坐标列表.我需要从该区域的中间开始并"触摸"任何坐标.

为了简化这一点,表示(未排序的)坐标列表(x,y在后面的图像上标有"点").

此处提供CSV坐标列表.
X从左向右
增加Y从TOP增加到BOTTOM

未排序的坐标列表 每个坐标不与下一个坐标相邻,而是由1或2个骰子(在某些情况下为更多)进行干扰.

从该区域的中心开始,我需要通过螺旋运动触摸任何坐标:

螺旋方法

解析我已经起草这个PHP算法的每个坐标:

 //$missing is an associative array having as key the coordinate "x,y" to be touched
 $direction = 'top';
 $distance = 1;
 $next = '128,127';     //starting coordinate
 $sequence = array(
     $next;
 )
 unset($missing[$next]);
 reset($missing);
 $loopcount = 0;
 while ($missing) {
    for ($loop = 1; $loop <= 2; $loop++) {
        for ($d = 1; $d <= $distance; $d++) {
            list($x,$y) = explode(",", $next);
                if ($direction == 'top')    $next = ($x) . "," . ($y …
Run Code Online (Sandbox Code Playgroud)

php sorting spiral coordinates

15
推荐指数
1
解决办法
1435
查看次数

bash运行功能与不同的用户

是否可以使用不同的权限运行自定义bash功能?

#!/bin/bash
function RunStefano() {
     while [ 1 ]; do
         echo "Ciao, ´/usr/bin/whoami´"
         sleep 10;
     done &
}
export -f RunStefano;
echo "Welcome, ´/usr/bin/whoami´"
sudo -u stefano -c "RunStefano"
Run Code Online (Sandbox Code Playgroud)

如果我用'root'用户运行这个脚本,我想收到输出:

Welcome, root
Ciao, stefano
    (...)
Ciao, stefano
Run Code Online (Sandbox Code Playgroud)

它可能吗?

bash sudo

14
推荐指数
2
解决办法
8218
查看次数

php垂直正则表达式搜索

我有一个字符串描述像这样的nxm元素矩阵:

§inputmap = "
~~~~~~~~~~~~~~~~~~~~B~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~BBB........BBB~~~~~~~~~~~~~
~~~~~~~~~~BB...............FBB~~~~~~~~~~
~~~~~~~~BB....................BB~~~~~~~~
~~~~~~BB.....F..................BB~~~~~~
~~~~~BB.....................F.....B~~~~~
~~~~B..............................B~~~~
~~~B........F.......................B~~~
~~BB.........F......................BB~~
~~B................F.................BB~
~BF....F....F........................FB~
~B.....................................B
B.....................................FB
B........F......F......................B
B...........................F..........B
B......................................B
B......................................B
B.......F.......................F......B
B......FFF.............................B
B.......F.............................FB
~B..................F.................FB
~BF...........................F.......B~
~~B...F...........F..........FFFFF.F.BB~
~~BB..................F..F....F.....BB~~
~~~B.......................FF.FF....B~~~
~~~~B..............................B~~~~
~~~~~BB...........................B~~~~~
~~~~~~BB........................BB~~~~~~
~~~~~~~~BB..........F..........B~~~~~~~~
~~~~~~~~~~BB................BB~~~~~~~~~~
~~~~~~~~~~~~~BBB.......F.BBB~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~BBBBBB~~~~~~~~~~~~~~~~~
";
$inputmap = trim($inputmap);
Run Code Online (Sandbox Code Playgroud)

我需要构建一个正则表达式(或其他东西)来搜索字符串:

$search = "
*F*
FFF
*F*
";
$search = trim($search);
Run Code Online (Sandbox Code Playgroud)

在整个网格上.另一方面,我需要找到一个5个不同字母"F"的图案(垂直3个,水平3个),回到地图上找到的图案的行/列位置.

考虑到输入矩阵可以是不同的(5x5或10x10或20x25或......),有没有办法解决我的PHP和正则表达式的问题?

php regex pattern-matching

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

php fsockopen如何知道连接是否存活

我有php fsockopen命令的问题.

我需要在服务器上打开套接字连接以实现消息交换.如果服务器没有从我的(客户端)端收到任何东西,它会在一定的超时后关闭连接(我不知道我不能改变).

问题是......我怎么知道几分钟前套接字是否仍然存在?

这是我用来打开连接的脚本

$socket = fsockopen("automation.srv.st.com", 7777, $errno, $errstr);
if ($socket === false) {
    echo "Unable to open Socket. Error {$errno} : {$errstr}\n";
    die();
}
$status = stream_get_meta_data($socket);
print_r($status);
Run Code Online (Sandbox Code Playgroud)

它打印出来

Array
(
    [stream_type] => tcp_socket/ssl
    [mode] => r+
    [unread_bytes] => 0
    [seekable] =>
    [timed_out] =>
    [blocked] => 1
    [eof] =>
)
Run Code Online (Sandbox Code Playgroud)

然后写入服务器的每条消息......

 fwrite($socket, $message);
Run Code Online (Sandbox Code Playgroud)

...我在200ms内收到反馈:

 $answer = fread($socket, 1024);
Run Code Online (Sandbox Code Playgroud)

但是如果我的脚本花了30分钟没有向服务器发送任何消息(因为它没有任何通信),那么服务器会自动关闭连接,我无法理解如何在重新实例化新连接之前检查它:

如果尝试过

if ($socket)    echo "The socket is still having a valid resource\n";
Run Code Online (Sandbox Code Playgroud)

但这会回复我的$ socket仍然是一个有效的流资源

我试过了

$status = stream_get_meta_data($socket); …
Run Code Online (Sandbox Code Playgroud)

php sockets fsockopen connection-timeout

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

在 /dev/stdout 上运行用户和权限被拒绝

我在 bash 脚本上遇到了一个问题,即: - 在系统启动时或按需由“root”执行 - 运行具有“stefano”权限的脚本 - 如果由“root”或“/”触发,则重定向日志文件上的输出dev/stdout" 如果由 "stefano" 触发:

 #!/bin/bash
 [ "$1" == "log" ] && log="$2" || log="/dev/stdout"

 if [ "`/usr/bin/whoami`" != "stefano" ]; then
      echo "You are not allowed"
      exit 9
 fi

 runuser -s /bin/bash stefano -c "echo I am Stefano >> $log"
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我得到一个 bash: /dev/stdout: Permission denied

如果命令由 root 触发,为什么用户“stefano”无法在 /dev/stdout 上写入?

显然作为stefano> echo "I am Stefano" >> /dev/stdout没有得到任何错误。

在此先感谢您的帮助!Stefano, 米兰, 意大利

bash permission-denied

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

在javascript运行时显示消息

我知道很可能这样的问题已被多次请求但我需要在触发javascript函数时显示弹出窗口或消息或whatelse并在最后隐藏它.

看到这个简单的小提琴

这是HTML代码:

<div id='message'>Default message</div>
<input type='button' onclick='Run();' value='start'>
Run Code Online (Sandbox Code Playgroud)

div'消息'必须包含一个简单的文本,如"跑步"或"请等待"或......

这是JS(延迟)3秒的功能:

function Run() {
    var delay = 3000;   //-- 3 seconds
    $( '#message' ).text('Please wait ' + delay + ' seconds...');
    var start = new Date().getTime();
    while (true) {
        current = new Date().getTime();
        if ( (start + delay) < current) {
            break;
        }
    }
    $( '#message' ).text('Done');
}
Run Code Online (Sandbox Code Playgroud)

预期的行为是'#message'div包含"请等待3秒......"才能进入循环,而"Done"字符串仅包含在结尾处.

但事实并非如此.任何人都可以解释我(最有可能"再次")为什么或建议一个链接在哪里找到答案?

javascript jquery asynchronous

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