다이아몬드 두 배


25

문제

양의 정수 n가 주어지면n < 100

다음과 같이 다이아몬드 패턴을 출력하십시오.

입력 n=1

/\/\
\/\/

입력 n=2:

 /\      /\
//\\/\/\//\\
\\//\/\/\\//
 \/      \/

입력 n=3:

  /\                /\
 //\\  /\      /\  //\\
///\\\//\\/\/\//\\///\\\
\\\///\\//\/\/\\//\\\///
 \\//  \/      \/  \\//
  \/                \/

입력 n=4:

   /\                              /\
  //\\    /\                /\    //\\
 ///\\\  //\\  /\      /\  //\\  ///\\\
////\\\\///\\\//\\/\/\//\\///\\\////\\\\
\\\\////\\\///\\//\/\/\\//\\\///\\\\////
 \\\///  \\//  \/      \/  \\//  \\\///
  \\//    \/                \/    \\//
   \/                              \/

등등.

규칙

  • 프로그램 및 기능이 허용됩니다.
  • 후행 공백이 허용됩니다.
  • 허용 되지 /않거나 \허용 되지 않는 행의 선행 공백 .
  • 후행 및 선행 개행이 허용됩니다.
  • 바이트 단위의 최단 코드 승리

이것은 아마도 꽤 관련이 있습니다


2
@carusocomputing 당신은 지금 환각하고 있습니다 ...
Outgolfer Erik


1
@dzaima와 함께 샌드 박스에!
Magic Octopus Urn

1
@carusocomputing 물론이지만, 먼저 왜 그리고 어떻게 발생했는지 알아 내야합니다. p
dzaima

답변:


12

SOGL V0.12 , 24 바이트

ā.∫ā;∫ \*+}ø┼↔±╬¡;øΚ┼}╬³

여기 사용해보십시오!

설명:

ā                         push an empty array (the main canvas)
 .∫                  }    iterate over the input, pushing 1-indexed iteration
   ā;                       push an empty array below the iteration
     ∫    }                 iterate over the iteration counter
       \*                     push current iteration amount of slashes
         +                    append those to the 2nd array
           ø┼               append nothing (so it'd space the array to a square)
             ↔±             reverse horizontally (swapping slashes)
               έ           quad-palindromize with 0 overlap and swapping characters as required
                 ;          get the canvas ontop
                  øΚ        prepend to it an empty line (so the now bigger romb would be one up)
                    ┼       append horizontally the canvas to the current romb
                      ╬³  palindromize horizontally with no overlap and swapping characters

2
와우, 그것은 아픈 명령입니다.
Magic Octopus Urn

@carusocomputing 최근에 추가 한 것. 관련 파일 . 여전히 남아있는 190 개의 문자로 무엇을해야하는지 알아 내야합니다
dzaima

와우, SOGOL에 190 개의 무료 명령이 있고 이미 이것을 효율적으로 골프를 타실 수 있습니까?
매직 문어 Urn

1
@carusocomputing 나는 lol에 대한 190 개의 무료 명령을 의미했다
dzaima

2
@carusocomputing 그러나 재미있는 사실로, 대략 약 90/256 문자는 구현되지 않으며 61/256에는 문서가 없습니다
dzaima

7

, 30 27 바이트

F⁺¹N«Fι«F⁴«↙⁻ικ↑⟲T»←»Mι←»‖M

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명 : 대각선 움직임이 동일한 패리티의 사각형에 머무르기 때문에 숯의 드로잉 프리미티브는 다이아몬드를 그릴 수 없습니다. 편집 : 새로운 해결책은 다이아몬드의 한면을 그린 다음 전체면을 회전하여 다음면을 그릴 준비를하여 다이아몬드를 루프로 그릴 수 있도록하는 것입니다. 그런 다음이 루프는 루프에 포함되어 각 다이아몬드의 모든 내부 다이아몬드를 그립니다. 가장 바깥 쪽 루프는 서로 인접한 모든 다이아몬드를 그립니다. 마지막으로 이미지가 미러링됩니다.

이후 Charcoal이 확장되었으며를 사용하여 다른 바이트를 저장할 수 있습니다 Increment.


필요할 때 0.5 문자 이동은 어디에 있습니까 :(
CalculatorFeline

6

APL (Dyalog) , 70 69 66 바이트

B←{'/\ '['\/'⍳⍺⍺⍵]}
C←⊢,⌽B
C(⊢⍪⊖B)⊃,/{C⊖A↑⊖' /'[⍵≤∘.+⍨⍳⍵+1]}¨⌽⍳A←⎕

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

⎕IO←0많은 시스템에서 표준이라고 가정 하므로 프로그램은 0 색인화됩니다.

이것은 STDIN을 통해 입력을받는 tradfn입니다.

설명

(약간 구식)

참고 왼쪽 인자이다가, 오른쪽 인자이며, ⍺⍺왼쪽 연산자입니다.

B다이아몬드를 미러링하는 데 도움이되는 기능입니다. 문자열을 오른쪽 인수로 사용하고 역함수를 왼쪽으로 사용합니다 ( B연산자도 마찬가지 임).

B←{'/\ '['\/'⍳⍺⍺⍵]}
              ⍺⍺⍵            Apply ⍺⍺ on 
         '\/'               Find the index of the reflected string in '\/' (if the character is not found in `'\/'`, then return an index out of the bounds of the string, ie `2` if the character is a space)
   '/\ '[        ]           Use these indexes on '/\ ' to reflect the '/\' characters

이제 우리는 프로그램의 주요 부분으로갑니다.

A←⎕              Assign the input to variable A
                Create a range 0 .. A-1
                Reverse it so that it becomes A-1 .. 0
¨                For each element do (the right argument is the element):
 ⍳⍵+1             Create a range 0 .. 
 ∘.+⍨             Create an addition table using the range to result in a matrix like so:
                   0+0 0+1 0+2 .. 0+⍵
                   1+0 1+1 1+2 .. 1+⍵
                   2+0 2+1 2+2 .. 2+⍵
                   ...
                   ⍵+0 ⍵+1 ⍵+2 .. ⍵+⍵
 ⍵≤              The elements of the matrix that are greater than or equal to the ⍵,
                 this creates a triangle matrix that looks like this:
                   0 0 .. 0 1
                   0 0 .. 1 1
                   ..
                   1 1 .. 1 1
 ' /'[...]       Index it in ' /' to get a character matrix
                 (ie replace 0s with spaces and 1s with '/'s)
                Flip this vertically
 A              Pad the top spaces

범위 내의 모든 요소에 대해 생성 된 모든 삼각형의 ⌽⍳A높이가 같아서 나중에 서로 연결할 수 있도록하는 데 필요합니다.

                Flip the matrix vertically again to go back to the original state
 (⊢,  )          Concatenate it with
    B           itself, but flipped horizontally
,/              Concatenate all triangles formed by the range operator
               The resulting matrix is nested, so this operator "un-nests" it

이제 패턴의 왼쪽 상단이 완료되었습니다. 남아있는 것은 수직으로 뒤집은 다음 수평으로 뒤집는 것입니다.

(⊢⍪⊖B)          Concatenate the resulting matrix with itself but flipped vertically
                (the vertically flipped matrix is concatenated below of the original matrix)
                Now the left part of the pattern is complete
(⊢,⌽B)         Concatenate the resulting matrix with itself flipped horizontally

그리고 그게 다야! 출력은 /\s가 있고 공백으로 채워진 문자 행렬입니다 .


6

05AB1E , 47 43 41 35 34 33 32 바이트

'/×ηηvy∞.C.Bø€∞¹NαGð.ø}})øíJ.B»∞

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

(3 가지 개선을 제안한 @Emigna 덕분에 4 바이트)


이 설명은 이전 버전에 대한 것이 었으며 그 이후로 몇 번의 반복이있었습니다.

>                                          # [2]
 '/×                                       # ['//']
    η                                      # ['/','//']
     €η                                    # [['/'], ['/', '//']]
       vy                    }             # {For each element...}
         ∞                                 # Mirror horizontally.
          ¶¡                               # Split mirror on newlines.
            N£                             # Shave each diamond down a layer.
              .C                           # Horizontal center.
                .B                         # Pad for the transpose.
                  ø                        # Transpose.
                   €∞                      # Mirror each (vertically).
                     ¹NαFð.ø}              # Pad each list for transpose (verticaly).
                              )            # Wrap back to list...
                               €.B         # Pad each horizontally.
                                  ¦        # Remove the random numbers?
                                   ø       # Back to horizontal...
                                    €R     # Reverse to get correct order.
                                      J    # Join, no spaces.
                                       »   # Join newlines.
                                        ∞  # Final horizontal mirror.

당신의 다이아몬드 사이에 공백이 있습니다
LiefdeWen

@LiefdeWen입니다 좋아? 줄 바꿈과 선행 줄 바꿈이 있습니까?
Magic Octopus Urn

η이 문자열과 동일하므로 접미사 대신 접두사 를 사용할 수 있습니다 .
Emigna 2016 년

¨여기와 동일 하며 €R입니다 í.
Emigna 2016 년

@Emigna 나는 그 중 일부를 골랐지만, 감사합니다! 100 % 다른 33 바이트 응답을 시도합니다 .P?
Magic Octopus Urn

5

CJam , 65 63 바이트

q~_,:)_W%\+f{_2*S*a@2$-*\_,f{)'/*\Se[_W%'/'\er+}_W%Wf%+1$++}zN*

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

설명

이 설명에서는 입력 번호를이라고 n합니다.

q~        e# Read and eval the input (push n to the stack).
_,        e# Copy it an get the range [0 .. n-1].
:)        e# Increment each element to get [1 .. n].
_W%       e# Copy it and reverse it.
\+        e# Prepend the reverse to the original range, resulting in [n n-1 .. 1 1 .. n-1 n].
f{        e# Map over each number x in the range using n as an extra parameter:
 _2*S*a   e#  Push a string containing n*2 spaces, and wrap it in an array.
 @2$-     e#  Push n-x.
 *        e#  Repeat the space string from before n-x times.
 \        e#  Bring x back to the top.
 _,       e#  Copy it and get the range [0 .. x-1].
 f{       e#  Map over each number y in this range, using x as an extra parameter:
  )       e#   Increment y.
  '/*     e#   Repeat '/' y times.
  \Se[    e#   Pad the resulting string to length x by adding spaces to the left.
  _W%     e#   Copy the result and reverse it.
  '/'\er  e#   Replace '/' with '\' in that.
  +       e#   Concatenate to the other string. This forms one row of one diamond.
 }        e#  (end map, now we have the top half of a diamond of size x)
 _W%      e#  Copy the half-diamond and reverse it.
 Wf%      e#  Reverse each row.
 +        e#  Concatenate to the top half. Now we have a full diamond of size x.
 1$++     e#  Put the spaces from before at the beginning and end. This is to pad the top
          e#  and bottom of the smaller diamonds.
}         e# (end map)
z         e# Transpose.
N*        e# Join with newlines. Implicit output.

호기심 e#에서 설명에 왜 ?
Magic Octopus Urn

1
@carusocomputing 주석이므로 설명 자체를 실행할 수 있습니다. 꼭 필요한 것은 아니지만 ¯ \ _ (ツ) _ / ¯
Business Cat

1
@carusocomputing는 #CJam에 코멘트하지 않습니다 - sourceforge.net/p/cjam/wiki/Basic%20operators/#number-sign - 다른 많은 언어 임에도 불구하고. CJam은 골프 언어이기 때문에 모든 한 문자 명령이 골프에 적합한 기능에 사용됩니다. 주석은 ungolfed 코드에만 유용하므로 2 문자 시퀀스를 사용하므로 한 문자 시퀀스를 다른 용도로 사용할 수 있습니다.
Joe

3

파이썬 (2) , 152 (147) 143 140 바이트

musicman523 덕분에 -1 바이트

n=input()
r=range(n)
r+=r[::-1]
for x,i in enumerate(r):a,b='/\\\/'[i<x::2];s=' '*(n+~i);print''.join((s+a*n)[:n-j]+(b*-~i+s)[j:]for j in r)

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

이것은 [0,..,n,n,..,0]제거 할 컬럼의 양을 제어하는 ​​데 사용하여 가장 큰 다이아몬드의 내부 컬럼을 잘라서 더 작은 것을 만듭니다 .


당신은 변경하여 하나의 싼 바이트를 얻을 수 r=r+r+=
musicman523


3

디아 로그 APL, 46

{⊃,/⍵∘{'/ \'[2+((-⍪⊖)⌽,-)(-⍺)↑∘.≥⍨⍳⍵]}¨(⌽,⊢)⍳⍵}

PPCG에 오신 것을 환영합니다. 이것이 dfn 인 방법으로 보았을 {}때 답을 포함시켜야합니다.
Kritixi Lithos


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