(Saya bermaksud memposting ini sementara 1542: Konflik Penjadwalan masih xkcd saat ini, tetapi saya memiliki konflik penjadwalan.)
Memasukkan
Input akan menjadi daftar 3n
elemen, yang mewakili n
acara. Elemen pertama dalam setiap kelompok 3 akan menjadi nama acara; yang kedua dan ketiga, waktu mulai dan berakhir. Sebagai contoh:
foo 12 34 bar 56 78
mewakili suatu peristiwa foo
yang dimulai pada "waktu 12" (waktu diwakili hanya dengan bilangan bulat; Anda dapat menganggapnya sebagai menit lewat tengah malam) dan berakhir pada 34, dan acara kedua bar
yang dimulai pada 56 dan berakhir pada 78.
Nama-nama peristiwa akan selalu hanya terdiri dari karakter alfanumerik, dan waktu akan selalu menjadi bilangan bulat ≥ 0 dan <1440. Waktu akhir akan selalu setidaknya 1 lebih besar dari waktu mulai. Mereka tidak dijamin untuk disortir dengan cara apa pun.
Jika Anda mau, Anda bisa menganggap ini sebagai string yang dipisahkan oleh spasi; jika tidak, harus diambil sebagai array, daftar, vektor, atau setara bahasa Anda.
Keluaran
Outputnya harus berupa daftar nama acara yang dipisahkan oleh ruang. Aturan yang akan menampilkan nama acara adalah sebagai berikut:
Tak satu pun dari peristiwa yang Anda hasilkan dapat saling bertentangan. Misalnya, dengan input
a 0 10 b 5 15
, Anda mungkin tidak menampilkan keduanyaa
danb
karena konflik kali (yaitu tumpang tindih sebagian). Jika suatu acara berakhir persis seperti yang lain dimulai, Anda dapat memasukkan keduanya.Anda tidak boleh menampilkan acara yang disebut
NSCC
("Kompetisi Konflik Penjadwalan Nasional"), yang akan selalu ada persis satu di input. Anda juga harus menampilkan setidaknya satu peristiwa yang bertentangan (sebagian tumpang tindih) denganNSCC
(dan akan selalu ada setidaknya satu di antaranya).Anda harus menampilkan sebanyak mungkin peristiwa sambil mengikuti dua aturan di atas. (Ini agar Anda terlihat sesibuk mungkin, sehingga kehilangan NSCC tampaknya lebih kredibel.)
Ini juga dapat berupa output sebagai string yang dipisahkan oleh spasi atau array, daftar, vektor, dll.
Mungkin ada lebih dari satu kemungkinan hasil.
Uji kasus
Perhatikan bahwa output yang tercantum hanya contoh. Kode Anda dapat menampilkan sesuatu yang berbeda, selama masih mengikuti tiga aturan di atas (terutama, ini berarti harus ada jumlah peristiwa yang sama dengan contoh).
Masuk: UnderwaterBasketWeavingConvention 50 800 NSCC 500 550
Keluar:UnderwaterBasketWeavingConvention
Masuk: SconeEating 0 50 RegexSubbing 45 110 CodeGolfing 95 105 NSCC 100 200
Keluar:SconeEating CodeGolfing
Masuk: VelociraptorHunting 0 300 NerdSniping 200 500 SEChatting 400 700 DoorknobTurning 650 750 NSCC 725 775
Keluar:NerdSniping DoorknobTurning
Masuk: NSCC 110 115 A 100 120 B 120 140 C 105 135 D 100 105 E 135 500
Keluar:C D E
Masuk: A 800 900 NSCC 700 1000 B 650 750 C 950 1050 D 655 660 E 660 665 F 1030 1040 G 1040 1060
Keluar:A D E F G
Masuk: A 10 11 B 11 12 C 12 13 D 13 14 NSCC 15 1090 E 10 16
Keluar:E
Jangan ragu untuk menambahkan lebih banyak kasus uji dalam edit jika ada kasus tepi yang saya lewatkan.
Aturan
Kode Anda harus selesai dalam waktu 30 detik untuk semua kasus uji yang disediakan (ini lebih merupakan pemeriksaan kewarasan, karena mungkin harus menyelesaikan lebih cepat untuk semua kasus uji yang digabungkan) pada mesin pribadi yang masuk akal.
Ini adalah kode-golf , jadi kode terpendek dalam byte menang.
underwaterBasketWeavingConvention 50 800 nscc 550
bukan contoh Anda?Jawaban:
Pyth, 45 byte
Yang ini cukup sulit untuk bermain golf. Ditemukan beberapa solusi 45 byte, yang ini mungkin yang paling eksotis, karena menggunakan
A
(pair-assign) dan.g
(group-by).Cobalah secara online: Demonstrasi atau Uji harness
Penjelasan
sumber
SWI-Prolog,
537524516502447436 bytePenjelasan singkat tentang apa yang masing-masing predikat lakukan:
z(A,B)
memeriksa bahwa suatu peristiwa A tidak bertentangan dengan acara apa pun dari daftar acara Bu(A,B)
memeriksa bahwa setiap peristiwa dalam daftar A tidak bertentangan dengan peristiwa apa pun dalam daftar B (digunakan untuk memeriksa bahwa tidak ada konflik dalam daftar A dengan meneleponu(A,A)
)y(A,B,C)
membagi Daftar menjadi daftar kembar tiga (untuk mengubah input menjadi daftar acara)d(A)
mencetak nama-nama acara dalam daftar Al(A,R)
mengevaluasi daftar acara terlama R yang terdapat dalam daftar daftar Av(A,NSCC,C,R)
mengembalikan daftar R yang berisi setiap daftar acara di A yang tidak memiliki konflik internal dan konflik dengan NSCC acaras(A,B)
benar jika B adalah himpunan bagian dari Ax(A)
predikat utama, A adalah input.Uji kasus : jalankan
test.
di interpreter setelah memuat kode di atas dengan yang berikut ditambahkan setelah itu:Ini menghabiskan waktu saya lebih lama dari yang saya kira. Ini mungkin bisa bermain golf lebih signifikan. Anda juga mungkin dapat menggunakan berbagai pustaka pemrograman kendala yang ada untuk mendapatkan solusi yang lebih pendek.
Sunting: Terima kasih kepada @Oliphaunt untuk gagasan menggunakan
A:B:C
alih-alih[A,B,C]
untuk kembar tiga. Menghemat 14 byteSunting2: Sekali lagi terima kasih kepada @Oliphaunt karena menunjukkan bahwa predikat `` t / 3` tidak berguna. Menghemat 55 byte
Sunting3: Memperoleh 11 byte menggunakan tata bahasa klausa definitif pada predikat
y
dand
.sumber
A/B/C
Bukannya[A,B,C]
untuk kembar tiga, menghemat 10 byte; 2. Bisakah Anda menggunakan\+
bukannot
? 3. Bisakah Anda menjelaskan mengapa Anda membutuhkan potongan terakhirx(A)
?:
alih-alih/
mengambil manfaat dari asosiasi-kanan pembuat, yaitu agar saya dapat menulisA:_
sebagai singkatanA:_:_
(tetapiA+B/C
berfungsi dengan baik: Anda kemudian dapat menggunakanA+_
). Ngomong-ngomong, juga dalam sumber asli Anda yang bisa Anda gunakan[A|_]
sebagai ganti[A,_,_]
. Catat akhirnya bahwa versi SWI-Prolog saya tidak punyanth0/4
, jadi saya gunakanselect/3
saja.t(S,T)
tetapi kemudian lupa. Sekarang teruji: Anda dapat menyimpan 55 byte lebih banyak dengan menjatuhkannya seluruhnya dan langsung menelepons(E,L)
darisetof/3
.JavaScript ( ES6 ), 228
Percobaan kedua, saya harap yang ini berhasil.
Target saya adalah urutan kejadian terpanjang yang memiliki konflik waktu, tetapi tidak ada konflik waktu ketika acara NSCC dihapus. Urutan yang dimodifikasi ini dengan NSCC dihapus adalah output yang diminta.
Saya menggunakan Pencarian Pertama Breadth memeriksa antrian solusi kandidat, dimulai dengan terpanjang (yang pertama adalah daftar awal). Dari solusi calon n kejadian saya membangun dan enqueue n solusi calon lebih, menghapus salah satu peristiwa dan menjaga yang lain.
Solusi kandidat valid jika ada konflik waktu 'apa adanya', tetapi ketika acara NSCC disaring tidak ada konflik. Saya menggunakan subfungsi K untuk memeriksa konflik.
Mungkin bisa bermain golf sedikit lebih ...
Tes menjalankan cuplikan di bawah ini (menjadi EcmaScript 6, hanya FireFox)
sumber
Java, 828 byte
Mungkin ada implementasi Java yang lebih ringkas di luar sana, tapi inilah tikaman saya:
sumber
else return
.Python, 373 karakter
Buat semua kombinasi yang mungkin dan periksa masing-masing.
Uji
Memasukkan:
["NSCC",110,115,"A",100,120,"B",120,140,"C",105,135,"D",100,105,"E",135,500]
Keluaran:
sumber