깃발을 흔들다


26

다음과 같이 깃발을 가져 가십시오.

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

그리고 숫자 입력 : "파장"

파장이 5라고 가정합니다. 그런 다음 처음부터 줄을 따라 5 자마다 다음 문자를 a -로 바꾸고 한 문자 \아래로 모든 문자를 바꿉니다. 끝날 때까지 이것을 반복하십시오. 당신은 결국 :

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

끝에서 전체 파장을 만들 수 없으면 플래그가 완성됩니다. 끝까지 평평하게 유지하십시오.

모든 줄의 길이가 같고 맨 위 줄과 맨 아래 줄이 모두 -(0x2D) 로 구성되고 나머지 문자가에 !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~있거나 공백 ( )이라고 가정 할 수 있습니다. (그것의 아스키 값이 그래서 x, 어디 31 < x < 127)
플래그는 넓은 적어도 높이 3과 3 할 것이다.

파장은 음이 아닌 정수 (> = 0)입니다.

(파장 1을 가장 작은 파장으로 설정할 수도 있으므로 위의 예는 파장 6을 갖습니다. 괜찮습니다.)

플래그의 i / o는 행 배열 또는 여러 행이있는 문자열 일 수 있습니다.

출력 플래그에는 후행 공백이있을 수 있지만 모든 플래그에서 동일하면 선행 공백 만 가질 수 있습니다. 입력 플래그의 후행 공간이 삭제 될 수 있습니다.

채점

이것은 코드 골프이므로 바이트 단위의 가장 짧은 솔루션이 승리합니다.

테스트 사례

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



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



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



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



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



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

4
@LuisMendo가 여기에 와서 다음 날 안에 이것을 날려 버릴 것으로 기대합니다.
Magic Octopus Urn

Crap ... 응답을받지 못한 사람들을 @ 잊어 버렸습니다 ... 누군가 MATL을 사용하여 엉덩이를 걷어차 서 댓글을 삭제할 수 있습니다.
Magic Octopus Urn

2
누구나 이것을 애니메이션
Matthew Roh

1
@SIGSEGV Done , 아마도 당신이 생각한 것이 아닐 수도 있습니다.
Brian McCutchon

1
@carusocomputing 누군가 전화 했나요? 31 바이트,
Luis Mendo

답변:


11

05AB1E , 25 23 26 25 바이트

Adnan 덕분에 -2

Emigna 덕분에 -1

Jonathan Allan 덕분에 +3

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

온라인으로 사용해보십시오!

0이 아닌 1 인덱싱되며 +2 바이트는 괜찮습니다.

ø                                    # 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-이러한 경사를 대체 할 수있는 더 나은 솔루션이 있었지만, 나는 엉망이되었습니다.


1 인덱싱이 정상입니다.
Artyer

1
úð×ì:) 와 동일
Adnan

1
@ 아티스트 전혀! 내 답변이 유효하지 않다는 점을 지적한 덕분에 +3 덕분에 사람들이 실제로 답변을 읽기에 충분히 오래 신경 써서 그것이 틀렸다는 것을 알 때 좋아합니다. 덜 냉소적 인 소리를 낼 정도로 충분히 말했습니까?
Magic Octopus Urn

2
@Adnan 더 이상 대답 할 수 없습니다. 당신의 이름을 Jonathan Allan을 도살해서 죄송합니다 .
Magic Octopus Urn

2
정말 문제가되지 않습니다 :)
Jonathan Allan



5

젤리 , 29 바이트

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

입력 및 출력 플래그는 행 목록입니다.
파장은 1 인덱스입니다.
항상 한 줄의 공백을 생성합니다.
(위의 모든 내용은 게시 된 질문에 명시 적으로 허용됩니다)

온라인으로 사용해보십시오! (IO가 예쁘게 보이도록 바닥 글-여러 줄 텍스트로 플래그를 받아받습니다)

방법?

carusocomputing의 05ab1e answer 와 매우 비슷한 방법으로 , 더 이상 골프를 치지 못했습니다.

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

왜 항상 젤리입니까?
그리폰-복원 모니카

05AB1E는 이번 라운드에서 분명히 승리했습니다!
Jonathan Allan

좋아, 왜 항상 Jelly 또는 05AB1E입니까? (수사학적인 질문, 그것이 골프 언어이기 때문에 알고있다)
그리폰 (Gryphon


2

자바 스크립트 (ES6), 175 바이트

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는 개행으로 구분 된 문자열입니다. 출력에는 선행 줄 바꿈이 포함됩니다. 3 바이트의 비용으로 제거 할 수 있습니다. 출력 문자열을 직접 계산하려고 시도했지만 176 바이트가 걸렸습니다.

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는 문자열 배열입니다.


통과하는 유일한 테스트 사례는 변경되지 않는 것 같습니다.
Marie

예, 대부분의 테스트 사례에서는 제대로 작동하지 않습니다. (첫 번째는 제가 시도한 것입니다)
Artyer

2
@Artyer 죄송합니다. 미묘했습니다. 나는 하나 하나의 오류를 발견하지 못했습니다.
Neil

2

PHP, 168 164 187 172 167 153 150 152 149 바이트

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

정적 파일에서 플래그를 가져 a오고 STDIN에서 파장 (최소 1)을 가져옵니다.
파이프로 실행 php -nr하거나 온라인으로 사용해보십시오 .

고장

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


중간 줄을``로 바꾸면 안됩니다. 영국 사건 이후 테스트 사례보기
Artyer

: 그것은 그 크기가 증가 많은 플래그의 바닥의 일부 차단 될 것으로 보인다 sandbox.onlinephpfunctions.com/code/...
Artyer

@Artyer 그게 다야.
Titus

1
$z&&$z!=$r-1$z%($r-1)3 바이트 저장 과 동일해야합니다 .
Christoph
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.