Daftar kemungkinan tahun kelahiran manusia yang hidup


40

Tantangan

Keluarkan daftar tahun yang dimulai dengan tahun berjalan dan berakhir 120 tahun yang lalu. Tahun kelahiran setiap manusia yang hidup akan dimasukkan dalam daftar ini.

Detail

Daftar harus dalam urutan menurun.

Setiap fungsi bawaan untuk memanipulasi array dan / atau daftar diperbolehkan.

Kode terpendek dalam byte menang.

Saat dijalankan tahun ini, hasilnya akan menjadi

2016, 2015, ..., 1897, 1896

Ketika dijalankan tahun depan hasilnya akan seperti itu

2017, 2016, ..., 1898, 1897

Dll

Memperbarui

  • Beberapa orang bertanya tentang format daftar. Seperti dugaan kebanyakan orang, itu tidak masalah. Masukkan pemisah mana pun di antara angka-angka. Secara intuitif sebagian besar memasukkan koma atau spasi atau keduanya, baris baru atau output array.
  • Manusia super semu seperti Jeanne Calment adalah pengecualian dari aturan yang disebutkan dalam pertanyaan saya.

7
Saya merekomendasikan kotak pasir untuk mendapatkan umpan balik sebelum memposting tantangan (tidak hanya untuk tantangan pertama Anda - kebanyakan dari kita menggunakannya untuk setiap tantangan).
trichoplax

3
Saya tidak melihat ada yang salah dengan tantangan ini. Satu hal yang mungkin layak ditentukan adalah apakah output harus selalu dimulai dengan 2016, atau dengan tahun di mana ia dijalankan (akan mulai dengan 2017 jika dijalankan tahun depan?). Ini akan memengaruhi apakah ini merupakan tantangan keluaran tetap, atau perlu mengakses tanggal saat ini.
trichoplax

19
Jeanne Louise Calment hidup 122 tahun.
Zenadix

10
Lad, itu terlalu dini untuk menerima.
Addison Crump

6
Apakah tantangannya: "Cetak semua angka dari y- 120 hingga y" atau "cetak semua tahun kelahiran orang yang hidup"? Karena jika seseorang yang lahir pada tahun 1896 masih hidup hari ini, itu tidak berarti bahwa masih ada orang-orang dari tahun 1898 sekitar.
CompuChip

Jawaban:


19

Pyke, 6 byte

wC7m-

Coba di sini!

w     - 121
   m- - for i in range(^):
 C7   -  current_year-i

(Setelah w, codepoint untuk 153 hadir tetapi tidak dapat dicetak)


1
Wow, itu tanda centang cepat. Mungkin menunggu jawaban Jelly?
Adám

Sementara saya setuju itu adalah tanda centang cepat, saya ragu bahkan Jelly dapat melakukannya dalam 5
Biru

Mengapa Anda memiliki variabel untuk 121? Hanya karena itu adalah angka kuadrat? Tapi dilakukan dengan baik!
Denker

3
The wbenar-benar memiliki byte tak patut ditulis setelah yang membuatnya 121
Biru

1
@ LeakyNun dapat dikonfigurasi, apa pun default untuk server yang sedang berjalan. Pada pyke.catbus, saya mengaturnya ke Windows-1252
Biru

11

Pyth, 11 9 8 byte

-L.d3C\y

Bekerja dengan memetakan rentang [0...120]dan mengurangi setiap angka dari tahun berjalan. Rentang ini dibangun secara implisit dengan menggunakan 121sebagai argumen peta. Untuk menghindari spasi putih yang memisahkan antara .d3dan 121kami mendapatkan nomor ini dengan mengonversikannya ymenjadi codepoint.
Terima kasih kepada @FryAmTheEggman untuk datang dengan pendekatan ini!

Coba di sini!

Solusi 9 byte lama:

_>121S.d3

Coba di sini!

Buat rentang [1...<current year>]dan hanya ambil 121 elemen terakhir dari itu.


1
Anda harus membalik daftar sehingga dimulai dengan tahun saat ini
Christiaan Westerbeek

1
-L...menghemat beberapa byte.
Jakube

1
@ChristiaanWesterbeek Kehilangan bagian itu, diperbaiki. Terima kasih sudah melihat!
Denker

@Jakube Menggunakan pendekatan yang berbeda sekarang, tetapi terima kasih atas pengingat bahwa ini ada, tidak menggunakan Pyth banyak di terakhir kali!
Denker

1
-L.d3C\yharus bekerja untuk 8.
FryAmTheEggman

9

R, 34 byte

(format(Sys.Date(),"%Y"):0)[1:121]

Lihat di sini di penerjemah online.

Sunting Bisa dikurangi menjadi 33 byte dengan menggunakan substr.

(substr(Sys.Date(),1,4):0)[1:121]

tetapi secara teknis solusi ini hanya akan berfungsi hingga 9999-12-31.


3
Ini luar biasa. Saya tidak tahu itu bisa mengetikkan string ke angka ketika menggunakan :operator ...
Andreï Kostyrka

8

AngularJS + Lodash , 274 byte

angular.module('x',[]).controller('x',['$scope',function(x){x.x=_.range(9,new Date().getFullYear()+1).slice(-121).reverse()}])
<script src=//goo.gl/M5LvGe></script><script src=//goo.gl/opljJl></script><select ng-app=x ng-controller=x multiple><option ng-repeat="x in x">{{x}}

Keluaran

masukkan deskripsi gambar di sini


8

BASH + coreutils, 35 33 byte

x=`date +%Y`;seq $x -1 $((x-120))

2
dalam kasus Anda, kutipan tidak diperlukan: ubah: date +"%Y"kedate +%Y
Olivier Dulac

1
x=`date +%Y`;seq $x -1 $[x-120]atau seq $[x=`date +%Y`] -1 $[x-120]berfungsi juga.
Dennis

10 byte lebih pendek jika Anda memiliki OSX atau bersedia untuk menginstal jotdi Linux
Digital Trauma

7

CJam, 14 12 11 byte

Disimpan 2 byte berkat Sp3000 dan 1 byte terima kasih kepada Martin Ender

et0=121,f-p

Cobalah online!

Penjelasan

et0=         e# Push the current year
    121,     e# Push the range 0, 1, ..., 120
        f-   e# For each item in the range, subtract it from current year
          p  e# Print the array

7

HP50g RPL, 97 byte

120 'S' STO DATE ->STR 6 9 SUB OBJ-> 'Y' STO {} S WHILE 0 >= REPEAT Y S - + 'S' DECR END REVLIST

Tidak Disatukan:

120
'span' STO     @ Store the span of years to cover.
DATE           @ Get the date as number 11.082016. 
→STR           @ Convert to string "11.082016".
               @ (Number format must allow all these decimal places.)
6 9 SUB        @ "11.082016" Substring for the year.
               @       ^  ^
               @  123456789
OBJ→           @ Convert string to number.
'year' STO     @ Store as the year to start at.
{} span        @ Start empty list to collect the years.
               @ Leave loop counter on the stack.
WHILE 0 ≥      @ Loop until the counter goes negative.
REPEAT
  year span -  @ E.g. on first iteration: 2016 - 120 = 1896.
  +            @ Append the year to the list on the stack.
  'span' DECR  @ Decrement loop counter and leave on stack.
END
REVLIST        @ Put list in reverse chronological order.

Menampilkan daftar 2016 hingga 1896:

2016 hingga 1896


Jawaban yang diedit untuk mendapatkan tahun ini dari kalkulator.
Caleb Paul

6

05AB1E , 8 7 byte

Kode:

žg120Ý-

Penjelasan:

žg         # Get the current year.
  120Ý     # Create the list [0, 1, ..., 119, 120].
      -    # Substract, which leaves [year - 0, year - 1, ..., year - 120].

Menggunakan pengkodean CP-1252 . Cobalah online! .


6

PowerShell, 26 24 byte

@TimmyD versi yang disempurnakan:

0..120|%{(date).Year-$_}

Apakah:

($d=(date).year)..($d-120)

di mana dateberjalanGet-Date


1
Blargh, seharusnya dijawab sebelumnya. Itu persis versi sederhana yang saya siapkan. Kemudian pekerjaan terganggu: Versi menyenangkan DA juga akan menjadi ((date).year..0)[0..120]:; sayangnya itu tidak lebih pendek.
Joey

1
Saya merasa menarik bahwa tanggal setara dengan Get-Date ketika tanggal sebenarnya bukan alias untuk Get-Date. Saya pernah melihat ini disebut aturan "kata kerja tersirat" dan jarang didokumentasikan dalam literatur PowerShell.
Bevo

@Bevo Berguna untuk CodeGolf, tetapi sedikit berisiko untuk penggunaan lainnya. Lihat: codegolf.stackexchange.com/a/778/571 dan rantai komentar; keduanya rentan terhadap bentrokan dan sangat lambat.
TessellatingHeckler

6

Dyalog APL , 11 10 byte

120↑⌽⍳⊃⎕ts

120↑ ambil 120 elemen

dari yang terbalik

indeks sampai

elemen pertama dari

⎕TS TimeStamp dalam format [YYYY, M, D, h, m, s, t]

TryAPL online!


Versi lama:

(⊃⎕TS)-⍳120

⊃⎕TS elemen pertama [YYYY, M, D, h, m, s, t]

- minus

⍳120 [0, 1, 2, ..., 118, 119]

Membutuhkan ⎕IO←0, yang merupakan standar pada banyak sistem.

TryAPL online!


6

Vitsy + * sh + JavaScript , 33 26 21 18 byte

Vitsy tidak memiliki pencarian waktu / tanggal asli, jadi saya harus menggunakan shell dan eval untuk yang ini.

Terima kasih kepada @Caleb karena membantu saya menghilangkan 3 byte lagi!

'Y%+ etad',Dca*-HZ

'Y%+ etad'               Push the string 'date +"%Y"' to the stack.
          ,              Execute through shell. 
           Dca*-         Dupe n, push n - 120.
                H        Pop x, y, push range(x, y) to the stack.
                 Z       Output all stack as characters.

Anda tidak dapat mencoba yang ini secara online, karena ia menggunakan shell DAN eval.

Output adalah sebagai kode karakter.


Anda harus dapat memotong beberapa byte dari ini karena Anda tidak perlu tanda kutip ganda di sekitar string format tanggal (karena tidak ada spasi di dalamnya); date +%Yberfungsi dengan baik.
Caleb

@ Caleb Sempurna, terima kasih! Membuat kebutuhan untuk eval JS tidak ada juga.
Addison Crump

5

Bahasa Mathematica / Wolfram, 28 byte

Date[][[1]]-#&/@Range[0,120]

Selamat datang di PPCG!
Addison Crump

4
Selamat datang di PPCG! Anda tidak perlu menggunakan peta di sini karena pengurangan dimasukkan ke daftar secara otomatis. Dan -Range@121+1menyimpan byte dari daftar berbasis nol. Dan #&@@satu byte lebih [[1]]. Yang mengatakan, kecuali dinyatakan sebaliknya dalam tantangan, semua kiriman harus fungsi atau program penuh, dan kode ini hanyalah potongan / ekspresi. Perbaikan terpendek akan membuatnya menjadi fungsi yang tidak disebutkan namanya dengan menambahkan &.
Martin Ender

@ MartinEnder Terima kasih atas umpan baliknya! Aku seharusnya menangkap Minus karena mampu, penyimpangan mental kecil, tetapi tips lainnya sangat dihargai!
user6014

#&@@Date[]-#&/@0~Range~120&akan menghemat dua byte, tetapi kemudian membuatnya berfungsi membutuhkan menambahkan &pada akhirnya (yang saya pikir Anda butuhkan juga), sehingga total -1 byte.
numbermaniac

5

R, 47 39 byte

as.double(substr(Sys.Date(),1,4))-0:120

Jika hanya seseorang yang menemukan implementasi UTF-8 dari R dengan fungsi sistem yang sering digunakan ...

UPD: dicukur 7 (!) Byte karena plannapus , yang menyarankan sub-subtacting 0:120vektor daripada menghitung dari ake (a-120)dan 1 byte grâce à user5957401 , yang memperhatikan bahwa itu doubleakan berhasil juga numeric. Versi lama:

a=as.numeric(format(Sys.Date(),"%Y"));a:(a-120)

Mengotak-atik dan seq(a<-...,a-120)hanya dapat memperburuk situasi.
Andreï Kostyrka

menggunakan perintah type forcing as.doublebukannya as.numericakan menghemat satu byte. Demikian pula, jika alih-alih memformat tanggal, Anda memperlakukan respons tanggal sebagai string untuk menarik dan menggunakan substr(Sys.Date(),1,4)Anda menyimpan byte lain
user5957401

5

MATL , 10 byte

1&Z'0:120-

Cobalah online!

1&Z'      % Push first component of "clock" vector, which is year
0:120     % Literal vector [0, 1, 2, ..., 120]
-         % Subtract element-wise. Implicitly display


4

php, 73 66 58 42 byte

<?=implode(', ',range($j=date(Y),$j-120));

Keluaran:

2016, 2015, 2014, 2013, 2012, 2011, 2010, 2009, 2008, 2007, 2006, 2005, 2004, 2003, 2002, 2001, 2000, 1999, 1998, 1997, 1996, 1995, 1994, 1993, 1993, 1992, 1991, 1990, 1989, 1988, 1988, 1986, 1985, 1984, 1983, 1982, 1981, 1980, 1979, 1978, 1977, 1976, 1975, 1973, 1972, 1971, 1970, 1969, 1968, 1967, 1966, 1965, 1964, 1963, 1962, 1961, 1960, 1959, 1958, 1957, 1955, 1954, 1953, 1952, 1951, 1950, 1949, 1948, 1947, 1946, 1946, 1945, 1944, 1943, 1942, 1941, 1940, 1939, 1938, 1937, 1936, 1935, 1934, 1932, 1931, 1930, 1929, 1928, 1927, 1926, 1925, 1924, 1923, 1922, 1921, 1920, 1919, 1918, 1917, 1916, 1915, 1914, 1913, 1912, 1911, 1910, 1909, 1908, 1907, 1906, 1905, 1904, 1903, 1902, 1901, 1900, 1899, 1898, 1897, 1896

Jika kita tidak perlu berpisah dengan ,, maka 58 57 41 byte:

<?=implode(' ',range($j=date(Y),$j-120));

Terima kasih untuk menyisipkan nama pengguna di sini untuk menghemat 16 byte


Anda tidak benar-benar perlu berpisah ,, lihat banyak jawaban lainnya.
Addison Crump

Kelihatannya seperti itu, tapi saya akan memasukkan dua opsi sehingga saya bisa melakukan apa yang paling banyak, dan juga apa yang diminta
gabe3886

Saya sudah berhasil mendapatkan jawaban koma ke ukuran jawaban non-koma asli saya.
Sebanyak yang

Anda dapat menghapus <?phptag karena kami mengizinkan berjalan dengan -rgratis
Business Cat

2
Golf off 16 byte :<?=implode(', ',range($j=date(Y),$j-120));
insertusernamehere

4

Python 2, 64 62 54 byte

import time
n=time.gmtime()[0]
exec'print n;n-=1;'*121

@KarlKastor terima kasih untuk 8 byte!


time.gmtime().tm_yearlebih pendek 3 byte
KarlKastor

time.gmtime()[0]bahkan lebih pendek
KarlKastor

@KarlKastor bagus! Bermain dengan modul waktu seperti berjalan ke labirin setiap kali bagi saya. Begitu banyak cara untuk tersesat
ahli atlasologi

4

PostgreSQL, 57 byte

Siapa yang butuh FROM:-). Mungkin seharusnya tidak berhasil, tetapi ternyata berhasil, cobalah di sqlfiddle

select date_part('y',current_date)-generate_series(0,120)

4

Bash pada OS X, 23

jot 121 `date +%Y` - -1

Ini juga akan berfungsi di Linux jika Anda telah jotmenginstal BSD (mis sudo apt-get install athena-jot.


3

Python 2, 62 byte

import time
for n in range(121):print int(time.ctime()[-4:])-n

Dan pada 64 byte:

for n in range(121):print int(__import__("time").ctime()[-4:])-n

3

Oracle SQL 11.2, 111 byte

SELECT LISTAGG(TO_CHAR(SYSDATE,'YYYY')-LEVEL+1,', ')WITHIN GROUP(ORDER BY LEVEL)FROM DUAL CONNECT BY LEVEL<122;

1
Saya akan tergoda untuk mengatakan listagg tidak diperlukan dan hanya seperangkat baris yang dipesan
MickyT

3

Memproses, 51 42 41 byte

for(int i=0;i<121;)print(year()-i+++" ");

Tidak disatukan

for(int i = 0; i < 121;)
    print(year() - i++ + " ");

Pemrosesan hanyalah pembungkus untuk Java jika Anda tidak tahu, dan mengambil sebagian besar boilerplate, sehingga solusi yang jelas juga sangat pendek dibandingkan dengan versi Java. Juga membuka jendela untuk menggambar grafik, tetapi memiliki itu tampaknya tidak mendiskualifikasi saya :)


1
for(int i=0;i<121;)print(year()-i+++" ");
Leaky Nun

Saya suka "+++", ini terlihat sangat mencurigakan. Terima kasih untuk sarannya!
Cody

3

MATLAB, 18 byte

Dengan asumsi format output tidak masalah (selain urutan menurun), program berikut mencetak 121 tahun terakhir dimulai dengan yang sekarang.

year(date)-(0:120)

Ini membutuhkan versi MATLAB r2014a atau lebih tinggi. Versi sebelumnya tidak termasuk yearfungsi.


3

JavaScript, 55 52 50 49 byte

for(a=d=s=Date().substr(11,4);d-->s-120;)a+=" "+d

+9 byte ke alertdata (tidak perlu jika Anda menjalankan ini di konsol).

for(a=d=s=Date().substr(11,4);d-->s-120;)a+=" "+d;alert(a)

-4 byte jika pembatas tidak diperlukan.

for(a=d=s=Date().substr(11,4);d-->s-120;)a+=d

for (a = d = s = Date().substr(11, 4); d --> s - 120; )
    a += " " + d;
console.log(a);


1
The []s tampaknya tidak perlu.
Neil

@ Neil: Terima kasih. Solusi asli saya menggunakan array, tetapi saya tidak berpikir untuk menghapusnya.
Yay295

1
Anda dapat menyimpan satu byte menggunakan forbukan whileini for(a=d=s=Date().substr(11,4);d-->s-120;)a+=" "+d:!
Dom Hastings

3

C, 87 85 76 74 65 byte

main(int i,char**v){for(i=0;i<121;printf("%d,",atoi(v[1])-i++));}

Tidak Disatukan:

main(int i,char**v){
    for(i = 0; i < 121; printf("%d,", atoi(v[1])-i++));
}

Golf kode pertama saya - Pointer apa pun akan diterima dengan baik. Akan lebih baik jika saya bisa memotong sampah argc / argv, tapi saya tidak begitu mahir programmer C. Perbaikan disambut baik.

EDIT : Tahun ini diperoleh dari commandline - khusus oleh sekelompok burung minum otomatis yang terlatih.

EDIT 2 : 85 bytes Terima kasih kepada Easterly Irk (menghapus spasi di sekitar parameter fungsi arg)

EDIT 3 : 76 bytes Berkat anatolyg untuk menunjukkan yang jelas (nama parameter verbose argc / argv dihapus)

EDIT 4 : 74 byte Terima kasih kepada Yay295 (char ** v, pembatas tahun berubah)

EDIT 5 : 65 byte terima kasih kepada Yay295 dan matt (digunakan kembali variabel i, hapus variabel x, ubah sementara menjadi untuk loop, perbarui printf untuk menyertakan atoi () baca dan i ++)


1
Tidak bisakah kamu tempat? int argc, char-> int argc,char?
Rɪᴋᴇʀ

2
Ganti argcdengan c(atau lebih baik ganti int argcdengan adil int) dan argvdengan v. Juga ganti whiledengan for. Perubahan terakhir membutuhkan beberapa pengalaman dalam C (tetapi mungkin menyenangkan terlepas dari).
anatolyg

1
char*v[]-> char**vmenghemat 1 byte. Anda dapat menyimpan yang lain dengan membatasi tahun Anda dengan spasi atau koma alih-alih baris baru.
Yay295

1
Anda bisa membuatnya lebih pendek. 71 byte main (int c, char ** v) {int i = 0; sementara (i <120) printf ("% d,", atoi (v [1]) - i ++);}
Matt

2
Bahkan lebih pendek. 65 byte main(int i,char**v){for(i=0;i<121;printf("%d,",atoi(v[1])-i++));}
Matt

3

JavaScript, 60 53 48 Bytes

f=x=>x>Date().split` `[3]-121&&(alert(x),f(x-1))

Saya menggunakan solusi rekursif.


1
Anda dapat mengganti console.logdengan alert, dan menghapus yang terakhir ;.
NoOneIsHere

1
Hemat 5 byte dengan f=x=>x>Date().split" "[3]-121&&(alert(x),f(x-1)), ganti tanda kutip dengan backticks.
Shaggy

2

Perl, 33 byte

say+(gmtime)[5]-$_+1900for 0..120

Jalankan dengan -M5.010atau -E:

perl -E 'say+(gmtime)[5]-$_+1900for 0..120'

2

k, 27 byte

Output seperti yang ditentukan

1@", "/:$(`year$.z.d)-!121;

Contoh:

k)1@", "/:$(`year$.z.d)-!121;
2016, 2015, 2014, 2013, 2012, 2011, 2010, 2009, 2008, 2007, 2006, 2005, 2004, 2003, 2002, 2001, 2000, 1999, 1998, 1997, 1996, 1995, 1994, 1993, 1992, 1991, 1990, 1989, 1988, 1987, 1986, 1985, 1984, 1983, 1982, 1981, 1980, 1979, 1978, 1977, 1976, 1975, 1974, 1973, 1972, 1971, 1970, 1969, 1968, 1967, 1966, 1965, 1964, 1963, 1962, 1961, 1960, 1959, 1958, 1957, 1956, 1955, 1954, 1953, 1952, 1951, 1950, 1949, 1948, 1947, 1946, 1945, 1944, 1943, 1942, 1941, 1940, 1939, 1938, 1937, 1936, 1935, 1934, 1933, 1932, 1931, 1930, 1929, 1928, 1927, 1926, 1925, 1924, 1923, 1922, 1921, 1920, 1919, 1918, 1917, 1916, 1915, 1914, 1913, 1912, 1911, 1910, 1909, 1908, 1907, 1906, 1905, 1904, 1903, 1902, 1901, 1900, 1899, 1898, 1897, 1896

Ini dapat dipersingkat lebih dengan tidak memformat output dan hanya mengembalikan daftar bilangan bulat:

(`year$.z.d)-!121

2

jq, 46 karakter

(45 karakter kode + 1 opsi baris perintah karakter)

now|strftime("%Y")|tonumber|range(.;.-121;-1)

Contoh dijalankan:

bash-4.3$ jq -n 'now|strftime("%Y")|tonumber|range(.;.-121;-1)' | head
2016
2015
2014
2013
2012
2011
2010
2009
2008
2007

Tes online


2

Vim, 32 29 penekanan tombol

Terima kasih kepada @daniero untuk bantuan dalam menghemat beberapa penekanan tombol dan membuat hasilnya sedikit lebih rapi.

"=strftime('%Y')<Enter>pqqYp<Ctrl-x>q118@q
  • <Enter> aku s Enter
  • <Ctrl-x>adalah Ctrl+X

Penjelasan:

"                                          # Put into the register {
 =strftime('%Y')                           #   This year in YYYY form
                <Enter>                    # }
                       p                   # Paste the register
                        qq                 # Record macro q {
                          Y                #   Yank (copy) the current line
                           p               #   Paste
                            <Ctrl-x>       #   Decrment number at cursor
                                    q      # }
                                     118@q # Do macro q 118 times

Format output:

Setiap angka berada pada baris terpisah seperti di bawah ini.

2016
2015
.
.
.
1898
1897

OP jelas meminta versi bukti masa depan, jadi hanya yang kedua yang menjawab pertanyaan. Tidakkah Anda perlu memencet tombol Enter (biasanya disebut sebagai <CR>dalam konteks Vim) setelah :pu=strftime('%Y')? Anda juga dapat melewati beberapa penekanan tombol dengan menggunakan Ysalinan seluruh baris. Secara total: :pu=strftime('%Y')<CR>qqYp<Ctrl-x>q118@q- 30 penekanan tombol
daniero

Juga, Anda dapat menarik dari =register: "=strftime('%Y')<CR>pqqYp<Ctrl-x>q118@q- 29 penekanan tombol, dan itu menghilangkan baris kosong pertama
daniero

Jika Anda diizinkan untuk menggunakan shell juga maka Anda dapat menyimpan lima penekanan tombol dengan dateutilitas::.!date +\%Y<CR>qqYp<C-x>q118@q
John Gowers
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.