พรม Sierpinski


23

ใครไม่รักเศษส่วนที่ดี Sierpinski พรมเป็นตัวอย่างคลาสสิกของเศษส่วน

ในการทำภารกิจนี้ให้เสร็จคุณจะต้องสร้างพรมชนิดnและพิมพ์รูปภาพผลลัพธ์ไปที่stdout(ดูตัวอย่างด้านล่างสำหรับการจัดรูปแบบ) nซึ่งแสดงถึงระดับพรม ขั้นตอนสามารถพบได้ในบทความWikipediaนี้

ค่านี้จะถูกนำมาจากstdinหรือเทียบเท่า

ตัวอย่างเช่นอินพุต 4 จะสร้างพรมระดับที่ 4:

■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■   ■ ■   ■ ■   ■ ■   ■ ■   ■ ■   ■ ■   ■ ■   ■ ■   ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■       ■ ■ ■ ■ ■ ■       ■ ■ ■ ■ ■ ■       ■ ■ ■
■   ■       ■   ■ ■   ■       ■   ■ ■   ■       ■   ■
■ ■ ■       ■ ■ ■ ■ ■ ■       ■ ■ ■ ■ ■ ■       ■ ■ ■ 
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■   ■ ■   ■ ■   ■ ■   ■ ■   ■ ■   ■ ■   ■ ■   ■ ■   ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■                   ■ ■ ■ ■ ■ ■ ■ ■ ■
■   ■ ■   ■ ■   ■                   ■   ■ ■   ■ ■   ■
■ ■ ■ ■ ■ ■ ■ ■ ■                   ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■       ■ ■ ■                   ■ ■ ■       ■ ■ ■
■   ■       ■   ■                   ■   ■       ■   ■
■ ■ ■       ■ ■ ■                   ■ ■ ■       ■ ■ ■ 
■ ■ ■ ■ ■ ■ ■ ■ ■                   ■ ■ ■ ■ ■ ■ ■ ■ ■
■   ■ ■   ■ ■   ■                   ■   ■ ■   ■ ■   ■
■ ■ ■ ■ ■ ■ ■ ■ ■                   ■ ■ ■ ■ ■ ■ ■ ■ ■ 
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■   ■ ■   ■ ■   ■ ■   ■ ■   ■ ■   ■ ■   ■ ■   ■ ■   ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■       ■ ■ ■ ■ ■ ■       ■ ■ ■ ■ ■ ■       ■ ■ ■
■   ■       ■   ■ ■   ■       ■   ■ ■   ■       ■   ■
■ ■ ■       ■ ■ ■ ■ ■ ■       ■ ■ ■ ■ ■ ■       ■ ■ ■ 
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■   ■ ■   ■ ■   ■ ■   ■ ■   ■ ■   ■ ■   ■ ■   ■ ■   ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■

อินพุต 3 จะผลิตพรมระดับ 3:

■ ■ ■ ■ ■ ■ ■ ■ ■
■   ■ ■   ■ ■   ■
■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■       ■ ■ ■
■   ■       ■   ■
■ ■ ■       ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■
■   ■ ■   ■ ■   ■
■ ■ ■ ■ ■ ■ ■ ■ ■

อินพุต 2 จะผลิตพรมระดับ 2:

■ ■ ■
■   ■ 
■ ■ ■

และการป้อนข้อมูลของ 1 จะผลิตพรมระดับ 1 (เพียงตาราง):

หมายเหตุช่องว่างระหว่างคอลัมน์

ความคิดคือการใช้ตัวละคร■สำหรับบล็อกและพื้นที่สำหรับช่องว่าง

บรรทัดเริ่มต้นด้วยตัวละคร■

และเช่นเคยทางออกที่เล็กที่สุดจะชนะด้วยการนับจำนวนตัวอักษร

อีกวิธีหนึ่งคือ # สามารถใช้แทนอักขระ■ในภาษาที่ไม่รองรับ Unicode


1
ตัวอย่างแรกไม่ใช่ระดับที่สามแทนที่จะเป็นระดับที่สองใช่ไหม
เครื่องมือเพิ่มประสิทธิภาพ

6
เป็นคำถามที่ดี แต่พวกเขาจำเป็นต้องเป็นตัวละครเหล่านั้นหรือไม่? สิ่งเหล่านี้ไม่ใช่ ASCII ซึ่งมีกฎหลายภาษา พวกเขาสามารถเป็นแค่อวกาศและ X หรือ O ได้หรือไม่? ฉันคิดว่าภาพของคุณจะดูดีขึ้นด้วยช่องว่างแทนที่จะเป็นช่องว่าง
Level River St

เปลี่ยนฟองน้ำเป็นพรมแล้วขอบคุณ
Paul Clavier

จะทำอย่างไรถ้าภาษาของคุณไม่รองรับ unicode output มันจะมีตัวเลือก ASCII หรือไม่?
ข้อบกพร่อง

1
บรรทัดสามารถมีช่องว่างต่อท้ายได้หรือไม่
เดนนิส

คำตอบ:


15

CJam, 38 37 31 30 28 ตัวอักษร

โอเคเรานับจำนวนตัวอักษรกันแล้วเรามาลองทำ Unicode กันบ้าง

"B胷맋풽巓뱖ᮨ㣙¬䙧੥墱륋청"2G#b129b:c~

ทดสอบที่นี่ เพียงแค่ใส่ระดับที่ต้องการลงในช่องใส่

คำอธิบาย

หลังจากการแปลงฐานนี่คือ

3li(#,{3b1f&2b}%_f{f{&S9632c?S}N}

ซึ่งเหมือนกับดังต่อไปนี้เพียงแค่มีอักขระ Unicode ที่เขียนเป็น9632c:

3li(#,{3b1f&2b}%_f{f{&S'■?S}N}

รหัสนี้ขึ้นอยู่กับการสังเกตต่อไปนี้: ถ้าเราดูพิกัด(x, y)ของแต่ละเซลล์เราจะได้เซลล์ว่างเมื่อใดก็ตามที่ทั้งxและyมี1ตำแหน่งเดียวกันในการเป็นตัวแทนฐาน -3 หากคุณคิดเกี่ยวกับมันรูปแบบการทำซ้ำขนาดเล็กเป็นตัวเลขฐานที่สำคัญ 3 หลักจากนั้นตัวเลขที่สำคัญยิ่งกว่าถัดไปจะควบคุมการทำซ้ำขนาดใหญ่ต่อไปและอื่น ๆ

3                                      "Push a 3 on the stack.";
 li(                                   "Read input, convert to integer, decrement.";
    #                                  "Raise to that power. This yields the dimensions.";
     ,                                 "Turn into a range array.";
      {       }%                       "Map the block onto the array.";
       3b                              "Convert to base 3.";
         1f&                           "Bit-wise AND each digit with 1.";
            2b                         "Convert to base 2.";
                _                      "Duplicate this list.";
                 f{          }         "Map this block onto one list, with the second list
                                        as an additional parameter.";
                   f{      }           "Map this block onto the second list, with the first
                                        list's current element as an additional parameter.";
                                       "I.e. this iterates over all coordinate pairs.";
                     &                 "Bitwise AND to check that the base-3 representations
                                        had a 1 in the same position.";
                      S'■?             "Select the right character.";
                          S            "Push a space.";
                            N          "Push a newline";

เนื้อหาของอาร์เรย์ผลลัพธ์จะถูกพิมพ์โดยอัตโนมัติ

ขอบคุณเดนนิสที่ช่วยกำจัดสามไบต์


2
#0<'■S-> #~S'■บันทึก 1 ตัวอักษร
เครื่องมือเพิ่มประสิทธิภาพ

คุณสามารถแทนที่ด้วย[1_]a#~ 3Yba&
เดนนิส

@ เดนนิสเรียบร้อย ขอขอบคุณ!
Martin Ender

@ เดนนิสฉันลืมไปตลอดว่า&ก่อให้เกิดคุณค่าที่เป็นความจริง / เป็นเท็จ (หรือแม้กระทั่งมีอยู่จริง) อาจจะคุ้มค่าการโพสต์ในเคล็ดลับ CJam สำหรับวิธีที่เป็นที่ยอมรับในการทดสอบว่าอาร์เรย์มีองค์ประกอบบางอย่าง
Martin Ender

1
@Ypnypn Nope มันดูนานขึ้น แต่นั่นเป็นเพราะตัวละคร Unicode ไม่ใช่ monospaces รหัสที่คลายการบรรจุมีอักขระ 30 ตัว
Martin Ender

7

Matlab (113) (110) (99) (85)

คุณสามารถลองได้ที่นี่ (คุณจะต้องแทนที่input('')ด้วยอินพุตที่คุณต้องการ)

ตอนนี้ 99 ขอบคุณ feersum! และตอนนี้ลดเหลือ 85 ขอบคุณ RTL!

แข็งแรงเล่นกอล์ฟ:

a=ones(3);a(5)=0;c=1;for i=2:input('');c=kron(c,a);end;disp(char(kron(c,[1,0])*3+32))

Ungolfed:

a=ones(3);a(5)=0;c=1;  %creating the template / anchor
for i=2:input('');
    c=kron(c,a);       %recursive iterations
end;
disp(char(kron(c,[1,0])*3+32))

d=[c,c]*0;  %this is all just for adding the additional spaces
d(:,1:2:end)=c;
disp(char(d*3+32));    %converting to spaces (32) and # (35)

คำอธิบาย:

ฉันใช้ผลิตภัณฑ์ kronecker ในทางที่ผิดสำหรับงานนี้ (เป็นผลิตภัณฑ์พิเศษที่กำหนดไว้สำหรับสองเมทริกซ์ขนาดแต่ละตัวอย่าง:

A = [1,2] is a 3x2 matrix, B is a nxm matrix.
    [3,4]
    [5,6]

แล้วก็

kron(A,B) = [1*B , 2*B] is a 2n x 2m matrix.
            [3*B , 4*B]
            [5*B , 6*B]

ดังนั้นนี่คือตัวอย่างสำหรับ n = 5 (ในวิธีการนับแบบเก่าคือ 4)

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
#   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # 
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
# # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # 
#   #       #   # #   #       #   # #   #       #   # #   #       #   # #   #       #   # #   #       #   # #   #       #   # #   #       #   # #   #       #   # 
# # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # 
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
#   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # 
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
# # # # # # # # #                   # # # # # # # # # # # # # # # # # #                   # # # # # # # # # # # # # # # # # #                   # # # # # # # # # 
#   # #   # #   #                   #   # #   # #   # #   # #   # #   #                   #   # #   # #   # #   # #   # #   #                   #   # #   # #   # 
# # # # # # # # #                   # # # # # # # # # # # # # # # # # #                   # # # # # # # # # # # # # # # # # #                   # # # # # # # # # 
# # #       # # #                   # # #       # # # # # #       # # #                   # # #       # # # # # #       # # #                   # # #       # # # 
#   #       #   #                   #   #       #   # #   #       #   #                   #   #       #   # #   #       #   #                   #   #       #   # 
# # #       # # #                   # # #       # # # # # #       # # #                   # # #       # # # # # #       # # #                   # # #       # # # 
# # # # # # # # #                   # # # # # # # # # # # # # # # # # #                   # # # # # # # # # # # # # # # # # #                   # # # # # # # # # 
#   # #   # #   #                   #   # #   # #   # #   # #   # #   #                   #   # #   # #   # #   # #   # #   #                   #   # #   # #   # 
# # # # # # # # #                   # # # # # # # # # # # # # # # # # #                   # # # # # # # # # # # # # # # # # #                   # # # # # # # # # 
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
#   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # 
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
# # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # 
#   #       #   # #   #       #   # #   #       #   # #   #       #   # #   #       #   # #   #       #   # #   #       #   # #   #       #   # #   #       #   # 
# # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # 
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
#   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # 
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
# # # # # # # # # # # # # # # # # # # # # # # # # # #                                                       # # # # # # # # # # # # # # # # # # # # # # # # # # # 
#   # #   # #   # #   # #   # #   # #   # #   # #   #                                                       #   # #   # #   # #   # #   # #   # #   # #   # #   # 
# # # # # # # # # # # # # # # # # # # # # # # # # # #                                                       # # # # # # # # # # # # # # # # # # # # # # # # # # # 
# # #       # # # # # #       # # # # # #       # # #                                                       # # #       # # # # # #       # # # # # #       # # # 
#   #       #   # #   #       #   # #   #       #   #                                                       #   #       #   # #   #       #   # #   #       #   # 
# # #       # # # # # #       # # # # # #       # # #                                                       # # #       # # # # # #       # # # # # #       # # # 
# # # # # # # # # # # # # # # # # # # # # # # # # # #                                                       # # # # # # # # # # # # # # # # # # # # # # # # # # # 
#   # #   # #   # #   # #   # #   # #   # #   # #   #                                                       #   # #   # #   # #   # #   # #   # #   # #   # #   # 
# # # # # # # # # # # # # # # # # # # # # # # # # # #                                                       # # # # # # # # # # # # # # # # # # # # # # # # # # # 
# # # # # # # # #                   # # # # # # # # #                                                       # # # # # # # # #                   # # # # # # # # # 
#   # #   # #   #                   #   # #   # #   #                                                       #   # #   # #   #                   #   # #   # #   # 
# # # # # # # # #                   # # # # # # # # #                                                       # # # # # # # # #                   # # # # # # # # # 
# # #       # # #                   # # #       # # #                                                       # # #       # # #                   # # #       # # # 
#   #       #   #                   #   #       #   #                                                       #   #       #   #                   #   #       #   # 
# # #       # # #                   # # #       # # #                                                       # # #       # # #                   # # #       # # # 
# # # # # # # # #                   # # # # # # # # #                                                       # # # # # # # # #                   # # # # # # # # # 
#   # #   # #   #                   #   # #   # #   #                                                       #   # #   # #   #                   #   # #   # #   # 
# # # # # # # # #                   # # # # # # # # #                                                       # # # # # # # # #                   # # # # # # # # # 
# # # # # # # # # # # # # # # # # # # # # # # # # # #                                                       # # # # # # # # # # # # # # # # # # # # # # # # # # # 
#   # #   # #   # #   # #   # #   # #   # #   # #   #                                                       #   # #   # #   # #   # #   # #   # #   # #   # #   # 
# # # # # # # # # # # # # # # # # # # # # # # # # # #                                                       # # # # # # # # # # # # # # # # # # # # # # # # # # # 
# # #       # # # # # #       # # # # # #       # # #                                                       # # #       # # # # # #       # # # # # #       # # # 
#   #       #   # #   #       #   # #   #       #   #                                                       #   #       #   # #   #       #   # #   #       #   # 
# # #       # # # # # #       # # # # # #       # # #                                                       # # #       # # # # # #       # # # # # #       # # # 
# # # # # # # # # # # # # # # # # # # # # # # # # # #                                                       # # # # # # # # # # # # # # # # # # # # # # # # # # # 
#   # #   # #   # #   # #   # #   # #   # #   # #   #                                                       #   # #   # #   # #   # #   # #   # #   # #   # #   # 
# # # # # # # # # # # # # # # # # # # # # # # # # # #                                                       # # # # # # # # # # # # # # # # # # # # # # # # # # # 
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
#   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # 
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
# # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # 
#   #       #   # #   #       #   # #   #       #   # #   #       #   # #   #       #   # #   #       #   # #   #       #   # #   #       #   # #   #       #   # 
# # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # 
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
#   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # 
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
# # # # # # # # #                   # # # # # # # # # # # # # # # # # #                   # # # # # # # # # # # # # # # # # #                   # # # # # # # # # 
#   # #   # #   #                   #   # #   # #   # #   # #   # #   #                   #   # #   # #   # #   # #   # #   #                   #   # #   # #   # 
# # # # # # # # #                   # # # # # # # # # # # # # # # # # #                   # # # # # # # # # # # # # # # # # #                   # # # # # # # # # 
# # #       # # #                   # # #       # # # # # #       # # #                   # # #       # # # # # #       # # #                   # # #       # # # 
#   #       #   #                   #   #       #   # #   #       #   #                   #   #       #   # #   #       #   #                   #   #       #   # 
# # #       # # #                   # # #       # # # # # #       # # #                   # # #       # # # # # #       # # #                   # # #       # # # 
# # # # # # # # #                   # # # # # # # # # # # # # # # # # #                   # # # # # # # # # # # # # # # # # #                   # # # # # # # # # 
#   # #   # #   #                   #   # #   # #   # #   # #   # #   #                   #   # #   # #   # #   # #   # #   #                   #   # #   # #   # 
# # # # # # # # #                   # # # # # # # # # # # # # # # # # #                   # # # # # # # # # # # # # # # # # #                   # # # # # # # # # 
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
#   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # 
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
# # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # 
#   #       #   # #   #       #   # #   #       #   # #   #       #   # #   #       #   # #   #       #   # #   #       #   # #   #       #   # #   #       #   # 
# # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # # # #       # # # 
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
#   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # #   # 
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 

ขอบคุณฉันไม่ได้สังเกตว่าข้อกำหนดมีการเปลี่ยนแปลง ฉันยังปรับปรุงรหัส (ฉันเพิ่งต้องเปลี่ยนค่าเริ่มต้นของ for for loop.)
flawr

แทนการที่คุณควรใช้d=zeros(size([c,c])) d=[c c]*0
feersum

ดีข้อเสนอแนะ: ตัวแปรdสามารถหลีกเลี่ยงได้โดยการใช้งานที่ไม่เหมาะสมkronอีกครั้ง: disp(char(kron(c,[1,0])*3+32));,
RTL



5

Perl 5: 68 ตัวอักษร

nบน stdin

#!/usr/bin/perl -l
//,print map/2/?"  ":"■ ",map$_+$',@,for@,=grep!/[24-9]/,0..3x<>/10

การแทนค่าแบบไตรภาคเลขฐานสิบแบบทศนิยมของรายการพิกัดจะถูกสร้างขึ้นเป็นครั้งแรกใน@,(เลือกชื่อจึงไม่จำเป็นต้องมีช่องว่างระหว่าง@,และfor) โดยใช้ตัวเลข 0, 1 และ 3 ตอนนี้การเพิ่มพิกัด x และ y ในโดเมนทศนิยมจะมี 2 ในผลลัพธ์ถ้าหากมีสองตำแหน่งที่ตรงกันเท่านั้น //จะใช้ในการเผยแพร่ตัวแปรเริ่มต้น$_จาก outer loop ( for) ไปยังตัวแปร postmatch $'เมื่อมีเงาโดยmapตัวแปรเริ่มต้นในลูปภายใน


4

Java, 330 283 ตัวอักษร

class T{public static void main(String[]a){int n=Integer.valueOf(a[0]);int m=(int)Math.pow(3,n-1);for(n=0;n<m;n++){for(int j=0;j<m;){String s="#";int x=n;int y=j++;while(x>0||y>0){if(x%3==1&&y%3==1){s=" ";}x/=3;y/=3;}p(s);}p("\n");}}static void p(String s){System.out.print(""+s);}}

Param คือขนาดที่คุณต้องการ หากไม่มีการเพิ่มประสิทธิภาพสำหรับอัลกอริทึมฉันพยายาม squishing ทุกอย่างลง

ขอบคุณ @StretchManiac ลบiวิธีการและทำความสะอาดการประกาศ squished บิตยุติธรรมลง

รหัสที่อ่านได้

class T {
    public static void main(String[] a) {
        int n = Integer.valueOf(a[0]);
        int m = (int) Math.pow(3, n - 1);
        for (n = 0; n < m; n++) {
            for (int j = 0; j < m;) {
                String s = "#";
                int x = n;
                int y = j++;
                while (x > 0 || y > 0) {
                    if (x % 3 == 1 && y % 3 == 1) {
                        s = " ";
                    }
                    x /= 3;
                    y /= 3;
                }
                p(s);
            }
            p("\n");
        }
    }

    static void p(String s) {
        System.out.print("" + s);
    }
}

คุณสามารถกำจัด "สาธารณะ" ก่อนเข้าชั้นเรียนได้ตามหลักที่คุณสามารถทำได้String[]aและถ้าคุณใช้เพียงiครั้งเดียว
ยืด Maniac

@StretchManiac ขอบคุณสำหรับเคล็ดลับ ฉันจะใช้พวกเขาในไม่ช้า
เข็มทิศ

3
ทำไมคุณถึงทำ""+sในโลกด้วยpวิธีของคุณ? นั่นคือสามตัวละครพิเศษโดยไม่มีจุดประสงค์ แม้ว่าประเภทของsสิ่งใด ๆ ที่นอกเหนือไปจากStringนั้นก็ยังคงไม่จำเป็นอย่างสมบูรณ์
David Conrad

1
เปลี่ยนไปstatic void p(int s){System.out.print((char)s);}และในการทำหลักมันint s=35;, s=32;และp(10);(แทนp("\n");) และบันทึกตัวอักษรไม่กี่
David Conrad

คุณสามารถบันทึกตัวละครเจ็ดตัวโดยเปลี่ยนInteger.valueOfเป็นnew Byte
Ypnypn

4

แร็กเก็ต230 229 225 220

ไม่ใช่ชั่วโมงที่ดีที่สุดสำหรับการตีกอล์ฟ

แข็งแรงเล่นกอล์ฟ:

(define(s n)(letrec([t(λ(x y)(if(or(= x 0)(= y 0))"■"(if(=(modulo x 3)(modulo y 3)1)" "(t(floor(/ x 3))(floor(/ y 3))))))][i(expt 3(- n 1))])(for-each displayln(for/list([r i])(string-join(for/list([c i])(t r c))" ")))))

Ungolfed:

(define (s n)
  (letrec ([t (λ (x y)
                (if (or (= x 0) (= y 0)) 
                    "■"
                    (if (= (modulo x 3) (modulo y 3) 1)
                        " "
                        (t (floor (/ x 3)) (floor (/ y 3))))))]
           [i (expt 3 (- n 1))])
    (for-each displayln 
              (for/list ([r i])
                (string-join 
                 (for/list ([c i]) 
                   (t r c)) " ")))))

4

C: 123 118 111 104 ตัวอักษร

ขึ้นอยู่กับความคิดที่คล้ายกันเป็นวิธี perl ของฉัน หลังจากเพิ่มช่องว่างแล้ว:

m=0x55555555;
x;
main(n){
  scanf("%d",&n);
  n=1<<2*--n;
  for(x=n*n;x--;)
    printf(x&x/2&m?"":"%c%c",x&x/n&m?32:35,x&n-1?32:10);
}

ใช้ระบบประกอบไปด้วยการเข้ารหัสแต่ละหลักด้วย 2 บิต ค่าที่ผิดกฎหมาย (มีสองคนที่อยู่ในตำแหน่งที่แปลกแม้) x & (x>>1) & 0b01010101จะถูกกรองด้วย x & (x >> 2 * n) & 0b01010101ทั้งสองพิกัดจะถูกเก็บไว้ในมูลค่าหนึ่งดังนั้นการตรวจสอบสีพิกเซลจะลงไปnถูกจัดเก็บเป็นกำลัง 2 เพื่อความสะดวก

แก้ไข

แทนที่ด้วยค่าคงที่เรียบง่ายdefinem

แก้ไข 2

0x5555555มาสก์สามารถแสดงด้วย(1LL<<32)/3แต่เราต้องการเพียงnบิตเหล่านั้นเท่านั้นจึงn/3เพียงพอ

x;
main(n){
  scanf("%d",&n);
  n=1<<2*--n;
  for(x=n*n;x--;)
    printf(x&x/2&n*n/3?"":"%c%c",x&x/n&n/3?32:35,x&n-1?32:10);
}

แก้ไข 3

การปรับแต่งเล็กน้อย 2 กำไรถ่านอาศัย scanf ถูกดำเนินการก่อนที่จะมีความคุ้มค่าในการโหลดของสำหรับการดำเนินการของn --nหมดอายุการเท่านั้นที่สามารถทำตาม#ดุจ

x;
main(n){
  n=scanf("%d",&n)<<2*--n;
  for(x=n*n;x--;)
    x&x/2&n*n/3||printf(x&x/n&n/3?"  ":x&n-1?"# ":"#\n");
}

3

HTML / JavaScript, 205 Chars

Obfuscatweet , 205 Chars

document.write(unescape(escape('🁳𨱲𪑰𭀾𬰽𙰦𫡢𬱰𞰧𞱮🐴𞱭👍𨑴𪀮𬁯𭰨𜰬𫠭𜐩𞱦𫱲𚁩🐰𞱩🁭𞱩𚰫𛁤𚀧🁢𬠾𙰩𚑻𩡯𬠨𪠽𜀻𪠼𫐻𚑩𩠨𨰨𪐬𪠫𚰩𚑤𚀧𘰧𚐻𩑬𬱥𘁤𚁳𚑽𩡵𫡣𭁩𫱮𘁣𚁸𛁹𚑻𭱨𪑬𩐨𮁼𯁹𚑻𪑦𚁸𙐳🐽𜐦𙡹𙐳🐽𜐩𬡥𭁵𬡮𘀰𞱸👦𚁸𚐻𮐽𩠨𮐩𯑲𩑴𭑲𫠠𜑽𩡵𫡣𭁩𫱮𘁦𚁡𚑻𬡥𭁵𬡮𘁍𨑴𪀮𩡬𫱯𬠨𨐯𜰩𯑦𭑮𨱴𪑯𫠠𩀨𨐩𮱤𫱣𭑭𩑮𭀮𭱲𪑴𩐨𬰫𨐩𯐼𛱳𨱲𪑰𭀾🁳𭁹𫁥🠪𮱦𫱮𭀭𩡡𫑩𫁹𞠢𠱯𭑲𪑥𬠢').replace(/uD./g,'')))

HTML / JS, 298 Chars

เนื่องจาก HTML เล่นกับช่องว่างต้องมีอักขระสองสามตัวที่ต้องทุ่มเทให้กับอักขระ นอกจากนี้ฟอนต์เริ่มต้นของเบราว์เซอร์ส่วนใหญ่ไม่ใช่ Courier ดังนั้นฉันต้องตั้งค่าให้เป็นเช่นนั้น ตัวละครมีค่าประมาณ 20 ตัว หากสิ่งนี้ต้องการวิธีป้อนข้อมูลโดยตรงฉันสามารถเพิ่มได้ แต่การเปลี่ยนอินพุตในปัจจุบันคือการตั้งค่า n เป็นค่าอื่น

การสาธิต

<script>s='&nbsp;';n=4;m=Math.pow(3,n-1);for(i=0;i<m;i++,d('<br>')){for(j=0;j<m;)if(c(i,j++))d('#');else d(s)}function c(x,y){while(x||y){if(x%3==1&&y%3==1)return 0;x=f(x);y=f(y)}return 1}function f(a){return Math.floor(a/3)}function d(a){document.write(s+a)}</script><style>*{font-family:"Courier"

HTML / JS ที่อ่านได้

<script>
    s='&nbsp;';
    n=4;
    m=Math.pow(3,n-1);
    for(i=0;i<m;i++,d('<br>')){
        for(j=0;j<m;)
            if(c(i,j++))
                d('#');
            else d(s)
    }
    function c(x,y){
        while(x||y){
            if(x%3==1&&y%3==1)
                return 0;
            x=f(x);
            y=f(y)
        }
        return 1
    }
    function f(a){
        return Math.floor(a/3)
    }
    function d(a){
        document.write(s+a)
        }
</script>
<style>
*{font-family:"Courier"

3

CJam, 38 35 32 31 ตัวอักษร

"■ ""՛ୗ䁎뽔휼ꆩ闳⾿➺⥧槲㩡郊"6e4b128b:c~

ลองออนไลน์

ตัวอย่างการวิ่ง

$ cjam <(echo '"■ ""՛ୗ䁎뽔휼ꆩ闳⾿➺⥧槲㩡郊"6e4b128b:c~') <<< 3; echo
■ ■ ■ ■ ■ ■ ■ ■ ■ 
■   ■ ■   ■ ■   ■ 
■ ■ ■ ■ ■ ■ ■ ■ ■ 
■ ■ ■       ■ ■ ■ 
■   ■       ■   ■ 
■ ■ ■       ■ ■ ■ 
■ ■ ■ ■ ■ ■ ■ ■ ■ 
■   ■ ■   ■ ■   ■ 
■ ■ ■ ■ ■ ■ ■ ■ ■ 

มันทำงานอย่างไร

"՛ୗ䁎뽔휼ꆩ闳⾿➺⥧槲㩡郊"6e4b128b:c~

แปลงสตริง Unicode จากฐาน 60,000 ( 6e4b) เป็นฐาน 128 ( 128b) ปลดเปลื้องไปที่อักขระ ( :c) และประเมินสตริงผลลัพธ์ (~ )

เป็นผลให้รหัสต่อไปนี้ได้รับการดำเนินการ:

"■ "                                " C := '■ '                                           ";
    li(                             " J := int(input()) - 1                               ";
       {                      }*    " for I in range(J):                                  ";
        z]A*                        "   T := [zip(C)] * 10                                ";
            ):,                     "   U := pop(T)                                       ";
               Sf*                  "   V := [ ' ' * len(u) : u ∊ U ]                     ";
                  4\t               "   U[4] := V                                         ";
                     3/{:+z~}%      "   C := { c : c ∊ zip(concat(u)), u ∊ U.split(3) }   ";
                              zN*  " print '\n'.join(zip(C))                              ";

3

Python 3 - 116 113 ตัวอักษร

แก้ไข:ดีใช้เคล็ดลับที่ฉันไม่ชอบตัวเองมากเกินไปและบีบอัดรหัสโดย 3 ไบต์ Dunno ถ้านั่นเป็นวิธีที่ดีที่สุด แต่ฉันจะไปกับมัน

exec(bytes('ⱴ㵬❛離₠崧氬浡摢⁡㩺癥污稨✫潦⁲湩琠❝਩潦⁲⁩湩爠湡敧椨瑮椨灮瑵⤨⴩⤱爺瀬氽✨㍛✪Ⱙ⡬嬢⭫‧✠⠪⨳椪⬩⤢琻爽瀫爫昊牯椠椠㩴牰湩⡴⥩','utf-16')[2:].decode('utf-8'))

มันอาจมีอักขระที่ไม่สามารถพิมพ์ได้บางส่วนดังนั้นนี่คือเวอร์ชันสำหรับพิมพ์ของสตริง

'ⱴ㵬❛離₠崧氬浡摢\u2061㩺癥污稨✫\u206b潦\u2072\u206b湩琠❝\u0a29潦\u2072\u2069湩爠湡敧椨瑮椨灮瑵⤨\u2d29⤱爺瀬氽✨㍛✪Ⱙ⡬嬢\u2b6b‧✠⠪⨳椪⬩⤢琻爽瀫爫昊牯椠椠\u206e㩴牰湩⡴⥩'

ไม่มากเกินไป แต่อย่างน้อยก็มีบางภาษา

สิ่งที่ขยายไป:

t=['■ ']
for i in range(int(input())-1):r,p=[k*3for k in t],[k+'  '*(3**i)+k for k in t];t=r+p+r
for i in t:print(i)

ค่อนข้างอวดดีในกรณีที่บางคนมองไม่เห็นวิธีการทำงาน:

t=['■ ']                                     # iteration 1
for i in range(int(input()) - 1):            # do n-1 more iterations
    r = [k * 3 for k in t]                   # first & last rows are the last carpet x3
    p = [k + '  ' * (3 ** i) + k for k in t] # middle row: last carpet, space, last carpet
    t = r + p + r                            # and put them to the new carpet
for i in t:                                  # print final iteration
    print(i)

ว้าวหลามมันน่าประทับใจ
พอลคลาเวียร์



2

Bash + coreutils 105 ตัวอักษร Unicode

เนื่องจากเรากำลังนับตัวอักษรและไม่ใช่ไบต์:

eval `iconv -tunicode<<<潦⡲眨㌽⨪␨ⴱ⤱琬〽琻眼眪琻⬫⤩笻戠ꂖ昻牯⠨㵸╴ⱷ㵹⽴㭷㹸簰祼〾砻㴯ⰳ⽹㌽⤩笻⠠砨㌥ㄭ籼╹ⴳ⤱簩扼尽簠硼〽紻瀻楲瑮⁦␢⁢㬢⠨╴⵷⭷⤱簩敼档㭯੽|cut -b3-`

ในรูปแบบถอดรหัส:

Pure Bash, 143 ไบต์

for((w=3**($1-1),t=0;t<w*w;t++));{
b=■
for((x=t%w,y=t/w;x>0||y>0;x/=3,y/=3));{
((x%3-1||y%3-1))||b=\ ||x=0
}
printf "$b "
((t%w-w+1))||echo
}

อินพุตถูกนำมาจาก args ของบรรทัดคำสั่ง:

เอาท์พุท:

$ ./sierpinskicarpet.sh 3
■ ■ ■ ■ ■ ■ ■ ■ ■ 
■   ■ ■   ■ ■   ■ 
■ ■ ■ ■ ■ ■ ■ ■ ■ 
■ ■ ■       ■ ■ ■ 
■   ■       ■   ■ 
■ ■ ■       ■ ■ ■ 
■ ■ ■ ■ ■ ■ ■ ■ ■ 
■   ■ ■   ■ ■   ■ 
■ ■ ■ ■ ■ ■ ■ ■ ■ 
$ 

2

C #

โปรแกรมเต็ม - 237:

using System;class P{static void Main(string[] a){int b=(int)Math.Pow(3,int.Parse(a[0])-1),c,d,e,f;for(c=0;c<b;c++){var g="";for(d=0;d<b;){var h="■";e=c;f=d++;while(e>0|f>0){h=e%3==1&f%3==1?" ":h;e/=3;f/=3;}g+=h;}Console.WriteLine(g);}}}

LINQPad - 166 + Math.Ceiling(Math.Log(a + 1) / Math.Log(10))

int a=3;int b=(int)Math.Pow(3,a-1),c,d,e,f;for(c=0;c<b;c++){var g="";for(d=0;d<b;){var h="■";e=c;f=d++;while(e>0|f>0){h=e%3==1&f%3==1?" ":h;e/=3;f/=3;}g+=h;}g.Dump();}

ฉันรู้ว่ามันเกือบสามปีแล้ว แต่คุณสามารถตีกอล์ฟบางสิ่งเช่นนี้: using System;class P{static void Main(string[]a){string g,h;for(int b=(int)Math.Pow(3,int.Parse(a[0])-1),c=-1,d,e,f;++c<b;Console.WriteLine(g))for(g="",d=0;d<b;g+=h)for(h="■",e=c,f=d++;e>0|f>0;e/=3,f/=3)h=e%3==1&f%3==1?" ":h;}}( 229 ไบต์ / 227 ตัวอักษร ) ( = 3 ไบต์ดังนั้นคุณสามารถแทนที่ด้วย#บันทึก 2 ไบต์ได้เช่นกัน) ฉันวางทุกอย่างไว้ในห่วงเพื่อไม่จำเป็นต้องใช้วงเล็บอีกต่อไป
Kevin Cruijssen

2

C - 154

ข้อมูลจาก stdin ฉันพยายามหาวิธีที่ดีในการหลีกเลี่ยงฟังก์ชั่นพิเศษ แต่ก็ไม่สามารถทำได้

จำนวนตัวอักษรรวมถึงช่องว่างที่จำเป็นเท่านั้น

p(l,x,y){
    return l?x/l&y/l&1||p(l/3,x%l,y%l):0;
}
x,y;
main(v){
    scanf("%d",&v);
    v=pow(3,--v);
    for(;y<v;y++,puts(""))
        for(x=0;x<v;)
            printf("%c ",p(v,x++,y)?32:35);
}

1

PHP, 194 ตัวอักษร

nรับเป็นอาร์กิวเมนต์แรกในบรรทัดคำสั่ง

<?php
function d(&$a,$n,$e,$x,$y){if(--$n)for(;$i<9;)$p=pow(3,$n)|d($a,$n,$e|$i==4,$x+$p*$j,$y+$p*($i-$j)/3)|$j=++$i%3;else$a[$x][$y]=$e?" ":■;}@d($a,$argv[1]);foreach($a as$s)echo join($s),"
";

อ่านง่าย

<?php

function draw(&$array, $n, $empty, $x, $y) {
    $n--;
    if ($n != 0) {
        for ($i = 0; $i < 9; $i++) {
            $j = $i % 3;
            $p = pow(3, $n);
            draw($array, $n, $empty || $i == 4, $x + $p * $j, $y + $p * ($i - $j) / 3);
        }
    } else {
        $array[$x][$y] = $empty ? " " : "#";
    }
}

$array = array();
draw($array, $argv[1], false, 0, 0);
foreach ($array as $line) {
    echo join($line), "\n";
}

1
หากคุณใช้ถ่านแทนคุณ#สามารถบันทึก 2 ตัวอักษรโดยลบเครื่องหมายคำพูด
Ismael Miguel

1

สกาล่า 230 ตัวอักษร

รหัส Golfed:

object T extends App {def m=math.pow(3,args(0).toInt-1).toInt-1;def p=print _;val x=0 to m;x.map{n=>x.map{j=>if(q(n,j)==1)p(" #");else p("  ")};p("\n");};def q(n:Int,j:Int):Int={if(n>0|j>0)if((n%3&j%3)==1)0 else q(n/3,j/3)else 1}}

รหัสไม่ได้รับการตอบกลับ:

object T extends App {
  def m = math.pow(3, args(0).toInt - 1).toInt - 1;

  def p = print _;
  val x = 0 to m;
  x.map { n => x.map { j => if (q(n, j) == 1) p(" #"); else p("  ")}; p("\n");};

  def q(n: Int, j: Int): Int = {
    if (n > 0 | j > 0) if ((n % 3 & j % 3) == 1) 0 else q(n / 3, j / 3) else 1
  }
}

รวมเฉพาะพื้นที่ที่จำเป็น


1

V , 21 ไบต์ (ไม่ใช่การแข่งขัน)

é*Àñ}yPgvr PGï3pyGHP

ลองออนไลน์!

hexdump:

00000000: e92a c0f1 167d 7950 6776 7220 5047 ef33  .*...}yPgvr PG.3
00000010: 7079 4748 50                             pyGHP

V ใหม่กว่าความท้าทายดังนั้นจึงต้องทำเครื่องหมายว่าไม่ใช่การแข่งขัน แต่ยังคงเป็นของดีที่จะเห็นคำตอบนี้เป็นwaaaaayสั้นกว่าทุกคนอื่น ๆ แม้ในขณะที่การนับไบต์มากกว่าตัวอักษร


เพียงเตือนความจำ; มันไม่ใช่การแข่งขันอีกต่อไป
RedClover

1

oK, 40 ไบต์

`0:" #"{(x-1)(,'//3 3#111101111b*9#,)/1}

ลองออนไลน์

มันเริ่มต้นด้วย1แล้วดึงมันลงในกริด(1 1 1;1 0 1;1 1 1)ซึ่งมันจะวาดในกริดในลักษณะเดียวกัน ฯลฯ ซ้ำจำนวนครั้งที่จำเป็น



1

C # (. NET Core) 162 ไบต์

n=>{var f="";int s=(int)Math.Pow(3,n),z=0;while(z<s*s){int x=z%s,y=z/s,h=1;for(;x>0|y>0;y/=3,x/=3)if(y%3==1&x%3==1)h=0;f+=" #"[h]+(z++%s<s-1?" ":"\n");}return f;}

ลองออนไลน์!

Degolfed

n=>{
    var f="";
    int s=(int)Math.Pow(3,n),z=0;

    while(z<s*s)
    {
        int x=z%s, y=z/s, h=1;
        for(; x>0 | y>0; y/=3, x/=3)
            if(y%3==1 & x%3==1)
                h=0;

        f += " #"[h] + (z++%s<s-1? " " : "\n");
    }

    return f;
}


0

R , 92 ตัวอักษร

94 ไบต์ด้วยอักขระพิเศษ

write(c(" ","■")[1+Reduce("%x%",rep(list(matrix(c(1,1,1,1,0,1),3,3)),n<-scan()-1),1)],1,3^n)

ลองออนไลน์!


ฉันแค่ประหลาดใจที่ผู้คนยังคงทำสิ่งนี้ในอีก 4 ปีต่อมา
Paul Clavier

1
@ PaulClavier มันเป็นความท้าทายที่ยิ่งใหญ่ คุณควรภูมิใจ :)
Giuseppe

0

Canvas , 17 16 17 ตัวอักษร

■;╷[⌐ +2×;┌∔∔;3*+

ลองที่นี่!

-1: ใช้แทนการลบอันแรกในลูป
+1: แก้ไขพฤติกรรมที่ผิดปกติ: ตอนนี้สอดคล้องกับระดับ 1 ตามที่ระบุในโพสต์ดั้งเดิม


มันคือการแข่งขันต่อฉันทามติใหม่
Erik the Outgolfer

@EriktheOutgolfer โอ้ขอบคุณที่แจ้งให้เราทราบ!
hakr14

และใช่ในกรณีนี้คะแนนคือ 17 แต่เรานับวิธีแก้ปัญหาเป็นไบต์ไม่ใช่ตัวอักษร (Canvas มีหน้ารหัส)
Erik the Outgolfer

@EriktheOutgolfer ปกติแล้วใช่ แต่ความท้าทายนี้ใช้ตัวละครเนื่องจากเป็นมัลติไบต์ พูดถึงด้านล่างในโพสต์ต้นฉบับ
hakr14

คุณต้องเพิ่มหนึ่งรายการในอินพุตทั้งหมดของคุณ 1 ควรคืนค่าสี่เหลี่ยมจัตุรัส (เช่นที่ 0 ส่งคืนที่นี่)
Paul Clavier

0

พิพ -S 30 ตัวอักษร

"■■ "@MX{{aTB3R2i}MSg}MC3**a/3

ลองออนไลน์!

แนวคิดพื้นฐาน: พิจารณาตารางพิกัดในฐาน 3 หลุมในพรมเกิดขึ้นเมื่อ 1) trit ในพิกัด x คือ1และ 2) trit ในตำแหน่งเดียวกันในพิกัด y ก็เช่น1กัน

"■■ "@MX{{aTB3R2i}MSg}MC3**a/3
                                i is 0; a is 1st cmdline arg (implicit)
                        3**a/3  Width/height of the carpet
                      MC        Make a coordinate grid that size and map this function
                                to the coordinate pairs:
                    g            Take each [x y] pair
                  MS             Map this function to each coord and add the results:
         {aTB3   }                Convert to base 3
              R2i                 Replace 2's with 0's
                                  E.g. 15 -> 120 -> 100 and 16 -> 121 -> 101
                                 When we add the results, we get [15 16] -> 201
      MX{            }           Take the max of that list (0, 1, or 2)
"■■ "@                           Use that to index into this string (resulting in a space
                                 iff two 1's coincided to make a 2, or ■ otherwise)
                                Print the resulting nested list with each sublist on its
                                own line and space-delimited (implicit, -S flag)

วิธีแก้ปัญหาที่คล้ายกันจำนวนอักขระเท่ากัน แต่ -2 ไบต์: {2N({aTB3R2i}MSg)?s'■}MC3**a/3


0

K (ngn / k) , 50 ไบต์

ขอบคุณ @Dosc สำหรับเตือนฉันฉันควรเว้นช่องว่างระหว่างคอลัมน์

1@"\n"/"# "1_',/'1,''+/''a*/:\:a:+2!!1_(. 0:"")#3;

ลองออนไลน์!


@DLosc ขอบคุณแก้ไขข้อผิดพลาดอื่น ๆ ด้วย: stdin / stdout แทนที่จะหาเรื่อง / ผล; ปิดโดยหนึ่ง "ระดับ"
ngn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.