Keluarkan posisi pertama dalam program Anda untuk setiap karakter input


43

Tantangan

Tulis program / fungsi pyang tidak kosong yang, diberi string input yang tidak kosong s, menampilkan posisi kemunculan pertama setiap karakter sdalam kode sumber p.

Misalnya, jika program Anda

main() { cout << magic << cin }
^0   ^5   ^10  ^15  ^20  ^25

dan menerima input abcd{, hasilnya seharusnya

[1, x, 9, x, 7] (0-based)        [2, x, 10, x, 8] (1-based)

Di sini, xmewakili setiap output yang tidak output berlaku untuk posisi karakter (misalnya, angka negatif, 0jika Anda menggunakan pengindeksan 1 berbasis, NaN, Inf, string potato, sejumlah besar dari panjang program anda, dll).

Batasan

Membaca kode sumber tidak diperbolehkan (seperti pada quine yang tepat). Penggunaan komentar diperbolehkan, tetapi dihitung untuk skor Anda.

Input dan output dapat dilakukan dalam format yang masuk akal, tetapi harus tidak ambigu (hanya pembatas tambahan, tidak ada randaliran, dan mengklaim bahwa jawabannya ada di suatu tempat di sana), konsisten (misalnya, xdari atas harus selalu bernilai sama) dan manusia dapat dibaca ; misalnya, string atau array karakter. Anda dapat mengasumsikan bahwa input adalah string (atau larik) karakter ASCII yang dapat dicetak; tidak perlu menangani seluruh set Unicode.


Halaman kode khusus atau ascii yang tidak dapat dicetak dalam kode Anda?

Jika bahasa Anda menggunakan halaman kode khusus (Jelly, APL, dll), Anda harus memperhitungkannya (sehingga program €æÆharus menampilkan [1, x, 2]input €%æ). Menggunakan hanya karakter non-ASCII untuk menghasilkan -1selalu (karena input hanya ASCII) bukan solusi yang valid. Anda dapat berasumsi bahwa program Anda menerima codepage kustom Anda, yaitu, jika program Anda memiliki metode konversi karakter Ake integer 65(pengkodean ASCII), Anda dapat berasumsi bahwa itu sekarang mengkonversi karakter ke-65 dalam codepage Anda 65.


Terinspirasi pada tantangan berikut: Kesadaran Posisi


Apakah kapitalisasi itu penting?
Kritixi Lithos

@KritixiLithos secara default, ya .
Martin Ender

@ KritixiLithos Memang benar.
Sanchises

Jika program saya hanya menggunakan indeks 0 hingga 9 , apakah saya memerlukan separator atau dapatkah saya output, misalnya 01030708070,?
Dennis

@ Dennis Tidak, kamu tidak. Tidak ambigu, konsisten, dan dapat dibaca manusia. Membutuhkan pemisah tidak akan menambah sesuatu yang menarik untuk tantangan, jadi tentu saja penyalahgunaan jumlah byte rendah Anda. ;)
Sanchises

Jawaban:


24

Python2, 55 Bytes

a=" )dfi(+m,nprut.';";print map(('a="'+a).find,input())

Mulai dengan string yang berisi semua karakter yang digunakan dalam kode, dan kemudian cari indeksnya


5
Saya tidak melihat bagaimana ini adalah jawaban yang membosankan. Saya pikir menggunakan quine standar jauh lebih menarik daripada ini. :)
Martin Ender

Karena ini adalah Python 2, bukankah ini akan memecah sebagian besar input ?. Jika rusak, Anda harus menggunakannya raw_input.
TidB

@TidB hmm, saya kira tidak? masukan apa yang ada dalam pikiran Anda?
Rod

@Rod Nevermind, aku hanya sedikit bodoh. Ini akan selalu berfungsi saat Anda memasukkan iterable. Saya konyol.
TidB

12

Bahasa , 56.623 byte

Di bawah ini adalah hexdump dari 256 byte pertama. Byte yang tersisa dapat dipilih secara sewenang-wenang.

0000000: 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f  ................
0000010: 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f  ................
0000020: 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f   !"#$%&'()*+,-./
0000030: 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f  0123456789:;<=>?
0000040: 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f  @ABCDEFGHIJKLMNO
0000050: 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f  PQRSTUVWXYZ[\]^_
0000060: 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f  `abcdefghijklmno
0000070: 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f  pqrstuvwxyz{|}~.
0000080: 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f  ................
0000090: 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f  ................
00000a0: a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af  ................
00000b0: b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb bc bd be bf  ................
00000c0: c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf  ................
00000d0: d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 da db dc dd de df  ................
00000e0: e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef  ................
00000f0: f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 fa fb fc fd fe ff  ................

Output dalam byte, seperti kebiasaan untuk brainfuck et al.

Bagaimana itu bekerja

Ini adalah program kucing sederhana, khususnya ,[.,].

Kode sumber berisi semua nilai 256 byte secara berurutan, sehingga setiap indeks byte di dalamnya cocok dengan nilainya.


4
Hmmm saya pikir bahasa adalah satu-satunya bahasa di mana orang dikalahkan oleh tiga urutan besarnya ...
Sanchises

2
Bahasa juga merupakan satu-satunya bahasa yang terus-menerus menemukan cara curang yang bahkan tidak akan kompetitif di bahasa lain. : P
Dennis

Tidak akan +[,.]menghasilkan skor yang jauh lebih baik?
Sanchises

@Sanchises Itu akan menghemat sekitar 12.000 byte, tetapi juga akan mencetak byte nol tambahan di akhir.
Dennis

2
Yah, saya kira byte nol ada di input (meskipun fungsinya adalah untuk mengakhiri string), dan akan berada pada posisi ke-0 dalam program Anda ...;)
Sanchises

10

Bahasa , 1.22e7 byte

Terdiri dari 12263215 NULbyte, (Hex 0x00) .

Menghasilkan a NULuntuk setiap karakter yang tidak muncul di sumber.

Ruse-nya adalah bahwa input tidak akan pernah mengandung a NUL, jadi kami selalu menampilkan jumlah NULs yang ada karakter dalam input.

Ini berarti program Brainfuck berikut

,[[-].,]

Dan dengan gangguan ...

,[[-].,]
,[    ,]    #Basic Input loop.
  [-]       #Zero out the cell.
     .      #Print it (A NUL).

Ini hanya menunjukkan kekuatan Lenguage sebagai bahasa golf. Takut itu.


2
Tipuan yang cerdik, Anda hampir menang ... Apakah Anda mencoba sebaliknya juga, yaitu 0x00 byte dan 1-indexing?
Sanchises

Saya ingin sekali, tetapi Brainfuck / Lenguage (Atau setidaknya, penerjemah yang saya gunakan) tidak dapat membedakan antara EOF dan 0x00, Jadi saya tidak dapat benar-benar menjawab tantangan.
ATaco

Brainfuck et al. biasanya diizinkan untuk mencetak bilangan bulat sebagai byte, yaitu, Anda akan mencetak SOH untuk 1, NUL untuk 0.
Dennis

@Sanchises Bisakah Anda mengonfirmasi bahwa yang terjadi di sini?
Dennis

1
Bukankah ,[>.,]lebih pendek?
Jo King

8

Jelly , 10 9 byte

“ṾiЀƓv”v

Cobalah online!

Bagaimana itu bekerja

“ṾiЀƓv”v  Main link. No arguments.

“ṾiЀƓv”   Set the left argument and the return value to s := 'ṾiЀƓv'.
        v  Execute the string s as a monadic Jelly program with argument s.

 Ṿ         Uneval; yield a string representation of s, i.e., r := '“ṾiЀƓv”'.
     Ɠ     Read one line from STDIN and evaluate it like Python would.
  iЀ      Find the index of each character in the input in r.
      v    Eval the list of indices as a monadic Jelly program with argument s.
           Why?
             This is the shortest way to add the character 'v' to the string s,
             meaning that we can use r without having to append anything.
           What?
             The v atom vectorizes at depth 1 for its left argument, meaning that
             it acts on arrays of numbers and/or characters. When fed an array of
             integers, it first converts them to strings, then concatenates the
             strings and evaluates them as a Jelly program. For example, the array
             [1, 2, 3] gets cast to the string '123', then evaluates, yielding 123.
             Something slightly different happens if the array starts with a 0. For
             example, the array [0, 1, 2] gets cast to '012' just as before, but
             Jelly views '0' and '12' as two separate tokens; numeric literals
             cannot start with a 0. Since the Jelly program is monadic, the first
             token – '0' – sets the return value to 0. Since the second token –
             '12' – is also a niladic link, the previous return value is printed
             before changing the return value to 12. Then, the program finishes
             and the last return value is printed implicitly.

8

pbrain, 402 356 340 338 329 byte

[(:<>)+,-.](>>>>>>)+([-]<<[->+>+<<]>>[-<<+>>]>>[-<+<+>>]<[->+<]<[-<->]<)+([-]+++++++[>+++++++++++++<-]>)+([-]+++++[>++++++++<-]>)+(-:<+++[->++++++<]>)+(-:++)+(-:++)+(----:+)+(-:++)+(-:+)+(-:+)+(-:+)+([-]++:++)+([>[->+>+<<]>>[-<<+>>]<:>>+:[[-]>+<]>-[<<<<[-.>]>>>>>>+>>>>>]<<[-]<<+<-]>>>)[-]>>>>>>>,[<<<<<<++<+++++++++++++:>>>>>>,]

Fiuh, @KritixiLithos dan saya sudah mengerjakan ini selama 4 hari sekarang.

Mencetak 0x00jika input char tidak dalam program, indeks char (berbasis 1) di hex sebaliknya. Cobalah online!

Penjelasan:

[(:<>)+,-.]
All chars listed here; like other submissions 
(>>>>>>)
@KritixiLithos added this part; I don't know what it does but saves the program
+([-]<<[->+>+<<]>>[-<<+>>]>>[-<+<+>>]<[->+<]<[-<->]<)
Comparison ;calculates z=x!=y and puts it in between x and y
Start; X _ _ _ Y
           ^
End;   X Z _ _ Y
         ^
+([-]+++++++[>+++++++++++++<-]>)
Function to add 91 to the tape
+([-]+++++[>++++++++<-]>)
Function to add 40 to the tape
+(-:<+++[->++++++<]>)
Function to add 58 to the tape
+(-:++)
Function to add 60 to the tape
+(-:++)
Function to add 62 to the tape
+(----:+)
Function to add 41 to the tape
+(-:++)
Function to add 43 to the tape
+(-:+)
Function to add 44 to the tape
+(-:+)
Function to add 45 to the tape
+(-:+)
Function to add 46 to the tape
+([-]++:++)
Function to add 93 to the tape
+([>[->+>+<<]>>[-<<+>>]<:>>+:[[-]>+<]>-[<‌​<<<[-.>]>>>>>>+>>>>>]<<[-]<<+<-]>>>)

Fungsi terakhir ini adalah loop. Itu loop melalui karakter yang dipilih [(:<>)+,-.]secara berurutan dan membandingkan input dengan karakter. Sekarang saya akan memberikan penjelasan yang lebih dalam tentang cara kerja loop ini.

12-n n+2 _ n+2: _ _ _ i _ _ _ _ _ _;  n=loop counter
                  ^                ;  i=input

Tumpukan terlihat seperti itu dalam satu lingkaran. Loop akan berjalan hingga 12-nis 0. Kemudian kita memiliki penghitungnya n+2. Penghitung ini juga merupakan nomor fungsi untuk masing-masing karakter yang dipilih. Jadi kapan n=0, n+2akan sesuai dengan karakter pertama, yaitu [. >[->+>+<<]>>[-<<+>>]<:tidak hanya itu, itu mengubah counter ke karakter.

Setelah pointer berada di mana tanda sisipan berada, kita akan membandingkan karakter yang dihasilkan dari variabel penghitung dengan input sambil mempertahankannya.

12-n n+2 _ n+2: Z _ _ i _ _ _ _ _ _;  n=loop counter
                ^                  ;  i=input

Zadalah 0ketika karakter sama dengan input, atau bilangan bulat bukan nol lainnya.

Sekarang kita datang dengan pernyataan if untuk memeriksa kesetaraan ini.

[[-]>+<]

Jika Ztidak nol, yaitu karakter dan input tidak sama, kami menambah tempat memori berikutnya.

Setelah kita keluar dari pernyataan-if ini, kita mengurangi tempat memori berikutnya. Sekarang tempat memori ini berisi !Z. Akhirnya menggunakan ini, kami mengeluarkan indeks karakter jika cocok dengan input dan kemudian keluar dari loop secara paksa. Selain itu, kami melanjutkan dengan loop sampai selesai atau ditemukan kecocokan.

[-]>>>>>>>
Clears first byte; goes to position to start program
,[<<<<<<++<+++++++++++++:>>>>>>,]
Loops inputs


6

Javascript, 34 byte

f=a=>a.map(v=>('f='+f).indexOf(v))

Dibutuhkan input sebagai array string, xadalah -1(pengindeksan berbasis 0).


Diizinkan, karena metode itu juga dapat diterima untuk quines. Itu tidak membuka file sumbernya dan membacanya atau menggunakan variabel yang diinisialisasi ke sumber.
mbomb007

1
@ mbomb007 Saya tidak bisa berbicara untuk semua mesin JavaScript tetapi di Firefox Function.toString bekerja dengan membaca sumbernya. Pada satu titik itu akan crash dalam membangun debug jika sumber tidak ada lagi ketika mencoba membacanya. (Saya belum mencobanya baru-baru ini karena debug builds sangat crashy secara umum.)
Neil

Saya tidak berpikir itu berbeda dari melakukan s='s=%s;print s%%s';print s%sdengan Python. Itu tidak termasuk f=, jadi tidak apa
mbomb007

1
Anda tidak dapat benar-benar melakukannya, karena input aseharusnya berupa string. Tidak ada mapfungsi untuk string.
manonthemat

@manonthemat "Anda dapat mengasumsikan bahwa input adalah string (atau array)"
LarsW

5

C, 153 152 143 byte

char s[99],p[]="odeflnrti%()*+-0;<={}\\";c;f(char*i){sprintf(s,"char s[99],p[]=\"%s",p);for(c=0;c<strlen(i);)printf("%d ",strchr(s,i[c++])-s);}

Cobalah online!


5

Ruby, 41 88 86 71 69 67 61 56 byte

a='p$<.chrs{| #index};"';$<.chars{|c|p"a='#{a}".index c}

Thx Lynn karena membunuh 6 byte


1
a='p$<.chrsm{| #index};"';p$<.chars.map{|c|"a='#{a}".index c}harus bekerja juga, mengambil masukan dari STDIN.
Lynn

4

> <> (Ikan) 70 byte

 #.0+4*a5;!?l|!?f4*b+l1--naolc3*1+0.01?!|~ed+0.0+2e-{:;!?+1:i-1:r}+2:"

Mungkin yang terlama> <> 1 liner yang pernah saya buat.

Ini akan mencetak output untuk setiap karakter yang ditemukan pada baris terpisah (0 diindeks).

Karakter yang tidak ditemukan akan selalu mencetak panjang kode +1 (saya bisa mengubahnya jika dianggap tidak oke dalam keadaan saat ini) sehingga dalam kasus ini 71 akan selalu menjadi karakter "Tidak ditemukan".

Saya akan menjalankan penjelasan setelah saya mendapatkan waktu.

Beberapa kasus uji;

## K = 1 \ n1 \ n71

# "# = 1 \ n69 \ n1

Cobalah online

> <> bahasa


Saya pikir 71 baik-baik saja sebagai keluaran karena tidak ditemukan. Ini konsisten, tidak ambigu dan dapat dibaca manusia, yang saya pikir lebih penting daripada menjadi "... output apa pun yang bukan bilangan bulat positif". Saya memperluas aturan untuk mencerminkan keputusan ini.
Sanchises

3

Perl 6 , 50 52 byte

{(('R~.index$_) for}\\'R~'{((\'').index($_) for $_)}

Terjemahan dari solusi Ruby GB dan solusi Rod's Python .

Lambda yang memasukkan daftar karakter dan menampilkan daftar indeks berbasis nol ( Niluntuk karakter yang tidak ada).

EDIT: Memperbaiki kesalahan - diperlukan penambahan 2 byte :(


3

Clojure, 43 56 48 byte

Sunting: Sial saya lupa 2 ! Meningkat dari 43 menjadi 56.

Sunting 2: Memperbarui kode sampel di bawah teks ini, memperbarui jumlah byte yang tidak termasuk (def f ...) tetapi hanya bagian hash-map.

{\{ 0\\   1\  3\0   4\1 10\3 14\4 20\2 34 \} 43}

Peta-hash hanya terdiri dari karakter 01234{\\}, dan menyandikan lokasi mereka. Dalam Clojure hash-maps dapat digunakan fungsi, seperti yang ditunjukkan dalam contoh lengkap ini ( fbisa diganti dengan definisi peta hash):

; Keeping track of the zero-based index:
;      00000000001111111111222222222233333333334444444444
;      01234567890123456789012345678901234567890123456789
(def f {\{ 0\\   1\  3\0   4\1 10\3 14\4 20\2 34 \} 43})

(map f "0123456789{} \\abcdef") ; (4 10 34 14 20 nil nil nil nil nil 0 43 3 1 nil nil nil nil nil nil)
(apply str (keys f))            ; " 01234{\\}"

Saya kira ini penting :)



2

Pyth, 11 byte

xL_+N"N+_Lx

Sebuah program yang mengambil input dari a "quoted string", dengan tanda kutip apa pun dalam string lolos dengan yang sebelumnya \, dan mencetak daftar nilai-nilai yang diindeks nol dengan -1untuk karakter yang tidak di sumber.

Cobalah online!

Bagaimana itu bekerja

xL_+N"N+_Lx    Program. Input: Q
xL_+N"N+_Lx"Q  Implicit quote closure and implicit input
     "N+_Lx"   Yield the string "N+_Lx"
   +N          Prepend a quote
  _            Reverse
 L          Q  Map over Q:
x               Yield the index of the character in the string
               Implicitly print

2

05AB1E , 19 byte

"'ìsvDyk,"'"ìsvDyk,

Cobalah online!

Ini menghasilkan -1 menggantikan karakter yang hilang.


Luis Mendo memposting ini (sedikit dimodifikasi) pada Golf Anda quine for good good! , menambahkan "s" dan "k" ke quine itu menghasilkan jawaban ini juga. Namun, saya tidak dapat mengambil kredit untuk sepele modifikasi ... Luis, Anda dapat mengirim pesan kepada saya jika Anda ingin memposting ulang ini dan saya hanya akan menghapusnya. Jika Anda ingin melihat kemajuan saya sebelum menemukan pertanyaan itu, lihat pengeditan. Yah ... Itu benar- benar seperti miliknya pada satu titik.


@Sanchises bekerja untuk saya!
Magic Octopus Mm

Keren, keren, keren!
Sanchises

@ MagicOctopusUrn Bagus !!
Luis Mendo

2

SmileBASIC, 128 96 88 86 byte

?R<3+CD,4LINPUT(S$)WHILE""<S$?INSTR("?R<3+CD,4LINPUT(S$)WHILE"+CHR$(34),SHIFT(S$))WEND

Sebuah hal penting untuk menyadari adalah bahwa ini bukan benar-benar tantangan Quine. Anda hanya perlu kode sumber hingga karakter unik terakhir .

Saya menempatkan setidaknya 1 karakter di awal kode: ?R<3+CD,4LINPUT(S$)WHILE"jadi saya hanya perlu menyimpan salinan program hingga tanda kutip pertama.


1

Python, 90 88 byte

a,b,d=" ()+.7:[]efilmnor","a,b,d=\"",lambda e:[[b.find(d),a.find(d)+7][d in a]for d in e]

Kasus cobaan:

print(d("a,b(]q"))
#[0, 1, 2, 8, 15, -1]

1

Ditumpuk , tidak bersaing, 36 byte

Ketika saya mengatakan bahasa ini masih dalam pengembangan, saya bersungguh-sungguh. Ternyata, promptdigunakan untuk mengonsumsi seluruh tumpukan. Inilah sebabnya saya tidak dapat memiliki hal-hal yang baik. Coba di sini!

[tostr ':!' + prompt CS index out]:!

Ini adalah kerangka kerja standar quine. Pada dasarnya, :duplikat fungsi [...]pada stack, yang kemudian dieksekusi dengan !. Kemudian, bagian dalam [...]dieksekusi dengan fungsi pada stack. Ini melemparkannya ke string, menambahkan :!(program itu sendiri), kemudian mengambil input string prompt. CSmengubahnya menjadi string karakter. String karakter sedikit berbeda dari string biasa karena memiliki operator yang melakukan vektorisasi. Dalam hal ini, melakukan indexvektorisasi pada input, menghasilkan setiap indeks string input dalam program, akhirnya dimasukkan out.

Untuk input Hello, World!, ini memberi:

(-1 27 -1 -1 2 -1 6 -1 2 5 -1 26 9)

Saya mencoba menggunakan yang tanpa quine (yaitu menyandikan string karakter yang muncul di sumber Anda), tetapi hanya ada satu jenis tanda kutip di Stacked, yaitu ', sehingga akan lebih lama untuk melakukan jenis solusi itu.


1

Sekam , 12 byte

m€`:'""m€`:'

Cobalah online!

Penjelasan

Penjelasan digunakan ¨untuk membatasi string dan 'untuk membatasi karakter:

m€`:'""m€`:'  -- implicit input, for example: ¨m"a1`¨
      "m€`:'  -- string literal: ¨m€`:'¨
  `:'"        -- append character '"': ¨m€`:'"¨
m             -- map function over each character (example with 'a'):
 €            -- | index of first occurrence (1-indexed): 0
              -- : [1,6,0,0,3]

1

Java 8, 172 122 byte

a->{/*.indexOf(c)+\" ;}orh:Systmup*/for(char c:a)System.out.print("a->{/*.indexOf(c)+\\\" ;}orh:Systmup".indexOf(c)+" ");}

Diindeks 0, dan diberikan -1untuk karakter yang bukan bagian dari kode sumber.

Penjelasan:

Cobalah online.

a->{                         // Method with character-array parameter and no return-type
  /*.indexOf(c)+\" ;}orh:Systmup*/
                             //  Comment containing the remaining characters of the code
  for(char c:a)              //  Loop over the input-array
    System.out.print(        //   Print:
      "a->{/*.indexOf(c)+\\\" ;}orh:Systmup"
                             //    String containing all the characters used in the code
      .indexOf(c)+" ");}     //    Print the index of the char, plus a space as delimiter

1

J , 31 22 byte

11|1+i.~&'11|1+i.~&'''

Cobalah online!

1-diindeks, 0 untuk karakter yang tidak ada dalam kode. ''singkatan dari satu kutipan. Temukan setiap karakter dalam string 11|1+i.~&', tambahkan 1, modulo 11.



1

Perl 5 dengan-pl , 43 byte

Menggunakan input yang dipisahkan baris baru dan mencetak -1untuk karakter yang tidak muncul dalam program.

$s=q{$_=index"\$s=q{$s};eval\$s",$_};eval$s

Cobalah online!


@Sanchises Tetap sekarang, maaf tentang itu. Jelas tidak membaca dengan benar!
Dom Hastings

Tidak masalah. Terima kasih telah membawa kehidupan baru ke dalam tantangan ini!
Sanchises

1

Stax , 19 byte

"'sym[]I+"'"s+ym[]I

Jalankan dan debug itu

Menghasilkan indeks berbasis 0, satu karakter per baris. Ternyata ini lebih pendek daripada memodifikasi "34bL"34bLquine yang saya tulis sebelumnya.

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.