Haz una ola de bandera


26

Tome una bandera, como esta:

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

Y una entrada numérica: la "longitud de onda"

Digamos que la longitud de la onda fue 5. Luego, cada 5 caracteres a lo largo de la línea desde el principio, reemplace el siguiente carácter a -con \y desplace todos los caracteres una fila hacia abajo. Repita esto hasta el final. Terminas con:

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

Si al final no puede hacer una onda completa al final, la bandera está terminada. Solo permanece plano hasta el final.

Puede suponer que todas las líneas tienen la misma longitud y que las líneas superior e inferior están compuestas completamente por -(0x2D) y que el resto de los caracteres están en !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~, o es un espacio ( ). (Entonces su valor ascii es x, donde 31 < x < 127)
La bandera tendrá al menos 3 de alto y 3 de ancho.

La longitud de onda será un número entero no negativo (> = 0).

(También puede hacer que la longitud de onda 1 sea la longitud de onda más pequeña, por lo que el ejemplo anterior tendría una longitud de onda 6. Esto está bien).

Su E / S de bandera puede ser como matrices de líneas o una cadena con varias líneas.

El indicador de salida puede tener espacios finales, pero solo puede tener espacios iniciales siempre que sea el mismo en cada indicador. El espacio final en un indicador de entrada se puede eliminar.

Tanteo

Este es el código de golf, por lo que la solución más corta, en bytes, gana.

Casos de prueba

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



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



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



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



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



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

44
Esperando que @LuisMendo venga aquí y explote esto en el próximo día más o menos.
Urna mágica del pulpo

Mierda ... Olvidé @ no vincula a los que no han respondido ... Alguien me patea el trasero usando MATL por favor para que pueda eliminar los comentarios.
Magic Octopus Urn

2
Cualquiera anime esto
Matthew Roh

1
@SIGSEGV Hecho , aunque tal vez no sea lo que tenía en mente.
Brian McCutchon

1
@carusocomputing ¿Alguien me llamó? 31 bytes, sin embargo
Luis Mendo

Respuestas:


11

05AB1E , 25 23 26 25 bytes

-2 gracias a Adnan

-1 gracias a Emigna

+3 gracias a Jonathan Allan (¡gracias por pasar el tiempo para atrapar esa invalidez!)

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

Pruébalo en línea!

Esto está indexado en 1 en lugar de 0, +2 bytes si eso no está bien.

ø                                    # 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: debe haber una mejor solución para reemplazar esos sesgos, pero estoy perplejo.


La indexación 1 está bien.
Artyer

1
úes lo mismo ð×ì:)
Adnan

1
@Artyer en absoluto! +3 gracias a él por señalar que mi respuesta no era válida, me gusta cuando las personas realmente se preocupan lo suficiente como para leer una respuesta lo suficiente como para notar que no es correcta. ¿Lo reformulé lo suficiente como para sonar menos sarcástico: P?
Urna mágica del pulpo

2
@Adnan SIN MARAVILLAS NUNCA PUEDO RESPONDERLE A ÉL. Perdón por descifrar tu nombre Jonathan Allan .
Urna mágica del pulpo

2
Realmente no es un problema :)
Jonathan Allan



5

Jalea , 29 bytes

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

Las banderas de entrada y salida son listas de líneas.
La longitud de onda es 1 indexada.
Siempre produce una línea de espacios.
(todo lo anterior está explícitamente permitido en la pregunta publicada)

Pruébalo en línea! (pie de página para hacer que IO se vea bonita: toma y recibe banderas como texto multilínea)

¿Cómo?

Un método bastante similar a la respuesta 05ab1e de carusocomputing , que no he logrado jugar más al golf.

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

¿Por qué siempre es Jelly quien hace esto?
Gryphon - Restablece a Monica el

05AB1E claramente ganó esta ronda!
Jonathan Allan

OK, ¿por qué siempre es Jelly o 05AB1E lo que hace esto? (Pregunta retórica, sé que es porque son idiomas de golf)
Gryphon - Restablece a Monica el


2

JavaScript (ES6), 175 bytes

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 es como una cadena delimitada por nueva línea. La salida incluye una nueva línea principal; Esto se puede eliminar a un costo de 3 bytes. Intenté calcular la cadena de salida directamente, pero eso me llevó ... 176 bytes:

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 es como una matriz de cadenas.


Parece que el único caso de prueba que pasa el suyo es el que no cambia.
Marie

Sí, esto no funciona correctamente para la mayoría de los casos de prueba. (El primero fue lo que probé)
Artyer

2
@Artyer Lo siento, eso fue sutil; No detecté el error off-by-one.
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];

toma la bandera del archivo estático ay la longitud de onda (mínimo 1) de STDIN.
Ejecutar como tubería php -nro probarlo en línea .

Descompostura

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

No funciona para líneas en el medio: sandbox.onlinephpfunctions.com/code/…
Artyer

No debería convertir las líneas medias en ``. Vea el caso de prueba después del británico
Artyer,

Parece estar cortando algunos de los fondos de banderas que aumentan mucho de tamaño: sandbox.onlinephpfunctions.com/code/…
Artyer

@Artyer Eso debería ser.
Tito

1
$z&&$z!=$r-1debería ser equivalente a $z%($r-1)guardar 3 bytes.
Christoph
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.