Diberikan daftar skor (bilangan bulat non-negatif) yang disortir dari yang terhebat hingga yang paling kecil:
[ 10, 10, 6, 6, 4, 0]
Tetapkan setiap skor peringkat integer, dimulai dengan 1 dan naik, sehingga skor yang sama memiliki peringkat yang sama (yaitu mereka diikat):
[ 1, 1, 3, 3, 5, 6 ]
Dalam kasus ikatan, peringkat "dilewati," misalnya karena skor terbesar pertama dan kedua (10 dan 10) diikat, mereka berdua memiliki peringkat 1, dan peringkat 2 "dilewati," sehingga skor terbesar ketiga ( 6) memiliki peringkat 3.
Keluarkan daftar peringkat tidak menurun yang sesuai dengan skor input.
Contohnya
In: 10 10 6 6 4 0
Out: 1 1 3 3 5 6
In: 10 9 8
Out: 1 2 3
In: 0 0 0
Out: 1 1 1
In: 16 15 15 12 11 11 10 9 9 9 8 2 2 2 0
Out: 1 2 2 4 5 5 7 8 8 8 11 12 12 12 15
Memasukkan
Asumsikan semua skor adalah antara 0 dan 1.000 inklusif, dan input tidak akan lebih dari 500 skor. Input dapat dalam format apa pun yang sesuai untuk bahasa pilihan Anda (termasuk tetapi tidak terbatas pada STDIN, argumen untuk suatu fungsi, array yang sudah disimpan dalam variabel, dll.).
Keluaran
Kembali atau toko dalam variabel memerintahkan daftar yang dihasilkan dari jajaran, atau menulis ke stdout dengan cara terbaca-manusia (misalnya 1 2 3
, [1,2,3]
, 1\n2\n3\n
, dan { 1, 2, 3 }
semua baik-baik saja, 123
tidak, karena ingin pembatas). Skor input dapat disimpan / dicetak bersama dengan peringkat output yang sesuai, tetapi itu tidak diperlukan.
Batasan
Anda dapat menggunakan perpustakaan standar apa pun yang ditawarkan bahasa Anda. Celah standar berlaku.
Kondisi menang
Ini adalah kode-golf , jadi program terkecil (dalam byte) menang. Dalam hal seri, jawaban dengan suara terbanyak menang.
Catatan
Ini didasarkan pada pertanyaan Ruby pada SO yang menghasilkan beberapa jawaban menarik, termasuk yang sangat pendek. Saya mendorong Anda untuk datang dengan solusi Anda sendiri sebelum mencari di sana.