Đừng. Cũng. Nháy mắt


50

nhập mô tả hình ảnh ở đây

Cuộc sống của bạn có thể phụ thuộc vào điều này. Đừng chớp mắt. Đừng chớp mắt. Nháy mắt và bạn đã chết. Họ rất nhanh. Nhanh hơn bạn có thể tin. Đừng quay lưng lại, đừng nhìn đi chỗ khác và đừng chớp mắt! Chúc may mắn.

Thiên thần khóc lóc là một chủng tộc ngoài hành tinh không thể di chuyển trong khi được quan sát bởi một sinh vật khác (thậm chí là một Thiên thần khác). Họ nuôi bằng cách gửi nạn nhân của họ trở lại đúng lúc. Bạn ( Bác sĩ ) bị mắc kẹt trong một căn phòng với một số người, và bạn cần đến TARDIS của mình.


Bài tập, nhiệm vụ

Viết một chương trình, với sự thể hiện ASCII của một căn phòng hình chữ nhật, đưa ra một đường dẫn sẽ đưa bạn đến nơi an toàn. Nếu bất kỳ Thiên thần nào có thể tấn công - bất cứ lúc nào trong tiến trình của bạn - thì con đường đó không an toàn. Một Thiên thần có thể tấn công nếu nó có thể nhìn thấy bạn trong khi không bị bạn hoặc Thiên thần khác nhìn thấy.

Đầu vào

Đầu vào là hai phần. Đầu tiên, hướng bạn đang đối mặt (NSEW). Sau đó, trên các dòng thành công, một đại diện của căn phòng, hiển thị các vị trí bắt đầu / kết thúc và vị trí / mặt của tất cả các Thiên thần.

Mẫu dưới đây cho thấy có một thiên thần quay mặt về hướng tây và bạn bắt đầu hướng về phía nam.

S
..........
....D.....
..........
..........
..........
..........
..........
..........
.........W
..........
...T......
  • . - Không gian trống
  • D - Bác sĩ (vị trí bắt đầu)
  • T - TARDIS (vị trí cuối)
  • N,S,E,W - Một thiên thần, hướng về hướng xác định (bắc, nam, đông, tây)

Đường ngắm

Bạn có thể thấy bất kỳ không gian nào nghiêng 45 độ theo hướng bạn đang đối mặt. Đường ngắm bị cản trở nếu có một thực thể khác dọc theo đường chéo trực tiếp ngang, dọc hoặc 45 độ. Bất kỳ đường chéo khác không cản trở tầm nhìn. Tầm nhìn của thiên thần hoạt động theo cùng một cách. Ví dụ: trong phần sau đây, -thể hiện trường quan sát của bạn, giả sử bạn đang hướng về phía nam.

........
...D....
..---...
.-----..
-------.
---N----
---.--N-
---.----

Đầu ra

Đầu ra là một chuỗi đại diện cho đường dẫn bạn sẽ đi để thoát. Nếu có nhiều đường dẫn an toàn, chọn bất kỳ đường dẫn nào. Nếu không có đường dẫn là an toàn, đầu ra 0. Nếu bản đồ không đúng định dạng, hãy làm bất cứ điều gì bạn thích, bao gồm cả việc rơi ra ngoài. Xem xét nó không đúng định dạng nếu căn phòng không có hình chữ nhật, không có lối ra, v.v ... Nếu không có Thiên thần, nó không bị dị hình, đơn giản là dễ dàng.

Đối với mỗi bước, bạn có thể thực hiện một trong hai điều: di chuyển theo hướng NSEW hoặc chuyển sang hướng NSEW (không thay đổi vị trí). Để di chuyển, chỉ cần xuất chữ cái cho hướng đó. Để quay mặt về hướng, đầu ra Ftheo sau là chữ cái thích hợp. Ví dụ: đầu ra sau:

SSFESSSSSSSW

là một đường dẫn an toàn cho mẫu được đưa ra trong phần đầu vào. Bạn di chuyển về phía nam hai lần, quay mặt về hướng đông để giữ thiên thần trong tầm mắt, sau đó di chuyển về phía nam bảy lần nữa và phía tây một lần để vào TARDIS.

Các trường hợp thử nghiệm

1) Bạn có thể đi vòng quanh Thiên thần hướng đông để đến TARDIS. Trừ khi bạn bước trực tiếp giữa chúng, chúng sẽ khóa nhau tại chỗ, vì vậy không có vấn đề gì bạn phải đối mặt ở bất kỳ điểm nào.

W
...D....
........
........
........
.E.....W
........
........
...T....

2) Bạn thua. Không có cách nào để vượt qua chúng. Họ có thể nhìn thấy nhau cho đến khi bạn bước giữa họ. Tại thời điểm đó, bạn không thể đối mặt với cả hai và bạn đã hoàn thành. Cũng có thể chỉ cần nhắm mắt lại và vượt qua nó.

S
...D....
........
........
........
E......W
........
........
...T....

Chiến thắng

Luật golf tiêu chuẩn và sơ hở được áp dụng, ít nhất byte thắng. Tôi sẽ cố gắng sớm nhận được một số trường hợp thử nghiệm, nhưng hãy thoải mái đề xuất vấn đề của riêng bạn trong lúc này.

Hình ảnh và trích dẫn từ Doctor Who.


chúng ta có thể sử dụng một thư viện để tìm đường đi qua biểu đồ không?
Sparr

@Sparr Có, nhưng bất cứ điều gì cần thiết để tải / bao gồm thư viện nên được thêm vào số byte.
Geobits

2
Rõ ràng là sử dụng một thao tác xoáy!
TheDoctor

4
@TheDoctor Jack đã mang theo anh ta, và bạn có thể thấy anh ta không ở trên bất kỳ bản đồ nào ( J).
Geobits

1
@Timmy Bất kỳ định nghĩa tiêu chuẩn có thể được sử dụng.
Geobits

Câu trả lời:


6

Con trăn - 559 565 644 633

M=input()
I=1j
Q={"S":I,"N":-I,"E":1,"W":-1}
A=[]
e=enumerate
for y,l in e(M[2:].split()):
 for x,c in e(l):
    P=x+y*1j
    if c=="D":D=(P,Q[M[0]])
    elif c=="T":T=P
    elif c!=".":A+=[(P,Q[c])]
def s(D,h,r=[]):
 def L(X,p,d):
    S=[p+d*(i+j*I)for i in range(x+y)for j in range(-i+1,i)if j]
    for f in[1,1+I,1-I]:
     i=0
     while i<x+y>1>(S[-1]in[a[0]for a in[D]+A]+[T])*i:i+=1;S+=[p+i*f*d]
    return X[0]in S
 if y>=D[0].imag>=(D[0]in[a[0]for a in A])<all(any(L(a,*b)for b in[D]+A)for a in A if L(D,*a))>(D in r)<=D[0].real<=x:
    r+=[D]
    if D[0]==T:print h;exit()
    for n in"SWEN":s((D[0]+Q[n],D[1]),h+n,r);s((D[0],Q[n]),h+"F"+n,r)
s(D,"")
print"0"

Đầu vào phải được cung cấp như thế này:

"W\n...D....\n........\n........\n........\nE......W\n........\n........\n...T....\n"

Về cơ bản, cách tiếp cận này được áp dụng để tìm kiếm tất cả các trạng thái (vị trí và hướng) mà Bác sĩ có thể tiếp cận một cách an toàn, lưu trữ cách anh ta đến đó và in đường trong trường hợp thành công. Vị trí và hướng được thực hiện với số phức.

Tôi có thể có thể an toàn một số ký tự bằng cách sử dụng số học phức tạp của Sage, nhưng nó sẽ chạy rất lâu.

Đầu tiên tôi nghĩ rằng tôi có thể cứu sáu nhân vật bằng cách khiến Bác sĩ chuyển sang một hướng cụ thể sau khi đến Tardis, nhưng tôi nhận ra rằng điều này có thể dẫn đến các giải pháp sai. Ngoài ra tôi lần đầu tiên đọc sai các quy tắc.

Đây là một phiên bản hầu như không có ý thức:

Map = input()

I = 1j
string_to_dir = {"S":I,"N":-I,"E":1,"W":-1}

Angels = []
Pos = 0
direction = string_to_dir[Map[0]]
for y,line in enumerate(Map[2:].split()):
    for x,char in enumerate(line):
        Pos = x+y*1j
        if char == "D":
            Doctor = (Pos, direction)
        elif char == "T":
            Tardis = (Pos, direction)
        elif char != ".":
            Angels += [(Pos,string_to_dir[char])]

reachables = []

def display(LoS, Doctor):
    string = ""
    for y,line in enumerate(Map[2:].split()):
        for x,char in enumerate(line):
            if x+y*1j == Doctor[0]:
                string += "D"
            elif x+y*1j in LoS:
                if char in ".D":
                    string += "*"
                else:
                    string += "X"
            elif char != "D":
                string += char
            else:
                string += "."

        string += "\n"
    print string

def LoS(angel,Doctor):
    p,d = angel
    Sight = []
    for i in range(x+y):
        for j in set(range(-i+1,i))-{0}:
            Sight += [p+d*i+d*j*I]
    for line in [d, (1+I)*d, (1-I)*d]:
        for i in range(1,x+y):
            Pos = p + i*line
            Sight += [Pos]
            if Pos in [angel[0] for angel in Angels+[Doctor, Tardis]]:
                break
    return Sight

def search(Doctor, history):
    global reachables

    Sight = sum([LoS(angel, Doctor) for angel in [Doctor]+Angels],[])

    if (
                all(angel[0] in Sight for angel in Angels if Doctor[0] in LoS(angel, Doctor))
            and not (Doctor in reachables)
            and (0<=Doctor[0].imag<=y)
            and (0<=Doctor[0].real<=x)
            and (Doctor[0] not in [angel[0] for angel in Angels])
        ):

        reachables += [Doctor]

        if Doctor[0] == Tardis[0]:
            print history
            exit()
        for new_direction in "SWEN":
            search((Doctor[0]+string_to_dir[new_direction], Doctor[1]), history + new_direction)
            search((Doctor[0], string_to_dir[new_direction]), history + "F" + new_direction)

search(Doctor, "")
print "0"

Các trường hợp thử nghiệm

Trường hợp thử nghiệm 1:

SSSFSWWWSSSSFWEFSEFWE

Trường hợp thử nghiệm 2:

0

Trường hợp thử nghiệm của VisualMelon:

SSFWSSSSSFSWWSSWWWFWEEEEFSEFWEFSE

1
Tôi đã không kiểm tra mã của bạn, nhưng có vẻ như bạn đã dán đầu ra cho trường hợp thử nghiệm 1 lần! Ngoài ra, tôi rất muốn xem chương trình của bạn tạo ra gì nếu bạn cung cấp cho nó trường hợp thử nghiệm được đề xuất của tôi.
VisualMelon

@VisualMelon: Cảm ơn bạn đã phát hiện ra và tôi đã tích hợp trường hợp thử nghiệm.
Wrzlprmft

10

C # 1771 2034 1962 1887 1347byte

Viết lại kiểm tra LOS chặn trong 1 vòng lặp, làm cho nó gọn gàng hơn và ngắn hơn khoảng 450byte

using C=System.Console;using T=System.Math;struct P{int x,y,d;static void Main(){int v=C.ReadLine()[0],w,h,i,o=0,x=0,y=0,O,E,F,e=46;var R=C.In.ReadToEnd().Replace("\r","");var M=new int[w=R.IndexOf("\n"),h=(R.Length+1)/(w+1)];for(;o<h;o++)for(i=0;i<w;i++)if((M[i,o]=R[o+o*w+i])==68)M[x=i,y=o]=e;System.Func<int,int,int,bool>S=null;S=(X,Y,D)=>{var Z="SSSE_WNNNE_W___E_W";int I=0,H=0,L=0,J=Y,K=M[X,Y],B;M[X,Y]=D>0?D:K;for(H=0;H<9;H++)for(I=X,J=Y;H!=4&(I+=H%3-1)<w&I>=0&(J+=H/3-1)<h&&J>=0;){if(((B=M[I,J])==Z[H]|B==Z[H+9])&(D<1||!S(I,J,0)))goto W;if(B!=e)break;}for(B=I=-1;++I<w;B=1)for(J=0;J<h;J++)if(I!=X&J!=Y&(((B=M[I,J])==87&I>X&(H=T.Abs(J-Y))<I-X)|(B==69&I<X&H<X-I)|(B==78&J>Y&(L=T.Abs(I-X))<J-Y)|(B==83&J<Y&L<Y-J))&(D<1||!S(I,J,0)))goto W;W:M[X,Y]=K;return B>1;};P a,p=new P{x=x,y=y,d=v};var A=new System.Collections.Generic.List<P>();System.Action q=()=>{if(((E=M[p.x,p.y])==e|E==84)&!A.Contains(p)&!S(p.x,p.y,p.d))A.Add(p);};q();for(o=0;(O=A.Count)!=o;o=O)for(i=O;i-->o;){p=A[i];if((E=M[p.x,p.y])==84)for(R="";;p=a){i=0;n:a=A[i++];O=T.Abs(p.y-a.y)+T.Abs(a.x-p.x);if(O==1&p.d==a.d)R=(a.y-p.y==1?"N":p.y-a.y==1?"S":a.x-p.x==1?"W":"E")+R;else if(O<1)R="F"+(char)p.d+R;else goto n;if(i<2)goto Z;}if(E==e){if(p.x-->0)q();p.x+=2;if(p.x<w)q();p.x--;if(p.y-->0)q();p.y+=2;if(p.y<h)q();p.y--;for(F=0;F<4;q())p.d="NESW"[F++];}}R="0";Z:C.WriteLine(R);}}

Đây là một chương trình hoàn chỉnh, dự kiến ​​đầu vào sẽ kết thúc bằng EOF và được chuyển đến STDIN. Nó (hy vọng) in đường dẫn ngắn nhất tới TARDIS hoặc "0" nếu không có đường dẫn nào tồn tại. Nó sử dụng một tìm kiếm đầu tiên của Breadth để theo tất cả các tuyến đường có thể, sau đó nó quay lại từ TARDIS đến The Doctor để lắp ráp đầu ra.

Mã định dạng:

using C=System.Console;
using T=System.Math;

struct P
{
    int x,y,d;

    static void Main()
    {
        int v=C.ReadLine()[0],w,h,i,o=0,x=0,y=0,O,E,F,e=46;
        var R=C.In.ReadToEnd().Replace("\r","");
        var M=new int[w=R.IndexOf("\n"),h=(R.Length+1)/(w+1)];

        for(;o<h;o++)
            for(i=0;i<w;i++)
                if((M[i,o]=R[o+o*w+i])==68)
                    M[x=i,y=o]=e;

        System.Func<int,int,int,bool>S=null;
        S=(X,Y,D)=>
        {
            var Z="SSSE_WNNNE_W___E_W";

            int I=0,H=0,L=0,J=Y,K=M[X,Y],B;
            M[X,Y]=D>0?D:K;

            for(H=0;H<9;H++)
                for(I=X,J=Y;H!=4&(I+=H%3-1)<w&I>=0&(J+=H/3-1)<h&&J>=0;)
                {
                    if(((B=M[I,J])==Z[H]|B==Z[H+9])&(D<1||!S(I,J,0)))
                        goto W;
                    if(B!=e)
                        break;
                }

            for(B=I=-1;++I<w;B=1)
                for(J=0;J<h;J++)
                    if(I!=X&J!=Y&(((B=M[I,J])==87&I>X&(H=T.Abs(J-Y))<I-X)|(B==69&I<X&H<X-I)|(B==78&J>Y&(L=T.Abs(I-X))<J-Y)|(B==83&J<Y&L<Y-J))&(D<1||!S(I,J,0)))
                        goto W;
        W:
            M[X,Y]=K;
            return B>1;
        };

        P a,p=new P{x=x,y=y,d=v};
        var A=new System.Collections.Generic.List<P>();
        System.Action q=()=>{if(((E=M[p.x,p.y])==e|E==84)&!A.Contains(p)&!S(p.x,p.y,p.d))A.Add(p);};
        q();

        for(o=0;(O=A.Count)!=o;o=O)
            for(i=O;i-->o;)
            {
                p=A[i];
                if((E=M[p.x,p.y])==84)
                    for(R="";;p=a)
                    {
                        i=0;
                    n:
                        a=A[i++];

                        O=T.Abs(p.y-a.y)+T.Abs(a.x-p.x);
                        if(O==1&p.d==a.d)
                            R=(a.y-p.y==1?"N":p.y-a.y==1?"S":a.x-p.x==1?"W":"E")+R;
                        else if(O<1)
                            R="F"+(char)p.d+R;
                        else goto n;

                        if(i<2)
                            goto Z;
                    }
                if(E==e)
                {
                    if(p.x-->0)q();
                    p.x+=2;if(p.x<w)q();p.x--;
                    if(p.y-->0)q();
                    p.y+=2;if(p.y<h)q();p.y--;

                    for(F=0;F<4;q())
                        p.d="NESW"[F++];
                }
            }
        R="0";
    Z:
        C.WriteLine(R);
    }
}

Đầu ra ví dụ đầu vào

SFESWSSSSSSS

Đầu ra cho trường hợp thử nghiệm 1)

WSWSWSSSESESE

Đầu ra cho trường hợp thử nghiệm 2)

0

Tôi trình bày, theo yêu cầu, một trường hợp thử nghiệm mới:

S
..E..DS....
...........
...........
...........
...........
...........
...........
...........
....SSSSS.W
.......T...

Đầu ra chương trình của tôi

SESESESESFNSSSSWW

Trường hợp thử nghiệm 1 của WozzeC:

EEEEFWSSSFNWWN

Trường hợp thử nghiệm 2 của WozzeC:

FSEEEESFWSSSSWFNWWWNFENNEES

Tôi đã hoàn toàn bỏ lỡ khả năng sử dụng X = System.Console. Cảm ơn bạn vì điều đó :)
WozzeC

@WozzeC bạn có thể muốn xem Mẹo chơi golf trong C #
VisualMelon

Tôi tin rằng bác sĩ bị tấn công khi khởi động với trường hợp thử nghiệm của bạn: S
WozzeC

@WozzeC Thiên thần phương Tây ở Đông Nam Bộ có thể nhìn thấy thiên thần phương Đông ở Tây Bắc, vì vậy Bác sĩ có thể trốn thoát, nhưng vào thời điểm đó, có vẻ như giải pháp của tôi không để ý nếu bác sĩ bị tấn công khi khởi động. Tại sao mã này rất khó kiểm tra!
VisualMelon

1
Xin lỗi, đừng bận tâm. Tôi đã bỏ lỡ chi tiết nhỏ mà họ không thể di chuyển nếu một thiên thần khác đang xem.
WozzeC

2

C # 1454, 1396, 1373, 1303 1279

class P{static int x,d,y=x=d=55,o=170,X=0,Y=0,u,k=3;static string[,]t=new string[o,o];static int[,]m=new int[o,o];static string e=" NS ETD W      .",q="0";static void Main(string[]s){m[0,1]=m[1,8]=-1;m[0,2]=m[1,4]=1;u=e.IndexOf(s[0][0]);for(;k<s[0].Length;k++){var c=s[0][k];if(c=='D'){X=x;Y=y;}if(c=='\\'){y++;x=d;k++;}else m[y,x++]=e.IndexOf(c);}k=A(X,Y,1);if((k&u)!=0){W(X,Y,k,"");}System.Console.Write(q);}static void W(int x,int y,int h,string s){t[y,x]=s;for(int i=1;i<9;i*=2){int l=y+m[0,i],g=x+m[1,i];if(m[l,g]==5)q=t[l,g]=s+e[i];else if(m[l,g]==15){m[l,g]=6;m[y,x]=15;int n=A(g,l,1),U;for(int j=1;j<9;j*=2){var z=t[l,g]??s;if((n&h&j)!=0&z.Length>=s.Length){U=u;u=j;W(g,l,n,s+((u!=j)?"F"+e[j]:"")+e[i]);u=U;}}m[y,x]=6;m[l,g]=0;}}}static int A(int x,int y,int L){int r=15,a,b,c,f=0,g,h,R,B;for(a=1;a<d-5;a++){g=1;for(b=y-a;b<=y+a;b++)for(c=x-a;c<=x+a;c++){B=m[b,c];R=0;bool W=(c+a-x)%a==0,V=(b+a-y)%a==0,z=W&V;if(B>0&B<9&B!=6&B!=5&g!=16&!((W|V)&(f&g)!=0)){h=R;if(b==y-a){R=1;if(c==x-a){h=4;R=9;}else if(c==x+a){h=8;R=5;}B&=h&2;}else if(b==y+a){R=2;if(c==x-a){h=4;R=10;}else if(c==x+a){h=8;R=6;}B&=h&1;}else if(c==x-a){B&=4;R=8;}else if(c==x+a){B&=8;R=4;}else B=0;if(B!=0){if(L==1&&A(c,b,0)==15)r&=R;if(L==0)return R;}}if(z){if(B<9&B>0&!(c==x&y==b))f|=g;g*=2;}}}return r;}}

Đúng. Vì vậy, tôi quyết định cho nó đi, và cậu bé đã làm nó mất một lúc. Nó được xây dựng chủ yếu bằng cách sử dụng các toán tử logic.

  • Bắc = 1 = N
  • Nam = 2 = S
  • Đông = 4 = E
  • Tây = 8 = W
  • Bác sĩ = 6 = D
  • TARDIS = 5 = T
  • 15 =. <-Tất cả không gian trống

Để tránh phải kiểm tra Null, v.v., tôi quyết định sử dụng trường [MAX_SIZE * 3] * [MAX_SIZE] * 3 và đặt bảng trò chơi gần trung tâm.

Kiểm tra vòng lặp được thực hiện bên trong và bên ngoài đến 50 (MAX_SIZE). Vì vậy, một cái gì đó như thế này:

22222
21112
21D12
21112
22222

Khi tìm thấy EWS hoặc N, tôi cũng kiểm tra tương tự. Nếu bất cứ điều gì được tìm thấy khi nhìn vào các Thiên thần (Không phải Bác sĩ), họ sẽ trả lại 15 dưới dạng miễn phí. Nếu họ không được nhìn họ sẽ trở về theo cách mà Bác sĩ phải đối mặt để được an toàn. tức là N sẽ trả lại 2 cho nam. Trừ khi đó là NW hoặc NE, trong trường hợp đó, nó sẽ trả về 6 (2 + 4) và 10 (2 + 8) tương ứng.

Nếu hai thiên thần đang theo dõi Bác sĩ, các giá trị trả về từ các giá trị này sẽ là "ANDed", do đó, trong ví dụ thử nghiệm, 2 crunchpose 4 AND 8 sẽ biến thành 0. Có nghĩa là vị trí đó là xấu và nên tránh.

Mã mở rộng:

class P
{
    static int x,d,y=x=d=55,o=170,X=0,Y=0,u,k=3;
    static string[,] t = new string[o, o];
    static int[,] m = new int[o, o];
    static string e = " NS ETD W      .", q="0";
    static void Main(string[]s)
    {   
        m[0, 1]=m[1, 8]=-1;
        m[0, 2]=m[1, 4]=1;
        u=e.IndexOf(s[0][0]);
        for (;k<s[0].Length;k++)
        {
            var c = s[0][k];
            if (c == 'D') { X = x; Y = y; }
            if (c == '\\') { y++; x = d; k++; }
            else m[y, x++] = e.IndexOf(c);
        }
        k=A(X,Y,1);
        if ((k&u)!=0)
        {
            W(X, Y, k,"");
        }
        System.Console.Write(q);
    }
    static void W(int x,int y,int h,string s){
        t[y, x] = s;
        for (int i = 1; i < 9; i*=2)
        {
            int l = y+m[0, i], g = x+m[1, i];
            if (m[l, g] == 5)
                q = t[l, g] = s + e[i];
            else if (m[l, g] == 15)
            {
                m[l, g] = 6;
                m[y, x] = 15;
                int n = A(g, l,1),U;
                for (int j = 1; j < 9; j *= 2)
                {
                    var z = t[l, g]??s;
                    if ((n & h & j) != 0 & z.Length>=s.Length)
                    {
                        U = u;
                        u = j;
                        W(g, l, n,s+((u != j) ? "F" + e[j] : "") + e[i]);
                        u = U;
                    }
                }
                m[y, x] = 6;
                m[l, g] = 0;
            }
        }
    }
    static int A(int x, int y,int L)
    {
        int r = 15,a,b,c,f=0,g,h,R,B;
        for (a = 1; a < d - 5; a++)
        {
            g = 1;
            for (b = y - a; b <= y + a; b++)
                for (c = x - a; c <= x + a; c++)
                {
                    B=m[b, c];
                    R=0;
                    bool W=(c+a-x)%a==0,V=(b+a-y)%a==0,z=W&V; 
                    if (B>0&B<9&B!=6&B!=5&g!=16&!((W|V)&(f&g)!=0))
                    {
                        h=R;
                        if (b==y-a)
                        {
                            R=1;
                            if(c==x-a){h=4;R=9;}
                            else if(c==x+a){h=8;R=5;}
                            B&=h&2;
                        }
                        else if (b==y+a)
                        {
                            R=2;
                            if(c==x-a){h=4;R=10;}
                            else if (c==x+a){h=8;R=6;}
                            B&=h&1;
                        }
                        else if(c==x-a){B&=4;R=8;}
                        else if(c==x+a){B&=8;R=4;}
                        else B=0;
                        if (B!=0)
                        {
                            if(L==1&&A(c,b,0)==15)r&=R;
                            if (L==0)return R;
                        }
                    }
                    if (z)
                    {
                        if (B < 9 & B > 0 & !(c==x&y==b))
                           f |= g;
                        g *= 2;
                    }
                }
        }
        return r;
    }
}

Kết quả kiểm tra

1 Ví dụ: FNSSSWNNNWSSSWSSSSENNESES

2 Ví dụ: Không lối thoát

Ví dụ về VisualMelon: FNSSSSSSSWNNNNNNNWSSSSSSSSSEEEE

Trường hợp thử nghiệm của tôi1: FSSENEEEFWSSFNSWWN

Trường hợp thử nghiệm của tôi2: FSEEEESFWSSSSFNWWWWNFENNFSEES

Có thể thấy Bác sĩ của tôi yêu thích sải bước như một con thụt để cho các Thiên thần thấy nó vui như thế nào khi di chuyển. Tôi có thể làm cho phần mềm tìm thấy con đường ngắn nhất, nhưng mất nhiều thời gian hơn và cần nhiều mã hơn.

Các trường hợp thử nghiệm cho các bạn

S
D....
..NE.
.WTS.
.S...

Một số khác:

E
D....
WNNN.
...E.
.WTE.
.SSE.
.....

1
Mã golf bị thiếu một khoảng trống tại một nơi dừng biên dịch, nhưng với sửa lỗi đó, tôi làm cho bạn chỉ đếm được 1395 byte! Thật tuyệt khi làm cho nó quá thấp và đây là trò chơi hoàn toàn công bằng để bạn sử dụng using S=System.Console;hoặc bạn có thể chỉ cần loại bỏ hoàn toàn S trong mã của mình và lưu 6 byte bằng cách using System. Bây giờ tôi sẽ phải thử và cắt giảm cách tiếp cận ngây thơ của mình xuống thêm một chút nữa ...;)
VisualMelon

1
Oh một không gian bị bỏ lỡ, tôi nên chăm sóc điều đó. Và dĩ nhiên, S = ... Có một chút biến mất khi tôi biết điều đó. :)
WozzeC

Làm việc tốt khi đếm ngược byte;)
VisualMelon

Tôi tìm thấy một số mã không bao giờ được sử dụng. Cộng với một số công cụ không cần thiết bổ sung.
WozzeC
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.