Crea un'onda di bandiera


26

Prendi una bandiera, come questa:

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

E un input numerico: la "lunghezza d'onda"

Supponi che la lunghezza dell'onda fosse 5. Quindi, ogni 5 caratteri lungo la linea dall'inizio, sostituisci il carattere successivo a -con \e sposta tutti i caratteri dopo di esso di una riga verso il basso. Ripeti fino alla fine. Si finisce con:

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

Se alla fine non riesci a fare una lunghezza d'onda completa alla fine, la bandiera è finita. Rimani piatto fino alla fine.

Puoi presumere che tutte le linee -abbiano la stessa lunghezza e che le linee superiore e inferiore siano interamente composte da (0x2D) e che il resto dei caratteri sia !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~o sia uno spazio ( ). (Quindi il suo valore ASCII è x, dove 31 < x < 127)
La bandiera sarà alta almeno 3 e larga 3.

La lunghezza d'onda sarà un numero intero non negativo (> = 0).

(Puoi anche avere la lunghezza d'onda 1 la lunghezza d'onda più piccola, quindi l'esempio sopra avrebbe lunghezza d'onda 6. Questo è OK.)

Il tuo I / O di flag può essere come matrici di linee o una stringa con più linee.

Il flag di output può avere spazi finali, ma può avere solo spazi iniziali purché sia ​​lo stesso su ogni flag. Lo spazio finale su un flag di input può essere eliminato.

punteggio

Questo è code-golf, quindi vince la soluzione più breve, in byte.

Casi test

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



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



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



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



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



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

4
Mi aspettavo che @LuisMendo venisse qui e lo spazzasse via entro il giorno successivo.
Magic Octopus Urn,

Merda ... Ho dimenticato @ non collega quelli che non hanno risposto ... Qualcuno mi dà un calcio nel culo usando MATL, per favore, così posso cancellare i commenti.
Magic Octopus Urn,

2
Chiunque lo animi
Matthew Roh,

1
@SIGSEGV Fatto , anche se forse non quello che avevi in ​​mente.
Brian McCutchon,

1
@carusocomputing Qualcuno mi ha chiamato? 31 byte, però
Luis Mendo,

Risposte:


11

05AB1E , 25 23 26 25 byte

-2 grazie ad Adnan

-1 grazie a Emigna

+3 grazie a Jonathan Allan (grazie per aver dedicato del tempo a cogliere quell'invalidità!)

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

Provalo online!

Questo è 1 indicizzato invece di 0, +2 byte se non va bene.

ø                                    # 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 - Deve esserci una soluzione migliore per sostituire quelle inclinazioni, ma sono sconcertato.


L'indicizzazione 1 è OK.
Artyer,

1
úè lo stesso di ð×ì:)
Adnan,

1
@Artyer per niente! +3 grazie a lui per aver sottolineato che la mia risposta non era valida, mi piace quando le persone si preoccupano abbastanza di leggere una risposta abbastanza a lungo da notare che non è corretta. L'ho riformulato abbastanza per sembrare meno sarcastico: P?
Magic Octopus Urn

2
@Adnan NESSUNA MERAVIGLIA NON POSSO MAI RISPONDERE A LUI. Mi dispiace per aver massacrato il tuo nome Jonathan Allan .
Magic Octopus Urn

2
Davvero non è un problema :)
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))]))

Provalo online!


5

Gelatina , 29 byte

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

I flag di input e output sono elenchi di righe.
La lunghezza d'onda è 1 indicizzata.
Produce sempre una linea di spazi.
(tutto quanto sopra è esplicitamente consentito nella domanda pubblicata)

Provalo online! (piè di pagina per rendere grazioso IO - prende e riceve flag come testo multilinea)

Come?

Un metodo abbastanza simile alla risposta 05ab1e di carusocomputing , che non sono riuscito a golfare di più.

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

Perché è sempre Jelly a farlo?
Gryphon - Ripristina Monica il

05AB1E ha chiaramente vinto questo round!
Jonathan Allan,

OK, perché è sempre Jelly o 05AB1E a farlo? (Domanda retorica, lo so perché sono lingue da golf)
Gryphon - Reinstate Monica il


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

L'I / O è una stringa delimitata da newline. L'output include una nuova riga principale; questo può essere rimosso al costo di 3 byte. Ho provato a calcolare direttamente la stringa di output ma questo mi ha portato ... 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);

L'I / O è un array di stringhe.


Sembra che l'unico caso di test superato dai tuoi sia quello che non cambia.
Marie,

Sì, questo non funziona correttamente per la maggior parte dei casi di test. (Il primo è stato quello che ho provato)
Artyer,

2
@Artyer Siamo spiacenti, è stato sottile; Non ho riscontrato l'errore off-by-one.
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];

prende il flag dal file statico ae la lunghezza d'onda (minimo 1) da STDIN.
Esegui come pipe php -nro provalo online .

abbattersi

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

Non funziona per le linee nel mezzo: sandbox.onlinephpfunctions.com/code/…
Artyer,

Non dovrebbe trasformare le linee di mezzo in ``. Vedi il test case dopo quello britannico
Artyer,

Sembra tagliare alcuni dei fondi delle bandiere che aumentano molto di dimensioni: sandbox.onlinephpfunctions.com/code/…
Artyer

@Artyer Dovrebbe essere.
Tito,

1
$z&&$z!=$r-1dovrebbe essere equivalente al $z%($r-1)salvataggio di 3 byte.
Christoph,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.