วาดรูปแบบเพชรนี้


24

รูปแบบด้านล่างจะเป็นพื้นฐานของความท้าทายนี้

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

เมื่อกำหนดความกว้างและความสูงของอินพุตแต่ละ>=1รูปแบบแสดงผลลัพธ์ ASCII ข้างต้นซ้ำหลายครั้งรวมกัน (และทับซ้อนกัน) ที่เพชรขนาดเล็ก

ตัวอย่างเช่นนี่คืออินพุตพร้อมwidth = 2และheight = 1:

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

นี่คืออินพุตwidth = 3และheight = 2:

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

กฎและ I / O

  • เข้าและส่งออกจะได้รับโดยวิธีการที่สะดวกใด
  • คุณสามารถพิมพ์ไปที่ STDOUT หรือส่งคืนเป็นผลลัพธ์ของฟังก์ชัน
  • ยอมรับได้ทั้งโปรแกรมหรือฟังก์ชั่น
  • สามารถยอมรับช่องว่างที่ไม่เกี่ยวข้องใด ๆ ได้ตราบใดที่อักขระมีการจัดเรียงอย่างเหมาะสม
  • ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
  • นี่คือเพื่อให้ใช้กฎการตีกอล์ฟตามปกติทั้งหมดและรหัสที่สั้นที่สุด (เป็นไบต์) ชนะ

คำตอบ:


10

Canvas , 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

JavaScript (ES8), 167 161 159 ไบต์

หมายเหตุ: นี่เป็นการเข้ารหัสรูปแบบ ดูคำตอบอื่น ๆ ของฉันสำหรับวิธีการทางคณิตศาสตร์ที่สั้นกว่า

(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=27n1

สิ่งนี้ให้:

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

JavaScript (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)

ลองออนไลน์!

อย่างไร?

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

สำหรับเซลล์อื่นทั้งหมดเราคำนวณ:

  • a=(xy)mod10
  • d=(x+y)mod10 (ค่าคงที่มากกว่าเส้นทแยงมุม)

เราวาด"/"ถ้า:

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

เราวาด"\"ถ้า:

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

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

ลองออนไลน์!


Haskell , 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)<>idเกิน(++).reverse=<<map(map k)จะช่วยให้คุณประหยัดทั้ง 3 ไบต์ในทั้งสองโซลูชัน
ბიმო

1
อ่าและในอันที่สองmap tสามารถกลายเป็นt<$>และtake$10*x+2บันทึกไบต์อื่นด้วยและในที่สุดคุณก็สามารถใช้cycle"\\ /"!!nมากกว่า"\\ /"!!mod n 3- ตอนนี้อันที่สองนั้นสั้นกว่า :) ลองออนไลน์!
ბიმო

3

ถ่าน , 24 22 20 ไบต์

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

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด คำอธิบาย:

´\/↘²

วาดหนึ่งในแปดของลวดลายดั้งเดิม

‖M↘L

ทำซ้ำสามครั้งเพื่อทำให้รูปแบบดั้งเดิมสมบูรณ์

F⊖NCχ⁰

คัดลอกจำนวนครั้งที่ต้องการในแนวนอน

F⊖NC⁰χ

คัดลอกจำนวนครั้งที่ต้องการในแนวตั้ง


3

Powershell, 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 chars array:

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

บท:

  • ซ้ำรูปแบบ;
  • ต่อท้ายคอลัมน์ [0,1] ต่อท้ายแต่ละบรรทัด;
  • ต่อท้ายบรรทัด [0,1] ต่อท้ายผลลัพธ์

สองสิ่งสำหรับกอล์ฟ:

  1. อาร์เรย์ของลวดลายถูกแมปกับสตริงที่มีความยาว 100 ไบต์
  2. replaceสตริงลดลงได้โดยง่าย


1

PHP, 159 ไบต์

รูปแบบที่นำมาจากเขาวงกต; แปลเป็น 1-2-3, แปลงเป็นฐาน 26 -> ถอดรหัสโดยโปรแกรม

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

Kotlin , 196 135 ไบต์

บันทึกแล้ว 61 ไบต์ด้วยคำแนะนำของ ASCII-only ที่ใช้อัลกอริทึม C ++ ของ 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}

ลองออนไลน์!


1
136 , ขโมยจากคำตอบ C ++ ใหม่
ASCII เท่านั้น

1

Python 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]

ลองออนไลน์!

-2 ไบต์ต้องขอบคุณ @Black Owl Kai ที่แสดงว่าท็อปและบอทสามารถเข้าถึงได้จากอาเรย์ที่สร้างขึ้นแทนที่จะเป็นตัวแปรแยกต่างหาก

-5 ไบต์เพิ่มเติมด้วย @Black Owl Kai โดยใช้วิธีที่สร้างสรรค์ยิ่งขึ้นในการเก็บเพชร

สร้างส่วนนี้ของเพชรแต่ละอัน:

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

/\เพิ่มในตอนท้ายของแต่ละแถวจะเสร็จสมบูรณ์ จากนั้น/s และ\s จะถูกสลับเป็นรูปแบบบนสุดของเพชรแต่ละอันและลำดับของเส้นตรงนั้นจะกลับด้านเป็นครึ่งล่าง ในที่สุดมันจะเพิ่มในแถวบนสุดของ/\s และแถวล่างสุดของ\/s เพื่อทำให้รูปภาพเสร็จสมบูรณ์


192 ไบต์โดยไม่ใช้ตัวแปร b และ c
Black Owl Kai

187 ไบต์โดยการลบสองครั้ง+=/ การ*=มอบหมายและพลิกเพชรทั้งรูปกลับหัวและทำให้สตริงสุดท้ายเก็บได้ง่ายขึ้น
Black Owl Kai


147 , ใช้ c ++ solution
เฉพาะ ASCII

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.