Chơi gôn cho ngày Domino


14

Đưa ra một thiết lập của domino, nhiệm vụ của bạn là tìm ra những chiếc domino nào rơi và cái nào không.

Đầu vào

Lấy một đại diện ASCII hình chữ nhật của một thiết lập domino. Các ký tự sau được sử dụng cho lưới ASCII:

  • (dấu cách): ô trống
  • |, -, /, \: Domino

Đô-mi-nô có thể rơi theo 8 hướng, được biểu thị bằng các chữ cái sau (tương tự như định hướng WASD):

Q W E
A   D
Z X C

Một hoặc nhiều domino sẽ được thay thế bằng một trong những chữ cái này để chỉ ra rằng domino bị đẩy qua lúc bắt đầu. Đây là một ví dụ:

D||||/  
  -   / 
  -    -
  -    -
  /|||||

Tôi không muốn thử thách này biến thành một bài tập trong phân tích cú pháp đầu vào để bất kỳ hình thức nhập liệu nào sau đây đều được cho phép:

  • Một chuỗi có lưới (tùy chọn đi trước bởi kích thước của nó nếu điều đó có ích)
  • Một mảng / danh sách / tuple với một chuỗi cho mỗi dòng (tùy chọn cùng với số nguyên chiều rộng và chiều cao)
  • Một mảng (danh sách) lồng nhau / tuple với một chuỗi / ký tự cho mỗi ô lưới (tùy chọn cùng với các biến chiều rộng và chiều cao)

Bạn có thể đọc từ STDIN hoặc lấy tham số hàm hoặc thậm chí mong đợi đầu vào được lưu trữ trong một biến.

Đầu ra

Viết thư cho STDOUT hoặc trả về (hoặc lưu trong một biến) lưới kết quả ở bất kỳ định dạng đầu vào hợp lệ nào, cho biết domino nào đã rơi và không có. Đó là, thay thế mỗi domino rơi xuống #và để lại mỗi domino đứng như trong đầu vào.

Quy tắc

Tất nhiên, domino tuyên truyền sự sụp đổ của họ thông qua các thiết lập. Vì có thể có các điều kiện chủng tộc, chúng tôi giả định rằng có các bước thời gian cố định và việc truyền xuống một ô lưới trên mỗi bước thời gian.

Dominoes thường rơi theo cách bạn mong muốn bằng trực giác, nhưng một đặc điểm kỹ thuật khắt khe về ý thức thông thường hóa ra lại khá dài. Xin lỗi vì điều đó, tôi hy vọng các ví dụ giúp đỡ. Đây là một ý chính với tất cả các kết hợp hai gạch độc đáo (lên đến xoay và phản chiếu). Đọc về các quy tắc nghiêm ngặt.

Mỗi domino chỉ có thể rơi theo hai hướng:

           W       Q          E
A | D      -        /        \
           X         C      Z

Bất cứ khi nào một domino rơi, nó sẽ ảnh hưởng đến tế bào theo hướng rơi. Nếu tế bào đó chứa một domino có thể rơi theo cùng một hướng hoặc theo hướng khác nhau 45 độ, thì domino đó sẽ làm như vậy trong bước tiếp theo.

Ví dụ:

D|    ->    DD      (falls in same direction)

D/    ->    DC      (falls at 45 degrees)

C     ->    C       (falls at 45 degrees)
 -           X

Bất cứ khi nào một domino ( /hoặc \) định hướng theo đường chéo rơi xuống, nó cũng ảnh hưởng đến hai tế bào chạm vào cả tế bào và tế bào theo hướng rơi của nó. Nếu các ô này chứa một domino có thể rơi cùng hướng với domino ban đầu hoặc theo hướng thẳng hàng trục với nó, thì domino sẽ làm như vậy trong bước tiếp theo.

Ví dụ:

C/     ->   CC      (the cell in the direction of the fall is the one below
                     the /, so it falls in the same direction)

C|     ->   CD      (falls in the axis-aligned direction away from the C)

C-     ->   C-       (the direction away from the Q is W, 
  or                  but neither - nor \ can fall to W)
C\     ->   C\     

Ngoại lệ : nếu một domino được đẩy theo cả hai hướng hợp lệ cùng một lúc (nghĩa là nếu bất kỳ quy tắc nào ở trên có xung đột), thì nó sẽ không rơi.

Ví dụ:

D|A   ->    D|A     (central domino in pushed in both directions)

  Z           Z     (although it's pushed in one direction by two dominoes
D\A   ->    D\A      and in the other by only one, it doesn't fall)


 X           X      (the domino is being pushed from two opposing sides
D-A   ->    DXA      D and A, but neither is valid for that domino. Hence,
                     there is no conflict and the X can push the domino over)

 Z           Z      (pushed in the same direction by two dominoes, so falls)
\A    ->    ZA

   Z           Z           Z    (once the conflict arises, the affected
  \   ->      Z   ->      Z      domino is locked in its position and can't
D|A         D|A         D|A      be pushed over by future dominoes)

Ví dụ

8 5
D||||/            ######  
  -   /             -   # 
  -    -    -->     -    #
  -    -            -    #
  /|||||            /|||||

===============================================

17 9
E|/|||/                    #######          
  -   -                      #   #          
  -   -                      #   #          
  -   -                      #   #          
  /|||/|||||||||/    -->     ###############
       /        -                 #        #
        /       -                  #       -
         /      -                   #      #
          /|||||\                    #######

===============================================

19 8
       \|/                        ###           
       - -                        # #           
D||||/|\ /|||/             ######## #####       
      /      -                   #      #       
       -    \-       -->          -    \#       
      \-   \ -                   #-   \ #       
D||||\ /  \  /             ###### /  \  #       
        |\    |||||                |\    #####  

==============================================

11 11
-\\\/|\|\-|         -\##/|###-|
-|\\||\-|\-         -|#####-|\-
|\//\//|-/-         |#//\//|#/-
\|//|-|\-\|         #####-|##\|
---||/-\//|         #-######//|
///|||\----   -->   #/#####----
-|/---|-|-\         #|##--|-|-\
--|--\/|///         ####-\/|///
/|//--|//-|         ####--|//-|
|/\-|||-/-\         |/\####-/-\
E||\-|\---/         ####-|\---/

Hãy cho tôi biết nếu bạn nghĩ rằng tôi đã phạm sai lầm (đặc biệt là với người cuối cùng).

Câu trả lời:


15

C # 1048 907 850byte

Bây giờ được đánh gôn rất nhiều, gần như chỉ là một mớ hỗn độn của các phép toán bit trên một mảng hai chiều của số nguyên. Có thể có thể được thực hiện ngắn hơn một chút bằng cách sử dụng mảng 1 chiều, nhưng tôi chưa sẵn sàng để thử và làm lại việc này vào thời điểm này. Đọc kích thước và chuỗi từ stdin, ví dụ:

11 11 -\\\/|\|\-|-|\\||\-|\-|\//\//|-/-\|//|-|\-\|---||/-\//|///|||\-----|/---|-|-\--|--\/|////|//--|//-||/\-|||-/-\E||\-|\---/

Chơi gôn

using L=System.Console;class R{static void Main(){int p=255,e,c,E=7,D,C,X,Z,A,m=-1,t=m,f=t,u,i=t;for(;t<0;)for(t=f,f=0;(C=L.Read())>47;)f=f*10+C-48;var T=new int[f,t];for(;++i<f;)for(c=0;c<t;T[i,c++]=(C>99?68:C>91?34:C>89?112:C>87?56:C>86?131:C>80?193:C>68?7:C>67?14:C>66?28:C>64?224:C>46?136:C>44?17:0)*(C>64&C<91?1:257))C=L.Read();for(;i+E>0;E=-E)for(i=c=m;++c<f;)for(C=m;++C<t;){if(E>0&(A=D=T[c,C])>0&D<p){T[c,C]=m; X=C+(i=(D&4)>0?1:(D&64)/-64);Z=c+(u=(D&16)>0?1:D%2*m);System.Action v=()=>{if(Z>m&Z<f&X>m&X<t&&(e=T[Z,X])>p&(e>>8&A)>0)T[Z,X]&=65280|A;};v();if((i&u)!=0){X=i==u?C:X;Z=i==u?Z:c;A=((D&128)/128+D*2)&D;v();X=C+i-X+C;Z=c+u-Z+c;A=(D%2*128+D/2)&D;v();}i=8;}if(E<0&D>p&((D=D&p)&(D-1))<1&D>0)T[c,C]=D<2?131:D>64?193:D/2*7;}for(D=m;++D<f;L.WriteLine())for(c=0;c<t;L.Write(C<0?'#':(C=C>>8)>99?'/':C>67?'|':C>33?'\\':C>9?'-':' '))C=T[D,c++];}}

Bởi vì tôi đã mất quá nhiều thời gian, tôi đã sửa đổi phiên bản không được chỉnh sửa để tạo ra một đoạn phim hoạt hình về các quân domino rơi xuống (với sự giúp đỡ từ câu hỏi SO này và các tài liệu này 1 2 ). Điều này chỉ thêm mã và nó ở trong một #if gifnesskhối hoặc được đánh dấu rõ ràng.

Để tạo gifs, bạn cung cấp một cặp đối số dòng lệnh mô tả thời gian khung, tệp đầu ra, v.v.

dominoGolf.exe console_delay (out_file_name (gif_frame_time (final_frame_time)))
dominoGolf.exe 0 outfile.gif 1 100

Đối số thứ ba là thời gian khung cho mỗi khung hình (1/100 giây). Đối số thứ tư là thời gian khung hình cho khung hình cuối cùng (1/100 giây). Đối số thứ hai là tên tệp đầu ra cho gif. Bạn có thể bỏ qua tên tệp, độ trễ và độ trễ cuối cùng nếu bạn chỉ muốn đầu ra của bàn điều khiển. Đối số đầu tiên là độ trễ giữa các khung được hiển thị đến thiết bị đầu cuối tính bằng mili giây. Bạn có thể bỏ qua tất cả các đối số nếu bạn không muốn một hình ảnh động nào cả và chỉ muốn xem kết quả. Nó đọc dữ liệu domino từ stdin giống như phiên bản golf. Mã này là khủng khiếp theo cách riêng của nó (tàn sát gif để nó lặp lại).

Mã tạo gif không được mã hóa:

#define gifness

using L=System.Console;

class R
{
    static void Main(string[] args) // don't need args
    {
        int p=255,P=0xFF00,m=15,M=240, // might be able to inline a couple of these
        w=1,e=2,d=4,c=8,x=16,z=32,a=64,q=128, // most of these are reusable
        W=131,E=7,D=14,C=28,X=56,Z=X*2,A=Z*2,Q=193, // most (all?) of these are reusable
        Y=w+x,U=a+d,N=c+q,B=z+e, // one of these atleast is pre-evalable

        // recognise this?
        t=-1,f=t,k,u,i=t,j,J,K,o,O,b;
        for(;t<0;)
            for(t=f,f=0;(k=L.Read())>47;)
                f=f*10+k-48;

        var T=new int[f,t]; // main arr
        // domino: dir, copy(for render)
        // motion: pickup

        // input
        for(;++i<f;) // values of i and j don't matter, just counters
        {
            for(j=0;j<t;) // increment done 3down
            {
                k=L.Read();
                T[i,j++]=(
                // fallen
                k=='W'?W:k=='E'?E:k=='D'?D:k=='C'?C:k=='X'?X:k=='Z'?Z:k=='A'?A:k=='Q'?Q:
                // dominos
                k==' '?0:k=='-'?Y:k=='/'?N:k=='|'?U:B // ASCII, order for >
                )*(k>64&k<91?1:257);
            }
        }

        #if gifness
        System.Drawing.Font font1 = null;
        System.Windows.Media.Imaging.GifBitmapEncoder genc = null;
        System.Drawing.Bitmap bmp = null;
        System.Drawing.Graphics g = null;
        if (args.Length > 1)
        {
            font1 = new System.Drawing.Font(System.Drawing.FontFamily.GenericMonospace, 12, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel);
            genc = new System.Windows.Media.Imaging.GifBitmapEncoder();
            bmp = new System.Drawing.Bitmap(t * 8, f * 14); // I have no clue what these should be in relation to em size
            g = System.Drawing.Graphics.FromImage(bmp);
        }
        #endif

        if (args.Length > 0) // not important
        {
            L.Clear();
        }

        // main
        for(;i>0;) // can do i=1-i and swap setting 1 for 0 to remove {}
        {

            if (args.Length > 0) // non-critical, renders the current state to the console/gif
            {
                var os="";
                for (o=0;o<f;o++) // values of i and j don't matter, just counters
                {
                    for (j=0;j<t;j++)
                    {
                        k=T[o,j];
                        os += k==0?' ':k<p?'#':(k=k>>8)==Y?'-':k==N?'/':k==U?'|':'\\'; // order for >
                    }
                    os+="\n";
                }
                L.SetCursorPosition(0, 0);
                L.Write(os);

                #if gifness
                if (args.Length > 1)
                {
                    g.Clear(System.Drawing.Color.White);
                    g.DrawString(os, font1, System.Drawing.Brushes.Black, 0, 0);
                    System.IO.MemoryStream bms = new System.IO.MemoryStream();
                    bmp.Save(bms, System.Drawing.Imaging.ImageFormat.Gif);
                    var bmpf = System.Windows.Media.Imaging.BitmapFrame.Create(bms);
                    genc.Frames.Add(bmpf);

                    // do I chose the frame duraton1??!?!?! (take from args[2] is present else args[0])
                }
                #endif

                System.Threading.Thread.Sleep(int.Parse(args[0]));
            }

            // back to important stuff
            i=0; // set me to 1 if we do anything (8 in golfed version due to E being 7)

            // move motions
            for (j=0;j<f;j++) // careful!!
            {
                for (k=0;k<t;k++) // careful!!
                {
                    O=o=T[j,k];
                    if (o>0&o<p) // we are motion
                    {
                        T[j,k]=-1; // do this so we can't skip it

                        K=k+(i=((o&d)>1?1:(o&a)>0?-1:0));
                        J=j+(u=((o&x)>1?1:(o&w)>0?-1:0));

                        System.Action v=()=>{
                            if(J>=0&J<f&K>=0&K<t&&(b=T[J,K])>p&&((b>>8)&O)>0)
                            {
                                T[J,K]&=(P|O);
                            }
                        };

                        v();
                        if (i!=0&u!=0)
                        {
                            K=i==u?k:K; // k+i == K
                            J=i==u?J:j; // j+u == J
                            O=(((o&q)>0?w:0)+o*2)&o;
                            v();

                            K=K==k?k+i:k;
                            J=J==j?j+u:j;
                            O=(((o&w)>0?q:0)+o/2)&o;
                            v();
                        }

                        i=1;
                    }
                }
            }

            // move dominos
            for (j=0;j<f;j++) // careful!!
            {
                for (k=0;k<t;k++) // careful!!
                {
                    o=T[j,k];
                    if (o>p) // we are domino
                    {
                        o=o&p;
                        if ((o&m)<1!=(o&M)<1)
                        { // we have motion
                            T[j,k]=o==w?W:o==q?Q:o+o/2+o*2;
                        }
                    }
                }
            }
        }

        if (args.Length > 0)
        {
            L.SetCursorPosition(0, 0);
        }

        // output
        for (o=0;o<f;o++)
        {
            for (j=0;j<t;j++)
            {
                k=T[o,j];
                L.Write(k<0?'#':(k=k>>8)==0?' ':k==Y?'-':k==N?'/':k==U?'|':'\\'); // order for >
            }
            L.WriteLine();
        }


        #if gifness
        if (args.Length > 1)
        {
            g.Dispose();
            bmp.Dispose();

            System.IO.MemoryStream ms = new System.IO.MemoryStream();

            genc.Save(ms);
            byte[] data = ms.GetBuffer();
            byte[] netscape = { 0x21, 0xFF, 0x0B, 0x4E, 0x45, 0x54, 0x53, 0x43, 0x41, 0x50, 0x45, 0x32, 0x2E, 0x30, 0x03, 0x01, 0x00, 0x00, 0x00 };

            if (args.Length > 2)
            {
                int last = -1;
                int duration = int.Parse(args[2]);

                // promise yourself now you will never use this in production code
                // I've not read enough of the GIF spec to know if this is a bad idea or not
                for (i = 0; i < ms.Length - 5; i++)
                {
                    if (data[i] == 0x21 && data[i+1] == 0xF9 && data[i+2] == 0x04 && data[i+3] == 01)
                    {
                        data[i+4] = (byte)(duration & p); // something endian (least significant first)
                        data[i+5] = (byte)((duration & P) >> 8);
                        last = i+4;
                    }
                }

                if (last != -1 && args.Length > 3)
                {
                    duration = int.Parse(args[3]);
                    data[last] = (byte)(duration & p);
                    data[last+1] = (byte)((duration & P) >> 8);
                }
            }

            using (System.IO.FileStream fs = new System.IO.FileStream(args[1], System.IO.FileMode.Create))
            {
                fs.Write(data, 0, 13);

                // behold
                fs.Write(netscape, 0, netscape.Length);

                fs.Write(data, 13, (int)ms.Length - 13); // lets hope these arn't in excess of 2GBs
            }
        }
        #endif
    }
}

Một gif ví dụ cho đầu vào ví dụ thứ 3 (và được hiển thị ở trên)

Ví dụ thứ 3

Ví dụ bố trí ngẫu nhiên 100x25 domino

Bố cục domino 100x25

"Domino" trong trò chơi domino

"Domino" trong trò chơi domino


3

Con trăn 1188

Về cơ bản chỉ là các vòng lặp thông qua việc liên tục khớp với một số regex khổng lồ cho đến khi nó ngừng thay đổi. Nó thực sự phù hợp với tất cả các lần đẩy của từng hướng riêng biệt (thông qua regex), và sau đó tổng hợp các kết quả khác nhau để đảm bảo không có xung đột và như vậy.

Regex có thể được thực hiện gọn hơn nhiều, nhưng bây giờ đây là những gì tôi có (nó giả định lưới được lưu trữ trong một chuỗi gvà các kích thước nằm trong xy):

import re;L='QWEADZXC';a='';m=(x*y+y);o=[0]*m;X='(.{%s})';t=X%x;u=X%(x+1);v=X%(x-1);R=range
def S(s,l):
 f=s
 for p,r in l:
    n=re.sub(p,r,s,flags=re.DOTALL)
    for i in R(len(n)):
     if n[i]!=s[i]:f=f[:i]+n[i]+f[i+1:]
 return f
while g != a:
 a=g;n='';d=[S(g,[(r'D\|','DD'),(r'D\\','DE'),('D/','DC')]),S(g,[(r'\|A','AA'),(r'\\A','ZA'),('/A','QA')]),S(g,[('-%sW'%t,r'W\1W'),(r'\\%sW'%t,r'E\1W'),('/%sW'%t,r'Q\1W')]),S(g,[('X%s-'%t,r'X\1X'),(r'X%s\\'%t,r'X\1Z'),(r'X%s/'%t,r'X\1C')]),S(g,[('C%s/'%u,r'C\1C'),('C%s-'%u,r'C\1X'),(r'C%s\|'%u,r'C\1D'),('C%s/'%t,r'C\1C'),('C%s-'%t,r'C\1X'),('C/','CC'),(r'C\|','CD')]),S(g,[(r'Z%s\\'%v,r'Z\1Z'),('Z%s-'%v,r'Z\1X'),(r'Z%s\|'%v,r'Z\1A'),(r'Z%s\\'%t,r'Z\1Z'),('Z%s-'%t,r'Z\1X'),(r'\\Z','ZZ'),(r'\|Z','AZ')]),S(g,[('/%sQ'%u,r'Q\1Q'),('-%sQ'%u,r'W\1Q'),(r'\|%sQ'%u,r'A\1Q'),('/%sQ'%t,r'Q\1Q'),('-%sQ'%t,r'W\1Q'),('/Q','QQ'),(r'\|Q','AQ')]),S(g,[(r'\\%sE'%v,r'E\1E'),('-%sE'%v,r'W\1E'),(r'\|%sE'%v,r'D\1E'),(r'\\%sE'%t,r'E\1E'),('-%sE'%t,r'W\1E'),(r'E\\','EE'),(r'E\|','ED')])]
 for i in range(m):
    c=0
    for r in d:
     if r[i]in L:
        if c==0:c=r[i]
        elif r[i]!=c:o[i]=1;break
    n+=g[i]if c==0 or o[i]else c
 g=n
print re.sub(r'\w','#',g)

Vô duyên hơn:

import re

L = 'QWEADZXC'

def sub_all(string,lst):
    final = string
    for p,r in lst:
        new = re.sub(p,r,string,flags=re.DOTALL)
        for i in range(len(new)):
            if new[i]!=string[i]:
                final=final[:i]+new[i]+final[i+1:]
    return final

def dominoes(grid,x,y):
    print len(grid),x*y+y
    print grid

    last = ''
    locked = [0]*(x*y+y)
    while grid != last:
        last = grid

        Dgrid = sub_all(grid,[(r'D\|','DD'),(r'D\\','DE'),('D/','DC')])
        Agrid = sub_all(grid,[(r'\|A','AA'),(r'\\A','ZA'),('/A','QA')])
        Wgrid = sub_all(grid,[('-(.{%s})W'%x,r'W\1W'),(r'\\(.{%s})W'%x,r'E\1W'),('/(.{%s})W'%x,r'Q\1W')])
        Xgrid = sub_all(grid,[('X(.{%s})-'%x,r'X\1X'),(r'X(.{%s})\\'%x,r'X\1Z'),(r'X(.{%s})/'%x,r'X\1C')])

        Cgrid = sub_all(grid,[('C(.{%s})/'%(x+1),r'C\1C'),('C(.{%s})-'%(x+1),r'C\1X'),(r'C(.{%s})\|'%(x+1),r'C\1D'),
                        ('C(.{%s})/'%x,r'C\1C'),('C(.{%s})-'%x,r'C\1X'),
                        ('C/','CC'),(r'C\|','CD')])

        Zgrid = sub_all(grid,[(r'Z(.{%s})\\'%(x-1),r'Z\1Z'),('Z(.{%s})-'%(x-1),r'Z\1X'),(r'Z(.{%s})\|'%(x-1),r'Z\1A'),
                        (r'Z(.{%s})\\'%x,r'Z\1Z'),('Z(.{%s})-'%x,r'Z\1X'),
                        (r'\\Z','ZZ'),(r'\|Z','AZ')])

        Qgrid = sub_all(grid,[('/(.{%s})Q'%(x+1),r'Q\1Q'),('-(.{%s})Q'%(x+1),r'W\1Q'),(r'\|(.{%s})Q'%(x+1),r'A\1Q'),
                        ('/(.{%s})Q'%x,r'Q\1Q'),('-(.{%s})Q'%x,r'W\1Q'),
                        ('/Q','QQ'),(r'\|Q','AQ')])

        Egrid = sub_all(grid,[(r'\\(.{%s})E'%(x-1),r'E\1E'),('-(.{%s})E'%(x-1),r'W\1E'),(r'\|(.{%s})E'%(x-1),r'D\1E'),
                        (r'\\(.{%s})E'%x,r'E\1E'),('-(.{%s})E'%x,r'W\1E'),
                        (r'E\\','EE'),(r'E\|','ED')])

        grids = [Dgrid,Agrid,Wgrid,Xgrid,Cgrid,Zgrid,Qgrid,Egrid]
        ngrid = ''

        for i in range(x*y+y):
            c = None
            for g in grids:
                if g[i] in L:
                    if c==None: c = g[i]
                    elif g[i] != c:
                        ngrid += grid[i]
                        locked[i]=1
                        break
            else:
                ngrid += grid[i] if c==None or locked[i] else c
        grid = ngrid
        print grid
    return re.sub(r'\w','#',grid)

Tất cả các đầu vào được liệt kê đều tạo ra kết quả đầu ra của chúng ngoại trừ thứ ba, trong đó tôi khá chắc chắn rằng có một lỗi ( \-/ở đầu trang phải là\|/ nếu đầu ra đã cho là mong muốn). Tôi cũng giả sử rằng .ở góc dưới bên trái của cái cuối cùng được dự định là a D.


Bạn nói đúng, đó là hai lỗi chính tả, mặc dù cái cuối cùng được cho là một E(không phải nó tạo ra sự khác biệt ...). Có vẻ như bạn có thể lưu một loạt các ký tự bằng cách giảm độ sâu thụt xuống mức tối thiểu.
Martin Ender

Tôi không chắc liệu mình có mắc lỗi sao chép khi dán ví dụ thứ ba hay không, nhưng dấu gạch chéo ngược sẽ không giảm (mặc dù chúng có vẻ hoạt động trong ví dụ thứ tư)
Martin Ender

1
@ MartinBüttner, mặc dù tôi đã gặp một số rắc rối khi sao chép (đảm bảo không có khoảng trắng ở cuối dòng và không có tab, chỉ có khoảng trắng) có vẻ như nó hoạt động khi tôi hiểu đúng. Có thể giúp có các đầu vào ví dụ ở định dạng dễ sao chép-dán, mà không có kết quả mong đợi trên cùng một dòng.
KSab
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.