Đặt một tàu lượn!


17

Điều này:

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

tàu lượn .

Trong Trò chơi cuộc sống của Conway, tàu lượn là một mô hình nổi tiếng nhanh chóng đi ngang qua bảng. Đối với thử thách ngày hôm nay, chúng ta sẽ vẽ một Game of Life Board của ASCII, và đặt một chiếc tàu lượn trên đó.

Hội đồng chúng tôi đang bắt đầu là đây:

|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|

Bảng này được tạo thành hoàn toàn bằng ống |và gạch dưới _, và là 10 x 10. Bạn phải viết một chương trình hoặc hàm có hai số nguyên, 'x' và 'y', và xuất ra cùng một bảng với một tàu lượn ở các tọa độ đó. Ví dụ: nếu bạn có tàu lượn ở vị trí (1, 1)(được lập chỉ mục 0), bạn phải xuất ra các mục sau:

|_|_|_|_|_|_|_|_|_|_|
|_|_|*|_|_|_|_|_|_|_|
|_|_|_|*|_|_|_|_|_|_|
|_|*|*|*|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|

Bạn có thể giả định rằng tàu lượn sẽ không bao giờ được đặt ngoài giới hạn, vì vậy cả x và y sẽ luôn nằm trong [0-7]phạm vi. Bạn cũng có thể chọn lấy tọa độ 1 được lập chỉ mục, nhưng bạn phải chỉ định điều này trong câu trả lời của mình. Trong trường hợp này, trường hợp đầu vào sẽ luôn nằm trong [1-8]phạm vi. Dưới đây là một số ví dụ (tất cả 0 chỉ mục):

0, 0:
|_|*|_|_|_|_|_|_|_|_|
|_|_|*|_|_|_|_|_|_|_|
|*|*|*|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|

7, 7:
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|*|_|
|_|_|_|_|_|_|_|_|_|*|
|_|_|_|_|_|_|_|*|*|*|

7, 4:
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|*|_|
|_|_|_|_|_|_|_|_|_|*|
|_|_|_|_|_|_|_|*|*|*|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|

5, 2:
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|*|_|_|_|
|_|_|_|_|_|_|_|*|_|_|
|_|_|_|_|_|*|*|*|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|

Như thường lệ, bạn có thể lấy IO của mình ở bất kỳ định dạng hợp lý nào. Điều này bao gồm, nhưng không giới hạn ở một chuỗi có dòng mới, một chuỗi các chuỗi, một chuỗi 2d hoặc ghi vào tệp / STDOUT. Bạn cũng có thể chọn thứ tự để đưa xy vào.

Vì đây là , các sơ hở tiêu chuẩn bị cấm và tạo mã ngắn nhất mà bạn có thể!


Chúng ta có thể thay đổi góc nào xác định vị trí của tàu lượn không?
Stephen

@StephenS Không, tọa độ sẽ Xác định nơi góc trên cùng bên trái của tàu lượn bắt đầu.
DJMcMayhem


2
the glider is a famous pattern that slowly traverses across the boar.. Chậm rãi? Nó là đối tượng di chuyển chéo nhanh nhất trong GoL. Nó đạt tới 1/4 tốc độ ánh sáng.
Christoph

1
@Christoph, điểm tốt, chúng ta có thể quan sát rằng chiều dài của nó dường như không co lại theo hướng di chuyển, nhưng tôi không biết cách đo khối lượng của nó ở tốc độ tương đối tính.
Wossname

Câu trả lời:



5

V , 31 , 30 byte

10O±°_|ÀGjjÀ|3r*kr*kh.Í*ü_/|&

Hãy thử trực tuyến!

Hexdump:

00000000: 3130 4fb1 b05f 7c1b c047 6a6a c07c 3372  10O.._|..Gjj.|3r
00000010: 2a6b 722a 6b68 2ecd 2afc 5f2f 7c26       *kr*kh..*._/|&

Cái này lấy đầu vào làm đối số chương trình và được lập chỉ mục 1.

Giải trình:

10O                         " On the following 10 lines, insert:
   ±°_                      "   10 '_' characters
      |                     "   And a '|'
       <esc>                " Return to normal mode
            ÀG              " Go to the a'th line
              jj            " Move down two lines
                À|          " Go to the b'th column
                  3r*       " and replace the next 3 characters with asterisks
                     k      " Move up a line
                      r*    " And replace this char with an asterisk
                        kh  " Move up a line and to the left
                          . " And repeat the last change we performed (replace with asterisk)
                            "
Í                           " On every line, substitute:
 *                          "   An asterisk
  ü                         "   OR
   _                        "   An underscore
    /                       " With:
     |&                     "   A bar followed by the matched pattern

Hai câu hỏi: Cái gì? và làm thế nào?
Pureferret

1
@Pureferret hai câu trả lời: Ngôn ngữ golf, KHOA HỌC (hoặc anh ấy đã viết V XD)
Christopher

1
@Pureferret Tôi đã thêm một lời giải thích.
DJMcMayhem

2

Thạch , 37 35 byte

ȷ2b1
Ḍ+“£Æßæç‘Ṭ+¢s⁵j3;0$€Fṭ0ị“_*¶|”

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

ȷ2b1                             - the literal [1,1,1,1,...,1,1,1] with 100 elements
Ḍ+“£Æßæç‘Ṭ+¢s⁵j3;0$€Fṭ0ị“_*¶|”   - input (x,y)
Ḍ                                - convert (x,y) to 10*x+y
 +                               - add, to get the five "*" positions,
  “£Æßæç‘                        - the literal [2,13,21,22,23]
         Ṭ                       - return an array with those positions as truthy elements
          +¢                    - Now we format: pad to length 100 with the above literal
            s⁵j3                 - add newlines (represented by 3) to each set of 10
                ;0$€F            - add pipes (represented by 0) to each
                     ṭ0          - add a 0 to the beginning
                       ị“_*¶|”   - index into the string “_*¶|”

1
Làm thế nào để bạn gõ / tạo chương trình của bạn?
RobotCaleb

1
@RobotCaleb: thường dán sao chép từ bảng mã Jelly . Tôi chạy chúng tại TIO nexus khi không ở máy chính của tôi và một bản sao của kho Jelly tại máy tính chính của tôi.
fireflame241

2

Python 2 , 151 byte

Sẽ chơi gôn nhiều hơn.

def f(x,y):r,x=[list('|_'*10+'|')for i in[1]*10],x*2;r[y][x+3]=r[y+1][x+5]=r[y+2][x+1]=r[y+2][x+3]=r[y+2][x+5]='*';print'\n'.join(''.join(i)for i in r)

Hãy thử trực tuyến!


Nếu bạn sẵn sàng chuyển sang Python 3, bạn có thể lưu 3 byte bằng cách sử dụng [*'|_'*10+'|']thay vì list()cuộc gọi.
L3viathan

2

Perl 6 , 88 byte

->\x,\y{(^10 »*»i X+ ^10).map:{<|* |_>[$_!=
(1-2i|2-i|0|1|2)+x+y*i+2i]~"|
"x(.re==9)}}
  • Số phức được sử dụng để biểu diễn tọa độ.

  • ^10 »*» i X+ ^10 tạo ra lưới của tất cả các số phức với các thành phần nguyên từ 0 đến chín.

  • Trả về một danh sách các chuỗi, mỗi chuỗi giữ một dòng.


Thật thú vị, tôi không biết rằng Perl sử dụng phi ASCII. Không gì »làm gì? Nó được mã hóa như thế nào?
DJMcMayhem

1
Đó chỉ là HƯỚNG DẪN ĐIỂM QUYỀN CỦA Unicode, U + 00BB, được mã hóa theo UTF-8. Trong Perl 6, nó cũng có thể được viết thành hai dấu ngoặc nhọn, >>nhưng đó là cùng một số byte với guillemet vì vậy để chơi golf tôi thích cái sau hơn vì nó trông giống IMHO hơn một chút. Đối với những gì nó làm, nó biến đổi toán tử mà nó bao quanh thành một "hyperoperator" áp dụng theo cặp cho các danh sách hoặc giá trị ở hai bên. Ở đây, nó nhân mỗi phần tử của phạm vi 0-9bằng cách icho 0, i, 2i, ..., 9i.
Sean

1

Haskell , 96 byte

r=[0..9]
x#y=['|':(r>>=(\i->[last$'_':['*'|elem(i-x,j-y)$zip[1,2,0,1,2][0,1,2,2,2]],'|']))|j<-r]

Lấy hai số nguyên ( xy) và trả về một danh sách Strings, tức là danh sách loại 2D [[Char]].


Bộ kiểm tra:

import System.Environment

main :: IO ()
main = do
    args <- getArgs
    let (x, y) = (read $ args !! 0, read $ args !! 1)
    mapM_ putStrLn (x#y)


1

Toán học, 115 113 byte

x(a="|_"~Table~10~Table~10;(a[[##]]="|*")&@@(#+x)&/@({{0,1,2,2,2},{1,2,0,1,2}});""<>Riffle[#<>"|"&/@a,"\n"])

Ở đâu

Cái này lấy đầu vào ở {row, col}định dạng và được lập chỉ mục 1, nhưng có thể được chuyển thành 0-index mà không cần thêm byte.

Một số lưu ý:

  1. \n là một ký tự dòng mới, mất 1 byte.
  2. \[Function], mất 3 byte.
  3. \[Transpose], mất 3 byte.

Lưu ý rằng "mảng chuỗi" được cho phép, vì vậy tôi chỉ có thể xóa Riffle, đưa ra

Toán học, 98 97 byte

x(a="|_"~Table~10~Table~10;(a[[##]]="|*")&@@(#+x)&/@({{0,1,2,2,2},{1,2,0,1,2}});#<>"|"&/@a)

1

Java 8, 165 144 byte

x->y->{String r="";for(int i=0,j;++i<11;r+="\n")for(r+="|",j=0;++j<11;)r+=(i==x&j==y+1)|(i==x+1&j==y+2)|(i==x+2&j>=y&j<y+3)?"*|":"_|";return r;}

Giải trình:

Hãy thử nó ở đây.

x->y->{                  // Method with two integer parameters and String return-type
  String r="";           //  Result-String
  for(int i=0,j;++i<11;  //  Loop (1) over the rows
     r+="\n|")           //    And after each iteration add a new-line to the result-String
    for(r+="|",          //   Start by appending "|" at the start of the line
      j=0;++j<11;        //   Loop (2) over the columns
      r+=(i==x&j==y+1)|(i==x+1&j==y+2)|(i==x+2&j>=y&j<y+3)?
                         //    If this coordinate should contain a '*'
        "*|"             //     Append "*|"
       :                 //    Else:
        "_|"             //     Append "_|"
    );                   //   End of loop (2)
                         //  End of loop (1) (implicit / single-line body)
  return r;              //  Return the result-String
}                        // End of method

1
Giải thích có mã khác với câu trả lời của bạn? Nhìn vào bài tập đầu tiên để r.
Computronium

@Computronium Rất tiếc, cảm ơn vì đã chú ý, đã sửa. Số lượng tạm biệt là chính xác, giải thích là chính xác, liên kết TIO là chính xác, nhưng câu trả lời thực tế vẫn là câu trả lời cũ không chính xác ..
Kevin Cruijssen

1

JavaScript (ES6), 99 byte

x=>y=>eval('for(i=0,o="";i<101;o+=((d=i-x-y*10)==1|d==12|d>19&d<23?"|*":"|_")+(++i%10?"":`|\n`))o')

Đưa đầu vào qua currying: f(5)(2)for x = 5, y = 2. Tọa độ là không có chỉ số.

Kiểm tra đoạn trích

f=
x=>y=>eval('for(i=0,o="";i<101;o+=((d=i-x-y*10)==1|d==12|d>19&d<23?"|*":"|_")+(++i%10?"":`|\n`))o')

xi.oninput=yi.oninput=_=>O.innerHTML=f(xi.value)(yi.value)
O.innerHTML=f(xi.value=5)(yi.value=2)
<style>*{font-family:Consolas;}input{width:2.5em;}</style>
x: <input id="xi" type="number" min="0" max="7">,
y: <input id="yi" type="number" min="0" max="7">
<pre id="O">


0

SOGL , 23 byte

LIΖ|_ΟL∙.«."¾'┼ΞΧ⌠²‘5nž

lưu ý: điều này dự kiến ​​đầu vào sẽ được lập chỉ mục 1

Giải trình:

LI                       push 11
  Ζ|_                    push "|" and "_"
     Ο                   make an altrenates string [with 11 separators, which are "|" and parts "_"]
      L∙                 get an array of 10 of those
        .«               take input and multiply by 2 (x pos)
          .              take input (y pos)
           "¾'┼ΞΧ⌠²‘     push "_|*|__|_|**|*|*" - the glider in the map
                    5n   split into an array with items of length 5
                      ž  replace in the 1st [grid] array at positions [inp1*2, inp2] to 2nd array [glider]


0

Than , 28 byte

UO²¹χ|_J×N²N“ "}IyE%%mLBMφ/”

Hãy thử trực tuyến! Liên kết với chế độ dài dòng để mô tả.


Tôi thất vọng vì Char than không, chỉ ... ASCII;)
Beta Decay

Bạn có thể loại bỏ |_trước \nđể lưu một byte nén. (Tôi đã thử một số cách khác nhau để in tàu lượn nhưng không cách nào lưu được byte nào.)
Neil
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.