พิมพ์หมายเลขสามเหลี่ยม


25

รับจำนวนN, เอาท์พุท NxN มุมขวาสามเหลี่ยมซึ่งแต่ละแถวจะเต็มไปด้วยตัวเลขถึงii

ตัวอย่าง

n = 0

(ไม่มีเอาต์พุต)

n = 4

1
1 2
1 2 3
1 2 3 4

n = 10

1
1 2
1 2 3
.
.
.
1 2 3 4 5 6 7 8 9 10

(ไม่จำเป็นต้องจัดตำแหน่ง)

n = N

1
1 2
1 2 3
.
.
.
1 2 3 4 .... N

ไม่มีช่องว่างท้ายท้ายแต่ละบรรทัด

จำนวนไบต์ที่น้อยที่สุดที่ชนะและไม่อนุญาตช่องโหว่มาตรฐาน


เอาต์พุตสามารถเป็นรายการของตัวเลขที่ซ้อนกันได้หรือไม่?
Seequ

สิ่งที่ควรเป็นพฤติกรรมสำหรับ n = 0 และสำหรับ n> 9
freekvd

@ ซิกแน่นอนว่าตราบใดที่ผลลัพธ์ถูกต้อง
Tan WS

@fanvd สำหรับ 0 ไม่มีผลลัพธ์สำหรับ n> 9 ไม่จำเป็นต้องทำการฟอร์แมตเป็นพิเศษ
Tan WS

อ่าคุณส่งของฉันหัก แก้ไข ASAP
seequ

คำตอบ:


17

Joe , 5 3 ไบต์ (+2 หรือ +3 สำหรับการ-tตั้งค่าสถานะ)

เห็นได้ชัดว่าฉันไม่ได้ใช้ศักยภาพเต็มที่ของโจ นี่เป็นไปได้เมื่อฉันโพสต์สิ่งนี้ครั้งแรก

\AR

ที่นี่Rให้ช่วงตั้งแต่ 0 ถึง n พิเศษ จากนั้น\Aใช้คำนำหน้าต่อเนื่องของมัน ( Aเป็นฟังก์ชันตัวตน) ตัวอย่าง:

ด้วยการ-tตั้งค่าสถานะ (หมายเหตุ: นี่เป็นเอาท์พุทมาตรฐานแม้ไม่มีแฟล็ก):

   (\AR)5
0
0 1
0 1 2
0 1 2 3
0 1 2 3 4
   \AR5
0
0 1
0 1 2
0 1 2 3
0 1 2 3 4
   \AR2
0
0 1
   \AR1
0
   \AR0

ปราศจากมัน:

   \AR5
[[0], [0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4]]
   (\AR)5
[[0], [0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4]]
   \AR2
[[0], [0, 1]]
   \AR1
[[0]]
   \AR0
[]

กฎได้เปลี่ยนไปเล็กน้อย รหัสเก่าของฉันทำงานไม่ถูกต้องด้วย N = 0 นอกจากนี้ตอนนี้เอาต์พุตอาจเป็นเพียงรายการซ้อนกันดังนั้น-tสามารถถูกปล่อยได้

1R1+R

ตอนนี้Rnให้ช่วงจาก 0 ถึง n พิเศษ ถ้าได้ 0 มันจะส่งคืนรายการว่างเปล่า 1+เพิ่ม 1 ทุกองค์ประกอบของช่วงนั้น 1Rแม็พค่ากับช่วงตั้งแต่ 1 ถึง x รายการที่ว่างเปล่าเมื่อแมปให้ส่งคืนรายการว่าง

ตัวอย่างผลลัพธ์:

   1R1+R0
[]
   1R1+R5
[[1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5]]

อัปเดต: ฉันเพิ่งสังเกตเห็นบางสิ่ง ฟังก์ชั่นแผนที่โดยอัตโนมัติเพื่อจัดอันดับองค์ประกอบ 0 ตัวอย่างต่อไปนี้ถูกรันด้วย-tแฟล็ก

   1R1+R3 5 8
1
1 2
1 2 3

1
1 2
1 2 3
1 2 3 4
1 2 3 4 5

1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6
1 2 3 4 5 6 7
1 2 3 4 5 6 7 8

เก่า: 5 ไบต์ (พร้อม-tธง)

1R1R

นี่เป็นฟังก์ชั่นที่ไม่ระบุชื่อซึ่งใช้ตัวเลขสร้างรายการจาก 1 ถึง N ( 1Rn) และแมปค่าเหล่านั้นกับช่วงก่อนหน้าโดยให้ช่วงจาก 1 ถึง x สำหรับแต่ละรายการในช่วง 1 ถึง N

การ-tตั้งค่าสถานะให้ผลลัพธ์เป็นตารางแบบ J

   1R1R5
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5

หมายเหตุ: ภาษานั้นใหม่มากและไม่สมบูรณ์ แต่เวอร์ชั่นล่าสุดออกวางจำหน่ายก่อนที่จะมีความท้าทายนี้


4
ดังนั้น J จึงไม่เพียงพอสำหรับการได้เปรียบในการแข่งขันที่ท้าทาย : D
เครื่องมือเพิ่มประสิทธิภาพ

4
@Optimizer Optimizing เป็นสิ่งสำคัญ
seequ

4
ทันใดนั้นคำตอบที่ได้รับการโหวตมากที่สุดคือคำตอบที่ฉันใช้เวลาน้อยที่สุด ความอยุติธรรม
seequ

1
ฉันเดาว่า Joe ไม่ใช่ Joe โดยเฉลี่ยของคุณ ...
Justin

10

Python 3, 48 45 ไบต์

f=lambda n:n and[f(n-1),print(*range(1,n+1))]

ไชโยสำหรับผลข้างเคียง


2
ซ้อนกันไม่มีอะไร ตอนนี้มันกำลังบิด
seequ

นั่นเป็นกลอุบายที่ดี: วางฟังก์ชั่นก่อนprintเพื่อดำเนินการprints ในลำดับย้อนกลับ
xnor

8

APL, 5

⍪⍳¨⍳⎕

สร้างเวกเตอร์ 1..n และสำหรับแต่ละองค์ประกอบอีกเวกเตอร์ดังกล่าว

จากนั้น⍪สร้างคอลัมน์จากเวกเตอร์ทั้งหมด วิธีนี้ช่วยหลีกเลี่ยงปัญหาช่องว่างต่อท้าย

ลองใช้กับtryapl.org


วิธีแก้ปัญหาที่เก่ากว่า:

{⎕←⍳⍵}¨⍳⎕

สร้างเวกเตอร์ 1..n

{⎕←⍳⍵} เป็นฟังก์ชั่นที่ส่งออกสำหรับแต่ละองค์ประกอบ (¨) เวกเตอร์ 1..n บนบรรทัดแยกต่างหาก

น่าเสียดายที่ tryapl.org ไม่สามารถลองได้เนื่องจาก⎕←ใช้งานไม่ได้


ไม่ควรมีช่องว่างต่อท้ายในบรรทัดใด ๆ
Randomra

อาขอบคุณคุณฉันพลาดไป จะแก้ไขในไม่ช้า
Moris Zucca

ฉันรู้ว่า APL จะเป็นทางออก
Conor O'Brien

โอ้พระเจ้าตาของฉันเห็นอะไร
Codefun64

6

J, 27 ไบต์

J ไม่ดีกับเอาต์พุตตัวเลขที่ไม่ใช่อาร์เรย์ ฟังก์ชันนี้สร้างสตริงที่จัดรูปแบบอย่างถูกต้องจากตัวเลข

   ;@(<@,&LF@":@:>:@:i.@>:@i.)

   (;@(<@,&LF@":@:>:@:i.@>:@i.)) 4
1
1 2
1 2 3
1 2 3 4

ลองออนไลน์ได้ที่นี่


คุณสามารถใช้]\@i.เพื่อรับ;@(<@,&LF@":@:>:@:]\@i.)
seequ

6

PHP, 53 ไบต์

แก้ไข 2: Ismael Miguelแนะนำให้อ่านจากอินพุตแทนที่จะกำหนดฟังก์ชันดังนั้นคะแนนในขณะนี้คือ 53 ไบต์สำหรับ PHP:

for($a=1;@$i++<$n=$argv[1];$a.=" ".($i+print"$a\n"));

และสามารถปรับปรุงได้อีกครั้งหากกำหนดค่า PHP ให้ละเว้นข้อผิดพลาด (52 ไบต์):

for($a=1;$i++<$n=$argv[1];$a.=" ".($i+print"$a\n"));
for($a=1;$i++<$n=$_GET[n];$a.=" ".($i+print"$a\n"));

แก้ไข: Austinแนะนำรุ่น 60 ไบต์ในความคิดเห็น:

function f($n){for($a=1;@$i++<$n;$a.=" ".($i+print"$a\n"));}

สิ่งใดที่สามารถปรับปรุงได้หากเราไม่แสดงข้อผิดพลาด PHP (59 ไบต์):

function f($n){for($a=1;$i++<$n;$a.=" ".($i+print"$a\n"));}

$aเก็บบรรทัดถัดไปที่จะพิมพ์และแต่ละครั้งที่พิมพ์ช่องว่างและหมายเลขถัดไป ( printส่งคืนเสมอ1) จะถูกต่อกัน


ฟังก์ชั่นวนซ้ำ (65 ไบต์):

function f($n){$n>1&&f($n-1);echo implode(' ',range(1,$n))."\n";}
function f($n){$n>1&&f($n-1);for(;@$i++<$n;)echo$i,' ';echo"\n";}   // Using @ to hide notices.

ฟังก์ชันเรียกซ้ำที่สั้นกว่าโดยมีการรายงานข้อผิดพลาดถูกปิดใช้งาน (64 ไบต์):

function f($n){$n>1&&f($n-1);for(;$i++<$n;)echo$i,' ';echo"\n";}

แม้แต่ฟังก์ชั่นวนซ้ำที่สั้นลงโดยที่การรายงานข้อผิดพลาดถูกปิดใช้งานและบรรทัดว่างก่อนเอาต์พุตจริง (62 ไบต์):

function f($n){$n&&f($n-1);for(;$i++<$n;)echo$i,' ';echo"\n";}

เพื่อความสนุกสนานและไม่ซ้ำซาก

function f($n){for($i=0;$i<$n;print implode(' ',range(1,++$i))."\n");}    // 70 bytes
function f($n){for(;@$i<$n;print implode(' ',range(1,@++$i))."\n");}      // 68 bytes, hiding notices.
function f($n){for(;$i<$n;print implode(' ',range(1,++$i))."\n");}        // 66 bytes, error reporting disabled.

2
45 bytes:for($a=1;@$i<$n;$a.=" ".(@++$i+print"$a\n"));
Austin

@ ออสติน: ฉันได้อ่านความคิดเห็นว่ารหัสจะต้องเป็นโปรแกรมแบบเต็มอ่านจากอินพุตหรือฟังก์ชั่น เคล็ดลับที่ดีมากมันสามารถปรับปรุงได้โดยบิต / ไบต์: for($a=1;@$i++<$n;$a.=" ".($i+print"$a\n"));(44 ไบต์)
เบอนัวต์ Esnard

อาตกลงแล้วฉันคิดว่าคุณจะทำfunction f($n){for($a=1;@$i++<$n;$a.=" ".($i+print"$a\n"));}ซึ่งก็คือ 60 ไบต์
Austin

จริง คุณตกลงหรือไม่ถ้าฉันแก้ไขคำตอบเพื่อเพิ่มโซลูชันของคุณ?
เบอนัวต์ Esnard

1
for($a=1;$i++<$n=$_GET[n];$a.=" ".($i+print"$a\n"));-> ลองใช้ (รหัสเต็มโดยใช้พารามิเตอร์ url nพร้อมตัวเลข)
Ismael Miguel

5

CJam, 13 12 ไบต์

ri{),:)S*N}/

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

ri{       }/     "Run the block input number of times with iteration index from 0 to N-1";
   )             "Increment the iteration index (making it 1 to N)";
    ,            "Get an array of 0 to iteration index";
     :)          "Increment each of the above array members by 1";
       S*        "Join all above array numbers with space";
         N       "Add a new line. After all iterations, things are automatically printed";

ลองออนไลน์ได้ที่นี่


4

Pyth, 9 ไบต์

VQjdr1hhN

คิดจริงๆว่านี่สามารถทำให้สั้นลงได้ แต่ก็ไม่เป็นเช่นนั้น

ลองมันออนไลน์

            Q = input()
VQ          For N in [0, 1, ..., Q-1]:
    r1hhN       create list [1, ..., N+1+1-1]
  jd            print joined with spaces

1
ทางเลือกที่ VQaYhNjdY9: ถ้าaส่งคืนเฉพาะรายการสิ่งที่ต้องการVQjdaYhNจะเป็น 8
Sp3000

2
aใช้สั้น ๆ เพื่อส่งคืนรายการที่ผนวก
เครื่องมือเพิ่มประสิทธิภาพ

ฉันไม่คุ้นเคยกับ Pyth คุณสามารถอธิบายเพิ่มเติมได้ว่าทำไมN+1+1-1?
seequ

1
@Sieg rเป็นฟังก์ชั่น Python-range ดังนั้น -1 ( r1Nสร้างรายการ[1, 2, ..., N-1]) แต่ในการทำซ้ำชับของวงผมต้องการรายการ[1, 2, ..., N+1]เพราะฉะนั้นเราจะต้องเพิ่มการ2 แปลโดยตรงกับ ความเป็นไปได้อีกอย่างก็คือ( ) Nr1hhNrange(1, N+1+1)r1+N2range(1, N+2)
Jakube

หรือแม้กระทั่งmhdhNแต่นั่นเป็นวิธีการที่แตกต่างอย่างสิ้นเชิง
Jakube

4

JavaScript (ES6) 49 52

เป็นงานง่าย ๆ ฉันสงสัยว่าสิ่งนี้สามารถทำให้สั้นลงใน JS (อัปเดต: ใช่โดยใช้การเรียกซ้ำ)

แบบเรียกซ้ำ 49

f=n=>alert((r=w=>n-i++?w+'\n'+r(w+' '+i):w)(i=1))

Iteraive 52

f=n=>{for(o=r=i=1;i++<n;o+='\n'+r)r+=' '+i;alert(o)}

ฉันจะทดสอบสิ่งนี้ได้ที่ไหน ฉันดูเหมือนจะไม่พบสนามเด็กเล่น ES6 ใด ๆ ที่ยอมรับสิ่งนี้
Kristoffer Sall-Storgaard

@ KristofferSall-Storgaard Firefox รองรับ ES6 เป็นค่าเริ่มต้น ดังนั้น Firefox Console
เครื่องมือเพิ่มประสิทธิภาพ

4

Java, 85 84 ไบต์

นี่เป็นจาวาสั้น ๆ อย่างน่าประหลาดใจ

void a(int a){String b="";for(int c=0;c++<a;System.out.println(b+=(c>1?" ":"")+c));}

เยื้อง:

void a(int a){
    String b="";
    for(int c=0;
        c++<a;
        System.out.println(
                b+=(c>1?" ":"")+c
        ));
}

1 ไบต์ขอบคุณ Bigtoes / Geobits


คุณสามารถบันทึกหนึ่งโดยการย้ายเข้าb+=... println(b+=...)
Geobits

3

อารัมภบท - 119

h(N):-setof(X,(between(1,N,K),setof(Y,between(1,K,Y),X)),[L]),k(L),nl,fail.
k([A|B]):-write(A),(B=[];write(" "),k(B)).

3

Python 2 - 62 54 65 ไบต์

def f(n):
 for x in range(n):print' '.join(map(str,range(1,x+2)))

nควรให้ตัวเลขเป็นอินพุตของโปรแกรมซึ่งไม่ได้กำหนดค่าเริ่มต้นในตัวแปร
Zgarb

ขอบคุณสำหรับคำใบ้ ไม่แน่ใจเกี่ยวกับเรื่องนั้น
pepp

2
ขออภัยฉันควรชัดเจนขึ้น สิ่งที่ฉันหมายถึงคือคุณต้องกำหนดจริงNโดยการทำN=input()หรือสิ่งที่คล้ายกันเพื่อให้โปรแกรมของคุณสามารถเรียกใช้เช่นนั้น นี่คือการอภิปราย Meta ในหัวข้อ
Zgarb

ดังนั้นนี่จะถูกต้องใช่ไหม
pepp

ดูดีตอนนี้!
Zgarb

3

J, 9 ตัวอักษร

ในฐานะที่เป็นคำกริยา monadic โดยปริยาย

[:":\1+i.
  • i. y- หมายเลขจากไป0y - 1
  • 1 + i. y- หมายเลขจากไป1 y
  • ": y- เวกเตอร์yแสดงเป็นสตริง
  • ":\ y- แต่ละคำนำหน้าของการyแสดงเป็นสตริง
  • ":\ 1 + i. y- แต่ละคำนำหน้าของตัวเลขตั้งแต่1ถึงyถึงแสดงเป็นเมทริกซ์ของอักขระ

ตอนนี้มันค่อนข้างฉลาด +1
seequ

นี่เป็น J-esque มากขึ้น แต่ไม่ได้ละเมิดกฎว่าไม่มีช่องว่างต่อท้ายในแต่ละบรรทัดหรือไม่
ไมล์

@miles แน่นอนมัน! สิ่งอื่นใดจะซับซ้อนมาก
FUZxxl

3

> <> (ปลา) , 40 37 + 3 = 40 ไบต์

&1>:&:&)?;1\
(?v:n" "o1+>}:{:@
ao\~1+

อีกครั้ง> <> ทำได้ดีพอ ๆ กับแบบฝึกหัดการพิมพ์ตัวเลขอื่น รันด้วย-vแฟล็กสำหรับอินพุตเช่น

py -3 fish.py -v 4

คำอธิบาย

&               Put n in register
1               Push 1 (call this "i")

[outer loop]

:&:&)?          If i > n...
;                 Halt
1                 Else push 1 (call this "j")

[inner loop]

}:{:@(?         If j > i...
~1+ao             Pop j, print newline, increment i and go to start of outer loop
:n" "o1+          Else print j, print a space, increment j and go to start of inner loop

3

C (ไม่มีลูป, ใช่!) - 72 ไบต์

b(n,c){if(n){b(n-1,32);printf("%d%c",n,c);}}r(n){if(n){r(n-1);b(n,10);}}

สิ่งนี้จะสร้างฟังก์ชั่นr(n)ที่สามารถใช้วิธีนี้:

main(){ r(5); }

ดูการทำงานจริงได้ที่นี่บน w3ii.com

มันต้องมีเทคนิคน้อยมากอธิบายได้อย่างง่ายดาย ฉันคิดว่ามันสามารถปรับปรุงได้อย่างมาก


1
จริงๆแล้วมันคือ 75 ไบต์ไม่ใช่ 74 แต่คุณสามารถลดมันได้ถึง 72 ไบต์โดยแทนที่ '' ด้วย 32 และ '\ n' ด้วย 10:b(n,c){if(n){b(n-1,32);printf("%d%c",n,c);}}r(n){if(n){r(n-1);b(n,10);}}
FatalSleep

1
เคล็ดลับดีมากขอบคุณ!
A. Breust

ขอบคุณ! ฉันพยายามทำให้คุณเป็นหนึ่งในประเภท C แต่ฉันไม่สามารถทำให้อะไรสั้นลงได้! ดังนั้นฉันจึงตัดสินใจย่อให้สั้นลงแทน
FatalSleep

64 bytes b(n,c){n&&b(n-1,32)^printf("%d%c",n,c);}r(n){n&&r(n-1)^b(n,10);} Wandbox
o79y

2

Python 2 - 72

>>> def p(N):print'\n'.join(' '.join(map(str,range(1,i+2)))for i in range(N))
... 
>>> p(5)
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5

สำหรับคำตอบในเว็บไซต์นี้คุณควรเขียนโปรแกรมหรือฟังก์ชั่นที่สมบูรณ์ และคุณควรพิมพ์ผลการ stdout หรือคืนพวกเขาจากฟังก์ชั่น ควรอ่านจากอินพุตหรือนำมาเป็นพารามิเตอร์ฟังก์ชั่นไม่ได้กำหนดไว้ล่วงหน้าเป็นตัวแปร
jimmy23013

@ user23013 ตกลงแก้ไขแล้ว!
Kasramvd

นิยามของฟังก์ชั่นจะต้องรวมอยู่ในจำนวนไบต์ดังนั้นฉันไม่คิดว่านี่คือ 61 มันอาจเป็นไปได้ที่คุณจะโทรหาฟังก์ชั่นสั้น ๆ แบบpนี้ ในบันทึกอื่นคุณสามารถลบสองช่องว่าง - ระหว่างprintและ'\n'และอื่น ๆ ระหว่างและ))) for
Sp3000

@ Sp3000 ตกลงขอบคุณสำหรับความสนใจ! คงที่!;)
Kasramvd

72:def p(N):print'\n'.join(' '.join(map(str,range(1,i+2)))for i in range(N))
seequ

2

Perl, 28

อ่านพารามิเตอร์จาก stdin

@x=1..$_,print"@x
"for 1..<>

จากบรรทัดคำสั่ง:

perl -E'$,=$";say 1..$_ for 1..<>'

แต่ตอนนี้ฉันไม่สามารถนับได้ (ประมาณระหว่าง 25 และ 29)


1

หลาม

import string
N,s=int(input()),list(string.digits)
for i in range(1,N+1):
    print(' '.join(s[1:i+1]))

1
สิ่งนี้ไม่ได้ล้มเหลวหรือไม่ถ้า N> = 10
seequ

@ ซิกใช่คุณพูดถูก ฉันเพิ่งเรียน Python กำลังมองหาวิธีการแปลง list ของ int เป็น list ของสตริง
bacchusbeale

63 ไบต์: for i in range(int(input())):print(' '.join("123456789"[:i+1]))- โปรดทราบว่าสตริงจะถือว่าเป็นรายการ
seequ


1

คลิป , 16

Jm[ijkw,1iwS},1n

คำอธิบาย

J                   .- join with newlines                           -.
 m[i        },1n    .- map numbers from 1 to numeric value of input -.
    jkw   wS        .- join with spaces                             -.
       ,1i          .- numbers from 1 to index                      -.

1

ไป, 93 81 78 93 90 ไบต์

func r(n int)(s string){s=string(n+48);if n!=1{s=r(n-1)+" "+s};println(s);return}

ปัจจุบัน ungolfed

func r(n int) (s string) {
    // Convert n to a string, we do not have to initialize s since
    // we hijacked the return value.
    // Numbers in the ascii table starts at 48
    s = string(n | 48)
    // Unless we are on our last iteration, we need previous iterations,
    // a space and our current iteration
    if n != 1 {
        // Collect the result of previous iteration for output
        s = r(n-1) + " " + s
    }
    println(s)
    // We can use a naked return since we specified the
    // name of our return value in the function signature
    return
}

หากเราจำเป็นต้องจัดการกับ N> 9 เราสามารถใช้สิ่งต่อไปนี้ที่ 78 ไบต์ แต่ต้องนำเข้าfmtแพ็คเกจ

func r(n int)(s string){s=Sprint(n);if n!=1{s=r(n-1)+" "+s};Println(s);return}

หากเรารวมคำสั่งการนำเข้าตอนนี้ฉันกลับไปที่ขั้นต้นแล้ว 93 92 90 ไบต์

import."fmt";func r(n int)(s string){s=Sprint(n);if n>1{s=r(n-1)+" "+s};Println(s);return}

ทดสอบออนไลน์ได้ที่นี่: http://play.golang.org/p/BWLQ9R6ilw

รุ่นที่มีfmtอยู่ที่นี่: http://play.golang.org/p/hQEkLvpiqt


ฉันไม่แน่ใจว่าฉันรู้สึกอย่างไรกับการโยนสตริง แต่ความพยายามใด ๆ ที่จะทำให้มันกลายเป็นอาร์เรย์ไบต์ทำให้มันนานขึ้น
Kristoffer Sall-Storgaard

ปัญหาหลักที่ฉันเห็นคือมันใช้ไม่ได้กับ n> 9 คุณสามารถบันทึกไบต์โดยการเปลี่ยน!=ไป>แม้ว่า
Geobits

@Bigtoes ได้รับการแก้ไขแล้วตอนนี้ฉันไม่รู้ว่าฉันควรจะนับimportคำสั่งแม้ว่า
Kristoffer Sall-Storgaard

ฉันรู้ว่าพวกเขาถูกนับสำหรับภาษาที่ฉันคุ้นเคยมากกว่าดังนั้นจึงเป็นไปได้ว่าใช่ แย่
จัง

1

ZX / Sinclair BASIC - 39 ไบต์

ZX Basic ใช้ 1 ไบต์ต่อคำหลัก (คำที่เป็นตัวพิมพ์ใหญ่ทั้งหมด) ดังนั้นช่วยลดขนาดไบต์ลงได้เล็กน้อย ...

1 INPUT n:FOR i=1 TO n:FOR j=1 TO i:PRINT j;" ";:NEXT j:PRINT:NEXT i

ใช้ n = 8

ป้อนคำอธิบายรูปภาพที่นี่


1
ดี แต่พื้นฐาน ZX ใช้ 6 ไบต์ที่ซ่อนอยู่เพิ่มเติมสำหรับแต่ละตัวอักษรตัวเลข (กลอุบายทั่วไปคือVAL("1")(6 bytes เป็น VAL คือ 1) ติดตั้ง1(7 ไบต์))
edc65

1

R, 28

for(i in 1:scan())print(1:i)

เอาต์พุตไม่ถูกต้องสำหรับค่าอินพุต 0 นอกจากนี้ยังไม่ชัดเจนว่าผู้นำ[1]ในแต่ละบรรทัดนั้นละเมิดข้อกำหนดหรือไม่
Alex A.

@AlexA หากคุณมองคำถามอย่างใกล้ชิดคุณจะเห็นความคิดเห็นของฉันถามว่าพฤติกรรมใดควรเป็น n = 0 แต่ขอบคุณที่ชี้นำฉันในทิศทางที่ถูกต้อง!
freekvd

ฉันเห็นความคิดเห็น เป็นสิ่งที่นี้ไม่ได้พิมพ์อะไร 0 1; 1 0จะพิมพ์ (แกล้งทำเป็น;ตัวแบ่งบรรทัด)
Alex A.

คุณอาจต้องการลองใช้cat(1:i,"\n")อีกด้วย แม้ว่าจะยาวกว่าprint(1:i)นี้เล็กน้อยแต่ก็ไม่รวมถึงผู้นำ[1]ในแต่ละบรรทัด
Alex A.

1

TI-Basic, 28 ไบต์

Input N
For(I,1,N
randIntNoRep(1,N->L1
SortA(L1
Disp L1
End

1
สิ่งนี้จะไม่ส่งออกตามที่ระบุในรูปแบบ; ค่อนข้างจะแสดงอาร์เรย์วงเล็บและทั้งหมดบนหน้าจอหลัก
lirtosiast

1

C, 89 ตัวอักษร

// 90 characters
f(int n){int a=1,b;for(;n--;++a){for(b=0;b<a;++b)printf("%c%d",(!!b)*' ',b+1);puts("");}}

puts("");เพื่อขจัดความสับสนเกี่ยวกับ นี้เพียงพิมพ์ตัวอักษรขึ้นบรรทัดใหม่ (เท่าที่เห็นนี่ ):

โปรดสังเกตว่าการทำให้ไม่เพียง แต่แตกต่างจาก fputs ที่ใช้ stdout เป็นปลายทาง แต่ยังผนวกอักขระขึ้นบรรทัดใหม่ที่ท้ายโดยอัตโนมัติ (ซึ่ง fputs ไม่ได้)

ฉันได้มันสั้นกว่าเล็กน้อยด้วยอัลกอริทึมของ @ TheBestOne:

// 89 characters
f(int a){char b[999]="",*p=b+1;int c=0;for(;a--&&(sprintf(b,"%s %d",b,++c)&&puts(p)););}

puts("");ไม่ทำอะไรเลย คุณสามารถใช้char b[999]=""แทนchar b[999]={0}การบันทึก 1 อักขระ
mch

2
puts("");พิมพ์อักขระบรรทัดใหม่
เฟลิกซ์ Bytow

1

Perl: 34 ตัวอักษร

print"@$_\n"for map[1..$_],1..$_;

$_รหัสนี้ได้รับการป้อนตัวเลขจำนวนที่จัดผ่านตัวแปรพิเศษ


1
วงเล็บส่วนใหญ่ซ้ำซ้อนที่นี่: print"@$_\n"for map[1..$_],1..$_ใช้ได้เช่นกัน
nutki

ฉันปรับรหัส
เฟลิกซ์ Bytow

1

C # - 94 ไบต์

เขียนเป็นฟังก์ชันที่ไม่ระบุชื่อที่ส่งคืนสตริงซึ่งดูเหมือนจะไม่ได้รับอนุญาตจากสเป็ค

n=>String.Join("\n\n",Enumerable.Range(1,n).Select(l=>String.Join(" ",Enumerable.Range(1,l))))

นี่คือรุ่นที่ไม่ได้แต่งแต้ม (อ่านความคิดเห็นตามลำดับ BDCA):

n =>
    String.Join("\n\n",                    //...then join it together with newlines.
        Enumerable.Range(1, n).Select(l => //For each l from 1 to n, ...
                String.Join(" ",              //...and join it with spaces, ...
                    Enumerable.Range(1, l)    //...get the range from 1 to l, ...

1

Bash + coreutils, 26 ไบต์

seq $1|sed "x;G;s/\n/ /;h"
  • seq เพียงสร้างหมายเลข 1 ถึง n
  • sed บันทึกเอาต์พุตทั้งหมดสำหรับบรรทัดที่กำหนดในพื้นที่พักแล้วต่อท้ายบรรทัดถัดไป

1

Haskell, 62 57 ไบต์

e=enumFromTo 1
f=putStr.unlines.map(unwords.map show.e).e

สไตล์ที่ปราศจากจุด ตัวอย่างการใช้งาน:

Prelude> f 5
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5

การทำe=enumFromTo 1บันทึก 7 ไบต์
Zgarb

@Zgarb: ขอบคุณ แต่ถ้าฉันสลับออกenumFromTo 1ฉันต้องตั้งชื่อฟังก์ชั่นหลักด้วยดังนั้นมันจึงมีขนาด 5 ไบต์ หากไม่มีชื่อมันจะเป็นสิ่งletก่อสร้าง:let e=enumFromTo 1 in (putStr.unlines.map(unwords.map show.e).e) 5
nimi

1

Mathematica, 32

Print@Row[Range@i," "]~Do~{i,#}&

1
แล้วไงTableForm[Range/@Range@#]&ล่ะ
Martin Ender

1
สั้น:Grid[Range/@Range@#]&
alephalpha

และมันก็ดูดีขึ้น :) (ฉันลืมGridไปเรื่อย ๆ )
Martin Ender

แต่ฉันไม่แน่ใจว่าไม่มีช่องว่างท้ายท้ายแต่ละบรรทัดหรือไม่
alephalpha

โอ้จุดดี :(
Martin Ender

1

สกาลา, 73 65 62 ไบต์

(n:Int)=>print(1 to n map(1 to _ mkString " ") mkString "\n")

Ungolfed

def printNumberTriangle(n: Int): Unit = {
  def rowString(m: Int): String = 1.to(m).mkString(" ")
  print(1.to(n).map(rowString).mkString("\n"))
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.