Kolay ikili üçgen


18

Pozitif bir tamsayı girdi olarak verildiğinde , aşağıdaki üçgenin n>=1ilk nsatırlarını çıktılayın:

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

Satırlar, orta sütun ters çevrilmiş durum hariç, tüm sıfırlar ve tümü arasında değişir.

Test senaryoları

  • Giriş :3

  • Çıktı :

        1
      1 0 1
    0 0 1 0 0
    
  • Giriş :10

  • Çıktı :

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

Kodunuzun herhangi biri için çalışması gerekir n<100. Bu , bu nedenle bayt en kısa kod kazanır!

Sondaki boşluklara / yeni satırlara ve önde gelen yeni satırlara izin verilir!


Fazla beyaz alan kabul edilebilir mi ve eğer öyleyse, hangisi (öncü çizgiler / öncü / son / eğitim çizgileri)?
Jonathan Allan

1
Bir sayı listesi listesi döndürebilir miyiz?
Outgolfer Erik

8
@EriktheOutgolfer liste listesi gayet iyi!

1
Bir liste listesi iyi olduğundan, ortalanmış hizalamanın gerekli olmadığını varsayıyorum, değil mi?
Luis Mendo

1
Bu sizin meydan okumanızdır, ancak bence listelerin bir listesine izin verecek kadar
esnekseniz

Yanıtlar:


7

Jöle , 7 bayt

Ṭ=Ḃµ€ŒB

Çevrimiçi deneyin!

Outgolfer Erik sayesinde -1 bayt

açıklama

Ṭ=Ḃµ€ŒB  Main link
    €    For each element in (implicit range of) the input:
Ṭ        List 1s and 0s with 1s in the indices in the left argument (generates `[0, 0, ..., 1]`)
 =Ḃ      Is this equal to `(z % 2)` where `z` is the range number? (Every other row is flipped)
     ŒB  Reflect each row

-1 ¶Çile değiştirebilirsiniz µ.
Outgolfer Erik

@EriktheOutgolfer ooh teşekkürler!
HyperNeutrino


3

Jöle , 8 bayt

⁼€=ḂŒḄµ€

Çevrimiçi deneyin!

-2 HyperNeutrino sayesinde .


Oh seriously .... split ikinci ninjad: p
Jonathan Allan

@JonathanAllan Gerçekten bir kural değişikliğiydi ... btw Bence bu da golfçü olabilir ...
Erik Outgolfer

evet sonra 15 baytlık bir 15 bayt ızgara vardı ...
Jonathan Allan


¬^Ḃolabilir =Ḃçünkü NOT (XOR (A B))sadece görünüşte IFF (A B) düzenlemek olduğunu Ben o_O lol olduğunu düşündüğümden daha fazla
golf


3

Japt , 12 9 bayt

õÈÇ¥Y^uÃê

Çevrimiçi test edin!

Jelly ile karşılaştırıldığında oldukça üzücü, ama Japt gibi bir şey yok, bu yüzden sahip olduğum şeyle ilgili yapmalıyım ...

açıklama

 õÈ   Ç   ¥ Y^ uà ê
UõXY{XoZ{Z==Y^Yu} ê}      Ungolfed
                          Implicit: U = input number
Uõ                        Create the range [1..U].    [1, 2, 3, 4]
  XY{              }      Map each item X and 0-index Y in this to
     Xo                     Create the range [0..X).  [[0], [0, 1], [0, 1, 2], [0, 1, 2, 3]]
       Z{      }            Map each item Z in this to
         Z==Y                 Z is equal to Y         [[1], [0, 1], [0, 0, 1], [0, 0, 0, 1]]
             ^Yu              XORed with Y % 2.       [[1], [1, 0], [0, 0, 1], [1, 1, 1, 0]]
                  ê         Bounce.                   [[1],
                                                       [1, 0, 1],
                                                       [0, 0, 1, 0, 0],
                                                       [1, 1, 1, 0, 1, 1, 1]]
                          Implicit: output result of last expression

Yapılar için Yaşasın: P: P: P
HyperNeutrino

Yaay, birisi Python-Jelly-Python-Jelly zincirini kırdı!
Bay Xcoder

@ Mr.Xcoder Jelly, Python'da gerçekten uygulandı. : p
Outgolfer Erik

3

Mathematica, 77 bayt

Table[CellularAutomaton[51,{{1},0},#,{All,All}][[i]][[#-i+2;;-#+i-2]],{i,#}]&

@Bir ağaç 48 bayta indirilmedi!

Mathematica, 48 bayt

#&@@@NestList[CellularAutomaton@51,{{1},0},#-1]&

Bunu hücresel bir otomata olarak düşünmeyi düşünmemiştim. Güzel!
HyperNeutrino

2
Aynı şey ama golfçü:, #&@@@NestList[CellularAutomaton@51,{{1},0},#-1]&48 bayt
Bir ağaç değil

3

Pyth , 14 bayt

@Jakube'a 2 bayt kaydettiği için teşekkürler!

ms_+Bm%d2d%hd2

Burada deneyin!

Pyth , 15 bayt

-1 byte için @Jakube'a çok teşekkürler

m++K*d]%d2%td2K

Burada deneyin.

Pyth , 16 bayt

m++K*d`%d2`%td2K

Burada deneyin.


]İlk koddaki ikinciyi kaldırın .
Jakube

@ Jakube Evet, teşekkürler. Listelere öğe eklemek için otomatik listeleme hakkında unuttum.
Bay Xcoder

Ve burada 14 baytlık bir çözüm var:ms_+Bm%d2d%hd2
Jakube

@ Jakube Evet, şu anda çatallanma düşünüyordum, ama cep telefonumdan beri yapamadım. Tekrar çok teşekkürler!
Bay Xcoder

3

R , 73 bayt

Giuseppe teşekkürler! İyi yakaladın.

n=scan();for(i in 1:n)cat(c(rep(" ",n-i),x<-rep(1-i%%2,i-1)),i%%2,x,"\n")

Çevrimiçi deneyin!

R , 78 bayt

n=scan();for(i in 1:n)cat(x<-c(rep(" ",n-i),rep(1-i%%2,i-1)),i%%2,rev(x),"\n")

Çevrimiçi deneyin!

R , 82 bayt

n=scan();for(i in 1:n){j=i%%2;x=c(rep(" ",n-i),rep(1-j,i-1));cat(x,j,rev(x),"\n")}

Çevrimiçi deneyin!

R , 110 bayt - stdout'a çıkış

m=matrix(x<-rep_len(0:1,n<-scan()),n,n-1);m[upper.tri(m,T)]=" ";for(i in 1:n)cat(rev(m[i,]),1-x[i],m[i,],"\n")

Çevrimiçi deneyin!

R , 130 bayt - bir dosyaya çıktı

m=matrix(x<-rep_len(0:1,n<-scan()),n,n-1);m[upper.tri(m,T)]=" ";for(i in 1:n)cat(rev(m[i,]),1-x[i],m[i,],"\n",file="a",append=i>1)

Çevrimiçi deneyin!

Bir dosyaya dışarı yazma ben eğer konsolda sığdırmak için nasıl bilmiyorum olarak n==99(sonucunu görmek burada ).


2
Konsolun daha büyük n'ler için sarılması konusunda endişelenmeniz gerektiğini düşünmüyorum. Şahsen ben STDOUT çıktı doğru olarak, dosya = "a" hendek.
MickyT


1

Pascal , 181154 bayt

@ThePirateBay sayesinde 27 bayt kaydedildi

procedure f(n:integer);var i,j:integer;begin for i:=1to n do begin write(' ':(n-i+1)*2);for j:=1to i*2-1do write((ord(j<>i)+i)mod 2,' ');writeln()end end;

Çevrimiçi deneyin!

Unglofed

procedure f (n: integer);
    var i, j: integer;
    begin
        for i := 1 to n do
        begin
            write(' ': (n-i+1) * 2);
            for j := 1 to i*2-1 do
                write((ord(j<>i) + i) mod 2, ' ')
            writeln()
        end
    end;


1

Retina , 25 bayt

.+
$*0
0
1$`¶
T`d`10`¶.*¶

Çevrimiçi deneyin! Açıklama: İlk aşama, girdiyi bu uzunluktaki sıfırlardan oluşan bir dizeye dönüştürür. İkinci aşama daha sonra bu dizenin tüm öneklerini alır (dizenin kendisini içermez) ve bunlara 1 önekini ekler. Üçüncü aşama daha sonra alternatif satırlardaki bitleri değiştirir.


1

05AB1E , 24 21 18 bayt

FNÉN×NÈJûIN>-úˆ}¯»

Çevrimiçi deneyin!


Edit: Şey, benim ilk 05AB1E golf bu yüzden şeyler golf olabilir sürpriz değilim. Geçmişi düzenle:



1

Mathematica, 90 bayt

Array[(x=Table[1,f=(2#-1)];x[[⌈f/2⌉]]=0;If[#==1,{1},If[OddQ@#,x/.{1->0,0->1},x]])&,#]&


0

Kömür , 18 bayt

EN⪫IE⁺¹ι﹪⁺ι¬λ² ‖O←

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. Açıklama:

EN              For each of the input number of rows
  ⪫             Join with spaces
   I            Convert to string
    E⁺¹ι        For each column
        ﹪⁺ι¬λ²  Calculate the digit
‖O←             Reflect to the left

0

JavaScript, 140 132 bayt (uygun biçimlendirmeyle)

n=>{A=Array;a='';b=0;for(x of A(n)){for(c of A(n-b))a+=' ';for(c of A(b))a+=b%2;a+=(b+1)%2;for(c of A(b))a+=b%2;a+='\n';b++}return a}

Çevrimiçi Deneyin


Bilmediyseniz, A=Array8 bayt kaydetmek için kullanabilirsiniz .

İyi bir nokta, bunu düşünmedim
David Bailey

En az 3 bayt daha kaydedebilirsiniz: 1) Bunun yerine , ilk dizi çağrısında (örn. 1 bayt tasarruf eden, 2) A=Array;değişkeni başlatabilirsiniz , değişmez yeni satırla değiştirin (mezar aksanlarını kullanın), 3) eşdeğer olduğu için parantez gerekir . Afor(x of(A=Array)(n))'\n'(b+1)%2b+1&1

0

JavaScript (ES6) , 74 73 71 68 64 bayt

@Neil tarafından -7 bayt

f=n=>n--?[...f(n), [...Array(n-~n)].map((v,i)=>(n+(i==n))%2)]:[]

Çevrimiçi deneyin!

Çizgileri tek tek üreten basit özyinelemeli işlev. Sayı dizisi dizisi olarak çıktılar.


Biçimlendirilmiş dize olarak çıktılar:

JavaScript (ES6) , 122 119 118 bayt

f=(n,w=2*n+1,N=n,s=" ".repeat((N-n)*2))=>(--n?f(n,w,N)+s+[...Array(n-~n)].map((v,i)=>(n+(i==n))%2).join(" "):s+1)+"\n"

Çevrimiçi deneyin!


(n%2+(i==n))%2basitleştirilebilir (n+(i==n))%2.
Neil

Ya 1&n^i==nda işe yarayabilir, ama test etmedim.
Neil

Ayrıca deneyin n--?...:[]. (Ve ;golf koduna ihtiyacınız yok .)
Neil

2*n+1olabilir n-~n, ama kesinlikle hatırlayamıyorum.
Neil

@Neil Teşekkürler! Çalışmaya alabilir olanlar Eklenenler
Birjolaxew


0

J, 32 bayt

3 :'-.^:(2|y)(=|.)i.>:+:y'&.>@i.

Çevrimiçi deneyin! Bu, kutulu bir değerler listesi döndüren anonim bir işlevdir.

Açık işlev tanımının, kapakları ve benzeri öğeleri kaldırarak bayt kaydettiğini hayal etmek isterim, ancak muhtemelen örtük bir cevaba kıyasla birkaç bayt ekler.

açıklama

3 :'-.^:(2|y)(=|.)i.>:+:y'&.>@i.
                              i. For i = 0 ... input - 1
3 :'-.^:(2|y)(=|.)i.>:+:y'        Explicit function: compute nth row
                    >:+:y          2n+1
                  i.               Range [0,2n+1)
             (=|.)                 Equate range to reversed range
                                    (yield 0 0 0 ... 1 ... 0 0 0)
                                   If
                                    n = 1 (mod 2)
                                   Then
                                    Negate each value
                          &.>     Box

0

05AB1E , 11 bayt

FN°SRNF_}ûˆ

Çevrimiçi deneyin!

açıklama

F             # for N in range [0 ... input-1] do:
 N°           # push 10^N
   S          # split to list of digits
    R         # reverse
     NF_}     # N times do: logical negation
         û    # palendromize
          ˆ   # add to global list
              # implicitly display global list

0

J , 17 bayt

(2&|~:0=i:)&.>@i.

Çevrimiçi deneyin!

Kutulu dizilerin bir listesini çıkarır.

açıklama

(2&|~:0=i:)&.>@i.  Input: n
               i.  Range from 0 to n, exclusive end
           & >     Unbox each and perform on each x
        i:           Range from -x to x, inclusive
      0=             Equal to 0
    ~:               Not equal
 2&|                 x mod 2
           &.>       Perform inverse of unbox (box)

0

Java 8, 121 111 109 101 bayt

n->{String r[]=new String[n],t;for(int i=0,j;i<n;r[i++]=t+i%2+t)for(j=0,t="";j++<i;t+=i%2);return r;}

Mevcut bayt skorum (101) da ikili üçgenin bir sırası. :)

Açıklama:

Burada deneyin.

n->{                         // Method with integer parameter and String-array return-type
  String r[]=new String[n],  //  Result String-array
         t;                  //  Temp String
  for(int i=0,j;             //  Some index-integers
      i<n;                   //  Loop (1) from 0 to `n` (exclusive)
      r[i++]=                //    After every iteration, set the next row to:
        t+                   //     `t` +
        i%2                  //     Center digit (`i` has already been raised by 1 now)
        +t)                  //     + `t` again
    for(j=0,t="";            //   Reset index `j` and the temp-String `t`
        j++<i;               //   Inner loop (2) from 0 to `i` (exclusive)
      t+=i%2                 //    Append `t` with an outer digit
    );                       //   End of inner loop (2)
                             //  End of loop (1) (implicit / single-line body)
  return r;                  //  Return resulting String-array
}                            // End of method

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.