啊!野兽在这里!


19

正如我们从IBM PC AT,YouTube(请参阅视频)Wikipedia(请参阅文章)和芝麻街所了解的:

字母H字母表中最无情的字母

(即使实际上是由代码页437中的两个元素组成的,实际上,这种方式更无情。)

就像外星人一样,呃...呃... 外星人,野兽不懈地追求所有敢于靠近卵子的人。他们没有理由。如果不灭,就必须压扁它们。

与4H俱乐部的惊心encounter面

对于这种情况,我们将假设您已经到了最后一生,并且您在没有卵的地形中遇到了野兽(如Wikipedia屏幕快照中所示)。您没有数字键盘,只能直接向上/向下/向左/向右移动...但是这些野兽显然有一个,可以在转弯时对角移动。

野兽在其选择中的移动选择将是使与玩家的距离最小化的选择。如果距离相等,则完成平局决胜,偏爱向左+向上胜于向右+向下,但这是明确的消歧矩阵...最低的平局决胜数:

1 3 4
2 H 5
6 8 7

野兽从不睡觉,但幸运的是,它们比玩家还慢。他们每隔一圈移动一次(通过在第二个回合开始他们的交替来让玩家领先。)如果可能的话,他们必须移动,无论这是否使他们离玩家更远。

如果将一列可移动的墙壁移动到封闭的缝隙中,则可以将其压碎。这些普通的野兽每头值2点。

输入项

  1. 一对整数,指示列大小,然后按行大小。

  2. 输入行的行数,每列大小...包含实心壁​​(#),活动壁(~),野兽(H),播放器(O)或仅一个空格。

  3. 输入将是U,D,L,R,表示玩家尝试移动...或等待等待的W。请注意,尝试推动被阻塞的可移动墙是合法的输入,只会导致不采取任何措施。

输出量

  1. aHHHH! 如果野兽杀死了玩家...或者如果玩家赢了而没有剩下的野兽则一无所获

  2. 比分

(注意:出于调试目的和/或娱乐目的,您可能希望能够在每个步骤中输出状态;但这太长了,无法在此处发布。)

澄清说明

  • 确保地图被实心墙包围。

  • 谁依次移动的顺序对结果很重要。因此:玩家总是先走,然后如果您从左上到右从屏幕上扫过,则根据野兽的初始地图位置对其进行排序。(第1行的野兽移动到第2行的野兽之前,并且同一行上的两个野兽将是具有最低列号的野兽,然后移动到另一行)

  • 对角移动的野兽可以移动到任何相邻的对角线开放空间中,而不管是否需要在墙壁之间挤压。

  • 只要另一端有空间或野兽,玩家就可以将任何数量的可移动墙沿一条线推入。但是,尝试将一列墙壁推入没有固定在墙壁之间的野兽中时,会将野兽视为墙壁,并且不允许移动。

  • 野兽在回合中的移动决定取决于玩家在回合开始时的位置。它对“玩家距离”的理想优化是通过“乌鸦飞翔”计算。从其正方形的中心到玩家正方形的中心测得的结果相同的任何近似值都可以。

  • 如果由于较高优先级的野兽而无法将其作为第一顺位的行动,那么它将选择其第二个最佳选择,而不是保持原状(如果仍然可以采取行动)。

样品盒

简单粉碎

输入项

5 3
#####
#O~H#
#####
R

输出量

2

偏好矩阵->死亡

输入项

5 5
#####
#O  #
# ~ #
#  H#
#####
WWDW

输出量

aHHHH!
0

偏好矩阵->赢

输入项

5 5
#####
#O  #
# ~ #
#  H#
#####
WRD

输出量

2

等待收割者

输入项

5 5
#####
#O  #
# ~ #
#  H#
#####
WWW

输出量

aHHHH!
0

在Wikipedia场景中成功失败

输入项

40 23
########################################
#~      ~ ~~  ~  ~ ~~   ~ ~~    ~ ~ ~~ #
#~~ ~          ~~   ~   ~ ~~         ~ #
#~# ~~   ~~~~      ~  ~~~~  ~    ~~~  ~#
# ~        ~   ~ ~~ #~~       ~        #
#~~  ~~~   ~ ~ ~      ~ ~~ ~  ~  ~  ~  #
#     ~~  ~  ~ ~ ~~~       H    ~  #~  #
#  O~  ~  #  ~~~ ~      ~ ~~  ~  ~ ~~  #
#       ~ ~H~~   ~~ ~ #        ~~   ~  #
# ~~         ~ ~~~  ~~   ~~~~      ~  ~#
#~  ~    ~~~  ~   ~        ~   ~ ~~  ~~#
#     ~      # ~ ~~  ~~~   ~ ~ ~ #    ~#
#~ ~ ~~  ~  ~   H     ~~  ~~ ~ ~ ~~~   #
#       ~   ~   ~   ~  ~     ~~~ ~     #
# ~~  ~  ~ ~~   ~       ~ ~ ~     ~    #
#      ~~   ~   ~  ~         ~      ~~ #
#~ ~     #    ~~~~  ~    ~~~H   # ~    #
#  ~   ~ ~   ~        ~          ~~  ~ #
#  ~   ~     #~  ~   ~~  ~  ~         ~#
# ~~ ~ ~  ~~                ~   ~      #
#    ~~~        ~ ~~  ~  ~  ~   ~      #
# ~ ~     ~            ~~   ~   ~  ~   #
########################################
RRRUWWWRRRURWWWWRDRRWWRDWWWWD

输出量

8

我提供的地图,@ bobbel的移动和输出,由我和@Allbeert证实。

获奖标准

我认为这是可以打高尔夫的,所以除非有人抱怨,否则我将遵循代码高尔夫规则。

额外信用

可播放的Unicode实现,带有双倍宽字符,类似于图像!


斜线运动会跳过墙的对角线吗?假设一头野兽每转一个动作,它如何打破两个水平动作或两个垂直动作之间的距离关系?它是否会在转牌开始时或在玩家移动之后移向玩家所在的位置?当您说“活动墙的火车”时,是否意味着只要另一端有空间或野兽,玩家就可以将任意数量的活动墙推成一条线?
彼得·泰勒

2
如果我理解正确,那么第二个示例是错误的,因为pastebin.com/raw.php?i=CqPJPjTR
门把手

1
@ Dr.Rebmu:一般来说,我非常喜欢您的任务,但是有很多问题要问。感谢您的澄清!因此,接下来:关于“两兽”情况:pastebin.com/raw.php ? i=FENVAkCH我的假设正确吗?
bobbel 2014年

1
另一个问题:如果您将一串墙移动到没有“固定下来”的野兽中怎么办?pastebin.com/raw.php?i=isN4L6pJ
Claudiu 2014年

3
@bobbel男人,写问题比解决问题更难!:-)我说,鉴于野兽不愿静止的倾向,如果有更高优先级的野兽占据理想位置,他们将采取下一个最好的举动,而不是继续前进。澄清。
Rebmu博士2014年

Answers:


3

Perl 6:741个字符,758个字节

高尔夫球版在底部,因为它基本上是线噪声。上面是我的预高尔夫球版本。两者都是交互式的(它们将从输入文件中读取尽可能多的命令,然后继续使用STDIN来获取命令)。他们尝试使用原始字符和颜色。

用法就像perl6 beast.p6 beast-input

use Term::ANSIColor;
class BeastGame {
    enum BeastParts <None Player Beast M-Wall S-Wall>;

    has @.board;
    has Int $.turn = 0;
    has Int $.score = 0;

    method indices (\matcher) {
        @.board.pairs.map: {
            .key*i X+ .value[].pairs.map: {
                .key if .value ~~ matcher
            }
        }
    }
    multi postcircumfix:<[ ]> (BeastGame \SELF, Complex \c) is rw { SELF.board[c.im][c.re] }

    has Complex $!player;
    method player { $!player = $.indices(Player)[0] }
    method Bool { so $.indices(Player) & $.indices(Beast) }

    method new (@lines) {
        my @board = @lines.map:
            {[ %(' ',<O H ~ #> Z=> None, Player, Beast, M-Wall, S-Wall){ .comb } ]}

        self.bless: :@board
    }
    method gist {
        state @symbol-map = map {colored .key, .value~' on_black'},
            ('  ',<◄► ├┤ ▒▒ ██> Z=> <default cyan red green yellow>);

        @.board.map({ @symbol-map[@$_].join }).join("\n")
    }

    method step ($d) {
        my $direction = %(:W(0), :L(-1+0i), :R(1+0i), :U(-1i), :D(1i)){$d};
        $direction // return self;
        self.move($.player,$direction);

        if ++$!turn %% 2 {
            for $.indices(Beast).eager -> $c {
                for (-1-1i,-1+0i,-1i,1-1i,1+0i,-1+1i,1+1i,1i,0i)\
                        .sort({abs $c + $^d - $!player})
                {
                    last if self.move($c, $_).defined;
                }
            }
        }

        self;
    }
    method move ($cur, $by) {
        return $cur if $by == 0;

        my $to = $cur + $by;
        my &cur-is  = { self[$cur] ~~ $^o }
        my &next-is = { self[$to]  ~~ $^o }
        return if cur-is S-Wall;
        (self[$to], self[$cur]) = (self[$cur], None)
            if next-is None
            # Move wall
            or cur-is Player | M-Wall and next-is M-Wall and self.move($to, $by)
            # Kill Player
            or cur-is Beast  and next-is Player
            # Squish Beast
            or cur-is M-Wall and next-is Beast  and self[$to+$by] ~~ M-Wall|S-Wall and $!score += 2
    }
}
my $width = get.words[1];
my $game  = BeastGame.new(lines[^$width]);
my @commands = '',lines.comb,{$*IN.get.comb}...*;

while $game {
    $game.step: @commands.shift;
    print "\e[2J";
    print "\e[H";
    say $game;
}

say "aHHHH!" unless $game.player;
say $game.score;

高尔夫球版:

my ($u,$s,$m)=0,0;my@b=lines[^get.words[1]].map:{[%(' ',<O H ~ #>Z=>^5){.comb}]}
my@a='',lines.comb,{$*IN.get.comb}...*;sub g(\c)is rw {@b[c.im][c.re]}
my&n=->\o{@b.kv.map:{$^k*i X+$^v[].kv.map:{$^l if $^w==o}}}
my&p={$m=n(1)[0]}
my&M=->$c,$b{my$t=$c+$b;my&c={$^o==g $c}
my&x={$^o==g $t}
c(4)??0!!$b??(($c,$t)».&g=(0,g $c)
if x(0)||c(1|3)&&x(3)&&M($t,$b)||c(2)&&x(1)||c(3)&&x(2)&&2 <g($t+$b)&&($s+=2))!!1}
while n(1)&n(2) {for 1
{M p,%(:W(0),:L(-1),:R(1),:U(-1i),:D(1i)){@a.shift}//last;if $u++%2
{for n(2).eager ->$c{last if M $c,$_
for(-1-1i,-1+0i,-1i,1-1i,1+0i,-1+1i,1+1i,1i,0i).sort({abs $c+$_-$m})}}}
say "\e[2J\e[H",join "\n",map {[~]
(map {"\e[$^v;40m$^k\e[0m"},'  ',<39 ◄► 36 ├┤ 31 ▒▒ 32 ██ 33>)[@$_]},@b}
say "aHHHH!" if !p;say $s;

复活节快乐!


这是高尔夫规则的代码,因此,即使我自己不太喜欢Perl,您的解决方案也会赢得胜利。;-)与控制台和颜色配合良好!
Rebmu博士2014年

14

爪哇,1,843

我第一次尝试用Java解决这个难题。我知道,有很多改进可以使其缩短。但最终它现在仍然有效。

若要尝试,您必须创建一个类C并粘贴代码。 args[0](严格说来a[0])用于输入。不包含地图的打印方法,因为拼图输出不需要此方法。

class C{static char                    [][]C;static int A=
0,B=0,D=0,E=0,F=0,G                    = 0 ; public static
void main(String[]a                    ){String []b= a[0].
split("\n");int c =                    Byte. decode(b [0].
split(" ")[1]); G=a                    [ 0 ] . replaceAll(
"[^H]","").length()                    ; String d = b [ b.
length - 1 ] ;C=new                    char[c][];for(int e
=1;e<b.length-1;e++                    ) C [ e - 1 ]=b[e].
toCharArray ( ) ; f                    ();boolean X= 0> 1;
for ( char  g : d .                    toCharArray ( ) ) {
switch(g){case 'U':                    h(0,-1);break; case
'D':h(0, 1); break;                    case 'L':h( -1, 0);
break;case'R':h(1,0                    );}if(X)i();X=!X;f(
);}System.out.print                    (D);}static void f(
){for(int a= 0;a<C.                    length;a++)for( int
b=0;b<C[a].length;b                    ++)if(C[a][b]=='O')
{A=b;B= a;}}static void h(int x,int y){E =x;F =y;switch(C[
B +y][A +x]){case 'H':g();break;case ' ':j(A,B);break;case
'~':k();}}static void i(){if(G<1){return;}int[][]l=new int
[G][];int m=0;for(int r=0;r<C.length;r++){for(int c=0;c<C[
r].length; c++){if(C[r][c]=='H'){l[m++]=new int[]{c,r};}}}
for(int[]n:l){o(n[0],n[1]);}} static void o(int a, int b){
int[]c=d (a,b);E=c[0];F =c[1];if(E !=0||F !=0){ j(a,b);} }
static int[]d(int a,int b){int[][]d={{1,3,4},{2,0,5},{6,8,
7},};int[]e=new int[]{0,0};double f=999;for(int r=-1;r<2;r
++){for(int c=-1;c<2;c++){if(C[b+r][a+c]==' '||C[b+r][a+c]
=='O'){int g=a+c-A;                    int h=b+r-B; double
i=Math.sqrt(g*g+h*h                    );if(i<f){e=new int
[]{ c,r};f =i;}else                    if(i==f){if(d[r+1][
c+1]<d[e[1]+1][e[0]                    +1]){e=new int[]{c,
r};}}} }}return e;}                    static void k(){if(
p(E,F,false)){q(E,F                    );} }static void q(
int x,int y){switch                    (C[B+y][A+x]){ case
'~':q(x+E,y+F);case                    'H':case ' ':j(A+x-
E,B+y- F);}} static                    boolean p(int x,int
y,boolean h){switch                    (C[B+y][ A+x]){case
' ':return !h; case                    '~':return h?h:p(x+
E,y +F, false);case                    'H':return h?!h:p(x
+E , y+ F, true) ;}                    return h&&C[B+y][A+
x] == '#' ; }static                    void j(int a,int b)
{char c=C[b][a];if(                    C[b+F][a+E]=='O'){g
();}else if(C[b+F][                    a+E]=='H'){D+=2;G--
;c=C[b][a];C[b][a]=                    ' ';}else{C[b][a]=C
[b+F][a+E];}C[b+F][                    a+E]=c;}static void
g () { System .out.                    print("aHHHH!\n"+D)
;     System      .                    exit  ( 0  ) ;  } }

要运行它,请尝试例如:

root@host:/cygdrive/c/workspace/project/bin> java C "5 5
> #####
> #O  #
> # ~ #
> #  H#
> #####
> WWDW"
aHHHH!
0
root@host:/cygdrive/c/workspace/project/bin>

在野兽吞噬玩家之前的最后一个大场景的输出:

████████████████████████████████████████████████████████████████████████████████
██▓▓            ▓▓  ▓▓▓▓    ▓▓    ▓▓  ▓▓▓▓      ▓▓  ▓▓▓▓        ▓▓  ▓▓  ▓▓▓▓  ██
██▓▓▓▓  ▓▓                    ▓▓▓▓      ▓▓      ▓▓  ▓▓▓▓                  ▓▓  ██
██▓▓██  ▓▓▓▓      ▓▓▓▓▓▓▓▓            ▓▓    ▓▓▓▓▓▓▓▓    ▓▓        ▓▓▓▓▓▓    ▓▓██
██  ▓▓                ▓▓      ▓▓  ▓▓▓▓  ██▓▓▓▓              ▓▓                ██
██▓▓▓▓    ▓▓▓▓▓▓      ▓▓  ▓▓  ▓▓            ▓▓  ▓▓▓▓  ▓▓    ▓▓    ▓▓    ▓▓    ██
██          ▓▓▓▓    ▓▓    ▓▓  ▓▓  ▓▓▓▓▓▓                        ▓▓    ██▓▓    ██
██          ▓▓▓▓    ██    ▓▓▓▓▓▓  ▓▓            ▓▓  ▓▓▓▓    ▓▓    ▓▓  ▓▓▓▓    ██
██              ▓▓  ▓▓  ▓▓▓▓      ▓▓▓▓  ▓▓  ██                ▓▓▓▓      ▓▓    ██
██  ▓▓▓▓                  ▓▓  ▓▓▓▓▓▓    ▓▓▓▓  ├┤  ▓▓▓▓▓▓▓▓            ▓▓    ▓▓██
██▓▓    ▓▓    ├┤◄►▓▓▓▓▓▓├┤  ▓▓      ▓▓                ▓▓      ▓▓  ▓▓▓▓    ▓▓▓▓██
██          ▓▓            ██  ▓▓  ▓▓▓▓    ▓▓▓▓▓▓      ▓▓  ▓▓  ▓▓  ██        ▓▓██
██▓▓  ▓▓  ▓▓▓▓    ▓▓    ▓▓                  ▓▓▓▓    ▓▓▓▓  ▓▓  ▓▓  ▓▓▓▓▓▓      ██
██              ▓▓      ▓▓      ▓▓      ▓▓    ▓▓├┤        ▓▓▓▓▓▓  ▓▓          ██
██  ▓▓▓▓    ▓▓    ▓▓  ▓▓▓▓      ▓▓              ▓▓  ▓▓  ▓▓          ▓▓        ██
██            ▓▓▓▓      ▓▓      ▓▓    ▓▓                  ▓▓            ▓▓▓▓  ██
██▓▓  ▓▓          ██        ▓▓▓▓▓▓▓▓    ▓▓        ▓▓▓▓▓▓        ██  ▓▓        ██
██    ▓▓      ▓▓  ▓▓      ▓▓                ▓▓                    ▓▓▓▓    ▓▓  ██
██    ▓▓      ▓▓          ██▓▓    ▓▓      ▓▓▓▓    ▓▓    ▓▓                  ▓▓██
██  ▓▓▓▓  ▓▓  ▓▓    ▓▓▓▓                                ▓▓      ▓▓            ██
██        ▓▓▓▓▓▓                ▓▓  ▓▓▓▓    ▓▓    ▓▓    ▓▓      ▓▓            ██
██  ▓▓  ▓▓          ▓▓                        ▓▓▓▓      ▓▓      ▓▓    ▓▓      ██
████████████████████████████████████████████████████████████████████████████████

没有愚蠢的行距:http : //pastebin.com/raw.php?i=QhpxKcCT

所以玩家的举动在移动之后就结束了RRDDDRRRWW,因为在最后一次W攻击中,左边的野兽会向右边吃掉玩家。


原始大地图的另一个示例,但动作不同:

http://pastebin.com/raw.php?i=nBWjC3PZ

观看此动画:http: //youtu.be/0DIhEhjWd6s


最后一个带有原始地图和不同移动方式的示例(根据新的兽类移动规则):

http://pastebin.com/raw.php?i=NNmgzx7U

在YouTube上查看:http://youtu.be/jXPzL88TU2A


1
哈哈!:-) 很酷。只要您了解了,是否愿意玩一些游戏并在该地图上提供更多测试用例数据?
Rebmu博士2014年

我添加了具有原始地图和不同动作的新场景。但是您不能真正遵循这些步骤,因为我不想将所有75个步骤都粘贴到pastebin :)
bobbel 2014年

因此,我添加了一个视频,以动画形式查看结果!
bobbel 2014年

好的视频...虽然似乎表明野兽移动得太快了,以至于没有乐趣!我们是否应该更改规则,使它们每隔一圈而不是每圈移动一次?
Rebmu博士2014年

我不介意 对我来说大约还有十个字节!但我完全同意。很难像现在这样赢:)
bobbel 2014年

5

C- 1004 984 917

啊,C的美。按照其他答案的精神,我也尝试格式化我的:)

我想这里和那里仍然有一些改进,但是写和打高尔夫球真的很有趣。字符数包括所有必需的空格和换行符。

#define M(y,x,c) {t[y][x]=32;t[p][q]=c;y=p;x=q;}
   #define E {printf("aHHHH!\n%d",Z);exit(0);}
    #define A sqrt(pow(X-Q,2)+pow(Y-P,2))*30
           #define L (char)(m[s]>>8)
            #define G (char)(m[s])
             #define B(b) if(T==b)
              #define J M(Y,X,79)
               #define T t[P][Q]

r,c,X,Y,H,i,j,k,Z,p,q,P,Q,u,v,s,w,m[99],b[8]={
-1,255,65280,65281,1,511,257,256},t[999][999],
x[99],y[99];main(){char N[99];m[85]=b[2];m[68]
=256;m[76]=255; m[82]=1; scanf("%d %d",&c,&r);
for(;P<r;P++)                    for(Q=0;Q<c&&
scanf("%c",&T                    );T-10&&T-13?
Q++:Q){B(79){                    Y=P;X=Q;}B(72
){y[H]=P ;x[H                    ++]=Q;}}scanf
("%s",N);for(                    ;i<strlen(N);
i++){s=N[i];P                    =p=Y+L;Q=q=X+
G;B(32)J B('~')                  {while(P+=L,Q
+=G,T=='~');B                    (72){u=P+L;v=
Q+G;if(t[u][v]                   ==35||t[u][v]
=='~'){Z+=2;T=                   '~';J}}B(32){
T='~';J}}else                    B(72)E if(r=!r)
for(j=0;j<H;j                    ++){P=y[j];Q=
x[j];if(T-72)continue;v=A;s=0;for(k=0;k<8;k++)
{P=y[j]+(char)(b[k]>>8);Q=x[j]+(char)(b[k]);u=
A;B(32)if((c=v-u+99)>s){s=c;q=Q;p=P;}B(79)E}if
(s)M(y[j],x[j],72)}}printf("%d",Z);}//////////

我用所有示例案例以及其他一些案例进行了测试,它似乎工作正常。如果有人发现无法正确回答的情况,请通知我。

输入来自标准输入,输出至标准输出。没有检查输入是否错误。并且,如果玩家被吃掉了,或者在执行了所有动作后玩家还活着(即使还有H周围。

非高尔夫版本:

#define M(y,x,c) {t[y][x]=32;t[p][q]=c;y=p;x=q;}
#define E {printf("aHHHH!\n%d",Z);exit(0);}
#define A sqrt(pow(X-Q,2)+pow(Y-P,2))*30
#define L (char)(m[s]>>8)
#define G (char)(m[s])
#define B(b) if(T==b)
#define J M(Y,X,79)
#define T t[P][Q]

r, c, X, Y, H, i, j, k, Z, p, q, P, Q, u, v, s, w, m[99], b[8] = { -1, 255,
        65280, 65281, 1, 511, 257, 256 }, t[999][999], x[99], y[99];
main() {
    char N[99];
    m[85] = b[2];
    m[68] = 256;
    m[76] = 255;
    m[82] = 1;
    scanf("%d %d", &c, &r);
    for (; P < r; P++)
        for (Q = 0; Q < c && scanf("%c", &T);T-10&&T-13?Q++:Q) {
            B(79) {
                Y=P;
                X=Q;
            }
            B(72) {
                y[H]=P;
                x[H++]=Q;
            }
        }

    scanf("%s", N);
    for (; i < strlen(N); i++) {
        s = N[i];
        P = p = Y + L;
        Q = q = X + G;
        B(32)
            J
        B('~') {
            while (P += L, Q += G, T=='~');
            B(72) {
                u=P+L;
                v=Q+G;
                if(t[u][v]==35||t[u][v]=='~') {
                    Z+=2;
                    T='~';
                    J
                }
            }
            B(32) {
                T='~';
                J
            }
        } else B(72)E
        if (r = !r)
            for (j = 0; j < H; j++) {
                P = y[j];
                Q = x[j];
                if (T-72)
                continue;

                v = A;
                s = 0;

                for (k = 0; k < 8; k++) {
                    P = y[j] + (char) (b[k] >> 8);
                    Q = x[j] + (char) (b[k]);
                    u = A;
                    B(32)
                        if ((c = v - u + 99) > s) {
                            s = c;
                            q = Q;
                            p = P;
                        }

                    B(79)
                        E
                }
                if (s)
                    M(y[j], x[j], 72)
            }
    }
    printf("%d", Z);
}

不错!尽管在大地图上@bobbel的输入 RRRUWWWRRRURWWWWRDRRWWRDWWWWD是6,而他是8。他制作了一个视频,您也许可以打印每个步骤并查找任何异常……
Rebmu博士14年

(当然,当我看到野兽移动每转是多么不可玩时,我当然改变了规则以使野兽每转一圈……!)
Rebmu博士2014年

老实说:我不确定我的解决方案是否也能100%正确地工作。但对我来说
却像

@ Dr.Rebmu我意识到您在我发布我的同时编辑了问题。因此,我只是做了一个看起来很有效的快速修改。我将在本周末重新检查并进行更新。我还将发布一个“ nice”版本,以便其他人也可以更容易发现任何错误:)
Allbeert 2014年

FWIW我今天在Rebol解决了这个问题,并且也得到了@bobbel的8答案。
Rebmu博士2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.