สร้างพล็อตต้นกำเนิดและใบไม้


14

ที่เกี่ยวข้อง: ตรวจสอบพล็อตต้นกำเนิดและใบไม้

อินพุต

รายการที่ไม่ว่างของจำนวนเต็มบวก หากจำเป็นพวกเขาสามารถนำมาเป็นสตริง คุณไม่สามารถคิดว่ามันถูกจัดเรียง

เอาท์พุต

พล็อตลำต้นและใบของตัวเลข ในพล็อตนี้ลำต้นและใบตัวเลขมีการสั่งซื้อเข้าไปในลำต้นโดยนับจากนั้นตัวเลขทั้งหมดที่พอดีกับก้านที่มีคนของพวกเขามีค่าวางไว้ในลำต้นและจากนั้นทั้งหมดจะถูกจัดเรียง ในการท้าทายนี้การขึ้นบรรทัดใหม่จะแยกก้านและช่องว่างจะแยกลำต้นออกจากใบไม้

คุณสามารถรวมหรือแยกลำต้นที่ว่างเปล่าทั้งหมดที่อยู่ระหว่างลำต้นที่ไม่ว่างก็ได้

กรณีทดสอบ

(รายการสามารถนำมาเป็นค่าเริ่มต้นในรายการภาษาของคุณฉันใช้ JSON ด้านล่าง)

รวมถึงลำต้นที่ว่างเปล่า:

[1, 2, 3, 3, 3, 3, 3, 10, 15, 15, 18, 1, 100]

0 11233333
1 0558
2
3
4
5
6
7
8
9
10 0

[55, 59, 49, 43, 58, 59, 54, 44, 49, 51, 44, 40, 50, 59, 59, 59]

4 034499
5 0145899999

[10000, 10100]

1000 0
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010 0

ไม่รวมลำต้นที่ว่างเปล่า:

[1, 2, 3, 3, 3, 3, 3, 10, 15, 15, 18, 1, 100]

0 11233333
1 0558
10 0

[55, 59, 49, 43, 58, 59, 54, 44, 49, 51, 44, 40, 50, 59, 59, 59]

4 034499
5 0145899999

[10000, 10100]

1000 0
1010 0


จะต้องมีการเรียงลำดับและ / หรือเก็บรักษาคำสั่งซื้อหรือไม่
ร็อด

@Rod ตามคำนิยามมันจะเรียงลำดับอินพุตเป็นสิบจากนั้นตามด้วย คำสั่งซื้อไม่สำคัญ
สตีเฟ่น

2
รูปแบบผลลัพธ์จะต้องเป็นเช่นนั้น? คือคำตอบของฉันถูกต้อง?
คัน

1
@tallyallyhuman tuples ก็โอเค แต่ใช่ใบไม้ต้องถูกจัดเรียงนั่นคือจุดรวมของพล็อตเพื่อให้เห็นรูปแบบและการแจกแจง
Stephen

คำตอบ:


2

R , 12 ไบต์

stem(scan())

ลองออนไลน์!

คำอธิบาย:

s               # imports RAND's "Million Random Digits"
  e  )          # cooks a pound of spaghetti and places it on the stack
 t              # transposes the output 42 times
       can      # goes for a pee
   m(           # grows moustache, turns head to side and frowns
      s   (     # implicitly ignores all criticism
           )    # makes a stemplot of the input

ฉันคิดว่าstemจะเพียงพอเพราะใช้อาร์เรย์เป็นอินพุต
Giuseppe

นั่นเป็นวิธีเดียวที่ฉันจะได้รับตัวอย่างจากการทำงานกับ TIO และฉันคิดว่าฉันคุ้นเคยกับรูปแบบ "โปรแกรมหรือฟังก์ชั่น" ของการตอบรับและไม่แน่ใจเกี่ยวกับรูปแบบอื่น ๆ
ngm


เห็นด้วยกับ @Giuseppe คำตอบควรเป็นเพียงstem:)
Jayce



3

เรติน่า , 38 30 ไบต์

ขอบคุณ Neil สำหรับการบันทึก 2 ไบต์และ Leo สำหรับการบันทึกอีก 6

จำนวนไบต์ถือว่าการเข้ารหัส ISO 8859-1

O#`
.\b
 $&
\B 
0 
D$`¶?.+ 
$*

อินพุตเป็นรายการจำนวนเต็มที่คั่นด้วย linefeed เอาต์พุตละเว้นส่วนนำหน้าว่างเปล่า

ลองออนไลน์!


(?<=(\b.+ ).)¶\1ช่วยให้คุณสองไบต์
Neil

ไบต์สามารถบันทึกได้โดยใช้ขั้นตอนการขจัดข้อมูลซ้ำซ้อนแทนที่จะเป็นขั้นตอนสุดท้ายแทน (คุณต้องจัดการกับบรรทัดแรกแม้ว่า) tio.run/##K0otycxL/…
Leo

@Leo ขอบคุณฉันจะไปกับตัวแปรที่ไม่ได้ลงเอยด้วย linefeed ชั้นนำ
Martin Ender


2

Python 2 , 146 140 133 124 120 118 109 107 90 86 84 91 82 81 70 63 ไบต์

-6 ไบต์ขอบคุณ Rod -9 ไบต์ขอบคุณ ovs

lambda l:{i/10:[j%10for j in sorted(l)if j/10==i/10]for i in l}

ลองออนไลน์!

โอเคบางสิ่งสกปรกเล็กน้อย ตามที่โปรแกรมเมอร์ Python ทุกคนควรรู้ dicts ไม่ได้เรียงลำดับหมายความว่าลำดับดั้งเดิมของคู่คีย์ - ค่าจะไม่ถูกสงวนไว้ อย่างไรก็ตามในรหัสปัจจุบันของฉันฉันไม่เรียงลำดับ dict ที่เกิดขึ้นเลย แต่ฉันได้ทำการทดสอบหลายครั้งเพื่อตรวจสอบความเท่าเทียมกันและการสั่งซื้อทุกครั้งและคำสั่งออกมาเสมอ หากใครพิสูจน์ว่ามันออกมาถูกต้องหรือรู้ว่าทำไมงานนี้ฉันก็อยากจะรู้

อินพุตเป็นรายการไพ ธ อนและเอาต์พุตเป็น dict ตัวอย่าง:

การป้อนข้อมูล:

[1, 2, 3, 3, 3, 3, 3, 10, 15, 15, 18, 1, 100]

เอาท์พุท:

{0: [1, 1, 2, 3, 3, 3, 3, 3], 1: [0, 5, 5, 8], 10: [0]}


1
r[i/10]=r.get(i/10,'')+`i%10`for 82 bytes
ovs

ฉันคิดว่า dicts เรียงตามค่าเริ่มต้น? ไม่ได้อยู่ในลำดับเดิม
เลมอนที่ถูกทำลาย

1

Mathematica, 103 ไบต์

รหัสที่นำมาจากคำตอบที่ลบของ @ user202729

Grid[Table[{Keys[#][[i]],""<>ToString/@#[[i]]},{i,Length@#}]]&@(GroupBy[Sort@#,⌊#/10⌋&]~Mod~10&@#)&

1

> <> , 84 ไบต์

1&0\n~a7+3.
 :}<$?)@:$@:v!?
r~&^?-l&:+1&/&:,a-%a::
&=?v~&1+:&ao>n" "o:?!;::a%:@-a,&:

ลองออนไลน์หรือที่สนามเด็กเล่นปลา !

ถือว่าตัวเลขอินพุตอยู่ในสแต็กแล้วแล้ว

คำอธิบาย: อันดับแรกเราเรียงลำดับสแต็กโดยใช้การเรียงลำดับแบบบับเบิลด้วยรหัสบิตนี้:

1&0\
 :}<$?)@:$@:v!?
   ^?-l&:+1&/

ต่อไปเราคำนวณจำนวนเต็ม - ผลหารของสิ่งแรกในสแต็กโดยใช้ 10 ::a%-a,ใส่ลงในทะเบียนและผ่านสแต็คพิมพ์ตัวเลขสุดท้ายของตัวเลขจนกว่าตัวเลขแรกจะไม่เหมือนทะเบียน จากนั้นเพิ่มการลงทะเบียนและดำเนินการต่อ เมื่อเราไปถึงจุดสิ้นสุดของรายการที่มีเครื่องหมาย0เราจะหยุด


1

PostgreSQL 53 ไบต์

SELECT n/10,json_agg(n%10ORDER BY n)FROM t GROUP BY 1

รายการจำนวนเต็มต้องอยู่ในintegerคอลัมน์nของตารางที่มีอยู่tของตารางที่มีอยู่ผลลัพธ์คือตารางสองคอลัมน์: แต่ละแถวประกอบด้วยคอลัมน์ "สเต็ม" และคอลัมน์ "ออก" คอลัมน์ "leaves" อยู่ในรูปแบบอาร์เรย์ JSON (ดังที่ระบุไว้ในความคิดเห็นไม่จำเป็นต้องปฏิบัติตามรูปแบบที่แสดงใน "กรณีทดสอบ" อย่างแน่นอน)

แม้ว่าจะไม่รับประกันลำดับของลำต้น (เพื่อบันทึก 10 ไบต์ORDER BY 1จะถูกละไว้จากจุดสิ้นสุดของแบบสอบถาม) ในการทดสอบของฉันลำต้นก็ดูเหมือนจะจบลงในลำดับที่ถูกต้อง

ดูผลลัพธ์บน SQL Fiddle

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