Tạo sóng cờ


26

Lấy một lá cờ, như thế này:

-----------------------------
|             |             |
|             |             |
|=============+=============|
|             |             |
|             |             |
-----------------------------

Và một đầu vào số: "chiều dài sóng"

Giả sử độ dài sóng là 5. Sau đó, cứ sau 5 ký tự, hãy thay thế ký tự tiếp theo a -bằng \và dịch chuyển tất cả các ký tự sau khi một hàng xuống. Lặp lại điều này cho đến khi kết thúc. Bạn kết thúc với:

-----\
|     -----\
|           -----\
|=====        |   -----\
|     ======  |         -----
|           ==+===          |
-----\        |   ======    |
      -----\  |         ====|
            -----\          |
                  -----\    |
                        -----

Nếu bạn kết thúc không thể tạo ra một chiều dài sóng đầy đủ ở cuối, cờ đã kết thúc. Chỉ cần giữ phẳng cho đến cuối.

Bạn có thể giả sử rằng tất cả các dòng có cùng độ dài và các dòng trên cùng và dưới cùng được cấu tạo hoàn toàn bằng -(0x2D) và phần còn lại của các ký tự nằm trong !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~hoặc là một khoảng trắng ( ). (Vì vậy, giá trị ascii là x, trong đó 31 < x < 127)
Cờ sẽ có ít nhất 3 chiều cao và 3 chiều rộng.

Độ dài sóng sẽ là số nguyên không âm (> = 0).

(Bạn cũng có thể có độ dài sóng 1 là bước sóng nhỏ nhất, vì vậy ví dụ trên sẽ có độ dài sóng 6. Điều này là ổn.)

I / o cờ của bạn có thể là mảng các dòng hoặc một chuỗi có nhiều dòng.

Cờ đầu ra có thể có các khoảng trắng ở cuối, nhưng chỉ có thể có các khoảng trắng ở đầu miễn là nó giống nhau trên mỗi cờ. Không gian lưu trữ trên cờ đầu vào có thể bị xóa.

Chấm điểm

Đây là môn đánh gôn, vì vậy giải pháp ngắn nhất, tính bằng byte, sẽ thắng.

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

---
abc
---
2
--\
abc
--\



-----
| + |
-----
10
-----
| + |
-----



---------------------------------------
|&&&&&&                         &&&&&&|
|&&&&&&                         &&&&&&|
|&&&&&&                         &&&&&&|
|&&&&&&          .\^/.          &&&&&&|
|&&&&&&        . |   | .        &&&&&&|
|&&&&&&        |\|   |/|        &&&&&&|
|&&&&&&     .--'       '--.     &&&&&&|
|&&&&&&      \           /      &&&&&&|
|&&&&&&       >         <       &&&&&&|
|&&&&&&      '~|/~~|~~\|~'      &&&&&&|
|&&&&&&            |            &&&&&&|
|&&&&&&                         &&&&&&|
|&&&&&&                         &&&&&&|
---------------------------------------
12
------------\                          
|&&&&&&      ------------\             
|&&&&&&                   ------------\
|&&&&&&                         &&&&&&|
|&&&&&&                         &&&&&&|
|&&&&&&          .\^/.          &&&&&&|
|&&&&&&        . |   | .        &&&&&&|
|&&&&&&     .  |\|   |/|        &&&&&&|
|&&&&&&      --'       '--      &&&&&&|
|&&&&&&      \           /.     &&&&&&|
|&&&&&&       >         <       &&&&&&|
|&&&&&&      '~|/~~|~~\|~'      &&&&&&|
|&&&&&&            |            &&&&&&|
|&&&&&&                         &&&&&&|
------------\                   &&&&&&|
             ------------\      &&&&&&|
                          ------------\



-----------------------
|-._`-._ :| |: _.-'_.-|
|   `-._`:| |:`_.-'   |
|-------`-' '-'-------|
|------_.-. .-._------|
|  _.-'_.:| |:._`-._  |
|-'_.-'  :| |:  `-._`-|
-----------------------
4
----\
|-._`----\
|   `-._ :----\
|-----._`:| |: ----\
|-------`-| |:`_.-'_---
|  _.--_.-' '-'_.-' .-|
|-'_.-'_.:. .-.-----  |
----\-'  :| |:._------|
     ----\| |: _`-._--|
          ----\ `-._  |
               ----\`-|
                    ---



---------------
---------------
---------------
---------------
---------------
5
-----\         
-----------\   
---------------
---------------
-----\---------
      -----\---
            ---



-------------------------------------------
|*  *  *  *  * |##########################|
| *  *  *  *  *|                          |
|*  *  *  *  * |##########################|
| *  *  *  *  *|                          |
|*  *  *  *  * |##########################|
| *  *  *  *  *|                          |
|*  *  *  *  * |##########################|
|---------------                          |
|#########################################|
|                                         |
|#########################################|
|                                         |
|#########################################|
-------------------------------------------
0
\
|\
|*\
|  \
|** \
|   *\
|**   \
|   ** \
|**    *\
|-  **   \
|#-    ** \
| #-**    *\
|# #-  **   \
| # #-    ** \
\# # #-**    *\
 \# # #-  **   \
  \# # #-    **|\
   \# # #-**   |#\
    \# # #-  **| #\
     \# # #-   |# #\
      \# # #-**| # #\
       \# # #- |# # #\
        \# # #-| # # #\
         \# # #-# # # #\
          \# # # # # # #\
           \# # # # # # #\
            \# # # # # # #\
             \# # # # # # #\
              \# # # # # # #\
               \# # # # # # #\
                \# # # # # # #\
                 \# # # # # # #\
                  \# # # # # # #\
                   \# # # # # # #\
                    \# # # # # # #\
                     \# # # # # # #\
                      \# # # # # # #\
                       \# # # # # # #\
                        \# # # # # # #\
                         \# # # # # # #\
                          \# # # # # # #\
                           \# # # # # # #\
                            \# # # # # # #\
                             \# # # # # # |
                              \# # # # # #|
                               \# # # # # |
                                \# # # # #|
                                 \# # # # |
                                  \# # # #|
                                   \# # # |
                                    \# # #|
                                     \# # |
                                      \# #|
                                       \# |
                                        \#|
                                         \|
                                          \

4
Mong đợi @LuisMendo đến đây và thổi bay điều này trong vòng ngày hôm sau.
Bạch tuộc ma thuật Urn

Crap ... Quên @ không liên kết những người chưa trả lời ... Ai đó đá vào mông tôi bằng MATL làm ơn để tôi có thể xóa các bình luận.
Bạch tuộc ma thuật Urn

2
Bất cứ ai làm động điều này
Matthew Roh

1
@SIGSEGV Xong , mặc dù có thể không phải là những gì bạn đã nghĩ.
Brian McCutchon

1
@carusocomputing Có ai gọi cho tôi không? Mặc dù vậy, 31 byte
Luis Mendo

Câu trả lời:


11

05AB1E , 25 23 26 25 byte

-2 nhờ Ad Nam

-1 cảm ơn Emigna

+3 cảm ơn Jonathan Allan (cảm ơn vì đã dành thời gian để nắm bắt sự bất khả xâm phạm đó!)

øvyN>²Öi¦¨'\.ø}N²÷ú}).Bø»

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

Đây là 1 chỉ mục thay vì 0, +2 byte nếu điều đó không ổn.

ø                                    # Transpose.
 vy                }                 # For each column...
   N>²Öi¦¨'\.ø}                      # Replace outside dashes with slants.
               N²÷                   # Current index / input #2.
                  ú                  # Prepend that many spaces to current column.
                    ).Bø             # Join, pad, transpose back.
                        »            # Print with newlines.

Emigna / Adnan / Bất cứ ai - Có một giải pháp tốt hơn để thay thế những chiếc quần đó, nhưng tôi đã bối rối.


Chỉ số 1 là OK.
Artyer

1
úcũng giống như ð×ì:)
Adnan

1
@Artyer hoàn toàn không! +3 cảm ơn anh ấy vì đã chỉ ra câu trả lời của tôi không hợp lệ, tôi thích nó khi mọi người thực sự quan tâm đủ để đọc một câu trả lời đủ lâu để nhận thấy nó không đúng. Tôi đã điều chỉnh lại nó đủ để nghe ít mỉa mai hơn chưa?
Bạch tuộc ma thuật Urn

2
@Adnan KHÔNG TUYỆT VỜI TÔI KHÔNG BAO GIỜ CÓ THỂ TRẢ LỜI. Xin lỗi về việc đánh cắp tên của bạn Jonathan Allan .
Bạch tuộc ma thuật Urn

2
Thực sự không có vấn đề gì :)
Jonathan Allan



5

Thạch , 29 byte

s”\⁹¦€Fð€0,1¦Zsð⁶ẋ;Ѐµ@"J;/z⁶

Cờ đầu vào và đầu ra là danh sách các dòng.
Độ dài sóng là 1 chỉ số.
Luôn tạo ra một dòng không gian.
(tất cả những điều trên được cho phép rõ ràng trong câu hỏi được đăng)

Hãy thử trực tuyến! (chân trang để làm cho IO trông đẹp - lấy và nhận cờ dưới dạng văn bản nhiều dòng)

Làm sao?

Một phương pháp khá giống với câu trả lời 05ab1e của carusocomputing , mà tôi không thể chơi golf nhiều hơn.

s”\⁹¦€Fð€0,1¦Zsð⁶ẋ;Ѐµ@"J;/z⁶ - Main link: list of lists f, number p
            ¦                 - apply to indexes (of f)
         0,1                  - ... 0 paired with 1 (i.e. last & first -> bottom & top)
       ð€                     - the previous chain with p as right argument for €ach:
s                             -   split into chunks of length p
    ¦€                        -   apply to indexes for €ach
   ⁹                          -   ... link's right argument, p
 ”\                           -   the character '\' (a replacement - if the index is out of bounds this has no effect - although this might change in the future.)
             Z                - transpose the edited flag
              s               - split into chunks of length p
                        J     - range of length = [1,2,...,nChunks]
               ð     µ@"      - zip with reversed arguments (call those i):
                ⁶             -   literal space
                 ẋ            -    repeated i times
                  ;Ѐ         -    concatenate mapped across the chunks
                         ;/   - undo the split (reduce with concatenation)
                           z⁶ - transpose with a filler of space characters

Tại sao nó luôn luôn Jelly mà làm điều này?
Gryphon - Tái lập Monica

05AB1E rõ ràng đã thắng vòng này!
Jonathan Allan

OK, tại sao luôn là Jelly hoặc 05AB1E làm điều này? (Câu hỏi tu từ, tôi biết đó là vì chúng là ngôn ngữ chơi gôn)
Gryphon - Tái lập Monica


2

JavaScript (ES6), 175 byte

f=(s,l,p=++l,t=s.replace(/^-*|-*$/g,s=>s.replace(/-/g,(c,i)=>++i%l?c:`\\`)))=>t.search`
`<p?t:(f(s,l,p+l,t)+`
`+` `.repeat(p)).replace(eval(`/(^|(.*)\\n)(.{${p}})/g`),`
$3$2`)
;
test=(s,l)=>document.write(`<pre>${s}
${l}${f(s,l)}</pre>`);
test(`---
abc
---`,2);
test(`-----
| + |
-----`,10);
test(`---------------------------------------
|&&&&&&                         &&&&&&|
|&&&&&&                         &&&&&&|
|&&&&&&                         &&&&&&|
|&&&&&&          .\\^/.          &&&&&&|
|&&&&&&        . |   | .        &&&&&&|
|&&&&&&        |\\|   |/|        &&&&&&|
|&&&&&&     .--'       '--.     &&&&&&|
|&&&&&&      \\           /      &&&&&&|
|&&&&&&       >         <       &&&&&&|
|&&&&&&      '~|/~~|~~\\|~'      &&&&&&|
|&&&&&&            |            &&&&&&|
|&&&&&&                         &&&&&&|
|&&&&&&                         &&&&&&|
---------------------------------------`,12);
test(`-----------------------
|-._\`-._ :| |: _.-'_.-|
|   \`-._\`:| |:\`_.-'   |
|-------\`-' '-'-------|
|------_.-. .-._------|
|  _.-'_.:| |:._\`-._  |
|-'_.-'  :| |:  \`-._\`-|
-----------------------`,4);
test(`---------------
---------------
---------------
---------------
---------------`,5);
test(`-------------------------------------------
|*  *  *  *  * |##########################|
| *  *  *  *  *|                          |
|*  *  *  *  * |##########################|
| *  *  *  *  *|                          |
|*  *  *  *  * |##########################|
| *  *  *  *  *|                          |
|*  *  *  *  * |##########################|
|---------------                          |
|#########################################|
|                                         |
|#########################################|
|                                         |
|#########################################|
-------------------------------------------`,0);

I / O là một chuỗi phân định dòng mới. Đầu ra bao gồm một dòng mới hàng đầu; điều này có thể được loại bỏ với chi phí 3 byte. Tôi đã thử tính toán trực tiếp chuỗi đầu ra nhưng điều đó khiến tôi mất ... 176 byte:

f=
(a,l,h=a.length)=>[...Array(h+(a[0].length-1)/++l|0)].map((_,i)=>a[0].replace(/./g,(k,j)=>((k=i-(j/l|0))&&h+~k)|-~j%l?(a[k]||'')[j]||' ':'\\'))
;
test=(s,l)=>document.write(`<pre>${s}
${l}
${f(s.split`
`,l).join`
`}</pre>`);
test(`---
abc
---`,2);
test(`-----
| + |
-----`,10);
test(`---------------------------------------
|&&&&&&                         &&&&&&|
|&&&&&&                         &&&&&&|
|&&&&&&                         &&&&&&|
|&&&&&&          .\\^/.          &&&&&&|
|&&&&&&        . |   | .        &&&&&&|
|&&&&&&        |\\|   |/|        &&&&&&|
|&&&&&&     .--'       '--.     &&&&&&|
|&&&&&&      \\           /      &&&&&&|
|&&&&&&       >         <       &&&&&&|
|&&&&&&      '~|/~~|~~\\|~'      &&&&&&|
|&&&&&&            |            &&&&&&|
|&&&&&&                         &&&&&&|
|&&&&&&                         &&&&&&|
---------------------------------------`,12);
test(`-----------------------
|-._\`-._ :| |: _.-'_.-|
|   \`-._\`:| |:\`_.-'   |
|-------\`-' '-'-------|
|------_.-. .-._------|
|  _.-'_.:| |:._\`-._  |
|-'_.-'  :| |:  \`-._\`-|
-----------------------`,4);
test(`---------------
---------------
---------------
---------------
---------------`,5);
test(`-------------------------------------------
|*  *  *  *  * |##########################|
| *  *  *  *  *|                          |
|*  *  *  *  * |##########################|
| *  *  *  *  *|                          |
|*  *  *  *  * |##########################|
| *  *  *  *  *|                          |
|*  *  *  *  * |##########################|
|---------------                          |
|#########################################|
|                                         |
|#########################################|
|                                         |
|#########################################|
-------------------------------------------`,0);

I / O là một mảng chuỗi.


Có vẻ như trường hợp thử nghiệm duy nhất mà bạn vượt qua là trường hợp không thay đổi.
Marie

Có, điều này không hoạt động đúng cho hầu hết các trường hợp thử nghiệm. (Cái đầu tiên là những gì tôi đã thử)
Artyer

2
@Artyer Xin lỗi, đó là tinh tế; Tôi đã không phát hiện ra lỗi này.
Neil

2

PHP, 168 164 187 172 167 153 150 152 149 byte

for($r=count($f=file(a));$y<$r+$e/$n=$argn;$y+=print"
")for($x=0;$x+1<$e=strlen($f[0])-1;)echo("\\".$f[$z=$y-($x/$n|0)][$x++]." ")[$z%($r-1)||$x%$n];

lấy cờ từ tệp tĩnh avà độ dài sóng (tối thiểu 1) từ STDIN.
Chạy như ống với php -nrhoặc thử trực tuyến .

phá vỡ

for($r=count($f=file(a));       # import file, count lines
    $y<$r+$e/$n=$argn;          # loop $y through lines
    $y+=print"\n")                      # 2. print newline
    for($x=0;$x+1<$e=strlen($f[0])-1;)  # 1. loop $x through columns
    echo("\\".$f[                           # 3. create string=backslash+character+space
            $z=$y-($x/$n|0)                 # 1. line no. = $y - wave offset
        ][$x++]." "                         # 2. pick character from line
        )
    [
        $z%($r-1)                           # if not first or last line
        ||$x%$n                             # or not last position of wave
    ]                                       # then index 1 (character or space), else "\\"
    ;

Không hoạt động cho các dòng ở giữa: sandbox.onlinephpfifts.com/code/,
Artyer

Nó không nên biến các đường giữa thành ``. Xem trường hợp thử nghiệm sau khi người Anh
Artyer

Nó dường như đang cắt bỏ một số đáy của cờ tăng kích thước rất nhiều: sandbox.onlinephpfifts.com/code/ chủ
Artyer

@Artyer Đó là nó.
Tít

1
$z&&$z!=$r-1nên tương đương với việc $z%($r-1)tiết kiệm 3 byte.
Christoph
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.