Komunikasi yang lebih mudah berarti pengkodean yang lebih cepat berarti lebih sedikit coders ...


28

Ayah saya yang benar-benar APLer yang baik dan mengajari saya semua dasar-dasar APL (dan banyak lagi), meninggal pada hari ini, lima tahun yang lalu. Dalam persiapan untuk 50 Tahun APL , saya menemukan surat paten ini (diterjemahkan untuk kenyamanan mereka yang tidak membaca bahasa Denmark) untuk logo tulisan tangan. Ini menjelaskan alasan utama APL tidak pernah mendapatkan basis pengguna yang besar - alasan yang tentu saja berlaku untuk semua bahasa golf yang menakjubkan di komunitas ini juga:


A 3497/77 Req. 29 th 1977 Agustus di 13

KOMUNIKASI LEBIH MUDAH BERARTI LEBIH CEPAT

Henri Brudzewsky, perusahaan konsultan teknik, Mindevej 28, Søborg,

kelas 9 , termasuk komputer, khususnya komputer berkode APL,
kelas 42: perusahaan agen layanan TI, terutama selama penggunaan komputer berkode APL.


Tugas

Menghasilkan keluaran teks yang berulang EASIER COMMUNICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS tanpa ada baris baru. Anda mungkin mulai teks dengan EASIERatau FASTERatau FEWER.


Saya salah mengartikan tantangan Anda dan apa yang saya lakukan adalah i.imgur.com/qKnTj3q.png !
sergiol

@sergiol Hampir valid di sini .
Adám

Tautan ke surat paten sudah mati.
pppery

@ terima kasih. Diperbarui.
Adám

Jawaban:


14

05AB1E , 25 byte

[‘æƒËRSˆ¾¥ƒŽÁˆ¾¡ŸÂ ‘?

Cobalah online!

Penjelasan:

[‘æƒËRSˆ¾¥ƒŽÁˆ¾¡ŸÂ ‘?
[                         Start infinite loop
 ‘æƒËRSˆ¾¥ƒŽÁˆ¾¡ŸÂ ‘   Push the compressed string in uppercase, starting from FEWER, with a trailing space
                        ?  Print without trailing newline

13
Jujur, saya tidak mengerti mengapa solusi Python mendapatkan penjelasan dan yang ini tidak. Apa yang sedang terjadi di sini?
nluigi

3
@nluigi ilmu hitam
Nic Robertson

2
Secara fisik tidak mungkin untuk mengetahui apa yang terjadi di sini jika Anda tidak tahu bahasa, tolong beri penjelasan.
George Willcox

1
@nluigi [Berarti 'permulaan infinite loop', ‘æƒËRSˆ¾¥ƒŽÁˆ¾¡ŸÂ ‘adalah versi terkompresi EASIER COMMUNICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS , dan ?berarti mencetak tanpa baris baru.
Okx

1
@ Leo Itu sangat tidak dijelaskan. Pertama, Anda buka file ini . Di sebelah kanan beberapa karakter yang diperluas, Anda dapat melihat angka. Jika satu digit, letakkan dengan nol di depannya. Dua karakter seperti itu membentuk angka 4 digit dengan kemungkinan nol terkemuka. Kemudian, angka ini digunakan sebagai indeks berbasis nol untuk kamus ini . Perilaku setiap kata tergantung pada kutipan, yang dapat Anda temukan pada file pertama yang saya tautkan dengan mencari compressed.
Erik the Outgolfer

41

SVG (HTML5), 336 byte

<svg width=500 height=500><defs><path id=p d=M49,250a201,201,0,0,1,402,0a201,201,0,0,1,-402,0></defs><text font-size="32"><textPath xlink:href=#p>EASIER COMMUNICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS</textPath><animateTransform attributeName=transform type=rotate from=360,250,250 to=0,250,250 dur=9s repeatCount=indefinite>

Sunting: Beberapa orang telah menemukan bahwa font tidak cocok untuk mereka jadi di sini adalah versi yang memungkinkan Anda beberapa piksel penyesuaian:

<p><input type=number value=0 min=0 max=9 oninput=p.setAttribute('d','M250,250m20_,0a20_,20_,0,1,1,-20_,-20_a20_,20_,0,1,1,-20_,20_a20_,20_,0,1,1,20_,20_a20_,20_,0,1,1,20_,-20_'.replace(/_/g,this.value))></p>
<svg width=500 height=500><defs><path id=p d=M250,250m200,0a200,200,0,1,1,-200,-200a200,200,0,1,1,-200,200a200,200,0,1,1,200,200a200,200,0,1,1,200,-200></defs><text font-size="32"><textPath xlink:href=#p>EASIER COMMUNICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS</textPath><animateTransform attributeName=transform type=rotate from=360,250,250 to=0,250,250 dur=9s repeatCount=indefinite>


Ini indah, tetapi bisakah Anda membuatnya keluar (atas huruf menghadap keluar dari lingkaran) dan semua huruf besar?
Adm

@ Adám Bagaimana ini? Saya harus mengubah dimensi sedikit tetapi itu adalah jumlah byte yang sama.
Neil

1
@ Adám, Anda harus; itulah yang saya pikir akan menjadi tantangan ini ketika saya pertama kali membacanya.
Shaggy

8
Ada ruang yang hilang di "MEANSEASIER", yang ada di antara kata-kata lain.
ShreevatsaR

1
@ShreevatsaR Saya telah menambahkan versi kedua yang menyertakan kotak teks untuk membuat penyesuaian kecil, mungkin itu membantu.
Neil

13

PHP, 76 Bytes

for(;;)echo strtr(EASI0MMUNICATION1FAST0DING1FEW0DERS1,["ER CO"," MEANS "]);

Cobalah online!


4
Hanya dalam PHP ....
user253751

@ imibis Apa maksudmu?
Jörg Hülsermann

Maksud saya Anda berhasil menunjukkan setidaknya 3 PHP "quirks desain" dalam satu baris kode. Baris kode ini adalah ilustrasi mengapa PHP dianggap berbahaya.
user253751

1
@immibis "mimimi tidak suka php" Kupikir kita sudah melewati titik itu selama satu dekade. :-)
Zsolt Szilagy

4
@ Arc676 Pertama, nama tanpa tanda dolar dianggap konstan. Kedua, konstanta tidak terdefinisi diasumsikan sebagai string. Jadi dalam kode EASI0MMUNICATION1FAST0DING1FEW0DERS1ini diperlakukan sebagai string "EASI0MMUNICATION1FAST0DING1FEW0DERS1". Ketiga, strtrmengharapkan array asosiatif ("peta" atau "kamus" dalam bahasa lain), tetapi kode ini diteruskan dalam array biasa, sehingga memperlakukan array biasa sebagai array asosiatif dengan kunci 0 dan 1. Akhirnya, bilangan bulat tersebut 0 dan saya diperlakukan sebagai string "0"dan "1"karena, Anda dapat menebaknya, fungsi tersebut membutuhkan string.
wavemode

11

Vim 69 byte

qqAFEWER CODERS MEANS EASIER COMMUNICATION M<C-n> FASTER CODING M<C-n> <esc>@qq@q

Saya sangat suka ketika urutan perintah Vim langsung membuat solusi golf kode yang layak. :-D
DevSolar

7

HTML, 122 byte

Maaf, tidak bisa menahan diri.

<marquee style="width:5em;word-spacing:5em;">EASIER COMMUNICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS </marquee>


mengapa spasi kata besar?
Adm

@ Adám Karena marquee selalu menyisakan jumlah lebar antara iterasi (yaitu lebarnya sendiri). Dan saya tidak dapat menemukan cara untuk menguranginya, jadi saya harus berimprovisasi dan menempatkan jumlah ruang yang sama di antara setiap kata juga.
Tn. Lister

Tidak bisakah Anda menghapus tag akhir?
NoOneIsHere

@NoOneIsHere Bagaimana itu membantu? Atau Anda maksudkan itu akan golf turun 10 byte? Saya tidak yakin ingin melakukannya; tag akhir sebenarnya bukan opsional.
Tn. Lister

@ Tuan, saya maksudkan golf turun. Saya pikir satu-tag dokumen HTML tidak memerlukan tag akhir.
NoOneIsHere

6

Python 2 , 82 81 byte

-1 byte terima kasih untuk Leaky Nun.

Saya mungkin melakukan sesuatu yang salah tetapi ini benar-benar terlambat jadi saya. Perhatikan tanda koma.

while 1:print'FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS',

Cobalah online!

Solusi lain, 85 byte

Saya mungkin bisa bermain golf ini lebih jauh.

while 1:print'%sER CO%s MEANS'*3%('FEW','DERS',' EASI','MMUNICATION',' FAST','DING'),

Cobalah online!


1
Anda dapat menghapus spasi kedua.
Leaky Nun

@ LeakyNun Bagaimana saya bisa melewatkan itu? o0 Terima kasih!
manusiawi

Di yang kedua, Anda bisa memindahkan spasi ke string format.
wizzwizz4

@ wizzwizz4 Ruang kosong utama tidak diizinkan.
manusiawi

2
@totallyhuman Saat ini, Anda memiliki bug di mana ia akan menampilkan "LEBIH LANJUT CODERS COMMUNICATION COMMUNICATION MEANSFASTER CODING MEANSFEWER ...". Jika Anda mengubah string format ke '%sER CO%s MEANS 'dan menghapus spasi dari item format, itu akan menjadi golfier dan berfungsi dengan baik.
wizzwizz4

5

Jelly , 33 29 byte

4 byte berkat Erik the Outgolfer.

“©%5ÐƬwȮh¬Þ6.⁷ḷḊḥṫɠlḶṀġß»Œu⁶¢

Cobalah online!


1) Anda dapat menggunakan string terkompresi yang lebih baik: “©%5ÐƬwȮh¬Þ6.⁷ḷḊḥṫɠlḶṀġß»(masih perlu menggunakan Œudan ;⁶) 2) Anda dapat menggunakan ßsebagai gantinya 1¿.
Erik the Outgolfer

5

Brachylog , 70 byte

"FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS "w↰

Cobalah online!

Bagaimana itu bekerja

"..."w↰
"..."     generate the string "..."
     w    print to STDOUT without trailing newline
      ↰   do the whole thing all over again

4

HTML / CSS (hanya firefox), 179 177 183 176 173 byte

<b id=a>EASIER COMMUNICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS </b>E<a><style>*{margin:0;}a{position:fixed;left:0;right:0;height:1em;background:-moz-element(#a)}

Hampir tidak ada skor terendah, saya hanya berpikir akan menyenangkan untuk mendapatkan repitition tak terbatas dalam HTML / CSS, tanpa melibatkan JS :)

Changelog:

  • Kutipan yang dihapus di sekitar atribut id
  • menambahkan "round" background-repeat untuk meregangkan teks sehingga membungkus dengan benar
  • diubah menjadi output single-line
  • ganti width:100%style dengan right:0untuk menyimpan 3 byte

Usaha yang bagus, tetapi itu dimulai kembali di setiap baris. OP: tanpa baris baru.
Adm

Setiap jawaban yang dicetak ke terminal akan terbungkus di akhir baris. Coba perkecil; Anda akan melihatnya terus selamanya secara horizontal juga, itu hanya "tersembunyi" oleh jendela browser.
user371366

Juga, saya menyia-nyiakan beberapa byte memiliki gambar berulang "membulatkan" sehingga membungkus lebih meyakinkan, harapan yang membantu
user371366

Bungkus baik-baik saja, tetapi milik Anda tidak. Itu bisa dilihat sebagai "mencetak" banyak baris tak terbatas. Batasi latar belakang menjadi satu baris saja.
Adm

1
iya nih. Saya pikir saya harus meletakkan repeat no-repeatatau ; background-repeat: repeat-x, tetapi menemukan cara untuk menghindarinya. Ternyata mematuhi spesifikasi menghemat byte!
user371366



3

LOLCODE , 116 byte

HAI 1
IM IN YR O
VISIBLE "FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS "!
IM OUTTA YR O
KTHXBYE

Cobalah online!


Saya tidak terbiasa dengan LOLCODE. Bagaimana hasil ini selamanya?
Buah Esolanging

@ Challenger5 IM IN YR ...dan IM OUTTA YR ...membentuk loop tak terbatas.
Leaky Nun

1
Anda dapat menghapus HAI dan KTHXBYE karena kompiler tidak memerlukannya. Juga, tidak ada tanda seru di akhir VISIBLE.
OldBunny2800

@ OldBunny2800 Versi LOLCODE apa yang Anda gunakan? Dalam versi ini , trailing !menekan carriage return setelah pencetakan.
Arc676

Oh, saya lupa tentang aturan no-line-break. Saya tidak menyadari LOLCODE punya cara untuk melakukan ini!
OldBunny2800

3

Ruby, 77 byte

menetapkan " MEANS "ke variabel yang disimpan semua 1 byte :-)

loop{$><<"EASIER COMMUNICATION#{m=" MEANS "}FASTER CODING#{m}FEWER CODERS"+m}

3

JavaScript (ES6), 90 87 byte

while(1)console.log`EASIER COMMUNICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS `

Alternatif Berfungsi, 100 byte

"Berfungsi" di sini berarti "tidak akan membuat browser Anda mogok" (untuk sementara, setidaknya)!

setInterval(_=>console.log`EASIER COMMUNICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS `,1)

1
Kode Anda tidak berfungsi: document.write`EASIER COMMUNICATION${m=" MEANS "}FASTER CODING${m}FEWER CODERS`+msama dengan document.write([ 'EASIER COMMUNICATION', 'FASTER CODING', 'FEWER CODERS' ], ' MEANS ', ' MEANS ') + ' MEANS ', yang 1) akan mengonversi semua argumen menjadi string dan concatenate (printing EASIER COMMUNICATION,FASTER CODING,FEWER CODERS MEANS MEANS ), dan 2) tidak akan menyertakan yang terakhir ' MEANS 'karena di luar pemanggilan fungsi ...
Frxstrem


2

Oktaf, 86 byte

while fprintf('FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS ')end

Penjelasan:

Ini cukup jelas. Satu-satunya "trik" nyata di sini adalah menggunakan while fprintf. Ketika fprintfdiberi argumen pengembalian, itu akan mengembalikan jumlah karakter yang dicetak, dan semua angka bukan nol dianggap truedalam Oktaf, sehingga kondisi loop akan selalu benar.


Saya dengan putus asa mencoba untuk membuat pendekatan yang lebih menarik lebih pendek, tetapi ternyata menjadi 9 byte lebih lama, sayangnya:

while fprintf('FEW%sDERS%sEASI%sMMUNICATION%sFAST%sDING%s',{'ER CO',' MEANS '}{'ababab'-96})end

Ini mencoba untuk memasukkan string 'ER CO'dan ' MEANS'ke dalam string di lokasi yang benar, menggunakan pengindeksan langsung di mana 'ababab'-96adalah versi yang lebih pendek [1 2 1 2 1 2].

Ini sedikit lebih pendek (93 byte), tetapi masih lebih lama dari pendekatan naif

while fprintf('FEWER CODERS%sEASIER COMMUNICATION%sFASTER CODING%s',{' MEANS '}{[1,1,1]})end

Dan satu lagi (89 byte), menggunakan pendekatan Level River St:

while fprintf(['FEWER CODERS',s=' MEANS ','EASIER COMMUNIDATION',s,'FASTER CODING',s])end

Ini seharusnya bekerja secara teori, kurang dari satu byte dari solusi asli, tetapi gagal karena beberapa alasan aneh:

while fprintf"FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS "
end

Ini menggunakan fitur buggy yang fprintf('abc def')setara dengan fprintf"abc def". The endharus berada di baris berikutnya, tapi masih satu byte pendek sejak dua kurung dilewati.

Dan satu lagi untuk 87:

while fprintf('FEWER CODERS%sEASIER COMMUNICATION%sFASTER CODING%s',k=' MEANS ',k,k)end

Yah, jangan bilang aku tidak mencoba :)


Anda tahu bahwa fprintfmendaur ulang argumen, kan? Versi terakhir Anda bisa kurang dari 6 byte, Coba online!
Sanchises

2

Alice , 70 byte

" SNAEM "k"SREDOC REWEF"e0j"GNIDOC RETSAF"e0j"NOITACINUMMOC REISAE"d&o

Cobalah online!

Penjelasan

Sayangnya, menggunakan kembali MEANS(dengan spasi) hanya menghemat satu byte lebih dari sekadar mencetak semuanya sekaligus. Akibatnya, mengekstraksi ER COsebenarnya akan memerlukan biaya satu byte (atau mungkin lebih, karena akan sedikit lebih mahal untuk mengekstrak bagian lain).

" SNAEM "                Push the code points of " MEANS " in reverse.
k                        If there is a return address on the return address stack (which
                         there isn't right now), pop it and jump there.
"SREDOC REWEF"           Push the code points of "FEWER CODERS" in reverse.
e0j                      Jump to the beginning of the line, pushing the location of the
                         j to the return address stack. Hence, we push the code points
                         of " MEANS " again, but then the k pops the return address and
                         jumps back here.
"GNIDOC RETSAF"          Push the code points of "FASTER CODING" in reverse.
e0j                      Jump to the beginning of the line again.
"NOITACINUMMOC REISAE"   Push the code points of "EASIER COMMUNICATION" in reverse.
d                        Push the stack depth.
&o                       Print that many bytes from the top of the stack.
                         Afterwards the IP wraps around to the first column and the
                         program starts over.

2

C #, 102 byte

_=>{for(;;)System.Console.Write("EASIER COMMUNICATION{0}FASTER CODING{0}FEWER CODERS{0}"," MEANS ");};

1

Pyth , 69 byte

Wp"FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS 

Cobalah online!

Bagaimana itu bekerja

Wp"...
W       while the following is true: (do nothing)
 p      print the following and return the following
  "...


1

Java (OpenJDK 9) , 114 byte

static void f(){while(1>0)System.out.print("FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS ");}

Cobalah online! Hentikan eksekusi setelah beberapa detik karena tidak tahu kapan harus berhenti.


Pengajuan harus berupa program atau fungsi lengkap.
Kritixi Lithos

@KritixiLithos Bisakah ini lambda anonim?
totallyhuman

@ benar-benar manusia Ya. Dalam bahasa lain itu diizinkan; Saya tidak melihat mengapa Jawa harus menjadi pengecualian.
wizzwizz4

Mengapa menghentikan eksekusi? Cukup hapus centang menonaktifkan cache keluaran .
Adm

3
Tapi Anda bisa melakukannyafor(;;)
Brian McCutchon

1

C, 86 byte

f(){printf("FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS ");f();}

Lihat itu berfungsi online .


Ini tergantung pada kompiler yang melakukan optimasi tail-call, tapi saya kira kebanyakan melakukannya.
Wayne Conrad

@WayneConrad Ini adalah jawaban yang valid tanpa optimasi itu. Rekursi yang tak terbatas memenuhi persyaratan: Menghasilkan keluaran berulang yang tak terbatas
2501

Tanpa optimisasi panggilan ekor, tumpukan akan meluap pada akhirnya. Coba kompilasi dengan gcc(gunakan opsi default, jadi tidak ada optimasi panggilan ekor), dan ketika Anda menjalankannya, redirect output ke / dev / null untuk mempercepat proses. Itu akan seg kesalahan. Dengan opsi '-O2', yang memungkinkan optimisasi panggilan, itu berjalan selamanya seperti yang dimaksudkan.
Wayne Conrad

@WayneConrad Rekursi Infinite secara konseptual, tak terbatas. Pertanyaannya tidak membatasi definisi praktis dari yang tak terbatas. Dengan konsensus umum, rekursi tak terhingga berulang berulang, dengan kata lain, tidak ada logika di dalam program yang akan menghentikannya ..
2501

Saya tidak menyatakan bahwa solusi Anda tidak valid. Yang ingin saya tunjukkan adalah bahwa, untuk mengeksekusi dengan baik, diperlukan sedikit kerja sama dari kompiler.
Wayne Conrad


1

Perl 6 ,  81 80  79 byte

print ('EASIER COMMUNICATION','FASTER CODING','FEWER CODERS'X'MEANS'),' 'for ^Inf

Cobalah

loop {print ('EASIER COMMUNICATION','FASTER CODING','FEWER CODERS'X'MEANS'),' '}

Cobalah

loop {print [~] 'EASIER COMMUNICATION','FASTER CODING','FEWER CODERS'X'MEANS '}

Cobalah


1

MATL , 68 byte

`'EASIER COMMUNICATION*FASTER CODING*FEWER CODERS*'42' MEANS 'Zt&YDT

Cobalah online!

Penjelasan

`                                                     % Do...while
  'EASIER COMMUNICATION*FASTER CODING*FEWER CODERS*'  %   Push this string
  42                                                  %   Push 42 (ASCII for '*')
  ' MEANS '                                           %   Push this string  
  Zt                                                  %   String replacement
  &YD                                                 %   printf to STDOUT
  T                                                   %   Push true as loop condition
                                                      % End (implicit)

1

Aksioma, 92 89 byte

repeat fortranLiteral"EASIER COMMUNICATION MEANS FASTER CODING MEANS FEWER CODERS MEANS "

masukkan satu baris ke jendela Aksioma. Kemungkinan ada satu fungsi lebih pendek dari "fortranLiteral" yang tidak menulis "\ n"


1

Braingolf , 78 byte

"FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS "[!@66<1+>]

atau

Braingolf , 77 byte [tidak bersaing]

"FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS "[!&@<1+>]

Yang ini tidak bersaing karena saya harus memperbaiki 2 bug tentang menggunakan pengubah serakah ( &) dengan operator cetak char ( @)


1

Kosong , 267 byte

[70][69][87][69][82][32][67][79][68][69][82][83][32][77][69][65][78][83][32][69][65][83][73][69][82][32][67][79][77][77][85][78][73][67][65][84][73][79][78][32][77][69][65][78][83][32][70][65][83][84][69][82][32][67][79][68][73][78][71][32][77][69][65][78][83][32]{p}

Dorong FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANSke tumpukan, lalu cetak. Tidak pernah berakhir sebagai tidak{@}

Juga menyenangkan fakta, saya menggunakan skrip Braingolf berikut untuk menghasilkan kode ini

"FEWER CODERS MEANS EASIER COMMUNICATION MEANS FASTER CODING MEANS "l>[<$_<91+2^9-@_ 91+2^7-@l>]"{p}"@3

1

Groovy 79 byte

m=" MEANS";for(;;)print"EASIER COMMUNICATION$m FASTER CODING$m FEWER CODERS$m "

Menggunakan interpolasi string groovy.


1

PowerShell , 100 97 byte

for(){"EASIER COMMUNICATION","FASTER CODING","FEWER CODERS"|%{Write-Host -NoNewLine "$_ MEANS "}}

Cobalah online!


Jawaban yang lebih lama:

PowerShell , 100 byte

while(1){"EASIER COMMUNICATION","FASTER CODING","FEWER CODERS"|%{Write-Host -NoNewLine "$_ MEANS "}}

Cobalah online!

PowerShell sedikit rumit untuk ini karena cara paling bermartabat untuk menghasilkan konsol juga memasukkan baris baru. Write-Hostdiperlukan karena ini. Namun, itu masih menunjukkan bagaimana pipelining dapat mempersingkat jejak kode.

Anda perlu menghentikan eksekusi setelah waktu yang singkat karena itu tidak akan kembali karena itu adalah loop tak terbatas.

Sunting: dicukur 3 byte dengan mengubah whileloop ke forloop.

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.