이 다이아몬드 패턴을 그립니다


24

아래 패턴은이 도전의 기초를 형성합니다.

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

입력 너비와 높이가 각각 >=1 위의 ASCII 아트 패턴을 여러 번 반복하여 작은 다이아몬드에서 결합하고 겹칩니다.

예를 들어, 여기에 함께 입력 width = 2하고 height = 1:

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

입력은 다음 width = 3height = 2같습니다.

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

규칙 및 I / O

  • 입력 및 출력은 편리한 방법 으로 제공 할 수 있습니다 .
  • STDOUT에 인쇄하거나 함수 결과로 리턴 할 수 있습니다.
  • 전체 프로그램 또는 기능이 허용됩니다.
  • 문자가 적절하게 정렬되는 한 외부 공백은 허용됩니다.
  • 표준 허점 은 금지되어 있습니다.
  • 이것은 이므로 모든 일반적인 골프 규칙이 적용되며 가장 짧은 코드 (바이트)가 이깁니다.

답변:


10

캔버스 , 26 25 24 21 18 바이트

4/╬/╬⁰r:⤢n↷⁸{A×├m↷

여기 사용해보십시오!

반복하지 않는 캔버스 를 수정하여 -3 바이트

설명:

4/╬                 quad-palindromize a 4-long diagonal - big inner diamond
   /╬               quad-palindromize "/" - small diamond
     ⁰r             join the two vertically, centered
       :⤢n          overlap with transpose
           ↷        and rotate the thing clockwise
            ⁸{      for each input
              A×      times 10
                ├     plus 2
                 m    mold the canvas to that width
                  ↷   and rotate clockwise, setting up for the next iteration

와우 O_o 캔버스가 너무 짧습니다
ASCII 전용

6

자바 스크립트 (ES8) 167 161 159 바이트

NB : 패턴을 인코딩하는 중입니다. 더 짧은 수학적 접근법에 대한 다른 대답 을 보십시오 .

로 입력을 (width)(height)받습니다.

w=>h=>(g=h=>h?g(--h)+`
`+([4106,4016,31305,21504,17010]['0102344320'[h%=10]]+'').replace(/./g,c=>'\\/'[c^h>5]||''.padEnd(c-1)).repeat(w+1).slice(8):'')(h*10+2)

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

방법?

패턴의 상반부를 숫자로 인코딩합니다.

  • 0\
  • 1/
  • n=2 ~7n1 공백을의미합니다.

이것은 다음을 제공합니다.

0  ···/\·····  -->  [3 spaces] [/] [\] [5 spaces]             -->  4106
1  ···\/·····  -->  [3 spaces] [\] [/] [5 spaces]             -->  4016
0  ···/\·····  -->  [3 spaces] [/] [\] [5 spaces]             -->  4106
2  ··/··\····  -->  [2 spaces] [/] [2 spaces] [\] [4 spaces]  -->  31305
3  ·/····\···  -->  [1 space] [/] [4 spaces] [\] [3 spaces]   -->  21504
4  /······\/\  -->  [/] [6 spaces] [\] [/] [\]                -->  17010

아래쪽 절반의 경우 행 4,3,2,0 사용 /하고 \뒤집습니다.


6

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

이것은 초기 답변과는 상당히 다른 접근법을 사용하므로 별도로 게시하고 있습니다.

로 입력을 (width)(height)받습니다.

w=>h=>(g=x=>y>8?` /\\
`[a=(x+y*9)%10,d=(x+y)%10,x?(y%10>3&&2*(a==8)|d==5)|(y%10<6&&2*(a==6)|d==7):3]+g(x--?x:--y&&w):'')(w=w*10+2,y=-~h*10)

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

방법?

너비 w 와 높이 h 주어지면 출력 문자를 그리드 위에 문자별로 그립니다.

  • 10w+3 문자 폭
  • 10h+2 자 높이

x10w+20y10h+109 (위에서 아래로).

w=3h=2

(32,30)(31,30)(0,30)(32,29)(31,29)(0,29)(32,9)(31,9)(0,9)

x=0

다른 모든 셀의 경우 다음을 계산합니다.

  • a=(xy)mod10
  • d=(x+y)mod10

우리는 "/"if를 그 립니다 :

((ymod10)>3 and d=5) or ((ymod10)<6 and d=7)

 y  | y % 10 | output (w = 3, h = 1)
----+--------+----------------------------------
 20 |    0   | ...../........./........./......
 19 |    9   | ....../........./........./.....
 18 |    8   | ...../........./........./......
 17 |    7   | ..../........./........./.......
 16 |    6   | .../........./........./........
 15 |    5   | /./......././......././......./.
 14 |    4   | ./......././......././......././
 13 |    3   | ......../........./........./...
 12 |    2   | ......./........./........./....
 11 |    1   | ....../........./........./.....
 10 |    0   | ...../........./........./......
  9 |    9   | ....../........./........./.....

우리는 "\"if를 그 립니다 :

((ymod10)>3 and a=8) or ((ymod10)<6 and a=6)

 y  | y % 10 | output (w = 3, h = 1)
----+--------+----------------------------------
 20 |    0   | ......\.........\.........\.....
 19 |    9   | .....\.........\.........\......
 18 |    8   | ......\.........\.........\.....
 17 |    7   | .......\.........\.........\....
 16 |    6   | ........\.........\.........\...
 15 |    5   | .\.......\.\.......\.\.......\.\
 14 |    4   | \.\.......\.\.......\.\.......\.
 13 |    3   | ...\.........\.........\........
 12 |    2   | ....\.........\.........\.......
 11 |    1   | .....\.........\.........\......
 10 |    0   | ......\.........\.........\.....
  9 |    9   | .....\.........\.........\......

또는 이러한 조건 중 어느 것도 충족되지 않으면 공간을 그립니다.


정말 멋지다.
AdmBorkBork


@ Arnauld 나는 이것이 코드를 보면서 당신의 대답이라는 것을 알았습니다 : D
flawr

6

C ++ (gcc) , 137 바이트

#include<cstdio>
auto p(int x,int y){int n=10,t=x=++x*n;for(++y*=n;y>8;)t>7?putchar(t<9?y--,n:t%n-y%n+4&7?t%n+y%n-5&7?32:47:92),t--:t=x;}

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

설명

_______________________________
   098765432109876.... 
   9    \/    .     factor =y%10 - x10
   8    /\    .     if factor = -4 || 4. Print --> '\'  47
   7   /  \   . 
   6  /    \  .     factor =x%10+y%10;  
   5\/      \/*-.   if factor = 5 || 13 --> /  92
   4/\      /\   `.
   3  \    /       `->  * is 9,5 => \
   2   \  /      
   1    \/   
   0    /\       
   9

1
전체 프로그램이나 함수가 아닌 유효하지 않음
ASCII 전용

1
그러나 10/10은 아주 좋은 방법입니다
ASCII 전용

1
전체 프로그램이나 기능이 아닌 답변은 무엇입니까? (단지 묻고, 놓쳤을 수도 있습니다.) 일부 언어 (예 : 스크립팅 언어)에는 전체 프로그램에 보일러 플레이트가 필요하지 않습니다.
ASCII 전용


1
159 , 그러나 함수에서 출력이 유효한지 확실하지 않은 경우 (아마도 가능)
ASCII 전용

4

하스켈 , 179 바이트

k '\\'='/'
k '/'='\\'
k x=x
f x=take(10*x+2)
w#h=map(f w.cycle).f h.drop 9.cycle$(++).reverse=<<map(map k)$["\\/\\      /","   \\    / ","    \\  /  ","     \\/   ","     /\\   "]

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


하스켈 , 181 바이트

k '\\'='/'
k '/'='\\'
k x=x
f x=take(10*x+2)
w#h=map(f w.cycle).f h.drop 9.cycle$(++).reverse=<<map(map k)$map t[49200,36058,31630,30010,29038]
t 0=""
t n="\\ /"!!mod n 3:t(div n 3)

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


1
reverse.map(map k)<>idover (++).reverse=<<map(map k)를 사용하면 두 솔루션 모두에서 3 바이트가 절약됩니다.
ბიმო

1
아, 그리고 제 2 하나 map t가 될 수 t<$>take$10*x+2너무 다른 바이트를 저장하고 마지막으로 당신이 사용할 수있는 cycle"\\ /"!!n이상 "\\ /"!!mod n 3- 이제 두 번째는 :) 짧은 온라인으로보십시오!
ბიმო

3

, 24 22 20 바이트

\/↘²‖M↘LF⊖NCχ⁰F⊖NC⁰χ

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

´\/↘²

원래 패턴의 8 분의 1을 그립니다.

‖M↘L

원본 패턴을 완성하려면 세 번 복제하십시오.

F⊖NCχ⁰

필요한 횟수만큼 가로로 복사하십시오.

F⊖NC⁰χ

필요한 횟수만큼 세로로 복사하십시오.


3

파워 쉘, 146 바이트

param($w,$h)0..9*$h+0,1|%{$y=$_
-join(0..9*$w+0,1|%{('3  /\33  \/33  /\33 /  \3  /3 \ /\/33\\/\33/3\3 /3  \  /33 \/3'-replace3,'   ')[$y*10+$_]})}

설명

패턴은 10x10 문자 배열입니다.

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

스크립트 :

  • 패턴을 반복합니다.
  • 각 행의 끝에 [0,1] 열을 추가합니다.
  • 출력의 끝에 행 [0,1]을 추가합니다.

골프를위한 두 가지 :

  1. 패턴 배열은 길이가 100 바이트 인 문자열에 맵핑됩니다.
  2. 문자열이 간단 해졌습니다 replace.


1

PHP, 159 바이트

매지에서 가져온 패턴; 1-2-3으로 변환, base26으로 변환-> 프로그램에서 해독

while($y<$argv[2]*10+2)echo str_pad("",$argv[1]*10+2,strtr(base_convert([jng1,jnnb,jng1,jofn,k333,"1h4p5",23814,k94d,k02h,jnnb][$y++%10],26,4),312,"\ /")),"
";

PHP 5.5 이상이 필요합니다. 온라인으로 실행 -nr하거나 사용해보십시오 .

(Arnauld와 마찬가지로) 계산이 더 짧을 수 있습니다. 나는 그것을 볼 수 있습니다.



1

파이썬 (3) , 194 (192) 187 (127) 바이트

@ASCII 전용 솔루션 :

lambda w,h,n=10:"\n".join("".join([" /","\\"][(j%n-i%n)%8==4][(j%n+i%n)%8==5]for i in range(-1,w*n+1))for j in range(-1,h*n+1))

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


독창적 인 솔루션

n="\n"
def f(w,h):a=[r"     /\   "*w,r"     \/   "*w,r"    \  /  "*w,r"   \    / "*w,r"\/\      /"*w+r"\/"];return a[0]+n+n.join(([i.translate({47:92,92:47})for i in a]+a[::-1])*h)+n+a[1]

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

@Black Owl Kai 덕분에 -2 바이트 덕분에 별도의 변수 대신 생성 된 배열에서 상단과 하단에 액세스 할 수 있습니다.

@Black Owl Kai 덕분에 더 창조적 인 방법으로 다이아몬드를 보관할 수있어 -5 바이트 더

각 다이아몬드의이 부분을 생성합니다.

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

A는 /\그것을 완료하는 각 행의 끝에 추가. 그런 다음 /s와 \s를 서로 바꾸어 각 다이아몬드의 상단을 형성하고 선의 순서를 반대로하여 하단 절반을 형성합니다. 마지막으로 이미지의 /\맨 위 줄과 맨 아래 줄을 추가 \/하여 이미지를 완성합니다.


변수 b와 c를 사용하지 않음으로써 192 바이트
Black Owl Kai

187 바이트 ( 2 개 +=/ *=할당 을 제거 하고 전체 다이아몬드를 뒤집어 뒤집어 마지막 문자열을 더 쉽게 저장)
Black Owl Kai


147 , c ++ 솔루션 사용
ASCII 전용

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