พิมพ์ตารางการคูณทางกายภาพ


40

รูปสี่เหลี่ยมมีคุณสมบัติที่ดี - รูปสี่เหลี่ยมผืนผ้าประกอบด้วยตัวอักษร !n×mn×m

A. คุณสมบัติที่น่าสนใจคือสี่เหลี่ยมสามารถจัดเรียงอย่างดีในตารางสูตรคูณ - ตัวอย่างเช่นตาราง :3×3

# ## ###

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

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

ความท้าทายของคุณคือกำหนดหมายเลข ( ) เอาท์พุทตารางการคูณที่จัดรูปแบบnn>1n×n

กฎระเบียบ

  • คุณสามารถใช้อินพุตหนึ่งค่าด้านบนหรือด้านล่างn
  • ใช้กฎ I / O เริ่มต้น
  • คุณสามารถเลือกอักขระที่ไม่ใช่ช่องว่างเพื่อแสดงบล็อก อักขระอื่น ๆ (แม้ว่าบรรทัดใหม่จะพิเศษ) ถือว่าเป็นช่องว่าง อักขระที่เลือกอาจแตกต่างกันไปสำหรับอินพุตที่แตกต่างกัน แต่ต้องเหมือนกันตลอดทั้งอินพุต
  • ผลลัพธ์สามารถมีอักขระที่ไม่จำเป็นตราบใดที่ตารางจัดชิดและไม่มีการเกิดขึ้นของอักขระที่เลือกซึ่งไม่ได้เป็นส่วนหนึ่งของเอาต์พุตที่ต้องการ
  • ตัวคั่นต้องกว้าง 1 ตัว / สูงและต้องบรรจุสี่เหลี่ยม (เช่นไม่มีตัวคั่นระหว่างอักขระ)
  • บรรทัดว่างอาจว่างเปล่าไม่จำเป็นต้องใส่ช่องว่างภายใน
  • ผลลัพธ์สามารถเป็นสตริงเมทริกซ์เวกเตอร์ของบรรทัดอาร์เรย์ของอักขระอาร์เรย์หรืออะไรก็ได้แบบสองมิติ
  • คุณสามารถสลับเมทริกซ์ / เวกเตอร์ของเวกเตอร์ / ตัวเลขใดก็ได้แบบ 2 มิติ แต่พื้นหลังและพื้นหน้าจะต้องมีตัวเลข 2 ตัวที่แตกต่างกัน (ซึ่งอาจแตกต่างกันไปที่อินพุต แต่ไม่มีตลอดทั้งเอาต์พุต) และไม่มีตัวเลขอื่น ๆ สามารถใช้อักขระล้อมรอบพิเศษในรูปแบบนี้ได้ด้วย (แม้ว่าจะต้องตรงกับหมายเลขพื้นหลัง)
  • นี่คือคำตอบสั้นที่สุดเป็นไบต์ต่อภาษาชนะ!

ตัวอย่าง

สำหรับอินพุต2เอาต์พุตเอาต์พุต ascii-art ที่ถูกต้องพร้อมกับอักขระคือ:

        ∙ ∙∙

Result: ∙ ∙∙.
        ∙ ∙∙

ใช่ช่วงเวลานั้นมีเพียงทำให้คุณสับสน
คำตอบที่ถูกต้องอีกอย่างหนึ่งคือเมทริกซ์ตัวเลขโดยที่ 2 คือหมายเลขพื้นหลังและ 9 เบื้องหน้า:

[[9,2,9,9,2,2],
 [2,2,2,2,2,2],
 [9,2,9,9,2,2],
 [9,2,9,9,2,2]]

ตัวอย่างผลลัพธ์ที่ไม่ถูกต้องจะเป็น

#  # #


#  # #

#  # #

ในขณะที่รูปสี่เหลี่ยมผืนผ้ามีตัวคั่นในระหว่างพวกเขา

ตัวอย่างผลลัพธ์สำหรับ :4×4

# ## ### ####

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

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

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


1 0 1 1 0 1 1 1 0 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 1 0 1 1 1 0 1 1 1 1
1 0 1 1 0 1 1 1 0 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 1 0 1 1 1 0 1 1 1 1
1 0 1 1 0 1 1 1 0 1 1 1 1
1 0 1 1 0 1 1 1 0 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 1 0 1 1 1 0 1 1 1 1
1 0 1 1 0 1 1 1 0 1 1 1 1
1 0 1 1 0 1 1 1 0 1 1 1 1
1 0 1 1 0 1 1 1 0 1 1 1 1

เราสามารถมีแถว / คอลัมน์พิเศษของตัวละครพื้นหลังข้างหน้าแทนที่จะอยู่ท้ายตารางได้ไหม?
คิริลล์แอล

@KirillL แน่นอนตราบใดที่แถวเรียงกัน
dzaima

2
Nitpick: ∙ (U + 2219: BULLET OPERATOR) ไม่มีอยู่ในชุดอักขระ ASCII ไม่เป็น• (U + 2022: BULLET) หรือ⋅ (U + 22C5: DOT Operator) หรือ· (U + 00B7: MIDDLE DOT) :)
Andreas Rejbrand

คำตอบ:


10

Haskell , 43 ไบต์

f n=map=<<flip(map.max)$show.(10^)=<<[1..n]

ลองออนไลน์!

วิธีการที่ชาญฉลาดโดยØrjan Johansen ให้ผลลัพธ์เป็น 0 และ 1 โดยสร้างแต่ละ10...00ส่วนเป็นสตริงแทนค่ากำลัง 10

111111111
101001000
111111111
101001000
101001000
111111111
101001000
101001000
101001000

Haskell , 49 ไบต์

f n=map=<<flip(map.max)$[0^i|x<-[1..n],i<-[0..x]]

ลองออนไลน์!

สร้างรูปแบบเช่น[1,0,1,0,0,1,0,0,0,...]นั้นสร้าง 2D โดยการminจับคู่ ความไร้จุดหมายแบบ pointfree ช่วยประหยัด 2 ไบต์ในการอ่านได้มากขึ้น:

f n|l<-do x<-[1..n];0:(1<$[1..x])=[[a*b|a<-l]|b<-l]

ลองออนไลน์!


3
นี้สามารถสั้นลงด้วยเคล็ดลับหมายเลขสามเหลี่ยมของฉันเก่า: 43 ไบต์
Ørjan Johansen

1
เพิ่งรู้ว่าflip(map.max)=mapM max.
Ørjan Johansen

@ ØrjanJohansenโอ้โหนั่นมันทำงานยังไง? ฉันคิดว่าคุณสามารถทำได้ด้วยการโพสต์คำตอบของคุณเอง :-)
xnor

ตั้ง monad ไปแล้ว(->) b mapM :: (a -> b -> c) -> [a] -> b -> [c]
Ørjan Johansen

@xnor คุณลืมเปลี่ยนflip(map.max)เป็นmapM max
ASCII-only

9

R , 56 54 43 36 30 ไบต์

x=!!sequence(2:scan())-1;x%o%x

ลองออนไลน์!

รับอินพุตหนึ่งด้านบน (ดังนั้นจะส่งกลับเมทริกซ์ 3x3 สำหรับ ) ส่งกลับเมทริกซ์ที่ (เบื้องหน้า) และ (พื้นหลัง) ด้วยแถว / คอลัมน์เพิ่มเติมที่มีศูนย์เป็นศูนย์ด้านหน้าnn=41s0s

ขอบคุณ digEmAll สำหรับ -7 ไบต์


ขอบคุณ BTW อาจเป็น 30 ได้ถ้าแถวว่างพิเศษสามารถอยู่ข้างหน้าแทนที่จะเป็นตอนท้าย
คิริลล์แอล

โอ้พวกเขาได้ไหม ฉันคิดถึงสิ่งนั้น!
digEmAll

6

JavaScript (ES6),  73 72  69 ไบต์

ส่งคืนสตริงที่ทำจาก 1 ช่องว่างและการป้อนบรรทัด

n=>(g=s=>n-->0?g(s+`${p+=1} `):s[~n]?(+s[~n]?s:'')+`
`+g(s):'')(p='')

ลองออนไลน์!


JavaScript (ES7),  87 83  82 ไบต์

บันทึกแล้ว 3 ไบต์ขอบคุณ @dzaima

ส่งคืนเมทริกซ์ไบนารีซึ่งสร้างขึ้นโดยเซลล์

n=>[...Array(n*(n+3)/2)].map((_,y,a)=>a.map(h=(z,x)=>(17+8*x)**.5%1&&(z||h(1,y))))

ลองออนไลน์!

อย่างไร?

ความกว้างของเมทริกซ์กำหนดโดย:w

w=Tn+n1=(n+12)+n1=n(n+3)21

(หมายเหตุ: ตามกฎความท้าทายเราอนุญาตให้แสดงเมทริกซ์ความกว้างแทน)w+1

ในทำนองเดียวกันเซลล์ที่อยู่ที่จะว่างเปล่าหากสมการกำลังสองต่อไปนี้ยอมรับว่าเป็นจำนวนเต็มรูตสำหรับหรือ :(X,Y)k=Xk=Y

x(x+3)21k=0x2+3x22k=0

ซึ่งปัจจัยคือ:

Δ=94(22k)=17+8k


ไม่แน่ใจว่าสามารถบันทึกไบต์ได้หรือไม่ แต่การแก้ปัญหาของสมการกำลังสองนั้นจะเป็นดังนั้นจะมีรูตจำนวนเต็มถ้าเป็นเลขคี่นั่นคือ ,เป็นตารางที่สมบูรณ์คี่ 3±17+8k2 ΔΔΔ
Erik the Outgolfer

5

MATL, 14 10 ไบต์

:"@:Fv]g&*

คำตอบนี้ใช้1สำหรับบล็อกและ0พื้นหลัง

ลองใช้ที่MATL Online

คำอธิบาย

     % Implicitly grab the input as an integer, N
     %   STACK: { 3 }
:    % Create an array from 1...N
     %   STACK: { [1, 2, 3] }
"    % For each element M in this array
  @: % Create an array from 1...M
     %   STACK (for 1st iteration): { [1] }
     %   STACK (for 2nd iteration): { [1; 0], [1, 2] }
     %   STACK (for 3rd iteration): { [1; 0; 1; 2; 0], [1, 2, 3] }
  F  % Push a zero to the stack
     %   STACK (for 1st iteration): { [1], 0 }
     %   STACK (for 2nd iteration): { [1; 0], [1, 2], 0 }
     %   STACK (for 3rd iteration): { [1; 0; 1; 2; 0], [1, 2, 3], 0 }
  v  % Vertically concatenate everything on the stack
     %   STACK (for 1st iteration): { [1; 0] }
     %   STACK (for 2nd iteration): { [1; 0; 1; 2; 0] }
     %   STACK (for 3rd iteration): { [1; 0; 1; 2; 0; 1; 2; 3; 0] }
] 
g    % Convert everything to be boolean (turns all non-zeros to 1)
     %   STACK: { [1; 0; 1; 1; 0; 1; 1; 1; 0] }
&*   % Perform element-wise multiplication to expand this array out into the 2D grid
     % Implicitly display the result


4

APL (Dyalog Unicode) , 12 10 12 ไบต์SBCS

∘.×⍨∊,\0,⎕⍴1

ลองออนไลน์!

แก้ไข: -2 ไบต์จาก ngn +2 ไบต์เนื่องจากคำตอบก่อนหน้านี้ไม่ถูกต้อง (ด้วยแนวคิดขอบคุณ ngn และ dzaima)

คำอธิบาย

∘.×⍨∊,\0,⎕⍴1

             Take input.
           1  An array of 1s of length our input. Example: 1 1 1
       0,      Prepend a 0. Example: 0 1 1 1
     ,\        Take all the prefixes and concatenate them. Example: 0  0 1  0 1 1  0 1 1 1
              Flatten the list. Example: 0 0 1 0 1 1 0 1 1 1
∘.×⍨           Turn the above list into a multiplication table of 0s and 1s
               by multiplying the list with itself.

ผลลัพธ์ควรมีลักษณะดังนี้:

0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 1 0 1 1 0 1 1 1
0 0 0 0 0 0 0 0 0 0
0 0 1 0 1 1 0 1 1 1
0 0 1 0 1 1 0 1 1 1
0 0 0 0 0 0 0 0 0 0
0 0 1 0 1 1 0 1 1 1
0 0 1 0 1 1 0 1 1 1
0 0 1 0 1 1 0 1 1 1

1
คุณสามารถป้อนข้อมูลเพื่อหลีกเลี่ยงการ{ }
ngn

4

เยลลี่ขนาด 7 ไบต์

‘RÄṬ|þ`

ลองออนไลน์!

ส่งออกเมทริกซ์หลักโดยใช้สำหรับสี่เหลี่ยมและสำหรับการขยายระหว่าง ลิงก์ TIO ประกอบด้วยส่วนท้ายซึ่งจัดรูปแบบเมทริกซ์หลักในลักษณะที่มนุษย์สามารถอ่านได้โดยการเรียงแถวและคอลัมน์01

คำอธิบาย

‘RÄṬ|þ`
 R       Take a range from 1 to
‘          {the input} plus 1
  Ä      Cumulative sum; produces the first {input}+1 triangular numbers
   Ṭ     Produce an array with 1s at those indexes, 0s at other indexes
     þ   Create a table of {the array}
      `    with itself
    |      using bitwise OR

ตัวเลขที่เซลล์ของตารางผลลัพธ์จะเป็นหากหรือใด ๆ เป็นตัวเลขสามเหลี่ยมหรือมิฉะนั้น (เนื่องจาก bitwise OR ทำงานเหมือนตรรกะหรือบน 0 และ 1) (เราใช้ช่วงตั้งแต่ 1 เพราะ Jelly ใช้การจัดทำดัชนีแบบ 1 ดังนั้นเราไม่ต้องกังวลเกี่ยวกับคอลัมน์ 0 ที่เต็มไปด้วย 0 ไม่ถูกต้องเราต้องเพิ่ม 1 ลงในอินพุตเนื่องจากอาร์เรย์ที่ผลิตโดย(x,y)1xy0Rหยุดที่องค์ประกอบที่ใหญ่ที่สุดที่กำหนดในอินพุตดังนั้นเราจำเป็นต้องวาดเส้นที่ด้านขวาและด้านล่าง) ช่องว่างระหว่างตัวเลขสามเหลี่ยมเป็นจำนวนเต็มต่อเนื่องดังนั้นบล็อกสี่เหลี่ยมที่เกิดจากช่องว่างระหว่างปลายเส้น ขึ้นเป็นขนาดที่ร้องขอตามคำถาม; และการใช้งานหรือการดำเนินการ OR (ในกรณีนี้คือ bitwise) ทำให้สามารถตัดกันได้อย่างถูกต้อง


ทำไมนี่เป็นวิกิชุมชน หากคุณต้องการสละตัวแทนคุณสามารถให้ Erik the Outgolfer
Jonathan Allan

1
ฉัน CW คำตอบทั้งหมดของฉัน (เว้นแต่ฉันคิดว่าพวกเขาอาจได้รับรางวัลซึ่งในกรณีนี้ฉันใช้บัญชีชั่วคราวสำหรับพวกเขา) การตั้งเป้าหมายเพื่อชื่อเสียงที่สูงหมายถึงการทำให้ไซต์แย่ลง (ฉันเคย repcapped ทุกวันเป็นเวลาหนึ่งสัปดาห์เพื่อพิสูจน์ว่ามันเป็นไปได้มันไม่ยากโดยเฉพาะและยังเกี่ยวข้องกับคำถาม / คำตอบตื้น ๆ มากมายที่ไม่ได้ ไม่ค่อยมีส่วนร่วมกับเว็บไซต์เท่าไหร่) นอกจากนี้การได้รับชื่อเสียงนั้นส่วนใหญ่เป็นลบในบัญชีเพราะทำให้ไซต์ดังกล่าวทำให้คุณต้องทำการกลั่นกรอง และการได้รับสิทธิพิเศษเพิ่มความเสี่ยงในการรับป้ายโดยไม่ได้ตั้งใจ
ais523

นอกจากนี้ฉันส่วนใหญ่ไม่เห็นด้วยกับแนวคิดการเป็นเจ้าของโพสต์ใน SE (แม้ว่าส่วนใหญ่มีคำถามมากกว่าคำตอบ แต่คุณไม่สามารถ CW คำถามโดยไม่มีผู้ดูแลช่วยเหลือ) เครื่องหมาย CW ชัดเจนมากพูดว่า "ถ้ามีอะไรผิดปกติที่นี่อย่าลังเลที่จะแก้ไข"; ดังนั้นฉันจะใช้เครื่องหมาย CW กับทุกสิ่งแม้ว่ามันจะไม่สละชื่อเสียงก็ตาม SE หมายถึงเป็นส่วนหนึ่งของ wiki แต่ผู้คนไม่ได้ใช้มันตลอดเวลา
ais523

RE "เล็งเพื่อชื่อเสียงที่สูง" หากคุณไม่ต้องการให้โพสต์เมื่อคุณคิดว่ามันมีความหมายและหลีกเลี่ยงสิ่งที่คุณเรียกว่า "ตื้น" ถาม & ตอบ คุณอาจรู้สึกว่าคำตอบนี้เพิ่มบางสิ่งบางอย่างในเว็บไซต์ซึ่งในกรณีนี้โพสต์โดยไม่มี CW หรือคุณคิดว่ามันเป็น "ตื้น" ซึ่งในกรณีนี้ก็ไม่โพสต์ RE "ส่วนใหญ่ฉันไม่เห็นด้วยกับแนวคิดการเป็นเจ้าของโพสต์ใน SE" - คุณก็ผิดเว็บไซต์
Jonathan Allan

2
ฉันคิดว่าคำตอบนั้นเพิ่มบางสิ่งลงในไซต์ แต่ถ้าไม่ใช่ CW ฉันรู้สึกว่าถูกบังคับให้โพสต์ในแบบที่ทำให้ฉันมีชื่อเสียงมากกว่าการโพสต์สิ่งที่ฉันคิดว่าน่าสนใจ ย้อนกลับไปเมื่อฉันเป็นผู้ใช้ 20k ฉันจบลงด้วยความเกลียดชังไซต์และเกือบจะหันหลังให้กับโค้ดกอล์ฟทั่วไปเพราะมันดังนั้นฉันจึงลบบัญชีของฉันออก เมื่อฉันกลับมาฉันใช้ในการลบบัญชีของฉันกับทุกคำตอบที่ฉันโพสต์ (สร้างขึ้นใหม่สำหรับคำตอบถัดไป) แต่มีคนอื่นชี้ให้เห็นว่า CWing ทุกคำตอบจะมีผลที่คล้ายกันดังนั้นทุกวันนี้
ais523

4

05AB1E , 9 ไบต์

กำหนดโปรแกรม{]]}fNatList[List[Nat]]

รหัส:

$L×0ýSDδ*

ใช้05AB1E -encoding ลองออนไลน์! หรือใช้รุ่นสวยพิมพ์


คำอธิบาย:

$ # กดตัวเลข 1 และอินพุตn 
 L # สร้างรายการ [1, 2, 3, ... , n ]
  × # การคูณสตริง Vectorized: 1 × [1, 2, 3, ... , n ]
                 สิ่งนี้จะส่งผลให้ ["1", "11", "111", ... , "1" × n ]
   0ý # เข้าร่วมรายการผลลัพธ์ด้วย '0' ส่งผลให้ "10110111011110111110 ... "
     S # แบ่งเป็นหลักเดียว: [1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, ... ]
      ตารางสูตรคูณด้วยตัวเอง

4

C # (Visual C # Interactive Compiler) , 96 95 ไบต์

-1 ไบต์ขอบคุณศูนย์รวมแห่งความไม่รู้

n=>{var l="";for(;n>0;)l=new string('#',n--)+' '+l;for(;n<l.Length;)WriteLine(l[n++]>32?l:"");}

ลองออนไลน์!


ไม่แน่ใจว่าอินพุตผ่านการโต้แย้ง แต่อนุญาตให้ส่งออกผ่าน stdout
ASCII เท่านั้น

3
การผสมรูปแบบ IO นั้นทำได้ดี
Jo King

1
ทำไมไม่เพิ่มn--ในnew stringส่วน?
ศูนย์รวมแห่งความไม่รู้


3

Python 2 , 67 ไบต์

s='';n=input()
while n:s='#'*n+' '+s;n-=1
for c in s:print(c>' ')*s

ลองออนไลน์!

พิมพ์บรรทัดว่างเปล่าสำหรับบรรทัดว่างเปล่าซึ่งความท้าทายอนุญาต

ความยาวเท่ากัน (ที่มีอินพุทข้างบนn):

r=range(input())
for n in r:print(' '.join(i*'#'for i in r)+'\n')*n

ลองออนไลน์!



3

ถ่าน 18 ไบต์

≔⪫EN×#⊕ι θEθ⭆θ⌊⟦ιλ

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

   N                Input number
  E                 Map over implicit range
       ι            Current value
      ⊕             Incremented
    ×               Repetitions of
     #              Literal `#`
 ⪫                  Join with spaces
≔        θ          Assign to variable
           θ        Retrieve variable
          E         Map over characters
             θ      Retrieve variable
            ⭆      Replace characters with
              ⌊     Minimum of
               ⟦    List of
                ι   Row character
                 λ  Column character
                    Implicitly print each row on its own line

3

C # (.NET Core) , 208 155 ไบต์

class M{static void Main(string[]a){int i=int.Parse(a[0]);var l="";for(;i>0;)l=new string('#',i--)+' '+l;for(;;)System.Console.WriteLine(l[i++]>32?l:"");}}

ลองออนไลน์!

รุ่นปรับปรุงมากขอบคุณคนที่เป็นประโยชน์ต่างๆ (ดูความคิดเห็น)




1
@EmbodimentofIgnorance ไม่ถูกต้องไม่ทำงานสำหรับ n> = 10 ...
ASCII-only

1
@ ASCII เฉพาะงานนี้: tio.run/…
ศูนย์รวมของความไม่รู้

2
@Stackstuck ใช่ โปรแกรมได้รับอนุญาตให้ยุติโดยการหยุดทำงาน
ASCII-only


3

Java 11, 109 ไบต์

n->{var l="";for(;n>0;)l="x".repeat(n--)+" "+l;for(;n<l.length();)System.out.println(l.charAt(n++)>32?l:"");}

ท่าเรือASCII-only @ 's C # .NET คำตอบ

ลองออนไลน์

n->{                       // Method with integer parameter and no return-type
  var l="";                //  Line-String, starting empty
  for(;n>0;)               //  Loop until `n` is 0:
    l=...+l;               //   Prepend to `l`:
       "x".repeat(n--)+" " //    Repeat "x" `n` amount of times, appended with a space
                           //    And decrease `n` by 1 afterwards with `n--`
    for(;n<l.length();)    //   Inner loop as long as `n` is smaller than the length of `l`:
      System.out.println(  //    Print with trailing newline:
        l.charAt(n++)>32?  //     If the `n`'th character of the line-String is NOT a space:
                           //     And increase `n` by 1 afterwards with `n++`
         l                 //      Print the line-String
        :                  //     Else:
         "");}             //      Print nothing (so only the newlines)

เป็น Java 11 ไม่ใช่ 8 เนื่องจากrepeatวิธีการ
Olivier Grégoire

@ OlivierGrégoireโอ๊ะโอ.. คงที่
Kevin Cruijssen

แม้ว่าจะเป็นที่ยอมรับหรือไม่ที่จะมีแลมบ์ดาที่ทำให้เกิดข้อยกเว้น? ฉันคิดว่ามันโอเคสำหรับโปรแกรมเต็มรูปแบบ แต่ไม่ใช่สำหรับฟังก์ชั่น / ข้อยกเว้น
Olivier Grégoire

@ OlivierGrégoireตราบใดที่ยังแสดงผลลัพธ์ตามที่คาดหวังไว้ฉันไม่เห็นสาเหตุที่ไม่เป็นเช่นนั้น
Kevin Cruijssen

1
สิ่งนี้เชื่อมโยงกับการสนทนานี้ คำตอบน่าจะเป็นถ้า REPL ได้รับการยอมรับ (ซึ่งไม่ใช่ค่าเริ่มต้น) มันก็ดีที่จะพิมพ์บน stderr หรือโยนข้อยกเว้น แต่ถ้า REPL ไม่ได้รับการยอมรับก็ไม่อนุญาต std / exception
Olivier Grégoire

2

APL + WIN, 29 ไบต์

m/⍉(m←¯1↓∊(⍳n),¨¯1)/(n,n←⎕)⍴1

คำอธิบาย:

(n,n←⎕)⍴1 prompt for integer n and create a nxn matrix of 1s

(m←¯1↓∊(⍳n) replicate the columns by 1,2,.....n and insert 0s between each replication

m/⍉ repeat replication and 0 insertion for the rows from above 

ตัวอย่าง:

⎕:
3
1 0 1 1 0 1 1 1
0 0 0 0 0 0 0 0
1 0 1 1 0 1 1 1
1 0 1 1 0 1 1 1
0 0 0 0 0 0 0 0
1 0 1 1 0 1 1 1
1 0 1 1 0 1 1 1
1 0 1 1 0 1 1 1



2

Ruby , 55 ไบต์

->n{(s=(1..n).map{|x|?#*x}*' ').chars.map{|c|c<?!?c:s}}

ลองออนไลน์!

อย่างไร?

ก่อนสร้างบรรทัดแรกจากนั้นวนซ้ำผ่านตัวอักษร พิมพ์ทั้งบรรทัดหากอักขระคือ '#' มิฉะนั้นพิมพ์อักขระเดี่ยว (ซึ่งเป็นช่องว่าง)



2

Perl 6 , 35 33 ไบต์

{((\*Xx$_+1)~"
"Xx$_+1)>>.say}o^*

ลองออนไลน์!

Callable นิรนามที่ใช้ตัวเลขและพิมพ์ตารางการคูณด้วย*s ด้วยการขึ้นบรรทัดใหม่

คำอธิบาย:

{                             }o^* # Change the input to the range 0..n-1
  (\*Xx$_+1)    # Cross string multiply '*' by all of range 1..n
                # This creates the string "* ** *** ****" etc.
            ~"\n"                 # Append a newline
                 Xx$_+1           # Cross string multiply again
 (                     )>>.say    # And print all the lines

1

Haskell, 69 68 ไบต์

(a#b)0=[]
(a#b)n=(a#b)(n-1)++b:(a<$[1..n])
f n=((1#0)n#(0<$(1#0)n))n

ส่งคืนเมทริกซ์ของตัวเลข

ลองออนไลน์!

ตัวแปรที่fมีจำนวนไบต์เดียวกัน:

f n=((#)<*>(0<$)$(1#0)n)n
f n|l<-(1#0)n=(l#(0<$l))n

0 แถวและคอลัมน์ช่วยได้หรือไม่
dfeuer

1
@dfeuer: ใช่พวกเขาบันทึกไบต์ ดูรุ่นแรกของคำตอบของฉัน
nimi

1

Stax , 7 ไบต์

é╫▐§╘←╘

เรียกใช้และแก้ไขข้อบกพร่อง

ตัวละครที่เลือกคือ backtick (คุณจะฟอร์แมตโค้ดใน markdown ได้อย่างไร)

นั่นหมายถึงaและbได้รับการพิจารณาว่าเป็นช่องว่างที่ไม่เกี่ยวข้อง


1

MathGolf , 20 ไบต์

╒ÉÄ10;]h\■mÆε*╣¡§y╠n

ลองออนไลน์!

MathGolf ต้องการฟังก์ชั่นเพิ่มเติมสำหรับการแยกรายการและสร้างรายการ 2D จริงๆ

คำอธิบาย

╒                      range(1,n+1)
 É                     start block of length 3
  Ä                    start block of length 1
   1                   push 1
    0                  push 0
     ;                 discard TOS
      ]                end array / wrap stack in array
                       the stack now contains the list [1, 0, 1, 1, 0, 1, 1, 1, 0, 1, ...]
       h               length of array/string without popping (used for splitting string)
        \              swap top elements
         ■             cartesian product with itself for lists, next collatz item for numbers
          m            explicit map
           Æ           start block of length 5
            ε*         reduce list by multiplication (logical AND)
              ╣¡       push the string " #"
                §      get character at index 0 or 1 based on logical AND value
                       block ends here, stack is now ['#',' ','#','#',' ','#',...]
                 y     join array without separator to string
                  ╠    pop a, b, push b/a (divides the string using the length of a single line)
                   n   join array of strings with newlines

1

หมึก , 151 152 151 ไบต์

VAR k=0
=t(n)
~k=n
-(u)
~n--
{n+1:->s(k-n)->u}->->
=r(c)
->g(c)->
{k-c:<>->r(c+1)}->->
=g(n)
{n>1:@<>->g(n-1)}@->->
=s(n)
{n:
->r(1)->
->s(n-1)
}
.->->

ลองออนไลน์!

สิ่งที่ดีกฎอนุญาตให้ใช้อักขระส่วนเกิน

แก้ไข: +1: แก้ไขระยะห่าง นอกจากนี้แสดงโดยใช้ @ (ซึ่งไม่จำเป็นต้องมีการหลบหนี) แทนที่จะเป็น # (ซึ่งใช้)

แก้ไข: -1: เห็นได้ชัดว่าการแก้ไขยังหมายความว่าฉันไม่จำเป็นต้องใช้ช่วงเวลาต่อท้ายเพื่อบังคับให้ขึ้นบรรทัดใหม่ในบรรทัดที่ไม่ว่างเปล่า เรียบร้อย


โอ้จริงฉันไม่ได้สังเกตเห็นช่องว่างเหล่านั้น ฉันจะดูว่าฉันสามารถทำอะไรบางอย่างเกี่ยวกับพวกเขา ...
Sara J


0

SmileBASIC, 83 77 ไบต์

เอาท์พุทแบบกราฟิก อินพุตคือN-1

INPUT N
FOR J=0TO N
X=0FOR I=0TO N
GFILL X,Y,X+I,Y+J
X=X+I+2NEXT
Y=Y+J+2NEXT

0

Python 3 , 88 83 ไบต์

-5 ไบต์จากJo King

n,l=range(int(input())),''
for i in n:l+='#'*-~i+' '
for j in n:print((l+'\n')*-~j)

ลองออนไลน์!


คุณสามารถบันทึกไบต์โดยประกาศlนอกลูป ลองออนไลน์!
Jo King

@JonathanFrech มีช่องว่างเพิ่มเติมในสตริงการขึ้นบรรทัดใหม่
Jo King

0

Perl 6, 63 ไบต์

{(1..$_).map(((1..$_).map("#"x*).join(" ")~"\n")x*).join("\n")}

1
.join(' ')ไม่ทำอะไรเลย'#'สามารถเป็นได้\*สตริง newline สามารถใช้การขึ้นบรรทัดใหม่ตามตัวอักษรทั้งสองl.map(str x*)สามารถ(str Xx l)แทนได้ 38 ไบต์
Jo King

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