Anda mungkin telah melihat tanda-tanda ini di pintu berbagai toko:
JAM BUKA
mon-fri 0900-1800
sat-sun 1100-1530
Tugas di sini adalah membuat tanda seperti itu, mengelompokkan hari berturut-turut dengan jam buka yang sama, dari daftar jam buka selama seminggu penuh. Perhatikan bahwa minggu "membungkus" untuk apa yang dianggap berturut-turut.
Memasukkan:
- 7 elemen, mewakili jam buka untuk setiap hari dalam seminggu, dimulai dengan hari Senin.
- Setiap elemen adalah string, pada formulir XXXX-XXXX
Input contoh:
0900-1800 0900-1800 0930-1730 0930-1730 0900-1500 1100-1500 1100-1500
- Tidak apa-apa untuk mengirim input sebagai array (misalnya sebagai input ke fungsi jika Anda tidak membaca dari stdin)
Keluaran:
- Daftar jam buka, di mana hari berturut-turut dengan jam buka yang sama ditampilkan sebagai rentang. Perhatikan bahwa hari Minggu (hari terakhir) dan Senin (hari pertama) juga merupakan hari berturut-turut.
- Hari di mana hari itu tidak memiliki jam buka yang sama dengan hari-hari sebelum atau sesudah dicetak dengan sendirinya
- Hari-hari ditentukan sebagai tiga huruf kecil: Senin malam, Minggu
- Ingat bahwa elemen pertama dalam input sesuai dengan mon, di samping sel dll.
- Jam buka ditampilkan seperti pada input
Dua contoh
mon-fri 0900-1800, sat-sun 1100-1500 mon-wed 1030-1530, thu 100-1800, fri-sun 1200-1630
Outputnya harus disortir, sehingga rentang muncul sesuai urutan hari dalam seminggu. Senin lebih disukai menjadi yang pertama, tetapi mungkin terjadi itu bukan yang pertama dalam suatu kelompok karena minggu itu berakhir. Jadi dalam hal ini sel adalah rentang pertama.
tue-fri 0900-1800, sat-mon 1100-1500
Jangan berkelompok kecuali berturut-turut, di sini Rabu dan Jumat memiliki jam buka yang sama tetapi dipisahkan oleh hari Kamis dengan jam buka yang berbeda sehingga mereka didaftar sendiri.
mon-tue 1000-1200, wed 0900-1500, thu 1000-1800, fri 0900-1500, sat-sun 1000-1500
- Outputnya dapat dipisahkan dengan koma sebagai contoh di sini, atau dipisahkan oleh baris baru seperti pada contoh di atas.
Uji kasus
Baris pertama adalah input, baris kedua adalah output yang diharapkan
0900-1800 0900-1800 0900-1800 0900-1800 0900-1800 1100-1500 1100-1500
mon-fri 0900-1800, sat-sun 1100-1500
0900-1800 0900-1800 0900-1800 0930-1700 0900-1800 1100-1500 1100-1500
mon-wed 0900-1800, thu 0930-1700, fri 0900-1800, sat-sun 1100-1500
1100-1500 0900-1800 0900-1800 0900-1800 0900-1800 1100-1500 1100-1500
tue-fri 0900-1800, sat-mon 1100-1500
1100-1500 1100-1500 0900-1800 0900-1800 0900-1800 0900-1800 1100-1500
wed-sat 0900-1800, sun-tue 1100-1500
1200-1500 1100-1500 0900-1800 0900-1800 0900-1800 0900-1800 1100-1500
mon 1200-1500, tue 1100-1500, wed-sat 0900-1800, sun 1100-1500
Aturan
Ini adalah kode-golf, jadi jawaban tersingkat dalam byte menang.
Jawaban:
JavaScript (ES6),
182173170163157 byteDisimpan 6 byte dengan bantuan edc65
Mengambil input sebagai array string dan langsung mencetak hasilnya ke konsol:
Diformat dan dikomentari
Uji kasus
sumber
D='montuewedthufrisatsun'.match(/.../g)
menggunakanD
sebagai array bukan fungsi harus menyimpan beberapa byteD()
dapat dipanggil dengan-1
(ketika kita mencari 'hari sebelum Senin'), yang berfungsi dengansubstr()
tetapi tidak akan bekerja dengan array.Batch, 334 byte
Mengambil input sebagai parameter baris perintah, output setiap grup pada baris terpisah. Bekerja dengan membandingkan jam setiap hari dengan hari sebelumnya, melacak
f
sebagai hari pertama dalam grup,h
sebagai jam untuk grup itu,l
sebagai hari terakhir dalam grup danw
ketika kelompok terakhir kembali ke awal minggu. Ketika ketidakcocokan ditemukan kelompok sebelumnya dicetak kecuali pembungkus minggu berlaku. Akhirnya ketika semua hari diproses, kelompok terakhir disesuaikan untuk setiap minggu pembungkus dan apakah semua jam ternyata sama sebelum menjadi output.0
digunakan sebagai pengganti karena string kosong membutuhkan lebih banyak byte untuk dibandingkan di Batch.sumber
Jelly ,
87 84 8075 byte'
"flat" yang cepat)Cukup yakin ada cara yang lebih baik tetapi untuk saat ini:
TryiItOnline
Bagaimana?
sumber
JavaScript (ES6),
171169 byteMembawa input sebagai array dan output ke konsol pada baris terpisah. Ini hampir persis port jawaban Batch saya;
f
sekarang default ke string kosong tentu saja, sementara saya juga bisa defaultl
danw
ke'sun'
(menggunakan nilai sentinel menyelamatkan saya 3 byte di Batch karena saya bisa menggabungkan inisialisasi ke dalamset/a
).sumber
BaCon ,
514496455 byteProgram BASIC di bawah ini ditunjukkan dengan lekukannya. Tetapi tanpa lekukan itu terdiri dari 455 byte.
Idenya adalah untuk menggunakan jadwal waktu sebagai indeks ke array asosiatif. Kemudian, setiap hari mewakili sedikit: Senin = bit 0, Selasa = bit 1, Rabu = bit 2 dan seterusnya. Nilai aktual untuk anggota array asosiatif dihitung oleh bit masing-masing hari menggunakan biner OR.
Setelah itu, masalah memeriksa berapa banyak bit berturut-turut hadir dalam anggota array asosiatif, dimulai dengan bit 0.
Dalam kasus bit 0 dan juga bit 6 diatur, ada bungkus minggu. Dalam hal ini, mulailah mencari awal dari urutan bit berikutnya, hafalkan posisi awal ini. Cetak sisa urutan, dan segera setelah bit 6 tercapai, rentang hari harus diakhiri dengan posisi yang dihafal sebelumnya.
Menggunakan panggilan berikut untuk memanggil SUB:
Keluaran :
sumber