小编Aur*_*ílý的帖子

Code Golf:河内的塔楼

规则

河内之塔是一个难题,如果你不熟悉它,它的工作原理如下:

游戏区域包括3个杆和x个盘,每个盘下一个比前一个更大.可以将这些磁盘放在杆上,这些规则如下:

  • 一次只能移动一个磁盘,并且必须在另一个磁带的顶部移动
  • 磁盘必须从杆的顶部取出
  • 磁盘可以某处移动,如果在目标棒的最上面的磁盘是更大的一个比要被移动

最后-游戏领域STARTS是这样的:

  • 一个带有x个磁盘的杆,按顺序分类,使最大的位于底部,最小的位于顶部
  • 一根空杆
  • 一根空杆

游戏的目标是将原始"堆叠"的磁盘移动到另一根杆上,即 - 将所有磁盘放在另一根杆上,因此(再次)最大的是在底部,最小的在顶部

履行

您的目标是使用您选择的编程语言编写程序,接受输入(如下所述)并输出解决位置所需的步骤.

一如既往,尽量让它尽可能短.

输入

输入示例:

4-3,7-6-5,2-1
Run Code Online (Sandbox Code Playgroud)

输入是一个字符串,由3个部分组成,以逗号分隔.这些部件是3根杆上每个杆上的磁盘列表.它们也是分开的,这次是连字符( - ),每个子部分都是一个数字,数字越大,磁盘越大.

所以 - 对于上面的输入,这将是一个直观的表示:

       .               .               .
       |          =====|=====          |
    ===|===      ======|======        =|=
   ====|====    =======|=======      ==|==

     ROD 1           ROD 2           ROD 3
Run Code Online (Sandbox Code Playgroud)

产量

正如您在上面的表示中所看到的那样 - 输入的最左侧部分是第一个杆,中间是第二个杆,最后一个是第3个杆.

程序的输出应如下所示:

12,23,31,12,23,13
Run Code Online (Sandbox Code Playgroud)

一个数字列表,用逗号分隔,用于定义应该取出磁盘的磁带,以及磁盘应放在的磁带上.只有3个杆,因此只有6种可能的组合(因为盘必须移动到另一个杆,而不是相同的杆):

12
13
21
23
31
32
Run Code Online (Sandbox Code Playgroud)

笔记

输入不必描述处于"原始"状态的字段 - 它可以是中间求解的.

您的程序无法生成空输出.如果输入IS处于原始状态,只需将磁盘放入不同的杆.

输入可以有一个空杆,如下所示:

2-1,3,
,,1
4-3,,2-1
Run Code Online (Sandbox Code Playgroud)

如果输入的格式不是这样,则程序可能会产生未定义的行为.因此,如果输入无效(例如较小的磁盘,丢失的磁盘,无法解决),它就可以. …

code-golf towers-of-hanoi

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

在c ++ lambdas中捕获内部构造函数的类成员

假设我们有A级:

class A
{
    double x;
    double y;
    A(double, double);
    function <double(void)> F;
};
Run Code Online (Sandbox Code Playgroud)

以下构造函数:

A::A(double a, double b)
{
    x = a;
    y = b;
    F = [this]() { return x + y; };
}
Run Code Online (Sandbox Code Playgroud)

为什么上述构造的工作,而下面的构造会导致编译错误:member A::x is not a variable?(相同的错误y.)

A::A(double a, double b)
{
    x = a;
    y = b;
    F = [x,y]() { return x + y; };
}
Run Code Online (Sandbox Code Playgroud)

我似乎只能捕捉this而不是集体成员.这是为什么?

c++ lambda

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

套接字错误 - 有时候?

所以 - 我有这个Socket(不是XMLSocket,只是Socket)客户端.我的服务器上还有一个自定义PHP脚本,它侦听端口X.我的客户端尝试连接到它.

一切正常,安全和沟通,同步和其他任何东西.但是 - Flash Player(实际上是AIR运行时)在尝试连接时会发出错误,但只有当服务器没有运行时......什么?这真的很奇怪 - 错误实际上是由try catch(IOError)处理的,甚至更奇怪,输出中指定的行作为错误行是我刚刚创建Socket的行......?

嗯...

输出:

Error #2044: Unhandled IOErrorEvent:. text=Error #2031: Socket Error.
    at ---.server::Client()[---/server/Client.as:167]
    at Function/<anonymous>()[---_fla.MainTimeline::frame1:430]
    at Function/<anonymous>()
    at Function/<anonymous>()[---_fla.MainTimeline::frame1:375]
Run Code Online (Sandbox Code Playgroud)

码:

try {
    Sock = new Socket(); // THIS is line 167
} catch (e:IOError){
    log("Could not connect!");
    status = "disconnected";
}
Run Code Online (Sandbox Code Playgroud)

这并不重要 - 服务器应该仍然在线,错误不会显示......但忽略错误并不好.

还有一件事:当我使用Sock.connect(...)注释掉我实际连接的行时 - 它不会抛出错误,但它显然不起作用...此外,连接部分也在try catch中(IOError)块...

为什么Flash说这个问题出现在第167行,显然是在其他地方?和/或可能是什么问题?

sockets air actionscript-3

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

javascript类为什么第二个参数getter不在下面工作

为什么我的getter undefined在下面的代码段中返回第二个参数?它适用于年龄参数,但不适用于身高.如果您使用_param访问它,一切都很好,您可以从下面的输出中看到:

class Person {
    constructor(myage, myheight){
        this.age = myage;
        this.height = myheight;
    }

    get age(){
        return this._age;
    }

    set age(myage){
        this._age = myage;
    }

    get height(){
        this._height;
    }

    set height(myheight){
        this._height = myheight;
    }
 }

 var p = new Person(10, '5 feet');
 console.log(p);

 console.log(`age = ${p.age} and height = ${p.height}`);
 console.log(p.height);
Run Code Online (Sandbox Code Playgroud)

正确生成年龄但不是高度的值

 bash-3.2$ node classes.js
 Person { _age: 10, _height: '5 feet' }
 age = 10 and height = undefined
 undefined
Run Code Online (Sandbox Code Playgroud)

javascript getter setter class

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