Vẽ mô hình kim cương này


24

Các mẫu dưới đây sẽ tạo thành cơ sở của thách thức này.

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

Với chiều rộng và chiều cao đầu vào, mỗi chiều, >=1xuất ra mẫu nghệ thuật ASCII ở trên lặp đi lặp lại nhiều lần, nối (và chồng chéo) tại các viên kim cương nhỏ.

Ví dụ, đây là một đầu vào có width = 2height = 1:

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

Đây là một đầu vào width = 3height = 2:

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

Quy tắc và I / O

  • Đầu vào và đầu ra có thể được đưa ra bởi bất kỳ phương pháp thuận tiện .
  • Bạn có thể in nó sang STDOUT hoặc trả lại dưới dạng kết quả chức năng.
  • Một chương trình đầy đủ hoặc một chức năng được chấp nhận.
  • Bất kỳ số lượng khoảng trắng ngoại lai nào cũng được chấp nhận, miễn là các ký tự xếp hàng một cách thích hợp.
  • Sơ hở tiêu chuẩn bị cấm.
  • Đây là vì vậy tất cả các quy tắc chơi gôn thông thường đều được áp dụng và mã ngắn nhất (tính bằng byte) sẽ thắng.

Câu trả lời:


10

Canvas , 26 25 24 21 18 byte

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

Hãy thử nó ở đây!

-3 byte bằng cách sửa lỗi không lặp lại canvas

Giải trình:

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

wow O_o canvas quá ngắn
ASCII-only

6

JavaScript (ES8), 167 161 159 byte

NB: Đây là mã hóa mô hình. Xem câu trả lời khác của tôi cho một cách tiếp cận toán học ngắn hơn.

Đưa đầu vào là (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)

Hãy thử trực tuyến!

Làm sao?

Chúng tôi mã hóa nửa trên của mẫu bằng các chữ số:

  • 0 có nghĩa là\
  • 1 phương tiện/
  • n=2 đến7 có nghĩa làn1 khoảng trắng

Điều này mang lại:

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

Đối với nửa dưới, chúng tôi sử dụng các hàng 4,3,2,0 với /\đảo ngược.


6

JavaScript (ES6), 139 byte

Đây là cách sử dụng một cách tiếp cận hoàn toàn khác với câu trả lời ban đầu của tôi, vì vậy tôi đang đăng bài này một cách riêng biệt.

Đưa đầu vào là (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)

Hãy thử trực tuyến!

Làm sao?

wh

  • 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

Đối với tất cả các ô khác, chúng tôi tính toán:

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

Chúng tôi vẽ "/"nếu:

((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   | ....../........./........./.....

Chúng tôi vẽ "\"nếu:

((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   | .....\.........\.........\......

Hoặc chúng ta vẽ một không gian nếu không có điều kiện nào trong số những điều kiện này được đáp ứng.


Điều này thực sự mát mẻ.
admBorkBork


@Arnauld Tôi biết đây là câu trả lời của bạn khi chỉ cần nhìn vào mã: D
flawr

6

C ++ (gcc) , 137 byte

#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;}

Hãy thử trực tuyến!

Giải trình

_______________________________
   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
Không hợp lệ, không phải là một chương trình đầy đủ cũng không phải là một chức năng
ASCII - chỉ

1
Nhưng, 10/10 một phương pháp rất hay
ASCII - chỉ

1
Câu trả lời nào chính xác không phải là chương trình hoặc chức năng đầy đủ? (chỉ hỏi, có thể đã bỏ lỡ) Lưu ý rằng một số ngôn ngữ (ví dụ: ngôn ngữ kịch bản) không cần chương trình soạn thảo cho các chương trình đầy đủ
ASCII - chỉ


1
159 , nhưng không chắc chắn liệu đầu ra từ một chức năng có hợp lệ hay không (có lẽ là vậy)
ASCII - chỉ

4

Haskell , 179 byte

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)$["\\/\\      /","   \\    / ","    \\  /  ","     \\/   ","     /\\   "]

Hãy thử trực tuyến!


Haskell , 181 byte

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)

Hãy thử trực tuyến!


1
Sử dụng reverse.map(map k)<>idhơn (++).reverse=<<map(map k)giúp bạn tiết kiệm 3 byte trong cả hai giải pháp.
31/12/18

1
À, và trong cái thứ 2 map tcũng có thể trở thành t<$>take$10*x+2lưu một byte khác và cuối cùng bạn có thể sử dụng cycle"\\ /"!!nhơn "\\ /"!!mod n 3- bây giờ cái thứ hai ngắn hơn :) Hãy thử trực tuyến!
31/12/18

3

Than , 24 22 20 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

´\/↘²

Vẽ một phần tám của mẫu ban đầu.

‖M↘L

Sao chép nó ba lần để hoàn thành mẫu ban đầu.

F⊖NCχ⁰

Sao chép số lần yêu cầu theo chiều ngang.

F⊖NC⁰χ

Sao chép số lần cần thiết theo chiều dọc.


3

Powershell, 146 byte

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+$_]})}

Giải trình

Các mẫu là mảng 10 ký tự:

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

Kịch bản:

  • lặp lại mô hình;
  • nối các cột [0,1] vào cuối mỗi dòng;
  • nối các dòng [0,1] vào cuối đầu ra.

Hai điều cho golf:

  1. Mảng mẫu được ánh xạ thành chuỗi có độ dài 100 byte;
  2. Chuỗi giảm đơn giản replace.


1

PHP, 159 byte

mô hình lấy từ mazzy; được dịch sang 1-2-3, được chuyển đổi sang cơ sở 26 -> được giải mã bởi chương trình

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,"\ /")),"
";

yêu cầu PHP 5.5 trở lên. Chạy với -nrhoặc thử trực tuyến .

tính toán có thể ngắn hơn (như đối với Arnauld). Tôi có thể nhìn vào đó.


1

Kotlin , 196 135 byte

Đã lưu 61 byte nhờ đề xuất của ASCII chỉ sử dụng thuật toán C ++ của AZTECCO.

{h,w->var r=""
for(l in 9..h*10+10){for(c in 9..w*10+10){r+=when{(l%10+c%10)%8==5->'/'
(l%10-c%10+8)%8==4->'\\'
else->' '}}
r+='\n'}
r}

Hãy thử trực tuyến!


1
136 , ăn cắp từ câu trả lời C ++ mới
ASCII - chỉ

1

Trăn 3 , 194 192 187 127 byte

Giải pháp chỉ dành cho 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))

Hãy thử trực tuyến!


Giải pháp gốc

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]

Hãy thử trực tuyến!

-2 byte nhờ @Black Owl Kai cho thấy rằng đỉnh và đáy có thể được truy cập từ mảng được tạo thay vì trong các biến riêng biệt.

-5 byte nữa nhờ @Black Owl Kai sử dụng một cách sáng tạo hơn để lưu trữ kim cương

Tạo phần này của mỗi viên kim cương:

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

Một /\bổ sung ở cuối mỗi hàng để hoàn thành nó. Sau đó, /s và \s được hoán đổi để tạo thành đỉnh của mỗi viên kim cương và thứ tự của các đường được đảo ngược để tạo thành nửa dưới. Cuối cùng, nó thêm vào hàng trên cùng của /\s và hàng dưới cùng của \/s để hoàn thành hình ảnh.


192 byte bằng cách không sử dụng các biến b và c
Black Owl Kai

187 byte bằng cách loại bỏ hai +=/ *=bài tập và lật ngược toàn bộ kim cương, làm cho chuỗi cuối cùng dễ dàng lưu trữ hơn
Black Owl Kai


147 , sử dụng giải pháp c ++
ASCII - chỉ

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.