วาดปิรามิดลูกหลาน (เพิ่มเติม)


11

ท้าทาย

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

\tผลที่ได้คือเอาท์พุทเป็นสตริงโดยใช้แท็บ

หมายเหตุ: ไม่จำเป็นต้องใช้แท็บต่อท้ายในแต่ละบรรทัด

1\t\t2\t\t3\n\t3\t\t5\t\n\t\t8\t\t results in 
1       2       3
    3       5   
        8       

ผลลัพธ์ที่เป็นทางเลือกสามารถถูกเอาต์พุตเป็นอาร์เรย์โดยใช้ตำแหน่งว่างเป็นช่องว่าง

[[1,,2,,3],
[,3,,5,],
[,,8,,]]

ตัวอย่าง:

ให้4,5,7,3,4,2เอาท์พุท:

4       5       7       3       4       2
    9       12      10      7       6
        21      22      17      13
            43      39      30
                82      69
                    151

กฎระเบียบ

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

กรณีทดสอบ

Input: 1,3,5

1       3       5
    4       8
        12


Input: 9,8,7,6,5

9       8       7       6       5
    17      15      13      11
        32      28      24
            60      52
                112


Input: 5,5,2,5

[[5,,5,,2,,5],
[,10,,7,,7,],
[,,17,,14,,],
[,,,31,,,]]

Input: 3,3,3

[[3,,3,,3],
[,6,,6,],
[,,12,,]]

เกณฑ์การชนะคือ


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

โพสต์ Sandbox



non-negative integersเราจะต้องจัดการกับ0? มีความเป็นไปได้ในการเล่นกอล์ฟหากมีการเติมช่องว่างด้วย0s
JungHwan Min Min

เราจะส่งคืนอาร์เรย์ที่มีแท็บหรือสตริงว่าง / อาร์เรย์ในตำแหน่งว่างได้หรือไม่
Adám

2
"อนุญาตให้ขึ้นบรรทัดใหม่ / นำหน้าและต่อท้ายแท็บ" - เราอาจรวมผลลัพธ์ว่างเปล่าที่ด้านล่างของเอาต์พุตอาร์เรย์ด้วยหรือไม่
Jonathan Allan

1
@Jonathan ทั้งหมดขึ้นบรรทัดใหม่และแท็บที่ได้รับอนุญาต
Adám

คำตอบ:


4

APL (Dyalog Unicode) , 31 28 ไบต์SBCS

ฟังก์ชั่นนำหน้า Tacit ใช้ช่องว่างเดียวเป็นเครื่องหมายสล็อตว่าง ส่งคืนรายการหมายเลข / ช่องว่าง

⍳∘≢{∊(⍺⍴''),,∘' '¨2+/⍣⍺⊢⍵}¨⊂

ลองออนไลน์!

⍳∘≢{... }¨⊂ ใช้ฟังก์ชั่นด้านล่างสำหรับแต่ละɩ ndices  ของ  นับกับอาร์กิวเมนต์ทั้งหมด:

⊢⍵ ให้ค่าอาร์กิวเมนต์ที่ถูกต้อง (อินพุตดั้งเดิม)

2+/⍣⍺ ใช้ผลรวมคู่ตามจำนวนครั้งที่ระบุโดยอาร์กิวเมนต์ซ้าย

,∘' '¨ ต่อท้ายช่องว่างกับแต่ละหมายเลข

(... ), ต่อท้ายสิ่งต่อไปนี้:

  ⍺⍴'' อิลิเมนต์อาร์กิวเมนต์ซ้ายของสตริงว่าง (เพิ่มด้วยช่องว่าง)

ε nlist (เรียบ)




3

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

14 -> 13 ถือว่ารายการช่องว่างต่อท้ายเท่านั้นที่ได้รับอนุญาตในการส่งออกรูปแบบรายการ; ถ้าไม่ใช่ฉันจะกลับไปใช้ 14 ( ถาม )

+ƝƬK€z⁶Zṙ"JC$

ลิงก์ monadic เอาท์พุทเป็นรายการของรายการที่ใช้อักขระช่องว่างเป็นช่องว่าง (รวมรายการช่องว่างต่อท้ายเดียวเท่านั้น)

ลองออนไลน์! (รวมส่วนท้ายเพื่อแสดงโครงสร้างรายการตั้งแต่การรันลิงก์ monadic เนื่องจากโปรแกรมเต็มรูปแบบจะพิมพ์เอาต์พุตที่ได้ถูกแตกโดยปริยาย)


3

Husk , 22 ไบต์

zoΣ~+R"	"oJ"		"msNU¡Ẋ+

ลองออนไลน์!

คำอธิบาย

z(Σ~+R" "(J"  "ms))NU¡Ẋ+  -- example input: [1,2,3]
                     ¡    -- infinitely do and collect in list
                      Ẋ+  -- | sum adjacent
                          -- : [[1,2,3],[3,5],[8],[],[],...
                    U     -- keep up until first repetition: [[1,2,3],[3,5],[8],[]]
z(                )N      -- zip with natural numbers under (example on 1 [1,2,3])
   ~+    (       )        -- | join arguments modified by
     R" "                 -- | | replicate tab: " "
               ms         -- | | show each: ["1","2","3"]
          J"  "           -- | | join with 2 tabs: ["1","  ","2","  ","3"]
                          -- | : [" ","1","  ","2","  ","3"]
  Σ                       -- | concatenate: " 1  2  3"
                          -- : [" 1  2  3","  3  5","   8"]



2

Python 3 , 101 93 80 ไบต์

ที่บันทึกไว้ 7 ไบต์ ( map(str,x)แทนfor inและ Y init เป็น'') และได้กำจัดของการขึ้นบรรทัดใหม่ต่อท้าย ( x and[แทนprint() ขอบคุณโจกษัตริย์

ที่บันทึกไว้ 13 ไบต์ ( [*map(sum,zip(x,x[1:]))]แทน[x[j]+x[j+1]for j in range(len(x)-1)]) ขอบคุณที่OVS

f=lambda x,y='':x and[y+'		'.join(map(str,x))]+f([*map(sum,zip(x,x[1:]))],y+'	')

ลองออนไลน์!


@ovs: อ่าเจ๋ง ฉันควรตระหนักว่าฉันสามารถแมปผลรวมได้ ขอบคุณ!
Emigna

1

เรติน่า 35 ไบต์

+¶<`\d+ *(?=(\d+)?)
    $#1*$.(*_$1*)   

ลองออนไลน์! คำอธิบาย:

+

ทำซ้ำจนกระทั่งบัฟเฟอร์หยุดเปลี่ยน

¶<`

พิมพ์เนื้อหาของบัฟเฟอร์ก่อนการทดแทนด้วยการขึ้นบรรทัดใหม่และ

\d+ *(?=(\d+)?)
    $#1*$.(*_$1*)   

แทนที่ตัวเลขเดียวด้วยแท็บหนึ่งคู่ แต่ตัวเลขตามด้วยหมายเลขอื่นด้วยแท็บผลรวมและแท็บอื่น



1

สีแดง 151 ไบต์

func[b][m: length? b repeat n m[loop n - 1[prin"^-"]print replace/all
form b" ""^-^-"c: copy[]repeat i -1 + length? b[append c b/(i) + b/(i + 1)]b: c]]

ลองออนไลน์!

อ่านเพิ่มเติมได้:

f: func [ b ] [
    m: length? b
    repeat n m [
        loop n - 1 [ prin tab ]
        print replace/all form b " " rejoin [ tab tab ]
        c: copy []
        repeat i (length? b) - 1 [
            append c b/(i) + b/(i + 1)
        ]
        b: c
    ]
]


1

C # (คอมไพเลอร์ Visual C #) , 163 ไบต์

b=>{var s="";var c=b.Length;for(int i=0;i<c;i++){for(int z=0;z<i;z++)s+="\t";for(int x=0;x<c-i;x++){s+=b[x]+"\t\t";b[x]=x==c-i-1?0:b[x]+b[x+1];}s+="\n";}return s;}

ลองออนไลน์!

อ่านได้:

b =>    {
            var s = "";
            var c = b.Length;
            for (int i = 0; i < c; i++)
            {
                for (int z = 0; z < i; z++)
                    s += "\t";
                for (int x = 0; x < c - i; x++)
                {
                    s += b[x] + "\t\t";
                    b[x] = x == c - i - 1 ? 0 : b[x] + b[x + 1];
                }
                s += "\n";
            }
            return s;
        }

1

Japt -Rx , 20 18 ไบต์

บรรทัดที่สองมีแท็บต่อท้าย

Nc¡=ä+
Ëq' ² iEç'  

ลองมัน


คำอธิบาย

                  :Implicit input of array U
N                 :The array of inputs (NOT the input array)
 c                :Concatenate
  ¡               :  Map U
    ä+            :    Consecutive sums of U
   =              :    Reassign to U for next iteration
\n                :Reassign the resulting 2D-array to U
Ë                 :Map each array at index E
 q                :  Join with
  '\t             :   Tab
     ²            :   Repeated twice
       i          :  Prepend
          '\t     :   Tab
         ç        :   Repeated
        E         :   E times
                  :Implicitly join with newlines, trim (not strictly necessary) and output.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.