육각형 확장


24

ASCII 아트 육각형을 입력으로 받으면, 측면이 모두 1 단위 더 긴 것을 출력하십시오.

                     _____
  ____              /     \
 /    \            /       \
/      \          /         \
\       \   =>    \          \
 \      /          \         /
  \____/            \       /
                     \_____/

입력 육각형은 180도 대칭이지만 측면이 모두 다른 길이 일 수 있습니다. 위의 측면 길이 (2, 4, 3)는 (3, 5, 4)로 확대됩니다. 변의 길이는 0이 아닙니다.

육각형은 밑줄 _, 슬래시 /및 백 슬래시로 구성 \됩니다. 밑줄로 만든 가로 가장자리의 위쪽 가장자리는 자체 선에 있지만 아래쪽 가장자리는 그렇지 않습니다.

I / O

나는 stickler가 될 것이고 여기에 형식이 필요 합니다 : 입력과 출력은 줄 목록이 아니라 이미지를 나타내는 줄 바꿈이있는 문자열이어야합니다. 물론 코드에서 각 줄을 차례로 인쇄하여 이미지를 생성하거나 언어에서 입력 할 수있는 시간에 한 줄씩 STDIN을 읽을 수 있습니다.

세부

원하는 경우 입력에 선택적인 후행 줄 바꿈이 포함될 수 있지만 그렇지 않으면 빈 줄이 없습니다. 입력에 후행 공백이 없거나 각 행을 같은 길이 (가장 긴 행의 길이)로 채우는 공백을 선택할 수 있습니다.

출력은 입력과 같이 화면의 왼쪽 가장자리와 수평이되어야합니다. 위와 아래에 추가 줄 바꿈과 후행 공백이있을 수 있습니다.

테스트 사례

입력과 출력.

 _
/ \
\_/

  __
 /  \
/    \
\    /
 \__/

  ____
 /    \
/      \
\       \
 \      /
  \____/

   _____
  /     \
 /       \
/         \
\          \
 \         /
  \       /
   \_____/

     _
    / \
   /  /
  /  /
 /  /
/  /
\_/

      __  
     /  \
    /    \
   /     /
  /     /
 /     /
/     /
\    /
 \__/

리더 보드

<iframe src="https://xmikee1.github.io/ppcg-leaderboard/?id=185760" width="100%" height="100%" style="border: none;">Oops, your browser is too old to view this content! Please upgrade to a newer version of your browser that supports HTML5.</iframe><style>html,body{margin:0;padding:0;height:100%;overflow:hidden}</style>


출력 육각형은 동일하지만 더 커야합니까, 아니면 적절한 측면 길이를 가진 육각형 일 수 있습니까?
Stephen

1
@Stephen 같은 방향으로 동일해야하지만 더 커야합니다.
xnor

2
이것은 정말 잘 쓰여진 도전의 훌륭한 예입니다. 짧고 명확하며 요점. 작은 제안을해도 될까요? 영어가 모국어가 아닌 모든 사용자에게 "스티커"가 명확하지 않을 수 있습니다. "허용 할 것입니다 ..."또는 이와 유사한 것을 이해하기가 더 쉬울 것이라고 제안 할 수 있습니까? 어쨌든 +1.
ElPedro

배열 / IEnumerable문자를 반환 할 수 있습니까 ?
무지의 구현

@ 무지의 구현 예, 필요한 줄 바꿈 문자가 있으면 괜찮습니다.
xnor

답변:



5

레티 나 0.8.2 , 84 바이트

m`(¶.*)( .)$
$1   $2
(_+¶)(( */)  ( *.))
 _$1 $3$4¶$2
( *.)(_+/)$
$1$.2$*   /¶ $1_$2

온라인으로 사용해보십시오! 불규칙한 육각형에서 작동합니다. I / O가 채워지지 않았습니다. 설명:

m`(¶.*)( .)$
$1   $2

육각형의 내부를 넓 힙니다.

(_+¶)(( */)  ( *.))
 _$1 $3$4¶$2

상단을 수정하십시오.

( *.)(_+/)$
$1$.2$*   /¶ $1_$2

바닥을 고정하십시오.


5

자바 스크립트 (ES6)  159 156 153  150 바이트

s=>s[r='replace'](/\S /g,'$&   ')[r](/.*/,s=>s[r](e=/_+/,` $&_
`+s[r](e,'/$& \\')[r](e=/_/g,' ')))[r](/ *\\_+/,s=>s[r](e,' ')+`   /
 `+s[r](/_/,'__'))

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

댓글

NB : 아래의 대체 문자는 정규식 구분 기호에 SE 구문 형광펜이 방해되지 않도록하기 위해 사용됩니다.

s =>                       // s = input
  s[r = 'replace'](        // r = alias for 'replace'
                           // STEP #1
    \S g,                // insert two middle spaces for all lines
    '$&   '                // that contain a border, followed by a space
  )                        // (i.e. all lines except the first and the last one)
  [r](                     // STEP #2
    ∕.*∕,                  // isolate the first line
    s =>                   // let s be this first line
      s[r](                //
        e = _+∕,          // find the sequence of underscores and replace it with:
        ` $&_\n` +         //   the same sequence preceded by a space and followed by '_'
        s[r](              //   followed by a linefeed and:
          e,               //     the same sequence preceded by '/' and followed by ' \'
          '/$& \\'         //     
        )                  //     with:
        [r](e = _g, ' ') //     all underscores replaced with spaces
  ))                       //
  [r](                     // STEP #3
     *\\_+∕,              // isolate the last line, without the trailing '/'
    s =>                   // let s be this last line
      s[r](e, ' ') +       // replace all underscores with spaces
      `   /\n ` +          // append 3 spaces and a trailing '/', followed by a linefeed
      s[r](∕_∕, '__')      // append s with an extra underscore
  )                        //

2

, 48 바이트

SθW¬№ω_≔⁺ωSω≔⊕⊘№ω\η≔⊕⊘№ω/ζ≔×_⊕№ω_θ↗ζθ↓↘η←↙ζ↑←θ↖η

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

SθW¬№ω_≔⁺ωSω

첫 줄을 제외한 모든 줄을 입력하고 연결합니다. (JSON 형식으로 입력하면 11 바이트를 절약 할 때 대부분이 필요하지 않습니다.)

≔⊕⊘№ω\η≔⊕⊘№ω/ζ≔×_⊕№ω_θ

수 카운트 /S, /S, 그리고 _스트링 및 (경우에 새로운 측면의 길이를 계산하는 것을 사용이야 _의 문자열로의 _그 길이 (S)).

↗ζθ↓↘η←↙ζ↑←θ↖η

확대 된 육각형을 그립니다.

대체 솔루션, 48 바이트 :

SθW¬№ω_≔⁺ωSω≔⁺θωθF²«≔E\/_⊕⊘№θκη×_⊟ηM⁰¬ιFη«↷¹κ↷¹¶

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

SθW¬№ω_≔⁺ωSω≔⁺θωθ

모든 줄을 입력하십시오. JSON 형식으로 입력하면 17 바이트를 절약 할 수 있습니다.

F²«

육각형의 오른쪽 상단과 왼쪽 하단을 별도로 그립니다.

≔E\/_⊕⊘№θκ

의 수를 세어 /의, /들, 그리고 _캐릭터와 새로운 측면의 길이를 계산하는 것을 사용이야.

η×_⊟ηM⁰¬ι

상단 또는 하단을 출력하고 이것이 상단 라인 인 경우 라인을 아래로 이동하십시오.

Fη«↷¹κ↷¹¶

오른쪽 또는 왼쪽을 모두 그립니다.


2

APL (Dyalog Unicode) , 75 74 바이트 SBCS

' /\_'∘{⍺[a×1=(+⍀×a)⌊⊖+⍀⊖×a2⌈/{⊃0~⍨1⌷⍵,⍨⍉⍵}⌺3 3(0,0,⍨⍉)⍣3⍉⍺⍳↑⍵]}'.+'s'&'

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

'.+'⎕s'&' 입력을 라인으로 나누기

↑⍵ 라인을 행렬로 혼합

⍺⍳교체 ' /\_'0 1 2 3

(0,0,⍨⍉)⍣3⍉ 상단 및 하단에 0의 레이어와 왼쪽 및 오른쪽에 0의 레이어로 둘러싸십시오.

{⊃0~⍨1⌷⍵,⍨⍉⍵}⌺3 3 각 셀에 대해 중심이 아닌 3x3 이웃에서 위, 아래, 왼쪽, 오른쪽에서 0이 아닌 첫 번째를 선택하십시오.

2⌈/ 가로로 최대 쌍

a×1=(+⍀×a)⌊⊖+⍀⊖×a← 0이 아닌 외부 경계 만 유지

⍺[ ]교체 0 1 2 3' /\_'



0

펄 (5) , 177 (156) 145 바이트

@l=pop=~/.+/g;splice@l,$_,0,$l[$_]=~s,_, ,gr for-1,1;$l[$_]=~s, (\S)( +)(\S),$_<2?" $1$2 $3":"$1$2   $3",e for 1..@l-2;join("\n",@l)=~s,_+,$&_,gr

더 짧을 수 있습니까? 얼마나 아직 보지 못합니다. 주석과 줄 바꿈 및 머리글 + 바닥 글 추가 :

sub f {
@l=pop=~/.+/g;                                                      #1
splice@l,$_,0,$l[$_]=~s,_, ,gr for-1,1;                             #2
$l[$_]=~s, (\S)( +)(\S),$_<2?" $1$2 $3":"$1$2   $3",e for 1..@l-2;  #3
join("\n",@l)=~s,_+,$&_,gr                                          #4
}

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

Line # 1은 여러 줄 입력 문자열을 @l 배열로 분할합니다.

2 번 줄은 _ 문자없이 두 번째와 마지막 줄을 복제합니다.

3 번 라인은 2 번 라인에서 마지막에 필요한 공간을 추가합니다.

라인 # 4는 하나의 _로 두 개의 ___면을 넓히고 @l 배열의 배열을 하나의 여러 줄 문자열로 반환합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.