육각형 삼각형!


20

당신의 임무는 : 변의 길이와 육각형 삼각형 만들기 n, n긍정적 인 정수 또는 0입니다.

먼저 육각형을 정의하겠습니다.

 / \
|   |
 \ /

(놀라운 ASCII 예술, 맞습니까?)

측면을 공유하여 육각형을 서로 연결할 수 있습니다.

 / \ / \
|   |   |
 \ / \ /

   / \  
  |   |
 / \ /
|   |
 \ /

육각형 삼각형은 다음과 같습니다.

   / \
  |   |
 / \ / \
|   |   |
 \ / \ /

한 육각형 삼각형의 한 변을 만들기 위해서는 한 변의 길이가 2 ~ 2 개의 육각형이 필요합니다. 측면 길이가 1 인 육각형 삼각형은 단일 육각형이며 측면 길이가 0 인 육각형은 비어 있습니다.

더 공식적으로, 육각형 삼각형은 측면으로 연결된 육각형으로 만들어진 삼각형입니다. 상단 육각형은 하단 양쪽의 하단에있는 2 개에 연결됩니다. 왼쪽 하단의 삼각형은 오른쪽 및 오른쪽 상단의 삼각형에 연결되고 오른쪽 하단의 삼각형은 왼쪽 및 상단 왼쪽의 삼각형에 연결됩니다. 모서리 사이 에 육각형이 있으며 반대쪽으로 연결되며 숫자는 n-2입니다. 삼각형이 채워 지지 않았습니다 .

더 많은 예 :

Side length 3:
     / \
    |   |
   / \ / \
  |   |   |
 / \ / \ / \
|   |   |   |
 \ / \ / \ /

Side length 4:
       / \
      |   |
     / \ / \
    |   |   |
   / \ / \ / \
  |   |   |   |
 / \ / \ / \ / \
|   |   |   |   |
 \ / \ / \ / \ /
(This triangle isn't really filled, the borders make it look like there is a hexagon in the middle, but there is not.)

Side length 5:
         / \
        |   |
       / \ / \
      |   |   |
     / \ / \ / \
    |   |   |   |
   / \ /     \ / \
  |   |       |   |
 / \ / \ / \ / \ / \
|   |   |   |   |   |
 \ / \ / \ / \ / \ /

Side length 6:
           / \
          |   |
         / \ / \
        |   |   |
       / \ / \ / \
      |   |   |   |
     / \ /     \ / \
    |   |       |   |
   / \ /         \ / \
  |   |           |   |
 / \ / \ / \ / \ / \ / \
|   |   |   |   |   |   |
 \ / \ / \ / \ / \ / \ /

22
이것에 대한 Hexagony 답변이 없으면 @MartinEnder에 대한 모든 믿음을 잃을 것입니다.
caird coinheringaahing

@Soyoucanreplytomeincomments 여기에 사용자를 속일 수 있다면 그냥 목록에있을 것입니다.
phyrfox


2
나는 차콜에서 짧은 대답을 볼 것으로 기대합니다. 나는 그것을 스스로 할 것이지만, 먼저 그것을 배워야하고, 대신 영화를보고 싶다. 죄송합니다.
Neil

3
@Neil 당신은 완전히 새로운 프로그래밍 언어를 배우지 않은 것을 용서 받았습니다. 그러나 이것이 첫 번째 경고입니다!
caird coinheringaahing

답변:


11

, 62 43 39 바이트

NβF³«F⁻β‹ι²« / \¶|   |¶ \ /Mײι↑¿⁻¹ιM⁶←

온라인으로 사용해보십시오! 편집 : @ASCII 전용으로 일부 바이트를 저장했습니다 (다른 6 10 바이트를 저장 한만큼 정확히 얼마나 많은지 확실하지 않지만 버그 수정에 4 바이트를 소비해야했습니다). 이제 중첩 루프를 사용하면 이것이 모두 함께해야합니다.


45 바이트 : A / \¶| |¶ \ /αNβFβ«α←←»Fβ«α↖↖M⁶←»Fβ«αM⁴↑←←(btw 숯 자동 완료 (필요 »에 따라 필요한 모든 것 ))
ASCII 전용

@ASCII 전용 슬프게도 더 이상 숯 설명서를 찾을 수없는 것 같아서 코드가 무엇을하는지 전혀 모른다.
Neil

명령은 여기 위키에 있습니다 . 기본적으로 Assign(hexagon_with_space_to_left, a);InputNumber(b);for(b){Print(a);Move(:Left);Move(:Left);}for(b){Print(a);Move(:UpLeft);Move(:UpLeft);Move(6, :Left);}for(b){Print(a);Move(4, :Up);Move(:Left);Move(:Left);}각각의 for 루프는 한쪽

그래서 거의 당신이 있지만 변수로 저장된 문자열로 무엇을하고 있는지
ASCII 전용

@ ASCII-only 그리기 방향을 반대로하여 2 바이트를 더 절약 할 수있었습니다. (또한 육각형을 그리는 가장 좋은 방법은 문자열 리터럴이라는 것이 약간 실망 스럽지만 적어도 반복하기 쉽습니다.)
Neil

7

파이썬 2 184 177 174 164 바이트

n=input();p='|   |';e=' \\ /'
for i in range(n):k=' '*(4*i-5);w='  '*~(i-n);print w+[' / \\'*-~i+'\n'+w+p[:4]*i+p,' /'+e+k[3:]+e+' \\\n'+w+p+k+p][2<i<n-1]
print e*n

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

Ørjan Johansen 덕분에 -7 바이트


|맨 위 3과 맨 아래 육각형 행 에서 가장 오른쪽이 누락되었습니다 .
Ørjan Johansen

p[:4]*(i+2)대신 p[:4]*(i+1)그것을 고치는 것 같습니다.
Ørjan Johansen

b한 지점 에서만 사용 하므로 ~트릭 과 결합하면 w=' '*2*~(i-n)7 바이트가 짧습니다.
Ørjan Johansen

@ ØrjanJohansen 고마워, 코드는 많은 리팩토링을 겪었고 그 것들을 바꾸는 것을 잊었다
math junkie

6

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

f=n=>(n=n*2-2,a=[...Array(n+3)].map(_=>Array(n*2+5).fill` `),g=(y,x)=>(a[y+1][x]=a[y+1][x+4]=`|`,a[y][x+1]=a[y+2][x+3]=`/`,a[y][x+3]=a[y+2][x+1]=`\\`),[...Array(n+!n)].map((_,i)=>i%2||(g(n,i*2),g(i,i=n-i),g(i,n+i))),a.map(a=>a.join``).join`
`)
<input type=number oninput=o.textContent=f(this.value)><pre id=o>


4

자바 스크립트 (ES6), 133 (129) 128 126 바이트

두 개의 for 루프를 사용하여 출력 문자를 문자별로 빌드합니다 .

n=>{for(s='',y=n*2,n*=4;~y--;s+=`
`)for(x=n;~x--;)s+=' \\ /|'[x>y-2&x<n-y&(k=x+y&3,x>n-y-6|x<y+4|y<2)?y&1?k:k+1&4:0];return s}

작동 원리

외부 루프에서 yn * 2-1 에서 -1 까지 반복됩니다 . 내부 루프에서 xn * 4-1 에서 -1. 우리 세트 K = (X + Y) (3) 는 육각형을 생성하는 데 사용되는 기본 패턴 인 을 설정합니다.

다음은에 대한 결과 그리드입니다 n = 4.

     15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0 -1
   +---------------------------------------------------
 7 |  2  1  0  3  2  1  0  3  2  1  0  3  2  1  0  3  2
 6 |  1  0  3  2  1  0  3  2  1  0  3  2  1  0  3  2  1
 5 |  0  3  2  1  0  3  2  1  0  3  2  1  0  3  2  1  0
 4 |  3  2  1  0  3  2  1  0  3  2  1  0  3  2  1  0  3
 3 |  2  1  0  3  2  1  0  3  2  1  0  3  2  1  0  3  2
 2 |  1  0  3  2  1  0  3  2  1  0  3  2  1  0  3  2  1
 1 |  0  3  2  1  0  3  2  1  0  3  2  1  0  3  2  1  0
 0 |  3  2  1  0  3  2  1  0  3  2  1  0  3  2  1  0  3
-1 |  2  1  0  3  2  1  0  3  2  1  0  3  2  1  0  3  2

짝수 행에서 셀은 k = 3 일 때 파이프 문자로 채워집니다. 이면 지고 그렇지 않으면 공백 . 파이프는 참조 문자열에서 5 번째 문자 " \ /|"이므로 올바른 색인은 (k + 1) & 4로 제공 됩니다.

홀수 행에서 각 셀은 참조 문자열에서 해당 문자로 직접 채워집니다.

  • k = 0 → 공간
  • k = 1 → "\"
  • k = 2 → 공간
  • k = 3 → "/"

아래는 업데이트 된 예입니다 (공백이 점으로 대체 됨).

     15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0 -1
   +---------------------------------------------------
 7 |  .  \  .  /  .  \  .  /  .  \  .  /  .  \  .  /  .
 6 |  .  .  |  .  .  .  |  .  .  .  |  .  .  .  |  .  .
 5 |  .  /  .  \  .  /  .  \  .  /  .  \  .  /  .  \  .
 4 |  |  .  .  .  |  .  .  .  |  .  .  .  |  .  .  .  |
 3 |  .  \  .  /  .  \  .  /  .  \  .  /  .  \  .  /  .
 2 |  .  .  |  .  .  .  |  .  .  .  |  .  .  .  |  .  .
 1 |  .  /  .  \  .  /  .  \  .  /  .  \  .  /  .  \  .
 0 |  |  .  .  .  |  .  .  .  |  .  .  .  |  .  .  .  |
-1 |  .  \  .  /  .  \  .  /  .  \  .  /  .  \  .  /  .

다음 공식에서 우리는 정의합니다 가독성을 위해 N = n * 4 를합니다 (코드에는 동일한 변수가 사용되지만).

삼각형 모양은 다음을 테스트하여 얻습니다.

  • x> y-2 → 오른쪽 모서리 제거
  • AND x <N-y → 왼쪽 모서리 제거

그리고 내부 부분은 다음과 같이 테스트하여 제거됩니다.

  • x> N-y-6 → 왼쪽 가장자리 만 유지
  • 또는 x <y + 4 → 오른쪽 가장자리 만 유지
  • OR y <2 → 아래쪽 가장자리 만 유지

데모


합니까의 [x>y-2&x<n-y&(x>n-y-6|x<y+4|y<2)&&y&1?x+y&3:x-~y&4]작업?
Neil

@ Neil Hmm, 나는 그렇게 생각하지 않습니다. 삼항식 주위에 괄호가 필요 (x+y+1)&4하며와 같지 않습니다 (((x+y)&3)+1)&4.
Arnauld

물론 아닙니다. 내가 무슨 생각을했는지 ...
Neil

3

젤리 ,  62  61 바이트

현재 6 개의 식스가 들어 있습니다.

_‘<×⁸>6
Rµ‘⁾| ẋ⁾/\ẋ⁸¤ż;/K€µ⁶ðMṀ_6r6ẋð¦"Jç¥
ḤḶUẋ@€⁶;"ǵ-ịṙ6ṭ⁸Y

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

방법?

_‘<×⁸>6 - Link 1, should we eat the praline? row number, triangle size
_       - row number minus triangle size
 ‘      - plus one
  <     - less than triangle size? (1 if one of the last rows else 0)
   ×⁸   - multiply by row number   (row number or 0)
     >6 - greater than 6?          (row number if between row 6 and last two rows)

Rµ‘⁾| ẋ⁾/\ẋ⁸¤ż;/K€µ⁶ðMṀ_6r6ẋð¦"Jç¥ - Link 2, build a solid triangle: triangle size
                                              (except the very bottom row)
R                                  - range: [1,2,...,size]
 µ                                 - monadic chain separation, call that r
  ‘                                - increment: [2,3,...,size+1]
   ⁾| <space                       - literal "| "
      ẋ                            - repeat: ["| | ","| | | ",...]
            ¤                      - nilad followed by link(s) as a nilad:
       ⁾/\                         -   literal "/\"
           ⁸                       -   link's left argument, r
          ẋ                        -   repeat (vectorises): ["/\","/\/\",...]
             ż                     - zip the two repeated lists together: [["/\","| | "],["/\/\","| | | "],...]
              ;/                   - reduce by concatenation: ["/\","| | ","/\/\","| | | ",...]
                K€                 - join with spaces for €ach: ["/ \","|   |  ","/ \ / \","|   |   |  ",...]
                  µ                - monadic chain separation call that s
                                 ¥ - last two links a a dyad:
                               J   -   range(length(s))  
                                ç  -   call the last (1) link as a dyad (left = result of J, right = size)
                              "    - zip with: (call those d)
                    ð       ð¦     -   apply to indexes:
                   ⁶               -   a literal space character
                     M             -     indexes of maximal elements in an element of s (a row)
                      Ṁ            -     maximum (this is the rightmost non-space index, MṀ working like length ignoring trailing spaces)
                       _6          -     subtract 6  (6 indexes back from the right)
                         r6        -     range from there to 6, i.e [l-6,l-7,...,6]
                           ẋ       -     repeat d times (1 or 0), thus applying to the middle rows but not the bottom and top ones.

ḤḶUẋ@€⁶;"ǵ-ịṙ6ṭ⁸Y - Main link: triangle size
Ḥ                  - double(size)
 Ḷ                 - unlength: [0,1,2,...,double(size)-1]
  U                - upend: [double(size)-1,...,2,1,0]
      ⁶            - literal space character
   ẋ@€             - repeat for €ach with reversed arguments ["  ...  ",...,"  "," ",""]
         Ç         - call the last link (2) as a monad(size)
       ;"          - zip with concatenation (zips the leading spaces with the solid triangle body)
          µ        - monadic chain separation, call that t
           -ị      - index -1 (last but one row of t)
             ṙ6    - rotate left by 6 (any number congruent to 2 mod 4 would do)
               ṭ⁸  - tack to t (add this new row on)
                 Y - join all the rows by new lines
                   - implicit print

>설명에 빠진 부분이 있습니다 ( <space)
Roman Gräf

@ RomanGräf 감사합니다 설명을 편집했습니다! " 설명의 공간 아래가 잘못 정렬되었습니다" 이상을 의미하는 경우 알려주십시오.
Jonathan Allan


1

Mathematica, 155 바이트

""<>Table[If[i+j<d||i-j>d+1||i+j>d+5&&i-j<d-3&&j<d-1," ",Switch[Mod[i+d+{j,-j},4],{1,3},"/",{3,1},"\\",{1,1},"|",_," "]],{j,(d=2#)+1},{i,4#+1}]~Riffle~"\n"&

\n줄 바꿈으로 대체.

더 읽기 쉬운 :

"" <> Table[
    If[i+j < d || i-j > d+1 || 
      i+j > d+5 && i-j < d-3 && j < d-1, " ", 
     Switch[Mod[i+d+{j,-j}, 4], {1, 3}, "/", {3, 1}, 
      "\\", {1, 1}, "|", _, " "]], {j, (d=2#)+1}, {i, 4#+1}]~
   Riffle~"\n" &

가로 1에서 4 n + 1 사이의 i 및 세로 1에서 2 n + 1 사이의 j 로 색인화 된 문자 배열을 작성합니다 . 먼저 육각형 격자를 채 웁니다.Switch[Mod[i+d+{j,-j},4],{1,3},"/",{3,1},"\\",{1,1},"|",_," "]

 \ / \ / \ / \ / 
  |   |   |   |  
 / \ / \ / \ / \ 
|   |   |   |   |
 \ / \ / \ / \ / 
  |   |   |   |  
 / \ / \ / \ / \ 
|   |   |   |   |
 \ / \ / \ / \ / 

그런 다음 If[i+j<d||i-j>d+1||i+j>d+5&&i-j<d-3&&j<d-1," ",...]이를 " "채워지지 않은 삼각형 외부 로 바꿉니다 .

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