Torun piramidi çizme (toplama)


11

Meydan okuma

Negatif olmayan bir tamsayı dizisi verildiğinde, alt öğelerin her iki ana sayının toplamı olduğu bir alt öğe piramidi veren bir işlev oluşturun.

Sonuç sekme kullanılarak bir dize olarak çıkarılır \t.

Not: her satırdaki sondaki sekmeler gerekli değildir

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

İsteğe bağlı olarak sonuç, boşluk olarak boş bir konum kullanılarak bir dizi olarak çıkarılabilir.

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

Misal:

Verilen 4,5,7,3,4,2Çıktı:

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

kurallar

  • Standart kuralları geçerlidir
  • Giriş, herhangi bir ayırıcı veya dizi kullanan bir dize olabilir
  • Satır başı / sondaki satırsonu ve sekmelere izin verilir (ancak çıktı ters çevrilmiş bir piramit olduğu sürece gerekli değildir)

Test Durumları

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,,]]

Kazanma kriterleri


Not: Bu meydan okuma Generate Pascal üçgenine çok yakındır . Fark, özel başlatma dizisidir (pascal 1'den ve yükselen modda, bu bir girişten ve altyazı modunda).

Korumalı alan yayını



non-negative integersidare etmek zorunda mıyız 0? Boş alanlar 0s ile doldurulursa bazı golf olasılıkları vardır .
JungHwan Min

Boş konumlarda sekmeleri veya boş dizeleri / dizileri olan bir dizi döndürebilir miyiz?
Adám

2
"Öncü / son satırlara ve sekmelere izin verilir" - Dizi çıktısının altına boş sonuçlar da ekleyebilir miyiz?
Jonathan Allan

1
@JonathanAllan arka satırların ve sekme izin
ADAM

Yanıtlar:


4

APL (Dyalog Unicode) , 31 28 bayt SBCS

Ön ek önek işlevi. Boş bir alan işaretleyicisi olarak tek bir boşluk kullanır. Sayı / boşluk listelerinin listesini döndürür.

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

Çevrimiçi deneyin!

⍳∘≢{... }¨⊂ her biri için fonksiyonu aşağıda uygulamak ɩ ndices  ait  olan taksitli tüm argüman:

⊢⍵ doğru argümanı ver (orijinal girdi)

2+/⍣⍺ sol argümanda belirtildiği kadar çift toplamı uygula

,∘' '¨ her sayıya boşluk bırak

(), Bunu aşağıdakilere ekleyin:

  ⍺⍴'' boş dizenin sol argüman öğeleri (boşluklarla doldurulmuş)

ϵ nlist (düzleştir)




3

Jöle ,  14  13 bayt

14 -> 13, liste biçimi çıktısında yalnızca boşluk girilmesine izin verildiğini varsayar; değilse, 14'e geri döneceğim ( sorulan )

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

Monadik bir bağlantı. Çıktı, boşluk olarak boşluk karakterleri kullanan listelerin bir listesidir (yalnızca boşluk içeren tek bir boşluk girişi içerir).

Çevrimiçi deneyin! (monadik bağlantıyı tam bir program olarak çalıştırdığınızda parçalanmış çıktı örtük olarak yazdırılacağından, liste yapısını göstermek için bir altbilgi içerir.)


3

Kabuk , 22 bayt

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

Çevrimiçi deneyin!

açıklama

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

JavaScript (ES6), 73 bayt

Tuhaf kaynak kodu ... Her neyse, bu !

Önde gelen ve sondaki boşlukları içerir.

f=(a,p=`
`)=>p+a.join`		`+(1/(y=a.shift())?f(a.map(x=>y+(y=x)),p+`	`):'')

Çevrimiçi deneyin!



2

Python 3 , 101 93 80 bayt

Jo King sayesinde 7 bayt ( map(str,x)yerine for iny init ve init y yerine '') ve sondaki satırsonlarından ( x and[yerine print() kurtuldum .

Ovs sayesinde 13 bayt ( [*map(sum,zip(x,x[1:]))]yerine [x[j]+x[j+1]for j in range(len(x)-1)]) kurtardı .

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

Çevrimiçi deneyin!


@ovs: Ah, havalı. Toplamı haritalayabileceğimi fark etmeliydim. Teşekkürler!
Emigna

1

Retina , 35 bayt

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

Çevrimiçi deneyin! Açıklama:

+

Tamponun değişmesi durana kadar tekrarlayın,

¶<`

Değiştirmeden önce arabellek içeriğini, sondaki yeni satırla yazdırın ve

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

Tek bir sayıyı bir çift sekme, ancak bir sayıyı ve ardından sekme, toplam ve başka bir sekme içeren başka bir sayı ile değiştirin.



1

Kırmızı , 151 bayt

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]]

Çevrimiçi deneyin!

Daha okunabilir:

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 # (Görsel C # Derleyici) , 163 bayt

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;}

Çevrimiçi deneyin!

Okunabilir:

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 bayt

İkinci satırda bir sondaki sekme bulunur.

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

Dene


açıklama

                  :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.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.