Bantu PPCG Claus Memberikan Hadiahnya
Gambaran
PPCG Claus terlambat mengantarkan hadiahnya karena saat ini kami memiliki begitu banyak anak kecil yang aneh di luar sana. Ini membuat PPCG Claus jauh lebih sulit untuk mendapatkan semua hadiah ke tempat yang benar. Tantangan Anda adalah membantunya mengembalikan hadiahnya dengan benar.
Kompleksitas
Diberi daftar nama depan berhuruf besar yang mewakili anak-anak yang seharusnya ia kirimi dan daftar hadiah yang diwakili oleh angka-angka, Anda harus mencari cara untuk mendistribusikan hadiah di antara anak-anak tersebut. Tentu saja ada tangkapan ....
Saat ini anak-anak semakin pilih-pilih, jika anak itu adalah orang yang aneh (inisial pertama adalah kode ASCII ganjil) ia menginginkan hadiah yang aneh! Jika dia orang yang genap (inisial pertama adalah kode ASCII genap) dia jelas harus diberi genap genap! Namun, setiap anak yang dapat dibagi 3, adalah anak yang nakal, nakal, sehingga PPCG Claus harus sepenuhnya mengabaikan mereka untuk membuat mereka berperilaku tahun depan. Untuk menganggap rutenya sukses, ia harus memberikan semua hadiah kepada semua anak yang pantas mendapatkannya dan tidak boleh memberi terlalu banyak hadiah kepada satu anak. Jika ada anak yang mendapat 3+ lebih banyak hadiah dari teman-temannya, ia berisiko menjadi anak yang nakal tahun depan, dan itu tidak benar! Juga, jika ada anak yang baik menerima hadiah ketika anak lain yang baik tidak, itu juga akan mengubah anak itu jahat.
Contoh
Anak-anak adalah sebagai berikut:
Kids = ["Amy", "Betty", "Clyde", "Dave", "Francine"] = [A,B,C,D,F] = [65,66,67,68,70]
- Betty adalah kutukan kemanusiaan, jelas bersekongkol dengan nomor 3.
- Amy dan Clyde telah menjadi orang aneh sejak lahir dan tidak suka menerima hadiah.
- Dave dan Francine normal, bahkan, anak-anak; mereka seharusnya hanya menerima hadiah!
Hadiahnya adalah sebagai berikut:
Presents = [1,2,3,4,5,6,7,8,9,10,11,12,13,14]
Satu kemungkinan keluaran adalah:
[
['Amy',[1,3,5]],
['Betty',[]],
['Clyde',[7,9,11,13]],
['Dave',[2,4,6,8]],
['Francine',[10,12,14]]
]
Skenario Pengecualian
Namun, hanya karena PPCG Claus siap dan mau, tidak berarti PPCG Claus bisa. Berikut daftar skenario pengecualian di mana Anda harus menyampaikan kabar buruk ke PPCG Claus dengan pesan:
PPCGmas is cancelled!
Skenario berikut akan mengakibatkan Natal dibatalkan:
- Tidak ada anak.
[],[1,2,3]
- Wellp, mereka ded.
- Tidak ada anak yang baik.
["Betty"],[1,2,3]
- Serius, sekrup Betty.
- Tidak ada hadiah, atau hadiah kurang dari anak-anak yang baik.
["Amy","Charles"],[]
- Satu atau lebih tidak akan menerima hadiah.["Amy","Charles"],[1]
- Satu atau lebih tidak akan menerima hadiah.
- Tidak ada hadiah aneh / genap untuk memuaskan semua anak yang baik.
["Amy","Dave"],[2,4,6]
- Amy kacau.
Berikut daftar skenario yang seharusnya tidak memengaruhi PPCGmas:
- Hadiah Sisa (Semua anak harus menerima hadiah dalam jumlah maksimal).
["Amy","Dave"],[2,4,6,8,10,12,14,7,9] = [["Amy",[7,9]],["Dave",[2,4,6,8]]]
Aturan Utama Diulang
- Anak yang baik bisa genap atau ganjil, berdasarkan inisial pertama mereka.
- Anak-anak yang buruk memiliki inisial pertama yang sepenuhnya dapat dibagi oleh 3.
- Semua anak yang baik harus menerima setidaknya satu hadiah.
- Tidak ada anak yang baik yang menerima lebih dari 2 hadiah lebih dari anak baik lainnya.
- Jika ada sisa hadiah Anda harus mendistribusikannya secara maksimal, tanpa melanggar 4.
- Anak-anak yang nakal tidak boleh menerima hadiah sama sekali.
- Jika ada dari ini yang dilanggar, Anda harus mengeluarkan
PPCGmas is cancelled!
, tepatnya.
Persyaratan Format I / O
- Input pertama harus berupa array / list / string nama lengkap yang dibatasi koma, bukan hanya inisial pertama.
- Input kedua harus berupa string array / daftar / dibatasi koma dari bilangan bulat positif.
- Keluarannya bisa berupa denotasi bagaimana Anda mendistribusikan hadiah yang masuk akal; atau
PPCGmas is Cancelled!
.
Kriteria Kemenangan: kode-golf
TL; DR: Betty brengsek, jangan bersaing.
sumber
3
? EDIT : Jika seseorang harus "sekrup Betty", mengapa dia dalam tantangan sama sekali?Jawaban:
APL, 171 byte
Ini mengambil hadiah sebagai argumen kiri, anak-anak sebagai argumen kanan, dan mengembalikan matriks di mana kolom pertama berisi nama-nama anak-anak dan kolom kedua berisi hadiah yang mereka dapatkan.
Testcases:
Versi tidak dikolomasikan di sini.
sumber
JavaScript (ES6),
525492454453 byte-71 byte terima kasih kepada @Guedes -1 bit berkat @Jake Cobb
Cobalah online!
Versi non-golf
Bisa jadi saya lebih golf. Saya baru saja melakukan terjemahan litteral dari versi non-golf.
Ini sekarang lebih pendek dari jumlah CharCode yang menyusun "santa" (115 + 97 + 110 + 116 + 97 = 535). Yeay
sumber
C[0]
bukannyaC.charCodeAt(0)
menghemat 11 byte. Juga, ketika sebuah properti berulang kali Anda dapat menyimpan namanyaL='length'
, dan menggunakannyai[L]
sebagai gantinyai.length
.P(["Amy", "Betty", "Clyde"],[1,2,3,4,5,6,7,8,9,10,11,12,13,14]);
Python 2,
334355354 byteKehilangan 21 byte untuk menangani kasus anak-anak yang hanya-genap atau hanya-aneh.
Disimpan 1 byte berkat @TuukkaX.
sumber
ord('A')%3==0
adalahFalse
tetapi1-ord('A')%3
adalah-1
.%3<1
harus bekerja.Javascript (ES6),
218216 BytesOutput (jika bukan string kesalahan) adalah objek yang kuncinya adalah nama anak-anak; nilainya adalah susunan hadiah yang diterima anak.
Menyimpan dua byte ketika saya menyadari bahwa saya memiliki sepasang kurung yang berlebihan.
Versi tidak disatukan:
sumber