Output a Pyramid (atau Highway)


39

Diberikan string non-kosong, dengan panjang genap, dan bilangan bulat positif n, yang mewakili tingginya, menyusun piramida menggunakan aturan berikut:

Piramida harus berisi n garis-garis yang tidak kosong; mengikuti baris baru diizinkan. Untuk setiap 1 <= i <= n, baris ke-i harus berisi string dengan setiap karakter individu diulang di tempat i kali; abcd diulang 3 kali sehingga menjadi aaabbbcccddd. Setiap garis harus dipusatkan dengan ruang bantalan sehingga bagian tengah dari setiap garis lurus secara vertikal. Ruang tambahan di akhir setiap baris diizinkan. Anda juga dapat memiliki hingga satu baris baru, tetapi tidak ada spasi putih sebelum baris pertama.

String input tidak dijamin sebagai palindrom.

Kasus cobaan

s = 'o-o  o-o', n = 10:

                                    o-o  o-o                                    
                                oo--oo    oo--oo                                
                            ooo---ooo      ooo---ooo                            
                        oooo----oooo        oooo----oooo                        
                    ooooo-----ooooo          ooooo-----ooooo                    
                oooooo------oooooo            oooooo------oooooo                
            ooooooo-------ooooooo              ooooooo-------ooooooo            
        oooooooo--------oooooooo                oooooooo--------oooooooo        
    ooooooooo---------ooooooooo                  ooooooooo---------ooooooooo    
oooooooooo----------oooooooooo                    oooooooooo----------oooooooooo

1
Sandbox Post dibuat oleh user42649, yang merupakan akun saya sampai terhapus.
HyperNeutrino

Dapatkah output untuk suatu fungsi pada pertanyaan ini berupa daftar string, masing-masing mewakili sebuah baris, atau haruskah itu digabungkan dengan baris baru?
notjagan

7
Keluaran piramida Anda pasti berarti jalan raya !
Luis Mendo

Tampak seperti piramida Aztec!
QBrute

3
@Qrute Na. Dibuat oleh seorang Goa'uld :)
theblitz

Jawaban:


12

05AB1E , 9 byte

γ².D)ƶJ.C

Cobalah online!


γdalam jumlah yang tidak sedikit, diilhami oleh jawaban Adnan; tetapi Sjuga akan bekerja.


γ          # Split into runs.    | ['0','-','0']
 ².D)      # Push n times.       | [['0','-','0'],['0','-','0'],['0','-','0']]
     ƶ     # Lift by index.      | [['0','-','0'],['00','---','00'],['000','---','000']]
      J    # Inner join.         | ['0-0','00--00','000---000']
       .C  # Center.             | Expected output.

Saya tidak percaya seseorang benar-benar menurunkan pos yang salah: /
Jonathan Allan

1
@Jonathan. Seberapa sering kesalahan yang bisa saya hindari patut negatif sampai taraf tertentu.
Magic Gurita Guci

12

05AB1E , 11 byte

F²γN>×J}».C

Menggunakan penyandian 05AB1E . Cobalah online!


Mulai funky dengan input di atas 168. jika tidak hebat!
tuskiomi

@carusocomputing »bergabung dengan array dalam dengan spasi. Menggantinya dengan Jharus bekerja (dan saya pikir Anda harus memposting itu sebagai jawaban yang berbeda).
Adnan

Ah! Apakah selalu seperti itu? Jika demikian, keren, jika tidak saya pasti melewatkan itu. Terima kasih, akan lakukan.
Magic Gurita Guci

8

Jelly , 14 13 byte

LH×Ḷ}Ṛ⁶ẋżxЀY

Cobalah online!

Bagaimana itu bekerja

LH×Ḷ}Ṛ⁶ẋżxЀY  Main link. Arguments: s (string), n (integer)

L              Get the length l of s.
 H             Halve it, yielding l/2.
   Ḷ}          Unlength right; yield [0, ... n-1].
  ×            Compute [0, l/2, ..., l(n-1)/2].
     Ṛ         Reverse; yield [l(n-1)/2, ..., l/2, 0].
      ⁶ẋ       Space repeat; create string of that many spaces.
         xЀ   Repeat in-place each; repeat the individual characters of s
               1, ..., n times, yielding an array of n strings.
        ż      Zipwith; pair the k-th string of spaces with the k-th string of 
               repeated characters of s.
            Y  Sepatate the resulting pairs by linefeeds.

8

C # (.NET Core) , 139 137 136 130 byte

using System.Linq;s=>n=>Enumerable.Range(0,n).Select(i=>"".PadLeft((n+~i)*s.Length/2)+string.Concat(s.Select(c=>new string(c,i))))

Cobalah online!

Mengembalikan enumerasi strings dengan garis-garis gambar. Setelah bergabung hasilnya adalah seperti ini:

                        _  _
                    ಠಠ__ಠಠ    ಠಠ__ಠಠ
                ಠಠಠ___ಠಠಠ      ಠಠಠ___ಠಠಠ
            ಠಠಠಠ____ಠಠಠಠ        ಠಠಠಠ____ಠಠಠಠ
        ಠಠಠಠಠ_____ಠಠಠಠಠ          ಠಠಠಠಠ_____ಠಠಠಠಠ
    ಠಠಠಠಠಠ______ಠಠಠಠಠಠ            ಠಠಠಠಠಠ______ಠಠಠಠಠಠ
ಠಠಠಠಠಠಠ_______ಠಠಠಠಠಠಠ              ಠಠಠಠಠಠಠ_______ಠಠಠಠಠಠಠ
  • 2 byte disimpan berkat Kevin Cruijssen!
  • 1 byte disimpan berkat Value Ink!
  • 6 byte disimpan berkat LiefdeWen!

1
Anda dapat menyimpan dua byte dengan menghapus tanda kurung di (n-i-1)*s.Length/2. Dan saya suka test case Anda. +1 :)
Kevin Cruijssen

10
ಠ_ಠmengintensifkan
Magic Gurita Guci

1
Wajib " ~isama dengan -i-1", sehingga Anda dapat menyimpan byte dengan mengubah (n-i-1)ke (n+~i).
Value Ink

1
dan Anda dapat menggunakan kari s=>n=>...untuk byte lain
LiefdeWen

1
@CarlosAlejo Maaf karena memposting hasil edit yang terpisah tetapi Anda juga dapat menggantinya new string(' '...dengan"".PadLeft(...
LiefdeWen

7

Cheddar , 71 64 byte

Disimpan 7 byte berkat @NilaiInk

(s,n)->(1|>n=>i->(s.len*(n-i)/2)*" "+s.sub(/./g,"$&"*i)).asLines

Cobalah online! Saya akan menambahkan penjelasan sedikit

Penjelasan

(string, count)->(
   1 |> count          // 1..count, the amount of rep/char per line
     => i -> (         // Map over the range       
        s.len*(n-i)/2  // Calculate amount of spaces and repeat by it.
     )*" "
     + s.sub(/./g,"$&"*i) // replace each character, duplicate the amount of times `*i`
).asLines              // return the above joined with newlines

Tidak masalah! Saya ingin tahu apakah Cheddar memiliki centerfungsi yang dapat Anda gunakan seperti yang saya miliki pada jawaban Ruby saya, karena itu berpotensi menghemat byte juga.
Value Ink


5

Java 8, 188 186 185 183 181 173 byte

s->n->{String r="";int l=s.length()/2,x=l*n,i,j;for(i=0;i++<n;r+="\n"){r+=s.format("%"+x+"s",r).substring(0,x-i*l);for(char c:s.toCharArray())for(j=0;j++<i;r+=c);}return r;}

-2 byte (185 → 183) karena perbaikan bug (itu menghasilkan n+1garis bukan n). Tidak sering terjadi bahwa perbaikan bug menghemat byte. :)
-2 byte (183 → 181) berkat @ OlivierGrégoire

Penjelasan:

Coba di sini.

s->n->{                          // Method with String and integer parameter and String return-type
  String r="";                   //  Return-String
  int l=s.length()/2,            //  Halve the length of the input-String
      x=l*n,                     //  Halve the length * the input integer
      i,j;                       //  Some temp integers
  for(i=0;i++<n;                 //  Loop (1) `n` times
      r+="\n"){                  //    And after every iteration, add a new-line
    r+=s.format("%"+x+"s",r).substring(0,x-i*l);
                                 //   Add the appropriate trailing spaces
    for(char c:s.toCharArray())  //   Loop (2) over the characters of the String
      for(j=0;j++<i;r+=c);       //    And repeat each one more than in the previous row
                                 //   End of loop (2) (implicit / single-line body)
  }                              //  End of loop (1)
  return r;                      //  Return the result-String
}                                // End of method

1
Jika Anda memindahkan int terlebih dahulu, Anda dapat mendeklarasikan r="",q=s.format("%"+x+"s",r)untuk menyimpan 2 byte. Banyak langkah untuk hanya dua byte :(
Olivier Grégoire

1
@ OlivierGrégoire Terima kasih! Dengan menggunakan s.format("%"+x+"s",r)secara langsung, saya dapat menyimpan 8 byte lagi setelah golf Anda. :)
Kevin Cruijssen

4

JavaScript (ES6), 85 byte

Mengambil input dalam sintaks currying (string)(height). Termasuk baris baru terkemuka.

s=>g=(n,p=`
`)=>n?g(n-1,p+' '.repeat(s.length/2))+p+s.replace(/./g,c=>c.repeat(n)):''

Demo


Ada spasi putih terdepan sebelum baris terakhir, apakah itu diizinkan?
Charlie

@CarlosAlejo Oh, itu adalah efek samping yang tidak disengaja dari pembaruan menit terakhir. Sekarang sudah diperbaiki. Terima kasih telah melaporkan ini!
Arnauld

4

Arang , 19 byte

F⁺¹N«J±×ι÷Lη²ιFηFικ

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

F⁺¹N«       for (Plus(1, InputNumber())) {

Kita perlu garis berulang 1..nkali. Cara termudah untuk mencapai ini adalah untuk loop dari 0 ke n, karena loop 0 pada dasarnya adalah no-op.

J±×ι÷Lη²ι       JumpTo(Negate(Times(i, IntDivide(Length(h), 2))), i);

Posisikan kursor sehingga garis yang dihasilkan berada di tengah.

FηFικ           for (h) for (i) Print(k);

Dan ini adalah cara sederhana mencetak setiap karakter berulang ikali.


4

Python 2 , 75 77 byte

s,n=input()
for i in range(n):print''.join(c*-~i for c in s).center(len(s)*n)

Cobalah online!


Sial, saya memiliki jawaban yang hampir sama, tetapi saya tidak yakin apakah suatu fungsi dapat mengembalikan daftar baris. Jika demikian, saya akan memposting milik saya sebagai jawaban terpisah, tetapi jika tidak, itu akan terlalu mirip dengan posting.
notjagan

3
Wow, ada centerbuiltin? Saya benar-benar perlu membaca dokumen kadang-kadang: P
HyperNeutrino

Mengembalikan output yang salah; ini memiliki baris kosong terkemuka diikuti oleh n-1baris.
Value Ink

Anda juga memiliki beberapa spasi putih terkemuka sebelum baris terakhir, apakah itu diizinkan?
Charlie

@FryAmTheEggman yang mungkin benar, tetapi masih mengembalikan 9garis piramida ketika inputnya 10...
Nilai Tinta


4

Javascript, 105 byte

(s,n)=>Array(N=n).fill().reduce(a=>a+'\n'+' '.repeat(--n*s.length/2)+s.replace(/./g,_=>_.repeat(N-n)),'')

Setelah beberapa tahun libur, Stretch Maniac kembali, semoga sedikit lebih berpendidikan kali ini.


Anda memiliki terlalu banyak ruang utama di setiap baris.
Shaggy

Berikut adalah versi ES8 99 byte dari metode ini yang saya buat sebelum saya melihat milik Anda: s=>n=>[...Array(x=n)].reduce(a=>a+'\n'.padEnd(--x*s.length/2+1)+s.replace(/./g,c=>c.repeat(n-x)),'')- Anda harus mengganti 's dengan backticks dan \ndengan baris baru literal.
Shaggy


3

APL (Dyalog) , 33 31 byte

2 byte di-golf berkat @ZacharyT dengan menghapus tanda kurung yang tidak perlu

{↑((' '/⍨(.5×≢⍵)×⍺-⊢),⍵/⍨⊢)¨⍳⍺}

Cobalah online!

Penjelasan

Argumen kanan adalah string dan argumen kiri adalah angka.

{↑((' '/⍨(.5×≢⍵)×⍺-⊢),⍵/⍨⊢)¨⍳⍺}
                             ⍳⍺      Range 1 .. 
  (                                For each element (let's call it i) do:
                      ⍵/⍨⊢          Replicate ⍵ i times
  (                 ),               Concatenated with
         (.5×≢⍵)×⍺-⊢                (⍺-i)×(len(⍵)×0.5)
   ' '/⍨                                spaces
 ↑                                    Convert the resulting array to a 2D matrix

Apakah Anda membutuhkan orangtua ⍺-⊢?
Zacharý

@ ZacharyT Anda benar, saya tidak membutuhkannya. Terima kasih :)
Kritixi Lithos

3

Prolog SWI, 398 byte

Ini bukan solusi yang paling ringkas (mungkin di suatu tempat menciptakan kembali roda alih-alih menggunakan prosedur bawaan), tetapi lebih cocok untuk digunakan.

w(0).
w(X):-write(' '),Y is X-1,w(Y).
s(S,N):-string_length(S,X),Y is div(X,2)*N,w(Y).
d(S,N,R):-atom_chars(S,A),e([],A,N,R).
e(B,[H|T],N,R):-l(B,H,N,I),e(I,T,N,R).
e(B,[],_,B).
a([], L, L).
a([H|T],L,[H|R]):-a(T,L,R).
l(L,_,0,L).
l(L,I,N,R):-M is N-1,l(L,I,M,T),a(T,[I],R).
o([]):-nl.
o([H|T]):-write(H),o(T).
p(S,N):-p(S,N,N).
p(_,0,_).
p(S,N,L):-Q is N-1,p(S,Q,L),d(S,N,R),W is L-N,s(S,W),o(R).

Uji:

?- p("o-o  o-o",10).
                                    o-o  o-o
                                oo--oo    oo--oo
                            ooo---ooo      ooo---ooo
                        oooo----oooo        oooo----oooo
                    ooooo-----ooooo          ooooo-----ooooo
                oooooo------oooooo            oooooo------oooooo
            ooooooo-------ooooooo              ooooooo-------ooooooo
        oooooooo--------oooooooo                oooooooo--------oooooooo
    ooooooooo---------ooooooooo                  ooooooooo---------ooooooooo
oooooooooo----------oooooooooo                    oooooooooo----------oooooooooo
true .

Penjelasan:

w dan s menulis jumlah ruang terdepan yang tepat:

w(0).
w(X):-write(' '),Y is X-1,w(Y).
s(S,N):-string_length(S,X),Y is div(X,2)*N,w(Y).

d mengelola "duplikasi" karakter dan e adalah fasilitas rekursifnya:

//d(String, Number of repetitions, Result)
d(S,N,R):-atom_chars(S,A),e([],A,N,R).
e(B,[H|T],N,R):-l(B,H,N,I),e(I,T,N,R).
e(B,[],_,B).

a dan l menambahkan hasilnya (mungkin ada prosedur bawaan?):

a([], L, L).
a([H|T],L,[H|R]):-a(T,L,R).
l(L,_,0,L).
l(L,I,N,R):-M is N-1,l(L,I,M,T),a(T,[I],R).

o menciptakan output:

o([]):-nl.
o([H|T]):-write(H),o(T).

dan akhirnya p adalah metode utama :

p(S,N):-p(S,N,N).
p(_,0,_).
//p(String, Current level, Number of levels) :- go to the bottom, create pyramide level, write whitespaces, write the level
p(S,N,L):-Q is N-1,p(S,Q,L),d(S,N,R),W is L-N,s(S,W),o(R).

3

Japt , 20 + 1 = 21 19 + 1 = 20 14 byte

Outputs array baris - tambahkan 2 byte jika itu tidak diizinkan.

Võ@®pXÃù°V*UÊz

Menguji

  • Disimpan 1 byte berkat produk ETH

Penjelasan

      :Implicit input of string U & integer V
Võ    :Generate an array of integers from 1 to V, inclusive
@     :Map over the elements of the array
®     :Map over the characters of U
p     :Repeat the current character ...
X     :  X (the current element) times.
à    :End string mapping.
ù     :Left pad each line with spaces to length...
°V    :  V incremented by one...
*     :  multiplied by...
UÊ    :  the length of U...
z     :  divided by 2.
      :Implicit output of resulting array.

Saya pikir Anda dapat mengubah SpUlke ... menunggu, Nevermind :( Anda dapat menyimpan byte meskipun dengan mengganti (V-Xdengan XnV, jika saya tidak salah.
ETHproductions

Oh, ya, lupakan n; terima kasih @ETHproductions.
Shaggy

2

PHP, 113 byte:

for([,$s,$n]=$argv;$i++<$n;)for(print($f=str_pad)("
",($n-$i)*strlen($s)/2+!$p=0);~$c=$s[$p++];)echo$f($c,$i,$c);

Jalankan dengan php -nr '<code>' '<string>' <N>atau coba online .

kerusakan

# import input, loop $i from 1 to $n
for([,$s,$n]=$argv;$i++<$n;)
    # 1. print newline and padding, reset $p
    for(print($f=str_pad)("\n",($n-$i)*strlen($s)/2+!$p=0);
    # 2. loop $c through string
        ~$c=$s[$p++];)
        # print repeated character
        echo$f($c,$i,$c);


2

T-SQL, 223 byte

DECLARE @ char(99),@n INT,@i INT=1,@j INT,@p varchar(max)SELECT @=s,@n=n FROM t
R:SET @j=0SET @p=SPACE((@n-@i)*len(@)/2)C:SET @j+=1SET @P+=REPLICATE(SUBSTRING(@,@j,1),@i)IF @j<LEN(@)GOTO C
PRINT @p SET @i+=1IF @i<=@n GOTO R

Input melalui tabel t yang sudah ada sebelumnya dengan kolom s dan n , sesuai standar IO kami .

Tidak banyak yang bisa dijelaskan, ini adalah simpul bersarang yang cukup mudah, digunakan @iuntuk baris dan @juntuk menelusuri karakter string yang merupakan REPLICATED @ikali:

DECLARE @ char(99),@n INT,@i INT=1,@j INT,@p varchar(max)
SELECT @=s,@n=n FROM t
R:
    SET @j=0
    SET @p=SPACE((@n-@i)*len(@)/2) 
    C:
        SET @j+=1
        SET @P+=REPLICATE(SUBSTRING(@,@j,1),@i)
    IF @j<LEN(@)GOTO C
    PRINT @p
    SET @i+=1
IF @i<=@n GOTO R

2

R , 125 95 byte

function(S,n)for(i in 1:n)cat(rep(' ',(n-i)/2*nchar(S)),rep(el(strsplit(S,'')),e=i),sep="",'
')

Cobalah online!

Penjelasan:

Ini cukup mudah, membelah string dan mengulang elemen ikali masing-masing rep(s,e=i)( ekependekan each) saat kita loop. Bagian yang sulit adalah rep('',(n-i)/2*length(s)+1). Ini adalah string padding, tapi ini adalah string kosong. Saya perlu menambahkan 1 karena jika tidak hasilnya adalah character(0), vektor panjang nol, dan cat, yang secara default memisahkan elemen-elemennya dengan spasi, menyelaraskan garis akhir.


1

Mathematica, 97 byte

(c=Characters@#;T=Table;Column[T[""<>T[""<>T[c[[i]],j],{i,Length@c}],{j,#2}],Alignment->Center])&


memasukkan

["oo oo", 10]


1

Tcl, 143 142 141 138 byte

proc p s\ n {set p [expr [set w [expr [string le $s]/2]]*$n];time {incr p $w;puts [format %$p\s [regsub -all . $s [append r \\0]]]} $n;cd}

Uji:

% p "o-o  o-o" 5
                o-o  o-o
            oo--oo    oo--oo
        ooo---ooo      ooo---ooo
    oooo----oooo        oooo----oooo
ooooo-----ooooo          ooooo-----ooooo

Catatan: "cd" pada akhir prosedur mencegah hasil waktu untuk dicetak di bawah piramida, tetapi mengubah direktori saat ini - efek samping yang tidak secara eksplisit dilarang.

Terima kasih kepada sergiol untuk sebuah petunjuk untuk menghemat satu byte .... dan petunjuk lain untuk menyimpan satu byte lagi.

Berkat aspek (pada tcl chat) untuk 3 byte lainnya disimpan!


1

Swift, 232 byte

Mungkin bisa lebih baik, tetapi saya tidak punya banyak waktu untuk refactor.

Jawaban ini menggunakan Swift 4, sehingga saat ini tidak dapat dijalankan online.

var p:(String,Int)->String={s,i in let r=(1...i).map{n in return s.map{return String(repeating:$0,count:n)}.joined()};return(r.map{return String(repeating:" ",count:(r.last!.count-$0.count)/2)+$0}as[String]).joined(separator:"\n")}

1

LOGO, 97 95 byte

to f :s :n
for[i 1 :n][repeat(:n-:i)/2*count :s[type "\ ]foreach :s[repeat :i[type ?]]pr "]
end

Coba kode pada penerjemah FMSLogo.

Tetapkan fungsi fyang mengambil dua input, :sdan :n, kemudian cetak hasilnya.


1

Java 8, 164 148 byte

s->n->{String o="";for(int i=0,m,j;i++<n;){o+="\n";for(m=0;m++<(n-i)*s.length()/2;)o+=" ";for(char c:s.toCharArray())for(j=0;j++<i;)o+=c;}return o;}

Penjelasan:

s->n->{
    String o = "";                                  //empty output string
    for (int i = 0, m, j; i++ < n; ) {              //for each row
        o += "\n";                                  //append a new line
        for (m = 0; m++ < (n - i)*s.length()/2; )   //for amount of spaces = inversed row_number * half length
            o += " ";                               //append a space
        for (char c : s.toCharArray())              //for each char of the string
            for (j = 0; j++ < i; )                  //row_number times
                o+=c;                               //append char
    }
    return o;
}

1

Karat, 107 byte

|a:&str,b|for i in 0..b{println!("{:^1$}",a.split("").map(|s|s.repeat(i+1)).collect::<String>(),a.len()*b)}

tautan playpen

Menentukan fungsi anonim yang mengambil irisan dan angka string, mencetak pola yang diinginkan ke output standar. Diasumsikan bahwa slice string hanya berisi karakter ASCII, tetapi tantangannya tidak pernah menentukan bahwa dukungan unicode penuh diperlukan. Untuk memperbaiki unicode juga akan membutuhkan 117 byte:

|a:&str,b|for i in 0..b{println!("{:^1$}",a.split("").map(|s|s.repeat(i+1)).collect::<String>(),a.chars().count()*b)}

Penjelasannya agak sederhana:

|a:&str,b|                             // arguments, compiler can't infer the type of a unfortunately
    for i in 0..b {                    // iterate from row 0 to row b - 1
        println!(
            "{:^1$}",                  // print a line containing arg 0, centered with the width specified as arg 1
            a.split("")                // split the string into slices of one character
                .map(|s|s.repeat(i+1)) // for each slice, yield a string containing row+1 times that slice
                .collect::<String>(),  // concatenate each of the strings into one string
            a.len()*b                  // total length should be the length of the string times the amount of rows
        )
    }

1

SOGL V0.12 , 8 byte

∫dč*∑}¹╚

Coba Di Sini!

Penjelasan:

∫dč*∑}¹╚
∫    }    iterate over 1..input, pushing counter
 d        push the variable D, which sets itself to the next input as string
  č       chop into characters - a vertical array
   *      multiply horizontally by the counter
    ∑     join the array together
      ¹   wrap all that in an array
       ╚  center horizontally

Saya tidak ingin memperbarui jawaban lama saya di sini karena menggunakan metode yang berbeda dan menggunakan fitur baru (er daripada tantangan) -


1

Python 2 , 79 77 byte

s,n=input();m=n
while m:m-=1;print' '*(m*len(s)/2)+''.join(i*(n-m)for i in s)

Cobalah online!

Sunting: -2 bytes milik @FlipTack


Anda dapat menghapus tanda kurung siku di sekitar [i*(n-m)for i in s], karena .joinmampu mengambil generator, yang seharusnya membuat Anda dua byte.
FlipTack

0

Excel VBA, 98 Bytes

Fungsi jendela langsung VBE anonim yang mengambil input sebagai string dari [A1]dan int dari [B1]kemudian output ke jendela langsung VBE

For i=1To[B1]:?Spc([Len(A1)/2]*([B1]-i));:For j=1To[Len(A1)]:?String(i,Mid([A1],j,1));:Next:?:Next
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.