Saya mengalami masalah ini saat mengerjakan tantangan lain yang saya buat untuk situs ini. Dalam tantangan itu saya menggunakan " Mario Kart 8 Scoring ". Jumlah poin pemain di tempat k diwakili oleh array 1-diindeks ini: [15,12,10,9,8,7,6,5,4,4,3,2,1]. Jadi posisi 1 mendapat 15 poin, posisi 2 mendapat 12 poin, dll.
Cukup mudah untuk menetapkan poin seperti ini, namun bagian yang sulit datang dengan bagaimana saya menangani ikatan. Yang saya lakukan adalah memberi setiap pemain yang mengikat rata-rata poin yang diberikan untuk setiap tempat yang mengikat. Misalnya, jika hanya 1 dan 2 terikat, maka kedua pemain mendapatkan (15 + 12) / 2 = 13,5 poin. (Catatan: Anda diizinkan untuk membulatkan ke int terdekat, sehingga 13 atau 14 keduanya juga dapat diterima.) Kemudian tempat ke-3 - 12 mendapatkan jumlah poin normal untuk posisi mereka.
Tantangan
Diberikan 12 skor integer non-negatif yang semakin diurutkan, output jumlah poin setiap pemain. Anda juga dapat menggunakan daftar poin [15,12,10,9, ...] sebagai input. Perhatikan bahwa jumlah poin yang didapat setiap pemain tidak tergantung pada nilai aktual skor, tetapi bagaimana mereka membandingkannya dengan skor lainnya.
Uji Kasus
- [21,21,15,14,12,9,6,5,4,3,2,1] => [ 14,14 , 10,9,8,7,6,5,4,3,2, 1]
- [20,15,15,15,10,9,8,7,6,5,4,3] => [15, 10,10,10 , 8,7,6,5,4,3,2, 1]
- penjelasan: (12 + 10 + 9) / 3 = 10.3333
- [1,1,1,1,1,1,1,1,1,1,1,1,1]]>> 7,7,7,7,7,7,7,7,7,7,7,7,7, 7 ]
- Penjelasan: (15 + 12 + 10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1) / 12 = 6.8333
- [20,20,20,20,10,10,10,9,8,7,6,5] => [ 12,12,12,12 , 7,7,7 , 5,4,3,2, 1]
- penjelasan: (15 + 12 + 10 + 9) / 4 = 11,5, (8 + 7 + 6) / 3 = 7
- [100,99,98,95,95,95,94,93,93,92,91,91] => [15,12,10, 8,8,8 , 6, 5,5 , 3, 2, 2 ]
- penjelasan: (9 + 8 + 7) / 3 = 8, (5 + 4) / 2 = 4,5, (2 + 1) / 2 = 1,5
sumber
ave
) kalau tidak hanya potongan (yang tidak diizinkan). Untungnya, ini menghemat 5 byte.Perl 5 , 109 +1 (-a) = 110 byte
Cobalah online!
Termasuk 17 byte ke hardcode nilai titik.
sumber
MATL ,
1210 byteDiskon 2 byte berkat @geokavel !
Input adalah vektor kolom (
;
sebagai pemisah) dari skor integer dan vektor kolom dengan titik. Output berisi hasil yang dipisahkan oleh baris baru.Cobalah online! Atau verifikasi semua kasus uji .
Penjelasan
sumber
05AB1E , 12 byte
Cobalah online!
Penjelasan
sumber
C # (.NET Core) , 154 byte
Cobalah online!
C # (.NET Core) + menggunakan Linq, 170 + 23 byte
Cobalah online!
sumber
J, 15 byte
Cobalah online!
Mengambil daftar skor (
1 2 ... 12 15
) sebagai argumen kanan dan nilai untuk skor sebagai argumen kiri. Jika ini bukan input logis, tambahkan 1 byte untuk~
-passive untuk membalikkan urutan pengambilan input.Mungkin ada beberapa hal untuk golf, yang termasuk
Penjelasan
Saya akan membagi ini menjadi beberapa fungsi.
avg_and_dupe
mengambil rata-rata daftar dan menggandakannya sebanyak panjang daftarscore
skor input (argumen kiri) diberi daftar skor (argumen kanan).avg_and_dupe
Ini berfungsi dengan baik karena diperlakukan sebagai dua garpu . Jika Anda masih menggaruk-garuk kepala Anda (saya tahu saya dulu), tanyakan dan saya bisa memberikan penjelasan yang lebih mendalam mengapa ini bisa terjadi.
skor
Jika masih membingungkan, saya juga bisa menambahkan penjelasan untuk
/.
-kunci, tapi saya pikir halaman wiki menjelaskannya dengan cukup baik.sumber
You can also take the points list [15,12,10,9,...] as input.
jika itu menghemat byte AndaPython 2 , 66 byte
-8 Bytes berkat Leaky Nun.
Cobalah online!
sumber
Jelly , 11 byte
Cobalah online!
-3 bytes berkat fireflame karena memperhatikan fitur Jelly baru: D
sumber
S÷L
dan membentuk alih-alihxL
, yang memungkinkan$
alih-alih duaµ
.Python 3 , 67 byte
Cobalah online!
Python 2 ,
10870 byteCobalah online!
sumber
Python 3 , 72 byte
Cobalah online!
sumber
Proton , 62 byte
Cobalah online!
Proton , 63 byte
Cobalah online!
sumber
Dyalog APL, 14 byte
Mengambil daftar skor sebagai argumen kiri dan daftar poin sebagai argumen benar. Tambahkan 2 byte untuk membungkusnya
()
jika dipanggil langsung dan bukan sebagai fungsi bernama.{
...}⌸
kelompokkan argumen kanan dengan kunci dalam argumen kiri dan terapkan fungsi dalam kawat gigi untuk masing-masing grup (operator utama).⊂≢⍴+/÷≢
adalah garpu di mana:+/÷≢
adalah poin rata-rata untuk grup (jumlah dibagi dengan penghitungan)≢⍴
penghitungan ulang (mereplikasi rata-rata untuk mencocokkan jumlah item dalam kelompok)⊂
kotak hasilnya (ini untuk menetralkan pencampuran hasil yang diterapkan operator utama)∊
adalah meminta dan meratakan hasil operator utama (yang merupakan vektor vektor bersarang) ke dalam daftar sederhana.TryAPL online
sumber
Haskell, 152 byte
Sangat sulit untuk mengimpor
groupBy
danon
, jadi saya harus melakukannya sendiri.Fungsi rata-rata akan dipersingkat segera.
Membutuhkan tanda tangan mungkin dapat dihindari dengan flag compiler.
sumber