Keenam anggota pemeran utama sitkom Amerika Friends semuanya setuju bahwa mereka akan dibayar gaji yang sama sepanjang seri (setelah musim 2, setidaknya). Tetapi itu tidak berarti bahwa mereka semua memiliki jumlah waktu tayang yang sama atau bahwa mereka semua berinteraksi di layar dengan jumlah yang sama.
Dalam tantangan ini, Anda akan menulis sebuah program yang dapat membantu menentukan teman mana yang benar - benar teman terbaik.
Mendirikan
Pertimbangkan untuk menonton episode atau adegan Teman dan mencatat dengan tepat siapa yang ada di layar selama setiap pemotretan kamera dan untuk berapa lama.
Kami akan menyingkat nama setiap karakter:
C
adalah untuk ChandlerJ
adalah untuk JoeyM
adalah untuk MonicaP
adalah untuk PhoebeR
adalah untuk RachelS
adalah untuk Ross
Kemudian untuk setiap bidikan kamera (atau setiap kali karakter masuk / keluar dari bidikan), kami akan mencantumkan siapa yang ada di layar. Sebagai contoh:
504 CRS
200 J
345 MP
980
2000 CJMPRS
Ini mengatakan bahwa:
- Untuk 504ms, Chandler, Rachel, dan Ross ada di layar.
- Kemudian untuk 200 ms, Joey adalah.
- Kemudian untuk 345 ms, Monica dan Phoebe berada.
- Kemudian untuk 980ms, tidak ada 6 karakter utama yang ada di layar.
- Kemudian selama 2 detik, semuanya.
(Ini bukan dari klip aktual, saya membuatnya.)
Perhatikan bahwa yang berikut ini akan setara:
504 CRS
1 J
199 J
345 MP
980
2000 CJMPRS
Untuk menganalisis kombinasi karakter mana yang memiliki waktu layar terbanyak, kami melihat semua 64 kemungkinan subset dari 6 karakter dan total waktu layar yang dimilikinya. Jika semua orang dalam subset muncul di layar selama pengambilan gambar kamera, bahkan jika ada lebih banyak karakter daripada yang ada dalam subset , waktu untuk pengambilan gambar kamera ditambahkan ke waktu layar total subset itu.
Ada pengecualian untuk subset kosong - hanya adegan dengan tidak ada dari 6 karakter utama yang dihitung.
Jadi analisis contoh di atas adalah:
980
2504 C
2200 J
2345 M
2345 P
2504 R
2504 S
2000 CJ
2000 CM
2000 CP
2504 CR
2504 CS
2000 JM
2000 JP
2000 JR
2000 JS
2345 MP
2000 MR
2000 MS
2000 PR
2000 PS
2504 RS
2000 CJM
2000 CJP
2000 CJR
2000 CJS
2000 CMP
2000 CMR
2000 CMS
2000 CPR
2000 CPS
2504 CRS
2000 JMP
2000 JMR
2000 JMS
2000 JPR
2000 JPS
2000 JRS
2000 MPR
2000 MPS
2000 MRS
2000 PRS
2000 CJMP
2000 CJMR
2000 CJMS
2000 CJPR
2000 CJPS
2000 CJRS
2000 CMPR
2000 CMPS
2000 CMRS
2000 CPRS
2000 JMPR
2000 JMPS
2000 JMRS
2000 JPRS
2000 MPRS
2000 CJMPR
2000 CJMPS
2000 CJMRS
2000 CJPRS
2000 CMPRS
2000 JMPRS
2000 CJMPRS
Kita dapat melihat bahwa J
(hanya Joey) memiliki 2200ms waktu layar karena ia memiliki 200 sendiri dan 2000 dengan semua orang.
Tantangan
Tulis program yang menggunakan string atau file teks seperti
504 CRS
200 J
345 MP
980
2000 CJMPRS
di mana setiap baris memiliki formulir [time in ms] [characters on screen]
, dan menampilkan jumlah total waktu yang masing-masing dari 64 himpunan bagian dari 6 karakter yang dihabiskan di layar, di mana setiap baris memiliki formulir [total time in ms for subset] [characters in subset]
(seperti di atas).
Input dapat diambil sebagai string ke stdin, baris perintah, atau fungsi, atau dapat berupa nama file teks yang berisi data.
- Angka milidetik akan selalu berupa bilangan bulat positif.
- Huruf karakter akan selalu berurutan
CJMPRS
(abjad). - Secara opsional Anda dapat mengasumsikan ada spasi tambahan ketika tidak ada karakter dalam adegan (mis
980
.). - Secara opsional Anda dapat mengasumsikan ada baris baru yang tertinggal.
- Input akan memiliki setidaknya 1 baris dan mungkin memiliki banyak arbitrer.
Keluaran harus dicetak atau dikembalikan atau ditulis ke file teks lain sebagai string 64 baris.
- Garis mungkin dalam urutan apa pun.
- Huruf karakter tidak perlu dalam
CJMPRS
urutan. - Subset dengan 0ms total waktu yang perlu dicantumkan.
- Secara opsional mungkin ada ruang tambahan setelah total bagian yang kosong.
- Secara opsional mungkin ada baris tambahan.
(Masalah ini tentu saja dapat digeneralisasi ke lebih banyak karakter, tetapi kami akan tetap menggunakan 6 karakter CJMPRS
Teman .)
Kode terpendek dalam byte menang.
Perhatikan bahwa saya benar-benar menikmati Teman dan tidak berpikir beberapa karakter lebih penting daripada yang lain. Statistiknya akan menarik. ;)
sumber
Jawaban:
Pyth, 37 byte
Cobalah online: Demonstrasi
Penjelasan:
sumber
cM
menggunakan.*
ekspansi peta. Mungkin pengecualian harus dibuat karenac
saya tidak bisa membayangkan seseorang ingin menggunakannya seperti itu di petaHaskell, 187 byte
f
adalah fungsi yang mengambil input, sebagai string multi-line tunggal, dan mengembalikan output multi-line sebagai string tunggal. Mungkin banyak yang tersisa untuk bermain golf di sini.sumber
SWI-Prolog, 381 byte
Ini diharapkan dijalankan sebagai:
Perhatikan bahwa Anda mungkin perlu mengganti setiap
`
ke"
dan setiap"
ke'
jika Anda memiliki versi lama dari SWI-Prolog.Saya bisa memotong 100+ byte jika saya tidak harus menggunakan String sebagai input.
sumber
Haskell,
150136 byteContoh penggunaan:
Pendekatan berbeda dari jawaban @ MtnViewMark : Untuk semua kombinasi
c
karakter, temukan garis-garis string input di mana perbedaanc
dan daftar dari garis-garisy
kosong ( urus kasus khusus di mana tidak ada karakter di layar (mis.980
) ->c
tidak boleh kosong atauc == y
). Ekstrak angka dan jumlah.sumber
CJam,
6758 byteCobalah online di juru bahasa CJam .
sumber
Perl 5 (5.10+), 128 byte
2 byte per baris output.
use feature "say"
tidak termasuk dalam jumlah byte.Tidak golf:
sumber
K, 95
Mengambil string seperti
"504 CRS\n200 J\n345 MP\n980 \n2000 CJMPRS"
sumber