Faire une vague de drapeau

26

Prenez un drapeau, comme celui-ci:

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

Et une entrée numérique: la "longueur d'onde"

Dites la longueur d'onde est 5. Ensuite, tous les 5 caractères le long de la ligne depuis le début, remplacer le caractère suivant un -avec \et décalent tous les personnages après une ligne vers le bas. Répétez cette opération jusqu'à la fin. Vous vous retrouvez avec:

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

Si vous ne parvenez pas à faire une longueur d'onde complète à la fin, le drapeau est terminé. Restez à plat jusqu'à la fin.

Vous pouvez supposer que toutes les lignes sont de la même longueur et que les lignes du haut et du bas sont entièrement composées de -(0x2D) et que le reste des caractères est dans !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~, ou est un espace ( ). (Donc, c'est la valeur ascii est x, où 31 < x < 127)
Le drapeau sera au moins 3 de haut et 3 de large.

La longueur d'onde sera un entier non négatif (> = 0).

(Vous pouvez également avoir la longueur d'onde 1 comme la plus petite longueur d'onde, donc l'exemple ci-dessus aurait la longueur d'onde 6. C'est OK.)

Votre entrée / sortie d'indicateur peut être un tableau de lignes ou une chaîne de plusieurs lignes.

L'indicateur de sortie peut avoir des espaces de fin, mais ne peut avoir que des espaces de début tant qu'il est le même sur chaque indicateur. L'espace de fin d'un indicateur d'entrée peut être supprimé.

Notation

C'est le code-golf, donc la solution la plus courte, en octets, l'emporte.

Cas de test

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



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



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



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



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



-------------------------------------------
|*  *  *  *  * |##########################|
| *  *  *  *  *|                          |
|*  *  *  *  * |##########################|
| *  *  *  *  *|                          |
|*  *  *  *  * |##########################|
| *  *  *  *  *|                          |
|*  *  *  *  * |##########################|
|---------------                          |
|#########################################|
|                                         |
|#########################################|
|                                         |
|#########################################|
-------------------------------------------
0
\
|\
|*\
|  \
|** \
|   *\
|**   \
|   ** \
|**    *\
|-  **   \
|#-    ** \
| #-**    *\
|# #-  **   \
| # #-    ** \
\# # #-**    *\
 \# # #-  **   \
  \# # #-    **|\
   \# # #-**   |#\
    \# # #-  **| #\
     \# # #-   |# #\
      \# # #-**| # #\
       \# # #- |# # #\
        \# # #-| # # #\
         \# # #-# # # #\
          \# # # # # # #\
           \# # # # # # #\
            \# # # # # # #\
             \# # # # # # #\
              \# # # # # # #\
               \# # # # # # #\
                \# # # # # # #\
                 \# # # # # # #\
                  \# # # # # # #\
                   \# # # # # # #\
                    \# # # # # # #\
                     \# # # # # # #\
                      \# # # # # # #\
                       \# # # # # # #\
                        \# # # # # # #\
                         \# # # # # # #\
                          \# # # # # # #\
                           \# # # # # # #\
                            \# # # # # # #\
                             \# # # # # # |
                              \# # # # # #|
                               \# # # # # |
                                \# # # # #|
                                 \# # # # |
                                  \# # # #|
                                   \# # # |
                                    \# # #|
                                     \# # |
                                      \# #|
                                       \# |
                                        \#|
                                         \|
                                          \
Artyer
la source
4
Attendez-vous à ce que @LuisMendo vienne ici et soufflera dans les prochains jours.
Urne de poulpe magique
Merde ... Forgot @ ne relie pas ceux qui n'ont pas répondu ... Quelqu'un me botter le cul en utilisant MATL s'il vous plaît afin que je puisse supprimer les commentaires.
Urne de poulpe magique
2
Tout le monde l'anime
Matthew Roh
1
@SIGSEGV Terminé , mais peut-être pas ce que vous aviez en tête.
Brian McCutchon
1
@carusocomputing Quelqu'un m'a appelé? 31 octets, cependant
Luis Mendo

Réponses:

11

05AB1E , 25 23 26 25 octets

-2 merci à Adnan

-1 grâce à Emigna

+3 merci à Jonathan Allan (merci d'avoir passé du temps à rattraper cette invalidité!)

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

Essayez-le en ligne!

Ceci est indexé 1 au lieu de 0, +2 octets si ce n'est pas correct.

ø                                    # 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 - Il doit y avoir une meilleure solution pour remplacer ces inclinaisons, mais je suis perplexe.

Urne de poulpe magique
la source
L'indexation 1 est OK.
Artyer
1
úest le même que ð×ì:)
Adnan
1
@Artyer pas du tout! +3 merci à lui d'avoir souligné que ma réponse n'était pas valide, j'aime quand les gens se soucient suffisamment de lire une réponse assez longtemps pour remarquer qu'elle n'est pas correcte. L'ai-je reformulé suffisamment pour paraître moins sarcastique: P?
Urne de poulpe magique
2
@Adnan AUCUNE MERVEILLE JE NE PEUX JAMAIS REPONDRE A LUI. Désolé de massacrer votre nom Jonathan Allan .
Urne Magic Octopus
2
Vraiment pas un problème :)
Jonathan Allan
8

Python 2 , 129 octets

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

Essayez-le en ligne!

ovs
la source
5

Gelée , 29 octets

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

Les drapeaux d'entrée et de sortie sont des listes de lignes.
La longueur d'onde est indexée sur 1.
Produit toujours une ligne d'espaces.
(tout ce qui précède est explicitement autorisé dans la question publiée)

Essayez-le en ligne! (pied de page pour rendre IO joli - prend et reçoit des drapeaux sous forme de texte multiligne)

Comment?

Une méthode assez similaire à la réponse 05ab1e de carusocomputing , que je n'ai pas réussi à approfondir .

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
la source
Pourquoi est-ce toujours Jelly qui fait ça?
Gryphon - Rétablir Monica
05AB1E a clairement remporté cette manche!
Jonathan Allan
OK, pourquoi est-ce toujours Jelly ou 05AB1E qui fait ça? (Question rhétorique, je sais que c'est parce que ce sont des langues de golf)
Gryphon - Rétablir Monica
3

MATL , 31 octets

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

Essayez-le en ligne! Ou vérifiez tous les cas de test: 1 , 2 , 3 , 4 , 5 , 6 , 7 .

Luis Mendo
la source
Wow, quelle était la partie chère? Le remplacement du -par le [\]?
urne Magic Octopus
@carusocomputing Oui, je pense que c'est la partie la plus chère
Luis Mendo
2

JavaScript (ES6), 175 octets

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

Les E / S sont une chaîne délimitée par des sauts de ligne. La sortie comprend une nouvelle ligne de premier plan; cela peut être supprimé au coût de 3 octets. J'ai essayé de calculer directement la chaîne de sortie mais cela m'a pris ... 176 octets:

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

Les E / S sont un tableau de chaînes.

Neil
la source
Il semble que le seul cas de test que vous ayez réussi soit celui qui ne change pas.
Marie
Oui, cela ne fonctionne pas correctement pour la plupart des cas de test. (Le premier était ce que j'ai essayé)
Artyer
2
@Artyer Désolé, c'était subtil; Je n'ai pas repéré l'erreur de coup par coup.
Neil
2

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

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

prend le drapeau du fichier statique aet la longueur d'onde (minimum 1) de STDIN.
Exécuter en tant que pipe avec php -nrou l' essayer en ligne .

panne

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
la source
Ne fonctionne pas pour les lignes du milieu: sandbox.onlinephpfunctions.com/code/…
Artyer
Il ne devrait pas transformer les lignes médianes en ``. Voir le cas de test après celui britannique
Artyer
Cela semble couper certains des bas de drapeaux qui augmentent beaucoup de taille: sandbox.onlinephpfunctions.com/code/…
Artyer
@Artyer Ça devrait être ça.
Titus
1
$z&&$z!=$r-1 devrait être équivalent à $z%($r-1) enregistrer 3 octets.
Christoph