Machen Sie eine Fahnenwelle

26

Nimm eine Flagge wie diese:

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

Und eine Zahleneingabe: die "Wellenlänge"

Angenommen, die Wellenlänge war 5. Ersetzen Sie dann alle 5 Zeichen entlang der Linie von Anfang an das nächste Zeichen a -durch \und verschieben Sie alle Zeichen danach eine Zeile nach unten. Wiederholen Sie dies bis zum Ende. Sie landen mit:

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

Wenn Sie am Ende keine volle Wellenlänge erzeugen können, ist das Flag fertig. Bleib einfach bis zum Ende flach.

Sie können davon ausgehen, dass alle Zeilen gleich lang sind und dass die oberen und unteren Zeilen vollständig aus -(0x2D) bestehen und sich die restlichen Zeichen in !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~oder einem Leerzeichen ( ) befinden. (Also ist es ASCII-Wert x, wo 31 < x < 127)
Die Flagge wird mindestens 3 hoch und 3 breit sein.

Die Wellenlänge ist eine nicht negative Ganzzahl (> = 0).

(Die Wellenlänge 1 kann auch die kleinste Wellenlänge sein, sodass das obige Beispiel die Wellenlänge 6 hat. Dies ist in Ordnung.)

Ihr I / O-Flag kann ein Array von Zeilen oder eine Zeichenfolge mit mehreren Zeilen sein.

Das Ausgabe-Flag kann abschließende Leerzeichen enthalten, jedoch nur führende Leerzeichen, solange es auf jedem Flag gleich ist. Das nachfolgende Leerzeichen eines Eingabe-Flags kann gelöscht werden.

Wertung

Das ist Code-Golf, also gewinnt die kürzeste Lösung in Bytes.

Testfälle

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



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



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



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



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



-------------------------------------------
|*  *  *  *  * |##########################|
| *  *  *  *  *|                          |
|*  *  *  *  * |##########################|
| *  *  *  *  *|                          |
|*  *  *  *  * |##########################|
| *  *  *  *  *|                          |
|*  *  *  *  * |##########################|
|---------------                          |
|#########################################|
|                                         |
|#########################################|
|                                         |
|#########################################|
-------------------------------------------
0
\
|\
|*\
|  \
|** \
|   *\
|**   \
|   ** \
|**    *\
|-  **   \
|#-    ** \
| #-**    *\
|# #-  **   \
| # #-    ** \
\# # #-**    *\
 \# # #-  **   \
  \# # #-    **|\
   \# # #-**   |#\
    \# # #-  **| #\
     \# # #-   |# #\
      \# # #-**| # #\
       \# # #- |# # #\
        \# # #-| # # #\
         \# # #-# # # #\
          \# # # # # # #\
           \# # # # # # #\
            \# # # # # # #\
             \# # # # # # #\
              \# # # # # # #\
               \# # # # # # #\
                \# # # # # # #\
                 \# # # # # # #\
                  \# # # # # # #\
                   \# # # # # # #\
                    \# # # # # # #\
                     \# # # # # # #\
                      \# # # # # # #\
                       \# # # # # # #\
                        \# # # # # # #\
                         \# # # # # # #\
                          \# # # # # # #\
                           \# # # # # # #\
                            \# # # # # # #\
                             \# # # # # # |
                              \# # # # # #|
                               \# # # # # |
                                \# # # # #|
                                 \# # # # |
                                  \# # # #|
                                   \# # # |
                                    \# # #|
                                     \# # |
                                      \# #|
                                       \# |
                                        \#|
                                         \|
                                          \
Artyer
quelle
4
Ich erwarte, dass @LuisMendo hierher kommt und dies in den nächsten Tagen wegbläst.
Magic Octopus Urn
Mist ... Forgot @ verknüpft nicht diejenigen, die nicht geantwortet haben ... Jemand tritt mir mit MATL auf den Hintern, damit ich die Kommentare löschen kann.
Magic Octopus Urn
2
Jeder animiert dies
Matthew Roh
1
@SIGSEGV Fertig , aber vielleicht nicht das, was Sie sich vorgestellt haben.
Brian McCutchon
1
@carusocomputing Hat mich jemand angerufen? 31 Bytes
Luis Mendo

Antworten:

11

05AB1E , 25 23 26 25 Bytes

-2 danke an Adnan

-1 danke an Emigna

+3 danke an Jonathan Allan (danke, dass du dir die Zeit genommen hast, diese Invalidität zu finden!)

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

Probieren Sie es online!

Dies ist 1-indiziert anstelle von 0, +2 Bytes, wenn das nicht in Ordnung ist.

ø                                    # 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 - Es muss eine bessere Lösung geben, um diese Schrägen zu ersetzen, aber ich bin ratlos.

Magische Kraken-Urne
quelle
Die 1-Indizierung ist OK.
Artyer
1
úist das gleiche wie ð×ì:)
Adnan
1
@Artyer gar nicht! +3 Dankeschön an ihn für den Hinweis, dass meine Antwort nicht gültig ist. Ich mag es, wenn die Leute sich wirklich dafür interessieren, eine Antwort lange genug zu lesen, um zu bemerken, dass sie nicht korrekt ist. Habe ich es so umformuliert, dass es weniger sarkastisch klingt: P?
Magic Octopus Urn
2
@Adnan KEIN WUNDER, DEN ICH NIE ANTWORTEN KANN. Es tut mir leid, dass du deinen Namen geschlachtet hast Jonathan Allan .
Magic Octopus Urn
2
Wirklich kein Problem :)
Jonathan Allan
8

Python 2 , 129 Bytes

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

Probieren Sie es online!

ovs
quelle
5

Gelee , 29 Bytes

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

Eingabe- und Ausgabe-Flags sind Zeilenlisten.
Die Wellenlänge ist 1-indiziert.
Erzeugt immer eine Zeile Leerzeichen.
(alles oben Genannte ist in der gestellten Frage ausdrücklich erlaubt)

Probieren Sie es online! (Fußzeile, um IO hübsch aussehen zu lassen - nimmt und empfängt Flags als mehrzeiligen Text)

Wie?

Eine ziemlich ähnliche Methode wie die 05ab1e-Antwort von carusocomputing , bei der ich nicht mehr Golf spielen konnte.

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
Jonathan Allan
quelle
Warum macht das immer Jelly?
Gryphon - Wiedereinsetzung von Monica
05AB1E hat diese Runde klar gewonnen!
Jonathan Allan
OK, warum macht das immer Jelly oder 05AB1E? (Rhetorische Frage, ich weiß, es ist, weil sie Golf-Sprachen sind)
Gryphon - Reinstate Monica
3

MATL , 31 Bytes

x"X@q1GQ&\Z"@b1G=?'\'5L(]h]Xhc!

Probieren Sie es online! Oder überprüfen Sie alle Testfälle: 1 , 2 , 3 , 4 , 5 , 6 , 7 .

Luis Mendo
quelle
Wow, was war der teure Teil? Das Ersetzen des -durch das [\]?
Magic Octopus Urn
@carusocomputing Ja, ich denke, das ist der teuerste Teil
Luis Mendo
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 ist eine durch Zeilenumbrüche getrennte Zeichenfolge. Die Ausgabe enthält einen führenden Zeilenumbruch. Dies kann zu einem Preis von 3 Bytes entfernt werden. Ich habe versucht, den Ausgabe-String direkt zu berechnen, aber das hat mich ... 176 Bytes gekostet:

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 ist ein String-Array.

Neil
quelle
Es sieht so aus, als ob der einzige Testfall, den Sie bestehen, der ist, der sich nicht ändert.
Marie
Ja, dies funktioniert in den meisten Testfällen nicht richtig. (Das erste war, was ich versucht habe)
Artyer
2
@Artyer Sorry, das war subtil; Ich habe den Fehler nicht entdeckt.
Neil
2

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

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

aNimmt Flag aus statischer Datei und Wellenlänge (mindestens 1) von STDIN.
Laufen Sie als Pipe mit php -nroder probieren Sie es online aus .

Nervenzusammenbruch

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 "\\"
    ;
Titus
quelle
Funktioniert nicht für Zeilen in der Mitte: sandbox.onlinephpfunctions.com/code/…
Artyer
Es sollte nicht die Mittellinien in `` verwandeln. Siehe den Testfall nach dem britischen
Artyer
Es scheint, als würde es einige der Böden von Flaggen abschneiden, die sich stark vergrößern: sandbox.onlinephpfunctions.com/code/…
Artyer
@Artyer Das sollte es sein.
Titus
1
$z&&$z!=$r-1sollte gleichbedeutend mit dem $z%($r-1)Speichern von 3 Byte sein.
Christoph