Buat gelombang bendera


26

Ambil bendera, seperti ini:

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

Dan sejumlah input: "panjang gelombang"

Katakanlah panjang gelombangnya adalah 5. Kemudian, setiap 5 karakter di sepanjang garis dari awal, ganti karakter berikutnya -dengan \dan geser semua karakter setelah satu baris ke bawah. Ulangi ini sampai akhir. Anda berakhir dengan:

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

Jika pada akhirnya Anda tidak bisa membuat panjang gelombang penuh, bendera telah selesai. Tetap datar sampai akhir.

Anda dapat mengasumsikan bahwa semua garis memiliki panjang yang sama dan bahwa garis atas dan bawah seluruhnya terdiri dari -(0x2D) dan sisa karakter berada di !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~, atau merupakan spasi ( ). (Jadi nilai ascii adalah x, di mana 31 < x < 127)
Bendera akan setidaknya 3 tinggi dan 3 lebar.

Panjang gelombang akan menjadi bilangan bulat non-negatif (> = 0).

(Anda juga dapat memiliki panjang gelombang 1 menjadi panjang gelombang terkecil, jadi contoh di atas akan memiliki panjang gelombang 6. Ini OK.)

I / o flag Anda dapat berupa array garis atau string dengan banyak garis.

Bendera keluaran mungkin memiliki spasi tambahan, tetapi hanya dapat memiliki spasi awal asalkan sama pada setiap bendera. Trailing space pada flag input dapat dihapus.

Mencetak gol

Ini adalah kode-golf, jadi solusi tersingkat, dalam byte, menang.

Uji kasus

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



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



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



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



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



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

4
Harapkan @LuisMendo datang ke sini dan meniup ini dalam beberapa hari ke depan.
Magic Gurita Guci

Sial ... Lupa @ tidak menautkan mereka yang belum menanggapi ... Seseorang tendang pantat saya menggunakan MATL, jadi saya dapat menghapus komentar.
Magic Gurita Guci

2
Siapa pun yang menghidupkan ini
Matius Roh

1
@SIGSEGV Selesai , meskipun mungkin bukan yang Anda pikirkan.
Brian McCutchon

1
@carusocomputing Apakah seseorang memanggil saya? 31 byte, meskipun
Luis Mendo

Jawaban:


11

05AB1E , 25 23 26 25 byte

Terima kasih kepada Adnan

-1 terima kasih kepada Emigna

+3 terima kasih kepada Jonathan Allan (terima kasih telah meluangkan waktu untuk menangkap ketidakabsahan itu!)

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

Cobalah online!

Ini adalah 1-diindeks bukannya 0, +2 byte jika itu tidak apa-apa.

ø                                    # 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 / Siapa pun - TELAH ada solusi yang lebih baik untuk mengganti slant-slant itu, tapi saya bingung.


Pengindeksan 1 OK.
Artyer

1
úsama seperti ð×ì:)
Adnan

1
@Atyty tidak sama sekali! +3 terima kasih padanya untuk menunjukkan jawaban saya tidak valid, saya suka ketika orang benar-benar cukup peduli untuk membaca jawaban cukup lama untuk memperhatikan itu tidak benar. Apakah saya cukup reword sehingga terdengar kurang sarkastik: P?
Magic Gurita Guci

2
@Adnan NO WONDER SAYA TIDAK PERNAH AKAN BISA BALASAN. Maaf karena membantai namamu, Jonathan Allan .
Magic Gurita Guci

2
Benar-benar tidak masalah :)
Jonathan Allan


8

Python 2 , 129 byte

lambda f,n,j=''.join:map(j,zip(*[i/n*' '+'-\\'[i%n>n-2]+j(s[1:-1])+'-\\'[i%n>n-2]+len(f[0])/n*' 'for i,s in enumerate(zip(*f))]))

Cobalah online!


5

Jelly , 29 byte

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

Bendera input dan output adalah daftar garis.
Panjang gelombang adalah 1-diindeks.
Selalu menghasilkan satu baris ruang.
(semua hal di atas secara eksplisit diizinkan dalam pertanyaan yang diposting)

Cobalah online! (footer untuk membuat IO terlihat cantik - mengambil dan menerima flag sebagai teks multiline)

Bagaimana?

Metode yang sangat mirip dengan jawaban 05ab1e carusocomputing , yang saya belum berhasil turunkan lagi.

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

Mengapa selalu Jelly yang melakukan ini?
Gryphon - Reinstate Monica

05AB1E dengan jelas memenangkan babak ini!
Jonathan Allan

OK, mengapa selalu Jelly atau 05AB1E yang melakukan ini? (Pertanyaan retoris, saya tahu itu karena mereka bahasa golf)
Gryphon - Reinstate 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 adalah sebagai string yang dibatasi-baris baru. Output mencakup baris baru terkemuka; ini dapat dihapus dengan biaya 3 byte. Saya mencoba menghitung string output secara langsung tetapi itu membuat saya ... 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 adalah sebagai array string.


Sepertinya satu-satunya test case yang lolos adalah yang tidak berubah.
Marie

Ya, ini tidak berfungsi dengan baik untuk sebagian besar kasus uji. (Yang pertama adalah yang saya coba)
Artyer

2
@Artyer Maaf, itu halus; Saya tidak menemukan kesalahan satu per satu.
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];

mengambil flag dari file statis adan panjang gelombang (minimal 1) dari STDIN.
Jalankan sebagai pipa dengan php -nratau coba online .

kerusakan

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 "\\"
    ;

Tidak berfungsi untuk garis di tengah: sandbox.onlinephpfunctions.com/code/…
Artyer

Seharusnya tidak mengubah garis tengah menjadi ``. Lihat test case setelah yang Inggris
Artyer

Tampaknya akan memotong beberapa bagian bawah bendera yang bertambah banyak ukurannya
Artyer

@Artyer Seharusnya begitu.
Titus

1
$z&&$z!=$r-1harus setara dengan $z%($r-1)penghematan 3 byte.
Christoph
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.