Bayrak dalgası yapın


26

Bir bayrak al, bunun gibi:

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

Ve bir sayı girişi: "dalga boyu"

Dalga uzunluğunun 5 olduğunu söyleyin. Sonra, çizgi boyunca her 5 karakter baştan başlayarak bir sonraki karakteri a -ile \değiştirin ve bir satır sonra tüm karakterleri kaydırın. Bunu sonuna kadar tekrarlayın. Sonunla:

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

Sonunda sonunda tam bir dalga boyu yapamayacağınız takdirde, bayrak biter. Sadece sonuna kadar düz kal.

Tüm satırların aynı uzunlukta olduğunu ve üst ve alt satırların tamamen -(0x2D) oluşturulduğunu ve karakterlerin geri kalanının !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~bir boşluk içinde olduğunu (veya bir boşluk olduğunu ) kabul edebilirsiniz. (Yani ascii değeri x, nerede 31 < x < 127)
Bayrak en az 3 boyunda ve 3 genişliğinde olacak.

Dalga boyu negatif olmayan bir tamsayı olacaktır (> = 0).

(Ayrıca dalga boyuna 1 sahip olabilirsiniz, en küçük dalga boyu olabilir, bu nedenle yukarıdaki örnek dalga boyuna 6 sahip olacaktır. Bu tamam.)

Bayrak G / Ç, satır dizileri veya birden çok satır içeren bir dize olabilir.

Çıktı bayrağının izleri boşluk olabilir, ancak her bayrakta aynı olduğu sürece yalnızca baş boşluklara sahip olabilir. Bir giriş bayrağının arkadaki alanı silinebilir.

puanlama

Bu kod golf, yani bayt cinsinden en kısa çözüm kazanır.

Test durumları

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



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



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



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



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



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

4
@LuisMendo'nun buraya gelmesini ve ertesi gün içinde burayı havaya uçurmasını bekliyordum.
Sihirli Ahtapot Urn

Kahretsin ... Forgot @ cevap vermeyenleri birbirine bağlamaz ... Birisi lütfen MATL kullanarak kıçımı tekmeledi, bu yüzden yorumları silebilirim.
Magic Octopus Urn

2
Herkes bunu canlandırıyor
Matthew Roh

1
@ SIGSEGV Tamam , aklınızdakilerden biri olmayabilir.
Brian McCutchon

1
@carusocomputing Biri beni aradı mı? 31 bayt, yine de
Luis Mendo

Yanıtlar:


11

05AB1E , 25 23 26 25 bayt

-2 Adnan sayesinde

-1 Emigna sayesinde

+3 Jonathan Allan sayesinde (bu geçersizliği yakalamak için zaman ayırdığınız için teşekkürler!)

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

Çevrimiçi deneyin!

Bu tamam değilse 0, +2 bayt yerine 1 dizinli.

ø                                    # 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 / Anyone - Bu çekiklerin yerini almak için daha iyi bir çözüm olmalı, ama güdük oldum.


1 indeksleme tamam.
Artyer

1
úð×ì:) ile aynıdır
Adnan

1
@Artyer hiç de değil! +3 cevabımın geçerli olmadığını belirttiği için teşekkürler, insanların doğru olmadığını fark edecek kadar uzun bir cevabı okumak için yeterince önemsemekten hoşlanırım. Daha az iğneleyici bir ses çıkarmaya yetecek kadar rewordum: P?
Magic Octopus Urn

2
@Adnan HİÇBİR GERÇEKTEN HİÇBİR WONDER YOK. Adını kesmek için üzgünüm Jonathan Allan .
Magic Octopus Urn

2
Gerçekten bir sorun değil :)
Jonathan Allan



5

Jöle , 29 bayt

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

Giriş ve çıkış bayrakları satırların listesidir.
Dalga boyu 1 indekslidir.
Her zaman bir satır boşluk üretir.
(yukarıda belirtilenlerin tümüne gönderilen soruya açıkça izin verilir)

Çevrimiçi deneyin! (IO'nun güzel görünmesini sağlamak için altbilgi - bayrakları çok satırlı metin olarak alır ve alır)

Nasıl?

Carusocomputing'in 05ab1e cevabına oldukça benzeyen bir yöntem , daha fazla golf oynamayı başaramadım.

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

Neden bunu yapan her zaman Jelly?
Gryphon - Monica

05AB1E bu raundu açıkça kazandı!
Jonathan Allan,

Tamam, neden bunu hep Jelly ya da 05AB1E yapıyor? (Retorik soru, bunun nedeni golf dilleri oldukları için biliyorum)
Gryphon - Monica


2

JavaScript (ES6), 175 bayt

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);

G / Ç, yeni satırlarla ayrılmış bir dize gibidir. Çıktıda öncü bir yeni hat var; bu 3 byte pahasına çıkarılabilir. Çıktı dizgisini doğrudan hesaplamayı denedim ama bu beni aldı ... 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);

G / Ç bir dize dizisi gibidir.


Sizinkiden geçen tek sınav durumu değişmemiş olana benziyor.
Marie

Evet, bu çoğu test durumu için düzgün çalışmıyor. (İlki benim denediğim
şeydi

2
@Artyer Üzgünüz, bu ince; Bire bir hata tespit etmedim.
Neil

2

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

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];

statik dosyadan bayrak ave STDIN'den dalga boyu (minimum 1) alır.
Pipe ile çalıştırın php -nrveya çevrimiçi deneyin .

Yıkmak

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

Ortadaki çizgiler için işe yaramaz: sandbox.onlinephpfunctions.com/code/…
Artyer

Orta çizgileri `` haline getirmemelidir. İngiliz
olandan

Boyut olarak çok fazla artan bayrakların alt kısımlarını kesiyor gibi görünüyor: sandbox.onlinephpfunctions.com/code/…
Artyer

@Artyer Bu olmalı.
Titus

1
$z&&$z!=$r-1$z%($r-1)3 bayt tasarruf için eşdeğer olmalıdır .
Christoph
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.